F4A0,timer4,计数器谷顶中断,然后在中断中修改比较器的值,发现有脉冲丢失。
下面是中断的设置部分:
TMR4_SetCountIntMaskTime(TMR4_UNIT, TMR4_INT_CNT_PEAK,0);// TMR4_INT_CNT_MASK15);
/* Register IRQ handler && configure NVIC. */
stcIrqConfig.enIRQn = INT010_IRQn;//TMR4_COUNT_PEAK_IRQn;
stcIrqConfig.enIntSrc = INT_SRC_TMR4_1_OVF;//TMR4_COUNT_PEAK_INT_SRC;
stcIrqConfig.pfnCallback = &TMR4_PeakMatch_IrqCallback;
(void)INTC_IrqSignIn(&stcIrqConfig);
NVIC_ClearPendingIRQ(stcIrqConfig.enIRQn);
NVIC_SetPriority(stcIrqConfig.enIRQn, DDL_IRQ_PRIO_DEFAULT);
NVIC_EnableIRQ(stcIrqConfig.enIRQn);
TMR4_IntCmd(CM_TMR4_1, TMR4_INT_CNT_PEAK, ENABLE);//上溢中断
下面是中断回调函数:
__IO uint16_t TMR4_U1_ACnt=0;//比较器值。
static void TMR4_PeakMatch_IrqCallback(void)
{
TMR4_U1_Cnt+=10;//比较器值参考,增加。
if(TMR4_U1_Cnt>8000)TMR4_U1_Cnt=1;//限制最大值。
if(TMR4_U1_Cnt<5)TMR4_U1_Cnt=5;//限制最小值
TMR4_OC_SetCompareValue(TMR4_UNIT, TMR4_OC_CH_UH,TMR4_U1_Cnt); //更新比较器的值。
TMR4_OC_SetCompareValue(TMR4_UNIT, TMR4_OC_CH_UL,TMR4_U1_Cnt); //更新比较器的值。
}
还有哪里要设置,或是哪里有错误? |