|
Слетает прерывание UART при работающем LWIP, плата Freescale FRDM-K64F |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 29)
|
Mar 30 2016, 08:30
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(ataradov @ Mar 30 2016, 12:15)  Могу предположить случайный проезд по памяти.
Точка останова на доступ к памяти может помочь, если есть возможность под отладчиком воспроизвести. Я тоже так думаю. т.к. иногда отладчик ругается что не может прочитать память.... Просто часть прогарммы то работает, плата по сети пингуется...обмен по lwip происходит (снифером посмотрел)...отправка данных по злосчастному уарту идет но ни чего не принимает.... Как с этим бороться ?
|
|
|
|
|
Mar 30 2016, 08:35
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(ataradov @ Mar 30 2016, 12:32)  Ну так если отладчик есть, то поставить точку останова на запись в этот регистр. Там и видно будет, кто его выключает. Запись в какой регистр ???? Я сейчас пере инициализацию уарта поставил если прерывание будет запрещено...посмотрим как оно зафурычит.. Кстати, отлаживаю под eclipse (KDS_3.0.0)....там хрен что посмотришь.... ЗЫ: в NXP Community прочитал что при отладке, встроенный в плату J-Link подглючивает....память там не читает и т.д....
Сообщение отредактировал asm_lock - Mar 30 2016, 08:40
|
|
|
|
|
Mar 30 2016, 08:41
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ataradov @ Mar 30 2016, 14:15)  Могу предположить случайный проезд по памяти. Точка останова на доступ к памяти может помочь, если есть возможность под отладчиком воспроизвести. Фразу "происходит запрет прерывания" в контексте данного топика не следует воспринимать буквально как "самопроизвольно снимается бит разрешения прерывания по событию опустошения или заполнения FIFO UART". Это исходя из формулировки вопроса. Речь может идти от чего угодно, вплоть от банального переполнения стека или разрушения каких структур в памяти и улёта куда угодно, до как Вы указали - записи в управляющие регистры периферии, но не конкретный регистр, а какие угодно - от любого регистра конфигурирования UART, до регистров разрешения тактирования или питания UART либо любых других. Так что бряк на доступ к памяти вряд-ли поможет. Цитата(asm_lock @ Mar 30 2016, 14:30)  Я тоже так думаю. т.к. иногда отладчик ругается что не может прочитать память.... Вот и подтверждение моих слов.  Эта фраза отладчика расшифровывается как "не могу прочитать некие регистры периферии так как их тактирование (или питание) отключено через соответствующие биты конфигурации тактирования/питания". Возможно у Вас происходит перезапуск ПО устройства с переинициализацией всей периферии, а Вы этого даже не замечаете. Поставьте бряк на начало main(). PS: Совет - первым делом проверьте все стеки на предмет переполнения. И ищите баги в ПО методом исключения.
|
|
|
|
|
Mar 30 2016, 08:48
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(jcxz @ Mar 30 2016, 12:41)  Вот и подтверждение моих слов.  Эта фраза отладчика расшифровывается как "не могу прочитать некие регистры периферии так как их тактирование (или питание) отключено через соответствующие биты конфигурации тактирования/питания". Возможно у Вас происходит перезапуск ПО устройства с переинициализацией всей периферии, а Вы этого даже не замечаете. Поставьте бряк на начало main(). PS: Совет - первым делом проверьте все стеки на предмет переполнения. И ищите баги в ПО методом исключения. Бряк стоит...в том то и дело...перезапуска не происходит. Крутимся в wile'.....
|
|
|
|
|
Mar 30 2016, 15:45
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(ataradov @ Mar 30 2016, 19:36)  Если "выключается прерывание" - это действительно не "пропадает флаг разрешения в регистре", а "вообще ничего не работет", то нужно действительно настраивать MPU и ловить левые обращения.
Не важно что для чего предназначено, для отладки любое MPU подойдет. Ну как это ничего ?? LWIP работает, таймеры все работают....UART который весит на USB работает... Не работает только прерывание UART который весит на 485-м интерфейсе....
Сообщение отредактировал asm_lock - Mar 30 2016, 15:48
|
|
|
|
|
Mar 31 2016, 06:14
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(AlexandrY @ Mar 31 2016, 00:23)  С LwIP так понимаю работаете из под FreeRTOS и все взято из примеров которые идут с SDK? Судя по тому что в SDK нет примеров LwIP совместно с USB, то вы наверно совершили рискованное скрещивание.  Никакого FreeRTOS'а нету... у Frescale примеры есть в KSDK_1.0.0
|
|
|
|
|
Mar 31 2016, 08:15
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(ataradov @ Mar 30 2016, 19:55)  Ну так что говорит бит в регистре разрешения прерываний?
Гадать на кофе тут не выйдет, нужно отлаживать. В осовном цикле UART3_C2 = 0x2C; В обработчике UART3_C2 = 0x8C;
|
|
|
|
|
Mar 31 2016, 08:34
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(asm_lock @ Mar 31 2016, 11:15)  В осовном цикле UART3_C2 = 0x2C; В обработчике UART3_C2 = 0x8C; TIE зависит от наличия процесса передачи и может быть любой и в обработчике и в цикле. RIE должен быть всегда установлен. Однако при переполнении прием запрещается. RIE устанавливается в 0, так написано в драйвере fsl_uart_driver.c Поэтому проверьте переполнение.
|
|
|
|
|
Mar 31 2016, 09:21
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(AlexandrY @ Mar 31 2016, 12:34)  TIE зависит от наличия процесса передачи и может быть любой и в обработчике и в цикле. RIE должен быть всегда установлен. Однако при переполнении прием запрещается. RIE устанавливается в 0, так написано в драйвере fsl_uart_driver.c Поэтому проверьте переполнение. В самом начале обработчика прерывания стоит опрос функции UART_HAL_GetRxDataRegFullIntCmd(baseAddr). Когда перестаю приниматься данные , он всегда false . Как это переполнение очистить то ?
Сообщение отредактировал asm_lock - Mar 31 2016, 09:24
|
|
|
|
|
Mar 31 2016, 10:23
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(asm_lock @ Mar 31 2016, 12:21)  В самом начале обработчика прерывания стоит опрос функции UART_HAL_GetRxDataRegFullIntCmd(baseAddr). Когда перестаю приниматься данные , он всегда false . Как это переполнение очистить то ? Так эта функция всего лишь возвращает значение RIE. В новом SDK от нее уже отказались. Поставьте просто Код UART3_C2 |= 0x20; после этой функции. Но будьте готовы к потере данных.
|
|
|
|
|
Mar 31 2016, 10:55
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата(AlexandrY @ Mar 31 2016, 14:23)  Код UART3_C2 |= 0x20; после этой функции. Но будьте готовы к потере данных. попробую... ЗЫ: не помогло...
Сообщение отредактировал asm_lock - Mar 31 2016, 11:28
|
|
|
|
|
Mar 31 2016, 13:55
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178

|
Цитата А какая установка глубины 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);
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|