This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Tiva TM4C123GH6PM的Timer捕获程序进不了中断,求指教



void Init_Timer_Capture(void)
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);  //使能CCP所在GPIO
     SysCtlDelay(2);
     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);  //使能CCP所在GPIO
     SysCtlDelay(2);
     GPIOPinTypeTimer(GPIO_PORTB_BASE,GPIO_PIN_6|GPIO_PIN_7); //配置CCP引脚为边沿事件输入,供Timer模块使用
     GPIOPinTypeTimer(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_1);
     SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);  //使能32位定时器0,这一步是使能外设
     SysCtlDelay(2);               //配置系统外设5个周期内不能访问寄存器,这里延时6个周期
     TimerConfigure(TIMER0_BASE,TIMER_CFG_A_CAP_COUNT|TIMER_CFG_B_CAP_COUNT);
 // GPIOPinConfigure(GPIO_PB6_T0CCP0|GPIO_PB7_T0CCP1|GPIO_PF1_T0CCP1|GPIO_PF0_T0CCP0);
  GPIODirModeSet(GPIO_PORTB_BASE,GPIO_PIN_6|GPIO_PIN_7,GPIO_DIR_MODE_IN);//配置引脚PB6为捕获引脚
  GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_1,GPIO_DIR_MODE_IN);
  GPIOPinConfigure(GPIO_PB6_T0CCP0);      //配置引脚PB6为捕获引脚
  GPIOPinConfigure(GPIO_PB7_T0CCP1);      //配置引脚PB6为捕获引脚
  GPIOPinConfigure(GPIO_PF0_T0CCP0);      //配置引脚PF0为捕获引脚
  GPIOPinConfigure(GPIO_PF1_T0CCP1);      //配置引脚PF0为捕获引脚
  TimerControlEvent(TIMER0_BASE,TIMER_BOTH,TIMER_EVENT_BOTH_EDGES);
  /*配置为16位的边沿捕获增计数*/
  TimerLoadSet(TIMER0_BASE,TIMER_BOTH,200);
     TimerMatchSet(TIMER0_BASE,TIMER_A,100);//设置匹配值100次
     TimerMatchSet(TIMER0_BASE,TIMER_B,20);
     IntEnable(INT_TIMER0A); //使能Timer0A总中断
     IntEnable(INT_TIMER0B);
     TimerIntEnable(TIMER0_BASE,TIMER_CAPB_MATCH);//使能定时器的捕获计数匹配中断
     TimerIntEnable(TIMER0_BASE,TIMER_CAPA_MATCH);//使能定时器的捕获计数匹配中断
     IntMasterEnable();  //使能处理器中断
     TimerEnable(TIMER0_BASE,TIMER_A|TIMER_B);   //此句放在最后,因为定时器要先配置后使能计数
}

  • 本人遇到同样的问题,坐等解释。

  • Chao

    有两个问题:

    1.使用PF0 Timer0的T0CCP0时,需要进行解锁操作。具体参考datasheet中的commit control部分。论坛中也有相关代码参考。

    2.请问为什么使用两个IO作为CCP的输入?两个任选其一即可。

  • 可是为什么PB6的I/O也不行

  • 可是为什么PB6的I/O也不行?

  • 这个是我测试的一个很简单的程序,一开始红灯亮,进入中断蓝灯亮,对PB6输入PWM波,发现进不去中断程序。编译什么都没问题,问题不知道怎么解决。

    int main(void) {  

    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);//系统时钟工作在40MHz

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);  

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);  

    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);

     GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_6);  

    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2|GPIO_PIN_1);  

    GPIOPinConfigure(GPIO_PB6_T0CCP0);

     GPIODirModeSet(GPIO_PORTB_BASE,GPIO_PIN_6,GPIO_DIR_MODE_IN);

     TimerConfigure(TIMER0_BASE, TIMER_CFG_A_CAP_COUNT);  

    TimerControlEvent(TIMER0_BASE, TIMER_A,TIMER_EVENT_POS_EDGE);  

    TimerLoadSet(TIMER0_BASE, TIMER_A, 200);  

    TimerMatchSet(TIMER0_BASE, TIMER_A, 0);

     IntEnable(INT_TIMER0A);  

    TimerIntEnable(TIMER0_BASE, TIMER_CAPA_MATCH);

     IntMasterEnable();  

    TimerEnable(TIMER0_BASE, TIMER_A);

     while(1)  {   

    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 2);//红灯亮

     }

     }

    void Timer0IntHandler(void) {

      TimerIntClear(TIMER0_BASE, TIMER_CAPA_MATCH); // Clear the timer interrupt

       

    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);//蓝灯亮   

    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);//红灯灭  

     

    }