00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #include "board.h"
00048 #include "compiler.h"
00049 #include "gpio.h"
00050 #include "conf_at24cxx.h"
00051 #include "at24cxx.h"
00052 #include "cycle_counter.h"
00053
00054 #if ( defined (__GNUC__) && ( defined (__AVR32_UC3C064C__) || defined (__AVR32_UC3C0128C__) || defined (__AVR32_UC3C0256C__) || defined (__AVR32_UC3C0512CREVC__) || defined (__AVR32_UC3C164C__) || defined (__AVR32_UC3C1128C__) || defined (__AVR32_UC3C1256C__) || defined (__AVR32_UC3C1512CREVC__) || defined (__AVR32_UC3C264C__) || defined (__AVR32_UC3C2128C__) || defined (__AVR32_UC3C2256C__) || defined (__AVR32_UC3C2512CREVC__))) \
00055 ||( defined (__ICCAVR32__) && ( defined (__AT32UC3C064C__) || defined (__AT32UC3C0128C__) || defined (__AT32UC3C0256C__) || defined (__AT32UC3C0512C__) || defined (__AT32UC3C164C__) || defined (__AT32UC3C1128C__) || defined (__AT32UC3C1256C__) || defined (__AT32UC3C1512C__) || defined (__AT32UC3C264C__) || defined (__AT32UC3C2128C__) || defined (__AT32UC3C2256C__) || defined (__AT32UC3C2512C__)))
00056 #include "twim.h"
00057 #else
00058 #include "twi.h"
00059 #endif
00060
00061 static uint32_t cpu_hz;
00062
00063 void at24cxx_init(int32_t fcpu) {
00064
00065 cpu_hz = fcpu;
00066 }
00067
00068
00069 void at24cxx_write_byte(uint16_t byte_address, uint8_t byte_value) {
00070 uint8_t pack[3];
00071 twi_package_t twi_package;
00072
00073 pack[0] = (byte_address&0xFF00)>>8;
00074 pack[1] = byte_address&0xFF;
00075 pack[2] = byte_value;
00076
00077 twi_package.chip = AT24CXX_TWI_ADDRESS;
00078 twi_package.addr_length = 1;
00079 twi_package.buffer = &pack;
00080 twi_package.length = sizeof(pack);
00081
00082 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00083
00084 return;
00085 }
00086
00087
00088 void at24cxx_write_continuous(uint16_t start_address, uint16_t length, uint8_t const *wr_buffer) {
00089 uint8_t *pack = {0};
00090 twi_package_t twi_package;
00091
00092 pack[0] = (start_address&0xFF00)>>8;
00093 pack[1] = start_address&0xFF;
00094 uint16_t idx;
00095 for (idx=0;idx<length;idx++)
00096 pack[2+idx] = wr_buffer[idx];
00097
00098 twi_package.chip = AT24CXX_TWI_ADDRESS;
00099 twi_package.addr_length = 0;
00100 twi_package.buffer = &pack;
00101 twi_package.length = sizeof(pack);
00102
00103 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00104
00105 return;
00106 }
00107
00108
00109 uint8_t at24cxx_read_byte(uint16_t byte_address) {
00110 uint8_t data;
00111 twi_package_t twi_package;
00112
00113 twi_package.chip = AT24CXX_TWI_ADDRESS;
00114 twi_package.addr_length = 0;
00115 twi_package.buffer = &byte_address;
00116 twi_package.length = 2;
00117 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00118
00119 twi_package.chip = AT24CXX_TWI_ADDRESS;
00120 twi_package.addr_length = 0;
00121 twi_package.buffer = &data;
00122 twi_package.length = 1;
00123 while(twi_master_read(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00124
00125
00126 return data;
00127
00128 }
00129
00130
00131 void at24cxx_read_continuous(uint16_t start_address, uint16_t length, uint8_t *rd_buffer) {
00132 twi_package_t twi_package;
00133
00134 twi_package.chip = AT24CXX_TWI_ADDRESS;
00135 twi_package.addr_length = 0;
00136 twi_package.buffer = &start_address;
00137 twi_package.length = 2;
00138 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00139
00140 twi_package.chip = AT24CXX_TWI_ADDRESS;
00141 twi_package.addr_length = 0;
00142 twi_package.buffer = rd_buffer;
00143 twi_package.length = length;
00144 while(twi_master_read(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00145
00146 }