工具/软件:TI C/C++编译器
您好,
我在PCB上有一个MSP430G2553器件,我可以通过启动板对其进行编程。 我在设备上加载一段代码,只要PCB连接到启动板,就能正常工作。 该代码由PWM和ADC组成。 我一断开与启动板的连接并为PCB提供3.5V电源,ADC就停止工作,但PWM仍然工作。 我知道ADC停止工作是因为我从引脚读取并根据读数输出一些内容,而输出信号在释放模式下没有显示任何内容。
我遇到了第二个问题,让代码在释放模式下工作。 我当前正在以1MHz运行设备。 如果我以16MHz的频率运行设备,当连接到启动板时,它将再次正常工作。 在释放模式下,PWM的工作方式与以前一样,高达12MHz的DCO频率。 但在16MHz时,即使PWM也会在释放模式下停止工作。
关于为什么会出现这种情况或我可以执行什么操作的任何建议或建议,代码在发布模式下有效?
提前非常感谢。
下面是供您参考的代码:
#include "msp430G2553.h"
#include <stdint.h>
//void ConfigureADC()
void ConfigureADC(void)
{
ADC10CTL1 |= inch_5; //从WFP 1.5 读取,浮式引脚
ADC10CTL0 || SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;
ADC10AE0 |= BIT5;
}
易失性uint8_t A0; //此处存储ADC位
//状态名称
static uint8_t S0 = 0;
静态uint8_t S1 = 0;
void main( void )
{//
停止看门狗计时器
WDTCTTL =(WDTPW | WHODTLD);
//将范围设置为1MHz
BCSCTL1 = CALLM;
//将DCO步进和调制设置为1MHz
DCOCTL = CALDCO_1MHz;
// BCSCTL2 &=~(divs_3);
P1SEL |= 0x40; //将WFP 1.6 的特殊功能设置为定时器模块
P1DIR |=0x5F; //设置为输出方向
P2DIR |= 0x0F;
P1OUT |= 0x00; //设置WFP 1.0 打开,1.1 关闭
P2OUT |=0x00;
// PWM频率40kHz (25us)
TA0CCR0 =25;
//以占空比基址
TA0CCR1 =4;
//重置/设置模式
TA0CCTL1 = OUTMOD_7;
// SMCLK,分频器1,上行模式
TA0CTL = 4; EC_ADC_1;
//启用全局中断
//无限循环-主程序
,同时(1){
ADC10CTL0|= ENC + ADC10SC;//开始采样和转换
__bis_sr_register (CPUOFF + GIE );
A0 = ADC10MEM & 0x1f; //要获取5位随机编号
,如果(! S0 &&!S1)
{
P1OUT = A0; //随机选择引脚(WFP 1.0 到WFP 1.4)
P2OUT = 0x00;
__DELAY周期(3200); //脉冲持续时间
//S0,转至下一状态标志
=0;
S1 = 1
;}
如果(!S0 &&S1)
{
P1OUT = A0;// 随机选择引脚(WFP 1.0 至WFP 1.4 ;
P2OUT = 0x0C;
__DELAY周期(1000); //脉冲持续时间
S0 =1;
S1 =0;}
如果(S0 &&&! S1)
{
P1OUT = A0;// 随机选择引脚(WFP 1.0 至WFP DEP09 1.4 )
;=0x0_DEP0; //脉冲持续时间
S0 = 1;
S1 = 1;
}
如果(S0 && S1)
{
P1OUT = A0; //随机选择引脚(WFP 1.0 至1.4)
P2OUT = 0x00;
__DELAY周期(3200); //脉冲持续时间
S0 = 0;
S1 = 0;
}
}
}//
ADC中断服务例程
#pragma vector = ADC10_vector
__interrupt void ADC10_ISR( void )
{
__BIC_SR_REGISTER_ON_EXIT(CPUOFF);//返回活动模式
}