Add usart's read function
This commit is contained in:
parent
073be3f980
commit
26bb798b79
@ -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, ®s)) {
|
||||
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, ®s)) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -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_
|
||||
|
||||
Loading…
Reference in New Issue
Block a user