《uCOOS-II原理與ARM應用程序設計》課件第9章_第1頁
《uCOOS-II原理與ARM應用程序設計》課件第9章_第2頁
《uCOOS-II原理與ARM應用程序設計》課件第9章_第3頁
《uCOOS-II原理與ARM應用程序設計》課件第9章_第4頁
《uCOOS-II原理與ARM應用程序設計》課件第9章_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第九章天嵌TQ2440移植與實例

9.1準備工作9.2TQ2440工程實例9.3Bootloader9.4本章小結

TQ2440實驗板集成了主頻為400MHz的S3C2440芯片,板載2片HY57V561620芯片,使得SDRAM空間大小為64MB,外擴NAND型FLASH芯片為64MB的K9F1208,同時,也集成了一個2MB大小的NOR型FLASH芯片AM29LV160DB。該實驗板是性價比較高的ARM實驗平臺,筆者基于該平臺做了大量的程序設計工作。這里將基于TQ2440介紹μC/OS-Ⅱ的移植和典型應用程序框架及其Bootloader方法。由于TQ2440的外設接口與UP-Star區(qū)別較大,所以,基于UP-Star的工程均需做較大的修改才能在TQ2440上運行。將TQ2440的串口0與計算機串口相連(建議在關機狀態(tài)下操作),連接好J-LINK仿真器(需接第一章圖1-1所示轉接頭),接上TQ2440實驗板的電源插頭,打開TQ2440實驗板電源開關和計算機,則實驗平臺就建立起來了。9.1準備工作本章實例用到的硬件外設如下:

(1)四個LED燈,位于TQ2440實驗板的下方,在蜂鳴器的右下側,標號為LED1、LED2、LED3和LED4,分別與S3C2440A芯片的GPB5、GPB6、GPB7和GPB8相連接。

(2)串口0,位于TQ2440實驗板的左上方,連接方式與UP-Star實驗板相似,參考第一章圖1-30。注意:由于計算機串口的第2腳為RXD(即接收腳),第3腳為TXD(即發(fā)送腳),UP-Star實驗板的串口0第2腳為RXD,第3腳為TXD,與計算機串口排列相同,所以連接UP-Star實驗板的串口線為交叉線;而TQ2440實驗板的串口第2腳為TXD,第3腳為RXD,與計算機串口排列相反,故連接TQ2440實驗板的串口線為不交叉的平行直連線。

(3)四個按鍵,位于TQ2440的左下方,在蜂鳴器的左側,成“十”字形排列,標號為K1、K2、K3和K4,分別與EINT1、EINT4、EINT2和EINT0相連。這四個按鍵與UP-Star中的按鍵相比,沒有硬件防抖功能。

(4)蜂鳴器,由TOUT0管腳輸出的PWM波控制。

本章實例擬實現(xiàn)的功能為:當按下某個按鍵時,串口調試助手會顯示按鍵信息,對應的LED燈閃爍,同時蜂鳴器會響一下。在第八章工程ex8_1的基礎上,新建工程ex9_1,保存目錄為D:\ZYUCOSII\ex9_1,此時的工程ex9_1與工程ex8_1完全相同,只是工程文件名更改為ex9_1。工程ex9_1中人工輸入代碼的文件有bsp.c、bsp.h、app.c、app.h、appfun.c、startup.s、includes.h和ex9_1.mac,這些文件在工程ex8_1的基礎上都做了修改。下面列出了各個文件的修改情況。9.2TQ2440工程實例(1)文件ex9_1.mac使用UltraEdit軟件修改,修改的部分有中斷控制器、時鐘和存儲器,其代碼如下:28}

29

30execUserPreload()

31{

32_message"InitializingSDRAM...\n";

33setup();

34_message"InitializingSDRAM...Completed\n";

35}(2)文件startup.s修改了時鐘初始化和存儲器配置,其代碼如下:

1;Filename:startup.s

2;Byzhnyang@21

3;@2009-4-4

4;ForS3C2440A(RunafterReset)

5;CopyrightReserved

6

7;Note:@LittleEndian

8

177;EntertheCCode

178LDRR0,=main

179BXR0

180

181END(3)?includes.h文件沒有做修改,由于其代碼較少,也羅列如下:

1/*FileName:includes.h

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#include"stdio.h"

8#include"string.h"

9#include"math.h"

10

11#include"..\\ucosii\\ucos_ii.h"

12

13#include"app.h"

14#include"..\\ports\\bsp.h"

(4)文件bsp.h修改了I/O口、外部中斷0~2和外部中斷4及定時器0的定義,其代碼如下:

1/*FileName:bsp.h

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

(5)文件bsp.c修改了LED燈和定時器0的初始化及中斷入口函數(shù)OS_CPU_ExceptHndlr,其代碼如下:

1/*FileName:bsp.c

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#include"..\\user\\includes.h"

8

9voidOS_CPU_ExceptHndlr(INT32Uexcept_type)

(6)文件app.h修改了信號量、定時器和任務的聲明,其代碼如下:

1/*FileName:app.h

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#ifdefMY_APP_GLOBALS

8#defineMY_APP

9#else

10#defineMY_APPextern

(7)文件app.c沒有做任何修改,由于其代碼短小,這里羅列如下:

1/*FileName:app.c

2**Byzhnyong@21

3**@2009-4-4

4**MainRoutine

5**CopyrightReserved

6*/

