【学习笔记】uCOSII移植到樹莓派A+/B+/2B - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【学习笔记】uCOSII移植到樹莓派A+/B+/2B

mop ( 楼主 ) 2015-7-31 16:27:31  只看该作者 倒序浏览
本帖最后由 MOPPLAYER 于 2015-7-31 18:23 编辑

本原創為分享基於之前移植過uCOSII至樹莓派A+/B+/2B (Bare-metal)
大部分網路上的資料已經相當舊,是基於uCOS v2.5和樹莓派一代A/B
從樹莓派論壇和datasheet得知,2代所使用的CPU BCM2836和BCM2835極為類似
只是變更了部分實體位址跟DMA有關的機制
可從BCM2835的datasheet開始:

Fig. 1 BCM2835的實體位址映射

因此BCM2835,Base address為0x20000000
從論壇得知BCM2836的Base address為0x3F000000
這有利於整個移植的工作

其中uCOSII需要interrupt的實體位址來啟用Task的插斷
因此由下圖可得知interrupt register所在位址

Fig. 2 Interrupt register

可推算出BCM2835為0x2000B200~0x2000B224,故BCM2836為0x3F00B200~0x3F00B224

接下來知道Task插斷,但必須由時間來決定才能real time,因此需要一個timer來得知現在時間
故由下圖可得知timer register所在位址

Fig. 3 Timer register

可得知BCM2835為0x2000B400~0x2000B420,那麼BCM2836則為0x3F00B400~0x3F00B420

最後要Debug是否OS有順利啟動,且正確的執行Task的插斷
需要有UART來協助,以此下圖得知UART的位址,樹莓派有兩個UART,這裡使用mini UART

Fig. 4 AUX register for mini UART

同理可得BCM2835的位址為0x20215004,0x20215040~0x20215068
BCM2836的位址為0x3F215004,0x3F215040~0x3F215068

將原始的source code進行添加,需要一個使用者易於觀察的應用,所以實現點亮ACT LED的簡單應用
從A+和B+開始 ACT LED的位址也變更了,從GPIO16改為GPIO47,故要重新定義其位址
由下圖可得知其位址

Fig. 5  GPIO register

其中GPIO47所以使用第4個FSEL,即0x20200010,SET1為0x20200020,CLR1為0x2020002C
BCM2836為0x3F200010,0x3F200020,0x3F2020002C
SET0和SET1的差別對於GPIOx >32時就使用SET1,同理CLR1也是


Fig. 6 Register 寫入

Register寫入如表格,類似T-flipflop,當SET輸入為1的時候改變狀態0=>1,CLR輸入為1時候改變狀態1=>0,其餘維持狀態

使用者程式:
  1. #include "uart.h"

  2. #include "ucos/includes.h"

  3. #include "regs.h"

  4. #include "gpio.h"



  5. void userApp2(void * args)

  6. {

  7.            while(1)

  8.           {

  9.                     SetGpio(47, 1);

  10.                     uart_string("in userApp2");

  11.                     OSTimeDly(200);

  12.           }

  13. }



  14. void userApp1(void * args)

  15. {

  16.           while(1)

  17.           {

  18.                     OSTimeDly(100);

  19.                     SetGpio(47, 0);

  20.                     uart_string("in userApp1");

  21.                     OSTimeDly(100);

  22.           }

  23. }
复制代码




至此,核心的移植改動都完成了,可進行編譯和實際上機運行,以下針對樹莓派2代上機實測

Fig. 7 編譯kernel7.img樹莓派2代使用

將kernel7.img置換SD卡中第一分割區(Boot)原來的kernel7.img

<實測>

Fig. 8 UART 輸出

影片會上傳附件 VIDEO0027.rar (8.85 MB, 下载次数: 9)
原始碼放於github

<總結>
藉由移植uCOSII到樹莓派A+/B+和2代可以學習最底層的架構和應用,register之間的轉移,也希望申請到OK210來進行相同的學習和研究,並嘗試新的應用和底層開發,並做比較和撰寫心得報告,分享給大家,謝謝!!

9个回复

mydianzi777 发表于 2015-8-7 11:35:57

谢谢楼主的帖子,学习了
s2nake 发表于 2015-8-9 00:27:57
好资料,谢谢楼主
回复

举报 使用道具

燕小飞 发表于 2015-8-10 17:23:50
谢谢楼主的帖子,学习了
h1654155271.5441 发表于 2015-8-11 21:09:48
谢谢,,,,,,,,,,,,,,,,,,
回复

举报 使用道具

yuzhiboqianyuan 发表于 2015-8-13 10:52:07
谢谢楼主的帖子,学习了
黄俊凯 发表于 2015-8-14 15:00:15
谢谢楼主的贴子,学习了~赞一个
zjfangwentao 发表于 2015-8-19 20:03:09
领教了,学习了,成长了
回复

举报 使用道具

chowphone 发表于 2015-8-20 08:17:53
谢谢楼主的帖子,学习了
mop 发表于 2015-8-20 16:45:10
感謝支持,也希望能申請到,並分享心得給大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /7 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-26 04:24 , Processed in 0.863195 second(s), Total 55, Slave 41 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表