0

以下では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;
4

0 に答える 0