CCS配置MSPM0G3507(五) ADC
·
一.sysconfig
(1)Quick Peripheral
1.ADC12 Profiles 设置为 Custom (自定义)
(2)Basic Config
1).Sample Clock Config
1.选择时钟源,默认为SYSOSC
2.Sample Clock Divider 默认为 Divide by 1
2).Sampling Mode Config
1.转换模式,可选择单通道和序列(多通道)
2.转换开始地址,与 Memory Config 中的开始地址一致
3.Sampling Mode 设置为 Auto 自动,则其采样时间为Advanced Config中的Timer0或Timer1来确定
4.Trigger Source 触发源设置为软件触发,即在程序中用代码开始让ADC转换
5.数据格式默认为右对齐
ADC Conversion Memory Config
1.选择接收转换结果的寄存器,其最低的地址要与 Conversion Starting Memory 相等
2.选择ADC通道
3.选择参考电压
4.选择采样周期的定时器
(3)Advanced Config
1.选择转换方式为12位
2.Power Down Mode 设置为 Manual ,即软件使能后ADC保持为上电状态,若设置为Auto,则ADC转换完1次后会下电
3.设置期望采样时间为 125us
(4)Interrupt Config
使能 MEM0 result loaded interrupt,即MEM0装载值后进入中断
(5)Pin Mux
可选择使用ADC0或ADC1
可选择复用功能引脚
二.代码
1.初始化
(1).上面将ADC触发方式设置为了软件触发,所以每次采集完一次数据都要重新开启ADC转换和使能ADC转换
(2).注意adc_flag要用 voliate 修饰,防止编译优化
重要函数:
读取MEM中的转换值
DL_ADC12_getMemResult(ADC12_0_INST,DL_ADC12_MEM_IDX_0);
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN); //使能ADC中断
//开启ADC转换,需要重复开启
DL_ADC12_startConversion(ADC12_0_INST);
while (1)
{
//ADC转换结束,则读取数据
if(adc_flag)
{
//读取ADC0的MEM0的数据
adc_value = DL_ADC12_getMemResult(ADC12_0_INST,DL_ADC12_MEM_IDX_0);
adc_flag = false;
//开启ADC转换,需要重复开启
DL_ADC12_startConversion(ADC12_0_INST);
//使能ADC,否则ADC只能转换一次
DL_ADC12_enableConversions(ADC12_0_INST);
}
}
}
2.编写中断服务函数
注意:此函数会自动清除中断标志位
DL_ADC12_getPendingInterrupt(ADC12_0_INST)
void ADC12_0_INST_IRQHandler(void)
{
//DL_ADC12_getPendingInterrupt()函数会自动清除中断标志位
switch(DL_ADC12_getPendingInterrupt(ADC12_0_INST))
{
//MEM0装载数据
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
adc_flag = true;
break;
default:
break;
}
}
更多推荐
已为社区贡献8条内容
所有评论(0)