主题中讨论的其他器件: MSP-FET、 MSP430WARE、 CC3200
您好!
我在 MSP430FR2532上配置了 ADC10、但当我获得中断时、ADC 输入上没有任何值、因为我会检查序列的每个模拟端口。 我在一个端口上施加电压、并使用电压表进行测量、但 ADC 转换中没有显示任何内容。 我将 MSP FET 连接到 A6/A5/A4 (TDI/TS/TCK)引脚、不知道这是不是问题。
MAIN ()
{
(笑声)
ADCCTL0 &=~ADCENC;//确保 ENC 清零
// 64个时钟周期、自动转换的上升沿、ADC 开启、
ADCCTL0 = ADCSHT_4 + ADCMSC + ADCON;
// sampnhold src 选择 ADCSC 位、SAMPCON src SAMP 计时器、ADCCLK/4、ADC clk SMCLK、通道序列不重复
ADCCTL1 = ADCSHS_0 + ADCSHP + ADCDIV_3 + ADCSSEL_2 + ADCCONSEQ_1;
//清除所有 ADC12通道 int 标志
ADCIV = ADCIV_NONE;
/ADC 分辨率10位
ADCCTL2 = ADCRES_1;
// 000b ={VR+= AVCC 和 VR–= AVSS}、设置序列读取的最高模拟输入端口(A6)
ADCMCTL0 = ADCSREF_0 + ADCINCH_6;
//为 ADC 启用中断
ADCIE |= ADCIE0;
CSCTL1 |= DCORSEL_5;//设置 DCO 设置- 16MHz
CSCTL2 &=(~FLLD0);//当使用来自 REF0CLK 的 DCO 时、这将把 DCO 分频
CSCTL3 = SELMS_REFOCLK;
CSCTL4 = SELA_REFOCLK + SELMS_DCOCLKDIV;// ACLK = REF0CLK (32kHz)、SMCLK/MCLK = DCODIV = 16MHz 内部
CSCTL5 = DIVM_0 + DIVS_3;// MCLK 分频器(0)= 12MHz 或16MHz 来自内部、SMCLK 分频器(8)= 1.5MHz 或2MHz 内部 DCO 分频
(笑声)
}
void __attribute__((interrupt (ADC_vector))) ADC_ISR (void)//将此声明用于 mspgcc 编译器
{
unsigned int ADC_Result = 0;
ADCCTL0 &=~ADCIFG;//清除中断标志
//ADC 按顺序配置、每个转换的通道都将读取一个中断
//ADC 将从 ADC 通道6 - 0进行倒计数
if (adc_count = 6){
ADC_SAMPLE_temp = 0;
ADC_SAMPLE_temp = ADCMEM0;
adcB3V_SAMPLE[ADC_POS]= ADC_SAMPLE_temp;
}
如果(ADC_COUNT = 5){、则为其他位
ADC_SAMPLE_temp = 0;
ADC_SAMPLE_temp = ADCMEM0;
adcB2V_SAMPLE[ADC_POS]= ADC_SAMPLE_temp;
}
如果(ADC_COUNT = 4){、则为其他位
ADC_SAMPLE_temp = 0;
ADC_SAMPLE_temp = ADCMEM0;
adcB1V_SAMPLE[ADC_POS]= ADC_SAMPLE_temp;
}
否则{
ADC_Result = ADCMEM0;//对于所有未使用的其它通道、忽略采样
}
if (adc_count = 0){
ADC_COUNT = 6;//复位 ADC 通道计数
}
否则{
ADC_COUNT--;//递减中断计数
}
SAMPLE_COUNT_ADC_SEQ++;//让主代码知道采样已完成、7 SAMPLE_COUNT =每个通道1个采样(A6 - A0)
ADCCTL0 |= ADCENC + ADCSC;//触发下一次转换
}