aboutsummaryrefslogtreecommitdiff
path: root/02-usart/src
diff options
context:
space:
mode:
Diffstat (limited to '02-usart/src')
-rw-r--r--02-usart/src/core/usart.c16
-rw-r--r--02-usart/src/main.c38
2 files changed, 40 insertions, 14 deletions
diff --git a/02-usart/src/core/usart.c b/02-usart/src/core/usart.c
index 8f58d8b..dc15e57 100644
--- a/02-usart/src/core/usart.c
+++ b/02-usart/src/core/usart.c
@@ -44,12 +44,12 @@ void usart_set_enabled(__IO usart_t* usart, usart_enable_t enabled)
uint32_t c_r1 = usart->c_r1;
if (!enabled) {
- usart->c1_bf.ue = 0;
+ regset(usart->c_r1, usart_ue, 0);
} else {
/* Set the rx enabled. */
- usart->c1_bf.re = !!(enabled & USART_ENABLE_RX);
- usart->c1_bf.te = !!(enabled & USART_ENABLE_TX);
- usart->c1_bf.ue = 1;
+ regset(usart->c_r1, usart_re, !!(enabled & USART_ENABLE_RX));
+ regset(usart->c_r1, usart_te, !!(enabled & USART_ENABLE_TX));
+ regset(usart->c_r1, usart_ue, 1);
}
}
@@ -85,16 +85,16 @@ void usart_enable_dma(__IO usart_t* usart, usart_enable_t enabled)
{
switch(enabled) {
case USART_ENABLE_DISABLED:
- usart->c3_bf.dmar = 0;
- usart->c3_bf.dmat = 0;
+ regset(usart->c_r3, usart_dmar, 0);
+ regset(usart->c_r3, usart_dmat, 0);
break;
case USART_ENABLE_TX:
- usart->c3_bf.dmat = 1;
+ regset(usart->c_r3, usart_dmat, 1);
break;
case USART_ENABLE_RX:
- usart->c3_bf.dmar = 1;
+ regset(usart->c_r3, usart_dmar, 1);
break;
};
}
diff --git a/02-usart/src/main.c b/02-usart/src/main.c
index 73ccb17..72b3fe7 100644
--- a/02-usart/src/main.c
+++ b/02-usart/src/main.c
@@ -3,19 +3,13 @@
#include "core/clock.h"
#include "core/dma.h"
#include "core/gpio.h"
-#include "core/isr_vector.h"
#include "core/system.h"
#include "core/usart.h"
-
#include "delay.h"
-#include "lib.h"
#include "mem.h"
#include "spin.h"
#include "string.h"
-
-#ifdef ARCH_STM32L4
-
/** Overrides the default systick irq handler. */
void on_systick()
{
@@ -33,12 +27,42 @@ void on_systick()
is_on = ! is_on;
}
+void setup_usart2(uint32_t baud_rate)
+{
+ __IO gpio_port_t* port_a = enable_gpio(GPIO_PORT_A);
+ enable_hsi(&RCC, true);
+
+ set_usart2_clock_src(&RCC, USART_CLK_SRC_HSI16);
+ set_usart2_clock_enabled(&RCC, USART_CLK_SRC_HSI16);
+
+ set_gpio_pin_mode(port_a, PIN_2, MODE_ALTERNATE);
+ set_gpio_pin_mode(port_a, PIN_15, MODE_ALTERNATE);
+ set_gpio_alternate_function(port_a, PIN_2, AFN_7);
+ set_gpio_alternate_function(port_a, PIN_15, AFN_3);
+
+ /* De-assert reset of USART2 */
+ regset(RCC.apb1rst1_r, rcc_usart2rst, 0);
+
+ USART2.c_r1 = 0;
+ USART2.c_r2 = 0;
+ USART2.c_r3 = 0;
+
+ usart_set_divisor(&USART2, 16000000 / baud_rate);
+}
+
+#ifdef ARCH_STM32L4
+
/* Main function. This gets executed from the interrupt vector defined above. */
int main()
{
/* Enable a higher clock frequency. */
set_system_clock_MHz(80);
+ setup_usart2(115200);
+ usart_set_enabled(&USART2, USART_ENABLE_TX | USART_ENABLE_RX);
+
+ usart_printf(&USART2, "Start Configuring Countdown!\n");
+
/* Set the countdown to start from 1,000,0000. */
SCB.strv_r = 10000000;
@@ -47,6 +71,8 @@ int main()
/* Start the systick. */
SCB.stcs_bf.enable = 1;
+
+ usart_printf(&USART2, "Start Countdown Started!\n");
}
#endif