微處理器實驗指導書選修_第1頁
微處理器實驗指導書選修_第2頁
微處理器實驗指導書選修_第3頁
微處理器實驗指導書選修_第4頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式微處理器結構與應用基于 ARM7TDMI微處理器S3C44B0X實驗指導書(選修班)撰稿人:韓桂明張錕2011年3月信息科技學院電子工程系實驗目錄實驗一實驗開發環境的創建和使用1實驗二ARM 匯編程序實驗11實驗三 GPIO 輸出控制實驗14實驗四 GPIO 輸入控制實驗16實驗五 PWM 信號實驗 17實驗六定時中斷實驗19實驗七鍵盤及LED 驅動實驗 24實驗一實驗開發環境的創建和使用一、實驗目的1. 熟悉 ADS1.2 開發環境,學習使用 ADS 編譯、下載、調試并跟蹤程序。2.了解嵌入式開發的基本思想和過程。3. 了解 UP-NETARM3000 實驗箱,學會 ARM 仿真器的使

2、用。4. 掌握 Windows 超級終端的設置,能夠正確使用實驗箱提供的BIOS 功能。二、實驗內容1.運行 Windows 系統下的超級終端,通過超級終端查看BIOS 啟動情況。2.配置 ADS 集成開發環境,新建一個簡單的工程文件,并編譯這個工程文件。3. 學習 ARM 仿真器的使用和開發環境的設置。4.下載已經編譯好的文件到嵌入式控制器中運行,學會在程序中設置斷點,觀察系統內存和變量,為調試應用程序打下基礎。三、實驗設備及工具1. 硬件: UP-NETARM3000 實驗箱、 JTAG 仿真器、 PC 機。2. 軟件: PC 機操作系統 WinXP 、ADS1.2 集成開發環境、仿真器驅

3、動程序、超級終端通訊程序。四、實驗步驟1.超級終端設置及BIOS 功能使用1)運行 Windows 系統下的超級終端( HyperTerminal)應用程序,新建一個通信終端。如果要求輸入區號、電話號碼等信息請隨意輸入。出現如圖 1.1所示對話框時,為所建超級終端取名,如“ arm”;可以為其選一個圖標,然后單擊“確定”按鈕。圖 1.1 創建超級終端2)在接下來的對話框中選擇 ARM 開發平臺實際連接的 PC 機串口(如 COM1 ),按確定后出現如圖 1.2所示的屬性對話框,設置通信的格式和協議。這里波特率為 115200,數據位 8,無奇偶校驗,停止位 1,無數據流控制。按確定完成設置。圖

4、 1.2 設置串行口3)完成新建超級終端的設置以后,可以選擇超級終端文件菜單中的保存,將當前設置保存為一個特定超級終端到桌面上,以備后用。用串口線將 PC 機串口和平臺 UART0 正確連接后,就可以在超級終端上看到程序輸出的信息。4)啟動開發板,按住開發板上鍵盤的任意按鍵,使開發板進入BIOS設置狀態。如圖 1.3所示。圖 1.3 系統的 BIOS 設置程序5)該畫面上提示了該 BIOS 的版本等信息。 Shell Menu 是平臺的檢測菜單,每個條目的最左邊字母是該功能的快捷鍵,按 PC 機鍵盤相應鍵將執行對應功能。注意操作時保持超級終端處于激活狀態,并且 PC 機鍵盤必須為小寫。6)用戶

5、可以按超級終端的提示嘗試部分測試功能,其中:l:測試 LCD 的文本和圖形顯示。 執行該命令后 LCD 上會打出文本提示, 然后進入圖形模式并顯示一幅彩色條形圖案,然后在超級終端上看提示按任意鍵返回文本模式,并退出 LCD 測試返回測試菜單。o:格式化開發平臺的 16M FLASH ,其中的文件將丟失,需要重新拷貝。執行該命令后超級終端上會出現確認提示,如果按“ y”鍵則會格式化 Flash,之后返回菜單。 n :設置開發平臺網卡的 IP 地址,子網掩碼等,下有子菜單。執行該命令后出現子菜單:p:設置 MAC地址,執行該命令后按提示操作i:設置 IP 地址,執行該命令后按提示操作,請與所在局域

