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

perf: TCA9539完成硬件联调

parent 4c2bb47e
#include "TCA9539.h"
#include "Simulated_IIC_2_Master.h"
/*发送*/
void TCA9539_IIC_Send(uint8_t Address,uint8_t Register,uint8_t Function)
void TCA9539_IIC_Send(uint8_t Address, uint8_t Register, uint8_t Function)
{
uint8_t u8Ack;
/*开始*/
Simulated_IIC_2_Start();
/*地址*/
Simulated_IIC_2_Transmit_Data(Address);
/*ACK*/
u8Ack=Simulated_IIC_2_Receive_ACK();
/*寄存器*/
Simulated_IIC_2_Transmit_Data(Register);
/*控制数据*/
Simulated_IIC_2_Transmit_Data(Function);
/*停止*/
Simulated_IIC_2_Stop();
/*开始*/
Simulated_IIC_2_Start();
/*地址*/
Simulated_IIC_2_Transmit_Data(Address);
/*ACK*/
u8Ack = Simulated_IIC_2_Receive_ACK();
/*寄存器*/
Simulated_IIC_2_Transmit_Data(Register);
/*控制数据*/
Simulated_IIC_2_Transmit_Data(Function);
/*停止*/
Simulated_IIC_2_Stop();
}
/*接收*/
void TCA9539_IIC_Receive(void)
......@@ -25,14 +24,71 @@ void TCA9539_IIC_Receive(void)
;
}
uint16_t ADC_4=0;
uint8_t TCA9539_Init_Once = 0;
/*所有引脚设置为输出*/
void TCA9539_Init(void);
void TCA9539_Init(void)
{
TCA9539_IIC_Send(0xEA, 0x06, 0);
TCA9539_IIC_Send(0xEA, 0x07, 0);
TCA9539_IIC_Send(0xE8, 0x06, 0);
TCA9539_IIC_Send(0xE8, 0x07, 0);
}
uint8_t TCA9539_U7_Out_P0 = 0xFF;
uint8_t TCA9539_U7_Out_Keep_P0 = 0x00;
uint8_t TCA9539_U7_Out_P1 = 0xFF;
uint8_t TCA9539_U7_Out_Keep_P1 = 0x00;
uint8_t TCA9539_U9_Out_P0 = 0xFF;
uint8_t TCA9539_U9_Out_Keep_P0 = 0x00;
uint8_t TCA9539_U9_Out_P1 = 0xFF;
uint8_t TCA9539_U9_Out_Keep_P1 = 0x00;
void TCA9539_Control(void)
{
if (TCA9539_Init_Once == 0)
{
TCA9539_Init_Once = 1;
TCA9539_Init();
}
if (ADC_4 > 2000) /*U9:03/07拉低*/
{
TCA9539_U9_Out_P0 = 0x77;
}
// if (ADC_4 < 1800) /*U9:03/07恢复*/
// {
// TCA9539_U9_Out_P0 = 0xFF;
// }
if (TCA9539_U7_Out_Keep_P0 != TCA9539_U7_Out_P0)
{
TCA9539_IIC_Send(0xEA, 0x02, TCA9539_U7_Out_P0);
TCA9539_U7_Out_Keep_P0 = TCA9539_U7_Out_P0;
}
if (TCA9539_U7_Out_Keep_P1 != TCA9539_U7_Out_P1)
{
TCA9539_IIC_Send(0xEA, 0x02, TCA9539_U7_Out_P1);
TCA9539_U7_Out_Keep_P1 = TCA9539_U7_Out_P1;
}
if (TCA9539_U9_Out_Keep_P0 != TCA9539_U9_Out_P0)
{
TCA9539_IIC_Send(0xE8, 0x02, TCA9539_U9_Out_P0);
TCA9539_U9_Out_Keep_P0 = TCA9539_U9_Out_P0;
}
if (TCA9539_U9_Out_Keep_P1 != TCA9539_U9_Out_P1)
{
TCA9539_IIC_Send(0xE8, 0x02, TCA9539_U9_Out_P1);
TCA9539_U9_Out_Keep_P1 = TCA9539_U9_Out_P1;
}
}
#include "TYW_stdint.h"
extern uint16_t ADC_4;
void TCA9539_IIC_Send(uint8_t Address,uint8_t Register,uint8_t Function);
void TCA9539_Control(void);
/******************************************************************************
文 件 名:Simulated_IIC_Master.c
功能描述:IO端口模拟的IIC(I2C)主机函数库文件
作 者:张暄
版 本:V1.0
日 期:2016.12.21
******************************************************************************/
#include "Simulated_IIC_2_Master.h"
#include "Port_Cfg.h"
#include "Port.h"
......@@ -44,7 +36,7 @@ uint8_t TCA9539_Data_Input_Value(void)
{
uint8_t Data;
Data= Dio_ReadChannel(Port_Config_PortGroup22_PortPin3);
Data = Dio_ReadChannel(Port_Config_PortGroup22_PortPin3);
return Data;
}
......@@ -65,13 +57,13 @@ void Simulated_IIC_2_Init(void)
{
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
TCA9539_Data_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
}
......@@ -88,24 +80,24 @@ void Simulated_IIC_2_Start(void)
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
TCA9539_Data_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
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;
TCA9539_Data_Output_Low();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
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;
TCA9539_Clock_Output();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
}
/******************************************************************************
......@@ -121,18 +113,18 @@ void Simulated_IIC_2_Stop(void)
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_OUT; // SDA输出0,此时SDA = 0
// SIMULATED_IIC_2_OUT_SDA = 0;
TCA9539_Data_Output_Low();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
TCA9539_Data_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
}
/******************************************************************************
......@@ -147,9 +139,9 @@ void Simulated_IIC_2_Transmit_Data(uint8_t Data)
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
for ( i = 0; i < 8; i++ )
for (i = 0; i < 8; i++)
{
if ( (Data & 0x80) != 0U )
if ((Data & 0x80) != 0U)
{
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
TCA9539_Data_Input();
......@@ -160,31 +152,31 @@ void Simulated_IIC_2_Transmit_Data(uint8_t Data)
// SIMULATED_IIC_2_OUT_SDA = 0;
TCA9539_Data_Output_Low();
}
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
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;
TCA9539_Clock_Output();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Data <<= 1;
}
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
TCA9539_Data_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_IN_SDA;
u8SimulatedIIC2ReceivedACK = TCA9539_Data_Input_Value();
......@@ -192,7 +184,7 @@ void Simulated_IIC_2_Transmit_Data(uint8_t Data)
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
TCA9539_Clock_Output();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
}
/******************************************************************************
......@@ -210,18 +202,18 @@ uint8_t Simulated_IIC_2_Receive_Data(void)
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // 设置SDA为输入状态
TCA9539_Data_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
for ( i = 0; i < 8; i++ )
for (i = 0; i < 8; i++)
{
Data <<= 1;
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
// Data |= SIMULATED_IIC_2_IN_SDA;
Data |= TCA9539_Data_Input_Value();
......@@ -229,8 +221,8 @@ uint8_t Simulated_IIC_2_Receive_Data(void)
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_OUT; // SCL输出0,此时SCL = 0
// SIMULATED_IIC_2_SCL = 0;
TCA9539_Clock_Output();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
Simulated_IIC_2_Delay();
}
return Data;
......@@ -247,12 +239,12 @@ void Simulated_IIC_2_Transmit_ACK(uint8_t ACK)
{
u8SimulatedIIC2ReceivedACK = SIMULATED_IIC_2_INVALID_ACK;
if ( ACK > SIMULATED_IIC_2_NAK )
if (ACK > SIMULATED_IIC_2_NAK)
{
return;
}
if ( ACK != 0U )
if (ACK != 0U)
{
// SIMULATED_IIC_2_SDA_DIR = GPIO_DIR_IN; // SDA被设置为输入,IO口为高阻状态,总线上SDA信号由上拉电阻拉高,此时SDA = 1
TCA9539_Data_Input();
......@@ -263,17 +255,17 @@ void Simulated_IIC_2_Transmit_ACK(uint8_t ACK)
// SIMULATED_IIC_2_OUT_SDA = 0;
TCA9539_Data_Output_Low();
}
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
// SIMULATED_IIC_2_SCL_DIR = GPIO_DIR_IN; // SCL被设置为输入,IO口为高阻状态,总线上SCL信号由上拉电阻拉高,此时SCL = 1
TCA9539_Clock_Input();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay( );
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;
TCA9539_Clock_Output();
Simulated_IIC_2_Delay( );
Simulated_IIC_2_Delay();
}
/******************************************************************************
......@@ -305,8 +297,8 @@ void Simulated_IIC_2_Delay(void)
{
uint8_t i;
for ( i = 0; i < SIMULATED_IIC_2_FREQ_CALIBRATION; i++ )
for (i = 0; i < SIMULATED_IIC_2_FREQ_CALIBRATION; i++)
{
NOP( );
NOP();
}
}
/******************************************************************************
文 件 名:Simulated_IIC_Master.h
功能描述:IO端口模拟的IIC(I2C)主机函数库头文件
作 者:张暄
版 本:V1.0
日 期:2016.12.21
******************************************************************************/
#ifndef SIMULATED_IIC_2_MASTER_H__
#define SIMULATED_IIC_2_MASTER_H__
......@@ -19,9 +11,9 @@
/******************************************************************************
确认信号
******************************************************************************/
#define SIMULATED_IIC_2_ACK 0U //肯定应答
#define SIMULATED_IIC_2_NAK 1U //否定应答
#define SIMULATED_IIC_2_INVALID_ACK 2U //无效的应答信号(应答信号还未收到)
#define SIMULATED_IIC_2_ACK 0U // 肯定应答
#define SIMULATED_IIC_2_NAK 1U // 否定应答
#define SIMULATED_IIC_2_INVALID_ACK 2U // 无效的应答信号(应答信号还未收到)
/******************************************************************************
函数声明
......
......@@ -76,9 +76,6 @@ uint16_t ADC_Input_Voltage_Calc(uint16_t u16ADCSample, uint16_t u16ADCRes, uint1
return u16Result;
}
uint8_t aaaaaaData;
uint8_t abbaaaData;
uint8_t sdfa=0;
void Sys_100ms_Tasks(void)
{
// Dio_FlipChannel(DioConf_DioChannel_P56DioChannel);
......@@ -87,28 +84,27 @@ void Sys_100ms_Tasks(void)
// if (g_u8secstatus == 10)
// {
// g_u8secstatus = 0;
g_u8cnt++;
// g_u8cnt++;
// }
Dio_FlipChannel(DioConf_DioChannel_P02_08);
/* Starts the conversion of group */
Adc_StartGroupConversion(AdcConf_AdcGroup_AdcGroup_000 );
Adc_StartGroupConversion(AdcConf_AdcGroup_AdcGroup_000);
while (ADC_STREAM_COMPLETED != Adc_GetGroupStatus(AdcConf_AdcGroup_AdcGroup_000 ));
while (ADC_STREAM_COMPLETED != Adc_GetGroupStatus(AdcConf_AdcGroup_AdcGroup_000))
;
Adc_ReadGroup(AdcConf_AdcGroup_AdcGroup_000, g_u16ADCValue);
for (uint8_t i = 0; i < 16; i++)
{
g_u16ADCValue[i] = ADC_Input_Voltage_Calc(g_u16ADCValue[i], 4096, 5000);
if (i==4)
{
ADC_4=g_u16ADCValue[i];
}
if (sdfa==0)
{
sdfa=1;
TCA9539_IIC_Send(0xEA,0x06,0);
TCA9539_IIC_Send(0xEA,0x02,0xFF);
}
}
TCA9539_Control();
// aaaaaaData= Dio_ReadChannel(Port_Config_PortGroup22_PortPin4);
// abbaaaData= Dio_ReadChannel(Port_Config_PortGroup22_PortPin3);
// Port_SetPinDirection(Port_Config_PortGroup22_PortPin3, PORT_PIN_IN);
......
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