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

 
 
 
Reply to this topicStart new topic
> Ужасный глюк!, скачет память, помогите :-О
InsolentS
сообщение Jul 21 2007, 07:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



до поры до времени всё было ОК, но как только я запитал девайс от настоящего импульсника, а не от стендового БП, АРМ стал периодически вылетать на адрес 0х000000 , а так как я отлаживаюсь из ОЗУ, там у меня находятся пользовательские данные, соответственно проц вылетает в undefined. Самое интересное, что если отключить прерывания, глюк пропадает. Что же делать, платы готовые, не исправить и другой БП тоже нельзя, проект встал, помогите плизззз crying.gif


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jul 21 2007, 07:30
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Для начала обвешай по питанию керамикой и танталами. Можешь фильтр врезать между ИП и местом его подключения. Кстати, а что такое "настоящий импульсник"?


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 21 2007, 07:35
Сообщение #3


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



По симптомам похоже на BOD или RESET. Или конденсаторы по питанию неудачно расположены.

Однако если запрет прерываний влияет, то возможно возникает какое-то непредвиденное прерывание с нулевым вектором.

1. Какой проц?
2. Программу со всеми инициализациями контроллера прерываний не покажете?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2007, 08:05
Сообщение #4


Гуру
******

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



Цитата(InsolentS @ Jul 21 2007, 10:02) *
адрес 0х000000 , а так как я отлаживаюсь из ОЗУ, там у меня находятся пользовательские данные, соответственно проц вылетает в undefined.
ЧуднО! Вообще-то по этим адресам должны лежать вектора исключений. Неудивительно, что при возникновении прерывания вместо кода по вектору irq процессор обнаруживает мусор. Вот вам для примера .xcl и .mac для работы из ОЗУ (правда для S64, доработаете по вкусу).

Попробуйте неиспользуемые вектора контроллера прерываний направить на функцию-заглушку. Попадание в нее укажет, что разрешено какое-то прерывание без обработчика. Заглушка на векторе FIQ не помешает.

Насчет емкостей тоже согласен - неплохо было бы глянуть схему и главное - разводку.
Прикрепленные файлы
Прикрепленный файл  AT91SAM7_ram.zip ( 3.21 килобайт ) Кол-во скачиваний: 64
 


--------------------
На любой вопрос даю любой ответ
"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
spf
сообщение Jul 21 2007, 09:00
Сообщение #5


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Незадействованные выводы МК подтянуты или настроены как выхода?

Раз работало со стендовым БП, то виновата разводка и импульсный БП.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Jul 21 2007, 12:03
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(sensor_ua @ Jul 21 2007, 13:30) *
Для начала обвешай по питанию керамикой и танталами. Можешь фильтр врезать между ИП и местом его подключения. Кстати, а что такое "настоящий импульсник"?

"Настоящий" я имел ввиду тот, который будет устанавливаться на серийные девайсы, AIMTEC AMEL05

Цитата(GetSmart @ Jul 21 2007, 13:35) *
По симптомам похоже на BOD или RESET. Или конденсаторы по питанию неудачно расположены.

Однако если запрет прерываний влияет, то возможно возникает какое-то непредвиденное прерывание с нулевым вектором.

1. Какой проц?
2. Программу со всеми инициализациями контроллера прерываний не покажете?

проц AT91SAM7X256

Цитата(Сергей Борщ @ Jul 21 2007, 14:05) *
ЧуднО! Вообще-то по этим адресам должны лежать вектора исключений. Неудивительно, что при возникновении прерывания вместо кода по вектору irq процессор обнаруживает мусор. Вот вам для примера .xcl и .mac для работы из ОЗУ (правда для S64, доработаете по вкусу).

Попробуйте неиспользуемые вектора контроллера прерываний направить на функцию-заглушку. Попадание в нее укажет, что разрешено какое-то прерывание без обработчика. Заглушка на векторе FIQ не помешает.

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

Здравствуйте, Сергейsmile.gif Дело в том, что я отлаживаюсь из ОЗУ, т.е. все вектора начинаются с адреса 0х200000, после remap'а

вот инициализация AIC:
Код
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
                        AT91C_ID_US0,
                        5,
                        AT91C_AIC_SRCTYPE_HIGH_LEVEL,
                        (void(*)())ISR_Keyboard);
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_US0);
...
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
                        AT91C_ID_TC0,
                        4,
                        AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                        (void(*)())ISR_Timer0);
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_TC0);      
...
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
                        AT91C_ID_TC1,
                        6,
                        AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                        (void(*)())ISR_Timer1);
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_TC1);
AT91C_BASE_AIC->AIC_FFER=(1<<AT91C_ID_TC1);
...
AT91F_AIC_CfgPMC();
AT91F_AIC_CfgPIO();  

AT91C_BASE_AIC->AIC_SMR[AT91C_ID_FIQ]=AT91C_AIC_SRCTYPE_POSITIVE_EDGE;
AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_FIQ);


Сообщение отредактировал InsolentS - Jul 21 2007, 12:07


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2007, 17:12
Сообщение #7


Гуру
******

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



Цитата(InsolentS @ Jul 21 2007, 15:03) *
Дело в том, что я отлаживаюсь из ОЗУ, т.е. все вектора начинаются с адреса 0х200000, после remap'а
На самом деле вектора всегда начинаются с адреса 0. И именно в эти адреса прыгает процессор. После ремапа в нулевые адреса отражено ОЗУ, поэтому в них наблюдается то же самое, что находится в ОЗУ с адреса 0х200000...
Или я неправильно понял фразу "вылетать на адрес 0х000000 , а так как я отлаживаюсь из ОЗУ, там у меня находятся пользовательские данные". Я понял, что "там" = по адресу 0х000000.
Если с лабораторным источником все работает, а с импульсным - нет, причина на 99% в разводке. Показывайте wink.gif


--------------------
На любой вопрос даю любой ответ
"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
Alexander___
сообщение Jan 15 2008, 03:57
Сообщение #8





Группа: Участник
Сообщений: 10
Регистрация: 30-05-07
Пользователь №: 28 039



Хотелось бы все же узнать чем закончился этот "ужастный глюк"? У меня сттуация похожа.Отладчиком я не пользуюсь, на какие адреса происходит прыжок не знаю. Но периодически происходит переинициализация. RSTC_SR показывает всегда код последнего реально совершенного сброса.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:31
Рейтинг@Mail.ru


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