summaryrefslogtreecommitdiff
path: root/prototype/fw/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'prototype/fw/src/main.c')
-rw-r--r--prototype/fw/src/main.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/prototype/fw/src/main.c b/prototype/fw/src/main.c
index a6b265b..de920eb 100644
--- a/prototype/fw/src/main.c
+++ b/prototype/fw/src/main.c
@@ -2,7 +2,50 @@
#include <global.h>
int main(void) {
+
+ RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
+ RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
+
+ GPIOA->MODER |= (2 << GPIO_MODER_MODER9_Pos);
+ GPIOA->AFR[1] = (7 << (9-8)*4);
+
+ SystemCoreClockUpdate();
+ int apb2_clock = SystemCoreClock / APB2_PRESC;
+
+ int baudrate = 115200;
+
+ USART1->CR1 = USART_CR1_MME | USART_CR1_TE;
+ USART1->BRR = (apb2_clock + baudrate/2) / baudrate;
+ USART1->CR1 |= USART_CR1_UE;
+
+ char s[12] = {
+ '0', '0', '0', '0', '0',
+ ' ', 'T', 'E', 'S', 'T',
+ '\n', '\0'};
+ int line = 0;
+ char *c = s;
+ USART1->TDR = *(c++); /* Kick off transmission */
while (23) {
+ if (USART1->ISR & USART_ISR_TXE) {
+ for (int i=0; i<100; i++)
+ asm volatile ("nop");
+ USART1->TDR = *(c++);
+ if (!*c) {
+ c = s;
+ line++;
+ int tmp = line;
+ tmp %= 100000;
+ s[0] = '0' + tmp/10000;
+ tmp %= 10000;
+ s[1] = '0' + tmp/1000;
+ tmp %= 1000;
+ s[2] = '0' + tmp/100;
+ tmp %= 100;
+ s[3] = '0' + tmp/10;
+ tmp %= 10;
+ s[4] = '0' + tmp;
+ }
+ }
}
}