天天看點

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

1、CC2530的IO口概述

  CC2530晶片有21 個數字輸入/輸出引腳,可以配置為通用數字I/O 或外設I/O 信号,配置為連接配接到ADC、定時器或USART外設。這些I/O 口的用途可以通過一系列寄存器配置,由使用者軟體加以實作。

  I/O 端口具備如下重要特性:

       􀁺 21 個數字I/O 引腳

    􀁺 可以配置為通用I/O 或外部裝置I/O

    􀁺 輸入口具備上拉或下拉能力

    􀁺 具有外部中斷能力。

21 個I/O 引腳都可以用作于外部中斷源輸入口。是以如果需要外部裝置可以産生中斷。外部中斷功能也可以從睡眠模式喚醒裝置。

2、未使用的I/O 引腳處理

  未使用的I/O 引腳電平是确定的,不能懸空。一個方法是使引腳不連接配接,配置引腳為具有上拉電阻的通用I/O輸入。這也是所有引腳複位後的狀态(除了P1.0 和P1.1 沒有上拉/下拉功能)。或者引腳可以配置為通用I/O輸出。這兩種情況下引腳都不能直接連接配接到VDD 或GND,以避免過多的功耗。

3、低I/O 電壓

在數字I/O 電壓引腳DVDD1 和DVDD2 低于2.6V 的應用中,寄存器位PICTL.PADSC 應設定為1,以獲得DC 特性表中所述的輸出DC 特性。

4、通用I/O

  用作通用I/O 時,引腳可以組成3 個8 位端口,端口0、端口1 和端口2,表示為P0、P1 和P2。其中,P0和P1 是完全的8 位端口,而P2 僅有5 位可用。所有的端口均可以通過SFR 寄存器P0、P1 和P2 位尋址和位元組尋址。每個端口引腳都可以單獨設定為通用I/O 或外部裝置I/O。

  (驅動電流很重要,有時候和MOS管電路、上拉電阻的選擇等密切相關)除了兩個高驅動輸出口P1.0 和P1.1 各具備20 mA 的輸出驅動能力之外,所有的輸出均具備4 mA 的驅動能力。

  寄存器PxSEL(選擇為通用IO模式還是外設IO信号),其中x 為端口的标号0~2,用來設定端口的每個引腳為通用I/O 或者是外部裝置I/O 信号。作為預設的情況,每當複位之後,所有的數字輸入/輸出引腳都設定為通用輸入引腳。在任何時候,要改變一個端口引腳的方向,就使用寄存器PxDIR(選擇輸入或輸出)來設定每個端口引腳為輸入或輸出。是以隻要設定PxDIR 中的指定位為1,其對應的引腳口就被設定為輸出了。當讀取端口寄存器P0、P1 和P2 的值,不管引腳配置如何,輸入引腳上的邏輯值都被傳回。這在執行讀-修改-寫指令期間不适用。讀-修改-寫指令是:ANL,ORL,XRL,JBC,CPL,INC,DEC,DJNZ,MOV,CLR和SETB。在一個端口寄存器上操作,以下是正确的:當目标是端口寄存器P0、P1 或P2 中一個獨立的位,寄存器的值,而不是引腳上的值,被讀取、修改并寫回端口寄存器。

  用作輸入時,通用I/O 端口引腳可以設定為上拉、下拉或三态操作模式。作為預設的情況,複位之後,所有的端口均設定為帶上拉的輸入。要取消輸入的上拉或下拉功能,就要将PxINP(輸入上拉、下拉、三态模式選擇)中的對應位設定為1。I/O 端口引腳P1.0 和P1.1 沒有上拉/下拉功能。注意配置為外設I/O 信号的引腳沒有上拉/下拉功能,即使外設功能是一個輸入。

  在電源模式PM1、PM2 和PM3 下I/O 引腳保留當進入PM1/PM2/PM3 時設定的I/O 模式和輸出值(如果可用的話)。

