📄 twi_drv.c
字号:
#ifndef __TWI_DRV_C__
#define __TWI_DRV_C__
#include "NGVDP_VDP.h"
/*
unsigned char EE_STATE;
unsigned char EE_DATA;
unsigned char EE_ADD;
unsigned char DEV_ADD;
*/
uint8 TWI_timer;
void Write8Bit(unsigned char x)
{
TWDR = x;
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWIE);
}
uint8 ic2_write_basic(unsigned char Devaddress, unsigned char RomAddress, unsigned char Wdata)
{
EE_DATA = Wdata;
EE_ADD = RomAddress;
DEV_ADD = Devaddress;
EE_STATE = 0x0f;
TWI_timer = Over_Time_TWI;
//Start();//I2C启动
TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN) | (1 << TWIE);
EE_STATE = EE_WRITE;
Over_Time_IIC_timer = Over_Time_IIC;
while ((EE_STATE != EE_WRITE_OK) && (EE_STATE != EE_WRITE_FAULT))
{
if (Over_Time_IIC_timer == 0)
{
TWI_init();
//LCD_Status = LCD_OFFLINE;
return 1;
}
;
}
if (EE_STATE == EE_WRITE_FAULT)
//LCD_Status = LCD_OFFLINE;
return 1;
if (EE_STATE == EE_WRITE_OK)
//LCD_Status = LCD_ONLINE;
return 0;
Over_Time_IIC_timer = 0xff;
return 0;
}
unsigned char i2c_Write(unsigned char Devaddress, unsigned char RomAddress, unsigned char Wdata)
{
uint8 temp = 0;
while (ic2_write_basic(Devaddress, RomAddress, Wdata))
{
temp++;
if (temp == 10)
{
LCD_Status = LCD_OFFLINE;
return 0;
}
__watchdog_reset();
}
LCD_Status = LCD_ONLINE;
return 0;
#if 0
if (LCD_Status == LCD_OFFLINE)
return 0;
EE_DATA = Wdata;
EE_ADD = RomAddress;
DEV_ADD = Devaddress;
EE_STATE = 0x0f;
TWI_timer = Over_Time_TWI;
//Start();//I2C启动
TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN) | (1 << TWIE);
EE_STATE = EE_WRITE;
Over_Time_IIC_timer = Over_Time_IIC;
while ((EE_STATE != EE_WRITE_OK) && (EE_STATE != EE_WRITE_FAULT))
{
if (Over_Time_IIC_timer == 0)
{
TWI_init();
LCD_Status = LCD_OFFLINE;
return 0;
}
;
}
if (EE_STATE == EE_WRITE_FAULT)
LCD_Status = LCD_OFFLINE;
if (EE_STATE == EE_WRITE_OK)
LCD_Status = LCD_ONLINE;
Over_Time_IIC_timer = 0xff;
return 0;
#endif
}
/*
unsigned char i2c_Read(unsigned char Devaddress, unsigned char RomAddress)
{
EE_ADD = RomAddress;
DEV_ADD = Devaddress;
EE_STATE = EE_READ;
Start();//I2C启动
// TWI_timer = Over_Time_TWI;
while (EE_STATE != EE_READ_OK)
{
;
}
return EE_DATA;
}
*/
void TWI_init()
{
EE_STATE = EE_READ;
TWAR = 0x01;
TWDR = 0xFF;
TWCR = ((0 << TWINT) | (0 << TWEA) | (0 << TWSTA) | (0 << TWSTO) | (0 << TWWC) | (1 << TWEN) | (0 << TWIE));
TWSR = 0x00;
TWBR = 0x0c; // Bit Rate setting
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -