转载出处http://blog.csdn.net/hytgab
实现跑马灯实验需要对CC3200设置,分成4个步骤
1、 引脚映射成GPIO模式,上拉下拉等
2、 使能GPIO的时钟
3、 配置GPIO:输入输出,
4、 向GPIO的端口写入数据
CC3200共有64引脚,共32个GPIO,分成4组,每组有8个,
所以CC3200的1个引脚有3中名称,
一种是基于引脚的,编号从0-63
一种是是基于总的GPIO,编号从0-31
一种是基于分组的GPIO,编号A0 –A3(或者A B C D)加(0-7)
引脚64的对应关系 : PIN_64 == GPIO9 == GPIO A1_1
1、 设置引脚的映射,
库函数示例 PinModeSet(PIN_64, PIN_MODE_0);
PIN_64就是引脚编号,这里是引脚64
PIN_MODE_0就是映射的功能,这里是GPIO模式
设置引脚的电流强度、上拉、下拉、开漏等
PinConfigSet(PIN_64,PIN_STRENGTH_2MA,PIN_TYPE_STD);
PIN_64就是引脚编号,这里是引脚64
PIN_STRENGTH_2MA:电流强度,2ma,记得CC3200的电流强度大部分都是2ma,好像只有几根是4ma的,
PIN_TYPE_STD:没有上拉和下拉,没有开漏
2、 使能GPIO的时钟
CC3200的GPIO分成4组,每组都有自己的一根时钟,所以配置时需要查阅datasheet,引脚是对应于哪一个GPIO,这个GPIO又是哪一组。
库函数示例:PRCMPeripheralClkEnable(PRCM_GPIOA1,PRCM_RUN_MODE_CLK);
PRCM_GPIOA1:GPIOA2的时钟线
PRCM_RUN_MODE_CLK:当cc3200在运行状态时,使能这个时钟,CC3200好像有3种运行模式,运行,睡眠,深度睡眠,这里是运行状态
3、 设置GPIO的输出输出
GPIODirModeSet(GPIOA1_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT); GPIOA1_BASE:GPIOA1组的GPIO
GPIO_PIN_1:GPIO A1的第1个GPIO
GPIO_DIR_MODE_OUT:输出模式
4、 向GPIO的端口写入数据
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1,GPIO_PIN_1);
GPIOA1_BASE:GPIO A1组的GPIO
参数的第1个GPIO_PIN_1:GPIO A1的第1个GPIO
参数的第2个GPIO_PIN_1:GPIO A1_1输出高电平,为什么这里也是GPIO_PIN_1,其实这里我是取巧了,看一下这个函数的原型
GPIOPinWrite(unsignedlong ulPort, unsigned char ucPins, unsigned char ucVal);
ucPins可以等于GPIO_PIN_1|GPIO_PIN_2,
ucVal可以是任意值,这里我用一段代码表示
if(ucPins&GPIO_PIN_1) {
if (ucVal & GPIO_PIN_1) {
GPIO_PIN_1输出高
} else {
GPIO_PIN_1输出低
}
}
If(ucPins&GPIO_PIN_1 == 0) {
GPIO_PIN_1不受影响
}
其他的GPIO依次类推
代码
//#defineBLINKY_MODE 01
//#defineBLINKY_MODE 02
#defineBLINKY_MODE 03
voidmain(void) {
//初始化板子,我看了一下大概是中断向量表的映射,和其他的一些东西,这里我们不关心
BoardInit();
//使能时钟
PRCMPeripheralClkEnable(PRCM_GPIOA1,PRCM_RUN_MODE_CLK);
//设置成GPIO模式
PinModeSet(PIN_64, PIN_MODE_0);
//设置电流驱动能力2ma,普通
PinConfigSet(PIN_64,PIN_STRENGTH_2MA,PIN_TYPE_STD);
//设置成GPIO模式
PinModeSet(PIN_01, PIN_MODE_0);
//设置电流驱动能力2ma,普通
PinConfigSet(PIN_01,PIN_STRENGTH_2MA,PIN_TYPE_STD);
//设置成GPIO模式
PinModeSet(PIN_02, PIN_MODE_0);
//设置电流驱动能力2ma,普通
PinConfigSet(PIN_02,PIN_STRENGTH_2MA,PIN_TYPE_STD);
GPIODirModeSet(GPIOA1_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT);
GPIODirModeSet(GPIOA1_BASE,GPIO_PIN_2,GPIO_DIR_MODE_OUT);
GPIODirModeSet(GPIOA1_BASE,GPIO_PIN_3,GPIO_DIR_MODE_OUT);
while(1) {
#ifBLINKY_MODE == 01 //现象:跑马灯
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1,GPIO_PIN_1);
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1,0);
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_2,GPIO_PIN_2);
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_2,0);
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_3,GPIO_PIN_3);
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_3,0);
delay(0xfffff);
#endif
#ifBLINKY_MODE == 02 //现象全亮后全灭
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0);
delay(0xfffff);
#endif
#ifBLINKY_MODE == 03//现象2个亮一个灭 后 2个灭1个亮
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_1|GPIO_PIN_2&(~GPIO_PIN_3));
delay(0xfffff);
GPIOPinWrite(GPIOA1_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,(~GPIO_PIN_1)&(~GPIO_PIN_2)|GPIO_PIN_3);
delay(0xfffff);
#endif
}