ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
12 мая
56525 Топик полностью
ASugonyaev (10.04.2006 06:55, просмотров: 1) ответил _basile на After a reset, the mode is ARM, Supervisor, interrupts disabled.
Ответ: Вот именно по этому я вставил сюда кусок асм, где ничего лишнего только предварительные настройки и запуск прерывания. MSR CPSR_c, #Mode_SVC ;|I_Bit|F_Bit Как Вы не могли заметить этого!? Тем более что я писал на симуляторе все отрабатывает, на железе срывается в прерывание и виснет. Но я уже высянил причину и хочу поделится ей с другими: serila download использует код зашитый на заводе в kernel (2Kb), так вот нигде в даташите не указано четко, кроме одного упоминания вскольз что запуск пока (в текущем релизе загрузчика) возможен с 0x00800000, но это запуск и после прочтения этого абзаца я просто не стал запускать коммандой RUN, а делал RESET или вообще POR. Так вот загрузчик это не только не может запустить код ниже 0x00800000 но и загрузить его во флеш тоже не может. Таким образом получается что любыми компиляторами и языками созданная программа не попадает в смещение 0x0, а значит в таблице векторов "мусор". Вот по этому было ощущение что прерывания где то подвисают, на самом деле они либо уходят по несуществующему адресу либо находятся в вечном unknown. Удивительно что RESET еще срабатывал! Там странного вида комманда bne ######### неизвестно куда. Тем кто будет пользоваться ADuC 702x на заметку нужно строить код так что бы тут же ремапить ОЗУ в 0x0, и копировать весь код в 0x0. Либо копировать только таблицу векторов, а код строить по принципу перемещаемости (ключ /PIC у GCC).