一、问题的引入首先看blinky main函数
代码
//#define BLINKY_MODE 01
//#define BLINKY_MODE 02
#define BLINKY_MODE 03
Void main(void)
{
//初始化板子,我看了一下大概是中断向量表的映射,和其他的一些东西,这里我们不关心
BoardInit();
//使能时钟
MAP_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
}
}
二、实现跑马灯实验需要对CC3200设置,分成四步
1、引脚映射成GPIO模式,上拉下拉等
库函数示例 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的时钟
库函数示例:MAP_PRCMPeripheralClkEnable(PRCM_GPIOA1,PRCM_RUN_MODE_CLK);使能GPIOA1的时钟,有些可能要问为什么是GPIOA1?我刚开始用的时候也疑问过,那就说起PIN_01了,PIN_01是芯片的第一个引脚,在<<CC3200 datasheet>>8页,
CC3200的GPIO分成4组,每组都有自己的一根时钟,所以配置时需要查阅datasheet,引脚是对应于哪一个GPIO,这个GPIO又是哪一组。
PRCM_GPIOA1:GPIOA1的时钟线。
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依次类推