Эньдя.... Ну и система отладки .... ППЦ!

ЗАПУСТИЛ !!!! УРАААА!!!! Я таки запустил прерывания ! И IAR-овские и свои!
Трабла была в том, что действительно нельзя смотреть регистр AIC_IVR... ЖЕСТЬ! Естественно в предыдущие свои попытки я никуда без него деться не мог.... Ну и запись в регистр конца прерывания AIC_EOICR оказалось так же необходимой, без нее прерывания тоже не работали. Запись в AIC_EOICR поставил сразу после всех инициализаций, перед началом основного тела программы.
Обнаружились следующие глюки, по которым надо разобраться. нужон ХЕЛП!
В моей программе отладчик входит в прерывания только в том случае, если я смотрю регистры того устройства, от которого жду прерывание. Т.е. если у меня запущен таймер, то когда кликаеш кнопку запуска программы "в постоянку"(запамятовал как она обзывается) в прерывание программа заходит всего один раз, а далее выполняется основное тело программы, даже если я ставлю курсор в обработчик прерывания и нажимаю кнопку запуска "выполнить до текущей позиции курсора", то контроллер в прерывания даже не заходит. А вот если я при этом просматриваю регистры таймера и делаю все те же операции, то в прерывания МК заходит. Пошагово все отрабатывается вроде нормально. В самом обработчике прерываний у меня прога меняет состояние светодиода- горит/негорит. И вот даже если я запускаю, просматривая при этом регистры таймера, то светодиод не моргает. Но когда останавливаю/запускаю программу, то состояние светодиода меняется в момент очередного запуска только. Тобиш программа получается заходит в прерывание всего один раз после того как я нажал на кнопку "запуска программы".
В Главном примере от яра такой баг отстутствует. Там я тоже дописал прогу, чтобы при заходе в прерывание менялось состояние светодиода. В основном теле программы так же стоит код - меняющий состояние другого светодиода. И вот тут то все в точности до наоборот. Запускаеш программу (но тут уже не важно смотрю я регистр таймера или не смотрю) - мигает светодиод "прерываний", а основной программы моргнет раза 3-4 и остановится. Пошагово когда смотриш работу, то видно, что только программа вышла из прерывания и сразу же заходит в него обратно. (Хотя до этого же основное тело программы выполнялось параллельно с прерываниями).
Правда один раз случилось чудо и программа заработала нормально после энного программного резета из окна дебугера, т.е. мигали и светодиод основной программы и светодиод прерывания.
В чем может быть баг?
В случае моей программы я использую чутка модифицированный асмовский файл cstartup того же примера яра, только lowinit процедуру я "убил" и вынес ее в другой-отдельный файл инициализации, где так же проходит инициализация нужной мне периферии. В обработчике прерываний между моим и яровским примером имеется следующее отличие в начале :
AT91PS_TC TC_pt = AT91C_BASE_TC0;
unsigned int dummy;
//* Acknowledge interrupt status
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
count_timer0_interrupt++;
- что они этим хотели сделать ?
Но в защиту програмки яра надо сказать, что я припоминаю, что у меня там 2 таймера работают. МОжет это они друг другу толком работать не дают.? Хотя с другой стороны время обработки прерываний много меньше, чем время вызова этих прерываний....
А вообще всем огромное спасибо за то что помогаете новичку !!!!
Пробовал отладку и в РАМ и во ФЛЭШ и там и там отлаживается везде все одинаково
Как теперь мне загрузить програмку в контроллер, чтобы она выполнялась на отладочной плате сразу после включения питания, автономно, не зависимо от дебугера ? А то у меня этот фокус так и не вышел. Подскажите правильные настройки для кристалла AT91SAM7S64 в IAR для Wiggler, чтобы во флэш залить для выполнения автономно....
Пробовал как советовал Сергей:
1) Запускаем IAR, создаем новый workspace или используем текущий.
2) Project->Create new project, выбираем C -> main или C++ -> main по вкусу, жмем ОК, указываем имя проекта.
3) Идем Project -> Options -> General Options
3.1)вкладка Target
--- Ставим крыжик на Device, выбираем в списке тип процессора. Это заставит IAR правильно указывать компилятору/ассемблеру архитектуру (ARM7TDMI, ARM9E и т.д.), правильно выбрать библиотеку, указать симулятору подходящий файл описания sfr (.ddf).
--- Выбираем Processor Mode Arm Или Thumb
4) Project -> Options -> С/С++ Compiler
4.1)вкладка Language
--- В разделе Language галочка уже стоит где надо в зависимости от того, что мы выбрали в п.2. Можно переставиь ее на Automatic(extension based).
4.2)вкладка Optimization
--- Для начала оставляем Size Low или Size none, позволит легко отлаживаться. По мере возрастания опыта можно будет увеличить до максимума.
4.3)вкладка List
--- ставим галочку Output list file
--- Ставим галочку Assembler mnemonics
5) Project -> Options -> Assembler
5.1) Вкладка List
--- ставим галочку Output list file
6) Project -> Options -> Linker
6.1) Вкладка Output
--- Если делаем проект для RAM оставляем все как есть, если для Flash - ставим галочку Allow C-SPY-specific output file и на вкладке Extra output ставим галочки Generate Extra output file и выбираем Output Format -> simple-code
6.2) Вкладка List
--- ставим галочку Generate linker listing
6.3) Вкладка Config
Копируем из папки примеров компилятора в папку проекта подходящий .xcl
--- Link command file ставим галочку Override default, указываем $PROJ_DIR$\файл.xcl
7) Project -> Options -> Debugger
7.1) Вкладка Setup
--- Выбираем Driver (Simulator/J-Link/Macraigor и т.д.)
Копируем из папки примеров .mac в папку проекта
--- Ставим галочку Use Macro File, указываем $PROJ_DIR$\файл.mac
7.2) Если отлаживаемся в Flash: Вкладка Download
--- Если отлаживаемся в Flash, ставим галочки Verify download, Use flash loader(s)
--- Жмем Edit, в появившейся форме New..., в появившемся окне настроек ничего не трогая жмем OK., Жмем ОК в форме выбора загрузчиков.
8) Если используем Wiggler, Project -> Options -> Macraigor
--- Выбираем Wiggler в списке OCD interface device.
Остальное можно не трогать.
9) File->Save all.
В качестве .xcl файла был выбран at91SAM7S64_NoRemap.xcl - стандартный яра а макросовый - SAM7.mac, так же стандартный от яра. Может там чего поменять так же необходимо? Или те настройки что я сделал - это только для дебуга во флэше? Но не автономная работа контроллера ?
еще раз повторюсь - отладочная плата SAM7-P64
Сообщение отредактировал Vinterman - Nov 26 2008, 03:11