参看《SPRUFL8B》 2.9 Initialization部分
1.进行器件引脚复用设置
2.设置PSC(电源和睡眠控制寄存器)使能GPIO
3.设置方向、数据、中断控制寄存器来按需配置
四、介绍StarterWare的有关GPIO的库函数
使用StarterWare的GPIO函数需要添加“gpio.c”或者“C:\ti\C6748_StarterWare_1_20_04_01\binary\c674x\cgt_ccs\c6748\drivers\Debug\drivers.lib”,另外,还需要添加的头文件有"gpio.h"、 "soc_C6748.h"、 "hw_syscfg0_C6748.h"、 "hw_types.h" 这些头文件定义了很多寄存器的物理地址和用来计算地址位置等的函数宏。
1.按照步骤,我们先看一下有关复用的寄存器PINMUXn。因为我的开发板用到的是GPIO2[8],所以直接定位到PINMUX5寄存器:
看到GP2[8]在PINMUX5的31-28位,令此位为“1”即可。下图为PINMUX5寄存器的物理地址:
我们采取“读-屏蔽-写”的操作避免影响到其他位的配置。在hw_types.h中定义了HWREG(x) (*((volatile unsigned int *)(x))),于是我们可以如下设置:
PINMUX_5_VAL=HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)); /* 读取PINMUX5(复用寄存器)寄存器的值 */
PINMUX_5_VAL=(PINMUX_5_VAL&0x0fffffff)|0x80000000;
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5))=PINMUX_5_VAL;/* 将设置后的值写回PINMUX5寄存器 GP2[8] */
上面的SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)值为0x1c14134正好为PINMUX5的地址。StarterWare会根据某一外设的寄存器的基址的规律来计算该外设下的某一寄存器地址,就像SOC_SYSCFG_0_REGS,它在soc_C6748.h的289行定义为0x01C14000,而PINMUX5在此外设下。而SYSCFG0_PINMUX(n) (0x120 + (n * 4))正好利用了每个PINMUXn之间有九个其他寄存器,每个寄存器都是32位来线性计算的。
2.这里PSC用硬件复位后的default就好了。
3.设置输入/输出寄存器。库函数中定义了void GPIODirModeSet(unsigned int baseAdd, unsigned int pinNumber,unsigned int pinDir);来设置IO口的输入/输出状态。其中pinNumber要注意,函数入口参数中有如下说明:
The 144 GPIO pins have serial numbers from 1 to 144.
* GPIO0[0] 1 ,GPIO1[0] 17
* GPIO2[0] 33 ,GPIO3[0] 49
* GPIO4[0] 65 ,GPIO5[0] 81
* GPIO6[0] 97 ,GPIO7[0] 113
* GPIO8[0] 129
譬如我想要设置GPIO2[8]为输出,则pinNumber=41。
GPIODirModeSet(SOC_GPIO_0_REGS, 41, GPIO_DIR_OUTPUT);可设置GPIO2[8]为输出;同样的,写GPIO函数一样的原理,只是寄存器地址计算不一样,这里就不列举了。GPIOPinWrite(SOC_GPIO_0_REGS, 41, GPIO_PIN_HIGH);就可以让GPIO2[8]输出高电平了。读操作具体函数参看"C:\ti\C6748_StarterWare_1_20_04_01\drivers\gpio.c”。这样我们就可以简单操作GPIO了!
|