int test_bsp_gpio_set_value_invalid_value(void) { bsp_gpio_set_value(GPIO_TEST_NUM, 10); bsp_gpio_set_value(GPIO_TEST_NUM, -1); return GPIO_OK; }
void bsp_gpio_direction_output(u32 gpio, u32 value) { unsigned int gpio_base_addr = 0; unsigned int gpio_number = 0; unsigned int reg_value_old = 0; unsigned int reg_value_new = 0; if(value > 1 || gpio > GPIO_TOTAL) { gpio_print_error("para is error, gpio = %d, value = %d.\n", gpio, value); return ; } gpio_base_addr = get_gpio_base_addr(gpio); gpio_number = get_gpio_number(gpio); reg_value_old = readl(gpio_base_addr + GPIODIR); reg_value_new = (((unsigned int)0x1 << gpio_number)) | (reg_value_old); writel(reg_value_new, gpio_base_addr + GPIODIR); bsp_gpio_set_value( gpio, value); }
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; }
int test_bsp_gpio_set_value(void) { bsp_gpio_set_value(GPIO_TEST_NUM,0); if(1 == gpio_reg_get_bits(GPIO_TEST_BASEADDR,HI_GPIO_SWPORT_DR_OFFSET,GPIO_PIN_BITS)) { logMsg("Test_bsp_gpio_set_value is fail!!\n",0,0,0,0,0,0); return GPIO_ERROR; } bsp_gpio_set_value(GPIO_TEST_NUM,1); if(0 == gpio_reg_get_bits(GPIO_TEST_BASEADDR,HI_GPIO_SWPORT_DR_OFFSET,GPIO_PIN_BITS)) { logMsg("Test_bsp_gpio_set_value is fail!!\n",0,0,0,0,0,0); return GPIO_ERROR; } logMsg("Test_bsp_gpio_set_value is passed!!\n",0,0,0,0,0,0); return GPIO_OK; }
/***************************************************************************** * 函 数 名 : bsp_gpio_direction_output * * 功能描述 : 设置GPIO引脚的方向为输出,并设置该引脚默认电平值 * * 输入参数 : UINT32 gpio GPIO引脚编号 * UINT32 value 待设置电平值,即0为低电平,1为高电平 * * 返 回 值 : 无 * * 修改记录 : 2012年11月27日 *****************************************************************************/ void bsp_gpio_direction_output(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 ; } chip_num = gpio / GPIO_MAX_PINS; pin = gpio % 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_DDR_OFFSET); writel(gpio_value | ((u32)0x1 << pin), u32GpioAddr + HI_GPIO_SWPORT_DDR_OFFSET); (void)bsp_ipc_spin_unlock(IPC_SEM_GPIO); spin_unlock_irqrestore(&g_gpio_spinlock, irq_flags); bsp_gpio_set_value(gpio, value); }
int test_bsp_gpio_input_set_value(void) { bsp_gpio_set_value(GPIO_TEST_NUM, 0); return GPIO_OK; }
int test_bsp_gpio_set_value_invalid_num(void) { bsp_gpio_set_value(GPIO_INVALID_NUM,1); return GPIO_OK; }