⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c_intf.c

📁 HDMI anx9021的驱动
💻 C
字号:
//********************************************************************************************//********************************************************************************************//***************************     Firmware for ANX9021     ***********************************//********************************************************************************************//********************************************************************************************//******************************************************************************//  ANALOGIX Company //  ANX9021 Firmware on AT89C51RC clean for customer//  Version 1.51	2006/04/27//******************************************************************************#include <stdio.h>#include "i2c_intf.h"void print_byte(char *s, unsigned char b);#define NOP_DELAY do { _NOP_; _NOP_; } while (0)#define SCL_PULSE do { SCL_P = 1; NOP_DELAY; SCL_P = 0; NOP_DELAY; } while (0)unsigned char i2c_dev_addr;void i2c_init(void){	SDA_P = 1;	SCL_P = 1;}void i2c_send_start_bit(void){	SDA_P = 0; NOP_DELAY;	SCL_P = 0; NOP_DELAY;}void i2c_send_restart_bit(void){	SDA_P = 1; NOP_DELAY;	SCL_P = 1; NOP_DELAY;	SDA_P = 0; NOP_DELAY;	SCL_P = 0; NOP_DELAY;}void i2c_send_stop_bit(void){	SDA_P = 0; NOP_DELAY;	SCL_P = 1; NOP_DELAY;	SDA_P = 1; NOP_DELAY;}void i2c_send_byte(unsigned char b){	unsigned char i;		for (i=0; i<8; i++) {		ACC = b;		SDA_P = ACC_7;		SCL_PULSE;		b = b << 1;	}}unsigned char i2c_read_byte(void){	unsigned char c, i;		SDA_P = 1;		for (i=0; i<8; i++) {		SCL_P = 1; NOP_DELAY;				ACC = c;		ACC = ACC << 1;		ACC_0 = SDA_P;		c = ACC;		SCL_P = 0; NOP_DELAY;	}	return c;}char i2c_read_ack(void){	char result;		SDA_P = 1; NOP_DELAY;	SCL_P = 1; NOP_DELAY;	result = SDA_P;	SCL_P = 0; NOP_DELAY;	SDA_P = 1; NOP_DELAY;	return result;}void i2c_send_ack(char ack){	SDA_P = ack; NOP_DELAY;	SCL_P = 1; NOP_DELAY;	SCL_P = 0; NOP_DELAY;	SDA_P = 1; NOP_DELAY;}char i2c_write_reg(unsigned char offset, unsigned char d){	i2c_send_start_bit();	i2c_send_byte(i2c_dev_addr);	if (i2c_read_ack()) {		i2c_send_stop_bit();		return 1;	// no device acknowledge	}	i2c_send_byte(offset);	if (i2c_read_ack()) {		i2c_send_stop_bit();		return 2;	// device no accept the data, terminate transfer	}	i2c_send_byte(d);	i2c_read_ack();	i2c_send_stop_bit();	return 0;}char i2c_write_p0_reg(unsigned char offset, unsigned char d){	i2c_dev_addr = PORT0_ADDR;	return i2c_write_reg(offset, d);}char i2c_write_p1_reg(unsigned char offset, unsigned char d){	i2c_dev_addr = PORT1_ADDR;	return i2c_write_reg(offset, d);}char i2c_read_reg(unsigned char offset, unsigned char *d){	i2c_send_start_bit();	i2c_send_byte(i2c_dev_addr);	if (i2c_read_ack()) {		i2c_send_stop_bit();		return 1;	// no device acknowledge	}	i2c_send_byte(offset);	if (i2c_read_ack()) {		i2c_send_stop_bit();		return 2;	// device no accept the data, terminate transfer	}	i2c_send_restart_bit();	i2c_send_byte(i2c_dev_addr | 0x01);	if (i2c_read_ack())		return 1;	// no device acknowledge	*d = i2c_read_byte();	i2c_send_ack(1);	i2c_send_stop_bit();	return 0;}char i2c_read_p0_reg(unsigned char offset, unsigned char *d){	i2c_dev_addr = PORT0_ADDR;	return i2c_read_reg(offset, d);}char i2c_read_p1_reg(unsigned char offset, unsigned char *d){	i2c_dev_addr = PORT1_ADDR;	return i2c_read_reg(offset, d);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -