Пример #1
0
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);

}
Пример #3
0
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;
}
Пример #4
0
int test_bsp_gpio_direction_get_invalid_num(void) 
{
    bsp_gpio_direction_get(GPIO_INVALID_NUM);
    return GPIO_OK;
}