以下是LED0的中断处理程序,用于在UART0上因LIN从主机到从机传输而发生中断时进行切换,我的设备就是从机。但是没有将我的设备(从设备)连接到主设备,这意味着没有任何通过UART的LIN传输,LED0正在切换。我不明白,这怎么会自动发生呢?如何产生中断并切换LED0?
void FTM0_IRQHandler()
{
if (1==((FTM0_C0SC & FTM_CnSC_CHF_MASK)>>FTM_CnSC_CHF_SHIFT) ) /* If the CHF of the channel is equal to 0 */
{
(void)FTM0_C0SC; /* Read to clear flag */
FTM0_C0SC ^= FTM_CnSC_CHF_MASK; /* Clear flag */
FTM0_C0V = FTM0_C0V + 391 ; /* Refresh interrupt period */
if (LED_counter>=50){
/* Toggle LED for LIN transmission */
/* Reset counter */
LED0_TOGGLE;
LED_counter = 0;
}
LED_counter++;
}
}在我的主要函数中,我调用了我的计时器初始化,如下所示:
lin_application_timer_FTM0();上述函数定义如下:
void lin_application_timer_FTM0()
{
SIM_SCGC |= SIM_SCGC_FTM0_MASK; /* Enable Clock for FTM0 */
FTM0_SC |= FTM_SC_PS(7); /* Select Preescaler in this case 128. 20 Mhz /128 =156.25 Khz. */
/* Counter increase by one every 6.4 us */
/* Enable Channle 0*/
FTM0_C0SC |= FTM_CnSC_CHIE_MASK; /* Enable channel 0 interrupt */
FTM0_C0SC |= FTM_CnSC_MSA_MASK; /* Channel as Output compare mode */
/*Select interrupt frequency*/
FTM0_C0V = FTM_CnV_VAL(391) ; /* Interrupt every 2.5ms */
FTM0_SC |= FTM_SC_CLKS(1); /*FTM0 use system clock*/
/* Set the ICPR and ISER registers accordingly */
NVIC_ICPR |= 1 << ((INT_FTM0-16)%32);
NVIC_ISER |= 1 << ((INT_FTM0-16)%32);
}谁能解释一下为什么LED0可以不间断地切换?
发布于 2018-01-12 01:34:14
有可能中断实际上是被触发的。您的中断引脚是否连接了上拉或下拉电阻?如果它是断开的,只是“漂浮”,环境中的电噪声可能会导致虚假的中断。
https://stackoverflow.com/questions/48212687
复制相似问题