6、網在同一網段m:設置子網掩碼,執行該命令后按提示操作g:設置網關的 IP 地址,執行該命令后按提示操作s:保存所設地址,設置完 IP 地址等后必須執行該命令保存設置,否則設置無效d:設置默認地址q:退出子菜單,返回到主菜單。u:激活開發平臺的 USB 連接,開發平臺的 Flash 可以作為 U 盤使用,從而可以方便的將字庫和應用程序等文件從 PC 機拷貝到平臺的 FLASH 中。使用此功能時,必須保證 USB 電纜正確連接。e:測試由 ZLG7289 驅動的 LED 顯示,共分 3 步,請看超級終端提示按任意鍵繼續,同時觀察 LED 的變化,最后返回主菜單。k:測試由 ZLG7289 控制的鍵

7、盤掃描,執行該命令后按開發平臺的鍵盤,看超級終端的鍵名顯示,而在超級終端上按 PC 鍵盤任意鍵則退出測試返回菜單。s:測試開發平臺觸摸屏,觸摸屏有動作時在超級終端上會顯示動作類型和坐標。按 PC鍵盤任意鍵后,再點一下觸摸屏即可退出測試并返回主菜單。h:設置觸摸屏的坐標基準點,也就是校屏功能。需要按提示點擊觸摸屏的3 個位置并保存結果。a:測試開發平臺的 AD 電路,執行該命令后調節平臺的 4個電位器,在超級終端上顯示 AD0 AD3 的數值。按 PC 鍵盤任意鍵退出測試并返回。d:測試開發平臺的 DA 電路,在超級終端顯示電壓值, 需要用電壓表測量平臺 DA 輸出端子。按 PC 鍵盤任意鍵退出

8、測試并返回。t:設置開發平臺的 RTC 時間參數,該時間由開發平臺上的鈕扣電池保證持續計時。請按提示確認修改時間并分別輸入時間。設置完成合需要保存,否則設置參數無效。i:測試平臺的音頻電路, 執行該命令后可以聽到一段從平臺揚聲器發出的音樂。 請適當調節音量電位器。m:測試平臺的兩個電機,需要打開電機附近的電機電源開關,按提示分別測試直流電機和步進電機。c:測試平臺的 CAN 控制器。執行該命令在超級終端顯示 CAN 控制器 ID ,正常應該顯示 1234 或 0000。b:引導 FLASH 中的應用程序 system.bin。執行該功能將退出 BIOS 狀態,把控制交給應用程序。7)按 PC

9、鍵盤的 u 鍵(要使超級終端處于活動狀態) ,這時超級終端上會顯示如圖1.4所示的信息。圖 1.4 進入 U 盤狀態這時,在“我的電腦”中可以發現多了一個“可移動磁盤” ,這就是開發板的海量存儲器 16M 非線性 Flash。開發平臺的 Flash 芯片就像一個 U 盤,可以通過“我的電腦”進行操作。可以把編譯后生成的 system.bin 文件通過 USB 下載到嵌入式開發板中, 復位系統,運行并檢查輸出結果。< 提示 >system.bin 文件是系統通過 BIOS 引導以后,裝入內存中運行的默認文件名。2. 配置 ADS 集成開發環境1)運行 ADS1.2 集成開發環境( C

10、odeWarrior for ARM Developer Suite)。選擇“ FileNew ”菜單,在對話框中選擇 Project,如圖 1.5所示,新建一個工程文件。圖中示例的工程名為 Exp6.mcp。圖 1.5 新建工程點“ set ”按鈕可為該工程選擇路徑如圖 1.6所示,選中 CreatFolder 選項后將以圖1.5中的 ProjectName為名創建目錄,這樣可以將所有與該工程相關的文件放到該工程目錄下,便于管理工程。圖 1.6 保存工程在圖 1.5中工程模板列表中我們選擇 ARM Executable Image 通用模板。我們隨后將一步一步的把它配置成針對我們 ARM30

