реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LPC4357 Eclipse/GCC, проблема с инициализацией LCD интерфейса
nanorobot
сообщение Oct 29 2014, 08:12
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Проект был начат в IAR, но по причинам, которые долго объяснять, перешел на GCC. В IAR была написана и отлажена инициализация SDRAM и LCD.
При переходе на GCC процедура инициализации SDRAM была отлажена быстро, запуск инициализации LCD вызвал проблемы, которые не могу осознать несколько дней. Как в IAR, так и в GCC используются библиотеки от NXP. Выполнение инструкции <LCDx->TIMV = regValue;>
(см скриншот) вызывает Target halted отладчика(JLink/SWD). MCU улетает в неизвестное состояние (на HardFault, BusFault и прочие фаулты, поставлены обработчики, выводяшие соотв. сообщение в USART, чего не происходит )
Кроме того, после первой записи в регистры LCDx->CTRL &= ~CLCDC_LCDCTRL_ENABLE, JLink пишет в логе: WARNING: Failed to read memory @ address 0x400080xx, так же и эклипса: Cannot access memory at address 0x400080xx, для всех xx адресов регистров LCD.

Сообщение отредактировал nanorobot - Oct 29 2014, 08:14
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 29 2014, 08:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(nanorobot @ Oct 29 2014, 11:12) *
Проект был начат в IAR, но по причинам, которые долго объяснять, перешел на GCC.

Кстати, Keil умеет отлаживать код, который выдаеёт gcc (правда, gcc 4.7 работает, а вот на gcc 4.8 кейловский отладчик падает). Кейловский отладчик уж поудобнее будет, чем эта кривая эклипса.

Цитата(nanorobot @ Oct 29 2014, 11:12) *
Выполнение инструкции <LCDx->TIMV = regValue;>
(см скриншот) вызывает Target halted отладчика(JLink/SWD). MCU улетает в неизвестное состояние (на HardFault, BusFault и прочие фаулты, поставлены обработчики, выводяшие соотв. сообщение в USART, чего не происходит )

Не мешало бы подойти к точке сбоя в окне дизассемблера, чтобы точно установить, какая инструкция виновата.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Oct 29 2014, 12:51
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(scifi @ Oct 29 2014, 13:48) *
Кстати, Keil умеет отлаживать код, который выдаеёт gcc (правда, gcc 4.7 работает, а вот на gcc 4.8 кейловский отладчик падает). Кейловский отладчик уж поудобнее будет, чем эта кривая эклипса.


Не мешало бы подойти к точке сбоя в окне дизассемблера, чтобы точно установить, какая инструкция виновата.



К своему стыду признаюсь, в ассемблере THUMB слаб. Для АВР - да, использовал. Но здесь непонятное с доступом. На скриншоте 1 дамп памяти, где расположены регистры LCD, до выполнения первого оператора реализующего доступ к этим регистрам. Все они равны 0 кроме регистров палитры(с адреса 0x40008200). На втором скриншоте nот же дам памяти после выполнения оператора. Все регистры недоступны. Блин, пока писал понял, что недоступны не только регистры LCD, но и все прочие - теряется связь МК с JLink.

Последняя проверка показала что обращение(запись) к регистру LCDx->UPBASE (адрес фреймбуфера) - к подобной катастрофе не приводит

Сообщение отредактировал nanorobot - Oct 29 2014, 13:04
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Oct 30 2014, 09:36
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Написал минимальный фрагмент, который "весит" CPU. После выполнения оператора в строке 112, процессор впадает в некую кому.
Это точно не HardFault или какое либо unhandled_exception. На все обработчики прерываний поставлены заглушки с зажиганием светодиода, и их отработка проверена(на примере HardFault). В зтом состоянии обрывается связь JLink c CPU . Перезапуском GDB сервера связь восстановить не удается, только ресетом (см скриншот 2) . Перезапуск JLink не требуется, то есть виснет именно ядро(CPU)

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 30 2014, 10:01
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



У Вас в Iar и GCC один и тот же startup код?


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Oct 30 2014, 10:32
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Lotor @ Oct 30 2014, 15:01) *
У Вас в Iar и GCC один и тот же startup код?


Нет, В GCC Statrup от РТОС ChibiOs.
Точнее сказать - вместе с ChibiOs

Сообщение отредактировал nanorobot - Oct 30 2014, 10:36
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 30 2014, 11:22
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Oct 30 2014, 14:57
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Сергей Борщ @ Oct 30 2014, 16:22) *
Может ядро где-то кем-то загоняется в спячку?
Гляньте - вроде как был какой-то регистр, который позволял не отключать отладчик при уходе в спячку.


Проект в самом начале, процессов которые могли бы усыпить ядро - нет. Кроме главного процесса есть еще один, мигает ледом - признак контроля жизни. Да и все режимы типа Sleep/Power down запрещены в соотв. регистре.
Разрешить работу отладчика во сне/повердовне похоже нельзя.

Сообщение отредактировал nanorobot - Oct 30 2014, 14:58
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Oct 31 2014, 17:12
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Lotor @ Oct 30 2014, 15:01) *
У Вас в Iar и GCC один и тот же startup код?


Неожиданно для меня, но причина видимо действительно где то здесь. С целью анализа ситуации перенес существующий зачаток проекта снова в IAR(ранее в IAR было без ChibiOs, и, соответственно, без его startup).
Симптомы в IAR ровно те же, что и в GCC ! Ув. Lotor, не продолжите Вашу мысль?

Сообщение отредактировал nanorobot - Oct 31 2014, 17:17
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016