如上图.请教Susan,看有没有办法。解决?
1)p2.5长时间低电平,突然收到上升沿中断在激活到PWM输出,延迟比较久,对比后面第1次6ms多,后面的1.8-1.9ms
2)p2.5高电平占空比不能调的非常大,如果超过90%之后,可能导致上升沿中断不触发了?导致pwm输出功能失效。
3)p2.5高电平占空比,会影响中断启动延迟,如1)。调小占空比,会导致PWM输出延迟变长。
Susan Yang:
andy 说:p2.5长时间低电平
请问您P2.5处的触发以及中断服务程序是怎样的?若是可以的话,请给一下代码,谢谢
,
andy:
问题其实可以收敛到,只是IO中断响应延迟的问题。
简单实验如下:P2.5变化中断,同步改变P3.0状态。第一次触发响应延迟6ms,后续快速周期性触发1.8ms左右
#include <msp430.h>void Cpu_int(void) {if (CALBC1_1MHZ==0xFF){while(1);}DCOCTL = 0;BCSCTL1 = CALBC1_1MHZ;DCOCTL = CALDCO_1MHZ; }void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTCpu_int();//P2.5 上升沿输入中断设置P2DIR|=BIT5;P2REN&=~BIT5;P2IES&=~BIT5;P2OUT&=~BIT5;P2IFG&=~BIT5;P2DIR&=~BIT5;P2IE|=BIT5;//p3.0 trigger outP3DIR |= BIT0;//P3REN|=BIT0;_EINT();__low_power_mode_1(); }//mcu-triggerin #pragma vector=PORT2_VECTOR__interrupt void Port_2(void) {P2IFG&=~(BIT5 | BIT4);if(P2IN&BIT5) //p2.5: mcu-triggerIn{P3OUT|=BIT0;P2IES|=BIT5;}else{P3OUT&=~BIT0;P2IES&=~BIT5;}}
,
andy:
补充实验,不用中断方式,而是在main方法,死循环只处理这一个任务,也一样延迟1.4-5.4ms。说明外部电平变化刷新寄存器状态,延迟比较厉害了。
while(1){if(P2IN&BIT5) //p2.5: mcu-triggerIn{P3OUT|=BIT0;}else{P3OUT&=~BIT0;}}
,
Susan Yang:
andy 说:说明外部电平变化刷新寄存器状态,延迟比较厉害了。
我使用其他开发板测试了一下
目前在断点处 clock 复位为0,下一次进入断点的话,需要7个时钟周期
,
andy:
7个周期是可以理解的,(按1M的主频,延迟7us左右),我不是怀疑这段代码之间有1.4ms-6ms的延迟。而是觉得外部电平的变化,mcu更改P2IN寄存器之间存在延迟。
,
andy:
又或者是POUT输出后到外部电平变化之间存在延迟。因为我是在外部用逻辑分析仪抓输入输出的逻辑信号。来测量的。
,
Susan Yang:
您的顾虑是有可能的,但是理论上是不会这么大的延迟。我之后需要测试确认后给您回复
,
andy:
多谢了。
补充一下:应该不用怀疑逻辑分析仪的问题,430收到信号1后,同步抓取的POUT输出的信号2,信号2同步传给了板子上TI另外的芯片,到这个芯片内部反应再输出信号3之间的延迟是比较精确的(这个芯片设定171us输出,实际测量也是171us多点,反应时间可以认为是ns级别的)。
,
Susan Yang:
若是可以的话,请您私信一下您的工程,我来测试一下。我目前不能复现您的现象