11、00 開發板的模板 44B0 ARM Executable Imaage,并把它拷貝到 ADS1.2 安裝目錄下的 Stationery 目錄中(所有的工程模板都在此目錄下)。以后我們新建工程時,在工程模板列表中直接選中 44B0 ARM Executable Imaage 模板選項,就不必每次重新配置模板了。2)在新建的工程中,如圖 1.7所示,選擇 Debug 版本,使用 Edit | Debug Settings菜單對 Debug 版本進行參數設置。圖 1.7 選擇版本在 Debug Settings 對話框中選擇 Target Settings 項,如圖 1.8 所示。在 Post-l

12、inker一欄中選擇 ARM fromELF ,點擊右下角的 Apply 使其有效。圖 1.8 Target Settings在Debug Settings 對話框中選擇 ARM Linker 項,如圖 1.9。在 Output 下的 Linktype 中有三種類型的連接方式,我們常用的是 Simple 和 Scattered 兩種。如果程序需要用到標準 C 庫函數的話需要按 Scattered 進行連接地址的設置。如果用不到標準 C 庫函數的話,請選擇 Simple 選項。下面以 Simple方式設置為例:在 ARM Linker 項的 Output 選項卡中,我們選擇 Simple 選項,

13、如圖 1.9所示。在Simple image 框中設置連接的 Read-Only(只讀)和 Read-Write(讀寫)地址。地址0x0c080000是開發板上 SDRAM 的真實地址,是由系統的硬件決定的; 0x0c200000 指的是系統可讀寫的內存地址。也就是說 0x0c0800000xC1fffff 之間是只讀區域,存放程序的代碼段,在 0xC200000開始是程序的數據段。圖 1.9 設置連接地址范圍點擊 Layout選項卡,在 Layout 選項卡的 Place at beginning of image 框中設置程序的入口模塊。如圖 1.10所示,指定在生成的代碼中,程序從 44

14、binit.s 開始運行的。 Object 設為 44binit.o ,section 設為 init 。圖 1.10設置入口模塊3)在Debug Settings 對話框中選擇 ARM fromELF 項,如圖 1.11。在Output file name 框中設置輸出文件名為 system.bin,這就是要下載到開發板的嵌入式應用程序文件。圖 1.11設置輸出文件名4)回到如圖 1.7所示的工程窗口中, 選擇 Release 版本,使用 Edit | ReleaseSettings 菜單對 Release 版本進行參數設置。參照前文設置 Release版本的 Post-linker、連接地

15、址范圍、入口模塊和輸出文件。5)回到工程窗口中,選擇 Targets選項卡,如圖 1.12所示。選中 DebugRel 版本,按 Del 鍵將其刪除。圖 1.12 刪除 DebugRel 版本6)設置完成后,可以將該新建的空工程文件作為模板保存以便以后使用。在ADS1.2 軟件安裝目錄下的 Stationery 目錄下新建名為 ARM 44B0X Simple Image的模板目錄,再將剛設置完的 mcp工程模板文件存放到該目錄下。這樣以后新建工程的時候,就能看到圖 1.13所示以“ ARM 44B0X Simple Image ”為名字的模板了。圖 1.13 顯示 44B0 ARM 模板&l

16、t;提示 >建議同學們將老師提供的“ ARM 44B0X Scattered Image ”子目錄直接拷貝到 ADS1.2 安裝目錄下的 Stationery 目錄中,這樣也能在新建工程對話框中看到這個模板。此模板為 Scattered 版本,其中已經設置好針對本開發板的參數。3. 建立工程文件配置好針對 UP-ARM3000 的開發環境后,可以執行菜單 Project | Add Files把和工程相關的所有文件加入到工程中。ADS1.2 不能自動按文件類別對這些文件進行分類,需要的話用戶可以執行菜單 Project | Create Group 創建文件組,然后分別將不同類的文件加入

17、到不同的組,以方便管理。如圖 1.14所示。更為簡單的辦法是,在新建工程時 ADS 創建了和工程同名的目錄,在該目錄下按類別創建子目錄并存放工程文件。 然后用鼠標選中工程子目錄, 將其拖動到工程文件窗口,松開鼠標。這樣 ADS 將以子目錄名建立同名文件組并以此對文件分類。這里我們把 init 和STARTUP 兩個目錄拷貝到新建的工程目錄下,然后選中這兩個目錄,拖動到工程文件窗口,松開鼠標。這樣 ADS 將以 init 和 STARTUP 目錄名建立同名文件組并以此對文件分類。圖 1.14加入工程文件雙擊圖 1.14中的 Main.c 打開該文件,可以看到 Main() 函數的內容:int m

