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

Слетает прерывание UART при работающем LWIP

Поставил пере инициализацию уарта если UART_HAL_GetRxDataRegFullIntCmd(baseAddr) == false.

 

Не помогло....

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


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

Не помогло....
Если "выключается прерывание" - это действительно не "пропадает флаг разрешения в регистре", а "вообще ничего не работет", то нужно действительно настраивать MPU и ловить левые обращения.

 

Не важно что для чего предназначено, для отладки любое MPU подойдет.

 

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


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

Если "выключается прерывание" - это действительно не "пропадает флаг разрешения в регистре", а "вообще ничего не работет", то нужно действительно настраивать MPU и ловить левые обращения.

 

Не важно что для чего предназначено, для отладки любое MPU подойдет.

 

Ну как это ничего ?? LWIP работает, таймеры все работают....UART который весит на USB работает...

Не работает только прерывание UART который весит на 485-м интерфейсе....

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

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


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

Не работает только прерывание UART который весит на 485-м интерфейсе....
Ну так что говорит бит в регистре разрешения прерываний?

 

Гадать на кофе тут не выйдет, нужно отлаживать.

 

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


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

Ну как это ничего ?? LWIP работает, таймеры все работают....UART который весит на USB работает...

Не работает только прерывание UART который весит на 485-м интерфейсе....

 

С LwIP так понимаю работаете из под FreeRTOS и все взято из примеров которые идут с SDK?

Судя по тому что в SDK нет примеров LwIP совместно с USB, то вы наверно совершили рискованное скрещивание. :biggrin:

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


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

С LwIP так понимаю работаете из под FreeRTOS и все взято из примеров которые идут с SDK?

Судя по тому что в SDK нет примеров LwIP совместно с USB, то вы наверно совершили рискованное скрещивание. :biggrin:

 

Никакого FreeRTOS'а нету... у Frescale примеры есть в KSDK_1.0.0

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


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

Никакого FreeRTOS'а нету... у Frescale примеры есть в KSDK_1.0.0

 

Староватый SDK.

Теперь 2.0 актуальный и поддерживаемый.

Но кто мешает взять там пример под IAR и отлаживать с нормальным перехватом обращений к регистрам?

 

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


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

Ну так что говорит бит в регистре разрешения прерываний?

 

Гадать на кофе тут не выйдет, нужно отлаживать.

 

В осовном цикле UART3_C2 = 0x2C;

В обработчике UART3_C2 = 0x8C;

 

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


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

В осовном цикле UART3_C2 = 0x2C;

В обработчике UART3_C2 = 0x8C;

 

TIE зависит от наличия процесса передачи и может быть любой и в обработчике и в цикле.

RIE должен быть всегда установлен.

Однако при переполнении прием запрещается. RIE устанавливается в 0, так написано в драйвере fsl_uart_driver.c

Поэтому проверьте переполнение.

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


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

TIE зависит от наличия процесса передачи и может быть любой и в обработчике и в цикле.

RIE должен быть всегда установлен.

Однако при переполнении прием запрещается. RIE устанавливается в 0, так написано в драйвере fsl_uart_driver.c

Поэтому проверьте переполнение.

 

В самом начале обработчика прерывания стоит опрос функции UART_HAL_GetRxDataRegFullIntCmd(baseAddr).

Когда перестаю приниматься данные , он всегда false .

Как это переполнение очистить то ?

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

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


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

В самом начале обработчика прерывания стоит опрос функции UART_HAL_GetRxDataRegFullIntCmd(baseAddr).

Когда перестаю приниматься данные , он всегда false .

Как это переполнение очистить то ?

 

Так эта функция всего лишь возвращает значение RIE.

В новом SDK от нее уже отказались.

Поставьте просто

UART3_C2 |= 0x20;

после этой функции.

Но будьте готовы к потере данных.

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


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

UART3_C2 |= 0x20;

после этой функции.

Но будьте готовы к потере данных.

 

попробую...

 

ЗЫ: не помогло...

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

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


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

А какая установка глубины FIFO стоит?

 

Спасибо что спросили....

в инициализации только вот это прописано...

 

UART_HAL_SetRxFifoWatermark(baseAddr, 1);

 

/* Enable and flush the FIFO prior to enabling the TX/RX */

UART_HAL_SetTxFifoCmd(baseAddr, true);

UART_HAL_SetRxFifoCmd(baseAddr, true);

UART_HAL_FlushTxFifo(baseAddr);

UART_HAL_FlushRxFifo(baseAddr);

 

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


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

Увеличил размер FIFO в регистре UARTx_PFIFO до 64 слов....

И начал чистить его как только выползал флаг OR в регистре UARTx_S1.

 

Уже два часа работает без глюков...

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


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

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

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

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

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

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

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

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

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

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