主题中讨论的其他器件:TM4C129CNCZAD、 DK-TM4C129X、 SEGGER
您好!
在 TM4C 微控制器上‘Timer Compare Action Mode’(计时器比较操作模式)时出现问题,希望您能为我们提供支持。 比较匹配时、连接的输出引脚不受影响。
环境条件:
- 目标控制器:TM4C129CNCZAD
- 当前使用的控制器:DK-TM4C129X 评估板上的 TM4C129XNCZAD
- 编译器:IAR Embedded Workbench for ARM 9.10.2.39460
用例:
为了控制我们的物理过程、我们需要将多个计时器与计时器比较操作模式相结合、以便在未来的指定时间切换数字输出、而无需处理器操作。
- 定时器 A 和 B 在16位模式下单独使用
- 定时器被配置为周期定时器、定时器间隔装载值为0xFFFF。 定时器可自由运行、并且在正常运行期间无法重新初始化。
- 数字输出只能在比较时间切换。 定时器超时一定不能影响数字输出。 物理过程与定时器周期异步。
已用配置:
- 为了配置引脚切换、GPTMTnMR 寄存器中的 TCACT 被设置为非零值。
- TnAMS 位被设定为零:捕获或者比较模式被启用。
- 对于开关、输出 GPTMTnMATCHR 寄存器根据下次开关的时间进行设置。
- 定时器中断被配置为定时器匹配中断
- GPIO 通过 MUX 连接到计时器。
问题/当前行为:
- 定时器匹配中断在比较匹配时间正确发生。 à 确定
- 在比较匹配时间内不会切换相应的输出。 à 不正常
- 相应的输出在计时器超时时时切换。 à 不正常
- TCACT 的所有非零值都不会导致比较匹配时的输出引脚动作。
代码提取:
void Timer1IntHandler(void) { // this port switch is only for testing the timer match ISR GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_3, GPIO_PIN_3); TimerIntClear(TIMER1_BASE, TIMER_TIMA_MATCH); GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_3, 0); } int main(void) { // // Run from the PLL at 120 MHz. // Note: SYSCTL_CFG_VCO_240 is a new setting provided in TivaWare 2.2.x and // later to better reflect the actual VCO speed due to SYSCTL#22. // ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_240), 120000000); // // Configure the device pins. // PinoutSet(); // // Enable the peripherals used by this example. // SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); // // Enable processor interrupts. // IntMasterEnable(); TimerConfigure(TIMER1_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PERIODIC | TIMER_CFG_A_ACT_TOGGLE); TimerLoadSet(TIMER1_BASE, TIMER_A, 0xFFFF); TimerMatchSet(TIMER1_BASE, TIMER_A, 30000); IntEnable(INT_TIMER1A); TimerIntEnable(TIMER1_BASE, TIMER_TIMA_MATCH); GPIOPinConfigure(GPIO_PD2_T1CCP0); GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_2); // configure output for ISR testing GPIOPinTypeGPIOOutput(GPIO_PORTQ_BASE, GPIO_PIN_3); GPIOPinWrite(GPIO_PORTQ_BASE, GPIO_PIN_3, 0); // // Enable the timers. // TimerEnable(TIMER1_BASE, TIMER_A); // // Loop forever while the timers run. // while(1) { } }
我们有以下问题:
- 是否可以配置定时器比较操作模式、以便仅比较匹配会影响相应的输出引脚? 计时器超时一定不能影响输出引脚。
- 在代码示例中发生了什么错误、因此无法实现所需的行为。
非常感谢您的支持。
此致、
Markus Karas