void lcd_init() { // Setup all lcd pins as outputs LCD_CONTROL_DDR |= _BV(LCD_RS_PIN) | _BV(LCD_E_PIN); LCD_DATA_DDR |= _BV(LCD_DATA0_PIN) | _BV(LCD_DATA1_PIN) | _BV(LCD_DATA2_PIN) | _BV(LCD_DATA3_PIN); // Wait for the module _delay_ms(200); // To be safe switch back to 8-bit interface for a moment (Function Set) LCD_CONTROL_PORT &= ~_BV(LCD_RS_PIN) & ~_BV(LCD_E_PIN); LCD_RST_DATA; LCD_DATA_PORT |= _BV(LCD_DATA0_PIN) | _BV(LCD_DATA1_PIN); lcd_strobe(); _delay_ms(10); lcd_strobe(); _delay_ms(10); lcd_strobe(); _delay_ms(10); // Function Set: switch to 4 bit mode (last 8-bit command) LCD_RST_DATA; LCD_DATA_PORT |= _BV(LCD_DATA1_PIN); lcd_strobe(); _delay_ms(10); // Using 4 bit mode now. Repeat Function Set command (2 lines, 5x8 chars, 4-bit mode) lcd_cmd(0x28); lcd_off(); lcd_clr(); lcd_cmd(LCD_CMD_DEFAULT_MODE); lcd_on(); }
void lcd_test(void) { unsigned char c; static int lcdon = 0; static int blon = 0; static int dispon = 0; lcd_init(); while (1) { printf("********LCD TEST MENU********\n\r"); printf("[L] enable/disable LCD\n\r"); printf("[B] enable/disable back light\n\r"); printf("[C] enable/disable s3c6410 display controller\n\r"); printf("[D] display color\n\r"); printf("[Q] quit\n\r"); do { c = getc(); if (c == '\n' || c == '\r') { printf("\n\r"); } else { putc(c); } } while (c == '\n' || c == '\r'); switch (c) { case 'l': case 'L': { if (lcdon) { lcd_off(); printf("LCD off\n\r"); } else { lcd_on(); printf("LCD on\n\r"); } lcdon = !lcdon; break; } case 'b': case 'B': { if (blon) { backlight_disable(); printf("Backlight off\n\r"); } else { backlight_enable(); printf("Backlight on\n\r"); } blon = !blon; break; } case 'c': case 'C': { if (dispon) { displaycon_off(); printf("Display controller off\n\r"); } else { displaycon_on(); printf("Display controller on\n\r"); } blon = !blon; break; } case 'd': case 'D': { display_red(); break; } case 'q': case 'Q': { return ; break; } } } }
int main (void) { FRESULT rc; /* Result code */ DIR dir; /* Directory object */ FILINFO fno; /* File information object */ unsigned long br, i; alt_u32* active_buff; printf("System started\r\n"); lcd_off(); for(i=0;i<5000000;i++){} alt_sgdma_dev *dma = alt_avalon_sgdma_open("/dev/sgdma"); printf("open dma returned %ld\n", (alt_u32)dma); printf("framebuffer 1 at %lx\n", (alt_u32)frameBufferA); printf("framebuffer 2 at %lx\n", (alt_u32)frameBufferB); active_buff = frameBufferA; //printf("framebuffer 1 at %lx\n", (alt_u32)active_buff); printf("Turning LCD on \r\n"); lcd_on(); printf("Starting DMA\r\n"); init_and_start_framebuffer(dma); IoInit(); Color col2; col2.color32 = 0x00ff0000; memset(frameBufferA, col2.color32, 522240/4); f_mount(0, &Fatfs); /* Register volume work area (never fails) */ for (;;) { printf("\nOpen root directory.\n"); rc = f_opendir(&dir, ""); if (rc) die(rc); printf("\nDirectory listing...\n"); for (;;) { rc = f_readdir(&dir, &fno); /* Read a directory item */ if (rc || !fno.fname[0]) break; /* Error or end of dir */ if (fno.fattrib & AM_DIR) printf(" <dir> %s\n", fno.fname); else { printf("%8lu %s\n", fno.fsize, fno.fname); //printf("\nOpen an existing file.\n"); rc = f_open(&Fil, fno.fname, FA_READ); if (rc) die(rc); if (active_buffer == 0) { active_buffer = 1; active_buff = frameBufferA; } else { active_buff = frameBufferB; active_buffer = 0; } for (;;) { rc = f_read(&Fil, (alt_u32*)active_buff, f_size(&Fil), &br); /* Read a chunk of file */ if (rc || !br) break; /* Error or end of file */ } if (rc) die(rc); rc = f_close(&Fil); if (rc) die(rc); } } if (rc) die(rc); } }