Add usart's read function

This commit is contained in:
Steins7 2023-07-05 23:05:03 +02:00
parent 073be3f980
commit 26bb798b79
2 changed files with 48 additions and 17 deletions

View File

@ -23,6 +23,7 @@ static volatile struct USART* const usart3 = (struct USART*)USART3_BASE_ADDRESS;
void configure_usart(volatile struct USART* regs, enum UsartConfig config);
void configure_baudrate(volatile struct USART* regs, uint32_t clock,
uint32_t baudrate);
uint32_t periph_regs(enum UsartPeriph periph, volatile struct USART** regs);
//--local variables-------------------------------------------------------------
@ -56,24 +57,34 @@ void usart_configure(enum UsartPeriph periph, enum UsartConfig config,
}
}
uint8_t usart_write_byte(enum UsartPeriph periph, uint8_t byte)
uint32_t usart_write_byte(enum UsartPeriph periph, uint8_t byte)
{
switch (periph) {
case USART_PERIPH_1:
if (usart1->SR.TXE) {
reg_write(usart1->DR, USART_DR_DR, byte);
return 0;
} else {
return 1;
}
case USART_PERIPH_2:
case USART_PERIPH_3:
default:
break;
volatile struct USART* regs;
if (periph_regs(periph, &regs)) {
return 1;
}
return 1;
if (regs->SR.TXE) {
reg_write(regs->DR, USART_DR_DR, byte);
return 0;
} else {
return 1;
}
}
uint32_t usart_read_byte(enum UsartPeriph periph, uint8_t* byte)
{
volatile struct USART* regs;
if (periph_regs(periph, &regs)) {
return 1;
}
if (regs->SR.RXNE) {
*byte = regs->DR.DR;
return 0;
} else {
return 1;
}
}
//--local functions-------------------------------------------------------------
@ -167,3 +178,23 @@ void configure_baudrate(volatile struct USART* regs, uint32_t clock,
reg_write(regs->BRR, USART_BRR_DIV_Fraction, divider & 0xF);
}
uint32_t periph_regs(enum UsartPeriph periph, volatile struct USART** regs)
{
switch (periph) {
case USART_PERIPH_1:
*regs = usart1;
break;
case USART_PERIPH_2:
*regs = usart2;
break;
case USART_PERIPH_3:
*regs = usart3;
break;
default:
return 1;
break;
}
return 0;
}

View File

@ -42,9 +42,9 @@ void usart_configure(enum UsartPeriph periph, enum UsartConfig config,
void usart_reset(enum UsartPeriph periph);
uint8_t usart_write_byte(enum UsartPeriph periph, uint8_t byte);
uint32_t usart_write_byte(enum UsartPeriph periph, uint8_t byte);
uint8_t usart_read_byte(enum UsartPeriph periph, uint8_t* byte);
uint32_t usart_read_byte(enum UsartPeriph periph, uint8_t* byte);
#endif //_USART_H_