Version 5, last updated by fellong at Jun 03 14:46 2008 UTC
第二章-FPPA程式架構
(教學簡報內容保留所有版權~欲轉載請註明出處~謝謝)
P2.
FPPA硬體組織架構圖
八個核心的地位是平行的,可以同時共享所有的IO、暫存器、ROM、SRAM
各自擁有的有程式指標PC、堆疊SP、累加器ACC、狀態旗標FLAG
韌體在 OPT ROM 中看的來的架構類以這個樣子,位址 000h~007h 是八個核心的程式進入點,FPPA一上電開始運作程序就是從這個地方開始,但是一開始只有FPP0是在RUN的狀態,其它都是暫停的狀態,原因是為了給MCU作初始化的動作,這個後面會談到。
這張是FPPA記憶體的架構圖,事實上是完全空白的,完全可以由程式設計師來作分配。(index是什麼? RAM查表用,不同於ROM查表…),比較要注意的是STACK的分配(順便解釋一下stack的概念…),由於FPPA的STACK是由程式設計師來分配位置、大小,你可以自訂STACK起點,所以比較要小心的一點就是要了解自己程式運行所需要的STACK大小來合理分配STACK,以免各CPU的STACK重疊或超出SRAM的大小。
P5.
這張是基本的程式碼架構圖,其實也就是跟剛剛介紹的 ROM 的架構圖一樣。
.romadr 0x0000 代表底下程式碼要放到 ROM 位址 0X0000,也是 FPPA 開始運作的起點, 8行等於八個核心的起點。
FPPA一上電,FPP0 Enable 其餘 Disable 狀態,等 FPP0 作好一些初始化的動作,再 Enable 其它 FPP,然後開始同步多工執行。
開機程序目的是幫 MCU 作初始化的動作,設定核心時脈、IO、記憶體變數…,之後系統才算是真正開始運作。
P7.
初始化的流程寫成程式碼其實沒幾行,就是設定一些暫存器的值,這邊是一小段範例,大體上都跑不出這樣的框架,至於暫存器的值要填什麼? 最好研讀原廠 Datasheet 會有更詳細的說明。底下先大略介紹幾個重要而且必要的。
clkmd-設定系統時脈振盪除頻、看門狗
各核心跑多快? 舉例來說 外掛16MhzOSC、clkmd/2、pmode/8 = 16/2/8 = 1Mhz è 1T = 1us (1T=1個指令週期)
總結一下 FPPA 程式的架構可以看成這張圖,這也是我自己的程式樣版程式,一些固定不變的BOOT程序、常數的定義都寫好了,有新的專案就只要稍微修改一下設定值就可以專心在程式的開發上了(畢竟那才是重點)