LPC2103學習之GPIO

不寫做業寫博客調試

 

直接切入正題博客

 

LPC2103關於引腳的寄存器有兩個PINSEL0與PINSEL1,都是32位寬度。程序

 

PINSEL0與PINSEL1寄存器的每兩位控制一個引腳的功能,則一個腳最多有4種功能。其中PINSEL0控制着P0.0到P0.15的引腳。PINSEL1控制着P0.16到P0.31的引腳。im

 

PINSEL寄存器的設置只需兩個步驟。一找到要設置的引腳。二是選擇引腳的功能。img

如圖所示:

下面舉例說明

1.設置P0.0爲GPIO功能

PINSEL0 = 0x00   /*設置P0.0到P0.15都爲GPIO*/

2.設置P0.0爲TxD0功能

PINSEL0 = (PINSEL0 & 0xFFFFFFFC) | 0x01;       /*設置P0.0的功能爲TxD0*/

固然若是爲了避免改變原來引腳的功能。你應該採起「讀取——修改——回寫」的方式進行。即先讀取寄存器值,而後進行一些邏輯的與、或等操做,最後把修改值再寫回寄存器。

好比:

PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 << 16);  /*設置P0.8與P0.9功能爲TxD1/RxD1*/

 

關於LPC2103的GPIO

      LPC2103只有一個32位的通用IO口。因爲引腳的功能複用,使用前必須進行相關引腳設置,再進行操做。好比P0.27到P0.31就是JTAG調試引腳。LPC2103的GPIO模式有低速與高速模式。

高速GPIO的控制寄存器位於CPU的局部總線上,而低速GPIO的控制寄存器是掛在VPB總線上。P0口做爲高速GPIO使用時,將不能在調試環境下觀察在VPB總線上的寄存器。

下面是一些寄存器的描述。直接上圖好些。

剩餘的之後須要時再補充,如今只須要用到這些。參考資料來自於《EasyARM2103教材》

 

天天進步一點,之後可不就是一點咯。大笑

 

 補註:就在剛纔寫流水燈程序時發現一個問題

#define LED1 1<<17

for(i=0;i<4;i++)
  {
   IO0CLR = (LED1<<i);

// IO0CLR |= (LED1<<i);
   Delay(100);
  }

我發現這裏用=與|=獲得的都是相同的結果。這是爲何呢?我想的是等於應該是會把之前的值擦除,那麼每次應該是一個燈亮。可是實際是4個燈依次亮。但願知道的告訴我一下啊,不勝感激。快哭了

相關文章
相關標籤/搜索