Splitted out the usart recv and send functions to have blocking and non blocking versions of those.

This commit is contained in:
Piotr Esden-Tempski 2010-12-27 15:29:22 +01:00
parent 571c4d37d0
commit bf0b987fe3
4 changed files with 36 additions and 12 deletions

View File

@ -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). */
}

View File

@ -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). */
}

View File

@ -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

View File

@ -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);
}