/**************************************************************************//** * @file DrvI2CH.h * @version V3.00 * @brief N9H20 series I2C driver header file * * SPDX-License-Identifier: Apache-2.0 * @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved. *****************************************************************************/ #ifndef _DRVI2CH_H_ #define _DRVI2CH_H_ /*---------------------------------------------------------------------------------------------------------*/ /* Includes of system headers */ /*---------------------------------------------------------------------------------------------------------*/ #include "wbtypes.h" #include "wblib.h" #ifdef __cplusplus extern "C" { #endif /*---------------------------------------------------------------------------------------------------------*/ /* Macro, type and constant definitions */ /*---------------------------------------------------------------------------------------------------------*/ #define DRVI2CH_Ack_No 0 #define DRVI2CH_Ack_Have 1 //Error Code Definition //E_DRVI2CH_WRONG_LENGTH Invalid sequential transfer number. //E_DRVI2CH_ARBIT_LOSE Arbitration lose //E_DRVI2CH_TIME_OUT I2C time out //E_DRVI2CH_NACK Device return NACK #define E_DRVI2CH_WRONG_LENGTH I2C_ERR_ID /* Wrong length */ #define E_DRVI2CH_ARBIT_LOSE (I2C_ERR_ID | 1) /* Arbitration lose */ #define E_DRVI2CH_TIME_OUT (I2C_ERR_ID | 2) /* Time out */ #define E_DRVI2CH_NACK (I2C_ERR_ID | 3) /* Return NACK */ //typedef enum {I2C_ACK = 0x1, I2C_WRITE = 0x2, I2C_READ = 0x4, eDRVI2CH_STOP = 0x8, eDRVI2CH_START = 0x10} I2C_CMD; typedef enum { eDRVI2CH_ACK = 1, eDRVI2CH_WRITE = 2, eDRVI2CH_READ = 4, eDRVI2CH_STOP = 8, eDRVI2CH_START =0x10 } E_DRVI2CH_CMD; /*---------------------------------------------------------------------------------------------------------*/ /* Interface function declarations */ /*---------------------------------------------------------------------------------------------------------*/ //typedef void (*PFN_I2CH_TIMEDELAY)(UINT32); typedef int (*PFN_DRVI2CH_INT_CALLBACK)(UINT8*, UINT32); ERRCODE DrvI2CH_Open( UINT32 u32I2cClock ); void DrvI2CH_Close(void); void DrvI2CH_ISR(void); ERRCODE DrvI2CH_InstallCallBack( PFN_DRVI2CH_INT_CALLBACK pfnCallback, PFN_DRVI2CH_INT_CALLBACK *pfnOldCallback ); void DrvI2CH_EnableInt(void); void DrvI2CH_DisableInt(void); BOOL DrvI2CH_IsIntEnabled(void); BOOL DrvI2CH_PollInt(void); void DrvI2CH_ClearInt(void); void DrvI2CH_InitSDASCK (void); BOOL DrvI2CH_IsBusy(void); BOOL DrvI2CH_IsBusBusy(void); BOOL DrvI2CH_IsArbitLost(void); ERRCODE DrvI2CH_SetBurstCnt( UINT8 u8BurstCnt ); void DrvI2CH_SetTxData( UINT32 u32TxData ); void DrvI2CH_SendCmd( E_DRVI2CH_CMD eCmd ); BOOL DrvI2CH_IsACK(void); UINT8 DrvI2CH_GetRxData(void); //static void DrvI2CH_Delay( // UINT32 nCount //); ERRCODE DrvI2CH_WaitReady(void); ERRCODE DrvI2CH_SendStart(void); ERRCODE DrvI2CH_SendStop(void); ERRCODE DrvI2CH_WriteByte( BOOL bStart, UINT8 u8Data, BOOL bCheckAck, BOOL bStop ); ERRCODE DrvI2CH_ReadByte( BOOL bStart, PUINT8 pu8ReadData, BOOL bSendAck, BOOL bStop ); UINT32 DrvI2CH_GetVersion(void); #ifdef __cplusplus } #endif #endif /*_DRVI2CH_H_*/