2021-02-07

#ifndef _TCK9539_h_
#define _TCK9539_h_

/************************** I2C Address ***************************************/
#define TCA9539_ADDRESS		0x76 		// I2C Address 0100 00 + ADDR + R/W
											// ADDR tied to P2.2 of LaunchPad
/************************** I2C Registers *************************************/
#define TCA9539_INPUT_REG0 	0x00		// Input status register
#define TCA9539_OUTPUT_REG0	0x02		// Output register to change state of output BIT set to 1, output set HIGH
#define TCA9539_POLARITY_REG0 	0x04		// Polarity inversion register. BIT '1' inverts input polarity of register 0x00
#define TCA9539_CONFIG_REG0		0x06		// Configuration register. BIT = '1' sets port to input BIT = '0' sets port to output
//pgoog 表示输入电压范围是否在正常范围
#define TCA9539_CHG_nCE			(1<<0)  //0 允许充电,输出低电平表示允许充电
#define TCA9539_nCHG				(1<<1)  //<---充电状态指示
#define TCA9539_RF_nRST			(1<<2)  //1
#define TCA9539_MOTOR				(1<<3)  //0
#define TCA9539_BUZZER			(1<<4)  //0
#define TCA9539_LED0				(1<<5)  //1
#define TCA9539_LED1				(1<<6)  //1

#define TCA9539_BLED_G			(1<<8) //0 <---P10----
#define TCA9539_BLED_R			(1<<9)  //0
#define TCA9539_BLED_B			(1<<10)  //0

#define TCA9539_KEY_UP				(1<<11) //1 <---
#define TCA9539_KEY_DOWN			(1<<12) //1 <---
#define TCA9539_KEY_RIGHT			(1<<13) //1 <---
#define TCA9539_KEY_LEFT			(1<<14) //1 <---
#define TCA9539_KEY_READ			(1<<15) //1 <---P17

struct TCA9539_sBit{
       unsigned char B0:1;
       unsigned char B1:1;
       unsigned char B2:1;
       unsigned char B3:1;
       unsigned char B4:1;
       unsigned char B5:1;
       unsigned char B6:1;
       unsigned char B7:1;
};

union TCA9539_uInputPort{
	unsigned char all;
	struct TCA9539_sBit bit;
};

struct TCA9539_sInput{
	union TCA9539_uInputPort P0;
	union TCA9539_uInputPort P1;
};


union TCA9539_uInput{
	unsigned short all;
	struct TCA9539_sInput Port;
};



union TCA9539_uOutputP0{
	unsigned char 		all;
	struct TCA9539_sBit	bit;
};

union TCA9539_uOutputP1{
	unsigned char 		all;
	struct TCA9539_sBit	bit;
};

struct TCA9539_sOutput{
	union TCA9539_uOutputP0	P0;
	union TCA9539_uOutputP1	P1;
};

union TCA9539_uOutput{
	unsigned short	all;
	struct TCA9539_sOutput	Port;
};

union TCA9539_uPolarityInversionP0{
	unsigned char all;
	struct TCA9539_sBit bit;
};

union  TCA9539_uPolarityInversionP1{
	unsigned char	all;
	struct TCA9539_sBit bit;
};

struct TCA9539_sPolarityInversion{
	union TCA9539_uPolarityInversionP0 P0;
	union TCA9539_uPolarityInversionP1 P1;
};

union TCA9539_uPolarityInversion{
	unsigned short all;
	struct TCA9539_sPolarityInversion Port;
};

union TCA9539_uConfigP0{
	unsigned char all;
	struct TCA9539_sBit bit;
};

union  TCA9539_uConfigP1{
	unsigned char	all;
	struct TCA9539_sBit bit;
};

struct TCA9539_sConfig{
	union TCA9539_uConfigP0 P0;
	union TCA9539_uConfigP1 P1;
};

union TCA9539_uConfig{
	unsigned short all;
	struct TCA9539_sConfig Port;
};

struct sTCA9539Regs{
	union TCA9539_uInput 				Input;
	union TCA9539_uOutput 				Output;
	union TCA9539_uPolarityInversion 	PolarityInversion;
	union TCA9539_uConfig				Config;
};