18、ain(void)ARMTargetInit(); / 開發版初始化LCD_Init();LCD_ChangeMode(DspTxtMode); / 轉換 LCD 顯示模式為文本顯示模式 LCD_Cls(); / 文本模式下清屏命令LCD_printf("Hello world!n"); /向液晶屏輸出Uart_Printf("nHello world!n"); / 向串口輸出while(1);讀者可以查看其他源文件的內容以對系統運行有所了解。可以發現ADS 的文本編輯器可以按語法分顏色顯示,讀者可以根據喜好在Edit 菜單下的 Preferences

19、窗口中進行設置。4.進行程序的在線仿真、調試1) 回到工程窗口選中 Debug 版本,執行菜單 Project | Make 對工程進行編譯連接。在出現的錯誤 /警告窗口中選擇某錯誤 /警告信息,ADS 會自動打開相應源文件并用箭頭指向出錯的文本行。如果某個源文件被修改,重新編譯時 ADS 會自動同步各文件的日期信息。2) 在ADS 中執行菜單 Project | Debug 啟動 ADS1.2 的調試工具 AXD 。3) 在AXD 中執行菜單 Options | Configure Target 對AXD 進行設置。如圖 1.15所示。選擇 ADP 即遠程調試,點 Configure 按鈕進

20、一步設置具體參數,如圖1.16所示。圖 1.15 設置 AXD 參數4)在圖 1.16中點 Select 按鈕選擇遠程連接為 ARM ethernet driver ,點 Configure按鈕輸入仿真器的 IP 地址。如果用戶使用的是并行口仿真器,請輸入127.0.0.1 即可。圖 1.16設置遠程連接5)等待程序裝載完畢以后,通過 Execute | Go 菜單以及 Execute | Stop(或者工具欄中的相應按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。6)通過 Execute | Step 菜單(或者工具欄中的相應按鈕)可以單步運行程序。也可以使用 Step In

21、、Step Out 菜單命令進入或者跳出函數的調用。 Run To Cursor 命令運行到光標位置。7)程序停止后可以通過 Processor Views | Sources 菜單查看源文件,并可在適當位置按 F9 設置端點。8)使用在 Processor View 菜單下的 Registers、Variables 和Memory 命令可以查看工作寄存器或者內存變量。讀者可以逐一地嘗試,為以后調試程序打下基礎。< 提示 >在進行調試時在 ADS 中必須選擇當前工程的 Debug 版本,如果選擇 Release 版本則無法正常調試程序。實驗二ARM 匯編程序實驗一、實驗目的1. 掌

22、握 ARM 匯編指令的含義和使用方法。2. 了解 ARM 指令靈活的第二操作數。3. 學習簡單匯編程序的編寫。二、實驗內容1. 使用 ARM 的數據傳送指令,能夠訪問寄存器和存儲器。2. 使用相關指令完成數據加 /減運算及邏輯運算。三、實驗設備及工具1. 硬件: UP-NETARM3000 實驗箱、 JTAG 仿真器、 PC 機。2. 軟件: PC 機操作系統 WinXP 、ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。四、實驗原理實驗參考程序:五、實驗步驟1. 啟動 ADS1.2,建立一個工程文件。然后建立匯編源文件,添加到工程中,編寫實驗程序。2. 編寫好實驗程序后,編譯連

23、接工程,選擇 Project>Debug,啟動 AXD 進行軟件仿真調試。或者點擊 Debug圖標。3. 調試并觀察程序執行過程1) AXD 調試模式,選擇 Options->Configure Target,如圖:2)選擇軟件仿真,點擊ARMUL ,并點擊 OK。3)點擊 Load Image,裝載我們的.axf文件4)打開寄存器窗口( Processor Registers),選擇 Current項監視各寄存器的值。說明:使用鼠標左鍵選擇一個寄存器,然后右擊,在 Format項中選擇顯示格式 Hex、Decimal等,如圖所示。單步運行程序,觀察寄存器值的變化。說明:有變化的寄

