ATMEL SAM3X 芯片定时器通道2 通道3怎么设置

2019-07-15 12:43发布

各位大神,当我使用atmel的SAM3x8E芯片设置定时器做1s定时实验时 使用TC0通道0时可以实现功能,但使用TC0的其他通道或是使用TC1和TC2两个定时器都无法实现功能是怎么回事?
以下是我写的代码 其中TC0可以实现功能,TC2却无法实现功能
#include "sam3xa.h"
#include "header.h"
void Init_output(Pio *p,uint32_t pio_pin)
{
    PMC->PMC_PCER0=1<<ID_PIOB;

    p->PIO_PER=pio_pin;
   
   
   
    p->PIO_OER=pio_pin;  
   

   
   
    p->PIO_PUER=pio_pin;

   
}
void Init_tc(void)
{
   
        Init_output(PIOB,PIO_PB20);


        PMC->PMC_PCER0=(1UL<<ID_TC0);
      
        
    TC0->TC_CHANNEL[0].TC_CMR=TC_CMR_WAVE    //波形模式
                        |TC_CMR_TCCLKS_tiMER_CLOCK4    //时钟4,:MCK/128
                                 
                  |TC_CMR_WAVSEL_UP_RC;   

       TC0->TC_CHANNEL[0].TC_CCR=TC_CCR_CLKEN|TC_CCR_SWTRG;//时钟使能 ,软件控制
   
        
    //波形仅上升RC比较时触发
    /*设置RC产生中断的时间*/
    //TC0->TC_CHANNEL[0].TC_RC=TC_RC_RC(656250);//1s定时
        
        TC0->TC_CHANNEL[0].TC_RC=TC_RC_RC(600100);//(655360);//定时
        TC0->TC_CHANNEL[0].TC_SR;
        
    TC0->TC_CHANNEL[0].TC_IER=TC_IER_CPCS;//RC比较时产生中断
   
    /*使能TC0中断*/
    NVIC_DisableIRQ(TC0_IRQn);
    NVIC_ClearPendingIRQ(TC0_IRQn);
    NVIC_SetPriority(TC0_IRQn,1);
    //NVIC_EnableIRQ(TC0_IRQn);
    NVIC->ISER[0]=1<<TC0_IRQn;
   
   
}
void TC0_Handler(void)
{
  uint8_t status = TC0->TC_CHANNEL[0].TC_SR;

    /* 判断中断是否为RC比较触发的 */
    if (status & TC_SR_CPCS)
        {
          if ((PIOB->PIO_ODSR &PIO_PB20))
        {
            PIOB->PIO_CODR = PIO_PB20;
                        
        }
        else
        {
            PIOB->PIO_SODR = PIO_PB20 ;
        }
        }
        
}

void Init_tc2(void)
{
   

        
        Init_output(PIOB,PIO_PB18);
  

        PMC->PMC_PCER0=(1UL<<ID_TC2);
        
        
    TC2->TC_CHANNEL[0].TC_CMR =TC_CMR_WAVE    //波形模式
                                  |TC_CMR_BURST_NONE
                        |TC_CMR_TCCLKS_TIMER_CLOCK3    //时钟4,:MCK/128
                  |TC_CMR_WAVSEL_UP_RC;    //波形仅上升RC比较时触发

            
        TC2->TC_CHANNEL[0].TC_RC=TC_RC_RC(655360);//定时
    TC2->TC_CHANNEL[0].TC_IER=TC_IER_CPCS;//RC比较时产生中断
    TC2->TC_CHANNEL[0].TC_CCR=TC_CCR_CLKEN|TC_CCR_SWTRG;//时钟使能 ,软件控制

   
    /*使能TC2中断*/
    NVIC_DisableIRQ(TC2_IRQn);
    NVIC_ClearPendingIRQ(TC2_IRQn);
    NVIC_SetPriority(TC2_IRQn,0);
    NVIC_EnableIRQ(TC2_IRQn);
       // NVIC->ISER[0]=1<<TC2_IRQn;
   
}
//int n=0;
void TC2_Handler(void)
{
    uint8_t status = TC2->TC_CHANNEL[0].TC_SR;

    /* 判断中断是否为RC比较触发的 */
    if (status & TC_SR_CPCS)
    {

               
            PIOB->PIO_SODR = PIO_PB18;
        
    }
        PIOB->PIO_SODR = PIO_PB18;
      
        
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
lee_st
1楼-- · 2019-07-15 16:46
 精彩回答 2  元偷偷看……
hyj5014
2楼-- · 2019-07-15 18:11
lee_st 发表于 2016-11-8 11:04
没玩过这个片子,我用的sam4s,给你我的rtt,参考一下,中间用的几个函数,你看看官方的库函数吧
void configure_rtt(uint32_t u32_mdata)
{

好的谢谢 已经解决。
lee_st
3楼-- · 2019-07-15 21:33
解决就好,有时间一起讨论
hyj5014
4楼-- · 2019-07-15 23:56
lee_st 发表于 2016-11-9 00:46
解决就好,有时间一起讨论

以后一定多多请教
lee_st
5楼-- · 2019-07-16 00:33
互相学习吧,,,,,
lee_st
6楼-- · 2019-07-16 05:05
 精彩回答 2  元偷偷看……

一周热门 更多>