Files
OBD2-car-display/due_obd2/obd2_timer.c
SemvdH 33e7bb7f66 Update obd2_timer.c, add comment about clearing status register
added reference to datasheet section 13.4
2023-10-27 09:43:01 +02:00

35 lines
1.1 KiB
C

// #include "sam3xa/include/component/component_rtt.h"
// #include "sam3xa/include/sam3x8e.h"
#include "obd2_timer.h"
void obd2_timer_init(void)
{
/* enable the timer: reset the RTT, enable the alarm interrupt, set the prescaler value equal to the processor clock speed*/
RTT->RTT_MR = RTT_MR_RTTRST | RTT_MR_ALMIEN | RTT_MR_RTPRES(32768/2);
/* set the alarm value to 0*/
RTT->RTT_AR = 0;
/* enable the interrupt*/
NVIC_EnableIRQ(RTT_IRQn);
}
void obd2_timer_reset()
{
/* To prevent several executions of the interrupt handler,
the interrupt must be disabled in the interrupt handler
and re-enabled when the status register is cleared.
*/
/* disable interrupts */
RTT->RTT_MR &= ~RTT_MR_ALMIEN;
/* clear the status register (reading it clears it)
SAM3X datasheet section 13.4: Reading the RTT_SR status register resets the RTTINC and ALMS fields.
*/
RTT->RTT_SR;
/* set the alarm value to 0*/
RTT->RTT_AR = 0;
/* re-enable the interrupt*/
RTT->RTT_MR |= RTT_MR_ALMIEN;
/* reset the RTT*/
RTT->RTT_MR |= RTT_MR_RTTRST;
}