Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ADC
NXP 微控制器
NXP-MCXN947
NXP MCXN947测评之 adc
发布于 2024-03-24 00:57:36 浏览:322
订阅该版
[tocm] # 1.前言说明 ## a.本章内容 本章通过env环境配置 FRDM-MCXN947的ADC并实验,验证目前该平台上的adc功能支持情况。 ## b.参考资料 - 《MCXNx4xRM.pdf》: MCXN947各模块操作指南 - 《MCXNx4xDS.pdf》 : MCXN947详细规格信息 - FRDM-MCXN947-Design-Files.zip : 原理图的详细细节 - 《FRDM-MCXN947-QSG.pdf》: 可以快速查看管脚位置 # 2.步骤说明 ## a.下拉代码 ```shell git clone https://github.com/RT-Thread/rt-thread.git rt-thread ``` ## # b.配置项目 ### i.切换到frdm-mcxn947工程目录 ### ii.打开env环境 在env环境下右键单击鼠标,选择“ConEmu Here”。 ### iii.打开ADC配置 1.在弹出的env环境中输入“menuconfig”后按回车,弹出当前工程的配置界面 2.切换到“HardWare Drivers Config” 3.切换到“On-Chip Peripheral Drivers” 4.选择“Enable ADC Channel” 5.从界面上看,目前板卡已经支持adc0_ch0, adc0_ch1, adc0_ch8, adc0_ch13, adc0_26 五路ADC口,但看pinmux.c中,目前实际配置的adc口为adc0_cha0 6.将因此选中adc0_ch0后保存退出 7.输入“scons --target=mdk5”后按回车重新生成工程 ## c.硬件连接 ## i.板级硬件接口定义 ### 1.adc通道硬件位置查询 - 通过查看驱动drv_adc.c代码,发现驱动实际使用的是ADC0_CHAx,而且大于14的通道会改为使用减去14的那个通道,因此实际通道为ADC0_CHA0 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240324/488bee3e02e91cef7af5da244fcfc615.png) - 原理图中adc位置分布 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240324/c55a6c10ce83387ae9a8c315b5db7157.png) ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240324/b54f737244f418f22ffdb662d9b1aa81.png.webp) ### 2.板卡位置 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240324/be20544f145d826935b6f241422dee92.png.webp) # d.编写测试程序 在application中添加测试文件adc_test.c,并编写如下代码 ```c #include
#define ADC_DEV_NAME "adc0" #define REFER_VOLTAGE 3300 // max adc voltage is 3.3V #define CONVERT_BITS (1 << 16) // 16bit adc0 void adc_test(int argv, char **argc) { rt_adc_device_t adc_dev; rt_uint32_t value, vol; rt_err_t ret = RT_EOK; adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); if (adc_dev == RT_NULL) { rt_kprintf("adc_test failed! can't find %s device!\n", ADC_DEV_NAME); return; } ret = rt_adc_enable(adc_dev, 0); while (1) { value = rt_adc_read(adc_dev, 0); vol = value * REFER_VOLTAGE / CONVERT_BITS; rt_kprintf("the voltage is :[%d.%03d]V \n", vol / 1000, vol % 1000); rt_thread_delay(2000); } return; } MSH_CMD_EXPORT(adc_test, ADC test) ``` 编译后下载至开发板,在命令行中输入adc_test验证效果 # 3.代码验证 预期效果: J4的第2脚接到J3的第14脚时,读到的电压值在0V左右 J4的第2脚接到J3的第4脚时,读到的电压值在3.3V左右 [验证视频](https://www.bilibili.com/video/BV1ut421V7YG/ "验证视频") 由于代码涉及到提PR的部分,因此最终测试代码暂未上传,待PR结果确定后,将剩余的adc功能验证代码提交。代码路径:[oxlm/rt-thread at frdm-mcxn947 (github.com)](https://github.com/oxlm/rt-thread/tree/frdm-mcxn947 "oxlm/rt-thread at frdm-mcxn947 (github.com)") # 4.遇到问题及解决办法 ## a.drv_adc.c代码未编到 原因: drv_adc.c中所有代码都被 #if defined(BSP_USING_ADC0) || defined(BSP_USING_ADC1) 包裹,但这两个宏并未定义 修复方法: 1. 修改bsp/nxp/mcx/mcxn/frdm-mcxn947/board/Kconfig 2. 重新运行menuconfig后保存 3. 运行scons --target=mdk5重新生成工程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240324/2c8547a52f58d6b4dc8c201306757e31.png) ## b.工程中缺少fsl_lpadc.c和fsl_spc.c 原因:这两个文件并未被添加至编译链表中 修复方法: 在 bsp/nxp/mcx/mcxn/Libraries/MCXN947/SConscript中添加以下两行代码: ```c src += ['MCXN947/drivers/fsl_lpadc.c'] src += ['MCXN947/drivers/fsl_spc.c'] ``` ## c.编译后adc0_ch0无功能 原因:管脚复用关系并未改到adc功能 修复方法: 修改pin_mux.c,注释掉 FC2_P0 I2C_SDA并解除 ANA_0, ADC0_A0的注释 ```c PORT4->PCR[0] = PORT_PCR_MUX(0) | PORT_PCR_PS(0) | PORT_PCR_PE(0) | PORT_PCR_IBE(1); /* ANA_0, ADC0_A0 */ // PORT4->PCR[1] = PORT_PCR_MUX(0) | PORT_PCR_PS(0) | PORT_PCR_PE(0) | PORT_PCR_IBE(1); /* ANA_1, ADC0_B0 */ // PORT4->PCR[0] = PORT_PCR_MUX(2) | PORT_PCR_PS(0) | PORT_PCR_PE(0) | PORT_PCR_IBE(1); /* FC2_P0 I2C_SDA */ PORT4->PCR[1] = PORT_PCR_MUX(2) | PORT_PCR_PS(0) | PORT_PCR_PE(0) | PORT_PCR_IBE(1); /* FC2_P1 I2C_SCL */ ``` # 5.总结 可以感受的出来,目前代码中adc仅仅是大致打通了adc0_cha0通道,其余通道需后续继续添加,不过看驱动文件,预计adc0_cha[x]仅仅需要修改pin_mux.c即可。另外,实际上驱动代码并未对具体channel做管控,甚至adc0_chb[x] 和 adc1部分的代码都未添加完毕。此部分代码需后续继续完善。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
oxlm
这家伙很懒,什么也没写!
文章
4
回答
102
被采纳
8
关注TA
发私信
相关文章
1
试贴-消灭0主题
2
LPC M4的一些资料
3
LPC4088的临时分支
4
lpc1788 ad 不稳定
5
1788 LCD控制器缓冲区字节问题
6
一起来学习LPC4088吧
7
上传LPC4088的realtouch主工程
8
RealBoard 4088预定帖 [第一批板子不多,预定提前结束]
9
晒RealBoard LPC4088开箱照啦,速带小板凳前来围观
10
4088主程序需要的SD卡资源
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部