共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
