一、ADuCM360的IO控制
1、它有8个P0口、8个P1口及3个P2口,这些端口都有可以提供1mA电流的、受GPxPUL寄存器控制的上拉电阻。
在作为输入时
VINL = 0.2 x IOVDD max
VINH = 0.7 x IOVDD min
2、IO的控制有以下几种:
l IO上拉允许
l 数据输入
l 开路允许
l 数据输出
l 位置位
l 位清零
l 位切换
l 输出允许
3、IO功能由GPxCON控制
用于控制复用功能
4、控制寄存器
0x0000 + n * 30h (n = 0 : port0 , 1, 2 )
GPnCON GPIOn配置寄存器 RW 复位值0x0000
0x0004 + n * 30h
GPnOEN GPIOn输出允许寄存器 RW 复位值0x00
0x0008+ n * 30h
GPnPUL GPIOn上拉寄存器 RW 复位值0xFF
0x000C+ n * 30h
GPnOCE GPIOn开路寄存器 RW 复位值0x00
0x0014+ n * 30h
GPnIN1 GPIOn输入寄存器 R 复位值NA
0x0018+ n * 30h
GPnOUT GPIOn输出寄存器 RW 复位值0x00
0x001C+ n * 30h
GPnSET GPIOn置位寄存器 W 复位值0x00
0x0020+ n * 30h
GPnCLR GPIOn清零寄存器 W 复位值0x00
0x0024+ n * 30h
GPnTGL GPIOn切换寄存器 W 复位值0x00
二、ADI例程中,对IO的控制方法
1、IO结构体
typedef struct { /*!< pADI_GP0 Structure */
__IO uint16_t GPCON; /*!< GPIO Port 0 configuration */
__I uint16_t RESERVED0;
__IO uint8_t GPOEN; /*!< GPIO Port 0 output enable */
__I uint8_t RESERVED1[3];
__IO uint8_t GPPUL; /*!< GPIO Port 0 output pull up enable. */
__I uint8_t RESERVED2[3];
__IO uint8_t GPOCE; /*!< GPIO Port 0 tri state */
__I uint8_t RESERVED3[7];
__IO uint8_t GPIN; /*!< GPIO Port 0 data input.*/
__I uint8_t RESERVED4[3];
__IO uint8_t GPOUT; /*!< GPIO Port 0 data outt*/
__I uint8_t RESERVED5[3];
__IO uint8_t GPSET; /*!< GPIO Port 0 data out set */
__I uint8_t RESERVED6[3];
__IO uint8_t GPCLR; /*!< GPIO Port 0 data out clear. */
__I uint8_t RESERVED7[3];
__IO uint8_t GPTGL; /*!< GPIO Port 0 pin toggle. */
} ADI_GPIO_TypeDef;
结构体中的每个成员(保留除外)都对应一个控制寄存器地址。
2、使用时定义一个结构体指针:
#define pADI_GP0 ((ADI_GPIO_TypeDef *)ADI_GP0_ADDR)
并使用以下语句:
pADI_GP0->GPCON |= 0x3C; // Configure P0.1/P0.2 for UART
或使用函数:
DioOen(pADI_GP1,0x8); // Set P1.3 as an output for test purposes
|