Nano2G LCD init
This is some example code for initializing the Nano 2G's LCD:
static void lcd_send_cmd(uint32_t cmd) __attribute__((naked, noinline)); static void lcd_send_cmd(uint32_t cmd) { (void)cmd; asm volatile( "mov r2, #0x38000000 \n\t" "orr r2, r2, #0x600000 \n\t" "lsc_wait: \n\t" "ldrh r1, [r2,#0x1c] \n\t" "tst r1, #0x10 \n\t" "bne lsc_wait \n\t" "strh r0, [r2,#0x4] \n\t" "mov pc, lr \n\t" ); } static void lcd_7_send_data(uint32_t data) __attribute__((naked, noinline)); static void lcd_7_send_data(uint32_t data) { (void)data; asm volatile( "mov r2, #0x38000000 \n\t" "orr r2, r2, #0x600000 \n\t" "and r0, r0, #0xff \n\t" "strh r0, [r2,#0x40] \n\t" "ls7d_wait: \n\t" "ldrh r1, [r2,#0x1c] \n\t" "tst r1, #0x10 \n\t" "bne ls7d_wait \n\t" "mov pc, lr \n\t" ); } static void lcd_delay(uint32_t time) __attribute__((naked, noinline)); static void lcd_delay(uint32_t time) { (void)time; asm volatile( "mov r0, r0,lsl#16 \n\t" "ld_wait: \n\t" "subs r0, r0, #1 \n\t" "bne ld_wait \n\t" "mov pc, lr \n\t" ); } #define LCD_RST_TIME *((volatile uint32_t*)(0x38600024)) #define LCD_DRV_RST *((volatile uint32_t*)(0x38600028)) void main(void) { LCD_RST_TIME = 0x7FFF; LCD_DRV_RST = 0; lcd_delay(1); LCD_DRV_RST = 1; lcd_delay(5); lcd_send_cmd(0x01); lcd_7_send_data(0x00); lcd_delay(10); lcd_send_cmd(0xB1); lcd_7_send_data(0x16); lcd_7_send_data(0x03); lcd_send_cmd(0xB2); lcd_7_send_data(0x17); lcd_7_send_data(0x03); lcd_send_cmd(0xB4); lcd_7_send_data(0x00); lcd_send_cmd(0xB6); lcd_7_send_data(0x01); lcd_send_cmd(0xB7); lcd_7_send_data(0x00); lcd_7_send_data(0x00); lcd_7_send_data(0x02); lcd_7_send_data(0x00); lcd_7_send_data(0x06); lcd_7_send_data(0x26); lcd_7_send_data(0x2D); lcd_7_send_data(0x27); lcd_7_send_data(0x55); lcd_7_send_data(0x27); lcd_send_cmd(0xB8); lcd_7_send_data(0x10); lcd_send_cmd(0xB9); lcd_7_send_data(0x52); lcd_7_send_data(0x12); lcd_7_send_data(0x03); lcd_send_cmd(0xC0); lcd_7_send_data(0x0A); lcd_7_send_data(0x10); lcd_7_send_data(0x10); lcd_send_cmd(0xC2); lcd_7_send_data(0x14); lcd_7_send_data(0x23); lcd_send_cmd(0xC3); lcd_7_send_data(0x12); lcd_7_send_data(0x23); lcd_send_cmd(0xC6); lcd_7_send_data(0x48); lcd_send_cmd(0xE0); lcd_7_send_data(0x20); lcd_7_send_data(0x71); lcd_7_send_data(0x17); lcd_7_send_data(0x09); lcd_7_send_data(0x70); lcd_7_send_data(0x0C); lcd_7_send_data(0x13); lcd_7_send_data(0x25); lcd_send_cmd(0xE1); lcd_7_send_data(0x37); lcd_7_send_data(0x00); lcd_7_send_data(0x63); lcd_7_send_data(0x11); lcd_7_send_data(0xD9); lcd_7_send_data(0x00); lcd_7_send_data(0x12); lcd_7_send_data(0x01); lcd_send_cmd(0xE2); lcd_7_send_data(0x42); lcd_7_send_data(0x42); lcd_7_send_data(0x60); lcd_7_send_data(0x08); lcd_7_send_data(0xB4); lcd_7_send_data(0x07); lcd_7_send_data(0x0E); lcd_7_send_data(0x90); lcd_send_cmd(0xE3); lcd_7_send_data(0x47); lcd_7_send_data(0x60); lcd_7_send_data(0x66); lcd_7_send_data(0x09); lcd_7_send_data(0x6A); lcd_7_send_data(0x02); lcd_7_send_data(0x0E); lcd_7_send_data(0x09); lcd_send_cmd(0xE4); lcd_7_send_data(0x11); lcd_7_send_data(0x40); lcd_7_send_data(0x03); lcd_7_send_data(0x0A); lcd_7_send_data(0xC1); lcd_7_send_data(0x0D); lcd_7_send_data(0x17); lcd_7_send_data(0x30); lcd_send_cmd(0xE5); lcd_7_send_data(0x00); lcd_7_send_data(0x30); lcd_7_send_data(0x77); lcd_7_send_data(0x1C); lcd_7_send_data(0xFB); lcd_7_send_data(0x00); lcd_7_send_data(0x13); lcd_7_send_data(0x07); lcd_send_cmd(0xE6); lcd_7_send_data(0x01); lcd_send_cmd(0x35); lcd_7_send_data(0x00); lcd_send_cmd(0x36); lcd_7_send_data(0x00); lcd_send_cmd(0xF2); lcd_7_send_data(0x40); lcd_send_cmd(0xF3); lcd_7_send_data(0x50); lcd_send_cmd(0xFB); lcd_7_send_data(0x01); lcd_send_cmd(0x11); lcd_7_send_data(0x00); lcd_delay(200); lcd_send_cmd(0x3A); lcd_7_send_data(0x65); lcd_send_cmd(0x29); lcd_7_send_data(0x00); }