我使用WT0CCP0设置捕捉上升沿,进不去中断,可是换成T2CCP0就可以了
难道是64位定时器不能设置捕捉边沿吗?我的定时器已经拆分了啊
TM-4C123GH6PM
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.
我使用WT0CCP0设置捕捉上升沿,进不去中断,可是换成T2CCP0就可以了
难道是64位定时器不能设置捕捉边沿吗?我的定时器已经拆分了啊
TM-4C123GH6PM
//四个红外的输入口
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;
}