主题中讨论的其他器件:MSP430FR2422
工具/软件:Code Composer Studio
我已经配置了三通道顺序中断。 ADC 通道、如 A7、A6和 A4。
注:
A7和 A6在顺序中断时工作。 但如果添加 A4通道。 它不起作用。 请给我建议。
注:
在这里、我已经为双通道顺序中断执行了 ALGO。 但在转换后、随机通道值存储在 ADCMEM0寄存器中。 意味着(ADC 通道 A7:)值必须在 ADC_RESULT[0]中可用、但 该第6通道值不在 ADC_RESULT[0]中。
检查: ADC_Result [0]= A7通道数据, ADC_Result [1]= A6通道数据,而不是 ADC_Result [0]= A6和 ADC_Result [1]= A7。 值就像这样。 请检查代码并告诉我。
void ADC_ChannelSelection ()
{
//SYSCFG2 |= ADCPCTL0 |ADCPCTL1 | ADCPCTL2;// P2.2、P2.4和 P2.5无端口选择仅具有通道选择
SYSCFG2 |= ADCPCTL7;
SYSCFG2 |= ADCPCTL6;
// SYSCFG2 |= ADCPCTL5;
// SYSCFG2 |= ADCPCTL4;
}
void ADC_Configuration (void)
{
//配置 ADC
ADCCTL0 |= ADCSHT_2 | ADCON; // 16ADCclks、ADC 打开
ADCCTL1 |= ADCSHP | ADCSSEL_2; // ADC 时钟 MODCLK、采样定时器、TA1.1B TRIG.REPEAT 序列
ADCCTL2 |= ADCRES_1; // 10位转换结果
ADCMCTL0 |=ADCINCH_7; // A7 (EOS);Vref=3.3V
ADCIE |= ADCIE0; //启用 ADC 转换完成中断
}
void ADC_SamplingTrigger (void)
{
ADCCTL0 |= ADCON;
SYSCFG2 |= ADCPCTL7;
ADCMCTL0 |=ADCINCH_7;
ADCCTL0 &=~ADCENC;//ENC 低电平
ADCCTL1 |= ADCCONSEQ_3;
ADCCTL0 |= ADCENC |ADCSC;//ENC 高电平从低电平到高电平开始采样过程
SYSCFG2 &=~ADCPCTL7;
ADCCTL0 |= ADCENC;
ADCCTL0 |= ADCON;
SYSCFG2 |= ADCPCTL6;
ADCMCTL0 |=ADCINCH_6;
ADCCTL0 &=~ADCENC;//ENC 低电平
ADCCTL1 |= ADCCONSEQ_3;
ADCCTL0 |= ADCENC |ADCSC;
SYSCFG2 &=~ADCPCTL6;
ADCCTL0 &=~ADCENC;
ADCCTL0 &=~ADCON;
}
void adc_convertionDta (void)
{
//V2_TVSlekageNegative +=(float) ADC_Result [3]; //通道0 P2.2 A4 TVS 漏电负极(V2)
V_Earth +=(float) ADC_Result [0]; //A6 th 通道 //通道1 P2.4 A6接地(com)(V)
V1_TVSLeakagePositive += (float) ADC_Result [1]; //A7 TH 通道
//通道2 P2.5 A7 TVS 泄漏正极(V1)
// DummuVoltage +=(float) ADC_Result [2]; //通道 p2.3 A5
//V2_TVSlekageNegative +=(float) ADC_Result [3]; //通道0 P2.2 A4 TVS 漏电负极(V2)
count++;
if (count >= MAXCOUNT)
{
V2_TVSlekageNegative = V2_TVSlekageNegative / MAXCOUNT;
V_Earth = V_Earth / MAXCOUNT;
V1_TVSLeakagePositive = V1_TVSLeakagePositive / MAXCOUNT;
DummuVoltage = DummVoltage/1;
DummuVoltage1 =((DummuVoltage * ADCREF)/(BITRESOLUTION));
#if 1.
v2_negative =((V2_TVSlekageNegative * ADCREF)/(BITRESOLUTION)); //((count * Vref)/ADCResolution)
V0_COM =((V_Earth * ADCREF)/(BITRESOLUTION));
V1_POSITIVE =((V1_TVSLEakagePositive *ADCREF)/(BITRESOLUTION));
#endif
计数= 0;
V2_TVSlekageNegative = 0;
V_Earth =0;
V1_TVSLeakagePositive = 0;
DummuVoltage =0;
}
}
#pragma vector=ADC_vector
_interrupt void ADC_ISR (void)
{
if (i<2)
{
ADC_RESULSE[i]= ADCMEM0;
i++;
}
其他
{
I=0;
}
//_BIC_SR_REGISTER_ON_EXIT (LPM0_Bits);
ADCCTL0 &=~ADCON;
}