typedef struct {
	union TCA9539_uInput 				Input;
	union TCA9539_uOutput				Output;
	union TCA9539_uPolarityInversion	PolarityInversion;
	union TCA9539_uConfig				Config;
} TCA9539Regs;

void TCA9539WriteConfig(TCA9539Regs * Regs);
void TCA9539WriteOutput(TCA9539Regs * Regs);
void TCA9539WritePolarity(TCA9539Regs * Regs);

void TCA9539InitDefault(TCA9539Regs* Regs);
unsigned char TCA9539InitI2CReg(TCA9539Regs* Regs);
void TCA9539ReadInputReg(void);


#endif
#include "stm32l5xx_hal.h"
#include "tck9539.h"
#include "string.h"

#define I2C_OPERATION_SUCCESSFUL	1
#define I2C_OPERATION_FAIL	0
#define TCK9539_ADDR	0xe8

#define TCK9539_RST(x)    x==1 ?  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET):HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET)

char NACK = 0;
extern I2C_HandleTypeDef hi2c3;
extern void DelayMs(volatile unsigned int ms);
TCA9539Regs My_TCA9539Regs;

//void I2C_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,uint16_t NumByteToWrite){
//  HAL_I2C_Master_Transmit(&hi2c3, (uint16_t)DeviceAddr, pBuffer, NumByteToWrite, 1000);//1000ms 1s 100K字节s
//}
 
//void I2C_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead){
 // uint8_t Register[3]={RegisterAddr};
//	HAL_I2C_Mem_Read(&hi2c3,DeviceAddr,RegisterAddr,I2C_MEMADD_SIZE_8BIT,pBuffer,NumByteToRead,0xff);
 // HAL_I2C_Master_Transmit(&hi2c3, (uint16_t)DeviceAddr, &RegisterAddr, 1, 1000);
 // HAL_I2C_Master_Receive(&hi2c3, (uint16_t)DeviceAddr|1, pBuffer, NumByteToRead, 1000);
//}
void I2C_Write (unsigned char byte_Count, unsigned char Slave_Address, unsigned char Register_Address, unsigned char Register_Data[], unsigned char offset)
{

}
void I2C_Read (unsigned char byte_Count, unsigned char Slave_Address, unsigned char Register_Address, unsigned char* read_buffer)
{

}
unsigned int I2C_Read_Byte ( unsigned char Slave_Address, unsigned char Register_Address)
{
	   unsigned int MST_Data = 0;
	
    return MST_Data;
}
/*
#define TCA9539_CHG_nCE			(1<<0)
#define TCA9539_nCHG				(1<<1)
#define TCA9539_RF_nRST			(1<<2)
#define TCA9539_MOTOR				(1<<3)
#define TCA9539_BUZZER			(1<<4)
#define TCA9539_LED0				(1<<5)
#define TCA9539_LED1				(1<<6)

#define TCA9539_BLED_G			(1<<8) //10----
#define TCA9539_BLED_R			(1<<9)
#define TCA9539_BLED_B			(1<<10)

#define TCA9539_KEY_UP				(1<<11)
#define TCA9539_KEY_DOWN			(1<<12)
#define TCA9539_KEY_RIGHT			(1<<13)
#define TCA9539_KEY_LEFT			(1<<14)
#define TCA9539_KEY_READ			(1<<15)   //17----
*/
// ****************************************************************************
//! @fn          void TCA9539InitDefault(TCA9539Regs* Regs)
//! @brief
//!				 Initializes the confRegs structure which is
//!              a local mirror of the TPL7200 config registers
//!              additional TPL7200writeConfigRegisters(confRegs) function call
//! 			 is needed in order to get the TPL7200 registers updated
//!
//! TODO 		 Implement I2C return (success/failure)
// ****************************************************************************
void TCA9539InitDefault(TCA9539Regs* Regs){

	Regs->Output.all = ~(TCA9539_CHG_nCE|TCA9539_MOTOR|TCA9539_BUZZER|TCA9539_BLED_G|TCA9539_BLED_R|TCA9539_BLED_B);
	
	Regs->PolarityInversion.all = 0x0000;
	//输入输出接口配置	
	Regs->Config.all = (TCA9539_nCHG|TCA9539_KEY_UP|TCA9539_KEY_DOWN|TCA9539_KEY_RIGHT|TCA9539_KEY_LEFT|TCA9539_KEY_READ);//1输入,0默认是输出
}


