void shell_server(void) { uint8_t command; uint8_t keepGoing = FALSE; load_state = 0; mcs_comm_open(); i2c_eeprom_init(); /*identify ourselves to the shell*/ mcs_send(MCS_PRESENT); mcs_send(MCS_PRESENT); if(mcs_recv() == SHELL_PRESENT) { keepGoing = TRUE; while(keepGoing) { command = mcs_recv(); switch(command) { case WRITE_PAGE: write_page(); break; case READ_FLASH: #warning "Using 1 for red LED" mos_led_on(1); read_flash(); break; case READ_FUSES: read_fuses(); break; case WRITE_EEPROM: write_eeprom(); break; case READ_EEPROM: read_eeprom(); break; case QUIT: keepGoing = FALSE; break; case START: mcs_send(START); //commit_and_reset(); break; default: ; } } } }
int main(int argc, char *argv[]) { elf_firmware_t f; const char * fname = "atmega1280_i2ctest.axf"; printf("Firmware pathname is %s\n", fname); elf_read_firmware(fname, &f); printf("firmware %s f=%d mmcu=%s\n", fname, (int)f.frequency, f.mmcu); avr = avr_make_mcu_by_name(f.mmcu); if (!avr) { fprintf(stderr, "%s: AVR '%s' not known\n", argv[0], f.mmcu); exit(1); } avr_init(avr); avr_load_firmware(avr, &f); // initialize our 'peripheral', setting the mask to allow read and write i2c_eeprom_init(avr, &ee, 0xa0, 0x01, NULL, 1024); i2c_eeprom_attach(avr, &ee, AVR_IOCTL_TWI_GETIRQ(0)); ee.verbose = 1; // even if not setup at startup, activate gdb if crashing avr->gdb_port = 1234; if (0) { //avr->state = cpu_Stopped; avr_gdb_init(avr); } /* * VCD file initialization * * This will allow you to create a "wave" file and display it in gtkwave * Pressing "r" and "s" during the demo will start and stop recording * the pin changes */ // avr_vcd_init(avr, "gtkwave_output.vcd", &vcd_file, 100000 /* usec */); // avr_vcd_add_signal(&vcd_file, // avr_io_getirq(avr, AVR_IOCTL_TWI_GETIRQ(0), TWI_IRQ_STATUS), 8 /* bits */ , // "TWSR" ); printf( "\nDemo launching:\n"); int state = cpu_Running; while ((state != cpu_Done) && (state != cpu_Crashed)) state = avr_run(avr); }