请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5438A 工具/软件:Code Composer Studio
您好,
我正在使用MSP430F5438A,以便通过5个ADC12通道获取5个模拟信号,并将这些值通过UART发送到PC。 主要问题是ADC12无法读取该值。 程序不会进入ADC中断例程,而在去毛刺机的情况下,程序始终处于“同时”(1)状态。
ADC每隔1毫秒通过计时器A0触发一次。 ADCMEMMx寄存器更改其值,但由于未执行例程,因此它永远不会将这些值传递到缓冲区。
有人能帮我吗?
这是我的代码:
/*******************************************************
****** 全局变量***********************
*************** /
#define MAX_SIZE 128 //缓冲区大小
#define index_increment 5 // ADC采集之间的增量
//数据存储在两个缓冲区
unsigned int buffer_1[MAX_SIZE];//缓冲区1
unsigned int buffer_2[MAX_SIZE];//Buffer 2
unsigned int buffer_status=0;//status of buffer 1和2
/***********************************************************************
**************** 配置功能**********************
*************** ///
外设端口初始化
void port_init (void)
{
P1DIR |=0x03;// WFP 1.0 和WFP 1.1 输出
P3SEL=0x30; //WFP 3.4 --> Tx
//WFP P6sel=0x80 3.5
; //WFP 6.7 --> A7
P7SEL=0xF0; //WFP 7.4 --> A12.
//WFP 7.5 --> A13.
//WFP 7.6 --> A14.
//WFP 7.7 --> A15
}//
定时器A初始
化void timer_init (void)
{
TA0CCR0 = 33-1; //设置为1ms
TA0CCR1=0;
TA0CTL = tassel_1 + MC_1 + TCLR; // aclk,upmode,clear TAR
TA0CCTL0=OUTMOD_4;
}//
ADC12初始
化无效ADC12_INIT (void)
{//
ADC12开,S&H 64个周期,多个转换
ADC12CTL0=ADC12ON+ADC12MSC12_4+ADC12+ADC12A1;
//ADCASPHE/ADC12SC1=ADC12SC1+SEC12SC21
ADC12CTL2=ADC12RES_2;//12位分辨率(13个周期)
ADC12IE = 0x01; //启用中断
ADC12IE = 0x10; //启用ADC12IFG.4
ADC12MCTL0 = ADC12INCH_7; //通道= A7
ADC12MCTL1 = ADC12INCH_12; //通道= A12
ADC12MCTL2 = ADC12INCH_13; //通道= A13
ADC12MCTL2 = ADC12INCH_14; //通道= A14
ADC12MCTL3 = ADC12INCH_15+ADC12EOS; //通道= A15,结束序列
}//
UART初始
化无效UART_INIT (void){/*cambiar
波特率*/
UCA0CTL1 |= UCSWRST; //**将状态机置于复位**
UCA0CTL1 || UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (请参阅用户指南)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16;// Modln UCBRSx=0,UCBRFx=0,
//过度采样
UCA0CTL1 &=~UCSWRST; //**初始化USCI状态机**
}/**************************************************************
*********** 用户的功能**********************
*************** /
void UART_TX (无符号int *vector,无符号char大小)
{
while (size !=0)
{
//等待TX缓冲区为新数据做好准备
while (!(UCA0IFG和UCTXIFG));
//将数据推送到TX缓冲区
UCA0TXBUF =*矢量;
//更新变量
大小--;
vector++;
}//
等待直到最后一个字节完全发送
,同时(UCA0STAT & UCBUSY);
}/******************************************************
*********** 主要方案
*************** /
int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
//外围设备初始化
port_init();// I/O
timer_init();//计时器
ADC12_init();// ADC
UART_INIT();// UART
ADC12CTL0|=ADC12ENC;
__bis_sr_register (GIE);
同时(1)
{
ADC12CTL0 |= ADC12SC; //开始转换
开关(BUFFER_STATUS)
{
案例1:
UART_TX (BUFFER_1,MAX_SIZE);
中断;
案例2:
UART_TX (BUFFER_2,MAX_SIZE);
中断;
默认:
中断;
}
}}/**********************************************************************
************** 中断***************************
*************** /
//ADC12中断
#IF已定义(__TI_Compiler_version__)||已定义(__IAR_SYSTEMS _ICC__)
#pragma vector=ADC12_vector
__interrupt void ADC12ISR (void)
#Elif已定义(__GNUC__)
void __attribute__(interrupt (ADC12_vector))
)#REF!编译器#12不支持
#endif
{
static unsigned int index=0;
switch(__ench_in_range(ADC12IV,34)){
案例0:中断; //矢量0:无中断
情况2:中断; //矢量2:ADC溢出
情况4:中断; //矢量4:ADC计时溢出
情况6:中断; //向量6:ADC12IFG0
案例8:中断; //矢量8:ADC12IFG1
案例10:中断; //矢量10:ADC12IFG2
案例12:中断; //矢量12:ADC12IFG3
案例14: //矢量14:ADC12IFG4
P1OUT ^= 0x01; //切换WFP 1.0
IF (BUFFER_STATUS!= 1)
{
Buffer_1[index]=ADC12MEM0;//移动A7结果
Buffer_1[index+1]=ADC12MEM1;//移动A12结果
Buffer_1[index+2]=ADC12MEM2;//移动A13结果
Buffer_1[index+3]=ADC12MEM3;//移动A14结果
Buffer_1[index+4]=ADC12MEM4;//移动A15结果
index=index+index_increment;//下一次采集
IF (index>=MAX_SIZE)
{
索引=0; //重新启动时间值
buffer_status=1; //更改状态缓冲
区}
}
否则
{
Buffer_2[index]=ADC12MEM0;//移动A7结果
Buffer_2[index+1]=ADC12MEM1;//移动A12结果
Buffer_2[index+2]=ADC12MEM2;//移动A13结果
Buffer_2[index+3]=ADC12MEM3;//移动A14结果
Buffer_2[index+4]=ADC12MEM4;//移动A15结果
index=index+index_increment;//下一次采集
IF (index>=MAX_SIZE)
{
索引=0; //重新启动时间值
buffer_status=2; //更改状态缓冲
区}
}
中断;
情况16:中断; //矢量16:ADC12IFG5
案例18:中断; //矢量18:ADC12IFG6
案例20:中断; //矢量20:ADC12IFG7
案例22:中断; //矢量22:ADC12IFG8
案例24:中断; //矢量24:ADC12IFG9
案例26:中断; //矢量26:ADC12IFG10
案例28:中断; //矢量28:ADC12IFG11
案例30:中断; //矢量30:ADC12IFG12
案例32:中断; //矢量32:ADC12IFG13
案例34:中断; //矢量34:ADC12IFG14
默认:中断;
}
提前感谢!
此致,
米格尔