Part Number:MSP430FR6972
您好,目前做的一个项目具有LCD显示,ad采样功能,ad采样每次采样都会进入LPM0,ad采样数据是否只有中断采样的办法,目前发现如果在while循环实现LCD显示程序的话,必须设置一个定时中断不断唤醒才能正常工作。这样需要频繁进入中断,提升采样率让其在AD中断中唤醒是否有用?
Yale Li:
您好,AD采样并不是一定要进入LPM0模式的。由于转换需要一定的时间,我们在不知道具体需要多久的情况下可以先令单片机进入低功耗模式,并留下中断入口。
,
TOM ?:
AD开始转化后,如果不进入LPM0模式的话,LCD会不正常显示,出现黑屏
,
Yale Li:
使用LCD模块也不一定要进入LPM0模式。
TOM ? 说:提升采样率让其在AD中断中唤醒是否有用?
ADC的中断服务函数中是可以唤醒的
,
TOM ?:
AD转换如果进入低功耗,进行ad采样,有没有参考代码,主要是我把进入低功耗的一行代码去掉,就出现黑屏,LCD不显示的情况
,
Yale Li:
开启AD采样后,直接进入LPM0并使能全局中断即可
,
TOM ?:
后续就不用一直在while循环里一直开AD采样然后进入LPM0了吗?
,
Yale Li:
后续的话可以去完成一些其它的功能。AD采样完成后会进入中断,可以在中断中唤醒并实现LCD显示程序。
当然具体的话得您自己设计了。
,
TOM ?:
例程里都是这样写的
while(1) { __delay_cycles(5000); // Delay between conversions ADC12CTL0 |= ADC12ENC | ADC12SC; // Sampling and conversion start
__bis_SR_register(LPM0_bits + GIE); // LPM0, ADC10_ISR will force exit __no_operation(); // For debug only }
,
TOM ?:
ADC12CTL0 |= ADC12ENC | ADC12SC; // Sampling and conversion start
__bis_SR_register(LPM0_bits + GIE); // LPM0, ADC10_ISR will force exit
while循环里放的显示的程序,如果这两句放循环外面会出现黑屏
,
Yale Li:
TOM ? 说:例程里都是这样写的
这个例程在ADC转换的时候不执行任何操作,也就是只执行ADC转换这1个操作。
,
Yale Li:
TOM ? 说:while循环里放的显示的程序,如果这两句放循环外面会出现黑屏
如果您是放在while(1)之前的话,MCU已经进入LPM0模式,LCD驱动模块是不能工作的。
我不知道您上面说的:
TOM ? 说:AD开始转化后,如果不进入LPM0模式的话,LCD会不正常显示,出现黑屏
是指这个吗?
MSP430FR6972上的LCD驱动模块是LCD_C,在LPM0模式下是不能工作的,即使是LCD_E最多也只能工作在LPM3.5模式下。
TOM ? 说:__bis_SR_register(LPM0_bits + GIE); // LPM0, ADC10_ISR will force exit
您把这个语句放在循环只外的话,它在LCD显示程序之前就已经进入LPM0了,我想这应该是黑屏的原因。
,
TOM ?:
那如果需要不断采样并且刷新屏幕且不黑屏,要怎么做,只能不断唤醒吗,还是说采样的时间要长一些才行
,
TOM ?:
现在我开了另外开一个10ms定时器,在定时器中断唤醒才能正常工作,但是这样频繁需要进入中断,如果只是等AD中断唤醒屏幕会黑屏
,
Yale Li:
您用的这个方法就是可以的。
除此之外,将这行代码:
TOM ? 说:__bis_SR_register(LPM0_bits + GIE); // LPM0, ADC10_ISR will force exit
直接注释掉也行。
,
TOM ?:
可以了,如果要注释掉也能运行,还需要在初始化开总中断才行吧
,
Yale Li:
对的