单片机学习小组
登录
直播中
李华瑞
7年用户
926经验值
私信
关注
如何对基于RT1052 Aworks的ADC控制器进行测试呢
开启该帖子的消息推送
单片机
adc
控制器
怎样去驱动基于RT1052 Aworks的
ADC控制器呢?
如何对基于RT1052 Aworks的
ADC控制器进行测试呢?
回帖
(1)
石根厚
2022-2-28 15:39:07
在适配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的框架。
在适配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的框架。
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
adc
控制器
在
RT1052
上的
Aworks
框架
进行
BSP开发遇到哪些问题
呢
2022-02-28
750
求正点原子号令者I.MX
RT1052
的上手指南?
2021-04-02
4598
RT1052
外挂RAM和FALSH与STM32外部拓展差别是什么?
2023-11-02
288
请问
rt1052
有计数
器
吗?
2023-03-29
379
用STM32F7或
RT1052
做示波器可行吗?
2023-10-27
302
rt1052
性能有多强?
2023-10-27
290
rt1052
的ocram一般放什么类型的数据?
2023-05-22
375
rt1052
的usb属于高速usb,hid设备最大不是可以支持到1024字节?
2023-04-17
269
RT1052
与STM32F7 H7之间的差别是什么?
2023-11-02
368
请问
RT1052
的网口速度能到多少?
2023-10-26
258
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分