/* * File: uart.cpp * Author: naopross * * Created on May 2, 2018, 7:05 PM */ #include "uart.hpp" extern "C" { #include #include } /* templated functions */ namespace uart { template uint8_t peek(uint16_t offset) { if (offset >= rx_buffer[dev -1].size()) return 0; else return rx_buffer[dev -1].at(offset); } template bool rx_buffer_empty() { return rx_buffer[0].empty(); } template bool tx_buffer_full() { return !tx_buffer[0].empty(); } } /* specialization for UART1 */ void __ISR(_UART_1_VECTOR, IPL1AUTO) usart_1_isr() { if (IFS1bits.U1RXIF) { uart::rx_buffer[0].push_back(static_cast(U1RXREG)); IFS1bits.U1RXIF = 0; } else if (IFS1bits.U1TXIF) { IFS1bits.U1TXIF = 0; } } namespace uart { template<> void initialize<1>() { // STSEL 1S; // IREN disabled; // PDSEL 8N; // RTSMD disabled; // RXINV disabled; // SIDL disabled; // WAKE disabled; // ABAUD disabled; // LPBACK disabled; // BRGH enabled; // UEN TX_RX; // ON enabled; U1MODE = 0x8008; // UTXISEL TX_ONE_CHAR; // UTXINV disabled; // ADDR 0; // URXEN disabled; // OERR disabled; // ADM_EN disabled; // URXISEL RX_ONE_CHAR; // UTXBRK disabled; // UTXEN disabled; // ADDEN disabled; U1STA = 0x0; // U1TXREG 0; U1TXREG = 0x0; // BaudRate = 9600; // Frequency = 1000000 Hz; // BRG 25; U1BRG = 0x19; IEC1bits.U1RXIE = 1; U1STAbits.UTXEN = 1; U1STAbits.URXEN = 1; //Enabling UART U1MODEbits.ON = 1; } template<> uint8_t read<1>() { } }