Запись в TX FIFO
Байт 0:
Dir | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DI | 1 | x | x | x | x | x | x | x |
DO | tx_free 3 | 2 | 1 | 0 | rx_ready 3 | 2 | 1 | 0 |
Далее передаются байты данных, в количестве не более чем tx_free.
Байт N:
Dir | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DI | data 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DO | tx_free 3 | 2 | 1 | 0 | x | x | x | x |
Чтение из RX FIFO
Байт 0:
Dir | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DI | 0 | 1 | x | x | x | x | x | x |
DO | tx_free 3 | 2 | 1 | 0 | rx_ready 3 | 2 | 1 | 0 |
Далее принимаются байты данных из RX FIFO в количестве не более чем rx_ready. Когда буфер опустевает, читаются нули.
Байт N:
Dir | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DI | x | x | x | x | x | x | x | x |
DO | data 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Состояние UART
Байт 0:
Dir | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DI | 0 | 0 | 1 | x | x | x | x | x |
DO | tx_free 3 | 2 | 1 | 0 | rx_ready 3 | 2 | 1 | 0 |
Байт 1:
Dir | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DI | x | x | x | x | x | x | x | x |
DO | OVF | PE | STPE | x | x | x | x | x |
- OVF - переполнение буфера приёма
- PE - ошибка чётности
- STPE - ошибка стопбита
FIXME - какие ещё у нас ошибки UART бывают?
Порядок работы
Выбираем нужный приёмо-передатчик (CS# - down) для начала цикла SPI обмена.
Отправив любую команду в ответ мы получим свободный размер TX FIFO буфера (tx_free) и RX FIFO буфера (rx_ready).
Если это была команда на чтение, то если rx_ready не равен нулю прочитываем имеющиеся байты.
Если это была команда на запись, передаём байты в количестве не большем чем tx_free.
Передача через UART начинается сразу, как только байты появляются в TX FIFO.
Освободждаем приёмо-передатчик (CS# - up).
comments powered by Disqus