00001
00002
00003
00004
00005 #include "piccolo_all.h"
00006 #include "piccolo_i2c.h"
00007
00008
00020 #define EEPROM 0xA0 //az EEPROM I2C címe, földre kötött címvonalakkal
00021 #define BLKSIZE 64 //blokkméret: egy memórialap 16 bájtos
00022
00023 #if defined(USE_INTERRUPT)
00024 #error "Ne legyen definiálva az USE__INTERRUPT szimbólum!"
00025 #endif //USE_INTERRUPT
00026 #if !defined(USE_USB)
00027 #error "Nincs definiálva az USE__USB szimbólum!"
00028 #endif //USE_USB
00029
00035 void MCP24LC515_wait(uint8 addr) {
00036 uint8 ack;
00037 do {
00038 i2c_start();
00039 ack = i2c_putc(addr);
00040 i2c_stop();
00041 } while (ack == I2C_NAK);
00042 }
00043
00050 void MCP24LC515_write(uint8 addr, union16 memaddr, uint8* pbuf) {
00051 pbuf[1] = memaddr.lo_byte;
00052 pbuf[0] = memaddr.hi_byte;
00053 if (memaddr.hi_byte & 0x80) {
00054 addr = addr | 0x08;
00055 }
00056 MCP24LC515_wait(addr);
00057 i2c_writeN(addr,pbuf,BLKSIZE+2);
00058 }
00059
00066 void MCP24LC515_read(uint8 addr,union16 memaddr,uint8* pbuf) {
00067 if (memaddr.hi_byte & 0x80) {
00068 addr = addr | 0x08;
00069 }
00070 MCP24LC515_wait(addr);
00071 i2c_write2(addr,memaddr.hi_byte,memaddr.lo_byte);
00072 i2c_readN(addr,pbuf,BLKSIZE);
00073 }
00074
00075
00076 void main (void) {
00077 uint8 buf[BLKSIZE+2];
00078 union16 MemAddr,ReadAddr;
00079 uint8 i,cmd;
00080 InitializeSystem();
00081 while (!usb_cdc_kbhit()) {
00082 ProcessIO();
00083 }
00084 cmd=usb_cdc_getc();
00085 i2c_init(400);
00086 MemAddr.word = 0;
00087 ReadAddr.word = 0;
00088 while (1) {
00089 if(cmd=='w' || cmd=='W') {
00090
00091 outString("Gépeljen be 64 karaktert!\n");
00092
00093 for (i = 2; i< BLKSIZE+2; i++) {
00094 buf[i] = usb_cdc_getc();
00095 usb_cdc_putc(buf[i]);
00096 }
00097 outString("\nEltároljuk az adatot\n");
00098
00099 out4hex(MemAddr.word);
00100 outString(": írás indul...");
00101 MCP24LC515_write(EEPROM,MemAddr,buf);
00102 MemAddr.word += BLKSIZE;
00103 outString(" ...írás vége!\n");
00104 out4hex(MemAddr.word);
00105 outString(": írás mégegyszer...");
00106 MCP24LC515_write(EEPROM,MemAddr,buf);
00107 MemAddr.word += BLKSIZE;
00108 outString(" ...írás vége!\n");
00109 } else {
00110
00111 out4hex(ReadAddr.word);
00112 outString(": olvasás indul...");
00113 MCP24LC515_read(EEPROM,ReadAddr,buf);
00114 outString(" ...olvasás vége!\n");
00115 for (i = 0;i<BLKSIZE; i++) {
00116 usb_cdc_putc(buf[i]);
00117 }
00118 outString("\n");
00119 ReadAddr.word += BLKSIZE;
00120 out4hex(ReadAddr.word);
00121 outString(": olvasás mégegyszer...");
00122 MCP24LC515_read(EEPROM,ReadAddr,buf);
00123 outString(" ...olvasás vége!\n");
00124 for (i = 0;i<BLKSIZE; i++) {
00125 usb_cdc_putc(buf[i]);
00126 }
00127 ReadAddr.word += BLKSIZE;
00128 }
00129 outString("\nNyomjon egy gombot a folytatáshoz!\n");
00130 cmd=usb_cdc_getc();
00131 }
00132 }