(教學簡報內容保留所有版權~欲轉載請註明出處~謝謝)


P2.
FPPA硬體組織架構圖
八個核心的地位是平行的,可以同時共享所有的IO、暫存器、ROM、SRAM
各自擁有的有程式指標PC、堆疊SP、累加器ACC、狀態旗標FLAG
P3.
韌體在 OPT ROM 中看的來的架構類以這個樣子,位址 000h~007h 是八個核心的程式進入點,FPPA一上電開始運作程序就是從這個地方開始,但是一開始只有FPP0是在RUN的狀態,其它都是暫停的狀態,原因是為了給MCU作初始化的動作,這個後面會談到。 再來010h的地方是FPPA中斷進入點,FPPA跟傳統MCU一樣可以設置IO、Timer…的Interrupt ,但是我自己在實作上卻很少用到(因為有八核分工,不再需要去”打斷”主程序的進行),等對FPPA程式運作有了初步的概念後,你就會發覺Interrupt事實上不是必要的。(這對大多數人是一項好消息,因為不用再為一大堆奇奇怪怪的暫存器作設定來初始化Interrupt)
再後面的 ROM 區都是韌體存放的地方,順序其實沒有一定,看個人習慣作安排,當然最好還是以看的懂、易維護為原則,譬如同一個核心的主程式碼放一起、副程式放一起、變數宣告放一起、常數定義放一起、TABLE放一起…。
P4.
這張是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,然後開始同步多工執行。
P6.
開機程序目的是幫 MCU 作初始化的動作,設定核心時脈、IO、記憶體變數…,之後系統才算是真正開始運作。
P7.
初始化的流程寫成程式碼其實沒幾行,就是設定一些暫存器的值,這邊是一小段範例,大體上都跑不出這樣的框架,至於暫存器的值要填什麼? 最好研讀原廠 Datasheet 會有更詳細的說明。底下先大略介紹幾個重要而且必要的。
eoscr-設定是否使用外部RC或OSC
clkmd-設定系統時脈振盪除頻、看門狗
ihrcrh ihrcrl-設定使用內部HighRC的頻率校正值 pmode-設定八個核心系統時脈分時
各核心跑多快? 舉例來說 外掛16MhzOSC、clkmd/2、pmode/8 = 16/2/8 = 1Mhz è 1T = 1us (1T=1個指令週期)
P13.
總結一下 FPPA 程式的架構可以看成這張圖,這也是我自己的程式樣版程式,一些固定不變的BOOT程序、常數的定義都寫好了,有新的專案就只要稍微修改一下設定值就可以專心在程式的開發上了(畢竟那才是重點)