瀏覽代碼

Implement mmu2 serial interface

D.R.racer 2 年之前
父節點
當前提交
db0374896f
共有 3 個文件被更改,包括 26 次插入10 次删除
  1. 23 7
      Firmware/mmu2_serial.cpp
  2. 2 2
      Firmware/uart2.c
  3. 1 1
      Firmware/uart2.h

+ 23 - 7
Firmware/mmu2_serial.cpp

@@ -1,14 +1,30 @@
 #include "mmu2_serial.h"
-
-//@@TODO implement for MK3
+#include "uart2.h"
 
 namespace MMU2 {
 
-void MMU2Serial::begin(uint32_t baud){ }
-void MMU2Serial::close() { }
-int MMU2Serial::read() { }
-void MMU2Serial::flush() { }
-size_t MMU2Serial::write(const uint8_t *buffer, size_t size) { }
+void MMU2Serial::begin(uint32_t baud){
+    uart2_init(baud); // @@TODO we may skip the baud rate setting in case of 8bit FW ... could save some bytes...
+}
+
+void MMU2Serial::close() {
+    // @@TODO - probably turn off the UART
+}
+
+int MMU2Serial::read() {
+    return fgetc(uart2io);
+}
+
+void MMU2Serial::flush() {
+    // @@TODO - clear the output buffer
+}
+
+size_t MMU2Serial::write(const uint8_t *buffer, size_t size) {
+    while(size--){
+        fputc(*buffer, uart2io);
+        ++buffer;
+    }
+}
 
 MMU2Serial mmu2Serial;
 

+ 2 - 2
Firmware/uart2.c

@@ -33,13 +33,13 @@ int uart2_getchar(_UNUSED FILE *stream)
 }
 
 //uart init (io + FILE stream)
-void uart2_init(void)
+void uart2_init(uint32_t baudRate)
 {
 	DDRH &=	~0x01;
 	PORTH |= 0x01;
 	rbuf_ini(uart2_ibuf, sizeof(uart2_ibuf) - 4);
 	UCSR2A |= (1 << U2X2); // baudrate multiplier
-	UBRR2L = UART_BAUD_SELECT(UART2_BAUD, F_CPU); // select baudrate
+	UBRR2L = UART_BAUD_SELECT(baudRate, F_CPU); // select baudrate
 	UCSR2B = (1 << RXEN2) | (1 << TXEN2); // enable receiver and transmitter
 	UCSR2B |= (1 << RXCIE2); // enable rx interrupt
 	fdev_setup_stream(uart2io, uart2_putchar, uart2_getchar, _FDEV_SETUP_WRITE | _FDEV_SETUP_READ); //setup uart2 i/o stream

+ 1 - 1
Firmware/uart2.h

@@ -15,7 +15,7 @@ extern FILE _uart2io;
 #define uart2io (&_uart2io)
 
 
-extern void uart2_init(void);
+extern void uart2_init(uint32_t baudRate);
 
 extern int8_t uart2_rx_str_P(const char* str);