Xplained pro SAM4SD32C-计时器1-无法在RA寄存器上写入

时间:2018-10-23 16:26:17

标签: c timer atmel

我在XPlained Pro Sam4s板的SAM4SD32C的计时器1配置上苦苦挣扎... 我首先使用定时器0,然后可以生成所需的波形。

因此,我复制了代码,将其调整为适用于计时器1的代码,以按照相同的技术生成其他波形。在调试时,我注意到我无法进入中断程序。我进一步检查,发现无法使用tc_write_ra()tc_write_rc()函数将定时器1的寄存器RA和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寄存器,并为其应用了一个mask = TC_CMR_WAVE,因为在Sam4sd16c数据表中说,如果 如果TC_CMRx.WAVE = 1,则可以通过W / R访问RA寄存器。并且在调试时 我注意到这个测试是正确的...所以我不知道为什么我不能在计时器1上写东西:(

1 个答案:

答案 0 :(得分:0)

好吧, 我一直在检查我的代码,我想我理解错误是什么...

TC0中有3个计时器:ID_TC0(通道0),ID_TC1(通道1)和ID_TC2(通道2)

在TC1中,还有3个计时器:ID_TC3(通道0),ID_TC4(通道1)和ID_TC5(通道2)

要激活特定的通道,应使用功能parentClassName::激活正确的时钟外围设备,应用校正后,上述代码中调用的所有其余功能均能正常工作。