rework #4

Merged
Steins7 merged 88 commits from rework into dev 2024-04-20 18:20:23 +00:00
2 changed files with 48 additions and 17 deletions
Showing only changes of commit 26bb798b79 - Show all commits

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_usart(volatile struct USART* regs, enum UsartConfig config);
void configure_baudrate(volatile struct USART* regs, uint32_t clock, void configure_baudrate(volatile struct USART* regs, uint32_t clock,
uint32_t baudrate); uint32_t baudrate);
uint32_t periph_regs(enum UsartPeriph periph, volatile struct USART** regs);
//--local variables------------------------------------------------------------- //--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) { volatile struct USART* regs;
case USART_PERIPH_1: if (periph_regs(periph, &regs)) {
if (usart1->SR.TXE) { return 1;
reg_write(usart1->DR, USART_DR_DR, byte); }
if (regs->SR.TXE) {
reg_write(regs->DR, USART_DR_DR, byte);
return 0; return 0;
} else { } else {
return 1; return 1;
} }
}
case USART_PERIPH_2: uint32_t usart_read_byte(enum UsartPeriph periph, uint8_t* byte)
case USART_PERIPH_3: {
default: volatile struct USART* regs;
break; if (periph_regs(periph, &regs)) {
return 1;
} }
if (regs->SR.RXNE) {
*byte = regs->DR.DR;
return 0;
} else {
return 1; return 1;
}
} }
//--local functions------------------------------------------------------------- //--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); 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); 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_ #endif //_USART_H_