5、通用I/O 中斷

  通用I/O 引腳設定為輸入後,可以用于産生中斷。中斷可以設定在外部信号的上升或下降沿觸發。P0、P1或P2 端口都有中斷使能位,對位于IENl(端口中斷使能寄存器)寄存器内的端口所有的位都是公共的,如下:

􀁺 IENI.P0 IE:P0 中斷使能

􀁺 IEN2.PI IE:P1 中斷使能

􀁺 IEN2.P2IE:P2 中斷使能

  除了這些公共中斷使能之外,每個端口的位都有位于SFR 寄存器P0IEN、P1IEN 和P2IEN(單獨引腳中斷使能寄存器)的單獨的中斷使能。即使配置為外設I/O 或通用輸出的I/O 引腳使能時都有中斷産生。

  當中斷條件發生在I/O 引腳之一上面,P0-P2 中斷标志寄存器P0IFG、P1IFG 或P2IFG(中斷标志寄存器)中相應的中斷狀态标志将設定為1。不管引腳是否設定了它的中斷使能位,中斷狀态标志都被設定。當中斷已經執行,中斷狀态标志被清除,該标志寫入0。這個标志必須在清除CPU 端口中斷标志(PxIF)之前被清除。用于中斷的SFR 寄存器描述在下一節。寄存器總結如下:

􀁺 P0IEN: P0 中斷使能

􀁺 P1IEN: P1 中斷使能

􀁺 P2IEN: P2 中斷使能

􀁺 PICTL: P0、P1 和P2 觸發沿設定

􀁺 P0FG: P0 中斷标志

􀁺 P1IFG: P1 中斷标志

􀁺 P2IFG: P2 中斷标志

6、通用I/O DMA

  當用作通用I/O 引腳時,每個P0 和P2 端口都關聯一個DMA 觸發。這些DMA 觸發對于P0 為IOC_0,對于P1 為IOC_1。當一個中斷發生在P0 引腳時IOC_0 觸發是被激活的。當一個中斷發生在P1 引腳時IOC_1 觸發是被激活的。

7、外設I/O

  本節描述了數字I/O 引腳是如何配置為外設I/O 的。對于可以通過數字輸入/輸出引腳和外部系統接口的每個外設單元,如何配置外設I/O 的描述給定在以下小節中。

  對于USART 和定時器I/O,在一個數字I/O 引腳上選擇外設I/O 功能,需要設定對應的PxSEL 位為1。

  注意,該外部單元具有兩個可以選擇的位置對應它們的I/O 引腳,參見下表。如果有關于I/O 映射的沖突設定,可以在這些之間設定優先級(使用P2SEL.PRIxP1 和P2DIR.PRIP0 位)。所有不會導緻沖突的組合都可以使用。

  注意即使沒有使用,外設一般也會出現在標明的位置,使用引腳的其他外設必須給予較高的優先級。例外情況是流量控制禁用時UART 模式下USART 的RTS 和CTS 引腳, 以及SPI 主模式下USART 配置的SSN 引腳。

  還要注意不管PxINP 的設定,有輸入引腳的外設單元是從引腳接收輸入,這可能會影響外設單元的狀态。例如如果RX 引腳在用作一個UART 引腳之前,可能已經有活動, UART 在使用之前必須被清除。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.1、定時器1

  PERCFG.T1CFG 選擇是否使用備用位置1 或備用位置2。

  在上表中,定時器1 的信号顯示如下:

● 0:通道0 捕獲/比較引腳

● 1:通道1 捕獲/比較引腳

● 2:通道2 捕獲/比較引腳

● 3:通道3 捕獲/比較引腳

● 4:通道4 捕獲/比較引腳

  P2DIR.PRIP0(指派端口0一些外設的優先順序)選擇為端口0 指派一些外設的優先順序。當設定為10,定時器通道0-1 優先,當設定為11,定時器通道2-3 優先。要所有定時器1 通道在備用位置1 上可見,移動USART 0 和USART 1 到備用位置2。P2SEL.PRI1P1 和P2SEL.PRI0P1(外設優先級設定)選擇為端口1 指派一些外設的優先順序。目前者設定為低電平而後者設定為高電平時,定時器1 通道優先。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.2、定時器3

  PERCFG.T3CFG 選擇是否使用備用位置1 或備用位置2。

  在表中,定時器3 的信号顯示如下:

