📄 iic.c
字号:
#include "def.h"
#include "iic.h"
#include "2440addr.h"
#include "uart.h"
extern Delay(unsigned int time);
void Test_Iic2(void)
{
unsigned int i,j;
static int data[256];
iic_init();
Uart_Printf("write\n");
for(i=0;i<256;i++)
Wr24C080(0xa0,i,255-i);//初始化data数组的值为0。
for(i=0;i<256;i++)
data[i] = 0;
Uart_Printf("read\n");
//读24C02的0xa0地址中数据到data数组中。
for(i=0;i<256;i++)
Rd24C080(0xa0,i,&(data[i]));
//输出data数组接收数据的值
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
Uart_Printf("%2x ",data[i*16+j]);
Uart_Printf("\n");
}
}
void iic_init(void)
{
// rGPEUP &= ~((3<<28)|(3<<30));
// rGPEUP |= ((0x3<<14));
rGPECON &= ~((unsigned int)0xf<<28);
rGPECON |= ((unsigned int)0xa<<28);
rIICCON = 0xaf;
rIICSTAT = 0x10;
rIICADD = 0x10;
}
void Wr24C080(int slvAddr,int addr,int data)
{
rIICDS = slvAddr;
rIICSTAT = 0xf0;
while(!(rIICCON&0x10));
Delay(100);
rIICDS = addr;
rIICCON &= ~(1<<4);
while(!(rIICCON&0x10));
Delay(100);
rIICDS = data;
rIICCON &= ~(1<<4);
while(!(rIICCON&0x10));
Delay(100);
rIICSTAT = 0xd0;
rIICCON &= ~(1<<4);
Delay(10000);
}
//************************[ _Rd24C080 ]********************************
void Rd24C080(int slvAddr,int addr,int *data)
{
rIICDS = slvAddr;
rIICSTAT = 0xf0;
while(!(rIICCON&0x10));
Delay(100);
rIICDS = addr;
rIICCON &= ~(1<<4);
while(!(rIICCON&0x10));
Delay(100);
rIICDS = slvAddr;
rIICSTAT = 0xb0;
rIICCON &= ~(1<<4);
while(!(rIICCON&0x10));
rIICCON &= ~(1<<4);
Delay(1000000);
while(!(rIICCON&0x10));
*data = rIICDS;
Delay(100);
rIICCON &= ~(1<<7);
rIICSTAT = 0x90;
rIICCON &= ~(1<<4);
Delay(10000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -