Jump to content

IlyaM

Members
  • Content Count

    1
  • Joined

  • Last visited

About IlyaM

  • Rank
    Newbie
  1. Hey, I gonna use uGFX with ST7735, unfortunately there is no board_ST7735_template.h for this driver and I wrote my own: #ifndef GDISP_LLD_BOARD_H #define GDISP_LLD_BOARD_H #include "nrf_gpio.h" #include "nrf_drv_spi.h" #include "nrf_delay.h" #include "nrf_log.h" #include "app_error.h" #define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_RGB565 #define LCD_SCK 29 #define LCD_MISO 22 #define LCD_MOSI 28 #define LCD_CS 24 #define LCD_DC 20 #define LCD_RST 23 //#define LCD_RW 6 #define SPI_INSTANCE 1 /**< SPI instance index. */ static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); /**< SPI instance. */ nrf_drv_spi_config_t lcd_spi_config = NRF_DRV_SPI_DEFAULT_CONFIG; static volatile bool lcd_spi_xfer_done; /**< Flag used to indicate that SPI instance completed the transfer. */ void lcd_spi_event_handler(nrf_drv_spi_evt_t const * p_event) { lcd_spi_xfer_done = true; //NRF_LOG_DEBUG("spi transfer completed.\n"); } static GFXINLINE void init_board(GDisplay *g) { NRF_LOG_RAW_INFO("ST7735 init_board\n"); // setup pins nrf_gpio_cfg_output(LCD_CS); nrf_gpio_cfg_output(LCD_DC); nrf_gpio_cfg_output(LCD_RST); //nrf_gpio_cfg_output(LCD_RW); nrf_gpio_pin_write(LCD_CS, 1); //nrf_gpio_pin_write(LCD_RW, 1); // reset board nrf_gpio_pin_write(LCD_RST, 0); nrf_delay_ms(100); nrf_gpio_pin_write(LCD_RST, 1); // setup spi lcd_spi_config.miso_pin = LCD_MISO; lcd_spi_config.mosi_pin = LCD_MOSI; lcd_spi_config.sck_pin = LCD_SCK; lcd_spi_config.frequency = NRF_DRV_SPI_FREQ_8M; APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &lcd_spi_config, lcd_spi_event_handler)); (void) g; } static GFXINLINE void post_init_board(GDisplay *g) { (void) g; } static GFXINLINE void setpin_reset(GDisplay *g, gBool state) { NRF_LOG_RAW_INFO("setpin_reset: %d\r\n", state); nrf_gpio_pin_write(LCD_RST, state); (void) g; (void) state; } static GFXINLINE void set_backlight(GDisplay *g, uint8_t percent) { (void) g; (void) percent; } static GFXINLINE void acquire_bus(GDisplay *g) { nrf_gpio_pin_write(LCD_CS, 0); (void) g; } static GFXINLINE void release_bus(GDisplay *g) { nrf_gpio_pin_write(LCD_CS, 1); (void) g; } static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { // dc low nrf_gpio_pin_write(LCD_DC, 0); lcd_spi_xfer_done = false; APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, &cmd, 1, NULL, 0)); //while (!lcd_spi_xfer_done){}; (void) g; (void) cmd; } static GFXINLINE void write_data(GDisplay *g, uint8_t data) { (void) g; (void) data; nrf_gpio_pin_write(LCD_DC, 1); lcd_spi_xfer_done = false; APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, &data, sizeof(data), NULL, 0)); //while (!lcd_spi_xfer_done){}; } static GFXINLINE void write_data_byte(GDisplay *g, uint8_t arg) { // dc high nrf_gpio_pin_write(LCD_DC, 1); lcd_spi_xfer_done = false; APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, &arg, 1, NULL, 0)); //while (!lcd_spi_xfer_done){}; (void) g; (void) arg; } static GFXINLINE uint16_t read_data(GDisplay *g) { (void) g; return 0; } #endif /* GDISP_LLD_BOARD_H */ nrf51 doesn't have systick and instead of this one I use RTC timer with frequency 32kHz, but when I compile it (without errors) I see nothing on my display and in the console output. if I comment out everything with uGFX I see console output, more over I have my own lib for ST7735 and it works fine. May I use uGFX without systick, I think it needs for display's backligh? Maybe someone had have an experience with this display and nrf51822?
×