0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

rt-smart中的imx6ull用户态点灯

RTThread物联网操作系统 来源:RTThread物联网操作系统 作者:RTThread物联网操作 2021-01-15 13:41 次阅读

rt-thread的rt-smart已经发布有段时间了,其实我之前也写过几篇关于rt-smart的文章,但是都是关于CMake构建工程的文章。

而对我来说一直想在用户态操作一下底层硬件的东西。而在前段时间,韦东山老师在他100ask_imx6ull移植了rt-smart,刚好之前拿到一块imx6ull的板子,所以我也跟这位大佬一起学习了一下rt-smart。

移植的过程我就不再这里说了,大家可以去看一下韦老师的视频,讲的非常好。

这篇文章主要讲一下我的点灯大法。

环境

100ask_imx6ull开发板。

两条micro USB线。

电源

windows电脑一台。

适配底层驱动

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;

首先需要看芯片手册,查找寄存器,在imx6ull的寄存器是比较乱的,每一组GPIO的寄存器都是不是连续的,所以写的时候,需要对着手册来写。可以参考《i.MX 6ULL Applications ProcessorReference Manual》文档。

根据手册,我已经把GPIO对接到rt-thread的pin驱动框架了。其实我一开始自己写好底层寄存器部分的代码,然后去对接到pin驱动。后面在gitee上看发现了NXP的一套库,后面我又重新对接了一次,这样我就不用自己造轮子了。下面自己造的轮子:

40844be2-56f1-11eb-8b86-12bb97331649.png

这里我把GPIO分为两组,第一组:GPIO1 ~ GPIO4,第二组:GPIO5。他们的每组基地址分别为:

40b16c94-56f1-11eb-8b86-12bb97331649.png

根据每组的基地址,给每一组做了一个地址偏移的表格这样就可以通过下面的宏定义等到对应的引脚:

#define GET_PIN(PORTx, PIN) (32 * (PORTx - 1) + (PIN & 31))

40ddd9be-56f1-11eb-8b86-12bb97331649.png

在rt-smart中,我不能直接使用物理地址,需要使用虚拟地址。rt-smart提供了相对应的API(rt_hw_kernel_phys_to_virt)供我们将物理地址转为虚拟地址。我们以pin_write为例:

rt-thread中,imux6ull的gpio写操作:

410e5ba2-56f1-11eb-8b86-12bb97331649.png

rt-smart中,imux6ull的gpio写操作,需要增加phy addr 到vitr addr的转换:

4166fe92-56f1-11eb-8b86-12bb97331649.png

对接好pin驱动的ops->rt_pin_ops:

41aed816-56f1-11eb-8b86-12bb97331649.png

注册pin设备:

41cf8fac-56f1-11eb-8b86-12bb97331649.png

编译烧录:

41ec8e7c-56f1-11eb-8b86-12bb97331649.png

应用开发

在rt-thread中,我们经常使用一组API,rt_pin_mode, rt_pin_write。但是在rt-smart中这套东西是使用不了的。而需要使用设备驱动框架那一套东西,open,write,read.

imx6ull的led灯的GPIO对应第5组第3个引脚。然后定义两个结构体:pin_mode,pin_status.

4231c42e-56f1-11eb-8b86-12bb97331649.png

写一个流水灯的代码。

4251a942-56f1-11eb-8b86-12bb97331649.png

原文标题:rt-smart的第一个应用程序,imx6ull用户态点灯

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6415

    浏览量

    122334
  • RTThread
    +关注

    关注

    7

    文章

    130

    浏览量

    40590

