340 likes | 482 Views
第六章 通用 I/O 埠的工作原理與實驗. Ping-Liang Lai ( 賴秉樑 ). 實驗目的. 1 、掌握通用輸入輸出( GPIO )電路原理及與其相關的特殊功能暫存器的配置方法。 2 、熟悉 SDT 或 ADS 整合型開發環境 3 、學習使用 SDT 或 ADS 環境編譯、下載、除錯並 Trace 程式的方法。 4 、熟悉實驗系統的相關硬體結構。. 實驗原理. 硬體原理 S3C4510B 的通用 IO 埠的硬體功能方塊圖:. 實驗原理. GPIO 工作原理 S3C4510B 提供了 18 個可程式化的 GPIO 埠
E N D
第六章通用I/O埠的工作原理與實驗 Ping-Liang Lai (賴秉樑)
實驗目的 1、掌握通用輸入輸出(GPIO)電路原理及與其相關的特殊功能暫存器的配置方法。 2、熟悉SDT或ADS整合型開發環境 3、學習使用SDT或ADS環境編譯、下載、除錯並Trace程式的方法。 4、熟悉實驗系統的相關硬體結構。
實驗原理 • 硬體原理 • S3C4510B的通用IO埠的硬體功能方塊圖:
實驗原理 GPIO工作原理 • S3C4510B提供了18個可程式化的GPIO埠 • 每個埠配置為輸入模式、輸出模式或特殊功能模式 • 控制I/O口的特殊功能暫存器一共有3個:IOPMOD、IOPCON和IOPDATA • 由特殊功能暫存器IOPMOD和IOPCON控制 • 埠0~埠7的工作模式僅由IOPMOD暫存器控制 • 通過設置IOPCON暫存器,埠8~埠11可用作外部中斷請求INTREQ0~INTREQ3的輸入 • 埠12、埠13可用作外部DMA請求XDREQ0、XDREQ1的輸入 • 埠14、埠15可作為外部DMA請求的應答信號XDACK0、XDACK1 • 埠16可作為計時器0的溢出TOUT0,埠17可作為計時器1的溢出TOUT1
實驗原理 • I/O埠模式暫存器 (IOPMOD) : 各位元定義為: [0..17] P0~P17的I/O模式控制位元元。 0=輸入 1=輸出
實驗原理 • I/O埠控制暫存器 (IOPCON) : • [4:0]控制埠8的外部中斷請求信號0(xIRQ0)輸入 [4] 0 = 禁能 1 = 致能 [3] 0 = 低電位有效 1 = 高電位有效 [2] 0 = 濾波器關 1 = 濾波器開 [1:0] 00 = 電位檢測 01 = 上升沿檢測 10 = 下降沿檢測 11 = 上升、下降沿均檢測
實驗原理 • [9:5]控制埠9的外部中斷請求信號1(xIRQ1)輸入 使用方法同埠8 • [14:10]控制埠10的外部中斷請求信號2(xIRQ2)輸入 使用方法同埠8 • [19:15]控制埠11的外部中斷請求信號3(xIRQ3)輸入 使用方法同埠8 • [22:20]控制埠12的外部DMA請求信號0(DRQ0)輸入 [22] 0 = 禁能 1 = 致能 [21] 0 = 濾波器關 1 = 濾波器開 [20] 0 = 低電位有效 1 = 高電位有效 • [25:23]控制埠13的外部DMA請求信號1(DRQ1)輸入 [25] 0 = 禁能 1 = 致能 [24] 0 = 濾波器關 1 = 濾波器開 [23] 0 = 低電位有效 1 = 高電位有效 • [27:26]控制埠14的外部DMA應答信號0(DAK0)輸出 [27] 0 = 禁能 1 = 致能 [26] 0 = 低電位有效 1 = 高電位有效 • [29:28]控制埠15的外部DMA應答信號1(DAK1)輸出 [29] 0 = 禁能 1 = 致能 [28] 0 = 低電位有效 1 = 高電位有效 • [30]控制埠16作為計時器0溢出信號(TOEN0) 0 = 禁能 1 = 致能 • [31]控制埠17作為計時器1溢出信號(TOEN1) 0 = 禁能 1 = 致能
實驗原理 • I/O埠資料暫存器 ( IOPDATA ) • 當I/O埠配置為輸入模式時,對應的位元表示I/O埠的輸入狀態。 • 當I/O埠配置為輸出模式時,對應的位元表示I/O埠的輸出狀態 。 對應的位元表示I/O埠:
通用 I/O埠的LED輸出實驗 • 接腳電路圖
通用 I/O埠的LED輸出實驗 • 開啟 ARM Project Manger • 從File功能表新建一個專案項目。File → New如下圖所示。 • 選擇Project
通用 I/O埠的LED輸出實驗 • 輸入專案名稱GPIO及路徑
通用 I/O埠的LED輸出實驗 • 新建一個.S文件。File → New。彈出如下對話方塊 • 編寫程式碼 • 儲存檔案為Init.s
通用 I/O埠的LED輸出實驗 • 添加至專案檔案中 3 2 1
通用 I/O埠的LED輸出實驗 • 再建立一個檔案,且命名為main.c
通用 I/O埠的LED輸出實驗 • 將main.c檔案儲存起來,並添加至專案檔案中
通用 I/O埠的LED輸出實驗 • 設置編譯連接環境。Tools→Configure → armlink • 在General頁面設置連接程式庫路徑。 1 2 3
通用 I/O埠的LED輸出實驗 • 在Output頁面設置ARM ELF image format輸出為ELF格式 • 在Entry and Base頁面設置除錯時檔下載的目的位元址。要保證該位址為SDRAM位址。 5 4
通用 I/O埠的LED輸出實驗 • 編譯工程項目。 • 在Project → Force build
通用 I/O埠的LED輸出實驗 • 進入除錯程式 • 執行” JTAG-NT&2000.exe” • 開啟”ARM Debugger For Windows”
通用 I/O埠的LED輸出實驗 • 載入映像檔案進行除錯
通用 I/O埠的LED輸出實驗 • 執行程式進行除錯,利用工作列上的圖示來進行單步執行除錯 • 利用工作列上的圖示來監看記憶體狀態 Go Stop Step Reload Step In Step Out Run to Cursor Locals Memory Register Back Trace ARM Disassembly
通用 I/O埠的LED輸出實驗 • 按F10單步執行程式或點工作列上的圖示
通用 I/O埠的LED輸出實驗 • 按F8單步執行程式或點工作列上的圖示 • 進入Main主程式(C語言)
通用 I/O埠的LED輸出實驗 • 觀看IOPMOD記憶體的變化 • 輸入IOPMOD記憶體位址 0x03FF5000
通用 I/O埠的LED輸出實驗 • 設定IOPMOD • 0x03FF5000記憶體的變化
通用 I/O埠的LED輸出實驗 • 設定IOPDATA(0x03FF5008) • IOPDATA(0x03FF5008)的變化
通用 I/O埠的LED輸出實驗 • 觀察LED變數 • LED變數的變化
通用 I/O埠的LED輸出實驗 • 利用”移位”的方式,改變LED燈的變化 • 將移位後的值寫入IOPDATA,輸出至IO port
通用 I/O埠的LED輸出實驗 • 利用Step執行Delay(),用Step In會進入Delay()副程式 • Step單步執行 • Step In單步執行
通用 I/O埠的LED輸出實驗 • IOPDATA執行變化 DemoBoard P4_LED亮起 DemoBoard P5_LED亮起 DemoBoard P6_LED亮起 DemoBoard P7_LED亮起
通用 I/O埠的LED輸出實驗 • 當IOPDATA為0x80,重置LED值