嵌入式IO端口課件_第1頁
嵌入式IO端口課件_第2頁
嵌入式IO端口課件_第3頁
嵌入式IO端口課件_第4頁
嵌入式IO端口課件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1第8章 i/o端口28.1 通用 i/o端口l通用通用i/o口的口的配置配置l通用通用i/o口的口的編程編程38.1.1 s3c2440的i/o端口l130個(gè)個(gè)多功能端口,分為多功能端口,分為9組:組:l1個(gè)個(gè)8位的位的i/o端口(端口端口(端口f)l1個(gè)個(gè)9位的位的i/o端口(端口端口(端口h)l1個(gè)個(gè)13位位i/o端口(端口端口(端口j)l1個(gè)個(gè)11位位i/o端口(端口端口(端口b)l4個(gè)個(gè)16位位i/o端口(端口端口(端口c、d、e、g)l1個(gè)個(gè)25位位輸出輸出端口(端口端口(端口a)48.1.1 s3c2440的i/o端口l每組端口可以通過軟件配置配置端口控制寄存端口控制寄存器器來滿

2、足不同系統(tǒng)和設(shè)計(jì)的需要。l在運(yùn)行 主程序之前,必須先對(duì)用到的每一個(gè)引腳功能進(jìn)行設(shè)置。l如果某些引腳的復(fù)用功能沒有使用,可將該引腳先設(shè)置為i/o口。58.1.1 s3c2440的i/o端口ldatasheetum_s3c2440a_rev.pdf中 9.io ports68.1.2 s3c2440芯片與端口相關(guān)的寄存器l(1)端口控制寄存器(端口控制寄存器(gpacon-gpjcon):配置每一個(gè)引腳的工作模式:配置每一個(gè)引腳的工作模式l(2)端口數(shù)據(jù)寄存器端口數(shù)據(jù)寄存器(gpadat-gpjdat):當(dāng)端口配置為輸出引腳時(shí),:當(dāng)端口配置為輸出引腳時(shí),輸出數(shù)據(jù)的方法是將數(shù)據(jù)寫到輸出數(shù)據(jù)的方法是將

3、數(shù)據(jù)寫到gpadat-gpjdat的相應(yīng)位;當(dāng)端口配置為輸入引的相應(yīng)位;當(dāng)端口配置為輸入引腳時(shí),讀入數(shù)據(jù)的方法是將腳時(shí),讀入數(shù)據(jù)的方法是將gpadat-gpjdat的相應(yīng)位讀出。的相應(yīng)位讀出。78.1.2 s3c2440芯片與端口相關(guān)的寄存器l(3)端口上拉寄存器(端口上拉寄存器(gpbup-gpjup):):設(shè)置端口上拉寄存器,可以設(shè)置該組端口與設(shè)置端口上拉寄存器,可以設(shè)置該組端口與內(nèi)部上拉電阻連接或斷開。當(dāng)寄存器相應(yīng)的位內(nèi)部上拉電阻連接或斷開。當(dāng)寄存器相應(yīng)的位配置為配置為0時(shí),該引腳接上拉電阻,當(dāng)寄存器相應(yīng)時(shí),該引腳接上拉電阻,當(dāng)寄存器相應(yīng)的位配置為的位配置為1 時(shí),該引腳不接上拉電阻。時(shí)

4、,該引腳不接上拉電阻。l(4)外部中斷控制寄存器(外部中斷控制寄存器(extint):根據(jù):根據(jù)外部中斷的需要,將中斷觸發(fā)信號(hào)配置為低電外部中斷的需要,將中斷觸發(fā)信號(hào)配置為低電平觸發(fā)、高電平觸發(fā)、下降沿觸發(fā)和上升沿觸平觸發(fā)、高電平觸發(fā)、下降沿觸發(fā)和上升沿觸發(fā)和邊沿觸發(fā)幾種方式。發(fā)和邊沿觸發(fā)幾種方式。88.1.3 應(yīng)用實(shí)例um_s3c2440a_rev10.pdf 37頁l發(fā)光二極管控制電路:端口發(fā)光二極管控制電路:端口f 6、7引腳引腳分別與分別與led1 和和led2 連接,端口輸出低連接,端口輸出低電平時(shí),電平時(shí),led燈亮;電平,燈亮;電平,led燈滅。燈滅。l15l16s3c2440

5、vdd33led1led26747r95r969代碼分析:lvoid led_display(int ledstatus)llled_state= ledstatus;lif(ledstatus&0 x01)=0 x01)l rgpfdat=rgpfdat&0 xbf;lelsel rgpfdat=rgpfdat|0 x40;lif(ledstatus&0 x02)=0 x02)l rgpfdat=rgpfdat&0 x7f;lelsel rgpfdat=rgpfdat|0 x80;l最低位為最低位為1第第6位為位為0,led1亮亮第第6位為位為1,led1滅滅

6、第第2位為位為1第第7位為位為0,led2亮亮第第7位為位為1,led2滅滅結(jié)論:若想要結(jié)論:若想要led1亮,只需將亮,只需將ledstatus最低位為最低位為1即可,為即可,為0則則led1 滅;滅; 若想要若想要led2亮,只需將亮,只需將ledstatus第第2位為位為1即可,為即可,為0則則led2 滅;滅;10i/o端口控制寄存器1112l端口a數(shù)據(jù)寄存器當(dāng)端口配置為輸出口,輸出引腳的狀態(tài)與當(dāng)端口配置為輸出口,輸出引腳的狀態(tài)與gpadat的相應(yīng)位相同;的相應(yīng)位相同;當(dāng)端口配置為功能引腳時(shí),此控制寄存器的當(dāng)端口配置為功能引腳時(shí),此控制寄存器的未定義。未定義。13端口b1415端口b1

7、6端口f17端口f-控制寄存器18端口f-數(shù)據(jù)寄存器和上拉寄存器192440addr.h文件中關(guān)于i/o口寄存器的定義l/ i/o port l#define rgpacon (*(volatile unsigned *)0 x56000000)/port a controll#define rgpadat (*(volatile unsigned *)0 x56000004)/port a datal#define rgpbcon (*(volatile unsigned *)0 x56000010)/port b controll#define rgpbdat (*(volatile un

8、signed *)0 x56000014)/port b datal#define rgpbup (*(volatile unsigned *)0 x56000018)/pull-up control bl#define rgpccon (*(volatile unsigned *)0 x56000020)/port c controll#define rgpcdat (*(volatile unsigned *)0 x56000024)/port c datal#define rgpcup (*(volatile unsigned *)0 x56000028)/pull-up control

9、 cl#define rgpdcon (*(volatile unsigned *)0 x56000030)/port d controll#define rgpddat (*(volatile unsigned *)0 x56000034)/port d datal#define rgpdup (*(volatile unsigned *)0 x56000038)/pull-up control d20l#define rgpecon (*(volatile unsigned *)0 x56000040)/port e controll#define rgpedat (*(volatile

10、unsigned *)0 x56000044)/port e datal#define rgpeup (*(volatile unsigned *)0 x56000048)/pull-up control el#define rgpfcon (*(volatile unsigned *)0 x56000050)/port f controll#define rgpfdat (*(volatile unsigned *)0 x56000054)/port f datal#define rgpfup (*(volatile unsigned *)0 x56000058)/pull-up contr

11、ol fl#define rgpgcon (*(volatile unsigned *)0 x56000060)/port g controll#define rgpgdat (*(volatile unsigned *)0 x56000064)/port g datal#define rgpgup (*(volatile unsigned *)0 x56000068)/pull-up control gl#define rgphcon (*(volatile unsigned *)0 x56000070)/port h controll#define rgphdat (*(volatile

12、unsigned *)0 x56000074)/port h datal#define rgphup (*(volatile unsigned *)0 x56000078)/pull-up control hl#define rgpjcon (*(volatile unsigned *)0 x560000d0)/port j controll#define rgpjdat (*(volatile unsigned *)0 x560000d4)/port j datal#define rgpjup (*(volatile unsigned *)0 x560000d8)/pull-up contr

13、ol #define rgpfcon (*(volatile unsigned *)0 x56000050)/port f control#define rgpfdat (*(volatile unsigned *)0 x56000054)/port f data#define rgpfup (*(volatile unsigned *)0 x56000058)/pull-up control f21*關(guān)于volatile的說明*lvolatile的本意是的本意是“易變的易變的” ;由于訪問寄存器的速度;由于訪問寄存器的速度要快過要快過ram,所以編譯器一般都會(huì)作減少存取外部所以編譯器一般都會(huì)

14、作減少存取外部ram的優(yōu)化。比如:的優(yōu)化。比如:static int i=0;int main(void).while (1) if (i) dosomething(); /* interrupt service routine. */void isr_2(void) i=1; 22*關(guān)于volatile的說明*l程序的本意是希望程序的本意是希望isr_2中斷產(chǎn)生時(shí)中斷產(chǎn)生時(shí),在在main當(dāng)當(dāng)中調(diào)用中調(diào)用dosomething函數(shù)函數(shù),l但是但是,由于編譯器判斷在由于編譯器判斷在main函數(shù)里面沒有修改函數(shù)里面沒有修改過過i,因此可能只執(zhí)行一次對(duì)從因此可能只執(zhí)行一次對(duì)從i到某寄存器的讀到某寄存

