jenya7 0 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба Что то непонятное творится. Камень MKV58F24. Настройка UART FIFO 8 байт, больше не конфигурируется, хотя в документации обещают до 128. void UART_Setup(UART_Type * UARTx, uint32_t clock, uint32_t baud_rate) { uart_config_t config; UART_GetDefaultConfig(&config); config.baudRate_Bps = baud_rate; config.rxFifoWatermark = 1; config.enableRx = true; config.enableTx = true; UART_Init(UARTx, &config, clock); //FC_protocol works by polling //UART_EnableInterrupts(UARTx, kUART_RxDataRegFullInterruptEnable); //EnableIRQ(UART0_RX_TX_IRQn); } Посылаю с PC 128 байт - на стороне контроллера принимаю только 9. Пробовал полингом void UART_RecvPacket() { unsigned char chr; /* If new data arrived. */ if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART0)) { chr = UART0->D; rx_idx++; printf("IDX = %d\n", (int)rx_idx); } } И в прерывании void UART0_RX_TX_IRQHandler(void) { unsigned char chr; /* If new data arrived. */ if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART0)) { chr = UART0->D; rx_idx++; printf("IDX = %d\n", (int)rx_idx); } } Принимает только 9 байт. Статусный регистр после приёма не показывает никакой проблемы по которой приём мог бы прерваться. Я что то упускаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба 30 minutes ago, jenya7 said: Я что то упускаю? Не похоже. Может, не 128 отправляется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба On 8/23/2022 at 10:43 AM, aaarrr said: Не похоже. Может, не 128 отправляется? первый вопрос который возник. закоротил пины RX-TX - вижу в терминале все байты которые оправил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба А если руками по одному отправлять, тоже после девятого останавливается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 августа, 2022 Опубликовано 23 августа, 2022 (изменено) · Жалоба On 8/23/2022 at 10:53 AM, aaarrr said: А если руками по одному отправлять, тоже после девятого останавливается? по одному все принимает. понизил бодрейт на 9600 (было 115200) принимает чуть больше - 16 байт. Изменено 23 августа, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба 1 час назад, jenya7 сказал: И в прерывании void UART0_RX_TX_IRQHandler(void) { ... printf("IDX = %d\n", (int)rx_idx); На этом можно расходиться... 1 час назад, jenya7 сказал: Я что то упускаю? Что вы упускаете - вам уже 100500 раз писали. Но как видно из "кода" - без толку.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба On 8/23/2022 at 11:24 AM, jcxz said: На этом можно расходиться... Что вы упускаете - вам уже 100500 раз писали. Но как видно из "кода" - без толку.... вот никогда не любил эту монструозную скотину. в данном случае нет другого способа дебагировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба 6 minutes ago, jenya7 said: вот никогда не любил эту монструозную скотину Дело не в "скотине", а в том, куда её выхлоп направлен. Если в медленный канал, тогда какие вопросы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба On 8/23/2022 at 11:42 AM, aaarrr said: Дело не в "скотине", а в том, куда её выхлоп направлен. Если в медленный канал, тогда какие вопросы? выхода нет. если остановлюсь с брейкпоинтом - прога на PC убежит и я рассинхронизирован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirG 0 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба Выход есть, накапливать принятые данные в буфере. И вызывать принт из основного цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба 1 час назад, aaarrr сказал: Дело не в "скотине", а в том, куда её выхлоп направлен. Если в медленный канал, тогда какие вопросы? Куда бы ни был он направлен, но в фоновой задаче ТС также вызывает printf(). И к гадалке не ходи - он даже не задумался о средствах разделения доступа к потоку вывода stdout. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба 3 hours ago, jenya7 said: FIFO 8 байт, больше не конфигурируется, хотя в документации обещают до 128. Я не настоящий сварщик, но в файле KV5XP144M240RM.pdf в разделе UART сказано 5. UART0 and UART1 contain 8-entry transmit and 8-entry receive FIFOs 6. All other UARTs contain a 1-entry transmit and 1-entry receive FIFOs (чуда с огромными FIFO не случилось). У вас в регистре UARTx_PFIFO что записано? 1 hour ago, aaarrr said: Если в медленный канал, тогда какие вопросы? Насколько я понял изначальный вопрос, в данном случае не важна скорость работы прерывания. Его можно вовсе запретить, и все 128 переданных байт якобы должны лечь в аппаратное FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 августа, 2022 Опубликовано 23 августа, 2022 · Жалоба On 8/23/2022 at 1:31 PM, esaulenka said: Я не настоящий сварщик, но в файле KV5XP144M240RM.pdf в разделе UART сказано 5. UART0 and UART1 contain 8-entry transmit and 8-entry receive FIFOs 6. All other UARTs contain a 1-entry transmit and 1-entry receive FIFOs (чуда с огромными FIFO не случилось). У вас в регистре UARTx_PFIFO что записано? Насколько я понял изначальный вопрос, в данном случае не важна скорость работы прерывания. Его можно вовсе запретить, и все 128 переданных байт якобы должны лечь в аппаратное FIFO. да. верно. это я в общий даташит линейки посмотрел. там все опции. Quote Receive FIFO. Buffer Depth The maximum number of receive datawords that can be stored in the receive buffer before an overrun occurs. This field is read only. 000 Receive FIFO/Buffer depth = 1 dataword. 001 Receive FIFO/Buffer depth = 4 datawords. 010 Receive FIFO/Buffer depth = 8 datawords. 011 Receive FIFO/Buffer depth = 16 datawords. 100 Receive FIFO/Buffer depth = 32 datawords. 101 Receive FIFO/Buffer depth = 64 datawords. 110 Receive FIFO/Buffer depth = 128 datawords. 111 Reserved. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться