主题中讨论的其他器件:CCStudio、 ENERGYTRACE
工具/软件:Code Composer Studio
您好!
我对 MSP430和 CCStudio 非常陌生。 我尝试从连接到微控制器的湿度传感器读取数据、将传感器数据与随机生成的10个数字进行比较、然后进入睡眠模式。 计时器中断唤醒微控制器、并再次从传感器读取。
传感器输出连接到引脚1.1。 引脚1.0用于打开/关闭传感器。 传感器数据需要从模拟信号转换为使用 ADC 的数字值。 我使用了其中一个示例中的 ADC 代码。
我通过在电源和电路板之间连接万用表来测量电流。 在器件上刷写了代码、并移除了连接调试探针的跳线。 我在 LPM3模式下看到大约400uA 的电流-这是否意味着器件不会进入低功耗模式? 我的设置中是否存在问题? 如果能在这方面提供任何帮助,或指明我可以检查的地方,将不胜感激。
以下是代码:
#include
unsigned int ADC_Result;
INT 触发;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止 WDT
//配置 GPIO
P1DIR |= BIT0; //将 P1.0/LED 设置为输出方向
P1OUT &=~BIT0; // P1.0 LED 关闭
//配置 ADC A1引脚
P1SEL0 |= BIT1;
P1SEL1 |= BIT1;
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//配置 ADC
ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON、S&H=16 ADC 时钟
ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC;采样定时器
ADCCTL2 &=~ADCRES; //清除 ADCCTL 中的 ADCRES
ADCCTL2 |= ADCRES_2; // 12位转换结果
ADCMCTL0 |= ADCINCH_1; // A1 ADC 输入选择; Vref=AVCC
ADCIE |= ADCIE0; //启用 ADC 转换 完成中断
int k、p、in[10]、out[10]、match[10];
//使用 随机数初始化输入数组以进行比较
对于(k=0;k<10;k++)
{
in[k]=k*(k+1);
}
while (1)
{
P1OUT = 1;
ADCCTL0 |= ADCENC | ADCSC; //采样和转换开始
// P1OUT = 1;
_bis_SR_register (LPM0_bits | GIE); // LPM0、ADC_ISR 将强制退出
// __no_operation(); //仅用于调试
for (p=0;p<10;p++)
{
//与 上面初始化的数组进行比较
OUT[p]= IN[p]^ ADC_Result;
if (OUT[p]= 0x00)
{
//P1OUT |= BIT0; //SET P1.0 LED 亮起以指示匹配
匹配[p]= 0x01;
// _delay_cycles (5000);
}
其他
{
P1OUT = 1; //将 P1.0 LED 设置为开、以指示不匹配仅用于调试
匹配[p]= 0x00;
_delay_cycles (5000);
}
}//结束
//配置计时器并启动计时器。
TB0CCTL0 = CCIE;
TB0CTL = MC_1|ID_3|TBSSEL_1|TBCLR; //设置计时器并启动计时器
TB0CCR0 = 100000 * 100000; //设置计时器周期
触发= 1; //用于调试
P1OUT = 0;
//输入 lpm3
_bis_SR_register (LPM3_bits | GIE);
//在计时器中断时,ISR 负责退出 lpm 并将计时器设置为关闭。
}//结束 while
}//结束 main
// ADC 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=ADC_vector
_interrupt void ADC_ISR (void)
#Elif defined (_GNU_)
void __attribute__ ((interrupt (ADC_vector))) ADC_ISR (void)
其他
错误 编译器不受支持!
#endif
{
switch (__evo_in_range (ADCIV、ADCIV_ADCIFG))
{
案例 ADCIV_NONE:
中断;
ADCIV_ADCOVIFG 案例 :
中断;
案例 ADCIV_ADCTOVIFG:
中断;
ADCIV_ADCHIIFG 案例 :
中断;
ADCIV_ADCLOIFG 案例 :
中断;
ADCIV_ADCINIFG 案例 :
中断;
ADCIV_ADCIFG 案例 :
ADC_RESULT = ADCMEM0;
P1OUT = 0;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); //从 LPM0清除 CPUOFF 位
中断;
默认值:
中断;
}
}
#pragma vector = TIMER0_B0_vector
_interrupt void TB0_ISR (void)
{
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);
TB0CTL &=~MC_1; //关闭计时器
}
感谢您的帮助!