void setup_hardware() { uint16_t v = ADCL; usart_write_num((ADCH << 8) + v); usart_write_byte('\n'); pcd8544_cfg_t cfg; cfg.dc.ddr = &DDRB; cfg.dc.port = &PORTB; cfg.dc.pin = PB1; cfg.ss.ddr = &SPI_DDR; cfg.ss.port = &SPI_PORT; cfg.ss.pin = SPI_SS; cfg.rst.ddr = & DDRB; cfg.rst.port = & PORTB; cfg.rst.pin = PB0; adc_divide_by(ADC_DIV_128); adc_select_reference(ADC_SRC_AVCC); pcd8544_init(&cfg, 0x4, 50); pcd8544_fill(0); pcd8544_render(); current_state.current_screen = &main_screen; }
int main(void) { uint16_t i,j; uint8_t s; timer1_callback blink_call_back; timer1_callback backlight_call_back; watchdog_disable(); minimus32_init(); clock_prescale_none(); spi_config_io_for_master_mode(); DDRB |= 0b11110000; //IO setup for the reset,cs, cmd and led pin pcd8544_init(&pcdIO, 45); //Setup a blink pattern indicating a working MCU timer1_clock_init(); timer1_clock_register_callback(0, 100, 1, &blink, 0, &blink_call_back); //Enable the pulsed output that controls the backlight sw_dither_init(&backlight, 1023); timer1_clock_register_callback(0, 1, 1, &handleBackLight, 0, &backlight_call_back); for (i=0; i<1024; i++){ for(j=0; j<2000; j++){} sw_dither_set(&backlight, i); } //Show grey scale hack while (1) { while (state_==GREY_HACK_STATE){ greyScaleHack(s); s++; if (s>2) s=0; for(j=0; j<7500; j++){} } } return 0; }
int main(int argc, char* argv[]) { int r = 0; char* elf_file = NULL; int gdb_port = 0; for (char** arg = &argv[1]; *arg != NULL; ++arg) { if (strcmp("-d", *arg) == 0) gdb_port = atoi(*(++arg)); else elf_file = *arg; } if (elf_file == NULL) { fprintf(stderr, "Give me a .elf file to load\n"); return 1; } elf_firmware_t f; elf_read_firmware(elf_file, &f); avr_t* avr = avr_make_mcu_by_name("atmega328p"); if (!avr) { fprintf(stderr, "Unsupported cpu atmega328p\n"); return 1; } avr_init(avr); if (gdb_port != 0) { avr->gdb_port = gdb_port; avr_gdb_init(avr); } avr->frequency = 16000000; avr_load_firmware(avr, &f); pcd8544_init(avr, &lcd); avr_connect_irq(avr_io_getirq(avr, AVR_IOCTL_IOPORT_GETIRQ('C'), 2), lcd.irq + IRQ_PCD8544_DC); avr_connect_irq(avr_io_getirq(avr, AVR_IOCTL_IOPORT_GETIRQ('C'), 1), lcd.irq + IRQ_PCD8544_CS); avr_connect_irq(avr_io_getirq(avr, AVR_IOCTL_IOPORT_GETIRQ('C'), 0), lcd.irq + IRQ_PCD8544_RST); avr_connect_irq(avr_io_getirq(avr, AVR_IOCTL_SPI_GETIRQ(0), SPI_IRQ_OUTPUT), lcd.irq + IRQ_PCD8544_SPI_IN); gb_keypad_init(avr, &keypad); for (int i = 0; i < keydefs_length; i++) { const keydef_t *k = keydefs + i; avr_connect_irq(keypad.irq + k->keypad_key, avr_io_getirq(avr, AVR_IOCTL_IOPORT_GETIRQ(k->port), k->pin)); // Start with the pin high avr_ioport_t* port = (avr_ioport_t*) avr->io[k->avr_port].w.param; key_io[i].pin_mask = (1<<k->pin); key_io[i].pull_value = &port->external.pull_value; port->external.pull_mask |= key_io[i].pin_mask; port->external.pull_value |= key_io[i].pin_mask; gb_keypad_press(&keypad, k->keypad_key, 1); } if (display_init()) { lcd_ram_mutex = SDL_CreateMutex(); SDL_Thread* avr_thread = SDL_CreateThread(avr_run_thread, "avr-thread", avr); main_loop(); SDL_LockMutex(lcd_ram_mutex); quit_flag = 1; SDL_UnlockMutex(lcd_ram_mutex); int avr_thread_return; SDL_WaitThread(avr_thread, &avr_thread_return); SDL_DestroyMutex(lcd_ram_mutex); } else { r = 1; fprintf(stderr, "%s\n", display_error_message()); } display_destroy(); return r; }