Splitted out the usart recv and send functions to have blocking and non blocking versions of those.
This commit is contained in:
parent
571c4d37d0
commit
bf0b987fe3
|
@ -78,11 +78,11 @@ int main(void)
|
|||
/* Blink the LED (PC12) on the board with every transmitted byte. */
|
||||
while (1) {
|
||||
gpio_toggle(GPIOA, GPIO6); /* LED on/off */
|
||||
usart_send(USART1, c + '0'); /* Send one byte on USART3. */
|
||||
usart_send_blocking(USART1, c + '0'); /* Send one byte on USART3. */
|
||||
c = (c == 9) ? 0 : c + 1; /* Increment c. */
|
||||
if ((j++ % 80) == 0) { /* Newline after line full. */
|
||||
usart_send(USART1, '\r');
|
||||
usart_send(USART1, '\n');
|
||||
usart_send_blocking(USART1, '\r');
|
||||
usart_send_blocking(USART1, '\n');
|
||||
}
|
||||
for (i = 0; i < 80000; i++); /* Wait (needs -O0 CFLAGS). */
|
||||
}
|
||||
|
|
|
@ -69,11 +69,11 @@ int main(void)
|
|||
/* Blink the LED (PC12) on the board with every transmitted byte. */
|
||||
while (1) {
|
||||
gpio_toggle(GPIOC, GPIO12); /* LED on/off */
|
||||
usart_send(USART3, c + '0'); /* Send one byte on USART3. */
|
||||
usart_send_blocking(USART3, c + '0'); /* Send one byte on USART3. */
|
||||
c = (c == 9) ? 0 : c + 1; /* Increment c. */
|
||||
if ((j++ % 80) == 0) { /* Newline after line full. */
|
||||
usart_send(USART3, '\r');
|
||||
usart_send(USART3, '\n');
|
||||
usart_send_blocking(USART3, '\r');
|
||||
usart_send_blocking(USART3, '\n');
|
||||
}
|
||||
for (i = 0; i < 80000; i++); /* Wait (needs -O0 CFLAGS). */
|
||||
}
|
||||
|
|
|
@ -292,5 +292,9 @@ void usart_enable(u32 usart);
|
|||
void usart_disable(u32 usart);
|
||||
void usart_send(u32 usart, u16 data);
|
||||
u16 usart_recv(u32 usart);
|
||||
void usart_wait_send_ready(u32 usart);
|
||||
void usart_wait_recv_ready(u32 usart);
|
||||
void usart_send_blocking(u32 usart, u16 data);
|
||||
u16 usart_recv_blocking(u32 usart);
|
||||
|
||||
#endif
|
||||
|
|
32
lib/usart.c
32
lib/usart.c
|
@ -85,16 +85,36 @@ void usart_send(u32 usart, u16 data)
|
|||
{
|
||||
/* Send data. */
|
||||
USART_DR(usart) = (data & 0x1ff);
|
||||
|
||||
/* Wait until the data has been transferred into the shift register. */
|
||||
while ((USART_SR(usart) & USART_SR_TXE) == 0);
|
||||
}
|
||||
|
||||
u16 usart_recv(u32 usart)
|
||||
{
|
||||
/* Wait until the data is ready to be received. */
|
||||
while ((USART_SR(usart) & USART_SR_RXNE) == 0);
|
||||
|
||||
/* Receive data. */
|
||||
return USART_DR(usart) & 0x1ff;
|
||||
}
|
||||
|
||||
void usart_wait_send_ready(u32 usart)
|
||||
{
|
||||
/* Wait until the data has been transferred into the shift register. */
|
||||
while ((USART_SR(usart) & USART_SR_TXE) == 0);
|
||||
}
|
||||
|
||||
void usart_wait_recv_ready(u32 usart)
|
||||
{
|
||||
/* Wait until the data is ready to be received. */
|
||||
while ((USART_SR(usart) & USART_SR_RXNE) == 0);
|
||||
}
|
||||
|
||||
void usart_send_blocking(u32 usart, u16 data)
|
||||
{
|
||||
usart_send(usart, data);
|
||||
|
||||
usart_wait_send_ready(usart);
|
||||
}
|
||||
|
||||
u16 usart_recv_blocking(u32 usart)
|
||||
{
|
||||
usart_wait_recv_ready(usart);
|
||||
|
||||
return usart_recv(usart);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue