Я борюсь с конфигурацией таймера 1 SAM4SD32C платы XPlained Pro Sam4s ... Сначала я использовал таймер 0, и я мог генерировать сигнал, который мне нужен.
Итак, я скопировал код, адаптировал его для таймера 1, чтобы генерировать другой сигнал, следуя той же методике.Во время отладки я заметил, что не могу войти в режим прерывания.Далее я проверил и заметил, что не могу записать в регистр RA и RC таймера 1, используя функции tc_write_ra()
и tc_write_rc()
.
Вот часть моего кода, которая, по моему мнению, может помочь ответить на мою проблему.Если вам нужно больше кода, спросите в комментариях.
#define TIMER_DOOR TC1
#define TIMER_DOOR_ID ID_TC1
#define TIMER_DOOR_CHANNEL 1
#define TIMER_DOOR_Handler TC1_Handler
#define TIMER_DOOR_IRQn TC1_IRQn
...
void ConfigureDoorTimer(uint32_t ra, uint32_t rc)
{
uint32_t debug1, debug2 = 0;
TcChannel *tc_channel =0;
sysclk_enable_peripheral_clock(TIMER_DOOR_ID);
tc_init(TIMER_DOOR, TIMER_DOOR_CHANNEL,
TC_CMR_TCCLKS_TIMER_CLOCK4 // Clock selected: MCK/128 : 1 cycle = 128 / 120000000 = 1.06 usec
| TC_CMR_WAVE // Waveform mode is enabled
| TC_CMR_WAVSEL_UP_RC); // UP mode with automatic trigger on RC Compare
tc_channel = TIMER_DOOR->TC_CHANNEL + TIMER_DOOR_CHANNEL;
tc_channel->TC_CMR = tc_channel->TC_CMR;
debug1 = (uint32_t) tc_channel->TC_CMR & TC_CMR_WAVE;
/* Configure max value before overflow */
tc_write_ra(TIMER_DOOR, TIMER_DOOR_CHANNEL, ra);
tc_write_rc(TIMER_DOOR, TIMER_DOOR_CHANNEL, rc);
NVIC_EnableIRQ(TIMER_DOOR_IRQn);
NVIC_SetPriority(TIMER_DOOR_IRQn, TIMER_DOOR_IRQ_PRIO);
tc_enable_interrupt(TIMER_DOOR, TIMER_DOOR_CHANNEL, TC_IER_CPAS | TC_IER_CPCS);//Enables the RA, RC Compare Interrupt
tc_stop(TIMER_DOOR, TIMER_DOOR_CHANNEL); // will be started later
}
Вы можете видеть в этом примере, что я пытался прочитать регистр CMR, применяя к нему маску = TC_CMR_WAVE, потому что это сказано в Sam4sd16cтаблица данных, что если если TC_CMRx.WAVE = 1, то регистр RA доступен W / R.И во время отладки я заметил, что этот тест был правдивым ... Так что я не знаю, почему я не могу написать на таймере 1 :(