#include <gpio.h>\r
#include <lcd.h>\r
#include <initrd.h>\r
+#include <serial.h>\r
\r
/**\r
* Accomplishments:\r
* - gpio lib\r
* - lcd support\r
* - initrd support\r
- * - lua?\r
+ * - lua? - no, something better, smaller\r
+ * - serial IO\r
*/\r
\r
void pulse(uint8_t byte);\r
\r
gpio_mode(GPIOA, 5, OUTPUT);\r
\r
+ serial_init();\r
+\r
task_init(kmain);\r
\r
while (1);\r
}\r
\r
-void task(void);\r
+void serial_getter(void);\r
void kmain(void)\r
{\r
asm("cpsie i");\r
task_start(lcd_handler, 128);\r
delay(200);\r
\r
- char *s = initrd_getfile("test.txt");\r
- const char *t = "Yoyoyo";\r
-\r
- asm("mov r0, %0; svc 2" :: "r" (s));\r
- asm("mov r0, %0; svc 2" :: "r" (t));\r
+ //char *s = initrd_getfile("test.txt");\r
+ // svc puts\r
+ //asm("mov r0, %0; svc 2" :: "r" (s));\r
\r
+ task_start(serial_getter, 128);\r
while (1) {\r
gpio_dout(GPIOA, 5, 1);\r
delay(500);\r
}\r
}\r
\r
+void serial_getter(void)\r
+{\r
+ char buf[2] = { 0, 0 };\r
+ while (1) {\r
+ buf[0] = serial_get();\r
+ asm("mov r0, %0; svc 2" :: "r" (buf));\r
+ }\r
+}\r
--- /dev/null
+#include <stm32l476xx.h>
+#include <gpio.h>
+
+void serial_init(void)
+{
+ gpio_mode(GPIOA, 2, ALTERNATE);
+ gpio_mode(GPIOA, 3, ALTERNATE);
+ GPIOA->AFR[0] &= ~(0x0000FF00);
+ GPIOA->AFR[0] |= 0x00007700;
+ RCC->APB1ENR1 |= RCC_APB1ENR1_USART2EN;
+
+ // start usart device
+ USART2->BRR = 80000000L / 115200L;
+ USART2->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
+}
+
+void serial_put(int c)
+{
+ while (!(USART2->ISR & USART_ISR_TXE));
+ USART2->TDR = c & 0xFF;
+}
+
+char serial_get(void)
+{
+ while (!(USART2->ISR & USART_ISR_RXNE));
+ return USART2->RDR & 0xFF;
+}