ARM的I/O口實驗
一、 實驗?zāi)康?br>1. 學(xué)習(xí)LED 顯示方法
2. 學(xué)習(xí)并掌握基于ARM 開發(fā)板對I/O 編程的方法。
二、 實驗內(nèi)容
在數(shù)碼管上,顯示的鍵盤輸入的鍵值(靜態(tài)顯示方式)。
三、 預(yù)備知識
1. 掌握在ARM SDT 2.5 集成開發(fā)環(huán)境中編寫和調(diào)試程序的基本過程。
2. 會使用Source Insight 3 編輯C 語言源程序。
3. 了解ARM 應(yīng)用程序的框架結(jié)構(gòu)。
4. 了解UC/OS-II 多任務(wù)的原理。
四、 實驗設(shè)備及工具
硬件:ARM嵌入式開發(fā)板、擴(kuò)展板,用于ARM7TDMI 的JTAG 仿真器、PC 機Pentumn100
以上。
軟件:PC 機操作系統(tǒng)win98、ARM SDT 2.51 集成開發(fā)環(huán)境、仿真器驅(qū)動程序、Source
Insight 3.0
五、 實驗原理
1.I/O 接口
I/O 接口電路也簡稱接口電路。它是主機和外圍設(shè)備之間交換信息的連接部件(電路)。
它在主機和外圍設(shè)備之間的信息交換中起著橋梁和紐帶作用。
設(shè)置接口電路的必要性:
a) 解決主機CPU 和外圍設(shè)備之間的時序配合和通信聯(lián)絡(luò)問題。
b) 解決CPU 和外圍設(shè)備之間的數(shù)據(jù)格式轉(zhuǎn)換和匹配問題。
c) 解決CPU 的負(fù)載能力和外圍設(shè)備端口選擇問題。
I/O 接口的編址方式:
① I/O 接口獨立編址:
這種編址方式是將存儲器地址空間和I/O 接口地址空間分開設(shè)置,互不影響。設(shè)有專門
的輸入指令(IN)和輸出指令(OUT)來完成I/O 操作。
② I/O 接口與存儲器統(tǒng)一編址方式:
這種編址方式不區(qū)分存儲器地址空間和I/O 接口地址空間,把所有的I/O 接口的端口都
當(dāng)作是存儲器的一個單元對待,每個接口芯片都安排一個或幾個與存儲器統(tǒng)一編號的地址
號。也不設(shè)專門的輸入/輸出指令,所有傳送和訪問存儲器的指令都可用來對I/O 接口操作。
兩種編址方式有各自的優(yōu)缺點,獨立編制方式的主要優(yōu)點是內(nèi)存地址空間與I/O 接口地
址空間分開,互不影響,譯碼電路較簡單,并設(shè)有專門的I/O 指令,所以編程序易于區(qū)分,
且執(zhí)行時間短,快速性好。其缺點是只用I/O 指令訪問I/O 端口,功能有限且要采用專用I/O
周期和專用I/O 控制線,使微處理器復(fù)雜化。統(tǒng)一編制方式的主要優(yōu)點是訪問內(nèi)存的指令都
可用于I/O 操作,數(shù)據(jù)處理功能強;同時I/O 接口可與存儲器部分共用譯碼和控制電路。其
缺點一是I/O 接口要占用存儲器地址空間的一部分;二是因不用專門的I/O 指令,程序中較
難區(qū)分I/O 操作。
ARM 系統(tǒng)完成I/O 功能的標(biāo)準(zhǔn)方法是使用存儲器映射I/O。這種方法使用特定的存儲器
地址。當(dāng)從這些地址加載或向這些地址存儲時,它們提供I/O 功能。典型情況下,從存儲器
映射I/O 地址加載用于輸入,而向存儲器映射I/O 地址存儲用于輸出。
S3C44B0X 有71 個多功能輸入\輸出管腳,構(gòu)成了7 個I/O 接口:
兩個9 位的輸入/輸出接口(E 和F)
兩個8 位的輸入/輸出接口(D 和G)
一個16 位的輸入/輸出接口(C)
一個10 位的輸出接口(A)
一個11 位的輸出接口(B)
每一個管腳都可以通過軟件按各種系統(tǒng)的要求和設(shè)計需要進(jìn)行設(shè)置。每一個要用到的管
腳的功能要在系統(tǒng)主程序啟動前進(jìn)行設(shè)置。初始化管腳的狀態(tài),可以避免一些潛在的錯誤。
在S3C44B0X 芯片中,由于每個管腳是多路復(fù)用的,所以要確定每個管腳的功能。
PCONn(接口控制寄存器)能夠定義管腳的功能。如果接口定義為輸入功能,則輸入的數(shù)
據(jù)可以從PDATn 讀入;如果接口定義為輸出功能,則可通過寄存器PDATn 輸出數(shù)據(jù)。
2. LED
在單片機的應(yīng)用系統(tǒng)中,為了便于人們觀察和監(jiān)視單片機的運行情況,常常需要用顯示
器顯示運行的中間結(jié)果及狀態(tài)等信息,因此顯示器也是不可缺少的外部設(shè)備之一。顯示器的
種類很多,從液晶顯示、發(fā)光二極管顯示到CRT 顯示器,都可以與微機配接。在單片機應(yīng)
用系統(tǒng)中常用的顯示器主要有發(fā)光二極管數(shù)碼顯示器簡稱LED 顯示器。LED 顯示器具有耗
電省、成本低廉、配置簡單靈活、安裝方便、耐振動、壽命長等優(yōu)點。但顯示內(nèi)容有限,不
能顯示圖形,因而其應(yīng)用有局限性。近年來對某些要求較高的單片機應(yīng)用系統(tǒng)也開始配置
簡易形式的CRT 顯示器接口,但應(yīng)用最多的還是LED 顯示器。
① LED 結(jié)構(gòu)
7 段LED 由7 個發(fā)光二極管按“日”字形排列,所有發(fā)光二極管的陽極連在一起稱共陽極接法,陰極連在一起稱為共陰極接法。一般共陰極可以不需外接電阻,但共陽極接法中
發(fā)光二極管必須外接電阻。LED 的結(jié)構(gòu)及連接圖見圖5-1。
② LED 工作原理
當(dāng)選用共陰極的LED 顯示器時(如圖5-1(b)),所有發(fā)光二極管的陰極連在一起接地,當(dāng)
某個發(fā)光二極管的陽極加入高電平時,對應(yīng)的二極管點亮。因此要顯示某字形就應(yīng)使此字形
的相應(yīng)段的二極管點亮,實際上就是送一個用不同電平組合代表的數(shù)據(jù)字來控制LED 的顯
示,此數(shù)據(jù)稱為字符的段碼。字符數(shù)據(jù)字與LED 段碼關(guān)系如下:
說明:共陰的LED,被選中時的段為高電平有效,熄滅的段碼為00H;
共陽的LED,被選中時的段為低平時有效.熄滅的段碼為FFH。
LED 顯示器與單片機的接口一般有靜態(tài)顯示與動態(tài)顯示接口兩種方式,下面分別加以介
紹。
⑴ LED 數(shù)碼管靜態(tài)顯示
LED 數(shù)碼管采用靜態(tài)顯示與單片機接口時,共陰極或共陽極點連接在一起接地或高電
平。每個顯示位的段選線與一個8 位并行口線對應(yīng)相連,只要在顯示位上的段選線上保持段
碼電平不變,則該位就能保持相應(yīng)的顯示字符。這里的8 位并行口可以直接采用并行I/O
接口片.也可以采用串入/并出的移位寄存器或是其它具有三態(tài)功能的鎖存器等。
⑵ LED 數(shù)碼管動態(tài)顯示
在多位LED 顯示時,為了簡化電路,降低成本,將所有位的段選線并聯(lián)在一起,由一
個8 位I/O 口控制。而共陰(或共陽)極公共端分別由相應(yīng)的I/O 線控制,實現(xiàn)各位的分時
選通。由于各個數(shù)碼管是共用同一個段碼輸出口,分時輪流通電的,從而大大簡化了硬件線
路,降低了成本。不過這種方式的數(shù)碼管接口電路中數(shù)碼管不宜太多,一般在8 個以內(nèi),否
則每個數(shù)碼管所分配到實際導(dǎo)通時間會太少,顯得亮度不足。若LED 位數(shù)較多時應(yīng)采用增
加驅(qū)動能力,而提高顯示亮度的措施。
3. 可編程并行輸入輸出接口芯片8255A
⑴ 8255A 具有3 個8 位的數(shù)據(jù)口(即A 口,B 口和C 口),其中C 口還可作為兩個4 位口
來使用。三個數(shù)據(jù)口均可用軟件來設(shè)置成輸人口或輸出口,與外設(shè)相連。
⑵ 8255A 具有3 種工作方式:方式0、方式1、方式2。可適應(yīng)CPU 與外設(shè)間的多種數(shù)據(jù)
傳送方式,如無條件傳送方式(0 方式,也叫同步傳送),異步查詢方式和中斷方式,以滿足
用戶的各種應(yīng)用要求。
⑶ 8255A 具有兩條功能強、內(nèi)容豐富的控制命令,為用戶根據(jù)外界條件使用8255A 構(gòu)成
多種不同形式的接口電路和編程環(huán)境提供方便。8255A 執(zhí)行命令過程中和執(zhí)行命令完畢之后
所產(chǎn)生的狀態(tài)可保留在狀態(tài)字中以便查詢。
⑷ 8255A 的C 口是一個特殊的端口。當(dāng)8255A 工作在方式1,2 時,利用對C 口的按位控
制可為A,B 口提供專門的聯(lián)絡(luò)控制信息號;當(dāng)CPU 讀取8255 狀態(tài)時,C 口可作為方式1,
2 時的狀態(tài)字。
限于篇幅,這里就不對8255A 進(jìn)行具體介紹了,感興趣的同學(xué)可以找一些微機原理的
書。
擴(kuò)展板上有兩個8255,分別以8255_A、8255_B 表示,8255_A 的A 口、B 口、C 口、
和控制寄存器的地址分別為0x08008000、0x08008002、0x08008004、0x08008006,8255_B
的A 口、B 口、C 口、和控制寄存器的地址分別為0x08010000、0x08010002、0x08010004、
0x08010006。LED 的段選碼接到8255_A 的A 口,位選碼接到8255_A 的B 口。
六、 實驗步驟
1. 不帶操作系統(tǒng)的實現(xiàn)
① 按鍵盤驅(qū)動實驗1 建立工程。
② 定義向LED 發(fā)送數(shù)據(jù)的端口(EXIO_8255A_PORTA)和對LED 進(jìn)行片選的端
口(EXIO_8255A_PORTB)及相應(yīng)的控制寄存器:
#define EXIO_8255A_PORTA (*(volatile unsigned short int*)0x08008000)
#define EXIO_8255A_PORTB (*(volatile unsigned short int*)0x08008002)
#define EXIO_8255A_PORTC (*(volatile unsigned short int*)0x08008004)
#define EXIO_8255A_CTRL (*(volatile unsigned short int*)0x08008006)
③ 定義LED 短碼數(shù)組:
unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
④ 定義端口和端口工作方式及初始化:
EXIO_8255A_CTRL=0x80;//輸入方式
EXIO_8255A_PORTB=0xff;//片選
EXIO_8255A_PORTC=0xff;//不讓發(fā)光二極管點亮
⑤ 在第一個LED 上靜態(tài)顯示按鍵值(十六進(jìn)制):
EXIO_8255A_PORTA=led[key];
EXIO_8255A_PORTB=0x7f;
2. 帶操作系統(tǒng)的實現(xiàn)
① 按鍵盤驅(qū)動實驗1 建立工程。
② 同不帶操作系統(tǒng)的實現(xiàn)的步驟②~⑤,其中④、⑤在onKey()函數(shù)中實現(xiàn)。
七、 思考題
1. LED 兩種工作方式的區(qū)別,及利弊。
2. 嘗試用動態(tài)顯示方式實現(xiàn)。
提示:當(dāng)鍵盤掃描碼小于10 時,在一個LED 上顯示掃描碼;當(dāng)鍵盤掃描碼大于等
于10 時,在二個LED 上顯示掃描碼。當(dāng)在二個LED 上顯示掃描碼時,使LED 的
個位和十位交替點亮一段時間。
評論
查看更多