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.

64位定时器捕捉边沿



我使用WT0CCP0设置捕捉上升沿,进不去中断,可是换成T2CCP0就可以了

难道是64位定时器不能设置捕捉边沿吗?我的定时器已经拆分了啊

TM-4C123GH6PM

  • T0CCP0和T2CCP0有什么区别么?为什么一个可以,一个不可以呢?

  • 电路上接的管脚对吗?

    都可以捕捉的。贴电路,贴源码,大家一起看看。

  • //四个红外的输入口
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER0); // 启用Timer3模块
    //红外1,左轮前
    GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);
    GPIOPinConfigure(GPIO_PC4_WT0CCP0); // 配置GPIO脚为使用Timer0捕捉模式
    GPIOPinTypeTimer(GPIO_PORTC_BASE, GPIO_PIN_4);
    GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    TimerConfigure(WTIMER0_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME); // 配置使用Timer0的TimerA模块为边沿触发减计时计数模式
    TimerControlEvent(WTIMER0_BASE, TIMER_A, TIMER_EVENT_POS_EDGE); // 使用边沿触发
    TimerLoadSet(WTIMER0_BASE, TIMER_A, 0xffff); //设置计数范围为32000到0,为2ms,最长可以测0.7m,超声测距了
    TimerIntRegister(WTIMER0_BASE, TIMER_A, WTimer0AIntHandler); // 注册中断处理函数以响应触发事件
    IntPrioritySet(INT_WTIMER0A, 0<<5);
    TimerIntEnable(WTIMER0_BASE, TIMER_CAPA_EVENT); // 时钟中断允许,中断事件为Capture模式中边沿触发
    IntEnable(INT_WTIMER0A); // NVIC中允许定时器A模块中断
    TimerEnable(WTIMER0_BASE, TIMER_A);

    IntMasterEnable(); // 系统总中断开

    void WTimer0AIntHandler(void)
    {
    TimerIntClear(WTIMER0_BASE, TimerIntStatus(WTIMER0_BASE, TIMER_CAPA_EVENT)); //清除中断
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF);
    BackForth(0);
    SysCtlDelay(SysCtlClockGet() / 6);
    if(distance(HEAD, PitPos[GOTOPIT_INDEX]) <25);
    GOTOPIT_INDEX = GOTOPIT_INDEX == 3 ? 0 : GOTOPIT_INDEX + 1;
    }

  • //四个红外的输入口
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER0); // 启用Timer3模块
    //红外1,左轮前
    GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);
    GPIOPinConfigure(GPIO_PC4_WT0CCP0); // 配置GPIO脚为使用Timer0捕捉模式
    GPIOPinTypeTimer(GPIO_PORTC_BASE, GPIO_PIN_4);
    GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    TimerConfigure(WTIMER0_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME); // 配置使用Timer0的TimerA模块为边沿触发减计时计数模式
    TimerControlEvent(WTIMER0_BASE, TIMER_A, TIMER_EVENT_POS_EDGE); // 使用边沿触发
    TimerLoadSet(WTIMER0_BASE, TIMER_A, 0xffff); //设置计数范围为32000到0,为2ms,最长可以测0.7m,超声测距了
    TimerIntRegister(WTIMER0_BASE, TIMER_A, WTimer0AIntHandler); // 注册中断处理函数以响应触发事件
    IntPrioritySet(INT_WTIMER0A, 0<<5);
    TimerIntEnable(WTIMER0_BASE, TIMER_CAPA_EVENT); // 时钟中断允许,中断事件为Capture模式中边沿触发
    IntEnable(INT_WTIMER0A); // NVIC中允许定时器A模块中断
    TimerEnable(WTIMER0_BASE, TIMER_A);

    IntMasterEnable(); // 系统总中断开

    void WTimer0AIntHandler(void)
    {
    TimerIntClear(WTIMER0_BASE, TimerIntStatus(WTIMER0_BASE, TIMER_CAPA_EVENT)); //清除中断
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF);
    BackForth(0);
    SysCtlDelay(SysCtlClockGet() / 6);
    if(distance(HEAD, PitPos[GOTOPIT_INDEX]) <25);
    GOTOPIT_INDEX = GOTOPIT_INDEX == 3 ? 0 : GOTOPIT_INDEX + 1;
    }