以下ではrtc_callback()
、ラインで何が起こっていRTC[QM_RTC_0].rtc_ccr |= RTC_CCR_INTERRUPT_ENABLE;
ますか?
以下のレジスタマップも含めました。
RTC では、カウンター制御レジスタとは何ですか?また、なぜ割り込みを有効にするのですか? それとも、これは何が起こっているのですか?
define BIT(x) (1U << (x))
#define RTC_CCR_INTERRUPT_ENABLE BIT(0)
//==========================================================================
void rtc_callback(void *data) {
// Bump the time count onwards
rtc_set_alarm(QM_RTC_0, (RTC[QM_RTC_0].rtc_ccvr + ALARM));
RTC[QM_RTC_0].rtc_ccr |= RTC_CCR_INTERRUPT_ENABLE;
}
//==========================================================================
int rtc_init(void (*cb)(void *)) {
rtc_config_t cfg;
cfg.init_val = 0;
cfg.alarm_en = true;
cfg.alarm_val = ALARM;
cfg.callback = rtc_callback;
cfg.callback_data = NULL;
global_rtc_cb = cb;
irq_request(IRQ_RTC_0, rtc_isr_0);
clk_periph_enable(CLK_PERIPH_RTC_REGISTER | CLK_PERIPH_CLK);
rtc_set_config(RTC_0, &cfg);
return 0;
}
/** RTC register map. */
typedef struct {
RW uint32_t rtc_ccvr; /**< Current Counter Value Register */
RW uint32_t rtc_cmr; /**< Current Match Register */
RW uint32_t rtc_clr; /**< Counter Load Register */
RW uint32_t rtc_ccr; /**< Counter Control Register */
RW uint32_t rtc_stat; /**< Interrupt Status Register */
RW uint32_t rtc_rstat; /**< Interrupt Raw Status Register */
RW uint32_t rtc_eoi; /**< End of Interrupt Register */
RW uint32_t rtc_comp_version; /**< End of Interrupt Register */
} rtc_reg_t;