123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include <avr/io.h>
- #include "uart.h"
- #define BAUD_RATE0_REG (unsigned int)(CPU_CLK_SPEED / (16 * BAUD_RATE0) ) - 1
- #define ACTUAL_BAUD0 (unsigned int)(CPU_CLK_SPEED / (16 * BAUD_RATE0_REG + 1)
- #define BAUD_RATE1_REG (unsigned int)(CPU_CLK_SPEED / (16 * BAUD_RATE1) ) - 1
- #define ACTUAL_BAUD1 (unsigned int)(CPU_CLK_SPEED / (16 * BAUD_RATE1_REG + 1)
- void init_uart0(void)
- {
-
- RXTXEN0_REG = (1<<RX0EN) | (1<<TX0EN);
-
- #if (BAUDREGS == 2)
- BAUD0H_REG = (unsigned char)(BAUD_RATE0_REG >> 8);
- BAUD0L_REG = (unsigned char)BAUD_RATE0_REG;
- #else
- BAUD0L_REG = (unsigned char)BAUD_RATE0_REG;
- #endif
- return;
- }
- unsigned char input_ch_w_timeout_0(char *data, volatile unsigned int timeout)
- {
- unsigned int timeout_counter = 0;
-
- while (timeout_counter != timeout) {
- if ((STAT0RXTX_REG & (1<<RX0C)) == (1<<RX0C)) {
- *data = UDR0;
- return BYTE_REC;
- }
- timeout_counter++;
- }
- return TIMEOUT;
- }
- char input_ch_0(void)
- {
-
- while ((STAT0RXTX_REG & (1<<RX0C)) != (1<<RX0C)) {
- continue;
- }
- return UDR0;
- }
- void output_ch_0(char data)
- {
- while ((STAT0RXTX_REG & (1<<UDR0E)) != (1<<UDR0E)) {
- continue;
- }
- UDR0 = data;
- return;
- }
- #if (NUM_OF_UARTS == 2)
- void init_uart1 (void)
- {
-
- RXTXEN1_REG = (1<<RX1EN) | (1<<TX1EN);
-
- #if (BAUDREGS == 2)
- BAUD1H_REG = (unsigned char)(BAUD_RATE1_REG >> 8);
- BAUD1L_REG = (unsigned char)BAUD_RATE1_REG;
- #else
- BAUD1L_REG = (unsigned char)BAUD_RATE1_REG;
- #endif
- return;
- }
- unsigned char input_ch_w_timeout_1(char *data, volatile unsigned int timeout)
- {
- unsigned int timeout_counter = 0;
-
- while (timeout_counter != timeout) {
- if ((STAT1RXTX_REG & (1<<RX1C)) == (1<<RX1C)) {
- *data = UDR1;
- return BYTE_REC;
- }
- timeout_counter++;
- }
- return TIMEOUT;
- }
- char input_ch_1(void)
- {
-
- while ((STAT1RXTX_REG & (1<<RX1C)) != (1<<RX1C)) {
- continue;
- }
- return UDR1;
- }
- void output_ch_1(char data)
- {
- while ((STAT1RXTX_REG & (1<<UDR1E)) != (1<<UDR1E)) {
- continue;
- }
- UDR1 = data;
- return;
- }
- #endif
|