共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |