前言
这一章节我们讲解ADC的中断传输,不讲解DMA。关于ADC的原理可自行查阅别的文章,这里博主主要讲解怎么配置,以及跟着一样的配置就能实现基本的ADC转换功能。
话不多说,直接上干货。如果有讲的不对的地方麻烦指正,谢谢。
ADC
1.AdcConfigSet
a.AdcHwUnit
这里面我创建了2个硬件单元,一个ADC0,一个ADC1;各位根据自己的回路图使用到了哪些就配置哪些。
上面没有写注释的一些内容,都是根据NXP官方demo来的,具体为什么这么选,我暂时也不太了解,初期的话可以直接参照着来。 重要部分我会着重讲解。如果有大佬会的话,也可以给我留言讲解一下,谢谢!
这里ADC的采样时间也是参照官方demo来的,直接照抄就可以。
关于上面通道的选择,着重讲一下。比如我上面的信号VKL30C,在我的回路图上连接到了PTB13
那么我们打开NXP芯片手册里面有个S32K3xxxxxx_IOMUX.xlsx文件,在IO Signal Table一栏搜索PTB13,我们可以发现这个pin支持ADC0/1/2, 在PORT配置那边,我们默认选择其中一个,比如ADC0_S8, 这个S8就是上面Adc Physical Channel Name里面选择S8_ChanNum32的原因
AdcGroupAccessMode:
在single模式下
AdcGroupConversionMode:
one-shot:每执行一次软件触发,就进行一次ADC转换,转换成功就会触发中断。
continuous:只要执行一次软件触发,就会一直进行ADC转换,每次转换完都会触发中断
在streaming模式下:
只支持:SW触发+continuous 或者 HW+one-short
AdcGroupTriggerSource:为HW的时候,只支持one-shor
软件触发的话,上面的配置基本就结束了
b.AdcHwTrigger
这个属于硬件触发相关的,但是我没有试过,以后试过完善了再来更新。
c.BctuHwUnit
这个暂时也没有研究,后续用到了再来更新。
2.AdcGeneral
3.AdcInterrupt
以上ADC的配置基本就完成了,下面我们结合代码来讲解
2.CODE使用案例
1.中断回调函数实体化
这里我在回调函数里面新增了一个变量++,用来判断ADC是否转换结束用
2.初始化
向中断向量表里注册中断
初始化ADC
ADC自标定
3.ADC转换
当ADC自标定正常完成后,进行ADC转换,然后读ADC值
Adc_SetupResultBuffer:
参数一:Group名字生成的宏
参数二:ADC转换完成的数据保存的buf, 注意buf的大小,12bit的ADC转换,
buf要定义为uint16, Group下有多少个ADC channel, buf就要有多少个元素。
比如我Group下有3个channel,我就定义了buf[3]
Adc_StartGroupConversion:
参数一:要进行ADC转换的Group
Adc_ReadGroup
参数一:要读取数据的ADC Group
参数二:这个要注意,与Adc_SetupResultBuffer()的第二个参数所使用的buf不一样。
这个函数的功能是将Adc_SetupResultBuffer参数二的值保存到Adc_ReadGroup()的
第二个参数里面去。
以上就讲解结束了。