rework #4
@ -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, ®s)) {
|
||||||
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, ®s)) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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_
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user