@21小跑堂 #申请原创#
RTThread上设备ADC移植与实践接前面RTThread上设备IIC和SPI的移植与实践,ADC也是项目中常用的功能之一,要说Cotex系列MCU没有ADC功能基本不可能,一般只是说有多少路ADC,ADC多少位采样,以及采样频率,转换时间等等方面的性能参数,所以关于ADC相关的基础知识大概百度一下也能清楚,这里就不详细说了,毕竟ADC技术以及用了许多年也是相当的成熟了。言归正传作为本次RTThread上设备ADC移植的核心芯片GD32E230C8T6,CotexM23核,ADC是10路,采样位数是12位。10路ADC分布分布与GPIOA和GPIOB上,后续配置映射中也是可以看到的。 [size=16.0000pt]1、RTThread设备ADC移植“套路”1.1、套路一工程文件,四个文件drv_xxx.c、drv_xxx.h、xxx.c、xxx.h,此篇为ADC,因此xxx=ADC,其中drv_ADC.c和drv_ADC.h为与MCU硬件相关的驱动C文件以及头文件,ADC.c和ADC.h为RTThread内核相关的驱动C文件以及头文件。详细工程文件如下图所示 1.2、套路二工程文件内容,drv_ADC.c文件主要包含了设备ADC的初始化以及GPIO作为ADC引脚的相关设置 GPIO引脚作为ADC功能的相关配置,其中ADC通道也进行了与STM32的MCU类似的分组,分为规则组和外部组,因此具体的怎样配置也是可以参考STM32的相关配置和说明。但是库还是用的GD自己的库当然这里还是逃不开STM32的影子。这里就不在啰嗦了,国产总需要一个过程,需要时间来修炼完善自己。总有一天会活成自己的样子,不用在再别人的影子下面行走和遭人指指点点。闲话不续,接着讲套路,呵呵........ 看完配置和初始化,接下来就是出结果的时候了,ADC少不了的关键环节ADC转换,这里直接转换出读寄存器直接得到想要的值。这就是ADC转换的终极所在,就是模拟转换数字将连续的量转换为离散的值。 1.3、套路三讲完了上面的套路二,还有一个很关键的承上启下的关键环节,这里归结为套路三,ADC硬件初始化,细看好像是硬件ADC初始化,其实里面有个关键内容那就是“注册登记”,将自己加载到RTThread内核的“设备名录”中去,这样就能让用户发现,方便用户后期进行“设备采购”,这里只是一个比喻,关键还是看内容,register函数依然贯穿每一个细节,要想被发现被使用你就必须按照RTThread的套路来安排,要不然没有谁会认识你,所以总归一句话,千万不要忘记注册。 1.4、套路四套路二、三是完整的一个与MCUADC硬件密切关联的东西,下面的这个则是实现统一接口的RTThread的内核中ADC标准,在RTThread的用户中使用的都是rt开头的接口,因为有了这一层相关标准和后续的映射机制,因此这一部分没有任何需要改动的地方,因为这一切都是源自RTThread,具体的ADC相关功能内容有adc读,使能,禁用,注册等相关内容。 [size=16.0000pt]2、GD32E230上的ADC实践2.1、注册完成代码的移植后,通过list_device指令,发现了adc相关设备,同pin设备一样的type类型,通过下图的验证,发现adc设备已经成功注册上RTThread中了。 2.2、ADC测试例程结合Demo板ADC接口为PA2,ADCchannel为2通道,根据流程查找设备->使能ADC通道->读取ADC转换值->关闭ADC通道->导出到msh命令列表中。如此便完成了ADC测试例程。 小试牛刀,发现adc_vol已经导入到msh列表中 2.3、测试通过调整Demo 板上的可调电阻阻值实现不同ADC采样值得输出,三次调整,三次输出。 2.4、实践展示除了打印,当然还有显示,下图是demo板上显示屏显示的内容,以上内容仅供参考,如有不完善处,还请见谅以及提出意见,谢谢。 附上测试视频(对可调电阻进行调整后看到ADC曲线变化)和代码,仅供参考。
|