24、存器會以紅色顯示,如圖。4. 編寫、調試、觀察以下程序通過課本 P61頁【例 3.5】【例 3.6】,掌握無符號數和有符號數的相關運算。六、思考題1. 指令“ MOVR0,#0x12345678”是否正確?為什么?2. 將參考程序中應用 CMP指令的代碼,功能改為 “若(5*Y/2 )>(2*X), 則R5=R5|0x000000FF,否則 R5=R5&0XFFFF0000”,程序應如何修改?3. 更改參考程序 X 的值為 200, Y的值為 163,單步運行程序,每執行一步程序的結果是多少?實驗三 GPIO 輸出控制實驗一、實驗目的1. 熟悉 S3C44B0 ARM 芯片的 G

25、PIO 輸入輸出配置方法。2. 通過實驗掌握 ARM 芯片 I/O 控制 LED 顯示的方法。3. 進一步熟悉 ARM 匯編語言程序設計步驟。二、實驗內容1. 熟悉 ARM 芯片 I/O 口的編程配置方法。2.熟悉 S3C44B0 芯片 I/O 口配置寄存器。3. 通過編程實現 GPIO 的 E 口輸入, A 口輸出來控制實驗平臺上的 LED 。三、實驗設備及工具1. 硬件: UP-NETARM3000 實驗箱、 JTAG 仿真器、 PC 機。2. 軟件: PC 機操作系統 WinXP 、ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。四、實驗原理S3C44B0 芯片上共有 71

26、 個多功能 I/O 引腳,它們分為7 組 I/O 端口:2個9位I/O端口(端口 E和F)。2個8位I/O端口(端口 D 和G)。1 個 16 位 I/O 端口(端口 C)。1 個 10 位 I/O 端口(端口 A )。1 個 11 位 I/O 端口(端口 B)。每組端口都可以通過軟件配置寄存器來滿足不同系統和設計的需要。1)流程示意圖開始E 端口輸出初始化E 端口數據寄存器賦值延時結束2) 部分參考程序3) 電路原理圖五、實驗步驟GPE6GPE71. 啟動 ADS3C44B01.2,建立一芯個片工程文件。然后建立匯編源文件,添加到工程中,編寫實驗程序。VCC3.32. 編寫程序,實現用 E

27、口輸出控制 LED 燈亮、滅的匯編程序。3. 單步運行程序,查看工作寄存器;并觀察 LED 燈的亮、滅情況。六、思考題1. 用 C 語言如何實現上述程序的編寫。實驗四 GPIO 輸入控制實驗一、實驗目的1. 熟悉 S3C44B0 ARM 芯片的 GPIO 輸入輸出配置方法。2. 通過實驗掌握 ARM 芯片 I/O 控制 LED 顯示的方法。3. 進一步熟悉 ARM 匯編語言程序設計步驟。二、實驗內容1. 熟悉 ARM 芯片 I/O 口的編程配置方法。2.熟悉 S3C44B0 芯片 I/O 口配置寄存器。3. 通過編程實現 GPIO 的 E 口輸入, A 口輸出來控制實驗平臺上的 LED 。三、

28、實驗設備及工具1. 硬件: UP-NETARM3000 實驗箱、 JTAG 仿真器、 PC 機。2. 軟件: PC 機操作系統 WinXP 、ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。四、實驗原理S3C44B0 芯片上共有 71 個多功能 I/O 引腳,它們分為7 組 I/O 端口:2個9位I/O端口(端口 E和F)。2個8位I/O端口(端口 D 和G)。1 個 16 位 I/O 端口(端口 C)。1 個 10 位 I/O 端口(端口 A )。1 個 11 位 I/O 端口(端口 B)。每組端口都可以通過軟件配置寄存器來滿足不同系統和設計的需要。1)流程圖開始E 端口輸入初

