共2条
1/1 1 跳转至页
msp430 请问msp430睡眠问题。
问
请问MSP430睡眠后,能否在中断中将它唤醒,让它们在主程序中继续执行。#include <MSP430x41x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
IE2 |= BTIE; // Enable BT interrupt
BTCTL = BTDIV+BTIP2+BTIP1+BTIP0; // 2s Interrupt
P1DIR = 0xFF; // All P1.x outputs
P1OUT = 0; // All P1.x reset
P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
P3DIR = 0xFF; // All P3.x outputs
P3OUT = 0; // All P3.x reset
P4DIR = 0xFF; // All P4.x outputs
P4OUT = 0; // All P4.x reset
P5DIR = 0xFF; // All P5.x outputs
P5OUT = 0; // All P5.x reset
P6DIR = 0xFF; // All P6.x outputs
P6OUT = 0; // All P6.x reset
_EINT(); // Enable interrupts
while(1)
{
int i;
_BIS_SR(LPM3_bits); // Enter LPM3
P5OUT |= 0x02; // Set P5.1 LED on
for (i = 5000; i>0; i--); // Delay
P5OUT &= ~0x02; // Clear P5.1 LED off
}
}
// Basic Timer interrupt service routine
interrupt[BASICTIMER_VECTOR] void basic_timer(void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
_BIC_SR_IRQ(LPM3_bits); 没定义
是不是 _BIC_SR_(LPM3_bits);
可改了后程序就在一直睡眠,主程序不运行了为什么? 答 1: 是_BIC_SR_IRQ(LPM3_bits);
如果提示没定义,请下在最新版软件。126b以后的版本才有。 答 2: :) 刘工我的1。26A里就有LPM3_EXIT了。 答 3: 对对,是126(含)及以后的。 答 4: 如何在中断里,把mcu 唤醒让系统在中断反回后主程序继续运行。 答 5: :) 1。26以上的在中断程序的最后加一个LPM3_EXIT就行了!低版本的好像要编辑一个汇编的文件,然后由c程序调用!我原来是在IAR的例子文件中找到的汇编程序!你看看你的IAR文件夹中看有没有吧! 答 6: 可是使用LPM_EXIT()好象没有用?(调试环境下) 答 7: 126b以后的版本,哪儿可以下载 答 8: 资料库里热门下载有306版(126b)。
看看例子的用法。
#include "MSP430x44x.h" // Standard Equations
static unsigned int ADCresult;
static unsigned long int DegC, DegF;
void main(void)
{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_6; // Setup ADC12, ref., sampling time
ADC12CTL1 = SHP; // Use sampling timer
ADC12MCTL0 = INCH_10+SREF_1; // Select channel A10, Vref+
ADC12IE = 0x01; // Enable ADC12IFG.0
for (i=0; i<0x3600; i++) // Delay for reference start-up
{
}
ADC12CTL0 |= ENC; // Enable conversions
_EINT(); // Enable interrupts
while(1)
{
ADC12CTL0 |= ADC12SC; // Start conversion
_BIS_SR(LPM0_bits); // Enter LPM0
// DegC = (Vsensor - 986mV)/3.55mV
// Vsensor = (Vref)(ADCresult)/4095)
// DegC -> ((ADCresult - 1615)*704)/4095
DegC = ((((long)ADCresult-1615)*704)/4095);
DegF = ((DegC * 9/5)+32); // Calculate DegF
_NOP(); // SET BREAKPOINT HERE
}
}
interrupt[ADC_VECTOR] void ADC12ISR (void)
{
ADCresult = ADC12MEM0; // Move results, IFG is cleared
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps
IE2 |= BTIE; // Enable BT interrupt
BTCTL = BTDIV+BTIP2+BTIP1+BTIP0; // 2s Interrupt
P1DIR = 0xFF; // All P1.x outputs
P1OUT = 0; // All P1.x reset
P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
P3DIR = 0xFF; // All P3.x outputs
P3OUT = 0; // All P3.x reset
P4DIR = 0xFF; // All P4.x outputs
P4OUT = 0; // All P4.x reset
P5DIR = 0xFF; // All P5.x outputs
P5OUT = 0; // All P5.x reset
P6DIR = 0xFF; // All P6.x outputs
P6OUT = 0; // All P6.x reset
_EINT(); // Enable interrupts
while(1)
{
int i;
_BIS_SR(LPM3_bits); // Enter LPM3
P5OUT |= 0x02; // Set P5.1 LED on
for (i = 5000; i>0; i--); // Delay
P5OUT &= ~0x02; // Clear P5.1 LED off
}
}
// Basic Timer interrupt service routine
interrupt[BASICTIMER_VECTOR] void basic_timer(void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
_BIC_SR_IRQ(LPM3_bits); 没定义
是不是 _BIC_SR_(LPM3_bits);
可改了后程序就在一直睡眠,主程序不运行了为什么? 答 1: 是_BIC_SR_IRQ(LPM3_bits);
如果提示没定义,请下在最新版软件。126b以后的版本才有。 答 2: :) 刘工我的1。26A里就有LPM3_EXIT了。 答 3: 对对,是126(含)及以后的。 答 4: 如何在中断里,把mcu 唤醒让系统在中断反回后主程序继续运行。 答 5: :) 1。26以上的在中断程序的最后加一个LPM3_EXIT就行了!低版本的好像要编辑一个汇编的文件,然后由c程序调用!我原来是在IAR的例子文件中找到的汇编程序!你看看你的IAR文件夹中看有没有吧! 答 6: 可是使用LPM_EXIT()好象没有用?(调试环境下) 答 7: 126b以后的版本,哪儿可以下载 答 8: 资料库里热门下载有306版(126b)。
看看例子的用法。
#include "MSP430x44x.h" // Standard Equations
static unsigned int ADCresult;
static unsigned long int DegC, DegF;
void main(void)
{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_6; // Setup ADC12, ref., sampling time
ADC12CTL1 = SHP; // Use sampling timer
ADC12MCTL0 = INCH_10+SREF_1; // Select channel A10, Vref+
ADC12IE = 0x01; // Enable ADC12IFG.0
for (i=0; i<0x3600; i++) // Delay for reference start-up
{
}
ADC12CTL0 |= ENC; // Enable conversions
_EINT(); // Enable interrupts
while(1)
{
ADC12CTL0 |= ADC12SC; // Start conversion
_BIS_SR(LPM0_bits); // Enter LPM0
// DegC = (Vsensor - 986mV)/3.55mV
// Vsensor = (Vref)(ADCresult)/4095)
// DegC -> ((ADCresult - 1615)*704)/4095
DegC = ((((long)ADCresult-1615)*704)/4095);
DegF = ((DegC * 9/5)+32); // Calculate DegF
_NOP(); // SET BREAKPOINT HERE
}
}
interrupt[ADC_VECTOR] void ADC12ISR (void)
{
ADCresult = ADC12MEM0; // Move results, IFG is cleared
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0
}
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |