主题中讨论的其他器件:TM4C1294NCPDT、 EK-TM4C1294XL、 TM4C123
我在 Tiva 评估板器件型号 EK-TM4C1294XL 上使用 CCS 6.1.2 TIRTOS 2.16.0.08、编译器5.2.7和 TM4C1294NCPDT Micro
我想配置一个计时器来对微控制器输入引脚上的脉冲进行计数。 我想使用全宽定时器、因为我想对超过65535个事件使用超过16位的定时器。 我在输入边沿计数模式下读取、我只能使用24位(CPU 文档的第13.3.3.3节)
假设我使用的是 Timer2、我将用于对脉冲进行计数的评估板上的引脚是 PA4。
当我运行下面的代码时,我认为计时器是自由运行的,不对实际脉冲进行计数,因为如果我不对输入引脚 PA4进行脉冲,我从计时器读取的值仍在变化。 下面是两个函数、一个执行读取操作、另一个执行初始化和配置操作。
我的问题是:
1) 1) 为什么不对 PA4引脚上的脉冲进行计数、并且看起来是自由运行的。
2) 2)永远不会调用 IRQ 回调、我不知道原因。
3) 3) 我不清楚如何处理全宽计时器、我应该使用 TIMER_MOR_A 还是 TIMER_A 等?
谢谢、
道格
无符号长整型 Timer2ReadCount (空)
{
无符号超长 timerCount;
timerCount = TimerValueGet (TIMER2_base、timer_A);
返回 timerCount;
}
void timerCounterInit (void)//使用 Tiva CPU 上的引脚 PA4 (请参阅 CPU 文档 P 1808/1890)
{
Hwi_handle myHwi;
Hwi_Params HwiParams;
ERROR_Block EB;
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);//启用定时器。
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);//启用用于引脚的 GPIO。
MAP_GPIOPinConfigure (GPIO_PA4_T2CCP0);//设置备用功能
GPIOPinTypeTimer (GPIO_Porta_base、GPIO_PIN_4);//将引脚配置为计时器 // GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPD);
MAP_TimerConfigure (TIMER2_base、(TIMER_CFG_A_CAP_COUNT));//倒计数第503/650页 Rom 文档
MAP_TimerControlEvent (TIMER2_base、TIMER_Both、TIMER_EVENT_POS_EDGE);//配置边沿。
MAP_TimerLoadSet (TIMER2_base、TIMER_Both、0xFFFF);//
//安装 IRQ
ERROR_INIT (&EB);
Hwi_Params_init (hwiParams);
myHwi = Hwi_create (INT_TIMER2A_TM4C123、Timer2IntHandler、&hwiParams、&EB);
if (NULL ==myHwi)
{
printf ("为计时器安装 IRQ %d 时出错"、INT_TIMER2A_TM4C123);
}
其他
{
printf ("确定为计时器安装 IRQ %d "、INT_TIMER2A_TM4C123);
}
MAP_TimerIntEnable (TIMER2_base、TIMER_CAP_EVENT | TIMER_CAP_MATCH);//选择 IRQ 以启用。
ROM_IntEnable (INT_TIMER2A_TM4C129);//启用 IRQ 39。 ROM 用户文档页513/650 Rom 文档
//rom_IntEnable (INT_TIMER2A);
MAP_TimerEnable (TIMER2_base、TIMER_Both);//启用计时器。 ROM 用户文档页509/650 Rom 文档
}