29、始化A 端口輸出初始化判斷 E 口輸入情況A 口作相應的輸出值結束2) 部分參考程序3) 電路原理圖S3C44B0 芯片五、實驗步驟VCC3.3GPA2GPA3輸入1. 啟動 ADS1.2,建立一個工程GPE7文件。然后建立匯編源文件,添加到工程中,編寫實驗程序。2. 編寫實現 E 口輸入的匯編程序,使用 JTAG 進行仿真調試。3. 編寫程序,實現用 A 口輸出控制 LED 燈亮、滅的匯編程序。4. 編寫程序,通過 E 口輸入來控制 A 口的 LED 燈亮、滅, A 口、 E 口的配置采用調用子程序的方式。5. 單步運行程序,查看工作寄存器;并觀察 LED 燈的亮、滅情況。六、思考題1. 用

30、 C 語言如何實現上述程序的編寫。實驗五 PWM 信號實驗一、實驗目的1. 了解 PWM 信號的特點。2. 掌握 S3C44B0X 產生 PWM 信號的方法。3. 練習如何優化代碼。二、實驗內容1. 定時器工作方式設置。2. 配置 GPIO 為 PWM 信號輸出引腳。三、實驗設備及工具1. 硬件: UP-NETARM3000 實驗箱、 JTAG 仿真器、 PC 機。2. 軟件: PC 機操作系統 WinXP 、ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。四、實驗原理1. 實驗電路示意圖如下:R1Led1S3C44B0 芯片PWM 信號輸出2.實驗主程序框圖如下:主程序開始PW

31、M 信號端口輸出初始化設置定時器分頻、預置值初始化定時器啟動定時器停機等待3.實驗參考程序:PCONEEQU 0X01D20028PDATEEQU 0X01D2002CPUPEEQU 0X01D20030TCFG0EQU0X01D50000TCFG1EQU0X01D50004TCONEQU0X01D50008TCNTB3EQU0X01D50030TCMPB3EQU0X01D50034TCNTO3EQU0X01D50014CMD1EQU0X00A0000CMD2EQU0X0090000ENTRY; 程序入口CODE32; 指定為 32 位的ARM程序代碼STARTLDR R1,=PCONELDR

32、 R0,=0X02000STR R0,R1LDR R1,=PUPE; 不配置E 口的上拉電阻LDR R0,=0X1FFSTR R0,R1LDR R1,=TCFG0LDR R2,=0X0000FF00STR R2,R1LDR R1,=TCFG1LDR R2,=0X02000STR R2,R1LDR R1,=TCNTB3LDR R2,=0XFFFFFFFFSTR R2,R1LDR R1,=TCMPB3LDR R2,=0X88888888STR R2,R1LDR R1,=TCONLDR R2,=CMD1STR R2,R1LDR R1,=TCONLDR R2,=CMD2STR R2,R1WAITBWA

33、ITEND五、實驗步驟1. 啟動 ADS1.2,建立一個工程文件。然后建立匯編源文件,添加到工程中,編寫實驗程序。2. 編寫程序實現 PWM 輸出控制 LED 燈亮度,使用 JTAG 進行仿真調試。3.單步運行程序,查看工作寄存器;并觀察LED 燈的情況。4. 修改、完善源程序,實現程序的模塊化。六、思考題1. 在進行匯編模塊化編程的時候如何建立堆棧,實現對現場的保護。2. 用 C 語言如何實現上述程序的編寫。實驗六定時中斷實驗一、實驗目的1. 了解 S3C44B0X 處理器的定時器應用方法。2. 掌握 S3C44B0X 處理器上中斷的程序編寫。3. 進一步熟悉平臺硬件及其驅動程序的編寫。二、

34、實驗內容1.設置并啟動定時器。2.設置中斷,編寫定時器中斷服務程序,對中斷次數進行計數并用LED 顯示結果。三、實驗設備及工具1. 硬件: UP-NETARM3000 實驗箱、 JTAG 仿真器、 PC 機。2. 軟件: PC 機操作系統 WinXP 、ADS1.2 集成開發環境、仿真器驅動程序、超級終端通訊程序。四、實驗原理1. 定時器原理S3C44B0X 具有 6個16bit 定時器,每個定時器可以基于中斷模式或 DMA 模式運行。定時器 0、 1、 2、 3 具有 PWM 功能,定時器 0 還具有死區發生器可用于大電流設備。定時器 0 和1,2 和3,4 和 5 分別共享 3個8bit

