📄 i2c.c
字号:
#include "I2C.h"
#define print1 printf
#define print2 printf
unsigned int i2c_read8(int addr){
unsigned int a;
*P_I2C_DATA_ADDR=addr;
*P_I2C_MODE_CTRL=0x41;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x08;
if(a==0) print1("Error! I2C_read8 get NAK\n");
a=*P_I2C_RX_DATA;
return a;
}
unsigned int i2c_read16(int addr){
unsigned int a;
*P_I2C_DATA_ADDR=addr;
*P_I2C_MODE_CTRL=0x42;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x10;
if(a==0) print1("Error! I2C_read16 get NAK\n");
a=*P_I2C_RX_DATA;
return a;
}
unsigned int i2c_readn8(int addr){
unsigned int a;
//id
*P_I2C_TX_DATA=0x30;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_readn8 get NAK\n");
//addr
*P_I2C_TX_DATA=addr;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_readn8 get NAK\n");
//stop
*P_I2C_MODE_CTRL=0x100;
//id again
*P_I2C_TX_DATA=0x31;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_readn8 get NAK\n");
//data
*P_I2C_MODE_CTRL=0x44;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_readn8 get NAK\n");
//stop
*P_I2C_MODE_CTRL=0x100;
a=*P_I2C_RX_DATA;
return a;
}
void i2c_write8(int addr, unsigned int value){
unsigned int a;
*P_I2C_DATA_ADDR=addr;
*P_I2C_TX_DATA=value;
*P_I2C_MODE_CTRL=1;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x08;
if(a==0) print2("Error! I2C_write8 get NAK at ");
}
void i2c_write16(int addr, unsigned int value){
unsigned int a;
*P_I2C_DATA_ADDR=addr;
*P_I2C_TX_DATA=value;
*P_I2C_MODE_CTRL=2;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x10;
if(a==0) print1("Error! I2C_write16 get NAK\n");
}
void i2c_writen8(int addr, unsigned int value){
unsigned int a;
//id
*P_I2C_TX_DATA=0x30;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_writen8 get NAK\n");
//addr
*P_I2C_TX_DATA=addr;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_writen8 get NAK\n");
//data
*P_I2C_TX_DATA=value;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_writen8 get NAK\n");
//stop
*P_I2C_MODE_CTRL=0x100;
}
void i2c_swrite8(int value){
unsigned int a;
*P_I2C_TX_DATA=value;
*P_I2C_MODE_CTRL=4;
a=*P_I2C_INT_STATUS;
while(a==0) a=*P_I2C_INT_STATUS;
*P_I2C_INT_STATUS=1;
a=*P_I2C_MODE_CTRL&0x20;
if(a==0) print1("Error! I2C_swrite8 get NAK\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -