<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM9(S3C2440)的IO口--LED流水燈

          ARM9(S3C2440)的IO口--LED流水燈

          作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
          概述

          S3C2440A 包含了130 個多功能輸入/輸出口引腳并且它們?yōu)槿缦嘛@示的八個端口:
          – 端口A(GPA):25 位輸出端口
          – 端口B(GPB):11 位輸入/輸出端口
          – 端口C(GPC):16 位輸入/輸出端口
          – 端口D(GPD):16 位輸入/輸出端口
          – 端口E(GPE):16 位輸入/輸出端口
          – 端口F(GPF):8 位輸入/輸出端口
          – 端口G(GPG):16 位輸入/輸出端口
          – 端口H(GPH):9 位輸入/輸出端口
          – 端口J(GPJ):13 位輸入/輸出端口
          每個端口都可以簡單的由軟件配置為各種系統(tǒng)配置和設(shè)計要求。你必須在開始主程序前定義使用的每個引腳的功能。如果沒有使用某個引腳的復(fù)用功能,這個引腳可以配置為I/O 口。

          本文引用地址:http://www.ex-cimer.com/article/201611/320224.htm

          IO口控制寄存器

          端口配置寄存器(GPACON 至GPJCON)
          S3C2440A 中,大多數(shù)端口為復(fù)用引腳。因此要決定每個引腳選擇哪項功能。PnCON(引腳控制寄存器)決
          定了每個引腳使用哪項功能。
          端口數(shù)據(jù)寄存器(GPADAT 至GPJDAT)
          如果端口配置為輸出端口,可以寫入數(shù)據(jù)到PnDAT 的相應(yīng)位。如果端口配置為輸入端口,可以從PnDAT 的相
          應(yīng)位讀取數(shù)據(jù)。
          端口上拉寄存器(GPBUP 至GPJUP)
          端口上拉寄存器控制每個端口組的使能/禁止上拉電阻。當相應(yīng)位為0 時使能引腳的上拉電阻。當為1 時禁止上拉電阻。如果使能了上拉電阻,那么上拉電阻與引腳的功能設(shè)置無關(guān)(輸入、輸出、DATAn、EINTn 等等)
          雜項控制寄存器
          此寄存器控制睡眠模式,USB 引腳和CLKOUT 選擇的數(shù)據(jù)端口上拉電阻。
          外部中斷控制寄存器
          24 個外部中斷由各種信號方式觸發(fā)。EXTINT 寄存器為外部中斷請求配置信號觸發(fā)方式為低電平觸發(fā)、高電平觸發(fā)、下降沿觸發(fā)、上升沿觸發(fā)或雙邊沿觸發(fā)。
          由于每個外部中斷引腳包含一個數(shù)字濾波器,中斷控制可以確認請求信號是否長于3 個時鐘。
          EINT[15:0]用于喚醒源

          LED流水燈實驗使用PB口的GPB5-PGB8控制4個LED循環(huán)點亮。采用共陽極接法,即當端口位為低電平時LED亮,高電平時LED滅。

          步驟:

          1.IO口初始化,設(shè)置GPBCON,GPBUP寄存器。

          在這里PB口的GPB5-PGB8作為通用IO口使用,實現(xiàn)輸出功能,所以GPBCON的GPB5-PGB8位應(yīng)分別都為01,即GPBCON[17:10] 為 01010101;GPBUP初始狀態(tài)全為0,即使能上拉電阻功能,可不用設(shè)置,此處進行了設(shè)置。
          I/O口與外圍設(shè)備連接一般要通過光電隔離或其他隔離器件,直接相連一定要確認負載不能超過 4個與非門。光電隔離一是可保護微處理器;二是可進行電平轉(zhuǎn)換;三是可對某些信號進行分配,所以在一般情況下都要加。
          2.控制思路比較簡單,讓PB口的5-8位循環(huán)變?yōu)榈碗娖剑ㄆ渌麜r間均為高電平),即可實現(xiàn)流水燈,在兩次電平變換中間加入延時。

          3.程序

          #define rGPBCON (*(volatile unsigned *)0x56000010)//Port B control
          #define rGPBDAT (*(volatile unsigned *)0x56000014)//Port B data
          #define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control B


          #define LED1_ON(rGPBDAT &=~(1<<5))//GPB5 位清0
          #define LED1_OFF(rGPBDAT |=(1<<5) )//GPB5 位置1
          #define LED2_ON(rGPBDAT &=~(1<<6))
          #define LED2_OFF(rGPBDAT |=(1<<6))
          #define LED3_ON(rGPBDAT &=~(1<<7))
          #define LED3_OFF(rGPBDAT |=(1<<7))
          #define LED4_ON(rGPBDAT &=~(1<<8))
          #define LED4_OFF(rGPBDAT |=(1<<8))

          void Delay(void)
          {
          int i;
          for(i=0;i<1000000;i++);
          }

          int Main()
          {
          rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16));//對GPBCON[10:17]清零
          rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16));//設(shè)置GPB5~8為輸出
          rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//設(shè)置GPB5~8的上拉功能
          rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8);//關(guān)閉LED

          while(1)
          {
          LED1_ON;Delay();LED1_OFF;
          LED2_ON;Delay();LED2_OFF;
          LED3_ON;Delay();LED3_OFF;
          LED4_ON;Delay();LED4_OFF;
          }
          return 0;
          }

          4.程序說明,程序中對寄存器的設(shè)置采用了#define LED1_ON (rGPBDAT &=~(1<<5)) 這種方法,相比直接賦值的方法,這種表示方法比較容易觀察出是寄存器的哪一位發(fā)生了變化,并且保證除了需要改變的位發(fā)生變化之外,其他位保持不變!



          關(guān)鍵詞: ARM9S3C2440IO口LED流水

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();