Files
RCU_BUS485_PLC_MASTER/Source/include/apt32f102_i2c.h
yanghongfeng f25132cbe3 修复开关控制组控的控制异常问题
修改PB开关状态组控处理,解决后32路的开关状态会复用上前32个回路的数据
2026-01-19 15:35:56 +08:00

250 lines
13 KiB
C

/*
******************************************************************************
* @file apt32f102_i2c.h
* @author APT AE Team
* @version V1.08
* @date 2021/06/21
******************************************************************************
*THIS SOFTWARE WHICH IS FOR ILLUSTRATIVE PURPOSES ONLY WHICH PROVIDES
*CUSTOMER WITH CODING INFORMATION REGARDING THEIR PRODUCTS.
*APT CHIP SHALL NOT BE HELD RESPONSIBILITY ADN LIABILITY FOR ANY DIRECT,
*INDIRECT DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
*SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
*CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.AND APT CHIP RESERVES
*THE RIGHT TO MAKE CHANGES IN THE SOFTWARE WITHOUT NOTIFICATION
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef _apt32f102_i2c_H
#define _apt32f102_i2c_H
/* Includes ------------------------------------------------------------------*/
#include "apt32f102.h"
#define BUFSIZE 32
/******************************************************************************
************************** I2C Structure Definition ***************************
******************************************************************************/
/**
*******************************************************************************
@brief description CSP_I2C_T and CSP_I2C_PTR
*******************************************************************************
*/
/******************************************************************************
************************** I2C Registers Definition ***************************
******************************************************************************/
/******************************************************************************
* CR : I2C Control Register
******************************************************************************/
#define I2C_MASTER_EN (0x01ul << 0) /**< I2C Master Mode */
#define I2C_MASTER_DIS (0x00ul << 0) /**< I2C Master Mode */
#define I2C_SS (0x01ul << 1) /**< I2C Standard Speed Mode */
#define I2C_FS (0x02ul << 1) /**< I2C Fast Speed Mode */
#define I2C_HS (0x03ul << 1) /**< I2C High Speed Mode */
#define I2C_10BIT_SLAVE (0x01ul << 3) /**< I2C 10bit or 7bit in Slave */
#define I2C_7BIT_SLAVE (0x00ul << 3) /**< I2C 10bit or 7bit in Slave */
#define I2C_10BIT_MASTER (0x01ul << 4) /**< I2C 10bit or 7bit in Master */
#define I2C_7BIT_MASTER (0x00ul << 4) /**< I2C 10bit or 7bit in Master */
#define I2C_RESTART_EN (0x01ul << 5) /**< I2C Restart Enable */
#define I2C_RESTART_DIS (0x00ul << 5) /**< I2C Restart Disable */
#define I2C_SLAVE_EN (0x00ul << 6) /**< I2C Slave Enable */
#define I2C_SLAVE_DIS (0x01ul << 6) /**< I2C Slave Disable */
#define I2C_STOPDET_IFADD (0x01ul << 7) /**< I2C STOPDET If Addressed */
#define I2C_STOPDET_ALS (0x00ul << 7) /**< I2C STOPDET Always */
#define I2C_TX_EMPTY_CTRL (0x01ul << 8) /**< I2C TX_EMPTY Control */
#define I2C_TX_EMPTY_DONE (0x00ul << 8) /**< I2C TX_EMPTY and Send Done */
#define I2C_RX_HOLD_CTRL (0x01ul << 9) /**< I2C Rx Hold Ctrl @FIFO Full */
#define I2C_RX_HOLD_NONE (0x00ul << 9) /**< I2C Rx Hold None @FIFO Full */
#define I2C_STOPDET_MM (0x01ul <<10) /**< I2C STOPDET only in Master */
#define I2C_BUSCLR_EN (0x01ul <<11) /**< I2C Enable Bus Clear Feature*/
#define I2C_BUSCLR_DIS (0x00ul <<11) /**< I2C Disable Bus Clear Feature*/
/******************************************************************************
* DATA_CMD : I2C Data and Command Register
******************************************************************************/
#define I2C_CMD_READ (0x01ul << 8) /**< I2C Read Command */
#define I2C_CMD_WRITE (0x00ul << 8) /**< I2C Write Command */
#define I2C_CMD_STOP (0x01ul << 9) /**< I2C Stop after this byte */
#define I2C_CMD_NONESTOP (0x00ul << 9) /**< I2C None Stop When FIFO Empty or Not */
#define I2C_CMD_RESTART0 (0x00ul <<10) /**< I2C Restart Mode0 */
#define I2C_CMD_RESTART1 (0x01ul <<10) /**< I2C Restart Mode1 */
//#define I2C_CMD_1stDATA (0x01ul <<11) /**< I2C First Data Byte */
#define I2C_DATA(val) (((val) & 0xFFul) << 0) /**< Data Writing Macro */
/*****************************************************************************
* ENABLE : I2C Enable Register
******************************************************************************/
#define I2C_ENABLE (0x01ul << 0) /**< I2C Enable */
#define I2C_DISABLE (0x00ul << 0) /**< I2C Enable */
#define I2C_ABORT (0x01ul << 1) /**< I2C Abort Transfer */
#define I2C_ABORT_OV (0x00ul << 1) /**< I2C Abort Transfer Over or No Abort */
//#define I2C_TX_CMD_BLOCK (0x01ul << 2) /**< I2C Block Transmission */
#define I2C_SDA_REC_EN (0x01ul << 3) /**< I2C Enable Stuck Recovery */
#define I2C_SDA_REC_DIS (0x00ul << 3) /**< I2C Enable Stuck Recovery */
/*****************************************************************************
* STATUS : I2C STATUS Register
******************************************************************************/
#define I2C_BUSY (0x01ul << 0) /**< I2C Activity */
#define I2C_FREE (0x00ul << 0) /**< I2C Activity */
#define I2C_TFNF (0x01ul << 1) /**< I2C Transmit FIFO Not Full */
#define I2C_TFNF_FULL (0x00ul << 1) /**< I2C Transmit FIFO Is Full */
#define I2C_TFE (0x01ul << 2) /**< I2C Transmit FIFO Empty */
#define I2C_TFE_NOT (0x00ul << 2) /**< I2C Transmit FIFO Not Empty */
#define I2C_RFNE (0x01ul << 3) /**< I2C Receive FIFO Not Empty */
#define I2C_RFNE_EMPTY (0x00ul << 3) /**< I2C Receive FIFO Is Empty */
#define I2C_RFF (0x01ul << 4) /**< I2C Receive FIFO Full */
#define I2C_MST_BUSY (0x01ul << 5) /**< I2C Master FSM Activity */
#define I2C_MST_FREE (0x00ul << 5) /**< I2C Master FSM Free */
#define I2C_SLV_BUSY (0x01ul << 6) /**< I2C Slave FSM Activity */
#define I2C_SLV_FREE (0x01ul << 6) /**< I2C Slave FSM Free */
#define I2C_REC_FREE (0x00ul << 6) /**< I2C Recovery No FAIL */
#define I2C_REC_FAIL (0x01ul << 11) /**< I2C Recovery FAIL */
/*****************************************************************************
* RISR/MISR/IMSCR/ICR : I2C Interrupt Mask/Status Register
******************************************************************************/
#define I2C_RX_UNDER (0x01ul << 0) /**< I2C Interrupt Status */
#define I2C_RX_OVER (0x01ul << 1) /**< I2C Interrupt Status */
#define I2C_RX_FULL (0x01ul << 2) /**< I2C Interrupt Status */
#define I2C_TX_OVER (0x01ul << 3) /**< I2C Interrupt Status */
#define I2C_TX_EMPTY (0x01ul << 4) /**< I2C Interrupt Status */
#define I2C_RD_REQ (0x01ul << 5) /**< I2C Interrupt Status */
#define I2C_TX_ABRT (0x01ul << 6) /**< I2C Interrupt Status */
#define I2C_RX_DONE (0x01ul << 7) /**< I2C Interrupt Status */
#define I2C_INT_BUSY (0x01ul << 8) /**< I2C Interrupt Status */
#define I2C_STOP_DET (0x01ul << 9) /**< I2C Interrupt Status */
#define I2C_START_DET (0x01ul <<10) /**< I2C Interrupt Status */
#define I2C_GEN_CALL (0x01ul <<11) /**< I2C Interrupt Status */
#define I2C_RESTART_DET (0x01ul <<12) /**< I2C Interrupt Status */
#define I2C_MST_ON_HOLD (0x01ul <<13) /**< I2C Interrupt Status */
#define I2C_SCL_SLOW (0x01ul <<14) /**< I2C Interrupt Status */
/*****************************************************************************
* SDA_HOLD/SETUP : I2C SDA hold/setup Timing Register
******************************************************************************/
#define I2C_TX_HOLD(val) (((val) & 0xFFul) << 0) /**< SDA TX Hold Delay */
#define I2C_RX_HOLD(val) (((val) & 0xFFul) <<16) /**< SDA RX Hold Delay */
#define I2C_SETUP(val) (((val) & 0xFFul) << 0) /**< SDA Setup Delay */
/*****************************************************************************
* I2C_SPKLEN : I2C Burr Interference Filter Control Register
******************************************************************************/
#define I2C_SPKLEN(val) (((val) & 0xFFul) << 0) /**<I2C Burr interference filter control register */
/*****************************************************************************
* SCL/SDA TOUT : I2C SCL/SDA Stuck Time Out
******************************************************************************/
#define I2C_SCL_TOUT(val) (((val) & 0xFFFFFFFFul) << 0) /**<I2C SCL Stuck Time Out */
#define I2C_SDA_TOUT(val) (((val) & 0xFFFFFFFFul) << 0) /**<I2C SDA Stuck Time Out */
/*****************************************************************************
* GCALL : I2C General Call Register
******************************************************************************/
#define I2C_GCALL_EN (0x01ul << 0) /**< I2C uses ACK to answer General Call */
#define I2C_GCALL_DIS (0x00ul << 0) /**< I2C does not generate a General Call interrupt */
/*****************************************************************************
* NACK : I2C Slave NACK Control Register
******************************************************************************/
#define I2C_NACK_DATA (0x01ul << 0) /**< I2C Generate a NACK after the data byte is received */
#define I2C_NACK_NORMAL (0x00ul << 0) /**< I2C Generate NACK/ACK as normal */
/**
* @brief I2C IO selection
*/
typedef enum
{
I2C_SDA_PA00= 0,
I2C_SDA_PA03 = 1,
I2C_SDA_PA07= 2,
I2C_SDA_PA013= 3,
I2C_SDA_PA014 = 4,
}I2C_SDA_TypeDef;
/**
* @brief I2C IO selection
*/
typedef enum
{
I2C_SCL_PB00 = 0,
I2C_SCL_PB02 = 1,
I2C_SCL_PA01 = 2,
I2C_SCL_PA04 = 3,
I2C_SCL_PA06 = 4,
I2C_SCL_PA015 = 5,
}I2C_SCL_TypeDef;
/**
* @brief I2C MODE
*/
typedef enum
{
STANDARD_MODE = (0x01ul << 1),
FAST_MODE=(0x02ul << 1),
}I2C_SPEEDMODE_TypeDef;
/**
* @brief I2C SLAVE BIT
*/
typedef enum
{
I2C_SLAVE_7BIT= (0x00ul << 3),
I2C_SLAVE_10BIT=(0x01ul << 3),
}I2C_SLAVEBITS_TypeDef;
/**
* @brief I2C MASTER BITS
*/
typedef enum
{
I2C_MASTRER_7BIT= (0x00ul << 4),
I2C_MASTRER_10BIT=(0x01ul << 4),
}I2C_MASTRERBITS_TypeDef;
/******************************************************************************
********************* I2C External Functions Declaration **********************
******************************************************************************/
extern void I2C_Master_CONFIG(I2C_SDA_TypeDef I2C_SDA_IO,I2C_SCL_TypeDef I2C_SCL_IO,I2C_SPEEDMODE_TypeDef SPEEDMODE,
I2C_MASTRERBITS_TypeDef MASTERBITS,U16_T I2C_MASTER_ADD,U16_T SS_SCLH,U16_T SS_SCLL);
extern void I2C_Slave_CONFIG(I2C_SDA_TypeDef I2C_SDA_IO,I2C_SCL_TypeDef I2C_SCL_IO,I2C_SPEEDMODE_TypeDef SPEEDMODE,
I2C_SLAVEBITS_TypeDef SLAVEBITS,U16_T I2C_SALVE_ADDS,U16_T SS_SCLHX,U16_T SS_SCLLX);
extern void I2C_SDA_TSETUP_THOLD_CONFIG(U8_T SDA_TSETUP , U8_T SDA_RX_THOLD , U16_T SDA_TX_THOLD);
extern void I2C_ConfigInterrupt_CMD(FunctionalStatus NewState,U32_T INT_TYPE);
extern void I2C_FIFO_TriggerData(U16_T RX_FLSEL,U16_T TX_FLSEL);
extern void I2C_Stop(void);
extern void I2C_Enable(void);
extern void I2C_Disable(void);
extern void I2C_Abort_EN(void);
extern U8_T I2C_Abort_Status(void);
extern void I2C_SDA_Recover_EN(void);
extern void I2C_SDA_Recover_DIS(void);
extern void I2C_Int_Enable(void);
extern void I2C_Int_Disable(void);
extern void I2C_WRITE_Byte(U8_T write_adds,U8_T i2c_data);
extern void I2C_WRITE_nByte(U8_T write_adds,volatile U8_T *i2c_data,U8_T NumByteToWrite);
extern U8_T I2C_READ_Byte(U8_T read_adds);
extern void I2C_READ_nByte(U8_T read_adds,volatile U8_T *i2c_data,U8_T NumByteToWrite);
extern void I2C_Slave_Receive(void);
extern void I2C_DeInit(void);
extern volatile uint8_t I2CWrBuffer[BUFSIZE];
extern volatile uint8_t I2CRdBuffer[BUFSIZE];
extern volatile U8_T f_ERROR;
extern void I2C_SLAVE_CONFIG(void);
#endif /**< apt32f102_i2c_H */
/******************* (C) COPYRIGHT 2020 APT Chip *****END OF FILE****/