Перейти к содержанию
    

Не полный приём по UART.

Что то непонятное творится. 

Камень 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 байт.

Статусный регистр после приёма не показывает никакой проблемы по которой приём мог бы прерваться.

image.thumb.png.d639cbda1821740a145920e2da511cf5.png

 

Я что то упускаю?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/23/2022 at 10:43 AM, aaarrr said:

Не похоже. Может, не 128 отправляется?

первый вопрос который возник. закоротил пины RX-TX - вижу в терминале все байты которые оправил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если руками по одному отправлять, тоже после девятого останавливается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/23/2022 at 10:53 AM, aaarrr said:

А если руками по одному отправлять, тоже после девятого останавливается?

по одному все принимает. понизил бодрейт на 9600 (было 115200) принимает чуть больше - 16 байт.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jenya7 сказал:

И в прерывании

void UART0_RX_TX_IRQHandler(void)
{
...
  printf("IDX = %d\n", (int)rx_idx);

На этом можно расходиться...  :mega_shok:

1 час назад, jenya7 сказал:

Я что то упускаю?

Что вы упускаете - вам уже 100500 раз писали. Но как видно из "кода" - без толку.... :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/23/2022 at 11:24 AM, jcxz said:

На этом можно расходиться...  :mega_shok:

Что вы упускаете - вам уже 100500 раз писали. Но как видно из "кода" - без толку.... :unknw:

вот никогда не любил эту монструозную скотину. в данном случае нет другого способа дебагировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, jenya7 said:

вот никогда не любил эту монструозную скотину

Дело не в "скотине", а в том, куда её выхлоп направлен. Если в медленный канал, тогда какие вопросы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/23/2022 at 11:42 AM, aaarrr said:

Дело не в "скотине", а в том, куда её выхлоп направлен. Если в медленный канал, тогда какие вопросы?

выхода нет. если остановлюсь с брейкпоинтом - прога на PC убежит и я рассинхронизирован.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выход есть, накапливать принятые данные в буфере. 

И вызывать принт из основного цикла.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, aaarrr сказал:

Дело не в "скотине", а в том, куда её выхлоп направлен. Если в медленный канал, тогда какие вопросы?

Куда бы ни был он направлен, но в фоновой задаче ТС также вызывает printf(). И к гадалке не ходи - он даже не задумался о средствах разделения доступа к потоку вывода stdout.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.


 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...