// ****************************************************************************
//! @fn          void TCA9539InitI2CReg(TCA9539Regs* Regs)
//! @brief
//!
//! TODO 		 Implement I2C return (success/failure)
// ****************************************************************************
unsigned char TCA9539InitI2CReg(TCA9539Regs* Regs){
	
	HAL_I2C_Mem_Write(&hi2c3, (uint16_t)TCK9539_ADDR, TCA9539_CONFIG_REG0,1, (unsigned char*)&Regs->Config,2, 1000);
	HAL_I2C_Mem_Write(&hi2c3, (uint16_t)TCK9539_ADDR, TCA9539_OUTPUT_REG0,1, (unsigned char*)&Regs->Output,2, 1000);
	HAL_I2C_Mem_Write(&hi2c3, (uint16_t)TCK9539_ADDR, TCA9539_POLARITY_REG0,1, (unsigned char*)&Regs->PolarityInversion,2, 1000);
	
	return 0; 
	
}

// ****************************************************************************
//! @fn          void TCA9539ReadInputReg(TCA9539Regs* Regs)
//! @brief
//!
//! TODO 		 Implement I2C return (success/failure)
// ****************************************************************************
void TCA9539ReadInputReg(void){
		HAL_I2C_Mem_Read(&hi2c3,(uint16_t)TCK9539_ADDR,TCA9539_INPUT_REG0,I2C_MEMADD_SIZE_8BIT,(unsigned char*)&My_TCA9539Regs.Input,2,0xff);
}
void EXTI9_IRQHandler(void)
{
	My_TCA9539Regs.Output.Port.P1.bit.B0 = 1;
	TCA9539WriteOutput(&My_TCA9539Regs);
	DelayMs(500);	
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
	TCA9539ReadInputReg();
	
	My_TCA9539Regs.Output.Port.P1.bit.B0 = 0;
	TCA9539WriteOutput(&My_TCA9539Regs);	
}

// ****************************************************************************
//! @fn          void TCA9539InitI2CReg(TCA9539Regs* Regs)
//! @brief
//!
//! TODO 		 Implement I2C return (success/failure)
// ****************************************************************************
void TCA9539WriteReg(unsigned char address, unsigned char regaddress, unsigned short regVal)
{
	//I2C_Write(2, address, regaddress, (regVal), 0);
	if(NACK)
	{

	}

}

unsigned char TCA9539ReadReg(unsigned char address, unsigned char regaddress)
{
	//HAL_I2C_Mem_Read(&hi2c3,(uint16_t)TCK9539_ADDR,6,I2C_MEMADD_SIZE_8BIT,tmp,2,0xff);
	return (unsigned char) I2C_Read_Byte(address,regaddress);
}

void TCA9539WriteConfig(TCA9539Regs * Regs)
{
	HAL_I2C_Mem_Write(&hi2c3, (uint16_t)TCK9539_ADDR,TCA9539_CONFIG_REG0,1,(unsigned char*)&Regs->Config,2, 1000);//1000ms 1s 100K字节s		
}

void TCA9539WriteOutput(TCA9539Regs * Regs)
{
	HAL_I2C_Mem_Write(&hi2c3, (uint16_t)TCK9539_ADDR,TCA9539_OUTPUT_REG0,1,(unsigned char*)&Regs->Output,2, 1000);//1000ms 1s 100K字节s		
}

void TCA9539WritePolarity(TCA9539Regs * Regs)
{
	HAL_I2C_Mem_Write(&hi2c3, (uint16_t)TCK9539_ADDR,TCA9539_POLARITY_REG0,1,(unsigned char*)&Regs->PolarityInversion,2, 1000);//1000ms 1s 100K字节s	
}

void tck9539_init(void)
{
	TCK9539_RST(0);
	DelayMs(100);
	TCK9539_RST(1);	
	
	TCA9539InitDefault(&My_TCA9539Regs);
	TCA9539InitI2CReg(&My_TCA9539Regs);
	
	//I2C_Read(tmp,TCK9539_ADDR,0,8);
	
}
void tck9539_test(void) 
{ 	
	tck9539_init();

	while(1){
		
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值