⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 davincihd_i2c_gpio.c

📁 用于dm6467 开发平台的uboot源码
💻 C
字号:
/*
 *  Copyright 2007 by Spectrum Digital Incorporated.
 *  All rights reserved. Property of Spectrum Digital Incorporated.
 */

/*
 *  GPIO Expander implementation
 *
 */

#include "davincihd_i2c_gpio.h"

/* ------------------------------------------------------------------------ *
 *                                                                          *
 *  _I2C_GPIO_init( )                                                       *
 *      Setup I2C GPIO                                                      *
 *                                                                          *
 * ------------------------------------------------------------------------ */
Int16 DAVINCIHD_I2C_GPIO_init( )
{
    return 0;
}

/* ------------------------------------------------------------------------ *
 *                                                                          *
 *  _I2C_GPIO_getall( id, input )                                           *
 *      Read all GPIOs in a particular group                                *
 *                                                                          *
 *      Inputs:                                                             *
 *              id     -> I2C GPIO Expander ID                              *
 *              input  -> byte                                              *
 *                                                                          *
 * ------------------------------------------------------------------------ */
Int16 DAVINCIHD_I2C_GPIO_getall( Uint16 id, Uint8 *input )
{
    Int16 retcode = DAVINCIHD_I2C_read( id, input, 1 );

    /* Pause for the I2C GPIO to reset its state machine */
    _waitusec( 50 );

	return retcode;
}

/* ------------------------------------------------------------------------ *
 *                                                                          *
 *  _I2C_GPIO_setall( id, output )                                          *
 *      Set all GPIOs in a particular group.                                *
 *                                                                          *
 *      Inputs:                                                             *
 *              id     -> I2C GPIO Expander ID                              *
 *              output -> byte                                              *
 *                                                                          *
 * ------------------------------------------------------------------------ */
Int16 DAVINCIHD_I2C_GPIO_setall( Uint16 id, Uint8 output )
{
    return DAVINCIHD_I2C_write( id, &output, 1 );
}

/* ------------------------------------------------------------------------ *
 *                                                                          *
 *  _I2C_GPIO_setOutput( id, number, output )                               *
 *      Set 1 GPIO in a particular group                                    *
 *                                                                          *
 *      Inputs:                                                             *
 *              id     -> I2C GPIO Expander ID                              *
 *              number -> GPIO PIN# [0:7]                                   *
 *              output -> [0:LOW][1:HIGH]                                   *
 *                                                                          *
 *      Returns:                                                            *
 *              0: Good                                                     *
 *             -1: Error                                                    *
 *                                                                          *
 * ------------------------------------------------------------------------ */
Int16 DAVINCIHD_I2C_GPIO_setOutput( Uint16 id, Uint8 number, Uint8 output )
{
    Uint8 gpio_state;
    Int16 retcode;

    output = ( output & 1 );
    number = ( 1 << ( number & 7 ) );

    if ( retcode = DAVINCIHD_I2C_GPIO_getall( id, &gpio_state ) )
        return retcode;

    /* Output is Low */
    if ( output == 0 )
        gpio_state = ( gpio_state & ( ~number ) );

    /* Output is High */
    else
        gpio_state = ( gpio_state | number );

    if ( retcode = DAVINCIHD_I2C_GPIO_setall( id, gpio_state ) )
        return retcode;

    return 0;
}

/* ------------------------------------------------------------------------ *
 *                                                                          *
 *  _I2C_GPIO_getInput( id, number )                                        *
 *      Get 1 GPIO in a particular group                                    *
 *                                                                          *
 *      Inputs:                                                             *
 *              id     -> I2C GPIO Expander ID                              *
 *              number -> GPIO PIN# [0:7]                                   *
 *                                                                          *
 *      Returns:                                                            *
 *              0: Input is LOW                                             *
 *              1: Input is HIGH                                            *
 *             -1: Error                                                    *
 *                                                                          *
 * ------------------------------------------------------------------------ */
Int16 DAVINCIHD_I2C_GPIO_getInput( Uint16 id, Uint8 number )
{
    Uint8 input = 0;

    if ( DAVINCIHD_I2C_GPIO_getall( id, &input ) )
        return -1;

    /* Return either 0 or 1 */
    return ( input >> ( number & 7 ) ) & 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -