static void st7735_pixel_draw(uint16_t x, uint16_t y, uint32_t color) { set_addr_window(x, y, x, y); color = RGB2BGR(color); const uint8_t data[2] = {color >> 8, color}; nrf_gpio_pin_set(ST7735_DC_PIN); spi_write(data, sizeof(data)); nrf_gpio_pin_clear(ST7735_DC_PIN); }
static void st7735_rect_draw(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint32_t color) { set_addr_window(x, y, x + width - 1, y + height - 1); color = RGB2BGR(color); const uint8_t data[2] = {color >> 8, color}; nrf_gpio_pin_set(ST7735_DC_PIN); // Duff's device algorithm for optimizing loop. uint32_t i = (height * width + 7) / 8; /*lint -save -e525 -e616 -e646 */ switch ((height * width) % 8) { case 0: do { spi_write(data, sizeof(data)); case 7: spi_write(data, sizeof(data)); case 6: spi_write(data, sizeof(data)); case 5: spi_write(data, sizeof(data)); case 4: spi_write(data, sizeof(data)); case 3: spi_write(data, sizeof(data)); case 2: spi_write(data, sizeof(data)); case 1: spi_write(data, sizeof(data)); } while (--i > 0); default: break; } /*lint -restore */ nrf_gpio_pin_clear(ST7735_DC_PIN); }
void RGB2BGR( DWORD* color ) { TBpp32 tmp = Bpp32( *color ); RGB2BGR( tmp ); *color = tmp.Value; }