35、預比例因子寄存器。每個定時器都各有一個 4 或5 級的分頻器,用 TCFG0 和 TCFG1 可以設置這些比例因子或分頻系數。計數值緩存寄存器 TCNTBn 的值在定時器啟動后裝載到減法計數器中。 比較緩存寄存器 TCMPBn 的值將裝載到比較寄存器中以和計數器中的值進行比較。 TCNTBn 和TCMPBn 的這種雙緩存技術使得當頻率和占空比改變時定時器能有一個穩定的輸出。即使設置了一個新的計數值,當前定時器操作繼續完成。當減法計數器到達 0 時將產生定時器中斷請求,通知 CPU 定時器操作已經完成。此時,如果自動重裝控制位使能, TCNTBn 的值會自動裝載到計數器并開始下一操作周期。當通過

36、清除定時器使能位等方法使定時器停止后,計數值將不會自動重裝。TCMPBn 的值用于 PWM 或產生波形。當減法計數器的值和比較寄存器的值匹配時,定時器控制邏輯將改變輸出電平。這樣可以控制定時器輸出的波形占空比。下圖是定時器 2 和 3 的結構圖,其中沒有死區發生器。啟動定時器的步驟如下:1)將初始值寫入 TCNTBn 和 TCMPBn 。2)將該定時器的人工刷新位( manual update bit)置 1,建議同時配置反轉開關位 (inverter on/off bit) 。3)將該定時器的啟動位置1,啟動定時器,同時清除人工刷新位。定時器時鐘頻率和比例因子、分頻系數以及系統主頻的關系如下

37、:Timer input clock Frequency = MCLK / prescaler value + 1 / divider value prescaler value = 0-255divider value = 2, 4, 8, 16, 322. 中斷控制器S3C44B0X的中斷控制器接受來自于 30 個中斷源的請求。 這些中斷源包括 DMA 控制器, UART 和SIO 等等。其中外部中斷 EINT4/5/6/7 是相或的。中斷控制器的任務是經過仲裁過程(當有多個中斷源同時發出中斷請求時)將 FIQ或IRQ 中斷請求遞交給 ARM7TDMI 核。S3C44B0X支持基于軟件優先

38、級算法的仲裁過程,也支持向量中斷模式。前者在有多個中斷請求產生時,將讀取中斷掛起寄存器來決定中斷服務的優先級。 S3C44B0X的中斷控制器硬件直接提供了中斷服務向量表, 當有多個中斷請求時硬件優先級邏輯決定響應哪個中斷。向量中斷模式較之軟件方法減少了中斷響應時間。要使能 IRQ或FIQ中斷響應必須清除程序狀態字PSR 中的 I-bit 或F-bit 并且必須清除 INTMSK 中的相關位。如果 PSR 中的 I-bit 或F-bit 置1,CPU將不接受中斷控制器的IRQ或 FIQ。ARM7TDMI 具有兩種中斷類型: IRQ中斷請求, FIQ 快速中斷請求。所有的中斷源都可以決定在中斷請求

39、時采用那種中斷模式。中斷掛起寄存器表明是否有中斷請求被掛起。當某掛起位被置 1,如果中斷使能則啟動中斷服務例程。它是只讀寄存器,必須通過對 I_ISPC或F_ISPC置 1來清除。當中斷掩碼寄存器的某位置 1后表明對應中斷被關閉。 如果某掩碼位被置 1而相應中斷請求產生后,對應掛起位將被置 1,但該中斷不被響應。中斷設置相關的寄存器如下:1) INTCON :使能 IRQ向量模式、使能 IRQ和 FIQ到CPU 的中斷請求線。其設置和位描述如表 6-1所示。表6-1 INTCON 寄存器的位描述2) INTPND :其設置如表 6-2所示。表 6-2 INTPND 寄存器的設置3) INTMO

