- Sending characters to the UART before it's ready would overflow the buffer causing it to hang
- Added a check to make sure the interface is ready before starting to send characters
- Removed the incorrect check for the usbMuxUart to make sure usb is ready before sending over the uart
set( MacroModule "PartialMap" )
##| Sends the current list of usb key codes through USB HID
-set( OutputModule "usbMuxUart" )
+set( OutputModule "uartOut" )
##| Debugging source to use, each module has it's own set of defines that it sets
set( DebugModule "full" )
volatile uint8_t uart0_buffer_items = 0;
volatile uint8_t uart0_buffer[uart0_buffer_size];
+volatile uint8_t uart_configured = 0;
+
+
// ----- Interrupt Functions -----
}
+
// ----- Functions -----
void uart_serial_setup()
{
+ // Indication that the UART is not ready yet
+ uart_configured = 0;
+
// Setup the the UART interface for keyboard data input
SIM_SCGC4 |= SIM_SCGC4_UART0; // Disable clock gating
// Add interrupt to the vector table
NVIC_ENABLE_IRQ( IRQ_UART0_STATUS );
+
+ // UART is now ready to use
+ uart_configured = 1;
}
// Get the next character, or -1 if nothing received
int uart_serial_getchar()
{
+ if ( !uart_configured )
+ return -1;
+
unsigned int value = -1;
// Check to see if the FIFO has characters
// Transmit a character. 0 returned on success, -1 on error
int uart_serial_putchar( uint8_t c )
{
+ if ( !uart_configured )
+ return -1;
+
while ( !( UART0_SFIFO & UART_SFIFO_TXEMPT ) ); // Wait till there is room to send
UART0_D = c;
int uart_serial_write( const void *buffer, uint32_t size )
{
+ if ( !uart_configured )
+ return -1;
+
const uint8_t *data = (const uint8_t *)buffer;
uint32_t position = 0;
// USB Includes
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-#include "avr/uart_serial.h"
#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
#include "arm/uart_serial.h"
#endif
inline void Output_firmwareReload()
{
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
- uart_debug_reload();
#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
uart_device_reload();
#endif
inline int Output_getchar()
{
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
- // XXX Make sure to check output_availablechar() first! Information is lost with the cast (error codes)
- return (int)uart_serial_getchar();
#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
return uart_serial_getchar();
#endif
inline int Output_putstr( char* str )
{
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
- uint16_t count = 0;
#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) // ARM
uint32_t count = 0;
#endif
inline void Output_softReset()
{
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
- uart_debug_software_reset();
#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_)
SOFTWARE_RESET();
#endif
while ( str[count] != '\0' )
count++;
- // Make sure USB is configured first
- if ( usb_configured() )
- {
- // First send to UART
- uart_serial_write( str, count );
- }
+ // First send to UART
+ uart_serial_write( str, count );
// Then send to USB
return usb_serial_write( str, count );