📄 davincihd_i2c_gpio.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 + -