器件型号:MSP432E401Y
您好!
我们看到与 MSP432E4微控制器的边沿计数计时器功能相关的非常奇怪的行为。 当我们使用 Code Composer Studio 中的调试会话对微控制器进行编程时、计数的边沿数是正确的(在200ms 时间窗口内、大约44000个边沿)。 但是、一旦我们离开调试会话(在 CCS 中单击"终止"或对 MCU 进行下电上电)、计数的边沿数就不正确、大约比我们预期的要少35倍(大约1200个边沿计数)。 我们可以确认计时器引脚的输入信号没有变化。 当不在调试会话中时、所有其它功能都存在。 以下是软件工程师设置并告知我在该帖子中包含的相关功能。 在这个项目的硬件方面、请告诉我是否有一些我可以与软件工程师澄清的东西并添加到这个帖子中。
时钟设置和计时器设置功能如下所示。 采样周期是我们想要对边沿进行计数而不发生溢出的时间窗口、在本例中为200ms:
|
空 HVBoard:::ClockSetUp() { uint32_t SamplePeriod;
SamplePeriod = 200000/Clock_tickPeriod;// 200ms
Clock_Params_init (clkParams); clkParams.period = SamplePeriod; clkParams.startFlag = true;
/*构造周期性时钟实例*/ Clock_con构(&clk0Struct,(Clock_Functr) LevelSensingCounter、SamplePeriod、&clkParams); }
|
空 HVBoard:::LevelSensingTimerSetUp() { /*启用到 GPIO 端口 M 的时钟并等待它准备就绪*/ MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM); while (!(SysCtlPeripheralReady (SYSCTL_Periph_GPIOM))); //*将 GPIO PM6配置为计时器5 CCP0引脚(边沿计数输入引脚)*/ MAP_GPIOPinConfigure (GPIO_PM6_T5CCP0); MAP_GPIOPinTypeTimer (GPIO_PORTM_BASE、GPIO_PIN_6); /*启用计时器5 */ MAP_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER5); while (!(SysCtlPeripheralReady (SYSCTL_Periph_TIMER5))); /*将计时器5配置为在边沿计数模式下工作*/ MAP_TimerConfigure (TIMER5_base、TIMER_CFG_A_CAP_COUNT); /*正边数*/ MAP_TimerControlEvent (TIMER5_base、TIMER_A、TIMER_EVENT_POS_EDGE); /*加载计时器5的值以进行计数*/ MAP_TimerLoadSet (TIMER5_base、TIMER_A、LS_MAX_COUNT); }
|
|
void LevelSensingCounter() { MAP_TimerDisable (TIMER5_base、TIMER_A); LevelSensingCount = MAP_TimerValueGet (TIMER5_base、TIMER_A); MAP_TimerLoadSet (TIMER5_base、TIMER_A、LS_MAX_COUNT); MAP_TimerEnable (TIMER5_base、TIMER_A); } |
一旦 Clock_construct()被创建和启用(clkParams.startFlag = true;)、它将在每次计数 SamplePeriod 后调用上述函数。
请告诉我们问题可能是什么。 谢谢!