static cyg_uint8 eeprom_getb(int more) { int i; cyg_uint8 b = 0; HAL_GPIO_OUTPUT_DISABLE(GPIO_EEPROM_SDA); hal_delay_us(5); for (i = 7; i >= 0; i--) { b <<= 1; if (*IXP425_GPINR & (1 << GPIO_EEPROM_SDA)) b |= 1; CLK_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); } HAL_GPIO_OUTPUT_ENABLE(GPIO_EEPROM_SDA); if (more) DATA_LO(); else DATA_HI(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); return b; }
static int eeprom_putb(cyg_uint8 b) { int i; for (i = 7; i >= 0; i--) { if (b & (1 << i)) DATA_HI(); else DATA_LO(); CLK_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); } HAL_GPIO_OUTPUT_DISABLE(GPIO_EEPROM_SDA); CLK_HI(); hal_delay_us(5); i = (*IXP425_GPINR & (1 << GPIO_EEPROM_SDA)) ? 0 : 1; CLK_LO(); hal_delay_us(5); DATA_HI(); HAL_GPIO_OUTPUT_ENABLE(GPIO_EEPROM_SDA); return i; }
static void eeprom_stop(void) { int i; hal_delay_us(5); DATA_LO(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); DATA_HI(); hal_delay_us(5); CLK_LO(); hal_delay_us(5); CLK_HI(); hal_delay_us(5); }
void AspiData(u8 Para_data) { int i=8; CLK_HI(); A0_HI(); NCS_LO(); while (i--) { CLK_LO(); if (Para_data&0x80) MOSI_HI(); else MOSI_LO(); Para_data <<= 1; __no_operation(); CLK_HI(); __no_operation(); } NCS_HI(); A0_HI(); }
void LCD_Init() { rcc_peripheral_enable_clock(&RCC_AHB1ENR, RCC_AHB1ENR_IOPDEN); //MOSI gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO10); //CLK gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO11); //RST gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO12); //A0 gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO13); //CS gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO14); NCS_HI(); RST_HI(); lcd_delay(5); RST_LO(); lcd_delay(120); //11ms RST_HI(); lcd_delay(2500); AspiCmd(0xE2); lcd_delay(2500); lcd_screen_init(); lcd_delay(120); lcd_screen_init(); lcd_delay(120); AspiCmd(0xAF); //dc2=1, IC into exit SLEEP MODE, dc3=1 gray=ON, dc4=1 Green Enhanc mode disabled memset(img, 0, sizeof(img)); memset(dirty, 0, sizeof(dirty)); //Clear screen for (int y = 0; y < LCD_HEIGHT; y++) { lcd_set_row(y); AspiCmd(0xAF); CLK_HI(); A0_HI(); NCS_LO(); for (int x = 0; x < 212; x++) { //write_pixel(((x/53) % 2) ^ ((y / 16) %2)); write_pixel(0); } NCS_HI(); A0_HI(); AspiData(0); } }
void write_pixel(int bit) { for(int i = 0; i < 4; i++) { if (bit) MOSI_HI(); else MOSI_LO(); CLK_LO(); __no_operation(); CLK_HI(); } }
/* These are ported from th eopentx driver */ void AspiCmd(u8 Command_Byte) { int i=8; A0_LO(); CLK_HI(); __no_operation(); NCS_LO(); while (i--) { CLK_LO(); if (Command_Byte&0x80) MOSI_HI(); else MOSI_LO(); Command_Byte <<= 1; CLK_HI(); __no_operation(); } NCS_HI(); A0_HI(); }
/* Screen is 212 x 64 with 4bpp */ void LCD_DrawStop(void) { for (int y = 0; y < LCD_HEIGHT; y++) { if(! (dirty[y / 8] & (1 << (y % 8)))) continue; u8 *p = &img[(y / 8) * LCD_WIDTH]; u8 mask = 1 << (y % 8); lcd_set_row(y); AspiCmd(0xAF); CLK_HI(); A0_HI(); NCS_LO(); for (int x = 0; x < LCD_WIDTH; x++) { write_pixel(p[x] & mask); } NCS_HI(); A0_HI(); AspiData(0); } memset(dirty, 0, sizeof(dirty)); }