int test_gpio_llt(void) { bsp_gpio_direction_input(GPIO_TEST_NUM); bsp_gpio_get_value(GPIO_TEST_NUM); bsp_gpio_direction_get(GPIO_TEST_NUM); bsp_gpio_direction_output(GPIO_TEST_NUM, 0); bsp_gpio_set_value(GPIO_TEST_NUM, 1); bsp_gpio_direction_get(GPIO_TEST_NUM); return GPIO_OK; }
/***************************************************************************** * 函 数 名 : bsp_gpio_set_value * * 功能描述 : 设置GPIO 引脚的电平值 * * 输入参数 : u32 gpio GPIO引脚编号 * u32 value 管脚高/低电平 * * 返 回 值 : 无 * * 修改记录 : 2012年11月27日 *****************************************************************************/ void bsp_gpio_set_value(u32 gpio,u32 value) { u32 chip_num; u32 pin; u32 u32GpioAddr = 0; u32 gpio_value = 0; unsigned long irq_flags; /* 如果GPIO 没有初始化,返回错误 */ if (GPIO_DEF_NOT_RUNNING == g_u32GpioRunning) { gpio_print_error(" GPIO is not inited.\n"); return ; } if(gpio >= GPIO_TOTAL_PINS_NUM) { gpio_print_error(" GPIO parameter error.\n"); return; } /*检测GPIO方向是否输出,如果为输入,则返回错误*/ if(0 == bsp_gpio_direction_get(gpio)) { gpio_print_error(" GPIO direction error.\n"); return; } chip_num = gpio / (u32)GPIO_MAX_PINS; pin = gpio % (u32)GPIO_MAX_PINS; if(chip_num < GPIO_MAX_BANK_NUM){ u32GpioAddr = s_u32GpioBaseAddr[chip_num]; } else{ gpio_print_error(" GPIO bank number error.\n"); return ; } spin_lock_irqsave(&g_gpio_spinlock, irq_flags); (void)bsp_ipc_spin_lock(IPC_SEM_GPIO); gpio_value = readl(u32GpioAddr + HI_GPIO_SWPORT_DR_OFFSET); if(!!value) { writel(gpio_value | ((u32)0x1 << pin), u32GpioAddr + HI_GPIO_SWPORT_DR_OFFSET); } else { writel(gpio_value & ~((u32)0x1 << pin), u32GpioAddr + HI_GPIO_SWPORT_DR_OFFSET); } (void)bsp_ipc_spin_unlock(IPC_SEM_GPIO); spin_unlock_irqrestore(&g_gpio_spinlock, irq_flags); }
int test_bsp_gpio_direction_get(void) { gpio_reg_set_bits(GPIO_TEST_BASEADDR,HI_GPIO_SWPORT_DDR_OFFSET,GPIO_PIN_BITS,1,0); if(1 == bsp_gpio_direction_get(GPIO_TEST_NUM)) { logMsg("Test_bsp_gpio_direction_get is fail!!\n",0,0,0,0,0,0); return GPIO_ERROR; } gpio_reg_set_bits(GPIO_TEST_BASEADDR,HI_GPIO_SWPORT_DDR_OFFSET,GPIO_PIN_BITS,1,1); if(0 == bsp_gpio_direction_get(GPIO_TEST_NUM)) { logMsg("Test_bsp_gpio_direction_get is fail!!\n",0,0,0,0,0,0); return GPIO_ERROR; } logMsg("Test_bsp_gpio_direction_get is passed!!\n",0,0,0,0,0,0); return GPIO_OK; }
int test_bsp_gpio_direction_get_invalid_num(void) { bsp_gpio_direction_get(GPIO_INVALID_NUM); return GPIO_OK; }