4,13 → 4,10 |
#include "defines.h" |
#include "uart.h" |
|
static UART_DATA uart_1_data; |
static UART_DATA *uart_1_data_p = &uart_1_data; |
static UART_DATA *uart_1_data_p; |
|
void UART1_Init() { |
// Configure the hardware USART device |
// UART1 TX RC6 |
// UART1 RX RC7 |
void UART1_Init(UART_DATA *data) { |
uart_1_data_p = data; |
|
UART1_TX_TRIS = 0; // Tx pin set to output |
UART1_RX_TRIS = 1; // Rx pin set to input |
41,8 → 38,10 |
uart_1_data_p->buffer_in_len_tmp = 0; |
} |
|
#pragma interrupt_level 0 |
void UART1_Recv_Interrupt_Handler() { |
unsigned char c; |
char c; |
|
if (PIR1bits.RC1IF) { // Check if data receive flag is set |
c = RCREG1; |
#ifdef UART1_RX_TO_BUFFER |
80,7 → 79,9 |
// We've overrun the USART and must reset |
RCSTA1bits.CREN = 0; // Reset UART1 |
RCSTA1bits.CREN = 1; |
DBG_PRINT_UART("UART1: (ERROR) overrun\r\n"); |
char output[64]; |
sprintf(output, "UART1: (ERROR) Overrun Occurred\r\n"); |
DBG_PRINT_UART(output, strlen(output)); |
TXSTA1bits.TXEN = 0; // Kill anything currently sending |
} |
} |
98,39 → 99,71 |
} |
} |
|
void UART1_WriteS(const char *fmt, ...) { |
#ifdef _DEBUG |
unsigned char i; |
va_list args; |
va_start(args, fmt); |
//void UART1_WriteS(const char *fmt, ...) { |
//#ifdef _DEBUG |
// char i; |
// va_list args; |
// va_start(args, fmt); |
// vsprintf((char *) uart_1_data_p->buffer_out, fmt, args); |
vprintf(fmt, args); |
va_end(args); |
uart_1_data_p->buffer_out_len = strlen((char *) uart_1_data_p->buffer_out); |
uart_1_data_p->buffer_out_ind = 1; |
for (i = 0; i < uart_1_data_p->buffer_out_len; i++) { |
TXREG1 = uart_1_data_p->buffer_out[i]; |
Nop(); |
while (!PIR1bits.TX1IF); // Wait for byte to be transmitted |
} |
#else |
va_list args; |
while (TXSTA1bits.TXEN); // Wait for previous message to finish sending |
va_start(args, fmt); |
vsprintf((char *) uart_1_data_p->buffer_out, fmt, args); |
va_end(args); |
uart_1_data_p->buffer_out_len = strlen((char *) uart_1_data_p->buffer_out); |
uart_1_data_p->buffer_out_ind = 1; |
TXREG1 = uart_1_data_p->buffer_out[0]; // Put first byte in TSR |
TXSTA1bits.TXEN = 1; // Begin transmission |
#endif |
} |
// va_end(args); |
// uart_1_data_p->buffer_out_len = strlen((char *) uart_1_data_p->buffer_out); |
// uart_1_data_p->buffer_out_ind = 1; |
// for (i = 0; i < uart_1_data_p->buffer_out_len; i++) { |
// TXREG1 = uart_1_data_p->buffer_out[i]; |
// Nop(); |
// while (!PIR1bits.TX1IF); // Wait for byte to be transmitted |
// } |
//#else |
// va_list args; |
// while (TXSTA1bits.TXEN); // Wait for previous message to finish sending |
// va_start(args, fmt); |
// vsprintf((char *) uart_1_data_p->buffer_out, fmt, args); |
// va_end(args); |
// uart_1_data_p->buffer_out_len = strlen((char *) uart_1_data_p->buffer_out); |
// uart_1_data_p->buffer_out_ind = 1; |
// TXREG1 = uart_1_data_p->buffer_out[0]; // Put first byte in TSR |
// TXSTA1bits.TXEN = 1; // Begin transmission |
//#endif |
//} |
|
void UART1_WriteB(const char *msg, unsigned char length) { |
unsigned char i; |
//void UART1_WriteF(float f, char m) { |
// long whole = 0; |
// unsigned long decimal = 0; |
// unsigned int multiplier = 1; |
// char i; |
// |
// for (i = 0; i < m; i++) |
// multiplier *= 10; |
// |
// whole = (long)((float)f); |
// decimal = (long)((float)f*multiplier) - whole*multiplier; |
// // Round up if necessary |
// if ((long)((float)f*multiplier*10) % 10 >= 5) |
// decimal += 1; |
//#ifdef _DEBUG |
// sprintf((char *) uart_1_data_p->buffer_out, "%ld.%ld", whole, decimal); |
// uart_1_data_p->buffer_out_len = strlen((char *) uart_1_data_p->buffer_out); |
// uart_1_data_p->buffer_out_ind = 1; |
// for (i = 0; i < uart_1_data_p->buffer_out_len; i++) { |
// TXREG1 = uart_1_data_p->buffer_out[i]; |
// Nop(); |
// while (!PIR1bits.TX1IF); // Wait for byte to be transmitted |
// } |
//#else |
// while (TXSTA1bits.TXEN); // Wait for previous message to finish sending |
// sprintf((char *) uart_1_data_p->buffer_out, "%ld.%ld", whole, decimal); |
// uart_1_data_p->buffer_out_len = strlen((char *) uart_1_data_p->buffer_out); |
// uart_1_data_p->buffer_out_ind = 1; |
// TXREG1 = uart_1_data_p->buffer_out[0]; // Put first byte in TSR |
// TXSTA1bits.TXEN = 1; // Begin transmission |
//#endif |
//} |
|
void UART1_WriteS(char *string, char length) { |
char i; |
#ifdef _DEBUG |
for (i = 0; i < length; i++) { |
TXREG1 = msg[i]; |
TXREG1 = string[i]; |
Nop(); |
while (!PIR1bits.TX1IF); // Wait for byte to be transmitted |
} |
139,7 → 172,7 |
uart_1_data_p->buffer_out_len = length; |
uart_1_data_p->buffer_out_ind = 1; |
for (i = 0; i < length; i++) { |
uart_1_data_p->buffer_out[i] = msg[i]; |
uart_1_data_p->buffer_out[i] = string[i]; |
} |
TXREG1 = uart_1_data_p->buffer_out[0]; // Put first byte in TSR |
TXSTA1bits.TXEN = 1; // Begin transmission |
146,7 → 179,7 |
#endif |
} |
|
void UART1_WriteC(const unsigned char c) { |
void UART1_WriteC(const char c) { |
#ifdef _DEBUG |
TXREG1 = c; |
Nop(); |
161,13 → 194,13 |
|
} |
|
unsigned char UART1_Buffer_Len() { |
char UART1_Buffer_Len() { |
return uart_1_data_p->buffer_in_len; |
} |
|
/* Reader interface to the UART buffer, returns the number of bytes read */ |
unsigned char UART1_Read_Buffer(unsigned char *buffer) { |
unsigned char i = 0; |
char UART1_Read_Buffer(char *buffer) { |
char i = 0; |
while (uart_1_data_p->buffer_in_len != 0) { |
buffer[i] = uart_1_data_p->buffer_in[uart_1_data_p->buffer_in_read_ind]; |
i++; |