搞了幾天,總算把ucos-ii移植到mc9s12xdp512上了。做個簡短的筆記。
ucos-ii版本:2.52, 編譯器:freescale codewarrior5.9 晶元:mc9s12xdp512
移植步驟:
1. 根據嚮導建立新的工程,晶元選擇mc9s12xdp512,其餘預設配置;
2. 將ucos-ii通用原始檔複製到工程的sources目錄下下:os_core.c,os_dbg.c,os_flag.c,os_mbox.c,os_mem.c,
os+mutex.c,os_q.c,os_sem.c,os_task.c,os_time.c,ucos_ii.h,os_cfg.h並將這些檔案新增到工程中;
3. 建立新檔案,並命名為includes.h,將其新增到工程中,includes.h檔案內容為:
4. 建立新檔案os_cpu.h,並將其新增到工程中,os_cpu.h檔案內容為:
5. 建立新檔案os_cpu_c.c,並新增到工程中,os_cpu_c.c檔案內容較多,主要有以下部分:
1. 以下函式均為空: ostaskcreatehook(),ostaskdelhook(),ostaskswhook(),ostaskidlehook(),
ostaskstathook(),ostimetickhook(),osinithookbegin(),osinithookend(),ostcbinithook(),
2. ostaskstkinit()函式內容: 該函式主要模擬中斷產生時cpu的壓棧過程,根據晶元資料(is12cpuv1.pdf),中斷的壓棧次序為:
sp+7 rtnh:rtnl (返回位址)
sp+5 y
sp+3 x
sp+1 d(b:a)
sp ccr
由上,ostaskstkinit()內容為:
3. 由於codewarrior可以內聯彙編,因此將以下4個需要由彙編編寫的函式也放於os_cpu_c.c中:osstarthighrdy(),
osctxsw(), osintctxsw(),ostickisr().注意,這4個函式都應該編寫在非分頁區,4個函式的內容為:
6. 按自己需要修改os_cfg.h配置檔案
7. 在main.c中編寫如下測試**:
整個工程在我的資源裡
MC9S12G時鐘配置
一 enable外部時鐘 使cpmuosc暫存器的osce位置一 二 計算需要的頻率 以24mhz為例 pllclk 24mhz 2 x oscclk 振盪器頻率,即你的外部晶振 x synr 1 refdv 1 三 計算出synr,refdv後 把synr得值賦給cpmusynr的前六位,把ref...
MC9S12 RTI 時鐘的設定
rti,是org時鐘和復位發生模組中的乙個功能,一般用它來3秒後啟動車子。初始化它,需要兩個暫存器 crgint和rtictl。crgint的第8位 rtie是rti的中斷使能位,為1使能。而rtictl的設定,就關係到定時的時間,關鍵就是這點,估計有很多同學不太了解吧。下面來重點說說 它的第8位 ...
mc9s12xdp512的中斷程式設計
中斷在c語言裡面有兩種方式表達 1 interrupt void rti isr void same as pragma trap proc,set the entry number in the prm file這種方式定義了中斷的結構,實際的向量位址在prm檔案中定義 2 void interr...