Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
a591a87f9c |
68
UART.c
Normal file
68
UART.c
Normal file
@ -0,0 +1,68 @@
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "device_ring_buffer.h"
|
||||
#include "UART.h"
|
||||
|
||||
#define F_CPU 16000000
|
||||
#define CONF_UART_BAUD 300
|
||||
#define BAUD CONF_UART_BAUD
|
||||
|
||||
struct rb ring_buff_receive;
|
||||
struct rb ring_buff_transmit;
|
||||
|
||||
inline void uart_initialize(void)
|
||||
{
|
||||
UCSR0B=0;
|
||||
UCSR0C=0;
|
||||
UCSR0B =(1<<RXEN0)|(1<<TXEN0); // Включаем приём и передачу по UART
|
||||
UCSR0B |= (0<<UDRIE0); // Разрешаем или нет прерывание при очистке регистра данных
|
||||
UCSR0B |= (0<<TXCIE0); // Разрешаем или нет прерывание при завершении передачи
|
||||
UCSR0B |= (1<<RXCIE0); // Разрешаем или нет прерывание при приёме
|
||||
UCSR0C = (1<<USBS0) | (3<<UCSZ00);
|
||||
sei();
|
||||
}
|
||||
|
||||
ISR(UART_RXC_vect)
|
||||
{
|
||||
register unsigned char received_data = UDR0;// Забираем принятые данные
|
||||
rb_put(&ring_buff_receive, received_data);
|
||||
}
|
||||
|
||||
// Функция отправки байта
|
||||
void UART_Transmit(struct rb* _rb)
|
||||
{
|
||||
if (_rb->count > 0)
|
||||
{
|
||||
if (UCSR0A & (1 << UDRE0))
|
||||
{
|
||||
char data;
|
||||
rb_get(&ring_buff_transmit, &data);
|
||||
UDR0 = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct rb* get_rb_receive(void)
|
||||
{
|
||||
return &ring_buff_receive;
|
||||
}
|
||||
|
||||
struct rb* get_rb_transmit(void)
|
||||
{
|
||||
return &ring_buff_transmit;
|
||||
}
|
||||
|
||||
/*int main(void) {
|
||||
sei();
|
||||
uart_initialize();
|
||||
DDRD = 0xFF;
|
||||
uint8_t buff[] = {0x48, 0x45, 0x4C, 0x4C, 0x4F, 0x21, 0x09};
|
||||
|
||||
UART_Transmit(buff);
|
||||
while (1) {
|
||||
UART_Transmit(buff);
|
||||
}
|
||||
}*/
|
Loading…
Reference in New Issue
Block a user