void erkennung(char* anzeigenahme){ EVE_start_cmd_burst(); EVE_cmd_dl(CMD_DLSTART); // tells EVE to start a new display-list EVE_cmd_dl(DL_CLEAR_COLOR_RGB | 0x00A1C1); // sets the background color EVE_cmd_dl(DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG); EVE_cmd_text(240,400,31, EVE_OPT_CENTER, anzeigenahme); EVE_cmd_dl(DL_DISPLAY); // put in the display list to mark its end EVE_cmd_dl(CMD_SWAP); // tell EVE to use the new display list while (EVE_busy()); EVE_end_cmd_burst(); /* stop writing to the cmd-fifo, the cmd-FIFO will be executed automatically after this or when DMA is done */ } void eve_spi_init(void) { PORTC.DIR = 0b10111110; // set pin directions PORTC.OUTSET= PIN3_bm; // cs auf 1 _delay_ms(50); SPIC.CTRL = (SPI_ENABLE_bm | SPI_MASTER_bm | SPI_PRESCALER_DIV4_gc); // SPI master, MSB first, mode 0, prescaler = 4 -> 8 MHz SPIC.INTCTRL = 0; // SPI interrupts are disabled } void sd_init(){ TCD0.PER = 125; // Sekundenabfrage für Schreiben SDCARD TCD0.CTRLA = ( TCD0.CTRLA & ~TC0_CLKSEL_gm ) | TC_CLKSEL_DIV1024_gc; TCD0.INTCTRLA = ( TCD0.INTCTRLA & ~TC0_OVFINTLVL_gm ) | RTC_OVFINTLVL_MED_gc; TimingDelay = 0; // initialisierung der zaehl variable unsigned char file_name [] = "test.bin"; unsigned char str [] = "Hallo Datei!"; unsigned long int seek; // sd/mmc config ************************************************** if( FALSE == mmc_init() ){ } //uputs((unsigned char*)"..."); // fat config ****************************************************** if( FALSE == fat_loadFatData() ){ //return; } // wenn auf dem terminal "Boot...OK" zu lesen ist, war initialisierung erfolgreich! } // ablauf // 1. flash_mod // 2. flash_bitmap // 3. formatflash -> einmalig wenn neue datein // 4. SD_to_flash -> ... uint32_t adress; uint32_t counter; uint8_t transferbyte[4096]; void sd_to_flash(){ //1. SD files laden, wie viele, flash adresse der ersten file //2. Für jede sd file //2. ID / Filename / x size / y size / Format (bsp 8x8) / filesize (x * y) //3. SD lesen (real filesize) //4. Nächstes vielfaches von 4096 ausrechen (bsp 8192 statt 6540) //5. SD Files to Ram_G -> EVE_memWrite_sram_buffer() | Speed improvement durch c //6. Ram_G to Flash -> EVE_cmd_flashupdate() //7. nächstes vielfaches von 4096 mit flash adresse der file addieren um die nächste zu bekommen //8. flash bitmaps -> flash_bitmaps(); // Erkennung erkennung("SD -> Flash"); // ----------------- adress = 4096; // start #if (MMC_WRITE == TRUE) // create and append only if write is TRUE #endif // Datei existiert, also lesen. // Gerade angelegt und beschrieben, oder war schon vorhanden // und es wurde was angehaengt? if( MMC_FILE_OPENED == ffopen("test.bin",'r') ){ // Setzen einer Variable und dann runterzählen geht // am schnellsten unsigned long int seek = file.length; // Lesen eines chars und Ausgabe des chars. // Solange bis komplette Datei gelesen wurde. do { transferbyte[counter] = ffread(); counter++; // wenn 1024 muss geflashed werden und dann neu gezäht werden /*if(counter >=4095){ EVE_memWrite_sram_buffer(4096,transferbyte,4095); } */ } while (--seek); serialport_printf(transferbyte); EVE_memWrite_sram_buffer(4097,transferbyte,4096); ffclose(); } } void flashblob_to_flash(void){ EVE_memWrite_sram_buffer(0,flashblob,4096); // 4096 Bytes mit flashblob füllen EVE_cmd_flashupdate(0,0,4096); //Schreibe von Ram_G in Flash } void flash_mod(void){ //1. 4096 Bytes in den RAM_G Schieben -> EVE_cmd_memset() //2. 4096 Bytes von RAM_G in den flash schieben ->EVE_cmd_flashupdate() //3. Flash Attach -> EVE_cmd_flashattach() //4. Flash fast mode -> EVE_cmd_flashfast(); // Erkennung erkennung("Flash_mod"); // ----------------- EVE_cmd_flashattach(); // Flash anbinden error = EVE_cmd_flashfast(); serialport_printf("%c",error); if(error >= 1){ flashblob_to_flash(); flash_mod(); } // ----------------- } void flash_format(void){ //1. Flash format -> EVE_cmd_flasherase() //2. Flash Detach -> EVE_cmd_flashdetach() //3. Flash Attach -> EVE_cmd_flashattach() //4. FLash mod aufrufen -> flash_mod() // Erkennung erkennung("Flash_Foramt"); EVE_cmd_flasherase(); EVE_cmd_flashdetach(); EVE_cmd_flashattach(); flashblob_to_flash(); // lade flashblob flash_mod(); // ----------------- } void flash_bitmaps(void){ //1. Files oranisieren mit bitmap informationen //2. Zählen wie viele //3. erste flash adresse auswählen //4. ID / Filename / x size / y size / Format (bsp 8x8) / filesize (x * y) //5. Flash adresse erhöhen für die nächste bitmap //6. Loop bis alle files geladen wurden // Erkennung erkennung("Flash_bitmaps"); // ----------------- } volatile unsigned char TimingDelay; // fuer mmc.c int main(void) { // Enable HI/MED/LO interrupt level // Interupt einschalten PMIC.CTRL |= PMIC_HILVLEN_bm; PMIC.CTRL |= PMIC_MEDLVLEN_bm; PMIC.CTRL |= PMIC_LOLVLEN_bm; sei(); clk_init(); serialport_init(115200); sd_init(); uint8_t display_delay = 0; TWIM_Init(); eve_spi_init(); TFT_init(); EVE_cmd_setrotate(2); // speedup SPI to 16 MHz SPIC.CTRL |= SPI_CLK2X_bm; // double speed mode -> (32 MHz / 4) x2 = 16 MHz //sd test flash_mod(); _delay_ms(10); flash_format(); _delay_ms(10); sd_to_flash(); . . . }