Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Мой первы проект на LPC2148 покритекуйте
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
*SERG
Посмотрите прект. Контроллер lpc2148 программирую в кейл 3.15b. Особо интерсует правильно ли изменил Startup файл, для использования IRQ прерываний. Всё работает, но сомнения есть. Может вообще всё коряво smile.gif Скажите своё мнение smile.gif
defunct
Дык, а в чем если не секрет состоит изменеие в стартапе?

LDR PC,[PC, #-0x0FF0]
вроде стандартно для keil.
стек Вы тоже не трогали.
Не вижу ничего что могло бы коснуться IRQ.

В c-файле - все ок.
*SERG
Цитата(defunct @ Nov 29 2007, 13:38) *
Дык, а в чем если не секрет состоит изменеие в стартапе?

LDR PC,[PC, #-0x0FF0]
вроде стандартно для keil.
стек Вы тоже не трогали.
Не вижу ничего что могло бы коснуться IRQ.

В c-файле - все ок.


Я рад что в Си всё ок biggrin.gif
А в стартапе пришлось добавить пару строк
PRESERVE8 ; tell linker: stack alignment is 8-byte
IMPORT IRQ_Handler ; use external FIQ_Handler
без них не работает и смысла этих строк я несовсем понимаю, разжуйте плиз. 05.gif
aaarrr
Цитата(*SERG @ Nov 29 2007, 16:12) *
Я рад что в Си всё ок biggrin.gif
А в стартапе пришлось добавить пару строк
PRESERVE8 ; tell linker: stack alignment is 8-byte
IMPORT IRQ_Handler ; use external FIQ_Handler
без них не работает и смысла этих строк я несовсем понимаю, разжуйте плиз. 05.gif

Уберите из стартапа строку:
Код
IRQ_Addr        DCD     IRQ_Handler

тогда не нужен будет IMPORT - IRQ_Handler все равно не используется.

А PRESERVE8 из каких соображений добавлен? Во-первых, он там уже есть чуть раньше, а во-вторых, для ARM7TDMI такое выравнивание не нужно, лучше задавить соответствующую ошибку линкера.
*SERG
Цитата(aaarrr @ Nov 29 2007, 17:06) *
Уберите из стартапа строку:
Код
IRQ_Addr        DCD     IRQ_Handler

тогда не нужен будет IMPORT - IRQ_Handler все равно не используется.

А PRESERVE8 из каких соображений добавлен? Во-первых, он там уже есть чуть раньше, а во-вторых, для ARM7TDMI такое выравнивание не нужно, лучше задавить соответствующую ошибку линкера.


Обе эти строчки на форуме помоему вычитал, или в хелпе, тупо добавил и всё. А какая функция этих строк. зачем они нужны в принцепе?
aaarrr
IMPORT sym - указывает ассемблеру, что символ sym находится во внешнем файле.
PRESERVE8 - указывает, что в процедурах текущего файла сохраняется выравнивание стека по границе 8 байт. Нужно только для процессоров с инструкциями LDRD/STRD, ARM7 к ним не относится.
*SERG
Цитата(aaarrr @ Nov 30 2007, 12:34) *
IMPORT sym - указывает ассемблеру, что символ sym находится во внешнем файле.
PRESERVE8 - указывает, что в процедурах текущего файла сохраняется выравнивание стека по границе 8 байт. Нужно только для процессоров с инструкциями LDRD/STRD, ARM7 к ним не относится.

Огроменное спасибо! a14.gif smile.gif
sybirman
скажите, а в каком месте в стартапе (архив в начале темы) происходит разрешение IRQ прерывания?

код из стартапa:
Код
I_Bit           EQU     0x80           ; when I bit is set, IRQ is disabled


Код
;  Enter IRQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit


правильно ли я понял, что в предыдущей строчке, происходит установка режима IRQ и битов I & F.
если да, то получается что прерывания запрещены ? (вот здесь я скорее всего ошибаюсь)
поясните, пожалуйста.

и еще вопрос, есть ли различие в фунциональности у предыдущей команды и следующими?
Код
     MRS    r0, cpsr
     ORR    r0, r0, #I_Bit:OR:F_Bit;disable IRQ and FIQ interrupts
     MSR    cpsr_c, r0

11111111

для чего нужны 2 верхние команды, если можно было как в стартапе - сделать одной?
MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
aaarrr
В первом случае процессор переводится в режим IRQ с одновременным запретом IRQ и FIQ, во втором - запрещаются IRQ и FIQ в текущем режиме.

P.S. Давайте ссылкам вменяемые имена, если не трудно.


P.P.S. Тут я был не совсем прав:
Цитата(aaarrr @ Nov 30 2007, 13:34) *
PRESERVE8 - указывает, что в процедурах текущего файла сохраняется выравнивание стека по границе 8 байт. Нужно только для процессоров с инструкциями LDRD/STRD, ARM7 к ним не относится.

Выравнивание может требоваться также для некоторых float-библиотек.
sybirman
Цитата(aaarrr @ Sep 8 2008, 21:29) *
В первом случае процессор переводится в режим IRQ с одновременным запретом IRQ и FIQ,


что-то я совсем запутался.
если происходит запрет irq, то как же тогда происходит выполнение;
Код
__irq void IRQ_Handler (void)
{
IO0CLR=1<<10;
T0TCR = 1;                                      
EXTINT=2;                                    
VICVectAddr=0;                                  
};

это кусок кода из архива в первом посте.

P.S. если нужно, то можно перенести тему в раздел для новичков, а то неудобно как-то, такие вопросы задавать в этом разделе smile.gif
aaarrr
Цитата(sybirman @ Sep 8 2008, 22:26) *
что-то я совсем запутался.
если происходит запрет irq, то как же тогда происходит выполнение;

Просто потом процессор переводится в режим USER с разрешенными прерываниями:
Код
;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR


Цитата(sybirman @ Sep 8 2008, 22:26) *
P.S. если нужно, то можно перенести тему в раздел для новичков, а то неудобно как-то, такие вопросы задавать в этом разделе smile.gif

Почитайте в каком-нибудь букваре (лучше в Technical Reference Manual от ARM) о режимах работы процессора, и все встанет на свои места.
Qwertty
Цитата(sybirman @ Sep 8 2008, 15:55) *
скажите, а в каком месте в стартапе (архив в начале темы) происходит разрешение IRQ прерывания?

Вот тут:
Код
;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR


Упс, опоздал smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.