1. 程式人生 > >移植 RT-Thread 到MB9BF218S

移植 RT-Thread 到MB9BF218S

        MB9BF218S 又是我玩過的一個巨冷門的處理器, Fujitsu的cortex-M3,1MB Flash+128KB RAM 現在Fujitsu賣給了Spansion主頻144MHz 價格倒是相當公道, 利爾達獨家代理。RT-Thread 很早就聽說了,當時在考慮要不要port 一個解析器到218s上的時候有發現已經有人做了lua在RT-Thread上,真心覺得不錯。後來開始小批量的時候,公司裡突然多了好多部門開始要求加這個加那個的,量產功能,測試功能,不得不考慮做個比較牛逼一點的平臺上去,以後才好節省port第三方的庫和debug的時間。

        首先是下載RT-Thread程式碼包, 官網上抓就可以了,現在有1.2的穩定版和2.0的beta版本。這裡我選的是2.0 beta版,解壓完後進入bsp目錄下。拷貝一份mb9bf506r目錄,重新命名為mb9bf218s,執行project.uvproj,這裡還有個template.uvproj, 開啟後是空專案,不知道有毛線用?開啟後Device選項選MB9BF218S,當然如果用別的處理器,就選相應的平臺。



其實這樣也就可以了506r和218s的startup 和暫存器定義基本上是可以通用的,我還是強迫症滴吧218s的庫加進了工程目錄。

1. 建立如下三個目錄

bsp\mb9bf218s\libraries\Device\FUJISTU\MB9BF218s
bsp\mb9bf218s\libraries\Device\FUJISTU\MB9BF218s\Include
bsp\mb9bf218s\libraries\Device\FUJISTU\MB9BF218s\Source
system_mb9bf21x.c 和 startup_mb9bf21x.s 檔案放置於Source目錄下
system_mb9bf21x.h, mcu.h和mb9bf218s.h 檔案放置於Include下面

2. 替換引用目錄

將libraries\Device\FUJISTU\MB9BF506r\Include 中的MB9BF506r替換層MB9BF218s


3. 替換專案中的原始檔

將專案原始檔目錄CMSIS裡面的兩個檔案替換成剛才新建的MB9BF218s\Source\中的兩個檔案


4. 最後就是將所有對 mb9bf506r.h 的引用替換成 mb9bf218s.h, 這個時候就可以開開心心的編譯下載了。

        起步工作結束後, 我們來點個燈吧。 我的硬體板已經不是原廠的開發板了。我們自己layout了一遍,接了zigbee模組和si4463,最類似於philip hue的智慧照明以及433MHz遙控開關面面板的控制中心,我的小板板有4個LED,其中一個是雙色等,勉強當他是5個小燈燈吧。修改LED 要動的只有led.c 和led.h 兩個檔案,真真是簡單極了。原廠參考板用的是P19、P1A、P1B三個IO口點燈燈,我們的硬體工程師偏偏奇葩的用了P14-P18, 就是跟你不一樣。首先是led.h 檔案,添加了LED4和LED5的定義。

        修改LED 要動的只有led.c 和led.h 兩個檔案,真真是簡單極了。原廠參考板用的是P19、P1A、P1B三個IO口點燈燈,我們的硬體工程師偏偏奇葩的用了P14-P18, 就是不走尋常路。

        首先是led.h 檔案,添加了LED4和LED5的定義

#define USER_LED1      (1UL<<0x8)
#define USER_LED2      (1UL<<0x7)
#define USER_LED3      (1UL<<0x6)
#define USER_LED4      (1UL<<0x5)
#define USER_LED5      (1UL<<0x4)
#define USER_LED_MASK    	(USER_LED1 | USER_LED2 | USER_LED3 | USER_LED4 | USER_LED5)
        Led.c 檔案修改的就更簡單了, 三個函式rt_hw_led_on(), rt_hw_led_off(),rt_hw_led_toggle()照葫蘆畫瓢的吧led4和led5加上就可以了。編譯下載後,妥妥的小燈燈就亮起來了。

        LED完後考慮的就是串列埠除錯了,串列埠的驅動在fm3_uart.c and fm3_uart.h 這兩個檔案當中,當然我們要修改的東西不止這兩個檔案。
對比富士通原廠的程式碼,fm3_uart.c 已經被移植的面目全非了。先說一下FM3的串列埠,丫有8組串列埠,每一組串列埠都可以配置到1-4個不同位置的io口上,串列埠的配置開關由RT_USING_UARTX_Y巨集來進行選擇,在rtconfig.h 定義; 其中X 表示第[0-7]組的串列埠控制器,Y[1-4]表示Mux到的哪一組io口。原板中用了Uart0_1 我們的硬體工程師由TM奇葩的給改道了Uart4_1上。

第一步先到rtconfig.h 中定義好串列埠:

// <bool name="RT_USING_UART4_1" description="Using UART4_1" default="false" />
#define RT_USING_UART4_1


第二步再選下console 通過那個uart走,也只在rtconfig.h

// <string name="RT_CONSOLE_DEVICE_NAME" description="The device name for console" default="uart" />
#define RT_CONSOLE_DEVICE_NAME	"uart4"

這樣就可以了。。。。