原文标题:rt-smart的第一个应用程序,imx6ull用户态点灯

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ART Pi Smart基于RT-Thread Smart系统的LVGL移植

    ART-Pi Smart开发板为RT-Thread联合百问科技出品,使用的是 NXP 公司的 i.MX6ULL 处理器,具备单核 ARM Cortex-A7,最高运行频率可以达到 800MHz。
    的头像 发表于 11-29 14:29 863次阅读
    ART Pi <b class='flag-5'>Smart</b>基于<b class='flag-5'>RT</b>-Thread <b class='flag-5'>Smart</b>系统的LVGL移植

    IMX6ULL-开机启动ssh卡顿

    1.问题现象i.MX6ULL平台,在调试过程中出现sshd在开机自启动的过程卡顿现象(等待时间较久),观察打印信息发现,sshd一定等待直到以下代码出现才能正常启动。random
    的头像 发表于 11-07 17:58 391次阅读
    <b class='flag-5'>IMX6ULL</b>-开机启动ssh卡顿

    RT-Smart开发笔记:int类型数值溢出造成的奇怪问题的分析与排查记录

    最近在调试 RT-Smart 上的用户 mq(消息队列)时,遇到一个奇怪的问题,这个例程打印了一下获取的时间,就可以正常的工作(超时退出),否则,就一直卡住(无法超时)
    的头像 发表于 10-31 16:16 530次阅读
    <b class='flag-5'>RT-Smart</b>开发笔记:int类型数值溢出造成的奇怪问题的分析与排查记录

    RT-Smart应用开发笔记:fopen造成文件被清空问题的分析记录

    RT-Smart 应用(apps)开发环境,ubuntu 20.04 + win10 VS Code
    的头像 发表于 10-20 16:01 365次阅读
    <b class='flag-5'>RT-Smart</b>应用开发笔记:fopen造成文件被清空问题的分析记录

    RT-Smart riscv64汇编注释

    rt-smart在全志D1上的代码为例,主要注释了rt-smart在riscv64上的系统初始化和异常处理的代码
    的头像 发表于 10-12 17:26 412次阅读
    <b class='flag-5'>RT-Smart</b> riscv64汇编注释

    RT-Thread Smart qemu-virt64-riscv用户userapps的编译与运行

    rt-smart 上,为了实现用户与内核的分离,使用了【系统调用】,这个系统调用可以认为是个 sdk
    的头像 发表于 10-08 15:33 720次阅读
    <b class='flag-5'>RT</b>-Thread <b class='flag-5'>Smart</b> qemu-virt64-riscv<b class='flag-5'>用户</b><b class='flag-5'>态</b>userapps的编译与运行

    搭建D1s RT-Smart开发环境踩坑笔记

    作为一个linux新手想要尝试RT-Smart的开发,但是网上教程前辈们的linux环境都是已经相对完备的,因此像我这样新手在搭建环境时常常缺这缺那的导致报错,经过一段时间的踩坑终于搞定了,因此和大家分享我遇到的坑和解决方法。
    的头像 发表于 09-28 16:26 592次阅读
    搭建D1s <b class='flag-5'>RT-Smart</b>开发环境踩坑笔记

    OKMX6ULL-C产品体验官-全功能测试

    qt),如果需要自动启动用户程序,请修改文件系统 的/etc/matchbox/session root@fl-imx6ull:/# vi /etc/matchbox/session 在
    发表于 09-18 09:16

    基于xmake的RT-Thread Smart用户开发教程

    RT-Thread Smart(以下简称 Smart) 是基于 RT-Thread 操作系统上的混合操作系统,简称为 rt-smart,它把
    的头像 发表于 09-14 11:48 839次阅读
    基于xmake的<b class='flag-5'>RT</b>-Thread <b class='flag-5'>Smart</b><b class='flag-5'>用户</b><b class='flag-5'>态</b>开发教程

    rt-smart应用程序系统调用实现过程是怎么样的?

    rt-smart应用程序系统调用实现过程是怎么样的? 比如open时候怎么一步一步切换到内核的?
    发表于 09-08 17:00

    rt-smart select的实现

    select()是常用的多路IO复用的posix调用接口。select () 函数指示指定的文件描述符的哪些已准备好读取、准备好写入或有待处理的错误条件。
    的头像 发表于 08-09 16:05 522次阅读

    零基础上手rt-smart适配bsp

    RT-Thread Smart(简称rt-smart)是基于RT-Thread操作系统衍生,面向带MMU(Memory Management Unit),中高端应用的芯片,例如ARM
    的头像 发表于 08-08 10:34 680次阅读
    零基础上手<b class='flag-5'>rt-smart</b>适配bsp

    请问一下rt-smart可以运行opencv吗?

    rt-smart可以运行opencv吗?
    发表于 08-04 16:40

    使用ART-Pi-smart用户按键点灯

    使用过 ART-Pi-smart 的应该都是从灵魂点灯开始的,关于 ART-Pi-smart 上的点灯程序驱动,应该都是使用的 rt_dev
    发表于 07-31 14:19 276次阅读

    如何将u-boot.2022.10版本移植到imx6ull开发板

    今天给大家讲一讲如何将u-boot.2022.10版本移植到imx6ull开发板上。
    发表于 07-12 14:57 912次阅读
    如何将u-boot.2022.10版本移植到<b class='flag-5'>imx6ull</b>开发板