15、器的讀操作操作,然后每次然后每次if判斷都只使用這個(gè)寄存器里面判斷都只使用這個(gè)寄存器里面的的“i副本副本”,導(dǎo)致導(dǎo)致dosomething永遠(yuǎn)也不會(huì)被永遠(yuǎn)也不會(huì)被調(diào)用。調(diào)用。l如果將將變量加上如果將將變量加上volatile修飾修飾,則編譯器保證則編譯器保證對(duì)此變量的讀寫操作都不會(huì)被優(yōu)化(肯定執(zhí)對(duì)此變量的讀寫操作都不會(huì)被優(yōu)化(肯定執(zhí)行)。此例中行)。此例中i也應(yīng)該如此說明。也應(yīng)該如此說明。23*關(guān)于volatile的說明*l一般說來一般說來,volatile用在如下的幾個(gè)地方:用在如下的幾個(gè)地方:1、中斷服務(wù)程序中修改的供其它程序檢測的變、中斷服務(wù)程序中修改的供其它程序檢測的變量需要加量需要加

16、volatile;2、多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加、多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加volatile;3、存儲(chǔ)器映射的硬件寄存器通常也要加、存儲(chǔ)器映射的硬件寄存器通常也要加volatile說明說明,因?yàn)槊看螌?duì)它的讀寫都可能有不因?yàn)槊看螌?duì)它的讀寫都可能有不同意義。同意義。24端口初始化函數(shù) io_test2440lib.clvoid port_init(void)ll rgpacon = 0 x7fffff; l rgpbcon = 0 x000150;l rgpbup = 0 x7ff; l rgpccon = 0 xaaaaaaaa; l rgpcup = 0 xffff; 25

17、l rgpdcon = 0 xaaaaaaaa; l rgpdup = 0 xffff;lrgpecon = 0 xa02aa800; lrgpeup = 0 xffff; l rgpfcon = 0 x55aa;l rgpfup = 0 xff;l含義?含義?26lgpf4 f5 f6 f7l d1 d2 d3 d4 實(shí)現(xiàn)燈的閃爍-自左至右27l/*l函數(shù)名:函數(shù)名:left_right()l函數(shù)作用:實(shí)現(xiàn)函數(shù)作用:實(shí)現(xiàn)4個(gè)個(gè)led燈從左到右依次亮燈從左到右依次亮l函數(shù)參數(shù):無函數(shù)參數(shù):無l返回值:無返回值:無l作者:李建義作者:李建義l完成日期:完成日期:2010年年9月月27日日l*/l

18、void left_right( )llwhile(uart_getkey() != r)lllrgpfdat = rgpfdat & 0 x0f | 0 xe0;ldelay(1000);llrgpfdat = rgpfdat & 0 x0f | 0 xd0;ldelay(1000);llrgpfdat = rgpfdat & 0 x0f | 0 xb0;ldelay(1000);llrgpfdat = rgpfdat & 0 x0f | 0 x70;ldelay(2000);llvoid left_right( )while(uart_getkey() !=

19、 r)rgpfdat = rgpfdat & 0 x0f | 0 xe0;delay(1000);rgpfdat = rgpfdat & 0 x0f | 0 xd0;delay(1000);rgpfdat = rgpfdat & 0 x0f | 0 xb0;delay(1000);rgpfdat = rgpfdat & 0 x0f | 0 x70;delay(2000);28led顯示程序代碼分析:main_io.clvoid led_test1(void)lluart_printf( led test, press enter key to exit !n )

20、 ;lwhile(uart_getkey() != r)lldelay(1000);lled_display(0 x8);ldelay(1000);lled_display(0 x4);ldelay(1000);lled_display(0 x2);ldelay(1000);lled_display(0 x1);ldelay(1000);lled_display(0 xf);ldelay(1000);lled_display(0 x0);ll29e:sinosysexperimentiosourcecodeio_test2440lib.clvoid led_display(int data)ll /active is low.(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論