Commit afdc20fa authored by 赵康弘's avatar 赵康弘

perf: 高边输出驱动控制

parent f6475d94
This diff is collapsed.
......@@ -28,16 +28,59 @@ typedef enum
SGM4591Q_Segment1,
} SGM4591Q_Segment;
/*SGM4591Q端口*/
#define SGM4591Q_PIN0 0x01u
#define SGM4591Q_PIN1 0x02u
#define SGM4591Q_PIN2 0x04u
#define SGM4591Q_PIN3 0x08u
#define SGM4591Q_PIN4 0x10u
#define SGM4591Q_PIN5 0x20u
#define SGM4591Q_PIN6 0x40u
#define SGM4591Q_PIN7 0x80u
typedef struct
{
uint8_t PIN_0 : 1;
uint8_t PIN_1 : 1;
uint8_t PIN_2 : 1;
uint8_t PIN_3 : 1;
uint8_t PIN_4 : 1;
uint8_t PIN_5 : 1;
uint8_t PIN_6 : 1;
uint8_t PIN_7 : 1;
} SGM4591Q_Bit_st;
typedef union
{
uint8_t UINT8;
SGM4591Q_Bit_st BIT;
} SGM4591Q_Pin_en;
/*PIN端口控制命令*/
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_1_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_1_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_2_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_2_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_3_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_3_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_4_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip1_4_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_1_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_1_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_2_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_2_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_3_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_3_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_4_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip2_4_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_1_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_1_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_2_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_2_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_3_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_3_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_4_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip3_4_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_1_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_1_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_2_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_2_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_3_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_3_Segment1;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_4_Segment0;
extern volatile SGM4591Q_Pin_en SGM4591Q_Chip4_4_Segment1;
extern uint16_t ADC_4;
void SGM4591Q_IIC_Send(uint8_t Address,uint8_t Register,uint8_t Function);
void SGM4591Q_Global_Control(uint8_t Chip, uint8_t Segment);
void SGM4591Q_Control(void);
This diff is collapsed.
#!gbuild
[Subproject]
Simulated_SPI_Master.c
Simulated_SPI_Master.h
Simulated_IIC_1_Master.c
Simulated_IIC_1_Master.h
Simulated_IIC_2_Master.c
Simulated_IIC_2_Master.h
Simulated_IIC_3_Master.c
Simulated_IIC_3_Master.h
Simulated_IIC_4_Master.c
Simulated_IIC_4_Master.h
Simulated_SPI_Master.c
Simulated_SPI_Master.h
CAN\Rscan.c
CAN\Rscan.h
CAN\RSCAN_Table.c
......
#include "Simulated_IIC_1_Master.h"
#include "Port_Cfg.h"
#include "Port.h"
#include "Dio.h"
uint8_t u8SimulatedIIC1ReceivedACK;
/*
SDA:P22-3
SCL:P22-4
*/
/*时钟输入*/
void SGM4591Q_Clock1_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin4, PORT_PIN_IN);
}
/*时钟输出低*/
void SGM4591Q_Clock1_Output(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin4, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P22_04, STD_LOW);
}
/*数据设置输入*/
void SGM4591Q_Data1_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin3, PORT_PIN_IN);
}
/*数据输入高低电平*/
uint8_t SGM4591Q_Data1_Input_Value(void)
{
uint8_t Data;
Data = Dio_ReadChannel(Port_Config_PortGroup22_PortPin3);
return Data;
}
/*数据输出低*/
void SGM4591Q_Data1_Output_Low(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin3, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P22_03, STD_LOW);
}
/******************************************************************************
函数名:IIC_Init
功 能:初始化IIC总线
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_1_Init(void)
{
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_INVALID_ACK;
}
/******************************************************************************
函数名:IIC_Start
功 能:在IIC总线上发送起始信号,发起一次IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_1_Start(void)
{
u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_INVALID_ACK;
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_1_OUT_SDA = 0;
SGM4591Q_Data1_Output_Low();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_1_SCL = 0;
SGM4591Q_Clock1_Output();
Simulated_IIC_1_Delay();
}
/******************************************************************************
函数名:IIC_Stop
功 能:在IIC总线上发送停止信号,终止当前IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_1_Stop(void)
{
u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_INVALID_ACK;
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_1_OUT_SDA = 0;
SGM4591Q_Data1_Output_Low();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
}
/******************************************************************************
函数名:IIC_Transmit_Data
功 能:向IIC总线上发送1字节数据
参 数:Data:发送的数据
返回值:总线上器件的确认(ACK) 0 - ACK 1 - NAK
******************************************************************************/
void Simulated_IIC_1_Transmit_Data(uint8_t Data)
{
uint8_t i;
u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_INVALID_ACK;
for (i = 0; i < 8; i++)
{
if ((Data & 0x80) != 0U)
{
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data1_Input();
}
else
{
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_1_OUT_SDA = 0;
SGM4591Q_Data1_Output_Low();
}
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_1_SCL = 0;
SGM4591Q_Clock1_Output();
Simulated_IIC_1_Delay();
Data <<= 1;
}
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_IN_SDA;
u8SimulatedIIC1ReceivedACK = SGM4591Q_Data1_Input_Value();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_1_SCL = 0;
SGM4591Q_Clock1_Output();
Simulated_IIC_1_Delay();
}
/******************************************************************************
函数名:IIC_Receive_Data
功 能:从IIC总线上接收1字节数据
参 数:无
返回值:接收到的数据
******************************************************************************/
uint8_t Simulated_IIC_1_Receive_Data(void)
{
uint8_t i;
uint8_t Data;
Data = 0;
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
for (i = 0; i < 8; i++)
{
Data <<= 1;
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// Data |= SIMULATED_IIC_1_IN_SDA;
Data |= SGM4591Q_Data1_Input_Value();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_1_SCL = 0;
SGM4591Q_Clock1_Output();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
}
return Data;
}
/******************************************************************************
函数名:IIC_Transmit_ACK
功 能:向IIC总线上发送确认信号
参 数:ACK:确认信号的类型: SIMULATED_IIC_1_ACK 肯定应答
IIC_NAK 否定应答
返回值:无
******************************************************************************/
void Simulated_IIC_1_Transmit_ACK(uint8_t ACK)
{
u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_INVALID_ACK;
if (ACK > SIMULATED_IIC_1_NAK)
{
return;
}
if (ACK != 0U)
{
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data1_Input();
}
else
{
// SIMULATED_IIC_1_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_1_OUT_SDA = 0;
SGM4591Q_Data1_Output_Low();
}
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock1_Input();
Simulated_IIC_1_Delay();
Simulated_IIC_1_Delay();
// SIMULATED_IIC_1_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_1_SCL = 0;
SGM4591Q_Clock1_Output();
Simulated_IIC_1_Delay();
}
/******************************************************************************
函数名:IIC_Receive_ACK
功 能:获取从总线上接收到的确认信号
参 数:无
返回值:总线上器件的确认信号类型:Simulated_IIC_ACK 肯定应答
SIMULATED_IIC_1_NAK 否定应答
IIC_INVALID_ACK 无效的应答信号(应答信号还未收到)
******************************************************************************/
uint8_t Simulated_IIC_1_Receive_ACK(void)
{
uint8_t ACK;
ACK = u8SimulatedIIC1ReceivedACK;
u8SimulatedIIC1ReceivedACK = SIMULATED_IIC_1_INVALID_ACK;
return ACK;
}
/******************************************************************************
函数名:IIC_Delay
功 能:延时5us,用于收发过程中的时序控制
注意:必须调整IIC_5us_DELAY_CALIBRATION参数校准延时时间在5us左右
参 数:ACK:确认信号的类型 0 - ACK 1 - NAK
返回值:无
******************************************************************************/
void Simulated_IIC_1_Delay(void)
{
uint8_t i;
for (i = 0; i < SIMULATED_IIC_1_FREQ_CALIBRATION; i++)
{
NOP();
}
}
#ifndef SIMULATED_IIC_1_MASTER_H__
#define SIMULATED_IIC_1_MASTER_H__
#include "TYW_stdint.h"
/******************************************************************************
1us延时校准
******************************************************************************/
#define SIMULATED_IIC_1_FREQ_CALIBRATION 80U
/******************************************************************************
确认信号
******************************************************************************/
#define SIMULATED_IIC_1_ACK 0U // 肯定应答
#define SIMULATED_IIC_1_NAK 1U // 否定应答
#define SIMULATED_IIC_1_INVALID_ACK 2U // 无效的应答信号(应答信号还未收到)
/******************************************************************************
函数声明
******************************************************************************/
void Simulated_IIC_1_Init(void);
void Simulated_IIC_1_Start(void);
void Simulated_IIC_1_Stop(void);
void Simulated_IIC_1_Transmit_Data(uint8_t Data);
uint8_t Simulated_IIC_1_Receive_Data(void);
void Simulated_IIC_1_Transmit_ACK(uint8_t ACK);
uint8_t Simulated_IIC_1_Receive_ACK(void);
void Simulated_IIC_1_Delay(void);
/*void Simulated_IIC_1_Slave_Service(void);*/
#endif
\ No newline at end of file
......@@ -10,36 +10,36 @@ SDA:P22-3
SCL:P22-4
*/
/*时钟输入*/
void SGM4591Q_Clock_Input(void)
void SGM4591Q_Clock2_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin4, PORT_PIN_IN);
Port_SetPinDirection(Port_Config_PortGroup21_PortPin4, PORT_PIN_IN);
}
/*时钟输出低*/
void SGM4591Q_Clock_Output(void)
void SGM4591Q_Clock2_Output(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin4, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P22_04, STD_LOW);
Port_SetPinDirection(Port_Config_PortGroup21_PortPin4, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P21_04, STD_LOW);
}
/*数据设置输入*/
void SGM4591Q_Data_Input(void)
void SGM4591Q_Data2_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin3, PORT_PIN_IN);
Port_SetPinDirection(Port_Config_PortGroup21_PortPin5, PORT_PIN_IN);
}
/*数据输入高低电平*/
uint8_t SGM4591Q_Data_Input_Value(void)
uint8_t SGM4591Q_Data2_Input_Value(void)
{
uint8_t Data;
Data = Dio_ReadChannel(Port_Config_PortGroup22_PortPin3);
Data = Dio_ReadChannel(Port_Config_PortGroup21_PortPin5);
return Data;
}
/*数据输出低*/
void SGM4591Q_Data_Output_Low(void)
void SGM4591Q_Data2_Output_Low(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin3, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P22_03, STD_LOW);
Port_SetPinDirection(Port_Config_PortGroup21_PortPin5, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P21_05, STD_LOW);
}
/******************************************************************************
......@@ -51,12 +51,12 @@ void SGM4591Q_Data_Output_Low(void)
void Simulated_IIC_2_Init(void)
{
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
......@@ -74,24 +74,24 @@ void Simulated_IIC_2_Start(void)
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_2_OUT_SDA = 0;
SGM4591Q_Data_Output_Low();
SGM4591Q_Data2_Output_Low();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
SGM4591Q_Clock_Output();
SGM4591Q_Clock2_Output();
Simulated_IIC_2_Delay();
}
......@@ -107,17 +107,17 @@ void Simulated_IIC_2_Stop(void)
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_2_OUT_SDA = 0;
SGM4591Q_Data_Output_Low();
SGM4591Q_Data2_Output_Low();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
}
......@@ -139,46 +139,46 @@ void Simulated_IIC_2_Transmit_Data(uint8_t Data)
if ((Data & 0x80) != 0U)
{
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
}
else
{
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_2_OUT_SDA = 0;
SGM4591Q_Data_Output_Low();
SGM4591Q_Data2_Output_Low();
}
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
SGM4591Q_Clock_Output();
SGM4591Q_Clock2_Output();
Simulated_IIC_2_Delay();
Data <<= 1;
}
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_IN_SDA;
u8SimulatedIIC2ReceivedACK = SGM4591Q_Data_Input_Value();
u8SimulatedIIC2ReceivedACK = SGM4591Q_Data2_Input_Value();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
SGM4591Q_Clock_Output();
SGM4591Q_Clock2_Output();
Simulated_IIC_2_Delay();
}
......@@ -196,7 +196,7 @@ uint8_t Simulated_IIC_2_Receive_Data(void)
Data = 0;
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
......@@ -205,17 +205,17 @@ uint8_t Simulated_IIC_2_Receive_Data(void)
Data <<= 1;
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// Data |= SIMULATED_IIC_2_IN_SDA;
Data |= SGM4591Q_Data_Input_Value();
Data |= SGM4591Q_Data2_Input_Value();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
SGM4591Q_Clock_Output();
SGM4591Q_Clock2_Output();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
}
......@@ -242,24 +242,24 @@ void Simulated_IIC_2_Transmit_ACK(uint8_t ACK)
if (ACK != 0U)
{
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data_Input();
SGM4591Q_Data2_Input();
}
else
{
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_2_OUT_SDA = 0;
SGM4591Q_Data_Output_Low();
SGM4591Q_Data2_Output_Low();
}
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock_Input();
SGM4591Q_Clock2_Input();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
SGM4591Q_Clock_Output();
SGM4591Q_Clock2_Output();
Simulated_IIC_2_Delay();
}
......
#include "Simulated_IIC_3_Master.h"
#include "Port_Cfg.h"
#include "Port.h"
#include "Dio.h"
uint8_t u8SimulatedIIC3ReceivedACK;
/*
SDA:P22-3
SCL:P22-4
*/
/*时钟输入*/
void SGM4591Q_Clock3_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup21_PortPin6, PORT_PIN_IN);
}
/*时钟输出低*/
void SGM4591Q_Clock3_Output(void)
{
Port_SetPinDirection(Port_Config_PortGroup21_PortPin6, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P21_06, STD_LOW);
}
/*数据设置输入*/
void SGM4591Q_Data3_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup21_PortPin7, PORT_PIN_IN);
}
/*数据输入高低电平*/
uint8_t SGM4591Q_Data3_Input_Value(void)
{
uint8_t Data;
Data = Dio_ReadChannel(Port_Config_PortGroup21_PortPin7);
return Data;
}
/*数据输出低*/
void SGM4591Q_Data3_Output_Low(void)
{
Port_SetPinDirection(Port_Config_PortGroup21_PortPin7, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P21_07, STD_LOW);
}
/******************************************************************************
函数名:IIC_Init
功 能:初始化IIC总线
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_3_Init(void)
{
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_INVALID_ACK;
}
/******************************************************************************
函数名:IIC_Start
功 能:在IIC总线上发送起始信号,发起一次IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_3_Start(void)
{
u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_INVALID_ACK;
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_3_OUT_SDA = 0;
SGM4591Q_Data3_Output_Low();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_3_SCL = 0;
SGM4591Q_Clock3_Output();
Simulated_IIC_3_Delay();
}
/******************************************************************************
函数名:IIC_Stop
功 能:在IIC总线上发送停止信号,终止当前IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_3_Stop(void)
{
u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_INVALID_ACK;
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_3_OUT_SDA = 0;
SGM4591Q_Data3_Output_Low();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
}
/******************************************************************************
函数名:IIC_Transmit_Data
功 能:向IIC总线上发送1字节数据
参 数:Data:发送的数据
返回值:总线上器件的确认(ACK) 0 - ACK 1 - NAK
******************************************************************************/
void Simulated_IIC_3_Transmit_Data(uint8_t Data)
{
uint8_t i;
u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_INVALID_ACK;
for (i = 0; i < 8; i++)
{
if ((Data & 0x80) != 0U)
{
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data3_Input();
}
else
{
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_3_OUT_SDA = 0;
SGM4591Q_Data3_Output_Low();
}
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_3_SCL = 0;
SGM4591Q_Clock3_Output();
Simulated_IIC_3_Delay();
Data <<= 1;
}
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_IN_SDA;
u8SimulatedIIC3ReceivedACK = SGM4591Q_Data3_Input_Value();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_3_SCL = 0;
SGM4591Q_Clock3_Output();
Simulated_IIC_3_Delay();
}
/******************************************************************************
函数名:IIC_Receive_Data
功 能:从IIC总线上接收1字节数据
参 数:无
返回值:接收到的数据
******************************************************************************/
uint8_t Simulated_IIC_3_Receive_Data(void)
{
uint8_t i;
uint8_t Data;
Data = 0;
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
for (i = 0; i < 8; i++)
{
Data <<= 1;
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// Data |= SIMULATED_IIC_3_IN_SDA;
Data |= SGM4591Q_Data3_Input_Value();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_3_SCL = 0;
SGM4591Q_Clock3_Output();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
}
return Data;
}
/******************************************************************************
函数名:IIC_Transmit_ACK
功 能:向IIC总线上发送确认信号
参 数:ACK:确认信号的类型: SIMULATED_IIC_3_ACK 肯定应答
IIC_NAK 否定应答
返回值:无
******************************************************************************/
void Simulated_IIC_3_Transmit_ACK(uint8_t ACK)
{
u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_INVALID_ACK;
if (ACK > SIMULATED_IIC_3_NAK)
{
return;
}
if (ACK != 0U)
{
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data3_Input();
}
else
{
// SIMULATED_IIC_3_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_3_OUT_SDA = 0;
SGM4591Q_Data3_Output_Low();
}
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock3_Input();
Simulated_IIC_3_Delay();
Simulated_IIC_3_Delay();
// SIMULATED_IIC_3_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_3_SCL = 0;
SGM4591Q_Clock3_Output();
Simulated_IIC_3_Delay();
}
/******************************************************************************
函数名:IIC_Receive_ACK
功 能:获取从总线上接收到的确认信号
参 数:无
返回值:总线上器件的确认信号类型:Simulated_IIC_ACK 肯定应答
SIMULATED_IIC_3_NAK 否定应答
IIC_INVALID_ACK 无效的应答信号(应答信号还未收到)
******************************************************************************/
uint8_t Simulated_IIC_3_Receive_ACK(void)
{
uint8_t ACK;
ACK = u8SimulatedIIC3ReceivedACK;
u8SimulatedIIC3ReceivedACK = SIMULATED_IIC_3_INVALID_ACK;
return ACK;
}
/******************************************************************************
函数名:IIC_Delay
功 能:延时5us,用于收发过程中的时序控制
注意:必须调整IIC_5us_DELAY_CALIBRATION参数校准延时时间在5us左右
参 数:ACK:确认信号的类型 0 - ACK 1 - NAK
返回值:无
******************************************************************************/
void Simulated_IIC_3_Delay(void)
{
uint8_t i;
for (i = 0; i < SIMULATED_IIC_3_FREQ_CALIBRATION; i++)
{
NOP();
}
}
#ifndef SIMULATED_IIC_3_MASTER_H__
#define SIMULATED_IIC_3_MASTER_H__
#include "TYW_stdint.h"
/******************************************************************************
1us延时校准
******************************************************************************/
#define SIMULATED_IIC_3_FREQ_CALIBRATION 80U
/******************************************************************************
确认信号
******************************************************************************/
#define SIMULATED_IIC_3_ACK 0U // 肯定应答
#define SIMULATED_IIC_3_NAK 1U // 否定应答
#define SIMULATED_IIC_3_INVALID_ACK 2U // 无效的应答信号(应答信号还未收到)
/******************************************************************************
函数声明
******************************************************************************/
void Simulated_IIC_3_Init(void);
void Simulated_IIC_3_Start(void);
void Simulated_IIC_3_Stop(void);
void Simulated_IIC_3_Transmit_Data(uint8_t Data);
uint8_t Simulated_IIC_3_Receive_Data(void);
void Simulated_IIC_3_Transmit_ACK(uint8_t ACK);
uint8_t Simulated_IIC_3_Receive_ACK(void);
void Simulated_IIC_3_Delay(void);
/*void Simulated_IIC_3_Slave_Service(void);*/
#endif
\ No newline at end of file
#include "Simulated_IIC_4_Master.h"
#include "Port_Cfg.h"
#include "Port.h"
#include "Dio.h"
uint8_t u8SimulatedIIC4ReceivedACK;
/*
SDA:P22-3
SCL:P22-4
*/
/*时钟输入*/
void SGM4591Q_Clock4_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin0, PORT_PIN_IN);
}
/*时钟输出低*/
void SGM4591Q_Clock4_Output(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin0, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P22_00, STD_LOW);
}
/*数据设置输入*/
void SGM4591Q_Data4_Input(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin1, PORT_PIN_IN);
}
/*数据输入高低电平*/
uint8_t SGM4591Q_Data4_Input_Value(void)
{
uint8_t Data;
Data = Dio_ReadChannel(Port_Config_PortGroup22_PortPin1);
return Data;
}
/*数据输出低*/
void SGM4591Q_Data4_Output_Low(void)
{
Port_SetPinDirection(Port_Config_PortGroup22_PortPin1, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P22_01, STD_LOW);
}
/******************************************************************************
函数名:IIC_Init
功 能:初始化IIC总线
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_4_Init(void)
{
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_INVALID_ACK;
}
/******************************************************************************
函数名:IIC_Start
功 能:在IIC总线上发送起始信号,发起一次IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_4_Start(void)
{
u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_INVALID_ACK;
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_4_OUT_SDA = 0;
SGM4591Q_Data4_Output_Low();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_4_SCL = 0;
SGM4591Q_Clock4_Output();
Simulated_IIC_4_Delay();
}
/******************************************************************************
函数名:IIC_Stop
功 能:在IIC总线上发送停止信号,终止当前IIC通信
参 数:无
返回值:无
******************************************************************************/
void Simulated_IIC_4_Stop(void)
{
u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_INVALID_ACK;
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_4_OUT_SDA = 0;
SGM4591Q_Data4_Output_Low();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
}
/******************************************************************************
函数名:IIC_Transmit_Data
功 能:向IIC总线上发送1字节数据
参 数:Data:发送的数据
返回值:总线上器件的确认(ACK) 0 - ACK 1 - NAK
******************************************************************************/
void Simulated_IIC_4_Transmit_Data(uint8_t Data)
{
uint8_t i;
u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_INVALID_ACK;
for (i = 0; i < 8; i++)
{
if ((Data & 0x80) != 0U)
{
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data4_Input();
}
else
{
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_4_OUT_SDA = 0;
SGM4591Q_Data4_Output_Low();
}
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_4_SCL = 0;
SGM4591Q_Clock4_Output();
Simulated_IIC_4_Delay();
Data <<= 1;
}
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_IN_SDA;
u8SimulatedIIC4ReceivedACK = SGM4591Q_Data4_Input_Value();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_4_SCL = 0;
SGM4591Q_Clock4_Output();
Simulated_IIC_4_Delay();
}
/******************************************************************************
函数名:IIC_Receive_Data
功 能:从IIC总线上接收1字节数据
参 数:无
返回值:接收到的数据
******************************************************************************/
uint8_t Simulated_IIC_4_Receive_Data(void)
{
uint8_t i;
uint8_t Data;
Data = 0;
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
SGM4591Q_Data4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
for (i = 0; i < 8; i++)
{
Data <<= 1;
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// Data |= SIMULATED_IIC_4_IN_SDA;
Data |= SGM4591Q_Data4_Input_Value();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_4_SCL = 0;
SGM4591Q_Clock4_Output();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
}
return Data;
}
/******************************************************************************
函数名:IIC_Transmit_ACK
功 能:向IIC总线上发送确认信号
参 数:ACK:确认信号的类型: SIMULATED_IIC_4_ACK 肯定应答
IIC_NAK 否定应答
返回值:无
******************************************************************************/
void Simulated_IIC_4_Transmit_ACK(uint8_t ACK)
{
u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_INVALID_ACK;
if (ACK > SIMULATED_IIC_4_NAK)
{
return;
}
if (ACK != 0U)
{
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
SGM4591Q_Data4_Input();
}
else
{
// SIMULATED_IIC_4_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_4_OUT_SDA = 0;
SGM4591Q_Data4_Output_Low();
}
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
SGM4591Q_Clock4_Input();
Simulated_IIC_4_Delay();
Simulated_IIC_4_Delay();
// SIMULATED_IIC_4_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_4_SCL = 0;
SGM4591Q_Clock4_Output();
Simulated_IIC_4_Delay();
}
/******************************************************************************
函数名:IIC_Receive_ACK
功 能:获取从总线上接收到的确认信号
参 数:无
返回值:总线上器件的确认信号类型:Simulated_IIC_ACK 肯定应答
SIMULATED_IIC_4_NAK 否定应答
IIC_INVALID_ACK 无效的应答信号(应答信号还未收到)
******************************************************************************/
uint8_t Simulated_IIC_4_Receive_ACK(void)
{
uint8_t ACK;
ACK = u8SimulatedIIC4ReceivedACK;
u8SimulatedIIC4ReceivedACK = SIMULATED_IIC_4_INVALID_ACK;
return ACK;
}
/******************************************************************************
函数名:IIC_Delay
功 能:延时5us,用于收发过程中的时序控制
注意:必须调整IIC_5us_DELAY_CALIBRATION参数校准延时时间在5us左右
参 数:ACK:确认信号的类型 0 - ACK 1 - NAK
返回值:无
******************************************************************************/
void Simulated_IIC_4_Delay(void)
{
uint8_t i;
for (i = 0; i < SIMULATED_IIC_4_FREQ_CALIBRATION; i++)
{
NOP();
}
}
#ifndef SIMULATED_IIC_4_MASTER_H__
#define SIMULATED_IIC_4_MASTER_H__
#include "TYW_stdint.h"
/******************************************************************************
1us延时校准
******************************************************************************/
#define SIMULATED_IIC_4_FREQ_CALIBRATION 80U
/******************************************************************************
确认信号
******************************************************************************/
#define SIMULATED_IIC_4_ACK 0U // 肯定应答
#define SIMULATED_IIC_4_NAK 1U // 否定应答
#define SIMULATED_IIC_4_INVALID_ACK 2U // 无效的应答信号(应答信号还未收到)
/******************************************************************************
函数声明
******************************************************************************/
void Simulated_IIC_4_Init(void);
void Simulated_IIC_4_Start(void);
void Simulated_IIC_4_Stop(void);
void Simulated_IIC_4_Transmit_Data(uint8_t Data);
uint8_t Simulated_IIC_4_Receive_Data(void);
void Simulated_IIC_4_Transmit_ACK(uint8_t ACK);
uint8_t Simulated_IIC_4_Receive_ACK(void);
void Simulated_IIC_4_Delay(void);
/*void Simulated_IIC_4_Slave_Service(void);*/
#endif
\ No newline at end of file
......@@ -108,7 +108,7 @@ void Sys_100ms_Tasks(void)
ADC_4=g_u16ADCValue[i];
}
}
SGM4591Q_Control();
// SGM4591Q_Control();
// Port_SetPinDirection(Port_Config_PortGroup4_PortPin8, PORT_PIN_OUT);
Dio_WriteChannel(DioConf_DioChannel_P04_08, STD_LOW);
......
#include "init.h"
#include "Sys_Scheduler.h"
#include "Simulated_IIC_1_Master.h"
#include "Simulated_IIC_2_Master.h"
#include "Simulated_IIC_3_Master.h"
#include "Simulated_IIC_4_Master.h"
#include "MC33984EHFK.h"
#define ADC_MODULE_SAMPLE//sophia add
......@@ -448,7 +451,10 @@ void Sys_Startup_Init(void)
************************** SPI module test ***********************************
*****************************************************************************/
Simulated_IIC_1_Init( );
Simulated_IIC_2_Init( );
Simulated_IIC_3_Init( );
Simulated_IIC_4_Init( );
MC33984EHFK_Init( );
#ifdef SPI_MODULE_SAMPLE
......
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