|
/*****************************************
IIC
****************************************/
#include"2440addr.h"
#include"option.h"
#define U32 unsigned int
#define PCLK 50000000
//unsigned char iic_buffer[8]; //IIC数据通讯缓存数组
unsigned char flag;
unsigned char devAddr=0xa0; //从设备AT24C02A的地址
void Uart0_Init(unsigned int baudrate) //初始化uart0
{
rGPHCON&=~((3<<4)|(3<<6));
rGPHCON|=(2<<4)|(2<<6);
rGPHUP=0x00;
rULCON0=0x03;
rUCON0=0x05;
rUBRDIV0=(int)(PCLK/baudrate/16)-1;
rURXH0=0;
}
void Iic_Isr()
{
rSRCPND|=(1<<27);
rINTPND|=(1<<27);
flag=0;
}
void delay(unsigned int x)
{
unsigned int y;
for(y=0;y<x;y++);
}
void Wr24c02a(unsigned char WordAddr,unsigned char date)
{
int i;
flag=1;
rIICDS=devAddr;
rIICCON&=~0x10;
rIICSTAT=0xf0;
while(flag==1)
{
delay(100);
}
flag=1;
rIICDS=WordAddr;
rIICCON&=~0x10;
while(flag==1)
{
delay(100);
}
flag=1;
rIICDS=date;
rIICSTAT&=~0x10;
while(flag==1)
{
delay(100);
}
rIICSTAT=0xd0;
rIICCON=0xe0;
delay(100);
}
char Rd2402a(unsigned char WordAddr)
{
unsigned char x;
flag=1;
rIICDS=devAddr;
rIICCON&=~0x10;
rIICSTAT=0xf0;
while(flag==1)
{
delay(100);
}
flag=1;
rIICDS=WordAddr;
rIICCON&=~0x10;
while(flag==1)
{
delay(100);
}
flag=1;
rIICDS=devAddr;
rIICCON&=~0x10;
rIICSTAT=0xb0;
while(flag==1)
{
delay(100);
}
flag=1;
x=rIICDS;
while(flag==1)
{
delay(100);
}
return x;
}
void Main()
{
char i=0;
unsigned char b;
Uart0_Init(115200);
pISR_IIC=(unsigned int)Iic_Isr;
rGPECON=0xaa000000;
rINTMSK|=(1<<27);
rIICCON=0xe0;
rIICSTAT=0x10;
Wr24c02a(0x10,1);
while(1)
{
rUTXH0=Rd2402a(0x10);
while(!(rUTRSTAT0&0x02));
}
}
|
|