关于武汉芯景科技有限公司的IIC接口扩展芯片XJ9554开发指南(兼容PCA9554)

一、引脚介绍

1.引脚图

2.引脚描述

二、功能介绍

1.当作输入口,读取I/O口的电平

2.当作输出口,输出高低电平

3.中断功能,检测电平的变化

三、XJ9554的驱动

XJ9554.C

复制代码
/*
 * AT9554.c
 *
 *  Created on: 2024年8月19日
 *      Author: Administrator
 */
#include "softiic.h"
#include "AT9554.h"
#include "usart.h"
#include <stdio.h>

//XJ9554的IIC读
uint8_t XJ9554ReadOneByte(uint8_t ReadAddr)
{
	  uint8_t temp=0;
	  bsp_analog_i2c_start();
	  bsp_analog_i2c_send_byte(0X40);
	  bsp_analog_i2c_wait_ack();
	  bsp_analog_i2c_send_byte(ReadAddr);
	  bsp_analog_i2c_wait_ack();
	  bsp_analog_i2c_start();
	  bsp_analog_i2c_send_byte(0X41);
	  bsp_analog_i2c_wait_ack();
	  temp= bsp_analog_i2c_read_byte();
	  bsp_analog_i2c_nack();
	  bsp_analog_i2c_stop();
   return temp;
}



//XJ9554的IIC写
void XJ9554WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite)
{
	  bsp_analog_i2c_start();
	  bsp_analog_i2c_send_byte(0x40);
	  bsp_analog_i2c_wait_ack();
	  bsp_analog_i2c_send_byte(WriteAddr);
	  bsp_analog_i2c_wait_ack();
	  bsp_analog_i2c_send_byte(DataToWrite);
	  bsp_analog_i2c_wait_ack();
	  bsp_analog_i2c_stop();
}


/***
功能:设置I/O口输出高或者输出低
输入:pin  引脚
	state   SET为高,RESET为低
返回:无
*****/
void XJ9554_set_pin(uint8_t pin, uint8_t state)
{
    unsigned char data0 = XJ9554ReadOneByte(OUTPUT_PORT_REG);
    unsigned char data1 = XJ9554ReadOneByte(CONFIGURATION_REG);
    if (state)
    {
    	data0 |= 1 << pin;
    }
    else
    {
    	data0 &= ~(1 << pin);
    }
    data1 &= ~(1 << pin);
    XJ9554WriteOneByte(OUTPUT_PORT_REG, data0);
    XJ9554WriteOneByte(CONFIGURATION_REG, data1 );
}


/***
功能:获取I/O口的输入电平
输入:pin  引脚
返回:1   I/O口的电平为高
	0	I/O口的电平为低
*****/
uint8_t XJ9554_get_pin(uint8_t pin)
{
    unsigned char data0 = XJ9554ReadOneByte(INPUT_PORT_REG);
    unsigned char data1 = XJ9554ReadOneByte(CONFIGURATION_REG);
    data1 &= ~(1 << pin);
    XJ9554WriteOneByte(CONFIGURATION_REG, data1 );
    return (data0 & (1 << pin)) != 0;
}


/***
功能:改变I/O口的输入极性
输入:pin  引脚
    Value  RESET正极性    SET正极性
返回:
*****/
void XJ9554_Polarity(uint8_t pin, uint8_t Value)
{
    unsigned char data = XJ9554ReadOneByte(POLARITY_INVERSION_REG);
    if (Value)
    {
    	data |= 1 << pin;
    }
    else
    {
    	data &= ~(1 << pin);
    }
    XJ9554WriteOneByte(POLARITY_INVERSION_REG, data );
}

XJ9554.H

复制代码
/*
 * AT9554.h
 *
 *  Created on: 2024年8月19日
 *      Author: Administrator
 */

#ifndef INC_AT9554_H_
#define INC_AT9554_H_

#define INPUT_PORT_REG 0x00
#define OUTPUT_PORT_REG 0x01
#define POLARITY_INVERSION_REG 0x02
#define CONFIGURATION_REG 0x03

#define RESET 0
#define SET 1

uint8_t XJ9554ReadOneByte(uint8_t ReadAddr);
void XJ9554WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite);

void XJ9554_set_pin(uint8_t pin, uint8_t state);
uint8_t XJ9554_get_pin(uint8_t pin);
void XJ9554_Polarity(uint8_t pin, uint8_t Value);

#endif /* INC_AT9554_H_ */
相关推荐
夜晚中的人海12 分钟前
【C语言】初阶数据结构相关习题(二)
c语言·开发语言·数据结构
xu_wenming1 小时前
华为Watch的ECG功能技术分析
人工智能·嵌入式硬件·算法
范纹杉想快点毕业1 小时前
以项目的方式学QT开发(三)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·qt·mysql·算法·命令模式
补三补四2 小时前
随机森林(Random Forest)
人工智能·科技·算法·随机森林·机器学习
敲代码的瓦龙2 小时前
STL?list!!!
c语言·开发语言·数据结构·c++·windows·list
欢乐熊嵌入式编程2 小时前
智能手表集成测试报告(Integration Test Report)
嵌入式硬件·物联网·目标跟踪·集成测试·智能手表
我不是帅戈2 小时前
STM32单片机内存分配详细讲解
stm32·单片机·嵌入式·内存管理·.map文件
程序员莫小特2 小时前
【GESP真题解析】第 20 集 GESP 二级 2025 年 3 月编程题 1:等差矩阵
c语言·数据结构·c++·算法·青少年编程·矩阵
真的想上岸啊2 小时前
c语言第一个小游戏:贪吃蛇小游戏04
c语言·开发语言
lkbhua莱克瓦243 小时前
用C语言实现了——一个基于顺序表的插入排序演示系统
c语言·开发语言·数据结构·程序人生·github·排序算法·交互