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