00001
00002
00003
00004
00005 #include "piccolo_all.h"
00006 #include "spi.h"
00007
00008
00028 #define BLKSIZE 64 //blokkméret: egy memórialap 64 bájtos
00029
00030 #define CMD_WRSR 0x01 //Státuszregiszter írása
00031 #define CMD_WRITE 0x02 //Írás a megadott címtől kezdődően
00032 #define CMD_READ 0x03 //Olvasás a megadott címtől kezdődően
00033 #define CMD_WRDI 0x04 //Letiltja az írást
00034 #define CMD_RDSR 0x05 //Státuszregiszter olvasása
00035 #define CMD_WREN 0x06 //Engedélyezi az írást
00036
00037
00038 #define SLAVE_ENABLE() mLED_4 = 0 //Slave kiválasztása
00039 #define SLAVE_DISABLE() mLED_4 = 1 //Slave eszköz letiltása
00040
00041
00046 void waitFor25LC256(void) {
00047 uint8 flag;
00048 do {
00049 SLAVE_ENABLE();
00050 WriteSPI(CMD_RDSR);
00051 flag = ReadSPI();
00052 SLAVE_DISABLE();
00053 } while (flag & 0x01);
00054 }
00055
00061 void memWrite25LC256(union16 MemAddr, uint8 *pbuf) {
00062 uint8 i;
00063 waitFor25LC256();
00064 SLAVE_ENABLE();
00065 WriteSPI(CMD_WREN);
00066 SLAVE_DISABLE();
00067 Nop();
00068 SLAVE_ENABLE();
00069 WriteSPI(CMD_WRITE);
00070 WriteSPI(MemAddr.hi_byte );
00071 WriteSPI(MemAddr.lo_byte);
00072 for (i=0; i < BLKSIZE; i++) {
00073 WriteSPI(*pbuf++);
00074 }
00075 SLAVE_DISABLE();
00076 }
00077
00083 void memRead25LC256(union16 MemAddr, uint8 *pbuf) {
00084 uint8 i;
00085 waitFor25LC256();
00086 SLAVE_ENABLE();
00087 WriteSPI(CMD_READ);
00088 WriteSPI(MemAddr.hi_byte );
00089 WriteSPI(MemAddr.lo_byte);
00090 for (i=0; i < BLKSIZE; i++) {
00091 *pbuf++=ReadSPI();
00092 }
00093 SLAVE_DISABLE();
00094 }
00095
00100 void out2hex(unsigned char t) {
00101 unsigned char c;
00102 c=(char)((t>>4) & 0x0F);
00103 if (c>9) c+=7;
00104 _user_putc(c+'0');
00105 c=(char)(t & 0x0F);
00106 if (c>9) c+=7;
00107 _user_putc(c+'0');
00108 }
00109
00110
00111 void main (void) {
00112 uint8 buf[BLKSIZE];
00113 union16 MemAddr,ReadAddr;
00114 uint8 cmd,i,dummy;
00115 InitializeSystem();
00116 DISABLE_ALL_ANALOG();
00117 mInitAllLEDs();
00118 LEDport = 0;
00119 SLAVE_DISABLE();
00120 OpenSPI(SPI_FOSC_16,MODE_00,SMPEND);
00121 while (!usb_cdc_kbhit()) {
00122 ProcessIO();
00123 }
00124 outString("\nIsten hozott a PICCOLO projekthez!\n");
00125 outString("25LC256_spi.c program, MCU: ");
00126 #if defined(__18F4550)
00127 outString("PIC18F4550\n");
00128 #elif defined(__18F14K50)
00129 outString("PIC18F14K50\n");
00130 #endif
00131 MemAddr.word = 0;
00132 ReadAddr.word = 0;
00133 while (1) {
00134 outString("\nParancs ('w' írás, 'r' olvasás): ");
00135 cmd=usb_cdc_getc(); usb_cdc_putc(cmd);
00136 outString("\n");
00137 if (cmd=='w' || cmd=='W') {
00138
00139 outString("Gépeljen be 64 karaktert!\n");
00140 for (i = 0; i< BLKSIZE; i++) {
00141 buf[i] = usb_cdc_getc();
00142 usb_cdc_putc(buf[i]);
00143 }
00144 outString("\n");
00145
00146 out4hex(MemAddr.word); outString(": írás indul...\n");
00147 memWrite25LC256(MemAddr,buf);
00148 MemAddr.word += BLKSIZE;
00149 delay_ms(10);
00150 memWrite25LC256(MemAddr,buf);
00151 MemAddr.word += BLKSIZE;
00152 out4hex(MemAddr.word); outString(": írás vége!\n");
00153 }
00154
00155 if (cmd=='r' || cmd=='R') {
00156 out4hex(ReadAddr.word); outString(": ");
00157 memRead25LC256(ReadAddr,buf);
00158 for (i = 0;i<BLKSIZE; i++) {
00159 out2hex(buf[i]); usb_cdc_putc(' ');
00160 }
00161 ReadAddr.word += BLKSIZE;
00162 outString("\n");
00163 for (i = 0;i<BLKSIZE; i++) {
00164 usb_cdc_putc(buf[i]);
00165 }
00166 outString("\n");
00167 out4hex(ReadAddr.word); outString(": ");
00168 memRead25LC256(ReadAddr,buf);
00169 for (i = 0;i<BLKSIZE; i++) {
00170 out2hex(buf[i]); usb_cdc_putc(' ');
00171 }
00172 ReadAddr.word += BLKSIZE;
00173 outString("\n");
00174 for (i = 0;i<BLKSIZE; i++) {
00175 usb_cdc_putc(buf[i]);
00176 }
00177 outString("\n");
00178 }
00179 }
00180 }