Implement mmu2 serial interface

This commit is contained in:
D.R.racer 2022-04-20 17:12:00 +02:00
parent 208e620660
commit db0374896f
3 changed files with 26 additions and 10 deletions

View File

@ -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;

View File

@ -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

View File

@ -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);