● 0:通道0 比較引腳

● 1:通道1 比較引腳

  P2SEL.PRI2P1 和P2SEL.PRI3P1 選擇為端口1 指派一些外設的優先順序。當這兩個位都設定為高電平時,定時器3 通道優先。如果P2SEL.PRI2P1 設定為高電平且P2SEL.PRI3P1 設定為低電平時,定時器3 通道優先于USART 1,但是USART 0 優先于定時器3 通道以及USART 1。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.3、定時器4

  PERCFG.T4CFG 選擇是否使用備用位置1 或備用位置2。

  在表中,定時器4 的信号顯示如下:

  P2SEL.PRI1P1 選擇為端口1 指派一些外設的優先順序。當這個位設定時,定時器4 通道優先。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.4、USART 0

  SFR 寄存器位PERCFG.U0CFG 選擇是否使用備用位置1 或備用位置2。

  在表中,USART 0 信号顯示如下:

UART:

● RX:RXDATA

● TX:TXDATA

● RT:RTS

● CT:CTS

SPI:

● MI:MISO

● MO:MOSI

● C:SCK

● SS:SSN

  P2DIR.PRIP0 選擇為端口0 指派一些外設的優先順序。當設定為00 時,USART 0 優先。注意如果選擇了UART 模式,且硬體流量控制禁用,UART 1 或定時器1 将優先使用端口P0.4 和P0.5。P2SEL.PRI3P1 和P2SEL.PRI0P1 選擇為端口1 指派一些外設的優先順序。當它們兩個都設定為0 時,USART0 優先。注意如果選擇了UART 模式,且硬體流量控制禁用,定時器1 或定時器3 将優先使用端口P1.2 和P1.3。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.5、USART 1

  SFR 寄存器位PERCFG.U1CFG 選擇是否使用備用位置1 或備用位置2。

  在表中,USART 1 信号顯示如下:

SPI:

● SS: SSN

  P2DIR.PRIP0 選擇為端口0 指派一些外設時的優先順序。當設定為01,USART 1 優先。注意如果選擇了UART 模式,且硬體流量控制禁用,USART 0 或定時器1 将優先使用P0.2 和P0.3。P2SEL.PRI3P1 和P2SEL.PRI2P1 選擇為端口1 指派一些外設的優先順序。目前者設定為1 而後者設定為0時,USART 1 優先。注意如果選擇了UART 模式,且硬體流量控制禁用,USART 0 或定時器3 将優先使用P1.4和P1.5。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.6、ADC

  當使用ADC 時,端口0 引腳必須配置為ADC 輸入。可以使用多達八個ADC 輸入引腳。要配置一個端口0引腳為一個ADC 輸入,APCFG 寄存器中相應的位必須設定為1。這個寄存器的預設值選擇端口0 引腳為非ADC輸入,即數字輸入/輸出。

  APCFG 寄存器的設定将覆寫P0SEL的設定。

  ADC 可以配置為使用通用I/O 引腳P2.0 作為内部觸發器來啟動轉換。當用作ADC 内部觸發器時,P2.0 必須在輸入模式下配置為通用I/O。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.7、調試接口

  端口P2.1 和P2.2 分别用于調試資料和時鐘信号。這些顯示為表中的DD(調試資料)和DC(調試時鐘)。當處于調試模式,調試接口控制這些引腳的方向。當處于調試模式在這些引腳上禁用上拉/下拉。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

7.8、32 kHz XOSC 輸入

  端口P2.3 和P2.4 用于連接配接一個外部32 kHz 晶振。當CLKCONCMD.OSC32K 是低電平時,不管寄存器設定如何,這些端口引腳由32 kHz XOSC 使用。當CLKCONCMD.OSC32K 是低電平,這些端口引腳将設定在模拟模式。

