|
29 | 29 | #include "hal/us_ticker_api.h"
|
30 | 30 | #include "hal/lp_ticker_api.h"
|
31 | 31 |
|
32 |
| -/* Flush serial buffer before deep sleep |
| 32 | +/* To prevent a loss of Greentea data, the serial buffers have to be flushed |
| 33 | + * before the UART peripheral shutdown. The UART shutdown happens when the |
| 34 | + * device is entering the deepsleep mode or performing a reset. |
33 | 35 | *
|
34 |
| - * Since deepsleep() may shut down the UART peripheral, we wait for some time |
35 |
| - * to allow for hardware serial buffers to completely flush. |
| 36 | + * With the current API, it is not possible to check if the hardware buffers |
| 37 | + * are empty. However, it is possible to determine the time required for the |
| 38 | + * buffers to flush. |
36 | 39 | *
|
37 |
| - * Take NUMAKER_PFM_NUC472 as an example: |
38 |
| - * Its UART peripheral has 16-byte Tx FIFO. With baud rate set to 9600, flush |
39 |
| - * Tx FIFO would take: 16 * 8 * 1000 / 9600 = 13.3 (ms). So set wait time to |
40 |
| - * 20ms here for safe. |
41 |
| - * |
42 |
| - * This should be replaced with a better function that checks if the |
43 |
| - * hardware buffers are empty. However, such an API does not exist now, |
44 |
| - * so we'll use the busy_wait_ms() function for now. |
| 40 | + * Assuming the biggest Tx FIFO of 128 bytes (as for CY8CPROTO_062_4343W) |
| 41 | + * and a default UART config (9600, 8N1), flushing the Tx FIFO wold take: |
| 42 | + * (1 start_bit + 8 data_bits + 1 stop_bit) * 128 * 1000 / 9600 = 133.3 ms. |
| 43 | + * To be on the safe side, set the wait time to 150 ms. |
45 | 44 | */
|
46 |
| -#define SERIAL_FLUSH_TIME_MS 20 |
| 45 | +#define SERIAL_FLUSH_TIME_MS 150 |
47 | 46 |
|
48 | 47 | #define US_PER_S 1000000
|
49 | 48 |
|
|
0 commit comments