7

8#include"includes.h"

9

(8)文件appfun.c修改較大,其代碼如下:

1/*FileName:appfun.c

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#defineMY_APP_GLOBALS

8#include"includes.h"

9

346//TheCallbackfunctionforRingTmrTimer

347voidringTmrFnc(void*ptmr,void*callback_arg)

348{

349//CloseRing

350TCON&=~(1<<0);//StopTimer0

351GPBCON&=~(1<<1|1<<0);

352}第13~34行為LED燈點亮函數(shù);第36~41行為關閉四個LED燈的函數(shù);第43~65行為使LED燈閃爍一下的函數(shù)。第70~75行為開定時器4中斷;第77~89行為開放外部中斷0、1、2和4。第94~134行為串口收發(fā)相關的函數(shù)。

第139行為任務AppTaskStart的代碼,其中,第164~171行創(chuàng)建了四個信號量,即key1Sem、key2Sem、key3Sem和key4Sem;第180~186行創(chuàng)建了一個OneShot型一次定時器,該定時器啟動后,延時0.5秒后將調用回調函數(shù)ringTmrFnc,然后自動停止。第204~247行創(chuàng)建了四個任務。

第249~268行為任務AppTask_1代碼,在第256行,請求key1Sem信號量,如果得到該信號量,則第259~263行將通過串口調試助手輸出按鍵信息,啟動系統(tǒng)定時器RingTmr,并打開蜂鳴器,0.5秒后,在回調函數(shù)ringTmrFnc中關閉蜂鳴器(第347~352行)。其他三個任務的代碼與任務1相似。

(9)工程ex9_1的配置也需要修改,如圖9-1至圖9-4所示。圖9-1調試選項“Setup”圖9-2調試選項“Breakpoints”圖9-3連接配置文件“MemoryRegions”圖9-4連接配置文件“Stack/HeapSizes”

(10)完成后的工程ex9_1如圖9-5所示。仿真調試時,按下四個按鍵K1、K2、K3和K4的任一個按鍵后,相應的LED燈會閃動,同時蜂鳴器會鳴叫0.5秒,串口調試助手將顯示按鍵信息,如圖9-6所示。圖9-5工程ex9_1圖9-6串口調試助手顯示結果工程ex9_1工作在仿真環(huán)境下,需要做一些修改才能生成正確的Boot表,即能下載到FLASH中的目標代碼。

在工程ex9_1的基礎上,新建工程ex9_2,保存目錄為D:\ZYUCOSII\ex9_2,與工程ex9_1相比,需要改動的文件只有cstartup.s,即在該文件中添加Bootloader代碼,使芯片S3C2440A上電復位后,將程序代碼從FLASH中拷貝到SDRAM中,并重定位SDRAM到地址0x0處。文件cstartup.s的內(nèi)容如下:9.3Bootloader需要重點關注的代碼行為第149~249行,這段代碼將FLASH的地址0x0~0x100000范圍內(nèi)的代碼搬移至SDRAM的地址0x30000000~0x30100000處,請讀者結合《ARM原理與C程序設計》以及K9F1208芯片資料自行分析代碼。

此外,工程ex9_2的配置需要修改,如圖9-7和圖9-8所示。在圖9-7中,ROM地址為0x1000~0x9FFF;RAM地址為0x10000~0x2FFFF。這兩個空間均可以取得大一些(從附錄二中flash.h文件可知實際目標文件代碼最高地址為0x7E10)。圖9-8指示EWARM將編譯生成目標文件ex9_2.hex,這個目標文件中的數(shù)據(jù)提取出來生成文件flash.h,生成方法參考第7.2.3節(jié)。將生成的flash.h文件寫入TQ2440實驗板中的FLASH芯片K9F1208中,即可使工程ex9_2自舉運行。將flash.h寫入K9F1208芯片中的工程參見附錄二工程ex9_3。

注意:工程ex9_2不能在線仿真運行!圖9-7工程ex9_2鏈接配置圖9-8工程ex9_2輸出目標文件配置另一種將工程ex9_2的目標文件下載到TQ2440實驗板的FLASH芯片K9F1208的方法為借助于H-JTAGv0.9.2軟件,這時圖9-8中的配置改動如圖9-9所示。圖9-9生成普通二進制目標代碼按圖9-9所示配置后,編譯鏈接工程ex9_2將在D:\ZYUCOSII\ex9_2\Debug\Exe目錄下生成ex9_2.bin目標文件。bin文件與hex文件相比,bin文件是沒有格式的,其內(nèi)容為從第0個地址開始依次按字節(jié)排列到最后一個地址的數(shù)據(jù)。

然后,取下J-LINK仿真器(斷開電源操作),連接TQ2440簡易并口仿真器與其JTAG口,打開TQ2440實驗板電源,運行H-JTAG軟件,配置并口如圖9-10所示,點擊“OK”按鈕后進入圖9-11。在圖9-11中,不能選中“AutoInit”菜單。圖9-10H-JTAG連接圖圖9-11H-JTAG服務器正常

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論