From 3b4ddebe631b14d15abe7355fbabe53e08c61a61 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Wed, 26 Aug 2020 02:05:19 +0200 Subject: display list burst mode added --- fw/fe310/eos/eve/eve.c | 26 +++++++++++++++++++++++--- fw/fe310/eos/eve/eve.h | 3 ++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/fw/fe310/eos/eve/eve.c b/fw/fe310/eos/eve/eve.c index 1152699..6b3943e 100644 --- a/fw/fe310/eos/eve/eve.c +++ b/fw/fe310/eos/eve/eve.c @@ -8,7 +8,10 @@ static char _cmd_burst; static uint16_t _cmd_offset; + +static char _dl_burst; static uint32_t _dl_addr; + static uint32_t *_touch_calib; static uint8_t _brigtness; static uint8_t _power_state; @@ -96,15 +99,32 @@ static void _dl_inc(uint32_t i) { _dl_addr += i; } -void eve_dl_start(uint32_t addr) { +void eve_dl_start(uint32_t addr, char burst) { _dl_addr = addr; + _dl_burst = burst; + if (burst) { + eve_spi_cs_set(); + eve_spi_xchg24(addr | EVE_MEM_WRITE, EVE_SPI_FLAG_TX); + } } void eve_dl_write(uint32_t dl) { - eve_write32(_dl_addr, dl); + if (_dl_burst) { + eve_spi_xchg32(dl, EVE_SPI_FLAG_TX | EVE_SPI_FLAG_BSWAP); + } else { + eve_write32(_dl_addr, dl); + } _dl_inc(4); } +void eve_dl_end(void) { + if (_dl_burst) { + eve_spi_flush(); + eve_spi_cs_clear(); + _dl_burst = 0; + } +} + void eve_dl_swap(void) { eve_write8(REG_DLSWAP, EVE_DLSWAP_FRAME); } @@ -343,7 +363,7 @@ static int _init(void) { eve_write8(REG_VOL_PB, 0x00); /* turn recorded audio volume off */ /* write a basic display-list to get things started */ - eve_dl_start(EVE_RAM_DL); + eve_dl_start(EVE_RAM_DL, 0); eve_dl_write(CLEAR_COLOR_RGB(0,0,0)); eve_dl_write(CLEAR(1,1,1)); eve_dl_write(DISPLAY()); diff --git a/fw/fe310/eos/eve/eve.h b/fw/fe310/eos/eve/eve.h index c482d83..e204158 100644 --- a/fw/fe310/eos/eve/eve.h +++ b/fw/fe310/eos/eve/eve.h @@ -37,8 +37,9 @@ void eve_write32(uint32_t addr, uint32_t data); void eve_readb(uint32_t addr, uint8_t *b, size_t size); void eve_writeb(uint32_t addr, uint8_t *b, size_t size); -void eve_dl_start(uint32_t addr); +void eve_dl_start(uint32_t addr, char burst); void eve_dl_write(uint32_t dl); +void eve_dl_end(void); void eve_dl_swap(void); uint32_t eve_dl_get_addr(void); -- cgit v1.2.3