请问MSP430F5438中,ADC12的中断函数中不能修改ADC12的配置吗?
我在ADC12中断函数中修改了ADC通道,然后就好像出不来了。
代码如下
void Init_ADC_A0_6432(void)
{
P6SEL = 0x01; // Enable A/D channel A0
P4OUT = 0X80;
ADC12CTL0 =0; //Disable conversion
ADC12CTL0 = ADC12ON+ADC12SHT0_8 ; // Turn on ADC12, set sampling time
ADC12CTL1 = ADC12SHP+ADC12CSTARTADD_0 ; // Use sampling timer,
ADC12CTL1 |= ADC12CONSEQ_0 + ADC12SSEL_2+ADC12DIV_0; // ADCCLK=MCLK,NO DIV
// ADC12CTL2 = ADC12RES_0; //8位的分辨率
ADC12MCTL0 = ADC12SREF_7+ADC12INCH_0; // ref+=AVcc(ext), channel = A0
// ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; // Use sampling timer, set mode
// ADC12IE = 0x0080; // Enable ADC12IFG.7
ADC12IE = 0x01; // Enable ADC12IFG.0
ADC12CTL0 |= ADC12ENC; // Enable conversions
}
void Init_ADC_A1_6432(void)
{
P6SEL = 0x02; // Enable A/D channel A0
P4OUT = 0X40;
ADC12CTL0 =0; //Disable conversion
ADC12CTL0 = ADC12ON+ADC12SHT0_8 ; // Turn on ADC12, set sampling time
ADC12CTL1 = ADC12SHP+ADC12CSTARTADD_0 ; // Use sampling timer,
ADC12CTL1 |= ADC12CONSEQ_0 + ADC12SSEL_2 +ADC12DIV_0; // ADCCLK=MCLK,NO DIV
ADC12CTL2 = ADC12RES_0; //8位的分辨率
ADC12MCTL0 = ADC12SREF_7+ADC12INCH_1; // ref+=AVcc(ext), channel = A0
// ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; // Use sampling timer, set mode
// ADC12IE = 0x0080; // Enable ADC12IFG.7
ADC12IE = 0x01; // Enable ADC12IFG.0
ADC12CTL0 |= ADC12ENC; // Enable conversions
}
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{
char k,m,j=0,a=0,b=0,c=0,d=0;
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: // Vector 6: ADC12IFG0
// Frame_scan_over = 1;
k = P7OUT&0x04; //查询选通SWITCH(k=1表示选通RX1-U2,否则选通RX2-U3)
if(k)
j = 0X0F-(P8OUT&0x0f); //取所处列数(左半屏)
else
j = 0x1F-((P8OUT>>4)&0x0f); //取所处列数(右半屏)
//判断所选TX
m = P4OUT;
switch(m)
{
case 0x80:
a = 0X0F-(P9OUT&0x0f);
if(a==15) //若已扫描到TX1末尾
{ //即1/4列扫描完毕
// P1OUT = 0xFF; //TX1置初值
P9OUT = 0xFF;
if(k)
{
if(j==15)
{ //停止RX1
P7OUT = 0X08; //选通RX2
P8OUT = 0XF0; //RX2置初值
}
else
P8OUT = P8OUT - 0x01 ;
}
else
{
if(j==31)
{
P7OUT = 0X04 ; //停止RX2,选通RX1
P8OUT = 0X0F ; //RX1置初值
Init_ADC_A1_6432();
}
else
P8OUT = P8OUT - 0x10 ;
}
}
else
{
// P1OUT -=0X11;
P9OUT -=0X01;
}
ADC_data[a][j] = 0xff-ADC12MEM0; //存储上1/4屏数据
if(Frame_scan_start==0)
{
// __delay_cycles(500) ;
ADC12CTL0 |= ADC12SC ; // Start sampling
}
break;
break;
default: break;
调试的时候,程序跑在
if(j==31)
{
P7OUT = 0X04 ; //停止RX2,选通RX1
P8OUT = 0X0F ; //RX1置初值
Init_ADC_A1_6432();
}
在这个位置设置断点,Init_ADC_A1_6432();
然后程序就停在这个重新设置ADC12的函数里了……
求指教
此帖出自
小平头技术问答
一周热门 更多>