Compare commits
No commits in common. "c16d9662dd5a61475d0bb9565449ef22c1db55dc" and "321722d9b1c5551bd5db6bb97a91fdde942e6099" have entirely different histories.
c16d9662dd
...
321722d9b1
25
main.c
25
main.c
@ -1,25 +0,0 @@
|
|||||||
#include <stdint.h>
|
|
||||||
#include "config.h"
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <util/delay.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include "uart_hal.h"
|
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
//example
|
|
||||||
uint8_t data = 'A';
|
|
||||||
|
|
||||||
uart_init(9600,0);
|
|
||||||
uart_send_byte(data);
|
|
||||||
sei();
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
if(uart_read_count() > 0){
|
|
||||||
data = uart_read();
|
|
||||||
uart_send_byte(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
#include "uart_hal.h"
|
|
||||||
|
|
||||||
volatile static uint8_t rx_buffer[RX_BUFFER_SIZE] = {0};
|
|
||||||
volatile static uint16_t rx_count = 0;
|
|
||||||
volatile static uint8_t uart_tx_busy = 1;
|
|
||||||
// кольцевой буффер
|
|
||||||
ISR(USART_RX_vect){
|
|
||||||
|
|
||||||
volatile static uint16_t rx_write_pos = 0;
|
|
||||||
|
|
||||||
rx_buffer[rx_write_pos] = UDR0;
|
|
||||||
rx_count++;
|
|
||||||
rx_write_pos++;
|
|
||||||
if(rx_write_pos >= RX_BUFFER_SIZE){
|
|
||||||
rx_write_pos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ISR(USART_TX_vect){
|
|
||||||
uart_tx_busy = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void uart_init(uint32_t baud,uint8_t high_speed){
|
|
||||||
|
|
||||||
uint8_t speed = 16;
|
|
||||||
|
|
||||||
if(high_speed != 0){
|
|
||||||
speed = 8;
|
|
||||||
UCSR0A |= 1 << U2X0;
|
|
||||||
}
|
|
||||||
|
|
||||||
baud = (F_CPU/(speed*baud)) - 1;
|
|
||||||
|
|
||||||
UBRR0H = (baud & 0x0F00) >> 8;
|
|
||||||
UBRR0L = (baud & 0x00FF);
|
|
||||||
|
|
||||||
UCSR0B |= (1 << TXEN0) | (1 << RXEN0) | (1 << TXCIE0) | (1 << RXCIE0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void uart_send_byte(uint8_t c){
|
|
||||||
while(uart_tx_busy == 0);
|
|
||||||
uart_tx_busy = 0;
|
|
||||||
UDR0 = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uart_send_array(uint8_t *c,uint16_t len){
|
|
||||||
for(uint16_t i = 0; i < len;i++){
|
|
||||||
uart_send_byte(c[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void uart_send_string(uint8_t *c){
|
|
||||||
uint16_t i = 0;
|
|
||||||
do{
|
|
||||||
uart_send_byte(c[i]);
|
|
||||||
i++;
|
|
||||||
|
|
||||||
}while(c[i] != '\0');
|
|
||||||
uart_send_byte(c[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t uart_read_count(void){
|
|
||||||
return rx_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t uart_read(void){
|
|
||||||
static uint16_t rx_read_pos = 0;
|
|
||||||
uint8_t data = 0;
|
|
||||||
|
|
||||||
data = rx_buffer[rx_read_pos];
|
|
||||||
rx_read_pos++;
|
|
||||||
rx_count--;
|
|
||||||
if(rx_read_pos >= RX_BUFFER_SIZE){
|
|
||||||
rx_read_pos = 0;
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
#ifndef UART_HAL_H_
|
|
||||||
#define UART_HAL_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "config.h"
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <util/delay.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
|
|
||||||
#define RX_BUFFER_SIZE 128
|
|
||||||
|
|
||||||
void uart_init(uint32_t baud,uint8_t high_speed);
|
|
||||||
void uart_send_byte(uint8_t c);
|
|
||||||
void uart_send_array(uint8_t *c,uint16_t len);
|
|
||||||
void uart_send_string(uint8_t *c);
|
|
||||||
uint16_t uart_read_count(void);
|
|
||||||
uint8_t uart_read(void);
|
|
||||||
|
|
||||||
#endif /* UART_HAL_H_ */
|
|
Loading…
Reference in New Issue
Block a user