40、D :設置中斷的類型,在本系統中全部選為IRQ,其設置如表 6-3所示。表 6-3 INTMOD 寄存器的設置4) INTMSK :每個中斷源在各寄存器內的偏移位址都是一樣的。其設置及位描述如表 6-4,表 6-5所示。表 6-4 INTMSK 寄存器的設置表 6-5 INTMSK 寄存器的位描述5) I_ISPR:0 =不服務1 =現在服務,其設置如表 6-6所示。表6-6 I_ISPR 寄存器的設置6) I_ISPC/F_ISPC:清除中斷掛起位,在中斷服務程序結束前必須清除對應的中斷掛起位。其設置如表 6-7所示。表6-7 I_ISPC/F_ISPC 寄存器的設置3、 IRQ 非向量中斷

41、模式的中斷響應過程在本實驗中所有的中斷均被分配為 IRQ 類型,采用軟件優先級算法。 當有中斷請求并且 PSR、 INTCON 、 INTMSK 等寄存器允許中斷響應時, CPU 會執行位于地址0x00000018 的指令。在 44BINIT.S 文件中可以看到該處的指令是b HandlerIRQ。執行該指令程序跳轉到:HandlerIRQ HANDLER HandleIRQ其中 HANDLER 是一個宏,定義如下:MACRO$HandlerLabel HANDLER $HandleLabel$HandlerLabelsub sp,sp,#4stmfd sp!,r0ldr r0,=$Handl

42、eLabelldr r0,r0str r0,sp,#4ldmfd sp!,r0,pcMEND該宏的意思是程序跳轉到 $HandlerLabel 之后再跳轉到 $HandleLabel。這意味著程序又跳轉到了 HandleIRQ 處,也就從 0Bank 的 ROM 空間跳到 6Bank 的 SDRAM 空間了,因為 HandleIRQ 實際上是一個 RAM 地址,從 ADS 環境下的工程路徑的 Init 目錄下 isr_address.s 文件和 scat_ram.scf 文件即可看出,其值是 0xc7fff00+0x18 。另外,在 44b.h 文件中有如此定義:#define pISR_IR

43、Q (*(unsigned *)(_ISR_STARTADDRESS+0x18) 其中的宏 _ISR_STARTADDRESS 的定義在 option.h 文件中: #define _ISR_STARTADDRESS 0xc7fff00這就意味著 HandleIRQ 和 pISR_IRQ 有著特殊的關系,前者是地址,后者是這個地址上的內容,也就是說 pISR_IRQ 就可認為是中斷服務程序的地址了。在 UHAL.C 中有這個函數 void uHALr_InterruptRequestInit() 用來初始化中斷。其中有: pISR_IRQ= (unsigned) IRQ_Handler;而 I

44、RQ_Handler 又回到了 0Bank 的 ROM 中,在 44BINIT.S 中有:IRQ_HandlerIMPORT ISR_IrqHandlerSTMFD sp!, r0-r12, lrBL ISR_IrqHandlerLDMFD sp!, r0-r12, lrSUBS pc, lr, #4EXPORT IRQ_Handler從這段匯編程序看出,控制又轉移到了 ISR_IrqHandler 上,這是 IRQ 的中斷服務程序,定義在 ISR.C 中:void ISR_IrqHandler() int IntOffset;IntOffset=GetISROffsetClr(); / 得到

45、中斷向量的偏移地址(*InterruptHandlersIntOffset)(); / 運行中斷服務程序其中 GetISROffsetClr() 定義如下:int GetISROffsetClr() / 計算中斷的偏移地址,高位優先 int i,ispr=rI_ISPR,tmp=1<<(MAXHNDLRS-1); /temp bit for(i=MAXHNDLRS;i>0;i-)if(ispr&tmp)rI_ISPC=tmp;return i-1;tmp>>=1;return -1;實際上這段程序就是軟件優先級算法,通過查看I_ISPR 寄存器,決定應該執行的真正的對應于具體中斷的中斷服務程序。并使用rI_ISPC 寄存器清除中斷掛起位。而(*InterruptHandlersIntOffset)(); 則是把控制最終轉移到了ISR 上。然而,實際的 ISR 是如何和這套極其復雜的中斷響應過程發生關系的呢?這里用SetISR_Interrupt()函數把用戶

溫馨提示

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

評論

0/150

提交評論