#include "PCA9555.h"
|
uint8_t gps_led_output_state,tts_enbale_output_state,wake_up_output_state,air780e_enable_output_state,sos_enable_output_state,gps_backup_output_state,gps_power_output_state,main_ri_output_state;//1×éoutput IO¿Ú´Ó×óµ½ÓÒ1.0~1.7
|
uint8_t mcu_a_output_state,chg_g_output_state,lora_irq_output_state,lora_nrst_output_state,adc_minius_output_state,input_5v_output_state,pwr_on_output_state,pwr_enable_output_state;//2×éoutput IO¿Ú´Ó×óµ½ÓÒ0.0~0.7
|
uint8_t pca9555writedata_config[10];//ÔÝ´æ¼Ä´æÆ÷ËùÓÐÅäÖõÄÊý×é
|
uint8_t pca9555writedata_output[10];//ÔÝ´æÊä³ö¸ßµÍµçƽÅäÖõÄÊý×é
|
uint8_t pca9555writedata_input[10];//ÔÝ´æÊäÈë¼Ä´æÆ÷ËùÓÐÅäÖõÄÊý×é
|
uint8_t pca9555writedata_polarity[10];//ÔÝ´æÊäÈ뼫ÐÔ·´×ª¼Ä´æÆ÷ËùÓÐÅäÖõÄÊý×é
|
void IIC_gpio_pca_init(void)
|
{
|
io_pin_mux_set(SDA_PIN, IO_FUNC0);
|
io_pin_mux_set(SCL_PIN, IO_FUNC0);
|
|
gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1);
|
//io_open_drain_set(SDA_PIN, 1);
|
io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//Êä³ö¸ß×è̬
|
|
gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1);
|
//io_open_drain_set(SCL_PIN, 1);
|
io_pull_set(SCL_PIN , IO_HIGH_Z, IO_PULL_UP_NONE);
|
}
|
|
void IIC2_pca_Start(void)
|
{
|
//// IIC2_SDA_OUT(); //sdaÏßÊä³ö
|
// SDA_1;
|
// delay_us(10);
|
// SCL_1;
|
// delay_us(10);
|
// SDA_0;//START:when CLK is high,DATA change form high to low
|
// delay_us(10);
|
|
// IIC2_SDA_OUT(); //sdaÏßÊä³ö
|
SDA_1;
|
// delay_us(10);
|
SCL_1;
|
// delay_us(10);
|
SDA_0;//START:when CLK is high,DATA change form high to low
|
delay_us(10);
|
SCL_0;//ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý
|
}
|
void IIC_pca_Ready(void)
|
{
|
|
SCL_1;
|
delay_us(10);
|
SDA_1;
|
delay_us(10);
|
}
|
//²úÉúIICÍ£Ö¹ÐźÅ
|
void IIC2_pca_Stop(void)
|
{
|
|
// SDA_0;//STOP:when CLK is high DATA change form low to high
|
//
|
// delay_us(10);
|
// SCL_1;
|
// delay_us(10);
|
// SDA_1;//·¢ËÍI2C×ÜÏß½áÊøÐźÅ
|
// delay_us(10);
|
|
SCL_0;
|
SDA_0;//sToP:when ClK is high DATA change form low to high
|
delay_us(10);
|
SCL_1;
|
//delay_us(10);
|
SDA_1;//7·¢ËÍI2C×ÜÏß½áÊøÐźÅ
|
delay_us(10);
|
}
|
//µÈ´ýÓ¦´ðÐźŵ½À´
|
//·µ»ØÖµ£º1£¬½ÓÊÕÓ¦´ðʧ°Ü
|
// 0£¬½ÓÊÕÓ¦´ð³É¹¦
|
uint8_t IIC2_Wait_pca_Ack(void)
|
{
|
uint8_t ucErrTime=0;
|
// IIC2_SDA_IN();
|
|
gpio_pin_set_dir(SDA_PIN,GPIO_DIR_IN,1); //SDAÉèÖÃΪÊäÈëµÈ´ý½ÓÊն˵ÄÓ¦´ðÐźÅ
|
SDA_1;
|
delay_us(6);
|
SCL_1;
|
delay_us(6);
|
// SDA_1;
|
// delay_us(6);
|
|
|
while(IIC2_READ_SDA)
|
{
|
ucErrTime++;
|
if(ucErrTime>250)
|
{
|
IIC2_pca_Stop();
|
gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1);
|
return 1;
|
}
|
}
|
gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 0);
|
SCL_0;//ʱÖÓÊä³ö0
|
return 0;
|
|
}
|
//²úÉúACKÓ¦´ð
|
void IIC2_pca_send_Ack(void)
|
{
|
SCL_0;
|
SDA_0;//¶ÁÈ¡SDAµçƽΪµÍÔòÓÐÓ¦´ð
|
delay_us(10);
|
SCL_1;
|
delay_us(10);
|
SCL_0;
|
}
|
//²»²úÉúACKÓ¦´ð
|
void IIC2_pca_send_NAck(void)
|
{
|
SCL_0;
|
SDA_1;//¶ÁÈ¡SDAµçƽΪ¸ßÔòÎÞÓ¦´ðÐźÅ
|
delay_us(10);
|
SCL_1;
|
delay_us(10);
|
SCL_0;
|
}
|
//IIC·¢ËÍÒ»¸ö×Ö½Ú,WRITE
|
//·µ»Ø´Ó»úÓÐÎÞÓ¦´ð
|
//1£¬ÓÐÓ¦´ð
|
//0£¬ÎÞÓ¦´ð
|
uint8_t statistic_num;
|
void IIC2_Send_pca_Byte(uint8_t txd)
|
{
|
uint8_t t;
|
// IIC2_SDA_OUT();
|
SCL_0;//ÀµÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä
|
// delay_us(10);
|
for(t=0; t<8; t++)
|
{
|
if((txd&0x80)>>7)
|
{
|
SDA_1;
|
}
|
else
|
{
|
SDA_0;
|
}
|
txd <<= 1;
|
delay_us(10);
|
SCL_1;
|
delay_us(10);
|
SCL_0;
|
delay_us(10);
|
}
|
// statistic_num=txd;
|
// SDA_1;//ÐÂÔösdaÀ¸ß
|
// delay_us(10);
|
}
|
|
//¶Á1¸ö×Ö½Ú£¬ack=1ʱ£¬·¢ËÍACK£¬ack=0£¬·¢ËÍnACK,²»ÊÇÒ»ÑùµÄ
|
uint8_t IIC2_Read_pca_Byte(unsigned char ack)
|
{
|
unsigned char i,receive=0,bit=0;
|
gpio_pin_set_dir(SDA_PIN,GPIO_DIR_IN,0); //ÉèÖÃΪÊäÈë¶ÁÈ¡µçƽ
|
// io_pull_set(SDA_PIN , IO_HIGH_Z, IO_PULL_UP_NONE);
|
for(i=0; i<8; i++ )
|
{
|
SCL_0;
|
delay_us(6);//ÐÞ¸Äʱ¼ä
|
SCL_1;
|
//receive<<=1;
|
if(IIC2_READ_SDA){
|
bit=1<<i;
|
receive|=bit;
|
}
|
delay_us(5);
|
}
|
SCL_0;
|
if(ack==2){
|
gpio_pin_set_dir(SDA_PIN,GPIO_DIR_OUT,0); //ÉèÖÃΪÊä³ö»Ö¸´ACK
|
}else{
|
gpio_pin_set_dir(SDA_PIN,GPIO_DIR_OUT,1); //ÉèÖÃΪÊä³ö»Ö¸´ACK
|
}
|
|
// io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//Êä³ö¸ß×è̬
|
// if (!ack)
|
// IIC2_pca_send_NAck();//·¢ËÍnACK
|
// else
|
// IIC2_pca_send_Ack(); //·¢ËÍACK
|
return receive;
|
}
|
|
|
/*********************************************************
|
//дpca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
low_byte дÈëоƬµÄǰ°ËλÊý¾Ý
|
high_byte дÈëоƬµÄǰºóλÊý¾Ý
|
*********************************************************/
|
//дpca9555µÚÒ»²ã£¬×îµ×²ãÇý¶¯
|
int temp_ack3,temp_ack4,temp_ack5,temp_ack6;
|
void IIC_Write_Pca9555(unsigned char addr,unsigned char reg_addr,unsigned char low_byte,unsigned char high_byte)
|
{
|
IIC2_pca_Start();
|
IIC2_Send_pca_Byte(addr & 0xfe);
|
temp_ack3=IIC2_Wait_pca_Ack();
|
IIC2_Send_pca_Byte(reg_addr);
|
temp_ack4=IIC2_Wait_pca_Ack();
|
IIC2_Send_pca_Byte(low_byte);
|
temp_ack5=IIC2_Wait_pca_Ack();
|
IIC2_Send_pca_Byte(high_byte);
|
temp_ack6=IIC2_Wait_pca_Ack();
|
IIC2_pca_Stop();
|
|
// IIC2_Start();
|
// IIC2_Send_Byte(addr & 0xfe); //·¢ËÍдÃüÁî
|
// temp_ack3=IIC2_Wait_pca_Ack();
|
// IIC2_Send_Byte(reg_addr); //·¢Ë͵ØÖ·
|
// temp_ack4=IIC2_Wait_pca_Ack();
|
// IIC2_Send_Byte(low_byte); //·¢ËÍ×Ö½Ú
|
// temp_ack5=IIC2_Wait_pca_Ack();
|
// IIC2_Send_Byte(high_byte); //·¢ËÍ×Ö½Ú
|
// temp_ack6=IIC2_Wait_pca_Ack();
|
// IIC2_Stop();//²úÉúÒ»¸öÍ£Ö¹Ìõ¼þ
|
|
}
|
/*
|
// IIC2_Start();
|
// IIC2_Send_Byte(addr & 0xfe); //·¢ËÍдÃüÁî
|
// temp_ack3=IIC2_Wait_Ack();
|
// IIC2_Send_Byte(reg_addr); //·¢Ë͵ØÖ·
|
// temp_ack4=IIC2_Wait_Ack();
|
// IIC2_Send_Byte(low_byte); //·¢ËÍ×Ö½Ú
|
// temp_ack5=IIC2_Wait_Ack();
|
// IIC2_Send_Byte(high_byte); //·¢ËÍ×Ö½Ú
|
// temp_ack6=IIC2_Wait_Ack();
|
// IIC2_Stop();//²úÉúÒ»¸öÍ£Ö¹Ìõ¼þ
|
*/
|
int temp_ack,temp_ack1,temp_ack2;
|
uint8_t temp=0;
|
void IIC_Read_Pca9555(uint8_t addr,uint8_t reg_addr,uint8_t* pBuffer,uint16_t num)
|
{
|
IIC2_pca_Start();
|
IIC2_Send_pca_Byte(addr & 0xfe);
|
temp_ack=IIC2_Wait_pca_Ack();
|
IIC2_Send_pca_Byte(reg_addr);
|
temp_ack1=IIC2_Wait_pca_Ack();
|
|
IIC2_pca_Start();
|
IIC2_Send_pca_Byte(addr | 0x01);
|
temp_ack2=IIC2_Wait_pca_Ack();
|
|
// if(num==2){
|
// pBuffer[0]=IIC2_Read_Byte(1);
|
// pBuffer[1]=IIC2_Read_Byte(0);
|
// }else{
|
// pBuffer[0]=IIC2_Read_Byte(0);
|
// }
|
|
while (num)
|
{
|
*pBuffer = IIC2_Read_pca_Byte(num);
|
if (num == 1)
|
{
|
IIC2_pca_send_NAck();
|
//IIC2_NAck();
|
}
|
else
|
{
|
IIC2_pca_send_Ack();
|
//IIC2_Ack();
|
}
|
pBuffer++;
|
num--;
|
}
|
IIC2_pca_Stop();
|
|
|
// IIC2_Start();
|
// IIC2_Send_Byte(addr & 0xfe); //·¢ËÍдÃüÁî
|
// IIC2_Wait_pca_Ack();
|
// IIC2_Send_Byte(reg_addr); //·¢ËͶÁµØÖ·
|
// IIC2_Wait_pca_Ack();
|
// IIC2_Start();
|
// IIC2_Send_Byte(0x41); //·¢ËͶÁÃüÁ½øÈë½ÓÊÕģʽ
|
// IIC2_Wait_pca_Ack();
|
// temp=IIC2_Read_Byte(0);
|
// IIC2_Stop(); //²úÉúÒ»¸öÍ£Ö¹Ìõ¼þ
|
|
}
|
|
/*дpca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯,¸Ãº¯ÊýĬÈÏÅäÖÃÊä³ö¼Ä´æÆ÷
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
data_L дÈëоƬµÄǰ°ËλÊý¾Ý
|
data_H дÈëоƬµÄǰºóλÊý¾Ý
|
*/
|
void PCA9555_write_output_port_data(unsigned char addr,unsigned char data_L,unsigned char data_H)
|
{
|
IIC_Write_Pca9555(addr,PCA9555_REG_OUT0,data_L,data_H);// PCA9555_REG_OUT0 Êä³ö¼Ä´æÆ÷0µØÖ·
|
pca9555writedata_output[0]= data_L;//±£´æ¸Ã´ÎÉèÖÃÊý¾Ý
|
pca9555writedata_output[1]= data_H;
|
}
|
|
/*дpca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯,¸Ãº¯ÊýĬÈÏÅäÖÃÊä³ö¼Ä´æÆ÷
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
data_L дÈëоƬµÄǰ°ËλÊý¾Ý
|
data_H дÈëоƬµÄǰºóλÊý¾Ý
|
*/
|
void PCA9555_write_config_port_data(unsigned char addr,unsigned char data_L,unsigned char data_H)
|
{
|
IIC_Write_Pca9555(addr,PCA9555_REG_CFG0,data_L,data_H);// PCA9555_REG_OUT0 Êä³ö¼Ä´æÆ÷0µØÖ·
|
pca9555writedata_config[0]= data_L;//±£´æ¸Ã´ÎÉèÖÃÊý¾Ý
|
pca9555writedata_config[1]= data_H;
|
}
|
/*дpca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯,¸Ãº¯ÊýĬÈÏÅäÖÃÊäÈ뼫ÐԷת¼Ä´æÆ÷ 1·×ª 2²»±ä
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
data_L дÈëоƬµÄǰ°ËλÊý¾Ý
|
data_H дÈëоƬµÄǰºóλÊý¾Ý
|
*/
|
void PCA9555_write_polarity_port_data(unsigned char addr,unsigned char data_L,unsigned char data_H)
|
{
|
IIC_Write_Pca9555(addr,PCA9555_REG_POL0,data_L,data_H);// PCA9555_REG_OUT0 Êä³ö¼Ä´æÆ÷0µØÖ·
|
pca9555writedata_polarity[0]= data_L;//±£´æ¸Ã´ÎÉèÖÃÊý¾Ý
|
pca9555writedata_polarity[1]= data_H;
|
}
|
|
/*¶Ápca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
pBuffer ¶Á³öоƬµÄÊý¾Ý 2¸öÊäÈë¼Ä´æÆ÷µÄÖµ½öÏÞÊäÈëģʽʹÓÃ
|
*/
|
void PCA9555_readdata(unsigned char addr,unsigned char* pBuffer)
|
{
|
IIC_Read_Pca9555(addr,PCA9555_REG_IN0,pBuffer,2);//2Ϊ¶Á³öоƬÊý¾Ý×éÊý£¬9555Ϊ2×é,È«²¿¶Á³ö
|
}
|
/*¶Ápca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
pBuffer ¶Á³öоƬµÄÊý¾Ý 2¸ö¼Ä´æÆ÷µÄÖµ½öÏÞÊä³öģʽ,´ËģʽϽö»Ø¸´ÊäÈëÊä³öµÄ¿ØÖÆÄ£Ê½µÄÖµ£¬¶ø·Çµçƽֵ
|
*/
|
void PCA9555_readdata_from_output_register(unsigned char addr,unsigned char* pBuffer)
|
{
|
IIC_Read_Pca9555(addr,PCA9555_REG_OUT0,pBuffer,2);//2Ϊ¶Á³öоƬÊý¾Ý×éÊý£¬9555Ϊ2×é,È«²¿¶Á³ö
|
}
|
/*¶Ápca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
pBuffer ¶Á³öоƬµÄÊý¾Ý 2¸ö¼Ä´æÆ÷µÄÖµ½öÏÞÊä³öģʽ,´ËģʽϽö»Ø¸´ÊäÈëÊä³öµÄ¿ØÖÆÄ£Ê½µÄÖµ£¬¶ø·Çµçƽֵ
|
*/
|
void PCA9555_readdata_from_polarity_register(unsigned char addr,unsigned char* pBuffer)
|
{
|
IIC_Read_Pca9555(addr,PCA9555_REG_POL0,pBuffer,2);//2Ϊ¶Á³öоƬÊý¾Ý×éÊý£¬9555Ϊ2×é,È«²¿¶Á³ö
|
}
|
/*¶Ápca9555µÚ¶þ²ãÇý¶¯£¬¿É¸¨ÖúÂß¼²»ÆÆ»µ×îµ×²ãÇý¶¯
|
addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
pBuffer ¶Á³öоƬµÄÊý¾Ý ÅäÖÃ2¸ö¼Ä´æÆ÷µÄÊýÖµ
|
*/
|
void PCA9555_readdata_from_config_register(unsigned char addr,unsigned char* pBuffer)
|
{
|
IIC_Read_Pca9555(addr,PCA9555_REG_CFG0,pBuffer,2);//2Ϊ¶Á³öоƬÊý¾Ý×éÊý£¬9555Ϊ2×é,È«²¿¶Á³ö
|
}
|
///*ÅäÖÃоƬµÄ¶ÔÓ¦¹Ü½ÅÊäÈëÊä³ö¹¦ÄÜ
|
// addr оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ·
|
// data_L дÈëоƬµÄǰ°ËλÊý¾Ý 1¸ß×迹ÊäÈë 0Êä³ö ÊäÈë¼Ä´æÆ÷ĬÈÏÉÏÀ
|
// data_H дÈëоƬµÄǰºóλÊý¾Ý
|
//*/
|
//void PCA9555_config_gpio(unsigned char addr,unsigned char data_L,unsigned char data_H)
|
//{
|
// IIC_Write_Pca9555(addr,PCA9555_REG_CFG0,data_L,data_H);// PCA9555_REG_OUT0 Êä³ö¼Ä´æÆ÷0µØÖ·
|
//}
|
|
|
/*ÉèÖÃËùÓÐÊä³ö
|
value ¿ØÖƵÄIOÊä³ö״̬ 0£ºÈ«²¿Êä³öµÍ 1£ºÈ«²¿Êä³ö¸ß
|
½öÏÞÊä³öģʽ
|
*/
|
void PCA9555_Set_All_Output(unsigned char value)
|
{
|
int i;
|
for(i=0;i<4;i++){
|
if(value==0)
|
pca9555writedata_output[i]=0;
|
else
|
pca9555writedata_output[i]=0xff;
|
}
|
PCA9555_write_output_port_data(PCA9555_DEVICE_ADDR,pca9555writedata_output[0],pca9555writedata_output[1]);//È«²¿Êä³öΪ1»ò0
|
//¶àоƬ
|
//PCA9555_writedata(PCA9555_REG_OUT0,pca9555writedata[2],pca9555writedata[3]);
|
}
|
/*ÉèÖõÚÒ»¸öоƬijһͨµÀIO¸ßµÍÊä³ö½öÏÞÊä³ö
|
num ¿ØÖƵÄIOÐòºÅ 1~16
|
value ¿ØÖƵÄIOÊä³ö״̬ 0£ºµÍµçƽ 1£º¸ßµçƽ
|
*/
|
void PCA9555_Set_One_Value_Output(unsigned char num,unsigned char value)
|
{
|
if(num >0 && num <17){//µÚÒ»¸öоƬIO1-16¿ØÖÆ
|
if(num <9){
|
if(value)pca9555writedata_output[0] |= 0x01<<(num - 1);//¸³ÖµÎ»¸ß
|
else pca9555writedata_output[0] &= ~(0x01<<(num - 1));//¸³ÖµÎ»µÍ
|
}
|
else{
|
if(value)pca9555writedata_output[1] |= 0x01<<(num - 9);//¸³ÖµÎ»¸ß
|
else pca9555writedata_output[1] &= ~(0x01<<(num - 9));//¸³ÖµÎ»µÍ
|
}
|
PCA9555_write_output_port_data(PCA9555_DEVICE_ADDR,pca9555writedata_output[0],pca9555writedata_output[1]);
|
}else{//³¬³öоƬ¿ØÖÆ
|
//error
|
}
|
//µ×ÏÂΪ¶àоƬÂß¼
|
// else if(num >16 && num <33){//µÚ¶þ¸öоƬIO1-16¿ØÖÆ£¬Ê¹Óøü¶àIOÒÔ´ËÀàÍÆ£¬×î¶àÖ§³Ö0x000~0x111 ¹²8¸öоƬ´®Áª£¬¹²128¸öIO£¬Èç¹û²»¹»¿ÉÒÔʹÓÃPCA9505£¬40¸öIO£¬×î¶à´®Áª320¸öIO
|
// if(num <25){
|
// if(value)pca9555writedata[2] |= 0x01<<(num - 17);//¸³ÖµÎ»¸ß
|
// else pca9555writedata[2] &= ~(0x01<<(num - 17));//¸³ÖµÎ»µÍ
|
// }
|
// else{
|
// if(value)pca9555writedata[3] |= 0x01<<(num - 25);//¸³ÖµÎ»¸ß
|
// else pca9555writedata[3] &= ~(0x01<<(num - 25));//¸³ÖµÎ»µÍ
|
// }
|
// PCA9555_writedata(PCA9555_REG_OUT1,pca9555writedata[2],pca9555writedata[3]);
|
// }
|
// else{//³¬³öоƬ¿ØÖÆ
|
// //error
|
// }
|
}
|
/*ÉèÖõÚÒ»¸öоƬijһͨµÀIOÊäÈë»òÊä³ö
|
num ¿ØÖƵÄIOÐòºÅ 1~17
|
value ¿ØÖƵÄIOÊä³ö״̬ 0£ºÊä³ö 1£ºÊäÈë
|
*/
|
void PCA9555_Set_One_Value_Config(unsigned char num,unsigned char value)
|
{
|
|
if(num >0 && num <17){//µÚÒ»¸öоƬIO1-16¿ØÖÆ
|
if(num <9){
|
if(value)pca9555writedata_config[0] |= 0x01<<(num - 1);//¸³ÖµÎ»¸ß
|
else pca9555writedata_config[0] &= ~(0x01<<(num - 1));//¸³ÖµÎ»µÍ
|
}
|
else{
|
if(value)pca9555writedata_config[1] |= 0x01<<(num - 9);//¸³ÖµÎ»¸ß
|
else pca9555writedata_config[1] &= ~(0x01<<(num - 9));//¸³ÖµÎ»µÍ
|
}
|
PCA9555_write_config_port_data(PCA9555_DEVICE_ADDR,pca9555writedata_config[0],pca9555writedata_config[1]);
|
}else{//³¬³öоƬ¿ØÖÆ
|
//error
|
}
|
}
|
/*ÉèÖõÚÒ»¸öоƬijһͨµÀĬÈÏÊäÈëµÄ¼«ÐÔ
|
num ¿ØÖƵÄIOÐòºÅ 1~17
|
value ¿ØÖƵÄIOÊä³ö״̬ 0£º·ÇʹÄÜ 1£ºÊ¹ÄܷתΪµçƽ0
|
*/
|
void PCA9555_Set_One_Value_Polarity_input(unsigned char num,unsigned char value)
|
{
|
if(num >0 && num <17){//µÚÒ»¸öоƬIO1-16¿ØÖÆ
|
if(num <9){
|
if(value)pca9555writedata_polarity[0] |= 0x01<<(num - 1);//¸³ÖµÎ»¸ß
|
else pca9555writedata_polarity[0] &= ~(0x01<<(num - 1));//¸³ÖµÎ»µÍ
|
}
|
else{
|
if(value)pca9555writedata_polarity[1] |= 0x01<<(num - 9);//¸³ÖµÎ»¸ß
|
else pca9555writedata_polarity[1] &= ~(0x01<<(num - 9));//¸³ÖµÎ»µÍ
|
}
|
PCA9555_write_polarity_port_data(PCA9555_DEVICE_ADDR,pca9555writedata_polarity[0],pca9555writedata_polarity[1]);
|
}else{//³¬³öоƬ¿ØÖÆ
|
//error
|
}
|
}
|
/*¶ÁÈ¡5VÒý½ÅµÄÊäÈë¸ßµÍµçƽ
|
·µ»ØÖµ ¸ß1 µÍ0 µçƽ
|
*/
|
int read_5v_input_pca(void)
|
{PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//¶ÁÊäÈë¼Ä´æÆ÷µÄÖµ
|
uint16_t gpio_state;
|
gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1];
|
if(INPUT_5V_POSITION&gpio_state)
|
return 1;
|
else {
|
return 0;
|
}
|
}
|
/*¶ÁÈ¡¹©µçÒý½ÅµÄÊäÈë¸ßµÍµçƽ
|
·µ»ØÖµ ¸ß1 µÍ0 µçƽ
|
*/
|
int read_powerkey_input_pca(void)
|
{PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//¶ÁÊäÈë¼Ä´æÆ÷µÄÖµ
|
uint16_t gpio_state;
|
gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1];
|
if(PWR_ON_POSITION&gpio_state)
|
return 1;
|
else {
|
return 0;
|
}
|
}
|
/*¶ÁÈ¡SOSÒý½ÅµÄÊäÈë¸ßµÍµçƽ
|
·µ»ØÖµ ¸ß1 µÍ0 µçƽ
|
*/
|
int read_userkey_input_pca(void)
|
{PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//¶ÁÊäÈë¼Ä´æÆ÷µÄÖµ
|
uint16_t gpio_state;
|
gpio_state=(uint16_t)pca9555writedata_input[0]<<8|pca9555writedata_input[1];
|
if(SOS_ENBALE_POSITION&gpio_state)
|
return 1;
|
else {
|
return 0;
|
}
|
}
|
void PCA9555_init()
|
{
|
//IIC_gpio_pca_init();//ÅäÖÃIIC¹Ü½Å
|
|
//PCA9555_write_config_port_data(PCA9555_DEVICE_ADDR,PCA_OUTPUT_CONFIG_MASK,PCA_OUTPUT_CONFIG_MASK);//È«ÅäÖÃΪÊä³ö
|
//PCA9555_Set_One_Value_Polarity_input(PWR_ON,0);
|
//PCA9555_write_config_port_data(PCA9555_DEVICE_ADDR,PCA_INPUT_CONFIG_MASK,PCA_INPUT_CONFIG_MASK);//È«ÅäÖÃΪÊäÈë
|
//PCA9555_write_polarity_port_data(PCA9555_DEVICE_ADDR,0x00,0x00);//·×ª
|
//PCA9555_Set_One_Value_Config(WAKE_UP,1);
|
//PCA9555_Set_All_Output(1);
|
|
PCA9555_Set_One_Value_Config(GPS_POWER,0);//ÉèÖÃGPSΪÊä³ö
|
PCA9555_Set_One_Value_Output(GPS_POWER,1);//À¸ßGPS
|
PCA9555_Set_One_Value_Config(ADC_MINIUS,0);//ÉèÖÃADCÊä³ö
|
PCA9555_Set_One_Value_Output(ADC_MINIUS,1);//ĬÈÏÀ¸ß
|
PCA9555_Set_One_Value_Config(MCU_A,0);//ÉèÖô®¿Ú¸´ÓÃоƬÇл»
|
PCA9555_Set_One_Value_Output(MCU_A,1);//Êä³ö¸ßµçƽΪuartͨѶ
|
PCA9555_Set_One_Value_Config(INPUT_5V,1);//ÉèÖÃ5VÊäÈë¼ì²â
|
PCA9555_Set_One_Value_Config(LED_POWER,0);//ÉèÖÃLEDµÆÊä³ö
|
PCA9555_Set_One_Value_Output(LED_POWER,1);//Êä³ö¸ßµçƽ¿ªÆôLEDͨÉÁ˸
|
PCA9555_Set_One_Value_Config(PWR_ENABLE,0);//ÉèÖÃµç³ØÉϵçÊÇ·ñ¸øµ¥Æ¬»ú¹©µç
|
PCA9555_Set_One_Value_Output(PWR_ENABLE,1);//¸ßµçƽĬÈϵ¼Í¨µ¥Æ¬»ú¹©µç
|
PCA9555_Set_One_Value_Config(PWR_ON,1);//ÉèÖÿª¹Ø»ú°´¼üÊäÈë
|
|
PCA9555_Set_One_Value_Config(AIR780E_ENBALE,0);//ÅäÖÃ4G¹©µç
|
PCA9555_Set_One_Value_Output(AIR780E_ENBALE,1);//´ò¿ª4G
|
|
PCA9555_Set_One_Value_Config(MAIN_RI,1);//ÅäÖÃ4G»½ÐÑÒý½ÅΪÊäÈë
|
|
PCA9555_Set_One_Value_Config(SOS_ENBALE,1);//ÉèÖÃSOS°´Å¥ÊäÈë
|
// PCA9555_Set_One_Value_Output(PWR_ON,0);//ÀµÍ
|
//PCA9555_readdata_from_output_register(PCA9555_DEVICE_ADDR,pca9555writedata_input);
|
//PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
|
//PCA9555_Set_One_Value_Output(PWR_ON,0);
|
// PCA9555_Set_All_Output(0);
|
//PCA9555_readdata_from_polarity_register(PCA9555_DEVICE_ADDR,pca9555writedata_input);
|
PCA9555_readdata(PCA9555_DEVICE_ADDR,pca9555writedata_input);//¶ÁÊäÈë¼Ä´æÆ÷µÄÖµ
|
|
//PCA9555_readdata_from_config_register(PCA9555_DEVICE_ADDR,pca9555writedata_config);
|
// PCA9555_Set_All_Output(0);//È«²¿ÀµÍ
|
|
//²âÊÔ
|
//PCA9555_Set_All_Output(1);//È«²¿À¸ß
|
//PCA9555_Set_All_Output(0);//È«²¿ÀµÍ
|
|
}
|