第二章 学习CC3200输入和中断

一、问题的引入

    // Configure PIN_13 for GPIOOinput

    //

    MAP_PinTypeGPIO(PIN_04, PIN_MODE_0, false);

    MAP_GPIODirModeSet(GPIOA1_BASE, 0x20, GPIO_DIR_MODE_IN);

    //

先看输入配置方法和输入差不多,只是MAP_GPIODirModeSet(GPIOA1_BASE, 0x20, GPIO_DIR_MODE_IN);不一样。

GPIOA1_BASE:GPIOA1组的GPIO

参数0x20,为位权。25-1=0x20.

GPIO_DIR_MODE_OUT:输入模式

输入值的读取函数:MAP_GPIOPinRead(GPIOA1_BASE,0x20)

GPIOA1_BASE:GPIOA1组的GPIO

参数0x20,为位权。25-1=0x20.

二、中断

1、设置引脚为GPIO

2、使能时钟。

3、设置引脚电流的强度,上拉或者下拉等等。

4、设置GPIO为输入模式。

5、设置成边沿触发。

6、编写中断处理函数:1、判断哪个GPIO触发,2、清除中断标志。

7、使能中断触发。

CC32004GPIO,每组的GPIO共用一个中断处理函数,既然有多个GPIO共用一个中断处理函数,当然要在中断函数查询哪个GPIO触发中断的(可以查询中断状态寄存器)。

现在作重介绍中断配置需要的库函数:

GPIOIntTypeSet(GPIOA1_BASE,GPIO_PIN_5,GPIO_RISING_EDGE);

配置GPIO A1组的pin 5设置成上升边沿触发中断,类似的还有下拉。

GPIOIntRegister(GPIOA1_BASE,GPIO13_handle);

配置GPIOA1组的中断处理函数GPIO13_handle.

GPIOIntEnable(GPIOA1_BASE,GPIO_INT_PIN_5);

使能GPIOA1pin5触发中断。

中断函数需要调用的函数。

GPIOIntStatus(GPIOA1_BASE,true);

查询GPIOA1的中断状态寄存器:注意查询的是组内的GPIO的中断状态。获得的值跟GPIO_INT_PIN_5相与,就可以获取是不是pin5触发中断的。

GPIOIntClear(GPIOA1_BASE,GPIO_INT_PIN_5);

清除GPIOA1pin5的中断标志。

例程如下:

Void PinMuxConfig(void)

{

    //

    // Enable Peripheral Clocks

//

//使能GPIOA1GPIOA2时钟

    MAP_PRCMPeripheralClkEnable(PRCM_GPIOA1, PRCM_RUN_MODE_CLK);

    MAP_PRCMPeripheralClkEnable(PRCM_GPIOA2, PRCM_RUN_MODE_CLK);

    //

    // Configure PIN_64 for GPIOOutput

    //

    MAP_PinTypeGPIO(PIN_64, PIN_MODE_0, false);

    MAP_GPIODirModeSet(GPIOA1_BASE, 0x2, GPIO_DIR_MODE_OUT);

 

    //

    // Configure PIN_01 for GPIOOutput

    //

    MAP_PinTypeGPIO(PIN_01, PIN_MODE_0, false);

    MAP_GPIODirModeSet(GPIOA1_BASE, 0x4, GPIO_DIR_MODE_OUT);

 

    //

    // Configure PIN_02 for GPIOOutput

    //

    MAP_PinTypeGPIO(PIN_02, PIN_MODE_0, false);

    MAP_GPIODirModeSet(GPIOA1_BASE, 0x8, GPIO_DIR_MODE_OUT);

    //

    // Configure PIN_13 for GPIOOinput

    //

   // MAP_PinTypeGPIO(PIN_04, PIN_MODE_0, false);

  //  MAP_GPIODirModeSet(GPIOA1_BASE, 0x20, GPIO_DIR_MODE_IN);

//设置引脚4GPIO模式,标准模式,2ma

    PinModeSet(PIN_04,PIN_MODE_0);

PinConfigSet(PIN_04,PIN_STRENGTH_2MA,PIN_TYPE_STD);

//设置成输入,引脚4对应于GPIOA1pin5.

GPIODirModeSet(GPIOA1_BASE, GPIO_PIN_5, GPIO_DIR_MODE_IN);

//设置成上升沿触发中断

GPIOIntTypeSet(GPIOA1_BASE,GPIO_PIN_5,GPIO_RISING_EDGE);

//设置中断处理函数

GPIOIntRegister(GPIOA1_BASE,GPIO13_handle);

//中断使能

    GPIOIntEnable(GPIOA1_BASE,GPIO_INT_PIN_5);

    //

    // Configure PIN_22 for GPIOOinput

    //

  //  MAP_PinTypeGPIO(PIN_15, PIN_MODE_0, false);

 //   MAP_GPIODirModeSet(GPIOA2_BASE, 0x40, GPIO_DIR_MODE_IN);

    PinModeSet(PIN_15,PIN_MODE_0);

    PinConfigSet(PIN_15,PIN_STRENGTH_2MA,PIN_TYPE_STD);

    GPIODirModeSet(GPIOA2_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN);

    GPIOIntTypeSet(GPIOA2_BASE,GPIO_PIN_6,GPIO_RISING_EDGE);

    GPIOIntRegister(GPIOA2_BASE,GPIO13_handle);

    GPIOIntEnable(GPIOA2_BASE,GPIO_INT_PIN_6);

}

//中断处理函数,所有的中断处理都可以在此处进行。

void GPIO13_handle(void)

{

//  int i;

#if 1

    //i = MAP_GPIOIntStatus(GPIOA1_BASE,true);

    if(MAP_GPIOIntStatus(GPIOA1_BASE,true)&GPIO_INT_PIN_5)

    {

        MAP_GPIOIntClear(GPIOA1_BASE,GPIO_INT_PIN_5);

        if(ulCount > 1000000)

            ulCount -= 1000000;

    }

    if(MAP_GPIOIntStatus(GPIOA2_BASE,true)&GPIO_INT_PIN_6)

    {

        MAP_GPIOIntClear(GPIOA2_BASE,GPIO_INT_PIN_6);

        if(ulCount < 8000000)

            ulCount += 1000000;

    }

#endif

}

void LEDBlinkyRoutine()

{

    //

    // Toggle the lines initially to turn off the LEDs.

    // The values driven are as required by the LEDs on the LP.

    //

    GPIO_IF_LedOff(MCU_ALL_LED_IND);

    while(1)

    {

        //

        // Alternately toggle hi-low each of the GPIOs

        // to switch the corresponding LED on/off.

        //

        MAP_UtilsDelay(ulCount);

        GPIO_IF_LedOn(MCU_RED_LED_GPIO);

        MAP_UtilsDelay(ulCount);

        GPIO_IF_LedOff(MCU_RED_LED_GPIO);

        MAP_UtilsDelay(ulCount);

        GPIO_IF_LedOn(MCU_ORANGE_LED_GPIO);

        MAP_UtilsDelay(ulCount);

        GPIO_IF_LedOff(MCU_ORANGE_LED_GPIO);

        MAP_UtilsDelay(ulCount);

        GPIO_IF_LedOn(MCU_GREEN_LED_GPIO);

        MAP_UtilsDelay(ulCount);

        GPIO_IF_LedOff(MCU_GREEN_LED_GPIO);

    }

}

你可能感兴趣的:(CC3200,Wifi)