Feat: gura!!!
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include <gpio.h>
|
||||
#include <stddef.h>
|
||||
#include <ringbuffer.h>
|
||||
#include <thread.h>
|
||||
|
||||
/* Auxilary mini UART registers */
|
||||
#define AUX_ENABLE ((volatile uint32_t*)(MMIO_BASE + 0x00215004))
|
||||
@@ -81,8 +82,8 @@ void uart_init(void)
|
||||
_uart_enable_transmit_interrupt(false);
|
||||
// uint64_t ier = *AUX_MU_IER;
|
||||
|
||||
// uart_getb = uart_getb_async;
|
||||
// uart_putb = uart_putb_async;
|
||||
uart_getb = uart_getb_async;
|
||||
uart_putb = uart_putb_async;
|
||||
|
||||
is_uart_inited = true;
|
||||
}
|
||||
@@ -145,11 +146,12 @@ void uart_irq_handler(void)
|
||||
size_t uart_putb_async(const uint8_t *bytes, size_t len)
|
||||
{
|
||||
size_t sentlen = 0;
|
||||
for (; sentlen < len; ++bytes, ++sentlen)
|
||||
ringbuffer_push(uart_writebuf, *bytes);
|
||||
|
||||
if (!is_uart_in_interrupt_queue && uart_writebuf)
|
||||
_enable_uart_interrupt();
|
||||
for (; sentlen < len; ++bytes, ++sentlen) {
|
||||
while(!_uart_transmitter_idle())
|
||||
yield();
|
||||
|
||||
_uart_write_data(*bytes);
|
||||
}
|
||||
|
||||
return sentlen;
|
||||
}
|
||||
@@ -171,10 +173,10 @@ size_t uart_getb_async(uint8_t *bytes, size_t len)
|
||||
{
|
||||
size_t recvlen = 0;
|
||||
for (; recvlen < len; ++bytes, ++recvlen) {
|
||||
while (!uart_readbuf->size)
|
||||
wfe(); // wait for interrupt
|
||||
|
||||
*bytes = ringbuffer_bump(uart_readbuf);
|
||||
while (!_uart_data_ready())
|
||||
yield();
|
||||
|
||||
*bytes = _uart_read_data();
|
||||
}
|
||||
|
||||
return recvlen;
|
||||
|
||||
Reference in New Issue
Block a user