rt-thread的rt-smart已經(jīng)發(fā)布有段時(shí)間了,其實(shí)我之前也寫過幾篇關(guān)于rt-smart的文章,但是都是關(guān)于CMake構(gòu)建工程的文章。
而對(duì)我來說一直想在用戶態(tài)操作一下底層硬件的東西。而在前段時(shí)間,韋東山老師在他100ask_imx6ull移植了rt-smart,剛好之前拿到一塊imx6ull的板子,所以我也跟這位大佬一起學(xué)習(xí)了一下rt-smart。
移植的過程我就不再這里說了,大家可以去看一下韋老師的視頻,講的非常好。
這篇文章主要講一下我的點(diǎn)燈大法。
環(huán)境
100ask_imx6ull開發(fā)板。
兩條micro USB線。
電源。
windows電腦一臺(tái)。
適配底層驅(qū)動(dòng)
IMX6ULL的gpio有五組,每組最多有32個(gè),但是實(shí)際每組沒有那么多
GPIO1 有 32 個(gè)引腳:GPIO1_IO0~GPIO1_IO31;
GPIO2 有 22 個(gè)引腳:GPIO2_IO0~GPIO2_IO21;
GPIO3 有 29 個(gè)引腳:GPIO3_IO0~GPIO3_IO28;
GPIO4 有 29 個(gè)引腳:GPIO4_IO0~GPIO4_IO28;
GPIO5 有 12 個(gè)引腳:GPIO5_IO0~GPIO5_IO11;
首先需要看芯片手冊(cè),查找寄存器,在imx6ull的寄存器是比較亂的,每一組GPIO的寄存器都是不是連續(xù)的,所以寫的時(shí)候,需要對(duì)著手冊(cè)來寫??梢詤⒖肌秈.MX 6ULL Applications ProcessorReference Manual》文檔。
根據(jù)手冊(cè),我已經(jīng)把GPIO對(duì)接到rt-thread的pin驅(qū)動(dòng)框架了。其實(shí)我一開始自己寫好底層寄存器部分的代碼,然后去對(duì)接到pin驅(qū)動(dòng)。后面在gitee上看發(fā)現(xiàn)了NXP的一套庫,后面我又重新對(duì)接了一次,這樣我就不用自己造輪子了。下面自己造的輪子:

這里我把GPIO分為兩組,第一組:GPIO1 ~ GPIO4,第二組:GPIO5。他們的每組基地址分別為:

根據(jù)每組的基地址,給每一組做了一個(gè)地址偏移的表格這樣就可以通過下面的宏定義等到對(duì)應(yīng)的引腳:
#define GET_PIN(PORTx, PIN) (32 * (PORTx - 1) + (PIN & 31))

在rt-smart中,我不能直接使用物理地址,需要使用虛擬地址。rt-smart提供了相對(duì)應(yīng)的API(rt_hw_kernel_phys_to_virt)供我們將物理地址轉(zhuǎn)為虛擬地址。我們以pin_write為例:
rt-thread中,imux6ull的gpio寫操作:

rt-smart中,imux6ull的gpio寫操作,需要增加phy addr 到vitr addr的轉(zhuǎn)換:

對(duì)接好pin驅(qū)動(dòng)的ops->rt_pin_ops:

注冊(cè)pin設(shè)備:

編譯燒錄:

應(yīng)用開發(fā)
在rt-thread中,我們經(jīng)常使用一組API,rt_pin_mode, rt_pin_write。但是在rt-smart中這套東西是使用不了的。而需要使用設(shè)備驅(qū)動(dòng)框架那一套東西,open,write,read.
imx6ull的led燈的GPIO對(duì)應(yīng)第5組第3個(gè)引腳。然后定義兩個(gè)結(jié)構(gòu)體:pin_mode,pin_status.

寫一個(gè)流水燈的代碼。

原文標(biāo)題:rt-smart的第一個(gè)應(yīng)用程序,imx6ull用戶態(tài)點(diǎn)燈
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7338瀏覽量
128805 -
RTThread
+關(guān)注
關(guān)注
8文章
133瀏覽量
42572
原文標(biāo)題:rt-smart的第一個(gè)應(yīng)用程序,imx6ull用戶態(tài)點(diǎn)燈
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問rt smart 的用戶應(yīng)用程序能自動(dòng)加載嗎?
使用qemu-vexpress-a9 運(yùn)行用戶程序跑不了怎么解決?
QEMU快速上手(Win),源碼文件夾對(duì)不上是為什么?
如何移植rt-thread到野火imx6ull開發(fā)板上?
請(qǐng)問有沒有用uboot引導(dǎo)啟動(dòng)過rtthread-smart的?
求助,關(guān)于rt-smart用戶態(tài)線程實(shí)時(shí)性差的問題求解
RT_Thread Studio 為什么點(diǎn)燈都無法實(shí)現(xiàn)?
RT-Thread BSP全面支持玄鐵全系列RISC-V 處理器 | 技術(shù)集結(jié)
如何在K230上移植mipi sensor,然后讀取mipi接口的raw數(shù)據(jù)?
K230使用RT-Smart SDK開發(fā)怎么連接Wifi?
在iMX6ULL上設(shè)置MAC地址,啟動(dòng)后無法獲得相同的mac id?
如何維護(hù)i.MX6ULL的安全內(nèi)核?
RT-Thread Smart攜手K230/K230D打造多核RISC-V高性能嵌入式操作系統(tǒng)

rt-smart中的imx6ull用戶態(tài)點(diǎn)燈
評(píng)論