Part Number:AM5708
我想在AM5708 DSP核 实现按键的轮训和按键中断功能,参考SDK的代码配置,但是功能没法实现,不清楚是不是驱动没配置好。
如下代码现象:LED输出翻转正常,两个按键检测都不工作。
/** * \filetl-led-flash.c * * \briefExample application main file. This application will toggle the led. *The led toggling will be done inside an callback function, which *will be called by Interrupt Service Routine. Interrupts are *triggered manually and no external source is used to trigger *interrupts. * * \version 1.0 */ /* XDCtools Header files */ #include <xdc/std.h> #include <xdc/cfg/global.h> #include <xdc/runtime/System.h> #include <xdc/runtime/Error.h> /* BIOS Header files */ #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> #include <stdio.h> #include <string.h> /* TI-RTOS Header files */ #include <ti/drv/gpio/GPIO.h> #include <ti/drv/gpio/soc/GPIO_soc.h> /* UART Header files */ #include <ti/drv/uart/UART.h> #include <ti/drv/uart/UART_stdio.h> #include <ti/drv/uart/test/src/UART_board.h> #include <ti/board/board.h> #include <ti/csl/soc.h> #include <ti/csl/soc/am572x/src/cslr_control_core_pad_io.h> #include <ti/board/src/evmAM572x/include/evmam572x_pinmux.h> /********************************************************************** ************************** Macros ************************************ **********************************************************************/ #define GPIO_PIN_VAL_LOW(0U) #define GPIO_PIN_VAL_HIGH(1U) #define GPIO_USER0_LED_PIN_NUM(0x04U) #define GPIO_USER0_LED_PORT_NUM(0x04)/* user-led0, gpio4_4 */ #define GPIO_USER1_LED_PIN_NUM(0x04U) #define GPIO_USER1_LED_PORT_NUM(0x05)/* user-led1, gpio5_4 */ #define GPIO_USER2_LED_PIN_NUM(0x05U) #define GPIO_USER2_LED_PORT_NUM(0x05)/* user-led2, gpio5_5 */ #define GPIO_USER_KEY3_PIN_NUM5 #define GPIO_USER_KEY3_PORT_NUM4//GPIO4_5 #define GPIO_USER_KEY4_PIN_NUM20 #define GPIO_USER_KEY4_PORT_NUM6//GPIO6_20 /********************************************************************** ************************** Internal functions ************************ **********************************************************************/ /* GPIO Driver board specific pin configuration structure */ GPIO_PinConfig gpioPinConfigs[] = { GPIO_DEVICE_CONFIG(GPIO_USER0_LED_PORT_NUM, GPIO_USER0_LED_PIN_NUM) | GPIO_CFG_OUTPUT, GPIO_DEVICE_CONFIG(GPIO_USER1_LED_PORT_NUM, GPIO_USER1_LED_PIN_NUM) | GPIO_CFG_OUTPUT,GPIO_DEVICE_CONFIG(GPIO_USER2_LED_PORT_NUM, GPIO_USER2_LED_PIN_NUM) | GPIO_CFG_OUTPUT,GPIO_DEVICE_CONFIG(GPIO_USER_KEY3_PORT_NUM, GPIO_USER_KEY3_PIN_NUM) | GPIO_CFG_INPUT,GPIO_DEVICE_CONFIG(GPIO_USER_KEY4_PORT_NUM, GPIO_USER_KEY4_PIN_NUM) | GPIO_CFG_IN_INT_RISING | GPIO_CFG_INPUT }; /* GPIO Driver call back functions */ GPIO_CallbackFxn gpioCallbackFunctions[] = {NULL,NULL,NULL,NULL,NULL }; /* GPIO Driver configuration structure */ GPIO_v1_Config GPIO_v1_config = {.pinConfigs = gpioPinConfigs,.callbacks = gpioCallbackFunctions,.numberOfPinConfigs = sizeof(gpioPinConfigs) / sizeof(GPIO_PinConfig),.numberOfCallbacks = sizeof(gpioCallbackFunctions) / sizeof(GPIO_CallbackFxn),.intPriority = 20, }; /* ON Board LED pins which are connected to GPIO pins. */ typedef enum GPIO_LED {USER_LED0 = 0,USER_LED1,USER_LED2, END }GPIO_LED; typedef enum GPIO_INPUT {USER_KEY3 = 3,USER_KEY4 = 4 }GPIO_INPUT; void print_debug(char *str) {UART_puts(str,strlen(str)); } void user_key3_cb(void) {print_debug("\n user_key3_cb \n"); } void user_key4_cb(void) {print_debug("\n user_key4_cb \n"); } void GPIO_PIN_MUX(void) {uint32_t regVal = 0;/* GPIO pinmux configuration */CSL_FINS(regVal, CONTROL_CORE_PAD_IO_PAD_VIN2A_D3_VIN2A_D3_MUXMODE, 0xEU);((CSL_padRegsOvly) CSL_MPU_CORE_PAD_IO_REGISTERS_REGS)->PAD_VIN2A_D3 = regVal;/* vin2a_d3.gpio4_4(user_led0) */CSL_FINS(regVal, CONTROL_CORE_PAD_IO_PAD_MCASP1_AXR2_MCASP1_AXR2_MUXMODE, 0xEU);((CSL_padRegsOvly) CSL_MPU_CORE_PAD_IO_REGISTERS_REGS)->PAD_MCASP1_AXR2 = regVal;/* mcasp1_axr2.gpio5_4(user_led1) */CSL_FINS(regVal, CONTROL_CORE_PAD_IO_PAD_MCASP1_AXR3_MCASP1_AXR3_MUXMODE, 0xEU);((CSL_padRegsOvly) CSL_MPU_CORE_PAD_IO_REGISTERS_REGS)->PAD_MCASP1_AXR3 = regVal;/* mcasp1_axr3.gpio5_5(user_led2) */CSL_FINS(regVal, CONTROL_CORE_PAD_IO_PAD_VIN2A_D4_VIN2A_D4_MUXMODE, 0xEU);((CSL_padRegsOvly) CSL_MPU_CORE_PAD_IO_REGISTERS_REGS)->PAD_VIN2A_D4 = regVal;/* VIN2A_D4.gpio4_5(user_key3) */CSL_FINS(regVal, CONTROL_CORE_PAD_IO_PAD_XREF_CLK3_XREF_CLK3_MUXMODE, 0xEU);((CSL_padRegsOvly) CSL_MPU_CORE_PAD_IO_REGISTERS_REGS)->PAD_XREF_CLK3 = regVal;/* XREF_CLK3.gpio6_20(user_key4) *//* GPIO4 Clock Enable */*(unsigned int*)0x4A009770 = (unsigned int)(0x00000102);/* GPIO6 Clock Enable */*(unsigned int*)0x4A009780 = (unsigned int)(0x00000102); ///* Set the callback function */ //GPIO_setCallback(USER_KEY3, user_key3_cb); ///* Enable GPIO interrupt on the specific gpio pin */ //GPIO_enableInt(USER_KEY3);/* Set the callback function */GPIO_setCallback(USER_KEY4, user_key4_cb);/* Enable GPIO interrupt on the specific gpio pin */GPIO_enableInt(USER_KEY4); } /* * ======== Board_initGPIO ======== */ static void Board_initGPIO(void) {Board_initCfg boardCfg;boardCfg = BOARD_INIT_MODULE_CLOCK | BOARD_INIT_UART_STDIO;Board_init(boardCfg); } /********************************************************************** ************************** Global Variables ************************** **********************************************************************/ /* * ======== task function ======== */ void tl_led_flash(UArg arg0, UArg arg1) {uint8_t i = 0;/* GPIO initialization */GPIO_init();GPIO_PIN_MUX();print_debug("\n GPIO Led Blink Application \n");while(1){ /* Turn on LEDs */ for ( i = 0; i < END; i++ ){ GPIO_write(i,GPIO_PIN_VAL_HIGH); } /* Keep the LEDs on for 500 ms */ Task_sleep(500); /* Turn off LEDs */ for ( i = 0; i < END; i++ ){ GPIO_write(i,GPIO_PIN_VAL_LOW); } /* Keep the LEDs off for 500 ms */ Task_sleep(500); if(GPIO_read(USER_KEY3) == 1) {print_debug("key3 is press\n"); }if(GPIO_read(USER_KEY4) == 0){print_debug("key4 is press\n");}}Task_exit(); } /* * ======== main ======== */ int main(void) {Task_Handle task;Error_Block eb;Error_init(&eb);/* Call board_init functions */Board_initGPIO(); /* create a Task, which is tl_led_flash */task = Task_create(tl_led_flash, NULL, &eb);if (task == NULL) {System_printf("Task_create() failed!\n");BIOS_exit(0);}/* Start BIOS */BIOS_start();return (0); }
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛寻求帮助,链接如下,如有答复将尽快回复您:
e2e.ti.com/…/am5708-ccs-rtos-development-key-detection-configuration-for-dsp-cores
,
Cherry Zhou:
您好,
Zaki 说:如下代码现象:LED输出翻转正常,两个按键检测都不工作。
能否分享更多信息?您这里指的按键检测是什么?