Commit 7a571ddf authored by 时昊's avatar 时昊

🎉 init:增加光感功能,增加模拟iic

parent 46899d54
...@@ -51,6 +51,7 @@ void Power_KL30_Init ( void ) ...@@ -51,6 +51,7 @@ void Power_KL30_Init ( void )
BU98R10_Init(); BU98R10_Init();
Data_User_Mileage_KL30Init(); Data_User_Mileage_KL30Init();
BU2703_Senser_Init();
} }
...@@ -200,10 +201,11 @@ void Power_Wakeup_Init ( void ) ...@@ -200,10 +201,11 @@ void Power_Wakeup_Init ( void )
Common_DataInit(); Common_DataInit();
BU98R10_Init(); BU98R10_Init();
APP_CAN_Init(); APP_CAN_Init();
Data_User_Mileage_WakeupInit(); Data_User_Mileage_WakeupInit();
BU2703_Senser_Init();
} }
...@@ -238,7 +240,7 @@ void Power_IG_ON_Init(void) ...@@ -238,7 +240,7 @@ void Power_IG_ON_Init(void)
Common_Set_IG_Sts(COMMON_POWER_ON); Common_Set_IG_Sts(COMMON_POWER_ON);
// UART2_Init(115200); // UART2_Init(115200);
BU2703_Senser_Init();
......
#ifndef EMULATED_EEPROM_H__
#define EMULATED_EEPROM_H__
typedef enum
{
EEPROM_STAT_BLANK = 0U,
EEPROM_STAT_ACTIVE,
EEPROM_STAT_ERROR,
}EEPROM_Block_Status_en_t;
typedef enum
{
EEPROM_RW_PASS = 0,
EEPROM_RW_FAIL,
}EEPROM_RW_Result_en_t;
typedef enum
{
EEPROM_STAT_IDLE = 0,
EEPROM_STAT_BUSY,
}EEPROM_Status_en_t;
/****************************************************************************
* !!! The following code should be generated by configuration tool !!! *
****************************************************************************/
enum g_enEEPROMBlockName
{
EEPROM_BLOCK_UDS_FLAG = 0U,
EEPROM_BLOCK_UDS_S27 = 1U,
EEPROM_BLOCK_UDS_S2E0 = 2U,
EEPROM_BLOCK_UDS_S2E = 3U,
EEPROM_BLOCK_UDS_CONFIG = 4U,
EEPROM_BLOCK_UDS_DTC = 5U,
EEPROM_BLOCK_ODO = 6U,
EEPROM_BLOCK_ODO_STAMP = 7U,
EEPROM_BLOCK_TRIP_STAMP = 8U,
EEPROM_BLOCK_SERVICE_INFO = 9U,
EEPROM_BLOCK_UE_INFO = 10U,
};
#define EEPROM_BLOCK_UDS_FLAG_SIZE (16U)/*Life:20.0W*/
#define EEPROM_BLOCK_UDS_S27_SIZE (16U)/*Life:20.0W*/
#define EEPROM_BLOCK_UDS_S2E0_SIZE (216U)/*Life:20.0W*/
#define EEPROM_BLOCK_UDS_S2E_SIZE (216U)/*Life:20.0W*/
#define EEPROM_BLOCK_UDS_CONFIG_SIZE (40U)/*Life:20.0W*/
#define EEPROM_BLOCK_UDS_DTC_SIZE (76U)/*Life:20.0W*/
#define EEPROM_BLOCK_ODO_SIZE (4U)/*Life:1000.0W*/
#define EEPROM_BLOCK_ODO_STAMP_SIZE (8U)/*Life:1000.0W*/
#define EEPROM_BLOCK_TRIP_STAMP_SIZE (16U)/*Life:1000.0W*/
#define EEPROM_BLOCK_SERVICE_INFO_SIZE (56U)/*Life:20.0W*/
#define EEPROM_BLOCK_UE_INFO_SIZE (124U)/*Life:100.0W*/
#define EEPROM_TOTAL_BLOCK_NUM (11U)
/****************************************************************************
* !!! End of code generation !!! *
****************************************************************************/
extern void EEPROM_Init(void);
extern EEPROM_Status_en_t EEPROM_Get_Status(void);
extern EEPROM_Block_Status_en_t EEPROM_Get_Block_Status(uint16_t u16BlockID);
extern EEPROM_RW_Result_en_t EEPROM_Read_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len);
extern EEPROM_RW_Result_en_t EEPROM_Write_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len);
#endif
#ifndef EMULATED_EEPROM_ACCESS_H__
#define EMULATED_EEPROM_ACCESS_H__
typedef struct
{
uint32_t u32StartAddr;
uint32_t u32EndAddr;
uint32_t u32DataSize;
uint32_t* pu32DataBuffer;
}EEPROM_Block_st_t;
typedef struct
{
uint8_t u8Status;
uint8_t u8SectorOffset;
uint16_t u16SectorSize;
uint32_t u32BaseAddr;
uint16_t u16Index;
uint16_t u16RecordNum;
uint16_t u16MaxRecordNum;
uint16_t u16BlockSize;
uint32_t* pu32Data;
}EEPROM_Block_Access_st_t;
typedef void (*EEPROM_Mem_Erase_Func_ptr_t) (uint32_t, uint32_t);
typedef uint32_t (*EEPROM_Mem_Blank_Chk_Func_ptr_t) (uint32_t, uint32_t);
typedef void (*EEPROM_Mem_Read_Func_ptr_t) (uint32_t, uint32_t*, uint32_t);
typedef void (*EEPROM_Mem_Write_Func_ptr_t) (uint32_t, uint32_t*, uint32_t);
typedef struct
{
EEPROM_Mem_Erase_Func_ptr_t pfnMemErase;
EEPROM_Mem_Blank_Chk_Func_ptr_t pfnMemBlankChk;
EEPROM_Mem_Read_Func_ptr_t pfnMemRead;
EEPROM_Mem_Write_Func_ptr_t pfnMemWrite;
}EEPROM_Media_Access_st_t;
#define EEPROM_BLOCK_BLANK (0U)
#define EEPROM_BLOCK_ACTIVE (1U)
#define EEPROM_BLOCK_ERROR (2U)
#define EEPROM_BLOCK_CTRL_BYTE_SIZE (8U)
extern void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
EEPROM_Block_Access_st_t * pstBlockAccess,
EEPROM_Media_Access_st_t * pstMediaAccess,
uint16_t u16BlockNum);
extern uint8_t EEPROM_Access_Busy(void);
extern uint8_t EEPROM_Block_Access_Status(uint16_t u16BlockID);
extern uint8_t EEPROM_Read_Block_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len);
extern uint8_t EEPROM_Write_Block_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len);
extern void EEPROM_Mem_Access_Complete_Callback(void);
#endif
#include "common.h"
#define IIC_WaitOverTime 50
/******************************************************************************
引脚定义
******************************************************************************/
#define SCL_LED_DRIVER_PORT PORT6
#define SCL_LED_DRIVER_PIN PIN2
#define SDA_LED_DRIVER_PORT PORT6
#define SDA_LED_DRIVER_PIN PIN3
/******************************************************************************
函数声明
******************************************************************************/
extern void Simulated_IIC_2_Init(void);
extern void bsp_IIC_delay(uint32_t time);
extern void bsp_IIC_Start(void);
extern void bsp_IIC_Stop(void);
extern void bsp_IIC_NACK(void);
extern void bsp_IIC_ACK(void);
extern void bsp_IIC_SendByte(uint8_t Data);
extern uint8_t bsp_IIC_ReadByte(void);
extern uint8_t bsp_IIC_WaitAck(void);
extern void Simulated_Release_SCL(void);
extern void bsp_IIC_nop( void );
/******************************************************************************
文 件 名:Simulated_IIC_Master.h
功能描述:IO端口模拟的IIC(I2C)主机函数库头文件
作 者:张暄
版 本:V1.0
日 期:2016.12.21
******************************************************************************/
#ifndef _SIMULATED_IIC_MASTER_H_
#define _SIMULATED_IIC_MASTER_H_
#include "common.h"
/******************************************************************************
1us延时校准
******************************************************************************/
#define IIC_FREQ_CALIBRATION 4
/******************************************************************************
确认信号
******************************************************************************/
#define IIC_ACK 0 //肯定应答
#define IIC_NAK 1 //否定应答
#define IIC_INVALID_ACK 2 //无效的应答信号(应答信号还未收到)
/******************************************************************************
函数声明
******************************************************************************/
void LtDet_IIC_Init(void);
void LtDet_IIC_Start(void);
void LtDet_IIC_Stop(void);
void LtDet_IIC_Transmit_Data(uint8_t Data);
uint8_t LtDet_IIC_Receive_Data(void);
void LtDet_IIC_Transmit_ACK(uint8_t ACK);
uint8_t LtDet_IIC_Receive_ACK(void);
void LtDet_IIC_Delay(void);
#endif
#ifndef __BSP_BU27030_H_
#define __BSP_BU27030_H_
#include "common.h"
void BU2703_Read_Datas(void );
uint16_t BU2703_Get_Data1(void );
void BU2703_Senser_Init(void );
void LIGHT_IIC_Write_Data(uint8_t devAddr, uint8_t len, uint8_t *Data);
uint8_t LIGHT_IIC_Read_Byte(uint8_t devAddr, uint8_t addr2, uint8_t *pData);
void App_SortNWord_u16(uint16_t *SortData,uint8_t len);
void App_SwapWord_u16(uint16_t *pData1,uint16_t *pData2);
#endif
#include "r_typedefs.h"
#include "Internal_Flash.h"
#include "Emulated_EEPROM.h"
#include "Emulated_EEPROM_Access.h"
/****************************************************************************
* !!! The following code should be generated by configuration tool !!! *
****************************************************************************/
#define EEPROM_BLOCK0_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_FLAG_SIZE)
uint32_t g_u32EEPROMBlock0Buffer[EEPROM_BLOCK0_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK1_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_S27_SIZE)
uint32_t g_u32EEPROMBlock1Buffer[EEPROM_BLOCK1_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK2_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_S2E0_SIZE)
uint32_t g_u32EEPROMBlock2Buffer[EEPROM_BLOCK2_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK3_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_S2E_SIZE)
uint32_t g_u32EEPROMBlock3Buffer[EEPROM_BLOCK3_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK4_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_CONFIG_SIZE)
uint32_t g_u32EEPROMBlock4Buffer[EEPROM_BLOCK4_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK5_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UDS_DTC_SIZE)
uint32_t g_u32EEPROMBlock5Buffer[EEPROM_BLOCK5_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK6_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_ODO_SIZE)
uint32_t g_u32EEPROMBlock6Buffer[EEPROM_BLOCK6_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK7_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_ODO_STAMP_SIZE)
uint32_t g_u32EEPROMBlock7Buffer[EEPROM_BLOCK7_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK8_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_TRIP_STAMP_SIZE)
uint32_t g_u32EEPROMBlock8Buffer[EEPROM_BLOCK8_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK9_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_SERVICE_INFO_SIZE)
uint32_t g_u32EEPROMBlock9Buffer[EEPROM_BLOCK9_BUFFER_SIZE / 4U];
#define EEPROM_BLOCK10_BUFFER_SIZE (EEPROM_BLOCK_CTRL_BYTE_SIZE + EEPROM_BLOCK_UE_INFO_SIZE)
uint32_t g_u32EEPROMBlock10Buffer[EEPROM_BLOCK10_BUFFER_SIZE / 4U];
static const EEPROM_Block_st_t g_stEEPROMBlockTable[] =
{
/* u32StartAddr u32EndAddr u32DataSize pu32DataBuffer */
{0xFF200000UL, 0xFF20007FUL, EEPROM_BLOCK0_BUFFER_SIZE, g_u32EEPROMBlock0Buffer,},
{0xFF200080UL, 0xFF2000FFUL, EEPROM_BLOCK1_BUFFER_SIZE, g_u32EEPROMBlock1Buffer,},
{0xFF200100UL, 0xFF2002FFUL, EEPROM_BLOCK2_BUFFER_SIZE, g_u32EEPROMBlock2Buffer,},
{0xFF200300UL, 0xFF2004FFUL, EEPROM_BLOCK3_BUFFER_SIZE, g_u32EEPROMBlock3Buffer,},
{0xFF200500UL, 0xFF20057FUL, EEPROM_BLOCK4_BUFFER_SIZE, g_u32EEPROMBlock4Buffer,},
{0xFF200580UL, 0xFF20067FUL, EEPROM_BLOCK5_BUFFER_SIZE, g_u32EEPROMBlock5Buffer,},
{0xFF200680UL, 0xFF200A7FUL, EEPROM_BLOCK6_BUFFER_SIZE, g_u32EEPROMBlock6Buffer,},
{0xFF200A80UL, 0xFF200F7FUL, EEPROM_BLOCK7_BUFFER_SIZE, g_u32EEPROMBlock7Buffer,},
{0xFF200F80UL, 0xFF20197FUL, EEPROM_BLOCK8_BUFFER_SIZE, g_u32EEPROMBlock8Buffer,},
{0xFF201980UL, 0xFF2019FFUL, EEPROM_BLOCK9_BUFFER_SIZE, g_u32EEPROMBlock9Buffer,},
{0xFF201A00UL, 0xFF201FFFUL, EEPROM_BLOCK10_BUFFER_SIZE, g_u32EEPROMBlock10Buffer,},
};
/****************************************************************************
* !!! End of code generation !!! *
****************************************************************************/
EEPROM_Block_Access_st_t g_stEEPROMBlockAccess[EEPROM_TOTAL_BLOCK_NUM];
void EEPROM_Init(void)
{
EEPROM_Media_Access_st_t stFlashAccessFunc;
stFlashAccessFunc.pfnMemErase = Int_Data_Flash_Erase;
stFlashAccessFunc.pfnMemBlankChk = Int_Data_Flash_Blank_Check;
stFlashAccessFunc.pfnMemRead = Int_Data_Flash_Read;
stFlashAccessFunc.pfnMemWrite = Int_Data_Flash_Write;
Int_Data_Flash_Register_P_E_Complete_Cb(EEPROM_Mem_Access_Complete_Callback);
EEPROM_Access_Init( g_stEEPROMBlockTable,
g_stEEPROMBlockAccess,
&stFlashAccessFunc,
EEPROM_TOTAL_BLOCK_NUM);
}
EEPROM_Status_en_t EEPROM_Get_Status(void)
{
EEPROM_Status_en_t enStatus;
if(EEPROM_Access_Busy())
{
enStatus = EEPROM_STAT_BUSY;
}
else
{
enStatus = EEPROM_STAT_IDLE;
}
return enStatus;
}
EEPROM_Block_Status_en_t EEPROM_Get_Block_Status(uint16_t u16BlockID)
{
uint8_t u8BlockStatus;
EEPROM_Block_Status_en_t enStatus;
u8BlockStatus = EEPROM_Block_Access_Status(u16BlockID);
if (u8BlockStatus == EEPROM_BLOCK_BLANK)
{
enStatus = EEPROM_STAT_BLANK;
}
else if (u8BlockStatus == EEPROM_BLOCK_ACTIVE)
{
enStatus = EEPROM_STAT_ACTIVE;
}
else
{
enStatus = EEPROM_STAT_ERROR;
}
return enStatus;
}
EEPROM_RW_Result_en_t EEPROM_Read_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len)
{
uint8_t u8Error;
EEPROM_RW_Result_en_t enResult;
u8Error = EEPROM_Read_Block_Data(u16BlockID, u32Data, u16Len);
if (u8Error)
{
enResult = EEPROM_RW_FAIL;
}
else
{
enResult = EEPROM_RW_PASS;
}
return enResult;
}
EEPROM_RW_Result_en_t EEPROM_Write_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len)
{
uint8_t u8Error;
EEPROM_RW_Result_en_t enResult;
u8Error = EEPROM_Write_Block_Data(u16BlockID, u32Data, u16Len);
if (u8Error)
{
enResult = EEPROM_RW_FAIL;
}
else
{
enResult = EEPROM_RW_PASS;
}
return enResult;
}
#include "stddef.h"
#include "stdint.h"
#include "Emulated_EEPROM_Access.h"
typedef union
{
uint32_t u32Word[1U];
struct
{
uint16_t u16Index;
uint16_t u16IndexInv;
}stField;
}EEPROM_Ctrl_Data_un_t;
typedef struct
{
uint8_t u8State;
uint16_t u16BlockNum;
uint16_t u16ProgLen;
uint32_t u32ProgAddr;
uint32_t* pu32ProgData;
}EEPROM_Access_Ctrl_st_t;
#define EEPROM_BLANK_CHECK_RECORD_NUM (3U)
#define EEPROM_OVER_SEARCH_RECORD_NUM (3U)
#define EEPROM_WR_STATE_IDLE (0U)
#define EEPROM_WR_STATE_ERASE (1U)
#define EEPROM_WR_STATE_PROG (2U)
// --------------------------------------------------------------
// CRC16计算方法1:使用2个256长度的校验表
// --------------------------------------------------------------
static const uint8_t g_u8EEPROMCRCTableH[] =
{
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x00U, 0xC1U, 0x81U, 0x40U, 0x01U, 0xC0U, 0x80U, 0x41U,
0x01U, 0xC0U, 0x80U, 0x41U, 0x00U, 0xC1U, 0x81U, 0x40U,
};
static const uint8_t g_u8EEPROMCRCTableL[] =
{
0x00U, 0xC0U, 0xC1U, 0x01U, 0xC3U, 0x03U, 0x02U, 0xC2U,
0xC6U, 0x06U, 0x07U, 0xC7U, 0x05U, 0xC5U, 0xC4U, 0x04U,
0xCCU, 0x0CU, 0x0DU, 0xCDU, 0x0FU, 0xCFU, 0xCEU, 0x0EU,
0x0AU, 0xCAU, 0xCBU, 0x0BU, 0xC9U, 0x09U, 0x08U, 0xC8U,
0xD8U, 0x18U, 0x19U, 0xD9U, 0x1BU, 0xDBU, 0xDAU, 0x1AU,
0x1EU, 0xDEU, 0xDFU, 0x1FU, 0xDDU, 0x1DU, 0x1CU, 0xDCU,
0x14U, 0xD4U, 0xD5U, 0x15U, 0xD7U, 0x17U, 0x16U, 0xD6U,
0xD2U, 0x12U, 0x13U, 0xD3U, 0x11U, 0xD1U, 0xD0U, 0x10U,
0xF0U, 0x30U, 0x31U, 0xF1U, 0x33U, 0xF3U, 0xF2U, 0x32U,
0x36U, 0xF6U, 0xF7U, 0x37U, 0xF5U, 0x35U, 0x34U, 0xF4U,
0x3CU, 0xFCU, 0xFDU, 0x3DU, 0xFFU, 0x3FU, 0x3EU, 0xFEU,
0xFAU, 0x3AU, 0x3BU, 0xFBU, 0x39U, 0xF9U, 0xF8U, 0x38U,
0x28U, 0xE8U, 0xE9U, 0x29U, 0xEBU, 0x2BU, 0x2AU, 0xEAU,
0xEEU, 0x2EU, 0x2FU, 0xEFU, 0x2DU, 0xEDU, 0xECU, 0x2CU,
0xE4U, 0x24U, 0x25U, 0xE5U, 0x27U, 0xE7U, 0xE6U, 0x26U,
0x22U, 0xE2U, 0xE3U, 0x23U, 0xE1U, 0x21U, 0x20U, 0xE0U,
0xA0U, 0x60U, 0x61U, 0xA1U, 0x63U, 0xA3U, 0xA2U, 0x62U,
0x66U, 0xA6U, 0xA7U, 0x67U, 0xA5U, 0x65U, 0x64U, 0xA4U,
0x6CU, 0xACU, 0xADU, 0x6DU, 0xAFU, 0x6FU, 0x6EU, 0xAEU,
0xAAU, 0x6AU, 0x6BU, 0xABU, 0x69U, 0xA9U, 0xA8U, 0x68U,
0x78U, 0xB8U, 0xB9U, 0x79U, 0xBBU, 0x7BU, 0x7AU, 0xBAU,
0xBEU, 0x7EU, 0x7FU, 0xBFU, 0x7DU, 0xBDU, 0xBCU, 0x7CU,
0xB4U, 0x74U, 0x75U, 0xB5U, 0x77U, 0xB7U, 0xB6U, 0x76U,
0x72U, 0xB2U, 0xB3U, 0x73U, 0xB1U, 0x71U, 0x70U, 0xB0U,
0x50U, 0x90U, 0x91U, 0x51U, 0x93U, 0x53U, 0x52U, 0x92U,
0x96U, 0x56U, 0x57U, 0x97U, 0x55U, 0x95U, 0x94U, 0x54U,
0x9CU, 0x5CU, 0x5DU, 0x9DU, 0x5FU, 0x9FU, 0x9EU, 0x5EU,
0x5AU, 0x9AU, 0x9BU, 0x5BU, 0x99U, 0x59U, 0x58U, 0x98U,
0x88U, 0x48U, 0x49U, 0x89U, 0x4BU, 0x8BU, 0x8AU, 0x4AU,
0x4EU, 0x8EU, 0x8FU, 0x4FU, 0x8DU, 0x4DU, 0x4CU, 0x8CU,
0x44U, 0x84U, 0x85U, 0x45U, 0x87U, 0x47U, 0x46U, 0x86U,
0x82U, 0x42U, 0x43U, 0x83U, 0x41U, 0x81U, 0x80U, 0x40U,
};
static uint16_t EEPROM_CRC_Calc(uint32_t * pu32Data, uint16_t u16Len);
EEPROM_Access_Ctrl_st_t g_stEEPROMAccess;
EEPROM_Block_Access_st_t * g_pstEEPROMBlock;
EEPROM_Mem_Erase_Func_ptr_t g_pfnEEPROMMemErase;
EEPROM_Mem_Blank_Chk_Func_ptr_t g_pfnEEPROMMemBlankCheck;
EEPROM_Mem_Read_Func_ptr_t g_pfnEEPROMMemRead;
EEPROM_Mem_Write_Func_ptr_t g_pfnEEPROMMemWrite;
void EEPROM_Access_Init(const EEPROM_Block_st_t * pstBlockTable,
EEPROM_Block_Access_st_t * pstBlockAccess,
EEPROM_Media_Access_st_t * pstMediaAccess,
uint16_t u16BlockNum)
{
uint16_t i;
uint8_t u8Loop;
uint8_t u8Ready;
uint16_t u16Index;
uint16_t u16IndexBkup;
uint16_t u16RecordNum;
uint16_t u16MaxRecordNum[2U];
uint16_t u16WordNum;
uint16_t u16Result;
uint32_t u32DataAddr;
uint32_t u32DataAddrBase;
uint32_t u32DataAddrEnd;
EEPROM_Ctrl_Data_un_t unCtrlData;
if ((pstBlockTable != NULL) && (pstBlockAccess != NULL) &&\
(pstMediaAccess != NULL) && (u16BlockNum != 0U))
{
/*** Step 1 : Setup media(data flash) access functions ***/
g_pfnEEPROMMemErase = pstMediaAccess->pfnMemErase;
g_pfnEEPROMMemBlankCheck = pstMediaAccess->pfnMemBlankChk;
g_pfnEEPROMMemRead = pstMediaAccess->pfnMemRead;
g_pfnEEPROMMemWrite = pstMediaAccess->pfnMemWrite;
/*** Step 2 : Generate flash read / write control data ***/
g_stEEPROMAccess.u8State = EEPROM_WR_STATE_IDLE;
g_stEEPROMAccess.u16BlockNum = u16BlockNum;
g_pstEEPROMBlock = pstBlockAccess;
for (i = 0U; i < g_stEEPROMAccess.u16BlockNum; i++)
{
u32DataAddr = pstBlockTable[i].u32EndAddr - pstBlockTable[i].u32StartAddr + 1UL;
g_pstEEPROMBlock[i].u8Status = EEPROM_BLOCK_BLANK;
g_pstEEPROMBlock[i].u32BaseAddr = pstBlockTable[i].u32StartAddr;
g_pstEEPROMBlock[i].u16SectorSize = (uint16_t)(u32DataAddr / 2UL);
g_pstEEPROMBlock[i].u8SectorOffset = 0U;
g_pstEEPROMBlock[i].u16Index = 0U;
g_pstEEPROMBlock[i].u16BlockSize = (uint16_t)(pstBlockTable[i].u32DataSize);
g_pstEEPROMBlock[i].u16MaxRecordNum = g_pstEEPROMBlock[i].u16SectorSize / g_pstEEPROMBlock[i].u16BlockSize;
g_pstEEPROMBlock[i].u16RecordNum = 0U;
g_pstEEPROMBlock[i].pu32Data = pstBlockTable[i].pu32DataBuffer;
}
/*** Step 3 : Blank check and find start record ***/
for (i = 0U; i < g_stEEPROMAccess.u16BlockNum; i++)
{
/***
Step 3.1 Blank check and find start record
- Check if the logic data block related memory is blank.
- Then find out which logic sector contains the most recent record.
- The found sector will define the starting search point of step 3.2.
***/
/* Search sector +0 */
u32DataAddrBase = g_pstEEPROMBlock[i].u32BaseAddr;
u32DataAddrEnd = u32DataAddrBase + (uint32_t)(g_pstEEPROMBlock[i].u16SectorSize) - 1UL;
u32DataAddr = g_pfnEEPROMMemBlankCheck(u32DataAddrBase, u32DataAddrEnd);
if ((u32DataAddr == 0x00000000UL) || (u32DataAddr == 0xFFFFFFFFUL))
{
u8Loop = 0U;
u16MaxRecordNum[0U] = 0U;
}
else
{
u8Loop = 1U;
u16MaxRecordNum[0U] = (uint16_t)u32DataAddr / g_pstEEPROMBlock[i].u16BlockSize;
}
u16RecordNum = 0U;
u8Ready = 0U;
while (u8Loop)
{
/* Fetch block control data */
u32DataAddr = u32DataAddrBase + (uint32_t)u16RecordNum * (uint32_t)g_pstEEPROMBlock[i].u16BlockSize;
g_pfnEEPROMMemRead(u32DataAddr, unCtrlData.u32Word, 1UL);
if (unCtrlData.stField.u16Index + unCtrlData.stField.u16IndexInv == 0xFFFFU)
{
u8Loop = 0U;
u8Ready = 1U;
g_pstEEPROMBlock[i].u8Status = EEPROM_BLOCK_ACTIVE;
g_pstEEPROMBlock[i].u8SectorOffset = 0U;
g_pstEEPROMBlock[i].u16RecordNum = u16RecordNum;
g_pstEEPROMBlock[i].u16Index = unCtrlData.stField.u16Index;
u16IndexBkup = unCtrlData.stField.u16Index;
}
else
{
u16RecordNum++;
if ((u16RecordNum >= u16MaxRecordNum[0U]) || \
(u16RecordNum >= EEPROM_BLANK_CHECK_RECORD_NUM))
{
u8Loop = 0U;
}
}
}
/* Search sector +1 */
u32DataAddrBase += (uint32_t)(g_pstEEPROMBlock[i].u16SectorSize);
u32DataAddrEnd += (uint32_t)(g_pstEEPROMBlock[i].u16SectorSize);
u32DataAddr = g_pfnEEPROMMemBlankCheck(u32DataAddrBase, u32DataAddrEnd);
if ((u32DataAddr == 0x00000000UL) || (u32DataAddr == 0xFFFFFFFFUL))
{
u8Loop = 0U;
u16MaxRecordNum[1U] = 0U;
}
else
{
u8Loop = 1U;
u16MaxRecordNum[1U] = (uint16_t)u32DataAddr / g_pstEEPROMBlock[i].u16BlockSize;
}
u16RecordNum = 0U;
while (u8Loop)
{
/* Fetch block control data */
u32DataAddr = u32DataAddrBase + (uint32_t)u16RecordNum * (uint32_t)g_pstEEPROMBlock[i].u16BlockSize;
g_pfnEEPROMMemRead(u32DataAddr, unCtrlData.u32Word, 1UL);
if (unCtrlData.stField.u16Index + unCtrlData.stField.u16IndexInv == 0xFFFFU)
{
u8Loop = 0U;
if (u8Ready == 0U)
{
u8Ready = 1U;
g_pstEEPROMBlock[i].u8Status = EEPROM_BLOCK_ACTIVE;
g_pstEEPROMBlock[i].u8SectorOffset = 1U;
g_pstEEPROMBlock[i].u16RecordNum = u16RecordNum;
g_pstEEPROMBlock[i].u16Index = unCtrlData.stField.u16Index;
u16IndexBkup = unCtrlData.stField.u16Index;
}
else
{
if (unCtrlData.stField.u16Index >= u16IndexBkup)
{
u16Index = unCtrlData.stField.u16Index - u16IndexBkup;
}
else
{
u16Index = unCtrlData.stField.u16Index + (0xFFFFU - u16IndexBkup) + 1U;
}
if (u16Index < g_pstEEPROMBlock[i].u16MaxRecordNum + EEPROM_BLANK_CHECK_RECORD_NUM)
{
g_pstEEPROMBlock[i].u8SectorOffset = 1U;
g_pstEEPROMBlock[i].u16RecordNum = u16RecordNum;
g_pstEEPROMBlock[i].u16Index = unCtrlData.stField.u16Index;
}
}
}
else
{
u16RecordNum++;
if ((u16RecordNum >= u16MaxRecordNum[1U]) || \
(u16RecordNum >= EEPROM_BLANK_CHECK_RECORD_NUM))
{
u8Loop = 0U;
}
}
}
/***
Step 3.2 Search for the most recent record and load data
- Find the last record's address
- Load data form the address
***/
if (g_pstEEPROMBlock[i].u8Status == EEPROM_BLOCK_ACTIVE)
{
/* Find the last record by index */
u32DataAddrBase = g_pstEEPROMBlock[i].u32BaseAddr;
u32DataAddrBase += (uint32_t)(g_pstEEPROMBlock[i].u16SectorSize * (uint16_t)g_pstEEPROMBlock[i].u8SectorOffset);
u16Index = g_pstEEPROMBlock[i].u16Index;
u16RecordNum = g_pstEEPROMBlock[i].u16RecordNum;
u8Loop = 1U;
while (u8Loop)
{
u16RecordNum++;
u16Index++;
if ((u16RecordNum >= u16MaxRecordNum[g_pstEEPROMBlock[i].u8SectorOffset]) || \
(u16RecordNum - g_pstEEPROMBlock[i].u16RecordNum >= EEPROM_OVER_SEARCH_RECORD_NUM))
{
u8Loop = 0U;
}
else
{
/* Fetch block control data */
u32DataAddr = u32DataAddrBase + (uint32_t)u16RecordNum * (uint32_t)g_pstEEPROMBlock[i].u16BlockSize;
g_pfnEEPROMMemRead(u32DataAddr, unCtrlData.u32Word, 1UL);
if (unCtrlData.stField.u16Index + unCtrlData.stField.u16IndexInv == 0xFFFFU)
{
if (unCtrlData.stField.u16Index == u16Index)
{
g_pstEEPROMBlock[i].u16RecordNum = u16RecordNum;
g_pstEEPROMBlock[i].u16Index = unCtrlData.stField.u16Index;
}
}
}
}
/* Load data */
u16RecordNum = g_pstEEPROMBlock[i].u16RecordNum;
u16Index = g_pstEEPROMBlock[i].u16Index;
u16IndexBkup = u16Index;
u8Loop = 1U;
do
{
u32DataAddr = u32DataAddrBase + (uint32_t)u16RecordNum * (uint32_t)g_pstEEPROMBlock[i].u16BlockSize;
g_pfnEEPROMMemRead(u32DataAddr, unCtrlData.u32Word, 1UL);
if (unCtrlData.stField.u16Index + unCtrlData.stField.u16IndexInv == 0xFFFFU)
{
if (u16Index == unCtrlData.stField.u16Index)
{
u16IndexBkup = u16Index;
u16WordNum = g_pstEEPROMBlock[i].u16BlockSize / 4U;
/* Load data */
g_pfnEEPROMMemRead(u32DataAddr, g_pstEEPROMBlock[i].pu32Data, (uint32_t)u16WordNum);
u16Result = EEPROM_CRC_Calc(g_pstEEPROMBlock[i].pu32Data, u16WordNum - 1U);
if ((uint16_t)(g_pstEEPROMBlock[i].pu32Data[u16WordNum - 1U]) == u16Result)
{
u8Loop = 0U;
}
}
}
if (u8Loop) /* CRC check fail */
{
u16Index--; /* Go to previous record */
if (u16IndexBkup >= u16Index)
{
u16Result = u16IndexBkup - u16Index;
}
else
{
u16Result = u16IndexBkup + (0xFFFFU - u16Index) + 1U;
}
if ((u16Result <= u16MaxRecordNum[0U] + u16MaxRecordNum[1U]) &&\
(u16Result <= EEPROM_OVER_SEARCH_RECORD_NUM))
{
if (u16RecordNum == 0U) /* Cross sector access */
{
if (g_pstEEPROMBlock[i].u8SectorOffset)
{
u32DataAddrBase -= (uint32_t)g_pstEEPROMBlock[i].u16BlockSize;
u16RecordNum = u16MaxRecordNum[0U];
if (u16RecordNum == 0U)
{
u8Loop = 0U;
g_pstEEPROMBlock[i].u8Status = EEPROM_BLOCK_ERROR;
}
else
{
u16RecordNum -= 1U;
}
}
else
{
u32DataAddrBase += g_pstEEPROMBlock[i].u16BlockSize;
u16RecordNum = u16MaxRecordNum[1U];
if (u16RecordNum == 0U)
{
u8Loop = 0U;
g_pstEEPROMBlock[i].u8Status = EEPROM_BLOCK_ERROR;
}
else
{
u16RecordNum -= 1U;
}
}
}
else
{
u16RecordNum--;
}
}
else
{
/* No correct data found, set error flag */
u8Loop = 0U;
g_pstEEPROMBlock[i].u8Status = EEPROM_BLOCK_ERROR;
}
}
}while(u8Loop);
}
}
}
}
uint8_t EEPROM_Access_Busy(void)
{
return g_stEEPROMAccess.u8State;
}
uint8_t EEPROM_Block_Access_Status(uint16_t u16BlockID)
{
uint8_t u8Status;
u8Status = EEPROM_BLOCK_ERROR;
if (u16BlockID < g_stEEPROMAccess.u16BlockNum)
{
u8Status = g_pstEEPROMBlock[u16BlockID].u8Status;
}
return u8Status;
}
/* u16Len : DWord(32-bit) number to be read */
/* Retval 0 - OK 1 - Error */
uint8_t EEPROM_Read_Block_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len)
{
uint16_t i;
uint8_t u8Error;
u8Error = 1U;
if ((u16BlockID < g_stEEPROMAccess.u16BlockNum) && (u32Data != NULL) && (u16Len != 0U))
{
if ((g_pstEEPROMBlock[u16BlockID].u8Status == EEPROM_BLOCK_ACTIVE) && \
(u16Len <= (g_pstEEPROMBlock[u16BlockID].u16BlockSize - EEPROM_BLOCK_CTRL_BYTE_SIZE) / 4U))
{
for (i = 0U; i < u16Len; i++)
{
u32Data[i] = g_pstEEPROMBlock[u16BlockID].pu32Data[i + 1U];
}
u8Error = 0U;
}
}
return u8Error;
}
/* u16Len : DWord(32-bit) number to be written */
/* Retval 0 - OK 1 - Error */
uint8_t EEPROM_Write_Block_Data(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len)
{
uint16_t i;
uint8_t u8Error;
uint16_t u16WordNum;
uint16_t u16Result;
uint32_t u32EndAddr;
EEPROM_Ctrl_Data_un_t unCtrlData;
u8Error = 1U;
if ((g_stEEPROMAccess.u8State == EEPROM_WR_STATE_IDLE) && \
(g_stEEPROMAccess.u16BlockNum > u16BlockID) && (u32Data != NULL) && (u16Len != 0U))
{
if (u16Len <= (g_pstEEPROMBlock[u16BlockID].u16BlockSize - EEPROM_BLOCK_CTRL_BYTE_SIZE) / 4U)
{
g_stEEPROMAccess.u8State = EEPROM_WR_STATE_PROG;
u16WordNum = g_pstEEPROMBlock[u16BlockID].u16BlockSize / 4U - 1U; /* CRC checksum is ignored */
if (g_pstEEPROMBlock[u16BlockID].u8Status == EEPROM_BLOCK_ACTIVE)
{
g_pstEEPROMBlock[u16BlockID].u16RecordNum++;
if (g_pstEEPROMBlock[u16BlockID].u16RecordNum >= g_pstEEPROMBlock[u16BlockID].u16MaxRecordNum)
{
g_stEEPROMAccess.u8State = EEPROM_WR_STATE_ERASE;
g_pstEEPROMBlock[u16BlockID].u16RecordNum = 0U;
if (g_pstEEPROMBlock[u16BlockID].u8SectorOffset == 0U)
{
g_pstEEPROMBlock[u16BlockID].u8SectorOffset = 1U;
}
else
{
g_pstEEPROMBlock[u16BlockID].u8SectorOffset = 0U;
}
}
g_pstEEPROMBlock[u16BlockID].u16Index++;
unCtrlData.stField.u16Index = g_pstEEPROMBlock[u16BlockID].u16Index;
unCtrlData.stField.u16IndexInv = 0xFFFFU - unCtrlData.stField.u16Index;
g_pstEEPROMBlock[u16BlockID].pu32Data[0U] = unCtrlData.u32Word[0U];
}
else
{
g_stEEPROMAccess.u8State = EEPROM_WR_STATE_ERASE;
g_pstEEPROMBlock[u16BlockID].u16RecordNum = 0U;
g_pstEEPROMBlock[u16BlockID].u8SectorOffset = 0U;
g_pstEEPROMBlock[u16BlockID].u16Index = 0U;
g_pstEEPROMBlock[u16BlockID].pu32Data[0U] = 0xFFFF0000UL;
for (i = 1U; i < u16WordNum; i++)
{
g_pstEEPROMBlock[u16BlockID].pu32Data[i] = 0x00000000UL;
}
g_pstEEPROMBlock[u16BlockID].u8Status = EEPROM_BLOCK_ACTIVE;
}
u16Len += 1U;
for (i = 1U; i < u16Len; i++)
{
g_pstEEPROMBlock[u16BlockID].pu32Data[i] = u32Data[i - 1U];
}
u16Result = EEPROM_CRC_Calc(g_pstEEPROMBlock[u16BlockID].pu32Data, u16WordNum);
g_pstEEPROMBlock[u16BlockID].pu32Data[u16WordNum] = (uint32_t)u16Result;
g_stEEPROMAccess.u32ProgAddr = g_pstEEPROMBlock[u16BlockID].u32BaseAddr;
g_stEEPROMAccess.u32ProgAddr += (uint32_t)g_pstEEPROMBlock[u16BlockID].u16SectorSize * (uint32_t)g_pstEEPROMBlock[u16BlockID].u8SectorOffset;
g_stEEPROMAccess.u32ProgAddr += (uint32_t)g_pstEEPROMBlock[u16BlockID].u16BlockSize * (uint32_t)g_pstEEPROMBlock[u16BlockID].u16RecordNum;
g_stEEPROMAccess.u16ProgLen = g_pstEEPROMBlock[u16BlockID].u16BlockSize / 4U;
g_stEEPROMAccess.pu32ProgData = g_pstEEPROMBlock[u16BlockID].pu32Data;
if (g_stEEPROMAccess.u8State == EEPROM_WR_STATE_ERASE)
{
u32EndAddr = g_stEEPROMAccess.u32ProgAddr + (uint32_t)g_pstEEPROMBlock[u16BlockID].u16SectorSize - 1UL;
g_pfnEEPROMMemErase(g_stEEPROMAccess.u32ProgAddr, u32EndAddr);
}
else
{
g_pfnEEPROMMemWrite(g_stEEPROMAccess.u32ProgAddr, g_stEEPROMAccess.pu32ProgData, (uint32_t)g_stEEPROMAccess.u16ProgLen);
}
u8Error = 0U;
}
}
return u8Error;
}
void EEPROM_Mem_Access_Complete_Callback(void)
{
if (g_stEEPROMAccess.u8State == EEPROM_WR_STATE_ERASE)
{
g_stEEPROMAccess.u8State = EEPROM_WR_STATE_PROG;
g_pfnEEPROMMemWrite(g_stEEPROMAccess.u32ProgAddr, g_stEEPROMAccess.pu32ProgData, (uint32_t)g_stEEPROMAccess.u16ProgLen);
}
else
{
g_stEEPROMAccess.u8State = EEPROM_WR_STATE_IDLE;
}
}
static uint16_t EEPROM_CRC_Calc(uint32_t * pu32Data, uint16_t u16Len)
{
uint16_t i;
uint8_t u8CRCHi;
uint8_t u8CRCLo;
uint8_t u8Index;
uint8_t *pu8DataByte;
uint16_t u16CRCResult;
u16CRCResult = 0xFFFFU;
if (pu32Data != NULL)
{
u8CRCHi = 0xFFU;
u8CRCLo = 0xFFU;
u16Len <<= 2U; /* u16Len = u16Len * 4U */
pu8DataByte = (uint8_t *)pu32Data;
for (i = 0; i < u16Len; i++)
{
u8Index = u8CRCLo ^ pu8DataByte[i];
u8CRCLo = u8CRCHi ^ g_u8EEPROMCRCTableH[u8Index];
u8CRCHi = g_u8EEPROMCRCTableL[u8Index];
}
u16CRCResult = (uint16_t)u8CRCHi;
u16CRCResult <<= 8U;
u16CRCResult |= (uint16_t)u8CRCLo;
}
return u16CRCResult;
}
/******************************************************************************
�?�?名:Simulated_IIC_Master.c
功能描述:IO端口模拟的IIC(I2C)主机函数库文�?
�? 者:张暄
�? 本:V1.0
�? 期:2016.12.21
******************************************************************************/
#include "IIC.h"
#include "gpio.h"
uint8_t IIC_addr = 0u;
__inline void bsp_IIC_nop( void )
{
__NOP();
}
void bsp_IIC_SCL_inConfig( void )
{
*((volatile uint8_t*)(&PORT->PMC0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PM0+SCL_LED_DRIVER_PORT)) |= ( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PIM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->POM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PU0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
}
void bsp_IIC_SCL_outConfig( void )
{
*((volatile uint8_t*)(&PORT->PMC0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PIM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->POM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
}
void bsp_IIC_SCL_out( uint8_t dat )
{
if ( dat )
{
*( ( volatile uint8_t* )( &PORT->P0 + 6 ) ) |= ( 1 << PIN2 );
}
else
{
*( ( volatile uint8_t * )( &PORT->P0 + 6 ) ) &= ( ~( 1 << PIN2 ) );
}
}
void bsp_IIC_SDA_inConfig( void )
{
PORT_Init( IIC_SDA_27030, INPUT );
}
void bsp_IIC_SDA_outConfig( void )
{
PORT_Init( IIC_SDA_27030, OUTPUT );
}
void bsp_IIC_SDA_out( uint8_t dat )
{
if ( dat )
{
*( ( volatile uint8_t* )( &PORT->P0 + 6 ) ) |= ( 1 << PIN3 );
}
else
{
*( ( volatile uint8_t * )( &PORT->P0 + 6 ) ) &= ( ~( 1 << PIN3 ) );
}
}
uint8_t bsp_IIC_SDA_getVal( void )
{
if ( PORT_GetBit( IIC_SDA_27030 ) )
{ return 1; }
else
{ return 0; }
}
/******************************************************************************
函数名:IIC_Init
�? 能:初始化IIC总线
�? 数:�?
返回值:�?
******************************************************************************/
void Simulated_IIC_2_Init( void )
{
*((volatile uint8_t*)(&PORT->PMC0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PIM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->POM0+SCL_LED_DRIVER_PORT)) &= ~( 1 << SCL_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PMC0+SDA_LED_DRIVER_PORT)) &= ~( 1 << SDA_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PM0+SDA_LED_DRIVER_PORT)) &= ~( 1 << SDA_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->PIM0+SDA_LED_DRIVER_PORT)) &= ~( 1 << SDA_LED_DRIVER_PIN );
*((volatile uint8_t*)(&PORT->POM0+SDA_LED_DRIVER_PORT)) &= ~( 1 << SDA_LED_DRIVER_PIN );
bsp_IIC_Stop();
}
void Simulated_Release_SCL( void )
{
bsp_IIC_SCL_out( 0 );
bsp_IIC_delay( 10 );
}
/*-------------------------------------------------------------------------
* Function Name : bsp_delay
* Description :
* Input : None
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void bsp_IIC_delay( uint32_t time )
{
uint32_t i;
for ( i = 0; i <= time; i++ )
{
bsp_IIC_nop();
}
}
/******************************************************************************
函数名:IIC_Start
�? 能:在IIC总线上发送起始信�?发起一次IIC通信
�? 数:�?
返回值:�?
******************************************************************************/
void bsp_IIC_Start(void)
{
bsp_IIC_SDA_outConfig();
bsp_IIC_SDA_out( 1 );
bsp_IIC_nop();
bsp_IIC_SCL_out( 1 );
bsp_IIC_nop();
bsp_IIC_SDA_out( 0 );
bsp_IIC_nop();
bsp_IIC_SCL_out( 0 );
bsp_IIC_nop();
}
/******************************************************************************
函数名:IIC_Stop
�? 能:在IIC总线上发送停止信�?终止当前IIC通信
�? 数:�?
返回值:�?
******************************************************************************/
void bsp_IIC_Stop( void )
{
bsp_IIC_SDA_outConfig();
bsp_IIC_SCL_out( 0 );
bsp_IIC_nop();
bsp_IIC_SDA_out( 0 );
bsp_IIC_nop();
bsp_IIC_SCL_out( 1 );
bsp_IIC_nop();
bsp_IIC_SDA_out( 1 );
bsp_IIC_nop();
}
/******************************************************************************
函数名:IIC_Transmit_Data
�? 能:向IIC总线上发�?字节数据
�? 数:Data:发送的数据
返回值:总线上器件的确认(ACK) 0 - ACK 1 - NAK
******************************************************************************/
void bsp_IIC_SendByte( uint8_t Data )
{
uint8_t temp;
uint8_t d = Data;
bsp_IIC_SDA_outConfig();
for ( temp = 8; temp != 0; temp-- )
{
if ( d & 0x80 )
{
bsp_IIC_SDA_out( 1 );
}
else
{
bsp_IIC_SDA_out( 0 );
}
bsp_IIC_nop();
bsp_IIC_SCL_out( 1 );
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_SCL_out( 0 );
bsp_IIC_nop();
d = d << 1;
bsp_IIC_nop();
}
}
/*-------------------------------------------------------------------------
* Function Name : bsp_IIC_ReadByte
* Description :
* Input : None
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
uint8_t bsp_IIC_ReadByte( void )
{
uint8_t temp;
uint8_t rbyte = 0;
bsp_IIC_SDA_inConfig();
bsp_IIC_nop();
for ( temp = 8; temp != 0; temp-- )
{
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_SCL_out( 1 );
bsp_IIC_nop();
rbyte = rbyte << 1;
bsp_IIC_nop();
rbyte = rbyte | ( ( uint8_t )( bsp_IIC_SDA_getVal() ) );
bsp_IIC_SCL_out( 0 );
bsp_IIC_nop();
}
return ( rbyte );
}
/*-------------------------------------------------------------------------
* Function Name : bsp_IIC_ACK
* Description : ack
* Input : None
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void bsp_IIC_ACK( void )
{
bsp_IIC_SDA_outConfig();
bsp_IIC_SDA_out( 0 );
bsp_IIC_nop();
bsp_IIC_SCL_out( 1 );
bsp_IIC_nop();
bsp_IIC_SCL_out( 0 );
bsp_IIC_nop();
bsp_IIC_SDA_out( 1 );
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
}
/*-------------------------------------------------------------------------
* Function Name : bsp_IIC_NACK
* Description : nack
* Input : None
* Output : None
* Return : None
* onther :
--------------------------------------------------------------------------*/
void bsp_IIC_NACK( void )
{
bsp_IIC_SDA_outConfig();
bsp_IIC_nop();
bsp_IIC_SDA_out( 1 );
bsp_IIC_nop();
bsp_IIC_SCL_out( 1 );
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_SCL_out( 0 );
bsp_IIC_nop();
}
/******************************************************************************
函数名:bsp_IIC_WaitAck
�? 能:获取从总线上接收到的确认信�?
�? 数:�?
返回值:
******************************************************************************/
uint8_t bsp_IIC_WaitAck( void )
{
uint8_t ack = 1;
uint16_t i = IIC_WaitOverTime;
bsp_IIC_SDA_inConfig();
bsp_IIC_SCL_out( 1 );
while ( ( ack ) && ( --i != 0 ) )
{
ack = bsp_IIC_SDA_getVal();
}
bsp_IIC_SCL_out( 0 );
if ( IIC_addr == 0x38 )
{
}
else if ( IIC_addr == 0x78 )
{
// if ( ack )
// {
// if ( IIC_3236_NACK_Time < 0xFFFFFFFF )
// { IIC_3236_NACK_Time ++; }
// }
// else
// { IIC_3236_NACK_Time = 0; }
}
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
bsp_IIC_nop();
return ( ack );
}
/******************************************************************************
文 件 名:Simulated_IIC_Master.c
功能描述:IO端口模拟的IIC(I2C)主机函数库文件
作 者:张暄
版 本:V1.0
日 期:2016.12.21
******************************************************************************/
#include "LtDet_Simulated_IIC_Master.h"
#include "gpio.h"
uint8_t LtDet_IICReceivedACK;
/******************************************************************************
函数名:IIC_Init
功 能:初始化IIC总线
参 数:无
返回值:无
******************************************************************************/
void LtDet_IIC_Init(void)
{
// PORT_Init(IIC_SCL_LtDet, OPENDRAIN_OUTPUT); //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
//PORT_Init(IIC_SDA_LtDet, INPUT); //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
LtDet_IICReceivedACK = IIC_INVALID_ACK;
}
/******************************************************************************
函数名:IIC_Start
功 能:在IIC总线上发送起始信号,发起一次IIC通信
参 数:无
返回值:无
******************************************************************************/
void LtDet_IIC_Start(void)
{
LtDet_IICReceivedACK = IIC_INVALID_ACK;
// PORT_SetBit(IIC_SDA_LtDet); //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_SetBit(IIC_SCL_LtDet); //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_Init(IIC_SDA_LtDet, OPENDRAIN_OUTPUT); //SDA输出0,此时SDA = 0
// PORT_ClrBit(IIC_SDA_LtDet);
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_ClrBit(IIC_SCL_LtDet); //SCL输出0,此时SCL = 0
LtDet_IIC_Delay();
}
/******************************************************************************
函数名:IIC_Stop
功 能:在IIC总线上发送停止信号,终止当前IIC通信
参 数:无
返回值:无
******************************************************************************/
void LtDet_IIC_Stop(void)
{
LtDet_IICReceivedACK = IIC_INVALID_ACK;
// PORT_Init(IIC_SDA_LtDet, OPENDRAIN_OUTPUT); //SDA输出0,此时SDA = 0
// PORT_ClrBit(IIC_SDA_LtDet);
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_SetBit(IIC_SCL_LtDet); //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_SetBit(IIC_SDA_LtDet); //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
}
/******************************************************************************
函数名:IIC_Transmit_Data
功 能:向IIC总线上发送1字节数据
参 数:Data:发送的数据
返回值:总线上器件的确认(ACK) 0 - ACK 1 - NAK
******************************************************************************/
void LtDet_IIC_Transmit_Data(uint8_t Data)
{
uint8_t i;
LtDet_IICReceivedACK = IIC_INVALID_ACK;
for (i = 0; i < 8; i++)
{
// PORT_ClrBit(IIC_SCL_LtDet);
LtDet_IIC_Delay();
if (Data & 0x80){
// PORT_Init(IIC_SDA_LtDet, OPENDRAIN_OUTPUT);
// PORT_SetBit(IIC_SDA_LtDet);
// IIC_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
;
}
else
{
// PORT_Init(IIC_SDA_LtDet, OPENDRAIN_OUTPUT);
// PORT_ClrBit(IIC_SDA_LtDet);
// IIC_SDA_DIR = 1; //SDA输出0,此时SDA = 0
// IIC_SDA = 0;
}
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_SetBit(IIC_SCL_LtDet);
// IIC_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// IIC_SCL_DIR = 1; //SCL输出0,此时SCL = 0
// IIC_SCL = 0;
Data <<= 1;
}
// PORT_ClrBit(IIC_SCL_LtDet);
// PORT_Init(IIC_SDA_LtDet, INPUT);
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// PORT_SetBit(IIC_SCL_LtDet);
// IIC_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// if(PORT_GetBit(IIC_SDA_LtDet)){
// LtDet_IICReceivedACK = 1;
// }
// else{
// LtDet_IICReceivedACK = 0;
// }
// IICReceivedACK = IIC_SDA;
// PORT_ClrBit(IIC_SCL_LtDet);
// IIC_SCL_DIR = 1; //SCL输出0,此时SCL = 0
// IIC_SCL = 0;
LtDet_IIC_Delay();
}
/******************************************************************************
函数名:IIC_Receive_Data
功 能:从IIC总线上接收1字节数据
参 数:无
返回值:接收到的数据
******************************************************************************/
uint8_t LtDet_IIC_Receive_Data(void)
{
uint8_t i;
uint8_t Data;
Data = 0;
// PORT_Init(IIC_SDA_LtDet, INPUT);
//IIC_SDA_DIR = 0; //设置SDA为输入状态
LtDet_IIC_Delay();
LtDet_IIC_Delay();
for(i = 0; i < 8; i++)
{
Data <<= 1;
// PORT_SetBit(IIC_SCL_LtDet);
// IIC_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
LtDet_IIC_Delay();
LtDet_IIC_Delay();
LtDet_IIC_Delay();
// if(PORT_GetBit(IIC_SDA_LtDet))
// Data |= 1;
// PORT_ClrBit(IIC_SCL_LtDet);
// IIC_SCL_DIR = 1; //SCL输出0,此时SCL = 0
// IIC_SCL = 0;
LtDet_IIC_Delay();
LtDet_IIC_Delay();
}
return Data;
}
/******************************************************************************
函数名:IIC_Transmit_ACK
功 能:向IIC总线上发送确认信号
参 数:ACK:确认信号的类型: IIC_ACK 肯定应答
IIC_NAK 否定应答
返回值:无
******************************************************************************/
void LtDet_IIC_Transmit_ACK(uint8_t ACK)
{
LtDet_IICReceivedACK = IIC_INVALID_ACK;
if (ACK > IIC_NAK)
return;
// PORT_Init(IIC_SDA_LtDet, OPENDRAIN_OUTPUT);
// if(ACK)
// PORT_SetBit(IIC_SDA_LtDet);
// IIC_SDA_DIR = 0; //SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
// else
// {
// PORT_ClrBit(IIC_SDA_LtDet);
// IIC_SDA_DIR = 1; //SDA输出0,此时SDA = 0
// IIC_SDA = 0;
// }
// LtDet_IIC_Delay();
// PORT_SetBit(IIC_SCL_LtDet);
// IIC_SCL_DIR = 0; //SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
// LtDet_IIC_Delay();
// LtDet_IIC_Delay();
//
// PORT_ClrBit(IIC_SCL_LtDet);
// // IIC_SCL_DIR = 1; //SCL输出0,此时SCL = 0
// // IIC_SCL = 0;
// LtDet_IIC_Delay();
}
/******************************************************************************
函数名:IIC_Receive_ACK
功 能:获取从总线上接收到的确认信号
参 数:无
返回值:总线上器件的确认信号类型:IIC_ACK 肯定应答
IIC_NAK 否定应答
IIC_INVALID_ACK 无效的应答信号(应答信号还未收到)
******************************************************************************/
uint8_t LtDet_IIC_Receive_ACK(void)
{
uint8_t ACK;
ACK = LtDet_IICReceivedACK;
LtDet_IICReceivedACK = IIC_INVALID_ACK;
return ACK;
}
/******************************************************************************
函数名:IIC_Delay
功 能:延时5us,用于收发过程中的时序控制
注意:必须调整IIC_5us_DELAY_CALIBRATION参数校准延时时间在5us左右
参 数:ACK:确认信号的类型 0 - ACK 1 - NAK
返回值:无
******************************************************************************/
void LtDet_IIC_Delay(void)
{
uint8_t i;
for(i = 0; i < IIC_FREQ_CALIBRATION; i++)
__NOP();
}
#include "bsp_BU27030.h"
#include "common.h"
#include "IIC.h"
uint16_t IIC1_CheckSDA_Times = 0u;
uint16_t IIC1_NACK_Times = 0u;
#define BU2703_SLAVE_ADDR 0X38
#define BU2703_FITER_SIZE 10
typedef struct
{
/* data */
uint16_t data1buf[BU2703_FITER_SIZE];
uint8_t index1;
uint16_t data1;
}BU2703_Datas_Struct;
BU2703_Datas_Struct BU2703Dat;
uint8_t Register_BU2703_Senser[] =
{
0x40,0X80,
0x41,0X00,
0x42,0X22,
0x43,0X01,
};
void LIGHT_IIC_Write_Data(uint8_t devAddr, uint8_t len, uint8_t *Data)
{
uint8_t Ack = 0;
bsp_IIC_Start( );
bsp_IIC_SendByte(devAddr*2);
Ack = bsp_IIC_WaitAck( );
if ( Ack != 0 )
{
bsp_IIC_Stop( );
}
while (len )
{
len-- ;
bsp_IIC_SendByte(*(Data++));
Ack = bsp_IIC_WaitAck( );
if ( Ack != 0 )
{
bsp_IIC_Stop( );
}
};
bsp_IIC_Stop( );
}
void BU2703_Senser_Init(void )
{
uint8_t mAddr = 0XFF;
uint16_t i = 0;
mAddr = 0X38;
Simulated_IIC_2_Init();
for ( i = 0; i < 4; i++)
{
LIGHT_IIC_Write_Data(mAddr, 2, &Register_BU2703_Senser[i*2]);
}
}
uint8_t LIGHT_IIC_Read_Byte(uint8_t devAddr, uint8_t addr2, uint8_t *pData)
{
uint8_t Ack = 0;
bsp_IIC_Start( );
bsp_IIC_SendByte(devAddr * 2);
Ack = bsp_IIC_WaitAck( );
if ( Ack != 0 )
{
bsp_IIC_Stop( );
return 0;
}
bsp_IIC_SendByte(addr2);
Ack = bsp_IIC_WaitAck( );
if ( Ack != 0 )
{
bsp_IIC_Stop( );
return 0;
}
bsp_IIC_Start( );
bsp_IIC_SendByte(devAddr * 2 + 1);
Ack = bsp_IIC_WaitAck( );
if ( Ack != 0 )
{
bsp_IIC_Stop( );
return 0;
}
*pData = bsp_IIC_ReadByte( );
bsp_IIC_NACK();
// 停止IIC
bsp_IIC_Stop( );
return 1;
}
void BU2703_Read_Datas(void )
{
uint8_t dataL = 0;
uint8_t dataH = 0;
uint8_t meas_en = 0;
uint16_t temp = 0xffff;
LIGHT_IIC_Read_Byte(BU2703_SLAVE_ADDR, 0x43, &meas_en);
if(meas_en & 0x80)
{
LIGHT_IIC_Read_Byte(BU2703_SLAVE_ADDR, 0x52, &dataL);
LIGHT_IIC_Read_Byte(BU2703_SLAVE_ADDR, 0x53, &dataH);
temp = dataH;
temp = (temp << 8);
temp |= dataL;
if(BU2703Dat.index1 >= BU2703_FITER_SIZE)
{
BU2703Dat.index1 = 0;
App_SortNWord_u16(BU2703Dat.data1buf, BU2703_FITER_SIZE);
BU2703Dat.data1 = BU2703Dat.data1buf[BU2703_FITER_SIZE / 2]; //15*50ms update
}
if(temp < 0xffff)
{
BU2703Dat.data1buf[BU2703Dat.index1] = temp;
BU2703Dat.index1++;
}
}
}
uint16_t BU2703_Get_Data1(void )
{
return BU2703Dat.data1;
}
void App_SwapWord_u16(uint16_t *pData1,uint16_t *pData2)
{
uint16_t psw;
if((*pData1) > (*pData2))
{
psw = (*pData2);
(*pData2) = (*pData1);
(*pData1) = psw;
}
}
void App_SortNWord_u16(uint16_t *SortData,uint8_t len)
{
uint8_t n=0,m;
for(;n < len-1;n++)
{
for(m = n+1;m < len;m++)
{
App_SwapWord_u16((SortData + n),(SortData + m));
}
}
}
...@@ -538,4 +538,7 @@ typedef enum ...@@ -538,4 +538,7 @@ typedef enum
NM_Mode_Wakeup, NM_Mode_Wakeup,
} NM_Mode_t; } NM_Mode_t;
#define GPIO_DIR_OUT 0
#define GPIO_DIR_IN 1
#endif #endif
...@@ -140,7 +140,7 @@ void Sys_Run_Mode_100ms_Tasks_Group2(void) ...@@ -140,7 +140,7 @@ void Sys_Run_Mode_100ms_Tasks_Group2(void)
void Sys_Run_Mode_100ms_Tasks_Group3(void) void Sys_Run_Mode_100ms_Tasks_Group3(void)
{ {
BU2703_Read_Datas();
} }
void Sys_Run_Mode_100ms_Tasks_Group4(void) void Sys_Run_Mode_100ms_Tasks_Group4(void)
......
...@@ -616,6 +616,54 @@ ...@@ -616,6 +616,54 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>33</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\Driver\inc\bsp_BU27030.h</PathWithFileName>
<FilenameWithoutPath>bsp_BU27030.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\Driver\src\bsp_BU27030.c</PathWithFileName>
<FilenameWithoutPath>bsp_BU27030.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>35</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\Driver\inc\IIC.h</PathWithFileName>
<FilenameWithoutPath>IIC.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\Driver\src\IIC.c</PathWithFileName>
<FilenameWithoutPath>IIC.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
...@@ -626,7 +674,7 @@ ...@@ -626,7 +674,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>33</FileNumber> <FileNumber>37</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -638,7 +686,7 @@ ...@@ -638,7 +686,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>34</FileNumber> <FileNumber>38</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -650,7 +698,7 @@ ...@@ -650,7 +698,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>35</FileNumber> <FileNumber>39</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -662,7 +710,7 @@ ...@@ -662,7 +710,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>36</FileNumber> <FileNumber>40</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -674,7 +722,7 @@ ...@@ -674,7 +722,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>37</FileNumber> <FileNumber>41</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -694,7 +742,7 @@ ...@@ -694,7 +742,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>38</FileNumber> <FileNumber>42</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -706,7 +754,7 @@ ...@@ -706,7 +754,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>39</FileNumber> <FileNumber>43</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -718,7 +766,7 @@ ...@@ -718,7 +766,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>40</FileNumber> <FileNumber>44</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -730,7 +778,7 @@ ...@@ -730,7 +778,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>41</FileNumber> <FileNumber>45</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -742,7 +790,7 @@ ...@@ -742,7 +790,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>42</FileNumber> <FileNumber>46</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -754,7 +802,7 @@ ...@@ -754,7 +802,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>43</FileNumber> <FileNumber>47</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -766,7 +814,7 @@ ...@@ -766,7 +814,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>44</FileNumber> <FileNumber>48</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -778,7 +826,7 @@ ...@@ -778,7 +826,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>45</FileNumber> <FileNumber>49</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -790,7 +838,7 @@ ...@@ -790,7 +838,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>46</FileNumber> <FileNumber>50</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -802,7 +850,7 @@ ...@@ -802,7 +850,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>47</FileNumber> <FileNumber>51</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -814,7 +862,7 @@ ...@@ -814,7 +862,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>48</FileNumber> <FileNumber>52</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -826,7 +874,7 @@ ...@@ -826,7 +874,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>49</FileNumber> <FileNumber>53</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -838,7 +886,7 @@ ...@@ -838,7 +886,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>50</FileNumber> <FileNumber>54</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -850,7 +898,7 @@ ...@@ -850,7 +898,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>51</FileNumber> <FileNumber>55</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -862,7 +910,7 @@ ...@@ -862,7 +910,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>52</FileNumber> <FileNumber>56</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -874,7 +922,7 @@ ...@@ -874,7 +922,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>53</FileNumber> <FileNumber>57</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -886,7 +934,7 @@ ...@@ -886,7 +934,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>54</FileNumber> <FileNumber>58</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -898,7 +946,7 @@ ...@@ -898,7 +946,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>55</FileNumber> <FileNumber>59</FileNumber>
<FileType>4</FileType> <FileType>4</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -910,7 +958,7 @@ ...@@ -910,7 +958,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>56</FileNumber> <FileNumber>60</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -922,7 +970,7 @@ ...@@ -922,7 +970,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>57</FileNumber> <FileNumber>61</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -934,7 +982,7 @@ ...@@ -934,7 +982,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>58</FileNumber> <FileNumber>62</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -946,7 +994,7 @@ ...@@ -946,7 +994,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>59</FileNumber> <FileNumber>63</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -958,7 +1006,7 @@ ...@@ -958,7 +1006,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>60</FileNumber> <FileNumber>64</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -970,7 +1018,7 @@ ...@@ -970,7 +1018,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>61</FileNumber> <FileNumber>65</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -982,7 +1030,7 @@ ...@@ -982,7 +1030,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>62</FileNumber> <FileNumber>66</FileNumber>
<FileType>4</FileType> <FileType>4</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -994,7 +1042,7 @@ ...@@ -994,7 +1042,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>63</FileNumber> <FileNumber>67</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1006,7 +1054,7 @@ ...@@ -1006,7 +1054,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>64</FileNumber> <FileNumber>68</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1018,7 +1066,7 @@ ...@@ -1018,7 +1066,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>65</FileNumber> <FileNumber>69</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1030,7 +1078,7 @@ ...@@ -1030,7 +1078,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>66</FileNumber> <FileNumber>70</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1042,7 +1090,7 @@ ...@@ -1042,7 +1090,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>67</FileNumber> <FileNumber>71</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1054,7 +1102,7 @@ ...@@ -1054,7 +1102,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>68</FileNumber> <FileNumber>72</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1066,7 +1114,7 @@ ...@@ -1066,7 +1114,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>69</FileNumber> <FileNumber>73</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1078,7 +1126,7 @@ ...@@ -1078,7 +1126,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>70</FileNumber> <FileNumber>74</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1090,7 +1138,7 @@ ...@@ -1090,7 +1138,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>71</FileNumber> <FileNumber>75</FileNumber>
<FileType>4</FileType> <FileType>4</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1102,7 +1150,7 @@ ...@@ -1102,7 +1150,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>72</FileNumber> <FileNumber>76</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1114,7 +1162,7 @@ ...@@ -1114,7 +1162,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>73</FileNumber> <FileNumber>77</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1126,7 +1174,7 @@ ...@@ -1126,7 +1174,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>74</FileNumber> <FileNumber>78</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1146,7 +1194,7 @@ ...@@ -1146,7 +1194,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>75</FileNumber> <FileNumber>79</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1158,7 +1206,7 @@ ...@@ -1158,7 +1206,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>76</FileNumber> <FileNumber>80</FileNumber>
<FileType>4</FileType> <FileType>4</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1178,7 +1226,7 @@ ...@@ -1178,7 +1226,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>77</FileNumber> <FileNumber>81</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1190,7 +1238,7 @@ ...@@ -1190,7 +1238,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>78</FileNumber> <FileNumber>82</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1202,7 +1250,7 @@ ...@@ -1202,7 +1250,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>79</FileNumber> <FileNumber>83</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1214,7 +1262,7 @@ ...@@ -1214,7 +1262,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>80</FileNumber> <FileNumber>84</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1226,7 +1274,7 @@ ...@@ -1226,7 +1274,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>81</FileNumber> <FileNumber>85</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1238,7 +1286,7 @@ ...@@ -1238,7 +1286,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>82</FileNumber> <FileNumber>86</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1250,7 +1298,7 @@ ...@@ -1250,7 +1298,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>83</FileNumber> <FileNumber>87</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1262,7 +1310,7 @@ ...@@ -1262,7 +1310,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>84</FileNumber> <FileNumber>88</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1274,7 +1322,7 @@ ...@@ -1274,7 +1322,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>85</FileNumber> <FileNumber>89</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1286,7 +1334,7 @@ ...@@ -1286,7 +1334,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>86</FileNumber> <FileNumber>90</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1298,7 +1346,7 @@ ...@@ -1298,7 +1346,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>87</FileNumber> <FileNumber>91</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1318,7 +1366,7 @@ ...@@ -1318,7 +1366,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>88</FileNumber> <FileNumber>92</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1330,7 +1378,7 @@ ...@@ -1330,7 +1378,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>89</FileNumber> <FileNumber>93</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1342,7 +1390,7 @@ ...@@ -1342,7 +1390,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>90</FileNumber> <FileNumber>94</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1354,7 +1402,7 @@ ...@@ -1354,7 +1402,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>91</FileNumber> <FileNumber>95</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1366,7 +1414,7 @@ ...@@ -1366,7 +1414,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>92</FileNumber> <FileNumber>96</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1378,7 +1426,7 @@ ...@@ -1378,7 +1426,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>93</FileNumber> <FileNumber>97</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1390,7 +1438,7 @@ ...@@ -1390,7 +1438,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>94</FileNumber> <FileNumber>98</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1402,7 +1450,7 @@ ...@@ -1402,7 +1450,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>95</FileNumber> <FileNumber>99</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1414,7 +1462,7 @@ ...@@ -1414,7 +1462,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>96</FileNumber> <FileNumber>100</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
...@@ -1426,7 +1474,7 @@ ...@@ -1426,7 +1474,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>97</FileNumber> <FileNumber>101</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
......
...@@ -339,7 +339,7 @@ ...@@ -339,7 +339,7 @@
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define></Define> <Define></Define>
<Undefine></Undefine> <Undefine></Undefine>
<IncludePath>.\source\System;.\source\Driver\inc;.\source\Application;.\source\Application\LINE_IN;.\source\Application\PowerManagement;.\source\Application\RTE;.\source\Application\MCU_Core_Protocol;.\source\Application\Telltales;.\source\Application\Fuel;.\source\Application\Eeprom;.\source\Application\DataProcessor;.\source\Application\LightDetect;.\source\Application\BackLight;.\source\Application\Key;.\source\Application\Menu;.\source\Application\APPCan;.\source\UDS;.\source\Application\Gauges;.\source\Application\CoolantTemp;.\source\UDS2;.\\RTE\Device\BAT32A239KK64FB;.\source\Application\Mileage;.\source\Application\Display\GUI_LCD_DIS;.\source\Application\Display\SEG_LCD_DIS</IncludePath> <IncludePath>.\source\System;.\source\Driver\inc;.\source\Application;.\source\Application\LINE_IN;.\source\Application\PowerManagement;.\source\Application\RTE;.\source\Application\MCU_Core_Protocol;.\source\Application\Telltales;.\source\Application\Fuel;.\source\Application\Eeprom;.\source\Application\DataProcessor;.\source\Application\LightDetect;.\source\Application\BackLight;.\source\Application\Key;.\source\Application\Menu;.\source\Application\APPCan;.\source\UDS;.\source\Application\Gauges;.\source\Application\CoolantTemp;.\source\UDS2;.\\RTE\Device\BAT32A239KK64FB;.\source\Application\Mileage;.\source\Application\Display\GUI_LCD_DIS;.\source\Application\Display\SEG_LCD_DIS;.\source\Driver\inc</IncludePath>
</VariousControls> </VariousControls>
</Cads> </Cads>
<Aads> <Aads>
...@@ -543,6 +543,26 @@ ...@@ -543,6 +543,26 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\source\Driver\src\flash.c</FilePath> <FilePath>.\source\Driver\src\flash.c</FilePath>
</File> </File>
<File>
<FileName>bsp_BU27030.h</FileName>
<FileType>5</FileType>
<FilePath>.\source\Driver\inc\bsp_BU27030.h</FilePath>
</File>
<File>
<FileName>bsp_BU27030.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\Driver\src\bsp_BU27030.c</FilePath>
</File>
<File>
<FileName>IIC.h</FileName>
<FileType>5</FileType>
<FilePath>.\source\Driver\inc\IIC.h</FilePath>
</File>
<File>
<FileName>IIC.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\Driver\src\IIC.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment