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 UC3C || UC3A3
00055 #include "twim.h"
00056 #else
00057 #include "twi.h"
00058 #endif
00059
00060 static uint32_t cpu_hz;
00061
00062 void at24cxx_init(int32_t fcpu) {
00063
00064 cpu_hz = fcpu;
00065 }
00066
00067
00068 void at24cxx_write_byte(uint16_t byte_address, uint8_t byte_value) {
00069 uint8_t pack[3];
00070 twi_package_t twi_package;
00071
00072 pack[0] = (byte_address&0xFF00)>>8;
00073 pack[1] = byte_address&0xFF;
00074 pack[2] = byte_value;
00075
00076 twi_package.chip = AT24CXX_TWI_ADDRESS;
00077 twi_package.addr_length = 1;
00078 twi_package.buffer = &pack;
00079 twi_package.length = sizeof(pack);
00080
00081 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00082
00083 return;
00084 }
00085
00086
00087 void at24cxx_write_continuous(uint16_t start_address, uint16_t length, uint8_t const *wr_buffer) {
00088 uint8_t *pack = {0};
00089 twi_package_t twi_package;
00090
00091 pack[0] = (start_address&0xFF00)>>8;
00092 pack[1] = start_address&0xFF;
00093 uint16_t idx;
00094 for (idx=0;idx<length;idx++)
00095 pack[2+idx] = wr_buffer[idx];
00096
00097 twi_package.chip = AT24CXX_TWI_ADDRESS;
00098 twi_package.addr_length = 0;
00099 twi_package.buffer = &pack;
00100 twi_package.length = sizeof(pack);
00101
00102 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00103
00104 return;
00105 }
00106
00107
00108 uint8_t at24cxx_read_byte(uint16_t byte_address) {
00109 uint8_t data;
00110 twi_package_t twi_package;
00111
00112 twi_package.chip = AT24CXX_TWI_ADDRESS;
00113 twi_package.addr_length = 0;
00114 twi_package.buffer = &byte_address;
00115 twi_package.length = 2;
00116 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00117
00118 twi_package.chip = AT24CXX_TWI_ADDRESS;
00119 twi_package.addr_length = 0;
00120 twi_package.buffer = &data;
00121 twi_package.length = 1;
00122 while(twi_master_read(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00123
00124
00125 return data;
00126
00127 }
00128
00129
00130 void at24cxx_read_continuous(uint16_t start_address, uint16_t length, uint8_t *rd_buffer) {
00131 twi_package_t twi_package;
00132
00133 twi_package.chip = AT24CXX_TWI_ADDRESS;
00134 twi_package.addr_length = 0;
00135 twi_package.buffer = &start_address;
00136 twi_package.length = 2;
00137 while(twi_master_write(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00138
00139 twi_package.chip = AT24CXX_TWI_ADDRESS;
00140 twi_package.addr_length = 0;
00141 twi_package.buffer = rd_buffer;
00142 twi_package.length = length;
00143 while(twi_master_read(AT24CXX_TWI, &twi_package)!=TWI_SUCCESS);
00144
00145 }