引腳配置IOCON

2022-06-19 02:06:11 字數 3075 閱讀 9046

通過前面的例子我們知道,輸入/輸出埠(即i/o口)是lpc824所能依賴進行控制的唯一通道,如果把晶元的cpu核心比作人的大腦,那晶元的i/o口就相當於人的五官和四肢,負責資訊的獲取和動作的執行,如果晶元沒有i/o口那cpu本身會變得毫無意義,因此很有必要了解它們的內部結構及其詳細配置。lpc824標準i/o引腳的內部結構如下圖所示。

在內部結構圖中,pin是輸入/輸出埠中的一位,也就是gpio的某個引腳,其上連線的esd為靜電阻抗器,用於釋放引腳上的靜電干擾。上半部分的邏輯門及mos管用於控制数字輸出,其中的mos管受控於開漏使能、輸出使能及cpu輸出等三個訊號,用來確定引腳的強上拉、強下拉及輸出電平。中間部分的邏輯門及mos管用於控制中繼模式,在中繼使能時,當引腳處於高電平時,中繼模式會啟用上拉電阻,而當引腳處於低電平時,則會啟用下拉電阻。這樣當引腳配置為輸入且不由外部驅動時,會使引腳保持其上一已知狀態。如果暫時不驅動引腳,通常使用中繼模式來防止引腳懸空(因為引腳處於不確定狀態時,可能會消耗大量電能)。下半部分的邏輯門用於整形並讀取引腳上的電平狀態,還可控制輸入電平是否取反。圖的最下方則是控制引腳的模擬輸入,用於讀取模擬訊號。

在lpc824中,各個引腳可以配置以下電氣屬性:

1.可配置上拉/下拉電阻

2.可程式設計開漏模式

3.遲滯模式

4.輸入反相器

5.毛刺數字濾波器,帶可程式設計時間常數

6.模擬模式

其中,引腳pio0_10和pio0_11還是真正的開漏引腳,可針對不同的i2c匯流排速度配置。

在lpc824中,每個埠引腳pio0_x都為其分配了乙個iocon暫存器,用來控制該引腳的功能及電氣特性。下表列出了所有29個引腳用到的iocon暫存器及其偏移位址。

在mdk環境中,針對以上29個iocon暫存器,定義了如下的結構體,用來描述iocon暫存器組的型別。

typedef struct lpc_iocon_type;

同前面gpio討論的一樣,iocon暫存器組的基址為0x40044000,要將基址指標強制轉換為上述結構體,還得加上下面的定義。

#define lpc_iocon_base 0x40044000ul

#define lpc_iocon ((lpc_iocon_type *) lpc_iocon_base)

這樣一來,就可以使用「lpc_iocon->pio0_x」的形式來引用某個引腳的iocon暫存器了。

由於iocon暫存器有29個之多,而每個的結構基本相同,所以下面就例舉兩個進行討論,其他的可參照使用。

下面給出的是pio0_17引腳配置暫存器的全部位結構,其位元組位址為0x40044000。

(1)第0~2位為保留位。

(2)第3、4兩位(mode)用於選擇功能模式,值從0x0到0x3分別對應選擇無效、上拉、下拉和中繼4種模式,預設為上拉。

(3)第5位(hys)用於選擇引腳是否使用遲滯作用,置0時禁止,置1時使能,預設為禁止。

(4)第6位(inv)用於選擇引腳在輸入時是否反向,置0時不反向,置1時反向,預設為不反向。

(5)第7~9位為保留位。

(6)第10位(od)用於選擇引腳是否開漏,置0時禁止,置1時使能,預設為禁止。注意:這裡的開漏並非真正的開漏模式。

(7)第11、12兩位(s_mode)用於選擇數字濾波取樣模式,值從0x0到0x3分別對應選擇旁路、1個、2個、3個時鐘週期,預設為旁路。

