58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
#ifndef USART_H_
|
|
#define USART_H_
|
|
|
|
#include <inttypes.h>
|
|
|
|
struct usart {
|
|
volatile uint32_t SR; // Status register
|
|
volatile uint32_t DR; // Data register
|
|
volatile uint32_t BRR; // Baud rate register
|
|
volatile uint32_t CR1; // Control register 1
|
|
volatile uint32_t CR2; // Control register 2
|
|
volatile uint32_t CR3; // Control register 3
|
|
volatile uint32_t GTPR; // Guard time and prescaler registe
|
|
};
|
|
|
|
#define USART2_BASE_ADDR (0x40004400U)
|
|
#define USART2 ((struct usart *) USART2_BASE_ADDR)
|
|
|
|
// SR Register
|
|
// Transmission data register empty
|
|
#define USART_SR_TXE_BIT 7
|
|
#define USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT)
|
|
|
|
// Read data register not empty
|
|
#define USART_SR_RXNE_BIT 5
|
|
#define USART_SR_RXNE_READY (1 <<USART_SR_RXNE_BIT)
|
|
|
|
// CR Register
|
|
// Oversampling mode
|
|
#define USART_CR1_OVER8_BIT 15
|
|
#define USART_CR1_OVER8_8 (1 << USART_CR1_OVER8_BIT)
|
|
|
|
// USART enable
|
|
#define USART_CR1_UE_BIT 13
|
|
#define USART_CR1_UE_ENABLE (1 << USART_CR1_UE_BIT)
|
|
|
|
// Trasmitter enable
|
|
#define USART_CR1_TE_BIT 3
|
|
#define USART_CR1_TE_ENABLE (1 << USART_CR1_TE_BIT)
|
|
|
|
// Receiver enable
|
|
#define USART_CR1_RE_BIT 2
|
|
#define USART_CR1_RE_ENABLE (1 << USART_CR1_RE_BIT)
|
|
|
|
// BRR Register
|
|
#define USART_BRR_MANTISSA_BIT 4 // Bits [15:4]
|
|
#define USART_BRR_MANTISSA_MASK (0b111111111111) // Bits [15:4]
|
|
|
|
#define USART_BRR_FRACTION_BIT 0 // Bits [3:0]
|
|
#define USART_BRR_FRACTION_MASK (0b111) // Bits [3:0]
|
|
|
|
void usart2_init(void);
|
|
void usart2_start(void);
|
|
|
|
void usart2_write_byte(char byte);
|
|
|
|
#endif
|