本节课使用到的例程
一、Single模式例程基本配置的解释
在例程中我们只使用到了PA25这一个通道,因此我们使用的是Single这个模式,也就是我们在配置模式的时候使用的是单一转换。
进行多个通道的测量我们可以使用Sequence这个模式。
二、Single模式例程基本代码讲解
DL_ADC12_getPendingInterrupt(ADC12_0_INST)
这个函数是获取当前优先级最高的一个中断(也就是ADC0里面最高的一个中断),如果这个中断是DL_ADC12_IIDX_MEM0_RESULT_LOADED这个的话,那就进行后续的操作。
但是DL_ADC12_getPendingInterrupt()这个函数有两个功能:
(1)获取当前优先级最高的中断
(2)清楚这个中断的标志位
如果我们不使用switch case这个里面的DL_ADC12_getPendingInterrupt()这个语句的代码,那么这个中断的标志位就没有被清零,这样也就会造成一些问题:ADC只能进一次中断,第二次就没有办法进来了。
ADC就按照官方给的这个例程的格式来写
三、Single模式自己写的示例代码
(1)syscfg配置
只需要修三个部分
一个是选择ADC的通道
一个是选择存储的中断
其他的配置保持默认
(2)自己练习写示例代码
#include "ti_msp_dl_config.h"
volatile bool gCheckADC;
volatile uint16_t gAdcResult;
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);//开启ADC中断(中断名称)
while (1)
{
gCheckADC = false;//设定一个标志位
DL_ADC12_startConversion(ADC12_0_INST);//ADC开始转换
while (false == gCheckADC) ;//ADC转换完成之后false变成true,此时跳出while循环
gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);//获取ADC转换完成后采集到的值
DL_ADC12_enableConversions(ADC12_0_INST);//使能下一次的转换
}
}
void ADC12_0_INST_IRQHandler(void)//中断服务函数的名字
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) //获取当前优先级最高的中断
{
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
gCheckADC = true;
break;
default:
break;
}
}
浮空输入采集到的ADC的值
置高电平采集到的ADC的值
接地采集到的ADC的值
四、Sequence模式例程基本配置的解释
五、Sequence模式自己写的示例代码
(1)syscfg配置
(2)自己练习写示例代码
#include "ti_msp_dl_config.h"
volatile bool ADC_Flag;
volatile uint16_t ADC_Value0;
volatile uint16_t ADC_Value1;
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
while (1)
{
ADC_Flag=false;
DL_ADC12_startConversion(ADC12_0_INST);
/*启动转换只有一次,是因为该启动转换是针对ADC0,是这一个序列的转换
因此我们虽然开启了两路ADC,但是不需要启动两次ADC转换*/
while(ADC_Flag==false);
ADC_Value0=DL_ADC12_getMemResult(ADC12_0_INST,DL_ADC12_MEM_IDX_0);//PA25
ADC_Value1=DL_ADC12_getMemResult(ADC12_0_INST,DL_ADC12_MEM_IDX_1);//PB24
DL_ADC12_enableConversions(ADC12_0_INST);
}
}
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST))
{
case DL_ADC12_IIDX_MEM1_RESULT_LOADED://只需要写最后一个存储器
ADC_Flag=true;
break;
default:
break;
}
}
还有一个就是给GPIO的引脚输出高电平,让高电平引脚PA26和PB24相连,测它的电压
ADC0和ADC1要添加两个ADC的组,不是在一个ADC里面进行配置