(8)第13~15位(clk_div)用於選擇外設時鐘分頻,該時鐘用於輸入濾波器取樣時鐘,值從0x0到0x6分別對應選擇0~6分頻,預設為不分頻。

(9)第16~31位為保留位。

雖然上面只給出了pio0_17引腳的配置暫存器,但其餘的引腳配置暫存器和它基本上是一樣的,所以就不一一例舉了。但有兩個暫存器稍有不同,它們是pio0_10和pio0_11兩個引腳配置暫存器,下面就給出pio0_10引腳配置暫存器的全部位結構。

(1)第0~5位為保留位。

(2)第6位(inv)用於選擇引腳在輸入時是否反向,置0時不反向,置1時反向,預設為不反向。

(3)第7位為保留位。

(4)第8、9兩位(i2cmode)用於選擇引腳i2c模式,值從0x0到0x3分別對應選擇標準/快速i2c模式、標準gpio功能模式(需要外部上拉)、超快速i2c模式、保留,預設為標準/快速i2c模式。

(5)第10位為保留位。

(6)第11、12兩位(s_mode)用於選擇數字濾波取樣模式,值從0x0到0x3分別對應選擇旁路、1個、2個、3個時鐘週期,預設為旁路。

(7)第13~15位(clk_div)用於選擇外設時鐘分頻,該時鐘用於輸入濾波器取樣時鐘,值從0x0到0x6分別對應選擇0~6分頻,預設為不分頻。

(8)第16~31位為保留位。

可以看出,由於gpio0_10、gpio0_11兩根引腳預設就被用來接i2c裝置,所以它們都為真正的開漏結構,也就不需要上下拉選擇和開漏選擇了。但在實際連線i2c裝置時,兩根引腳上必須外接上拉電阻,

具體將在i2c模組部分再作詳細討論。

至此可以總結一下lpc824在預設時的引腳狀態,pio0_2、pio0_3和pio0_5為非gpio引腳,gpio0_10、gpio0_11為真開漏的i2c標準/快速引腳,除此以外的其他引腳均為gpio引腳,狀態為數字模式,輸入方向,上拉使能,禁止遲滯特性。在配置iocon暫存器時還要注意一點,在iocon暫存器中復位值為1的保留位必須寫1。此外,在配置iocon之前必須把iocon時鐘(位於sysahbclkctrl暫存器中的第18位)開啟,否則不能進行配置,配置完畢再把該時鐘關閉,以節約電能。

前面的第乙個示例中使用的外部晶振函式就是這樣配置的,這裡再來回顧一下:

void ext_osc(void)

通過前面的討論,該函式內容就應該可以完全理解了。

引腳配置輸入輸出

推挽輸出用於引腳的普通功能 高低電位的輸出,復用推挽輸出用於引腳的其他特色功能。推挽的意思是,高低電平都允許輸出,只要有相應的高低電平設定即可 而開漏輸出是單一電平的,開漏電路就是指從mosfet的漏極輸出的電路。典型的用法是在漏極外部的電路新增上拉電阻到電源。完整的開漏電路應由開漏器件和開漏上拉電...

FPGA的配置引腳以及配置過程

fpga配置基本介紹 與cpld不同,fpga是基於門陣列方式為使用者提供可程式設計資源的,其內部邏輯結構的形成是由配置資料決定的。fpga的配置方式分為主動式和被動式。1配置引腳 fpga 的配置引腳可分為兩類 專用配置引腳和非專用配置引腳。專用配置引腳只有在配置時起作用,而非專用配置引腳在配置完...

32 配置引腳中斷 ZYNQ中斷體系

arm中斷體系 01 arm體系中,在儲存位址的低位,固化了乙個32位元組的硬體中斷向量表。異常中斷發生時,程式計數器pc所指的位置不同,異常中斷就不同。中斷結束後,中斷不同,返回位址也不同。但是,對於系統復位中斷,不需要返回,因為整個應用系統就是從復位中斷中開始的。快速中斷請求 外部引腳的快速中斷...