Понадобилось организовать в программе функцию таймерной паузы. Решил попробовать сделать это на PITе (Periodic Interval Timer). Для этих целей взял с сайта atmel следующий пример кода:
Собственно здесь: ISR_Pit - обработчик прерывания, ConfigurePit - конфигурирование PIT и System Controller, Wait - процедура таймерной задержки.
При выполнении данного кода, а точнее при выполнении процедуры IRQ_EnableIT(AT91C_ID_SYS), контроллер "виснет", т.е. постоянно уходит в прерывание (прерывания обрабатываются) и не выходит в исходный код программы. PIT считает как положено, но дальнейшая программа не выполняется.
Пробовал собирать проект в GNU, Keil, IAR - результат везде одинаковый. Гружу через jtag.
Кто-нибудь пробовал организовывать PIT на данной плате? В чем может быть проблема? Подскажите пожалуйста.
Использовал PIT для системного таймера при портировании разных микроядер на g45 и на 9260, частично смотрел примеры - никаких проблем не замечал. Напишите точнное название архива с примером (лучше тот что для gcc )- там вроде все элментарно.
Брал из архива at91sam9m10-ek-softpack-1.9, пример getting-started-project по этому адресу: softpack. В этом софтпаке примеры для 3-х вышеупомянутых сред разработки.
Вот именно, что все вроде элементарно и понятно, а работать как положено не хочет. Я подозреваю, что дело в AIC. Видимо он не в тот режим входит. Либо в инициализации что-то не так в board_cstartup и LowLevelInit.
Запустил пример на местной плате стартеркит (бинарник который там идет) в sram, загружал с SD (сделать первичный раздел fat32 и разомкнуть перемычку NAND_CS) - просто переименовал getting-started-project-at91sam9m10-ek-at91sam9m10-sram.bin в BOOT.BIN
по циферкам валящим в терминал очевидно что ничего не виснет.
Не забывайте про то что на плате стоит DDR не такая как на -EK, поэтому если хотите использовать ее - нужно править инициализацию - попросту заменить кодом инита DDR из bootstrap идущем в bsp c платой
Я пробовал грузить и запускать в sram через jtag из отладчика, также пробовал грузить через samba с помощью jtag и запускать go 0x300000. Может ли это влиять на ситуацию?
Попробовал запустить идущий в примере бинарник для sram, загружал с SD как в вашем примере, выводит в терминал следующее:
Попробовал поставить другую плату. Все заработало. Видимо все-таки с платой проблемы были. Есть на ней какой-нибудь hardreset чтобы вернуть к заводским настройкам? Или перешить ее как-то можно в рабочее состояние? Linux который стоял на ней тоже не грузится.
Если на ней не работает 100% рабочий код с встроенной sram - о какой перепрошивке может идти речь ? С другой стороны если код загружается с SD и работает DBGU - о повреждении контроллера тоже вроде речи нет :) В общем случай запутаный, как восстановить начальную прошивку - должно быть написано где-то в BSP от платы, смотрите там.