MSP432——单路ADC采样
配置ADC
- 引脚配置
- 使能ADC模块,初始化ADC模块
- 单路转化配置,转化存储器配置
- 使能采样时钟,使能转化
- 中断使能,开启总中断
- 开始转化
//enable ADC module
ADC14_enableModule();
ADC14_initModule(ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0);
//gpio P5.5
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN5,GPIO_TERTIARY_MODULE_FUNCTION);
//ADC Mem
ADC14_configureSingleSampleMode(ADC_MEM0,true);
ADC14_configureConversionMemory(ADC_MEM0,ADC_VREFPOS_AVCC_VREFNEG_VSS,ADC_INPUT_A0,false);
//Sample timer
ADC14_enableSampleTimer(ADC_MANUAL_ITERATION); //完成一次采样后需要再用ADC14_toggleConversionTrigger才开始下一次
ADC14_enableConversion();
ADC14_toggleConversionTrigger(); //开始转化
//ADC 中断
ADC14_enableInterrupt(ADC_INT0);
Interrupt_enableInterrupt(INT_ADC14);
Interrupt_enableSleepOnIsrExit();
Interrupt_enableMaster();
计算浮点数要开启FPU模块enableFPU
//FPU enable 计算ADC使用
FPU_enableModule();
FPU_enableLazyStacking();
中断服务函数
void ADC14_IRQHandler()
{
uint32_t status = ADC14_getEnabledInterruptStatus(); //获取中断状态
ADC14_clearInterruptFlag(status); //清空标志位
// 自行指定
if (status & ADC_INT0)
{
uint16_t curADCvalue=0;
curADCvalue = ADC14_getResult(ADC_MEM0);
float curVoltage=1.0;
curVoltage = (curADCvalue * 3.3 ) / 16384 ;
}
//下一次连续采样
ADC14_enableSampleTimer(ADC_MANUAL_ITERATION); //完成一次采样后需要再用ADC14_toggleConversionTrigger才开始下一次
ADC14_enableConversion();
ADC14_toggleConversionTrigger(); //开始转化
}