工具/软件:TI-RTOS
当输入从高电平变为低电平时、我将尝试配置 GPIO 以引起中断。 我正在使用 GPIO 驱动程序、但无论我是尝试使用配置数组将其配置为静态、还是在运行时配置为动态、我都无法正确配置。
在下面、您可以看到静态配置的代码、按以下顺序:1. BoardGpioInitTable、2. GpioCallbackFunctions、3. gpioPinConfigs
1. BoardGpioInitTable:
const PIN_Config BoardGpioInitTable[]={ CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭*/ CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭*/ CC2640R2_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效*/ CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效*/ CC2640R2_LAUNCHXL_DIO22 | PIN_INPUT_EN | PIN_IRQ_NEGEDGE | PIN_迟滞、/*!!! 我的配置!!! * CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MIN、/*外部闪存芯片选择* CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN、 /*通过调试器反向通道的 UART RX */ CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull、 /*通过调试器反向通道的 UART TX */ CC2640R2_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN、 /* SPI 主器件输出-从器件输入*/ CC2640R2_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN、 /* SPI 主器件输入-从器件输出*/ CC2640R2_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN、 /* SPI 时钟*/ PIN_TERMINATE };
gpioCallbackFunctions:
GPIO_CallbackFxn gpioCallbackFunctions[]={ 空,/*!!! 我的配置!!! * 空,/*按钮1 */ 空,/*按钮2 */ 空、// CC2640R2_LAUNCHXL_SPI_MASTER_READY */ 空、// CC2640R2_LAUNCHXL_SPI_SLAVE_READY */ };
3. gpioPinConfigs:
GPIO_PinConfig gpioPinConfigs[]={ /*输入引脚*/ GPIOCC26XX_DIO_22 | GPIO_DO_NOT _CONFIG、/*!!! 我的配置!!! * GPIOCC26XX_DIO_13 | GPIO_DO_NOT _CONFIG、/*按钮1 */ GPIOCC26XX_DIO_14 | GPIO_DO_NOT _CONFIG、/*按钮2 */ GPIOCC26XX_DIO_15 | GPIO_DO_NOT _CONFIG、// CC2640R2_LAUNCHXL_SPI_MASTER_READY * GPIOCC26XX_DIO_21 | GPIO_DO_NOT _CONFIG、// CC2640R2_LAUNCHXL_SPI_SLAVE_READY * /*输出引脚*/ GPIOCC26XX_DIO_07 | GPIO_DO_NOT _CONFIG、/*绿色 LED * GPIOCC26XX_DIO_06 | GPIO_DO_NOT _CONFIG、/*红色 LED * GPIOCC26XX_DIO_30 | GPIO_DO_NOT _CONFIG、// TMP116_EN * /* SPI 闪存 CSn * GPIOCC26XX_DIO_20 | GPIO_DO_NOT _CONFIG、 /* SD CS */ GPIOCC26XX_DIO_21 | GPIO_DO_NOT _CONFIG、 /* Sharp Display - GPIO 配置将在 Display 文件中完成*/ GPIOCC26XX_DIO_24 | GPIO_DO_NOT _CONFIG、/* SPI 芯片选择* GPIOCC26XX_DIO_22 | GPIO_DO_NOT _CONFIG、/* LCD 电源控制* GPIOCC26XX_DIO_23 | GPIO_DO_NOT _CONFIG、/* LCD 使能*/ };
据我所知、Board_init 会为所有 IO 设置配置表、并且任何未在 BoardGpioInitTable 中声明的 IO 都将设置为默认值。 之后、当调用 GPIO_init 时、会将之前的 IO 表复制到 configArray、如果引脚未与 gpioPinConfigs-table 中的"GPIO_DO_NOT CONFIG"宏进行"ORed"、则会重新配置这些引脚。 中断引脚的回调函数在 gpioCallbackFuncions 中分别按照 BaordGpioInitTable 的引脚顺序进行声明。 我用以下行动态完成了它:
GPIO_setCallback (Board_DIO22、DIO22_intFxn);
当我这样做时、程序会在我尝试配置动态回调函数后进入异常模式。
2. 在下面,当我尝试配置 IOS 动态时,您可以看到默认静态表。
BoardGpioInitTable: const PIN_Config BoardGpioInitTable[]={ CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭*/ CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭*/ CC2640R2_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效*/ CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效*/ CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MIN、/*外部闪存芯片选择* CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN、 /*通过调试器反向通道的 UART RX */ CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull、 /*通过调试器反向通道的 UART TX */ CC2640R2_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN、 /* SPI 主器件输出-从器件输入*/ CC2640R2_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN、 /* SPI 主器件输入-从器件输出*/ CC2640R2_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN、 /* SPI 时钟*/ PIN_TERMINATE }; gpioCallbackFunctions: GPIO_CallbackFxn gpioCallbackFunctions []={ 空,/*按钮1 */ 空,/*按钮2 */ 空、// CC2640R2_LAUNCHXL_SPI_MASTER_READY */ 空、// CC2640R2_LAUNCHXL_SPI_SLAVE_READY */ }; gpioPinConfigs: GPIO_PinConfig gpioPinConfigs[]={ /*输入引脚*/ GPIOCC26XX_DIO_13 | GPIO_DO_NOT _CONFIG、/*按钮1 */ GPIOCC26XX_DIO_14 | GPIO_DO_NOT _CONFIG、/*按钮2 */ GPIOCC26XX_DIO_15 | GPIO_DO_NOT _CONFIG、// CC2640R2_LAUNCHXL_SPI_MASTER_READY * GPIOCC26XX_DIO_21 | GPIO_DO_NOT _CONFIG、// CC2640R2_LAUNCHXL_SPI_SLAVE_READY * /*输出引脚*/ GPIOCC26XX_DIO_07 | GPIO_DO_NOT _CONFIG、/*绿色 LED * GPIOCC26XX_DIO_06 | GPIO_DO_NOT _CONFIG、/*红色 LED * GPIOCC26XX_DIO_30 | GPIO_DO_NOT _CONFIG、// TMP116_EN * /* SPI 闪存 CSn * GPIOCC26XX_DIO_20 | GPIO_DO_NOT _CONFIG、 /* SD CS */ GPIOCC26XX_DIO_21 | GPIO_DO_NOT _CONFIG、 /* Sharp Display - GPIO 配置将在 Display 文件中完成*/ GPIOCC26XX_DIO_24 | GPIO_DO_NOT _CONFIG、/* SPI 芯片选择* GPIOCC26XX_DIO_22 | GPIO_DO_NOT _CONFIG、/* LCD 电源控制* GPIOCC26XX_DIO_23 | GPIO_DO_NOT _CONFIG、/* LCD 使能*/ };
在下面、您可以看到动态配置、这是在我调用 Board_init 和 GPIO_init 之后完成的:
/*配置 Button 引脚*/ GPIO_setConfig (Board_DIO22、GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_INT_FALLING); /*安装按钮回调*/ GPIO_setCallback (Board_DIO22、DIO22_intFxn); //启用中断* / GPIO_enableInt (Board_DIO22);
当我这样做时、代码会运行、但不会在下降沿或上升沿中断。
我已经尝试调试代码,并使用 GPIO_getconfig()-Fxn 查看 DIO22-configuration-register 如何通过配置进行更改,如下所示:
GPIO_getconfig (Board_DIO22、&testDIO22);// testDIO22 = 00100001000000110010111101011000b GPIO_setConfig (Board_DIO22、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_INT_FALLING); GPIO_getconfig (Board_DIO22、&testDS1000001100022;/testIO1010000000b)
我看到5个低位不是"10110 = 22"、这是我所期望的。 不过、根据我的动态配置设置、上部的16个引脚是正确的。 不过、我不明白为什么位29 ="1"。
我尝试查找其他帖子、但运气不好。 我在驱动程序手册中也找不到答案。 我的问题是:
如何配置 GPIO 静态
2.如何配置 GPIO 动态模式