This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LS3137芯片,PWM边沿触发中断,中断子程调用while循环问题

Other Parts Discussed in Thread: HALCOGEN

我想利用PWM的上升沿触发中断,每进入一次中断就执行一次ADC操作,这样就可以用PWM的频率控制ADC的采样频率。

上图是我在Notification.c中编辑edgeNotification()的程序,如果像上图那样在中断子程中加入while循环来等待ADC采样完成,串口最终就不能输出任何数据,而如

果去掉等待的这一句,串口会按照PWM的频率输出一串0

我觉得必须得判断ADC是否采样完成才能,但我也知道在中断子程中加入while语句是不符合常理的,所以希望各路高人能指导我一下该如何改写这一段?

拜托各位了

  • Yinan,

      你的想法可以,但是程序设计有问题,首先在中断响应程序里面不要用while(1)之类的等待语句

    其次,你可以考虑直接在HALCOGEN中关于ADC的配置中选择硬件的ADC采样触发源为PWM波,这个有硬件支持的,不需要手动去写。

    另外如果想要输出ADC的采样值的话,可以建议打开ADC中断,在它的响应程序里面去调用UART的发送程序。

    谢谢

  • Ken,

    非常感谢!在你的指导下,我在Halcogen中找到了用PWM触发ADC的选项。

    我对这个触发方式的理解是这样的,首先,PWM的上升沿到来时,ADC1进行一次转换,adcIsConversionComplete()函数置1,主函数进行下面的取值以及输出

    操作,完成这些操作后,循环回到等待adcIsConversionComplete()=1的一句,直到下次PWM上升沿到来触发ADC完成下一次转换。

    我试过了将PWM的周期设为1s,发现整个ADC的采样可以严格地按照1Hz的频率,但是我有些担心提高了PWM的频率(比如60kHz?)之后,会不会造成这样的

    后果:在取值以及输出操作尚未完成时,下一次PWM的上升沿已经到来,这样岂不是ADC采样频率就会变为由主程序语句执行的时间所限制而不是由PWM频率决

    定了?

    谢谢

  • 如果你有这样的担心的话,有几个事情你可以考虑一下,首先PWM频率的设定,需要考虑单次ADC从采样到转换完成需要的时间。PWM触发的周期应该要大于这个时间,特别是当你采用连续采样的时候。

    另外如果担心主程序运行时间会影响整个系统的设计,可以考虑用ADC中断处理或是直接用DMA将ADC的转换结果和SCI的发送缓存寄存器联系到一起。这样比较高效。

    谢谢