Esempio n. 1
0
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;
}
Esempio n. 2
0
/*************************************
 * 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();
    }
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
File: protocol.c Progetto: brNX/ioio
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);
}
Esempio n. 5
0
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
}
Esempio n. 6
0
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
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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();
}
Esempio n. 9
0
void RecoverConfigurationFromEEprom()
{
  	_prog_addressT EE_addr;
    _init_prog_address(EE_addr, ee_data);
    _memcpy_p2d16(&BoardConfig, EE_addr, sizeof(BoardConfig));
}