void SaveEepromBoardConfig() { // // Save Board Cnfiguration to EE // _prog_addressT EE_addr; int i=0, *DMAdx; int test=0; int test1=0; // initialize a variable to represent the Data EEPROM address _init_prog_address(EE_addr, ee_data); // Erase Data EEPROM at ee_data for(i=0 ; i < sizeof(BoardConfig) ; i++) { _erase_eedata(EE_addr++, _EE_WORD); _wait_eedata(); } // Write BoardConfig to Data EEPROM _init_prog_address(EE_addr, ee_data); DMAdx = (int*) &BoardConfig; for(i=0 ; i < sizeof(BoardConfig) ; i++) { _write_eedata_word(EE_addr, *DMAdx ); EE_addr+=2; DMAdx++; test++; test1=sizeof(BoardConfig); _wait_eedata(); } test=test+1; }
/************************************* * Initialize EEPROM *************************************/ void InitEEPROM(void) { /* initialize a variable to represent the Data EEPROM address */ _init_prog_address(EE_addr, parameters_EEPROM); _init_prog_address(EE_is_blank_addr, EE_is_blank); /*Copy blank status flag from from DataEEPROM to RAM*/ _memcpy_p2d16(&EE_is_blank_RAM, EE_is_blank_addr, _EE_WORD); if(EE_is_blank_RAM != 0x3FFF) { StoreEEPROMparams(); EE_is_blank_RAM = 0x3FFF; _erase_eedata(EE_is_blank_addr, _EE_WORD); _wait_eedata(); _write_eedata_word(EE_is_blank_addr, EE_is_blank_RAM); _wait_eedata(); } }
void BootProtocolInit() { _prog_addressT p; bytes_out = 0; rx_buffer_cursor = 0; rx_message_remaining = 1; rx_message_state = WAIT_TYPE; ByteQueueClear(&tx_queue); max_packet = 64; OUTGOING_MESSAGE msg; msg.type = ESTABLISH_CONNECTION; msg.args.establish_connection.magic = BOOT_MAGIC; _init_prog_address(p, hardware_version); _memcpy_p2d16(msg.args.establish_connection.hw_impl_ver, p, 8); _init_prog_address(p, bootloader_version); _memcpy_p2d16(msg.args.establish_connection.bl_impl_ver, p, 8); memcpy(msg.args.establish_connection.plat_ver, PLATFORM_ID, 8); BootProtocolSendMessage(&msg); }
void AppProtocolInit(CHANNEL_HANDLE h) { _prog_addressT p; bytes_out = 0; rx_buffer_cursor = 0; rx_message_remaining = 1; rx_message_state = WAIT_TYPE; ByteQueueClear(&tx_queue); max_packet = ConnectionGetMaxPacket(h); OUTGOING_MESSAGE msg; msg.type = ESTABLISH_CONNECTION; msg.args.establish_connection.magic = IOIO_MAGIC; _init_prog_address(p, hardware_version); _memcpy_p2d16(msg.args.establish_connection.hw_impl_ver, p, 8); _init_prog_address(p, bootloader_version); _memcpy_p2d16(msg.args.establish_connection.bl_impl_ver, p, 8); memcpy(msg.args.establish_connection.fw_impl_ver, FW_IMPL_VER, 8); AppProtocolSendMessage(&msg); }
int ee_word_read(unsigned int offset) { #ifdef USE_EEPROM int data = 0; _prog_addressT p; _init_prog_address(p, eeData); p += offset; _memcpy_p2d16(&data, p, 1); return data; #else #warning "ee_word_read NOT using EEPROM, Flash implementation not (yet) available." return 0; #endif }
void ee_word_write(unsigned int offset, int data) { #ifdef USE_EEPROM _prog_addressT p; _init_prog_address(p, eeData); p += offset; asm volatile ("disi #5"); // Disable Interrupts For 5 Instructions (TODO, validate the number of cycles) _erase_eedata(p,_EE_WORD); _wait_eedata(); asm volatile ("disi #5"); // Disable Interrupts For 5 Instructions (TODO, validate the number of cycles) _write_eedata_word(p,data); _wait_eedata(); #else #warning "ee_word_write NOT using EEPROM, Flash implementation not (yet) available." #endif }
unsigned char my_eeprom_read_int(Eeprom* eeprom_, unsigned long index) { if (index >= EEPROM_30F_MAX_INDEX) { writeError(EEPROM_OUT_OF_BOUNDS); return -1; } signed int value; _prog_addressT EE_addr; // initialize a variable to represent the EEPROM address _init_prog_address(EE_addr, eeData); // read value _memcpy_p2d16(&value, EE_addr + (index * _EE_WORD), _EE_WORD); return (unsigned char) value; }
void my_eeprom_write_int(Eeprom* eeprom_, unsigned long index, unsigned char value) { if (index >= EEPROM_30F_MAX_INDEX) { writeError(EEPROM_OUT_OF_BOUNDS); return; } _prog_addressT EE_addr; // initialize a variable to represent the EEPROM address _init_prog_address(EE_addr, eeData); _erase_eedata(EE_addr + (index * _EE_WORD), _EE_WORD); _wait_eedata(); // write value _write_eedata_word(EE_addr + (index * _EE_WORD), value); _wait_eedata(); }
void RecoverConfigurationFromEEprom() { _prog_addressT EE_addr; _init_prog_address(EE_addr, ee_data); _memcpy_p2d16(&BoardConfig, EE_addr, sizeof(BoardConfig)); }