S3c 2440的GPIO MTK编程嵌入式数据结构工作
GPIO
GPIO,通用输入输出(General Purpose I/O)的简称,其引脚可以供编程使用。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备,对这些设备的控制,有时只需要一位控制信号就够了,即只需要开/关两种状态就够了,比如灯亮与灭。对这些设备的控制,使用传统的串行口和并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程I/O接口”,即GPIO。
S3c GPIO
S3c2440有130个GPIO口,分为A到J共9组:GPA、GPB、GPC...GPJ。通过设置相应寄存器,可以选择某个GPIO口是用于输入、输出还是其他特殊功能。例如可以设置GPH6作为一般的输入、输出端口,或者用于串口。
操作GPIO
每组GPIO(GPA~GPJ),都可以通过3个寄存器来控制与访问,这3个寄存器分别为:
1.GPxCON:GPIO配置寄存器。
2.GPxDAT:GPIO数据寄存器。
3.GPxUP:上拉电阻控制寄存器。
(其中x为:A、B....H、J)
GPxCON寄存器
从寄存器的名字可以看出它属于配置(Confugure)寄存器——选择GPIO口的功能。其中PORTA与PORTB~PORTJ在功能选择方面有所不同。GPACON中每一位对应一个IO口(共23个)。当某位为0时,相应的IO为输出;当某位被置为1时,相应的引脚为地址线或用于地址控制。PORTB~PORTJ在寄存器操作方面完全相同,GPxCON中每两位控制一个引脚:00表示输入,01表示输出,10表示特殊功能,11保留不用。
GPxDAT寄存器
GPxDAT寄存器用于读/写引脚:当引脚被设置为输入时,读此寄存器可知相应引脚电瓶状态是高还是低;当引脚被设为输出时,写此寄存器相应的位可令此引脚输出高电平或低电平。
GPxUP寄存器
GPxUP:某位为1时,相应引脚无内部上拉电阻;为0时相应的引脚使用内部上拉电阻。(上拉电阻:由于管脚悬空比较容易受到外界的电磁干扰,因此通过一个电阻来将此管脚与高电平相连,让其固定在高电平,这样的电阻称之为上拉电阻。)
Gpio的初始化在文件gpio_drv.c里,可以用MTK提供的工具配置也可以用代码在程序里直接操作,二者的选择要看有没有定义宏__CUST_NEW__ 工具初始化时要注意配置codegen.dws,该文件里配置的只是对gpio口的初始化,并不是所有的gpio口都要设置成工作时的模式,尤其是当作时钟和蓝牙部分的gpiio口,初始化时就设置成工作模式的话会造成电机电流过大的。 代码初始化时DRV_WriteReg()、DRV_Reg对gpio口寄存器操作,分别定义gpio口的模式,和方向(0:输入;1:输出),对单个gpio口操作用到以下函数(以gpio25为例): GPIO_ModeSetup(25, 0); 设置GPIO25为模式0 GPIO_InitIO(1,25); 初始化GPIO25方向为输出 GPIO_WriteIO(0, 25 ); 设值GPIO25输入低电平0