完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在适配ADC硬件时,先学习Aworks ADC编程的接口,查看Aworks提供的测试demo,才知道其导出什么样的接口供应用层使用。只要在注册ADC时,确认了其对应的通道号,编程起来就很轻松了。
1. 首先阅读原理图 在RT1052上面有两个ADC控制器,每个控制器各16个转换通道,RT1052有些引脚只能当作数字引脚,有些引脚同时支持数字引脚和模拟引脚功能 2. 设备资源及驱动适配 2.1 设备资源的注册 其设备资源均在awbl_hwconf_imx1050_adc1.h awbl_hwconf_imx1050_adc2.h注册 所以需要先确认硬件设计上对应的ADC引脚,在如下两个函数当中打开即可。 aw_local void __imx1050_adc1_plfm_init (void) { int i = 0; aw_local aw_const int adc1_gpios[] = { //GPIO1_27, /* channel 0 */ //GPIO1_12, /* channel 1 */ //GPIO1_13, /* channel 2 */ //GPIO1_14, /* channel 3 */ //GPIO1_15, /* channel 4 */ //GPIO1_16, /* channel 5 */ //GPIO1_17, /* channel 6 */ //GPIO1_18, /* channel 7 */ //GPIO1_19, /* channel 8 */ /*SWS_DET_AD*/ GPIO1_20, /* channel 9 */ /*BRAKE_DET_AD*/ GPIO1_21, /* channel 10 */ //GPIO1_22, /* channel 11 */ //GPIO1_23, /* channel 12 */ /* Reserve1_DET_AD */ GPIO1_24, /* channel 13 */ /* Reserve2_DET_AD */ GPIO1_25, /* channel 14 */ /*Reserve3_DET_AD*/ GPIO1_26, /* channel 15 */ }; if (aw_gpio_pin_request("adc1_gpios", adc1_gpios, AW_NELEMENTS(adc1_gpios)) == AW_OK) { for (i = 0; i < AW_NELEMENTS(adc1_gpios); i++) { /* ÅäÖÃADÒý½Å */ aw_gpio_pin_cfg(adc1_gpios, IMX1050_PAD_CTL(0)); } } aw_clk_enable(IMX1050_CLK_CG_ADC1); }; aw_local void __imx1050_adc2_plfm_init (void) { int i = 0; aw_local aw_const int adc2_gpios[] = { /*Reserve4_DET_AD*/ GPIO1_27, /* channel 16 */ /*VDD_DET*/ GPIO1_28, /* channel 17 */ /*NTC_AD*/ GPIO1_29, /* channel 18 */ //GPIO1_30, /* channel 19 */ //GPIO1_31, /* channel 20 */ //GPIO1_16, /* channel 21 */ //GPIO1_17, /* channel 22 */ //GPIO1_18, /* channel 23 */ //GPIO1_19, /* channel 24 */ //GPIO1_20, /* channel 25 */ //GPIO1_21, /* channel 26 */ //GPIO1_22, /* channel 27 */ //GPIO1_23, /* channel 28 */ //GPIO1_24, /* channel 28 */ //GPIO1_25, /* channel 30 */ //GPIO1_26, /* channel 31 */ }; if (aw_gpio_pin_request("adc2_gpios", adc2_gpios, AW_NELEMENTS(adc2_gpios)) == AW_OK) { for (i = 0; i < AW_NELEMENTS(adc2_gpios); i++) { /* ÅäÖÃADÒý½Å */ aw_gpio_pin_cfg(adc2_gpios, IMX1050_PAD_CTL(0)); } } aw_clk_enable(IMX1050_CLK_CG_ADC2); }; 2.2 设备驱动的注册 在aw_prj_config.c文件当中 #ifdef AW_DRV_IMX1050_ADC awbl_imx10xx_adc_drv_register(); #endif 2.3 设备宏开关 在aw_prj_param_auto_cfg.h文件当中,如果定义了AW_DEV_IMX1050_ADC1 AW_DEV_IMX1050_ADC2对就的宏AW_DRV_IMX1050_ADC就会被定义,ADC控制器驱动就会被注册。所以我们只需要在aw_prj_params.h中打开如下两个宏. 至此BSP适配完毕,可以通过Awork标准接口进行访问。 aw_prj_params.h #define AW_DEV_IMX1050_ADC1 /**< brief iMX1050 ADC */ #define AW_DEV_IMX1050_ADC2 /**< brief iMX1050 ADC2 */ aw_prj_param_auto_cfg.h /** * name ÄÚ²¿ADC * @{ */ #if defined AW_DEV_IMX1050_ADC1 || defined AW_DEV_IMX1050_ADC2 #ifndef AW_COM_ADC #define AW_COM_ADC #endif #define AW_DRV_IMX1050_ADC #endif /** @} */ 3. 如何测式 #define ADC_TEST #define SWS_DET_AD_CH_NUM 9 #define BRAKE_DET_AD_CH_NUM 10 #define Reserve1_DET_AD_CH_NUM 13 #define Reserve2_DET_AD_CH_NUM 14 #define Reserve3_DET_AD_CH_NUM 15 #define Reserve4_DET_AD_CH_NUM 16 #define VDD_DET_AD_CH_NUM 17 #define NTC_AD_CH_NUM 18 #define ADC_CH_NUMS 8 int ch_num_buf[ADC_CH_NUMS] = { SWS_DET_AD_CH_NUM, BRAKE_DET_AD_CH_NUM, Reserve1_DET_AD_CH_NUM, Reserve2_DET_AD_CH_NUM, Reserve3_DET_AD_CH_NUM, Reserve4_DET_AD_CH_NUM, VDD_DET_AD_CH_NUM, NTC_AD_CH_NUM, }; char* ch_map_string[] = { "SWS_DET_AD", "BRAKE_DET_AD", "Reserve1_DET_AD", "Reserve2_DET_AD", "Reserve3_DET_AD", "Reserve4_DET_AD", "VDD_DET_AD", "NTC_AD" }; #ifdef ADC_TEST #define SAMPLES_NUM 5 void adc_test(){ uint16_t adc_val[SAMPLES_NUM]; uint32_t vol_val[SAMPLES_NUM]; int i; for(i=0; i < ADC_CH_NUMS; i++){ memset(adc_val, 0, sizeof(adc_val)); memset(vol_val, 0, sizeof(vol_val)); aw_adc_sync_read(ch_num_buf, adc_val, SAMPLES_NUM, AW_FALSE); aw_adc_val_to_mv(ch_num_buf, adc_val, SAMPLES_NUM, vol_val); for (i = 0; i < SAMPLES_NUM; i++) { aw_kprintf("adc channel %s, %d conversion result : %dmVn", ch_map_string, i + 1, vol_val); } aw_mdelay(500); aw_kprintf("rn"); } } #endif 4. 总结 此次针对ADC的配置非常的简单,上层的接口简单易用。前提条件还是得学习Aworks的框架。 |
|
|
|
只有小组成员才能发言,加入小组>>
3188 浏览 9 评论
2878 浏览 16 评论
3381 浏览 1 评论
8813 浏览 16 评论
3979 浏览 18 评论
9611浏览 3评论
981浏览 3评论
502浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
505浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2227浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-20 15:44 , Processed in 0.948337 second(s), Total 44, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号