Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 154 → Rev 155

/PIC Stuff/PICX_27J13/uart.c
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++;