diff options
Diffstat (limited to '02-usart/src')
-rw-r--r-- | 02-usart/src/core/irq.c | 15 | ||||
-rw-r--r-- | 02-usart/src/main.c | 4 | ||||
-rw-r--r-- | 02-usart/src/mem.c | 19 |
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; |