#include <S3C2440.H>
unsigned int buf;
void delay(void)
{
int i;
for(i=0;i<10000;i++);
}
void uart_init(void)
{
GPHCON &=~((3<<4)|(3<<6));
GPHCON |=((2<<4)|(2<<6));
GPHUP =0x00;
ULCON0 |=0x03;
UCON0 =0x05;
UBRDIV0 =(int)(50000000/115200/16)-1;
URXH0 =0;
}
void putc(unsigned char c)
{
UTXH0 =c;
while(!(UTRSTAT0&(1<<2)));
}
void iic_init(void)
{
GPECON |=0xA0000000;
GPHUP |=0xC000;
IICCON |=((1<<7)|(1<<6)|(1<<5)|(15<<0));
IICSTAT =0x10;
IICLC = 7;
}
unsigned char iic_ask(void)
{
unsigned char i;
i=IICSTAT&0x01;
if(i)return 1;
return 0;
}
unsigned char iic_check(void)
{
unsigned char i;
i=IICCON&0x10;
if(i)return 0;
return 1;
}
void eeprom_write(void)
{
unsigned char j;
IICDS =0xA0;
IICSTAT =0xF0;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
delay();
IICDS=0;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
delay();
IICDS=buf;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
IICSTAT = 0xD0;
IICCON = 0xAF;
delay();
}
unsigned char eeprom_read(unsigned char addr)
{
unsigned char i,j;
IICDS=0xA0;
IICSTAT =0xF0;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
delay();
IICDS=0;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
delay();
IICDS=0xA0;
IICSTAT = 0xB0;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
delay();
i=IICDS;
IICCON &=~0x10;
j=iic_check();while(j)j=iic_check();
j=iic_ask();while(j)j=iic_ask();
delay();
IICCON &=~0x10;
i=IICDS;
delay();
IICSTAT =0x90;
IICCON =0xAF;
return i;
}
int main(void)
{
unsigned char i=0;
unsigned int j=0;
uart_init();iic_init();
while(1){
for(j=0;j<120;j++){buf=j;eeprom_write();delay();
i=eeprom_read(0);delay();putc(i);}};
}