diff options
author | Uros Majstorovic <majstor@majstor.org> | 2020-02-26 03:48:50 +0100 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2020-02-26 03:48:50 +0100 |
commit | 06b5a32ca82128edd807542d633d34897e0f43ef (patch) | |
tree | e6f0b871102255226f17c347f82ba93c7ec569d9 /code/fe310/eos/eve/eve_platform.c | |
parent | 2079587f0282603170a465e78b8074117fcb8c41 (diff) |
eve portable
Diffstat (limited to 'code/fe310/eos/eve/eve_platform.c')
-rw-r--r-- | code/fe310/eos/eve/eve_platform.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/code/fe310/eos/eve/eve_platform.c b/code/fe310/eos/eve/eve_platform.c new file mode 100644 index 0000000..e15d414 --- /dev/null +++ b/code/fe310/eos/eve/eve_platform.c @@ -0,0 +1,69 @@ +#include <stdlib.h> + +#include "encoding.h" +#include "platform.h" + +#include "eos.h" +#include "interrupt.h" +#include "event.h" +#include "timer.h" +#include "spi.h" +#include "eve.h" +#include "eve_platform.h" + +#include "irq_def.h" + +#define EVE_PIN_INTR 0 + +static void handle_time(unsigned char type) { + eos_spi_dev_start(EOS_DEV_DISP); + eve_handle_time(); + eos_spi_dev_stop(); +} + +static void handle_evt(unsigned char type, unsigned char *buffer, uint16_t len) { + uint8_t flags; + + eos_spi_dev_start(EOS_DEV_DISP); + eve_handle_touch(); + eos_spi_dev_stop(); + + GPIO_REG(GPIO_LOW_IP) = (1 << EVE_PIN_INTR); + GPIO_REG(GPIO_LOW_IE) |= (1 << EVE_PIN_INTR); +} + +static void handle_intr(void) { + GPIO_REG(GPIO_LOW_IE) &= ~(1 << EVE_PIN_INTR); + eos_evtq_push_isr(EOS_EVT_UI | EVE_ETYPE_INTR, NULL, 0); + return; +} + +void eve_sleep(uint32_t ms) { + eos_timer_sleep(ms); +} + +void eve_timer_set(uint32_t ms) { + eos_timer_set(ms, EOS_TIMER_ETYPE_UI, 0); +} + +void eve_timer_clear(void) { + eos_timer_clear(EOS_TIMER_ETYPE_UI); +} + +uint64_t eve_timer_get_tick(void) { + volatile uint64_t *mtime = (uint64_t *) (CLINT_CTRL_ADDR + CLINT_MTIME); + return *mtime; +} + +void eve_init_platform(void) { + eos_evtq_set_handler(EOS_EVT_UI, handle_evt); + eos_timer_set_handler(EOS_TIMER_ETYPE_UI, handle_time); + + GPIO_REG(GPIO_INPUT_EN) |= (1 << EVE_PIN_INTR); + GPIO_REG(GPIO_OUTPUT_EN) &= ~(1 << EVE_PIN_INTR); + GPIO_REG(GPIO_PULLUP_EN) &= ~(1 << EVE_PIN_INTR); + GPIO_REG(GPIO_OUTPUT_XOR) &= ~(1 << EVE_PIN_INTR); + + GPIO_REG(GPIO_LOW_IE) |= (1 << EVE_PIN_INTR); + eos_intr_set(INT_GPIO_BASE + EVE_PIN_INTR, IRQ_PRIORITY_UI, handle_intr); +}
\ No newline at end of file |