/* write_flash_ram.c Single word writes to flash ram Written by: Rod Klein Date: July 23, 1998 Rev. History: */ /* Include Files */ #include #include "VISION.h" #include "tracker.h" #include "functions.h" /* Start program */ void write_flash_ram( fl_data) unsigned int *fl_data; { int i; unsigned int addr; unsigned int data; unsigned int bytes; unsigned int status; unsigned int number; unsigned int fl_cmd; unsigned int fl_addr; unsigned int bank_len; unsigned int seq_addr[] = {0x555, 0x2AA, 0x555}; unsigned int seq_data[] = {0xAA, 0x55, 0xA0}; i = 0; addr = 0; bytes = 0; status = 0; number = 0; fl_cmd = 0; fl_addr = 0; bank_len = 0; data = *fl_data; flash_bank_len( &bank_len); if( bank_len == 0x80000 ) { if( prompt_hex( "\n Flash RAM Address (0:80000) [%05X]? ", &addr)) { if( number > FLASH_LEN) { printf("\n Out of Flash RAM Range\n"); return; } } } else { if( prompt_hex( "\n Flash RAM Address (0:100000) [%06X]? ", &addr)) { if( number > FLASH_LEN) { printf("\n Out of Flash RAM Range\n"); return; } } } data = data >> 24; if( prompt_hex( "\n Value to be written (hex) [%02X]? ", &data)) { data = data << 24; for( i=0; i<3; i++ ) { fl_addr = FLASH_RAM | (seq_addr[i] << 2); fl_cmd = (seq_data[i] << 24) | seq_data[i]; printf("\n Flash RAM Address = %X", fl_addr); status = VISIONwrite( finder, fl_addr, WORD_LEN, &bytes, &fl_cmd); if( status != 0 ) perror(" write_flash_ram: VISIONwrite"); } fl_addr = FLASH_RAM | (addr << 2); status = VISIONwrite( finder, fl_addr, WORD_LEN, &bytes, &data); if( status != 0 ) perror(" write_flash_ram: VISIONwrite"); } *fl_data = data; }