aboutsummaryrefslogtreecommitdiff
path: root/02-usart/src
diff options
context:
space:
mode:
Diffstat (limited to '02-usart/src')
-rw-r--r--02-usart/src/core/irq.c15
-rw-r--r--02-usart/src/main.c4
-rw-r--r--02-usart/src/mem.c19
3 files changed, 35 insertions, 3 deletions
diff --git a/02-usart/src/core/irq.c b/02-usart/src/core/irq.c
index c9b93c2..47ad924 100644
--- a/02-usart/src/core/irq.c
+++ b/02-usart/src/core/irq.c
@@ -1,11 +1,10 @@
#include "core/irq.h"
#include "core/gpio.h"
+#include "core/nvic.h"
#include "arch.h"
#include "delay.h"
-#ifdef ARCH_STM32L4
-
#define IRQ_RESERVED(n)
#define IRQ(name, uname_, n) \
void WEAK name () { \
@@ -80,4 +79,14 @@ void unhandled_isr(uint8_t number)
}
}
-#endif
+void enable_interrupts(interrupt_set_t* interrupts)
+{
+ for (int i = 0; i < sizeof(NVIC.ise_r) / sizeof(uint32_t); ++ i)
+ NVIC.ise_r[i] = interrupts->irqs[i];
+}
+
+void disable_interrupts(interrupt_set_t* interrupts)
+{
+ for (int i = 0; i < sizeof(NVIC.ise_r) / sizeof(uint32_t); ++ i)
+ NVIC.ice_r[i] = interrupts->irqs[i];
+}
diff --git a/02-usart/src/main.c b/02-usart/src/main.c
index 6d22486..8b98cbf 100644
--- a/02-usart/src/main.c
+++ b/02-usart/src/main.c
@@ -6,6 +6,7 @@
#include "core/system.h"
#include "core/usart.h"
#include "core/nvic.h"
+#include "core/irq.h"
#include "delay.h"
#include "mem.h"
@@ -64,6 +65,9 @@ int main()
regset(USART2.c_r1, usart_txeie, 1);
regset(USART2.c_r1, usart_rxneie, 1);
usart_set_enabled(&USART2, USART_ENABLE_TX | USART_ENABLE_RX);
+
+
+ enable_interrupt(IRQ_USART2);
USART2.td_r = (uint8_t) 0x61;
__IO gpio_port_t* port_b = enable_gpio(GPIO_PORT_B);
diff --git a/02-usart/src/mem.c b/02-usart/src/mem.c
index 9fef8bc..65d8b60 100644
--- a/02-usart/src/mem.c
+++ b/02-usart/src/mem.c
@@ -1,6 +1,25 @@
+#include "arch.h"
#include "mem.h"
#include "common.h"
+#ifdef ARCH_STM32L4
+// Provide a definition for memset()
+
+void* memset(void* dest, int c, size_t n)
+{
+ uint8_t c8 = (uint8_t) c;
+ uint8_t* dest8 = (uint8_t*) dest;
+ uint8_t* to = dest8 + n;
+
+ while(dest8 < to) {
+ *(dest8 ++) = c8;
+ }
+
+ return dest;
+}
+
+#endif
+
// void memcpy_(void* dest, const void* src, size_t len)
// {
// uint8_t* dest_ = (uint8_t*) dest;