电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
rt-smart的第一个应用程序,imx6ull用户态点灯
分 享
扫描二维码分享
rt-smart的第一个应用程序,imx6ull用户态点灯
RTThread
rt-smart
IMX6ULL
Rice嵌入式开发
关注
发布时间: 2021-01-12
丨
阅读: 959
## 简介 - rt-thread的rt-smart已经发布有段时间了,其实我之前也写过几篇关于rt-smart的文章,但是都是关于CMake构建工程的文章。 - 而对我来说一直想在用户态操作一下底层硬件的东西。而在前段时间,韦东山老师在他100ask_imx6ull移植了rt-smart,所以我也跟这位大佬一起学习了一下rt-smart。 ![](https://RiceChen0.gitee.io/picture/imx6ull/1/1.jpg) - 移植的过程我就不再这里说了,大家可以去看一下韦老师的视频,讲的非常好。链接:https://www.100ask.net/index - 这篇文章主要讲一下我的点灯大法,仓库:https://gitee.com/RiceChen0/imx6ull_rt_smart ## 环境 1. 100ask_imx6ull开发板。 2. 两条micro USB线。 3. 电源。 4. windows电脑一台。 ## 适配底层驱动 1. IMX6ULL的gpio有五组,每组最多有32个,但是实际每组没有那么多 - GPIO1 有 32 个引脚:GPIO1_IO0~GPIO1_IO31; - GPIO2 有 22 个引脚:GPIO2_IO0~GPIO2_IO21; - GPIO3 有 29 个引脚:GPIO3_IO0~GPIO3_IO28; - GPIO4 有 29 个引脚:GPIO4_IO0~GPIO4_IO28; - GPIO5 有 12 个引脚:GPIO5_IO0~GPIO5_IO11; 2. 首先需要看芯片手册,查找寄存器,在imx6ull的寄存器是比较乱的,每一组GPIO的寄存器都是不是连续的,所以写的时候,需要对着手册来写。可以参考《i.MX 6ULL Applications Processor Reference Manual》文档。 3. 根据手册,我已经把GPIO对接到rt-thread的pin驱动框架了。其实我一开始自己写好底层寄存器部分的代码,然后去对接到pin驱动。后面在gitee上看发现了NXP的一套库,后面我又重新对接了一次,这样我就不用自己造轮子了。下面自己造的轮子: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/1.png) 4. 这里我把GPIO分为两组,第一组:GPIO1 ~ GPIO4,第二组:GPIO5。他们的每组基地址分别为: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/2.png) 5. 根据每组的基地址,给每一组做了一个地址偏移的表格这样就可以通过下面的宏定义等到对应的引脚: *#define GET_PIN(PORTx, PIN) (32 * (PORTx - 1) + (PIN & 31)) ![](https://RiceChen0.gitee.io/picture/imx6ull/1/3.png) 6. 在rt-smart中,我不能直接使用物理地址,需要使用虚拟地址。rt-smart提供了相对应的API(rt_hw_kernel_phys_to_virt)供我们将物理地址转为虚拟地址。我们以pin_write为例: - rt-thread中,imux6ull的gpio写操作: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/4.png) - rt-smart中,imux6ull的gpio写操作,需要增加phy addr 到vitr addr的转换: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/5.png) 7. 对接好pin驱动的ops->rt_pin_ops: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/6.png) 8. 注册pin设备: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/7.png) 9. 编译烧录: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/8.png) ## 应用开发 1. 在rt-thread中,我们经常使用一组API,rt_pin_mode, rt_pin_write。但是在rt-smart中这套东西是使用不了的。而需要使用设备驱动框架那一套东西,open,write,read. 2. imx6ull的led灯的GPIO对应第5组第3个引脚。然后定义两个结构体:pin_mode,pin_status. ![](https://RiceChen0.gitee.io/picture/imx6ull/1/9.png) 3. 写一个流水灯的代码。 ![](https://RiceChen0.gitee.io/picture/imx6ull/1/10.png) 4. 编译运行,现象: ![](https://RiceChen0.gitee.io/picture/imx6ull/1/11.png)
关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。 ![](https://RiceChen0.gitee.io/picture/logo/logo_.jpg)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
Rice嵌入式开发
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交