7.9 無線測試輸出信号

  通過使用OBSSELx 寄存器(OBSSEL0-OBSSEL5),使用者可以從RF 核心輸出不同的信号到GPIO 引腳。這些信号可以用于調試低級别的協定或控制外部PA、LNA 或交換機。控制寄存器OBSSEL0-OBSSEL5 可以用于覆寫标準的GPIO 行為,以及在引腳P1[0:5]上輸出RF 核心信号(rfc_obs_sig0、rfc_obs_sig1 和rfc_obs_sig2)。可用信号的清單見第19 章。

7.10、掉電信号MUX (PMUX)

  PMUX 寄存器可以用于輸出32 kHz 時鐘和/或數字穩壓器的狀态。所選的32 kHz 時鐘源可以輸出在P0 其中的一個引腳上。使能位CKOEN 使得輸出在P0 上,使用CKOPIN(詳細資訊見PMUX 寄存器描述)選擇P0 的引腳。當CKOEN 被設定,所選引腳的所有其他配置都被覆寫。時鐘在所有供電模式下都輸出;但是,在PM3 下時鐘停止(見第4 章的PM3)。而且,數字穩壓器的狀态可以輸出在P1 其中的一個引腳上。當DREGSTA 位被設定,數字穩壓器的狀态就被輸出。DREGSTAPIN 選擇P1 引腳(詳細資訊見PMUX 寄存器描述)。當DREGSTA 被設定,所選引腳的所有其他配置都被覆寫。當1.8V 片上數字穩壓器上電(晶片有調整過的電壓),所選的引腳輸出1。當1.8V片上數字穩壓器掉電,即在PM2 和PM3 下,所選的引腳輸出0。

7.11 I/O 引腳

  I/O 端口的寄存器描述在本節中。寄存器如下:

● P0 :端口0

● P1 :端口1

● P2 :端口2

● PERCFG :外設控制寄存器

● APCFG :模拟外設I/O 配置

● P0SEL :端口0 功能選擇寄存器

● P1SEL :端口1 功能選擇寄存器

● P2SEL :端口2 功能選擇寄存器

● P0DIR :端口0 方向寄存器

● P1DIR :端口1 方向寄存器

● P2DIR :端口2 方向寄存器

● P0INP :端口0 輸入模式寄存器

● P1INP :端口1 輸入模式寄存器

● P2INP :端口2 輸入模式寄存器

● P0IFG :端口0 中斷狀态标志寄存器

● P1IFG :端口1 中斷狀态标志寄存器

● P2IFG :端口2 中斷狀态标志寄存器

● PICTL :中斷邊緣寄存器

● P0IEN :端口0 中斷掩碼寄存器

● P1IEN :端口1 中斷掩碼寄存器

● P2IEN :端口2 中斷掩碼寄存器

● PMUX :掉電信号Mux 寄存器

● OBSSEL0 :觀察輸出控制寄存器0

● OBSSEL1 :觀察輸出控制寄存器1

● OBSSEL2 :觀察輸出控制寄存器2

● OBSSEL3 :觀察輸出控制寄存器3

● OBSSEL4 :觀察輸出控制寄存器4

● OBSSEL5 :觀察輸出控制寄存器5

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅
[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

8、隔一秒閃爍例程(引腳輸出控制)

  下面代碼是控制P1_0引腳上的LED每隔1s閃爍一次的實驗。黃色部分P1DIR用來設定P1的8個端口的每個的輸入輸出方向。

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

<a></a>

上面的例子是控制1個引腳,下面的流水燈例子展示了同時控制3個引腳,其實大同小異:

 流水燈例子

9、按鍵控制LED亮滅(外部信号輸入讀取)

  外設電路圖如下,P10低電平時LED亮,按鍵沒有按下P01為高電平,按下為低電平:

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

  這裡重點講P01按鍵信号讀取的設定:黃色部分P0SEL将P01設定為通用IO:

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

  

  P0DIR将P01設定為輸入模式:

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

  P0INP打開P01上的上拉電阻:

[ZigBee] 3、ZigBee基礎實驗——GPIO輸出控制實驗-控制Led亮滅

  這裡讀取一個引腳的狀态,和讀取51單片機一個引腳狀态一樣,比較簡單~

繼續閱讀