00001 #include "Ram.h" 00002 00004 void Ram::writeBytes(uint16_t _addr, unsigned char *_data, unsigned char _length) { 00005 00006 unsigned char *bytes; 00007 register unsigned char i; 00008 unsigned char slave = 0xA0; 00009 00010 // send start-condition 00011 i2c.sendStart(); 00012 00013 // FM24C512 specific addressing 00014 i2c.writeByte( slave ); 00015 00016 bytes = (unsigned char*)&_addr; 00017 i2c.writeByte(bytes[0]); 00018 i2c.writeByte(bytes[1]); 00019 00020 // send data 00021 for (i=0; i<_length; i++) { 00022 i2c.writeByte(_data[i]); 00023 } 00024 00025 // send stop condition 00026 i2c.sendStop(); 00027 } 00028 00030 void Ram::readBytes(uint16_t _addr, unsigned char *_data, unsigned char _length) { 00031 00032 00033 unsigned char *bytes; 00034 register unsigned char i=0; 00035 unsigned char slave = 0xA0; 00036 00037 // send start-condition 00038 i2c.sendStart(); 00039 00040 // FM24C512 specific addressing 00041 i2c.writeByte( slave ); 00042 00043 // send address 00044 bytes = (unsigned char*)&_addr; 00045 i2c.writeByte(bytes[0]); 00046 i2c.writeByte(bytes[1]); 00047 i2c.sendStart(); 00048 i2c.writeByte(0xA1); 00049 00050 // send data 00051 for (i=0; i<(_length-1); i++) { 00052 _data[i] = i2c.readByte(); 00053 } 00054 _data[i] = i2c.readByteWithoutAck(); 00055 00056 00057 // send stop condition 00058 i2c.sendStop(); 00059 } 00060 00061 00063 void Ram::init() { 00064 00065 //initialize SPI bus 00066 i2c.init(); 00067 00068 } 00069 00075 void Ram::enableRAMChip() { 00076 00077 // Chip-Select auf Low 00078 // PORTA &= ~((1<<PA6)); 00079 // PORTA |= (1<<PA1) | (1<<PA0); 00080 } 00081 00087 void Ram::disableRAMChip() { 00088 00089 // Chip-Select auf High 00090 // PORTA |= ((1<<PA6)); 00091 // PORTA |= (1<<PA1) | (1<<PA0); 00092 } 00093 00094 00096 unsigned char Ram::getRamStatusRegister() { 00097 /* 00098 unsigned char _sr = 0x00; 00099 00100 // SPI Schnittstelle aktivieren 00101 spi.enableSPI(); 00102 00103 // RAM Chip aktivieren 00104 this->enableRAMChip(); 00105 00106 // Kommando schicken 00107 spi.writeData(RAM_RDSR); 00108 00109 // Antwort auslesen 00110 _sr = spi.readData(); 00111 00112 // RAM Chip wieder deaktivieren 00113 this->disableRAMChip(); 00114 00115 // SPI wieder disabeln 00116 spi.disableSPI(); 00117 00118 return _sr;*/ 00119 } 00120 00122 void Ram::setRamStatusRegister(unsigned char _sr) { 00123 00124 // // SPI Schnittstelle aktivieren 00125 // spi.enableSPI(); 00126 // 00127 // // Write-Enable Kommando schicken 00128 // this->enableRAMChip(); 00129 // spi.writeData(RAM_WREN); 00130 // this->disableRAMChip(); 00131 // 00132 // // Write-Status-Register Kommando schicken 00133 // this->enableRAMChip(); 00134 // spi.writeData(RAM_WRSR); 00135 // spi.writeData(_sr); 00136 // this->disableRAMChip(); 00137 // 00138 // // SPI wieder disabeln 00139 // spi.disableSPI(); 00140 }