00001
00002
00003
00004
00005 #include "piccolo_all.h"
00006 #include "piccolo_spi.h"
00007
00008
00027 #define BLKSIZE 64 //blokkméret: egy memórialap 64 bájtos
00028
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
00045 void waitFor25LC256(void) {
00046 uint8 flag;
00047 do {
00048 SLAVE_ENABLE();
00049 spi_io(CMD_RDSR);
00050 flag = spi_io(0x00);
00051 SLAVE_DISABLE();
00052 ProcessIO();
00053 } while(flag & 0x01);
00054 }
00055
00061 void memWrite25LC256(union16 MemAddr, uint8 *pbuf) {
00062 uint8 i,flag;
00063 waitFor25LC256();
00064 SLAVE_ENABLE();
00065 WriteSPI(CMD_WREN);
00066 SLAVE_DISABLE();
00067 Nop();
00068 SLAVE_ENABLE();
00069 spi_io(CMD_WRITE);
00070 spi_io(MemAddr.hi_byte );
00071 spi_io(MemAddr.lo_byte);
00072 for (i=0; i < BLKSIZE; i++) {
00073 spi_io(*pbuf++);
00074 }
00075 SLAVE_DISABLE();
00076 }
00077
00083 void memRead25LC256(union16 MemAddr, uint8 *pbuf) {
00084 uint8 i;
00085 waitFor25LC256();
00086 SLAVE_ENABLE();
00087 spi_io(CMD_READ);
00088 spi_io(MemAddr.hi_byte );
00089 spi_io(MemAddr.lo_byte);
00090 for (i=0; i < BLKSIZE; i++) {
00091 *pbuf++=spi_io(0x00);
00092 }
00093 SLAVE_DISABLE();
00094 }
00095
00096 void main (void) {
00097 uint8 cmd,i,buf[BLKSIZE];
00098 union16 MemAddr,ReadAddr;
00099 InitializeSystem();
00100 DISABLE_ALL_ANALOG();
00101 mInitAllLEDs();
00102 LEDport = 0;
00103 SLAVE_DISABLE();
00104 while (!usb_cdc_kbhit()) {
00105 ProcessIO();
00106 }
00107 outString("\nIsten hozott a PICCOLO projekthez!\n");
00108 outString("25LC256_spi.c program, MCU: ");
00109 #if defined(__18F4550)
00110 outString("PIC18F4550\n");
00111 #elif defined(__18F14K50)
00112 outString("PIC18F14K50\n");
00113 #endif
00114
00115 spi_init(CKP_ACTIVE_HIGH |
00116 MASTER_FOSC_16,
00117 SPI_CKE_ON |
00118 SPI_SMP_END);
00119 MemAddr.word = 0;
00120 ReadAddr.word = 0;
00121 while (1) {
00122 outString("\nParancs ('w' írás, 'r' olvasás): ");
00123 cmd=usb_cdc_getc();
00124 usb_cdc_putc(cmd);
00125 if (cmd=='w' || cmd=='W') {
00126
00127 outString("\nGépeljen be 64 karaktert!\n");
00128 for (i = 0; i< BLKSIZE; i++) {
00129 buf[i] = usb_cdc_getc();
00130 usb_cdc_putc(buf[i]);
00131 }
00132 outString("\n");
00133
00134 out4hex(MemAddr.word); outString(" címtől eltároljuk...\n");
00135 memWrite25LC256(MemAddr,buf);
00136 MemAddr.word += BLKSIZE;
00137 memWrite25LC256(MemAddr,buf);
00138 MemAddr.word += BLKSIZE;
00139 }
00140
00141 if (cmd=='r' || cmd=='R') {
00142 outString("\n");
00143 out4hex(ReadAddr.word); outString(": ");
00144 memRead25LC256(ReadAddr,buf);
00145 for (i = 0;i<BLKSIZE; i++) {
00146 usb_cdc_putc(buf[i]);
00147 }
00148 ReadAddr.word += BLKSIZE;
00149 outString("\n");
00150 out4hex(ReadAddr.word); outString(": ");
00151 memRead25LC256(ReadAddr,buf);
00152 for (i = 0;i<BLKSIZE; i++) {
00153 usb_cdc_putc(buf[i]);
00154 }
00155 ReadAddr.word += BLKSIZE;
00156 outString("\n");
00157 }
00158 }
00159 }