|
startup asm |
|
|
|
Jan 14 2009, 14:12
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Объясните как работает этот кот, с ассемблером плохо знаком, сейчас читаю, но не совсем все понятно. А именно инструкция ldr записывает значение находящееся по адресу RESET_ADDR , в регистр pc, переменная RESET_ADDR не где не объявляется так же как и pc ? код взят отсюда : http://electronix.ru/forum/index.php?act=a...st&id=16569Код ldr pc, RESET_ADDR ldr pc, UNDEF_ADDR ldr pc, SWI_ADDR ldr pc, PREFETCH_ABORT_ADDR ldr pc, DATA_ABORT_ADDR .word 0 ldr pc, IRQ_ADDR ldr pc, FIQ_ADDR RESET_ADDR: .word RESET_handler UNDEF_ADDR: .word UNDEF_handler SWI_ADDR: .word SWI_handler PREFETCH_ABORT_ADDR: .word PREFETCH_ABORT_handler DATA_ABORT_ADDR: .word DATA_ABORT_handler .word 0 IRQ_ADDR: .word IRQ_handler FIQ_ADDR: .word FIQ_handler
|
|
|
|
|
 |
Ответов
|
Jan 18 2009, 18:10
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Поправите если что не так понял. Изучаю доку, но не все же не понятно, CPSR регистр статуса и регистр сохранного статуса SPSR , SPSR это резервный регист, в него нужно программно сохранять статус или он сам сохраняет CPSR что то я не где это не нашел. Еще в программе обработки исключительной ситуации, вместе с включением прерываний ядро переключается в ABORT_MODE, а где его переводить в USER_MODE? CODE DATA_ABORT_handler: sub r14, r14, #0x04 @ регистр связи r14 = r14 - 0x04 stmfd r13!, {r14} @ Сохранить регистр R14 в Стеке stmfd r13!, {r0-r3, r12} @ Сохранить регистры r0 - r3 и r12 в Стеке ldr r0, = regs_temp @ Сохранить в r0 адрес структуры regs_temp str r14, [r0], #0x04 @ Сохранить r14 в в структуре regs_temp mov r14, r0 @ Записать в регистр связи адрес regs_temp ldr r0, [r13] @ Прочитать r0 из стека stmia r14!, {r0-r12} @ Сохранит в regs_temp регистры r0 - r12 mov r0, r14 @ Записать в r0 r14(адрес regs_temp) mrs r14, SPSR @ сохранить в r14, копию сохраненого статуса программы stmfd r13!, {r14} @ Сохранить в стеке регистр r14 orr r14, r14, #F_BIT orr r14, r14, #I_BIT @ запрет прерываний, логическое или r14 = r14 || #F_BIT || #I_BIT msr CPSR_c, r14 @ запись в регистр статуса stmia r0!, {r13-r14} @ Сохранит в regs_temp регистры r13-r14 and r0, #F_BIT and r0, #I_BIT and r0, #ABT_MODE @ логическое и, разрешение прерываний, переключение режима работы в аварийный. @ r0 = r0 && #F_BIT && #I_BIT && #ABT_MODE msr CPSR_c, r0 @ Записать в CPSR r0 ldr r0, = regs_temp @ Записать в r0 указатель на regs_temp @ bl func_obr_data_abort **** Вызов функции C ldmfd r13!, {r0} @ прочитать из стека r0 msr SPSR_c, r0 @ записать в регистр статуса r0. Возврат статуса. ldmfd r13!, {r0-r3, r12, pc}^ @ Возврат програмного счетчика, и регистров r0-r3 r12 pc @----------------------------------------------------------------------------------------
|
|
|
|
|
Jan 18 2009, 19:28
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Код sub r14, r14, #0x04 @ LR_abt = LR_abt - 0x04 stmfd r13!, {r14} @ Сохранить LR_abt на стеке ABT stmfd r13!, {r0-r3, r12} @ Сохранить r0 - r3 и r12 на стеке ABT ldr r0, = regs_temp @ Загрузить в r0 адрес структуры regs_temp str r14, [r0], #0x04 @ Сохранить LR_abt в структуре regs_temp mov r14, r0 @ Записать в LR_abt адрес regs_temp+4 ldr r0, [r13] @ Прочитать r0 из стека ABT stmia r14!, {r0-r12} @ Сохранить в regs_temp+4 регистры r0 - r12 mov r0, r14 @ Записать в r0 LR_abt (адрес regs_temp+56) mrs r14, SPSR @ Загрузить в LR_abt копию сохраненого статуса программы stmfd r13!, {r14} @ Сохранить в стеке ABT регистр LR_abt orr r14, r14, #F_BIT @ запрет прерываний, побитовое ИЛИ r14 = r14 | #F_BIT | #I_BIT orr r14, r14, #I_BIT msr CPSR_c, r14 @ запись в регистр статуса, переключение в режим XXX stmia r0!, {r13-r14} @ Сохранить в regs_temp+56 регистры SP_XXX и LR_XXX and r0, #F_BIT @ ???????? and r0, #I_BIT @ ???????? and r0, #ABT_MODE @ ???????? msr CPSR_c, r0 @ Записать в CPSR r0, переключение в режим ABT ldr r0, = regs_temp @ Записать в r0 указатель на regs_temp @ bl func_obr_data_abort @ Вызов функции C ldmfd r13!, {r0} @ прочитать r0 из стека ABT msr SPSR_c, r0 @ записать в регистр сохраненного статуса r0. Возврат статуса. ldmfd r13!, {r0-r3, r12, pc}^ @ Возврат програмного счетчика, и регистров r0-r3 r12 pc, переключение в режим XXX Вот здесь у вас что-то, мягко говоря, странное написано: Код and r0, #F_BIT and r0, #I_BIT and r0, #ABT_MODE msr CPSR_c, r0 Цитата(sergey sva @ Jan 18 2009, 21:10)  SPSR это резервный регист, в него нужно программно сохранять статус или он сам сохраняет CPSR Сам сохраняет. Цитата(sergey sva @ Jan 18 2009, 21:10)  Еще в программе обработки исключительной ситуации, вместе с выключением прерываний ядро переключается в ABORT_MODE, а где его переводить в USER_MODE? Обратите внимание на "^" в последней инструкции.
|
|
|
|
Сообщений в этой теме
sergey sva startup asm Jan 14 2009, 14:12 aaarrr RESET_ADDR - это метка, зачем ее объявлять еще? Jan 14 2009, 14:14 gotty Предположу что это тааблица векторов прерываний
и... Jan 14 2009, 14:35 sergey sva В один регистр PC, по очереди запишутся адреса мет... Jan 14 2009, 15:56 zltigo Цитата(sergey sva @ Jan 14 2009, 18:56) В... Jan 14 2009, 16:26  sergey sva Цитата(zltigo @ Jan 14 2009, 19:26) да у... Jan 14 2009, 17:17   aaarrr Цитата(sergey sva @ Jan 14 2009, 20:17) н... Jan 14 2009, 17:25 aaarrr Цитата(sergey sva @ Jan 14 2009, 18:56) В... Jan 14 2009, 16:28 sergey sva Если правильно понял, код:
.align 4
UNDEF_s... Jan 14 2009, 18:39 zltigo Цитата(sergey sva @ Jan 14 2009, 21:39) с... Jan 14 2009, 18:46 sergey sva ЦитатаТак и будете заниматься гаданиями?
с удоволь... Jan 14 2009, 19:35 sergeeff Описание ассемблера: http://infocenter.arm.com/he... Jan 14 2009, 20:05 sergey sva Наверно опять будет глупый вопрос, для чего нужно... Jan 15 2009, 19:58 zltigo Цитата(sergey sva @ Jan 15 2009, 22:58) д... Jan 15 2009, 20:01 sergey sva С этим кажется разобрался, ядро настраивается отде... Jan 15 2009, 21:24 aaarrr Цитата(sergey sva @ Jan 16 2009, 00:24) Н... Jan 15 2009, 21:47  sonycman Цитата(aaarrr @ Jan 16 2009, 01:47) Стек ... Jan 17 2009, 12:24   zltigo Цитата(sonycman @ Jan 17 2009, 14:24) Ско... Jan 17 2009, 12:34 sergey sva ЦитатаP.S. Пожалуйста, используйте знаки препинани... Jan 15 2009, 22:05 Сергей Борщ Цитата(sergey sva @ Jan 16 2009, 00:05) Г... Jan 16 2009, 06:34 sergey sva Буду читать. Мне еще не понятен один момент по раб... Jan 16 2009, 12:37 aaarrr Цитата(sergey sva @ Jan 16 2009, 15:37) В... Jan 16 2009, 13:22 sergey sva Как разместить метку, на асме по адресу 0x18 или 0... Jan 16 2009, 19:11 zltigo Цитата(sergey sva @ Jan 16 2009, 22:11) К... Jan 16 2009, 19:16 sergey sva Цитатастроительство дома без фундамента sad.gif
Ни... Jan 16 2009, 19:33 aaarrr Цитата(sergey sva @ Jan 16 2009, 22:33) н... Jan 16 2009, 20:10 sergey sva Если правильно понимаю? После перехода PC на адре... Jan 16 2009, 22:18 aaarrr Цитата(sergey sva @ Jan 17 2009, 01:18) Е... Jan 16 2009, 22:32  zltigo Цитата(aaarrr @ Jan 17 2009, 00:32) произ... Jan 16 2009, 22:44 sergey sva Как обрабатывать исключительные ситуации, например... Jan 17 2009, 16:04 aaarrr Ссылка с рекомендациями. Для data abort и undefine... Jan 17 2009, 18:21 sergey sva В функции prefetch_abort_handler_c должен быть ... Jan 17 2009, 18:48 aaarrr Цитата(sergey sva @ Jan 17 2009, 21:48) В... Jan 17 2009, 20:19 sergey sva Понятно. Разбираюсь еще с ассемблером, появился во... Jan 17 2009, 21:36 aaarrr Флаг S в команде указывает процессору, что нужно у... Jan 17 2009, 21:45 sergey sva Если правильно понял:
mov R1 , #0xFF
ands R1 , R1,... Jan 17 2009, 22:11 aaarrr Цитата(sergey sva @ Jan 18 2009, 01:11) l... Jan 17 2009, 22:21 sergey sva Виноват, не корректно поставил вопрос.
Если прави... Jan 17 2009, 22:29 aaarrr Цитата(sergey sva @ Jan 18 2009, 01:29) Е... Jan 17 2009, 22:33 sergey sva Что проверяет _check_mapping: , для чего сохранят... Jan 18 2009, 13:38 aaarrr check_mapping пишет 0x12345678 по адресу 0x200014 ... Jan 18 2009, 13:44 sergey sva Объясните, пожалуйста
Код AREA code1, DATA, READ... Jan 18 2009, 16:08 aaarrr Цитата(sergey sva @ Jan 18 2009, 19:08) О... Jan 18 2009, 16:30 sergey sva После чтения SPSR_c , устанавливаются биты #F_B... Jan 19 2009, 18:13 aaarrr Цитата(sergey sva @ Jan 19 2009, 21:13) П... Jan 19 2009, 18:23 sergey sva Вам, случайно не встречался пример обработки FIQ ... Jan 19 2009, 20:56 aaarrr Цитата(sergey sva @ Jan 19 2009, 23:56) В... Jan 19 2009, 20:59 sergey sva Сделайте замечания что, тут я не правильно понял... Jan 19 2009, 22:10 aaarrr Цитата(sergey sva @ Jan 20 2009, 01:10) С... Jan 19 2009, 22:17 sergey sva >вот обработчик - дрянь
где бы посмотреть как о... Jan 19 2009, 22:21 aaarrr Цитата(sergey sva @ Jan 20 2009, 01:21) г... Jan 19 2009, 22:42 sergey sva В инструкции msr SPSR_cxsf, r14 есть флаги ... Jan 20 2009, 17:15 aaarrr Цитата(sergey sva @ Jan 20 2009, 20:15) к... Jan 20 2009, 17:22 sergey sva А в чем будет разница, если не устанавливать cxsf... Jan 20 2009, 17:56 aaarrr Цитата(sergey sva @ Jan 20 2009, 20:56) А... Jan 20 2009, 18:00 sergeeff ЦитатаВ приведенном вами коде выполняется нескольк... Jan 20 2009, 18:25 aaarrr Цитата(sergeeff @ Jan 20 2009, 21:25) По ... Jan 20 2009, 20:59 sergey sva Если не ошибаюсь, то в этом обработчике, переход н... Jan 20 2009, 19:12 sergeeff Цитата(sergey sva @ Jan 20 2009, 23:12) Е... Jan 20 2009, 19:28 sergey sva Сделайте замечания, по FIQ обработчику.
Код@-----... Jan 20 2009, 20:29 sergey sva >Могу сделать одно, зато глобальное: использова... Jan 20 2009, 21:11 aaarrr Цитата(sergey sva @ Jan 21 2009, 00:11) Т... Jan 20 2009, 21:52  sergeeff Цитата(aaarrr @ Jan 21 2009, 01:52) А еще... Jan 21 2009, 09:16   aaarrr Цитата(sergeeff @ Jan 21 2009, 12:16) Есл... Jan 21 2009, 10:06    sergeeff Цитата(aaarrr @ Jan 21 2009, 14:06) Нельз... Jan 21 2009, 12:17     aaarrr Цитата(sergeeff @ Jan 21 2009, 15:17) так... Jan 21 2009, 13:02 sergey sva При входе в FIQ прерывание ,запрещаются автоматом... Jan 20 2009, 23:30 aaarrr SPSR-то зачем сохранять?
Можно извратиться так:
... Jan 21 2009, 00:05 sergey sva ЦитатаSPSR-то зачем сохранять?
Можно извратиться ... Jan 21 2009, 10:51 aaarrr Цитата(sergey sva @ Jan 21 2009, 13:51) В... Jan 21 2009, 10:58 sergey sva RE: startup asm Jan 21 2009, 15:51 zltigo Цитата(sergey sva @ Jan 21 2009, 17:51) С... Jan 21 2009, 17:42  aaarrr Цитата(zltigo @ Jan 21 2009, 20:42) Обраб... Jan 21 2009, 17:58   zltigo Цитата(aaarrr @ Jan 21 2009, 19:58) Возвр... Jan 21 2009, 19:11    aaarrr Цитата(zltigo @ Jan 21 2009, 22:11) Отлич... Jan 21 2009, 20:25     zltigo Цитата(aaarrr @ Jan 21 2009, 22:25) Сишна... Jan 21 2009, 20:48 aaarrr Что-то я не нашел INTERRUPT_VECTORS_END. А регистр... Jan 21 2009, 16:04 sergey sva >Что-то я не нашел INTERRUPT_VECTORS_END
> ... Jan 21 2009, 16:32 aaarrr Цитата(sergey sva @ Jan 21 2009, 19:32) К... Jan 21 2009, 16:36 sergey sva Если сделать так: объявить в присоединенном файле,... Jan 21 2009, 17:03 aaarrr Цитата(sergey sva @ Jan 21 2009, 20:03) Е... Jan 21 2009, 17:07 sergey sva поясните пожалуйста, что не правильно ? Jan 21 2009, 17:13 aaarrr КодRESET_ADDR: .word RESET_handler
UND... Jan 21 2009, 17:17 sergey sva Почему для UNDEF_handler:(Неопределенная инструкци... Jan 21 2009, 19:06 sergeeff Думается, что в embedded мире неожиданные exceptio... Jan 21 2009, 19:17 sergey sva Контроллер aic поддерживает 32 прерывания, эти пр... Jan 21 2009, 22:10 aaarrr Цитата(zltigo @ Jan 21 2009, 23:48) Ну а ... Jan 21 2009, 22:19 zltigo Цитата(aaarrr @ Jan 22 2009, 00:19) А на ... Jan 21 2009, 23:30  aaarrr Цитата(zltigo @ Jan 22 2009, 02:30) ... Jan 21 2009, 23:53   zltigo Цитата(aaarrr @ Jan 22 2009, 01:53) У при... Jan 22 2009, 08:24    aaarrr Цитата(zltigo @ Jan 22 2009, 11:24) Лично... Jan 22 2009, 09:06 sergey sva Каждый человек индивидуальный, как и его решения, ... Jan 22 2009, 17:30 aaarrr Цитата(sergey sva @ Jan 22 2009, 20:30) A... Jan 22 2009, 17:40 zltigo Цитата(sergey sva @ Jan 22 2009, 19:30) К... Jan 22 2009, 18:23  aaarrr Цитата(zltigo @ Jan 22 2009, 21:23) Допущ... Jan 22 2009, 18:32   zltigo Цитата(aaarrr @ Jan 22 2009, 20:32) Еще р... Jan 22 2009, 20:34 sergey sva Еще одна неясность возникла, вот код из файла опис... Jan 22 2009, 18:11 aaarrr Цитата(sergey sva @ Jan 22 2009, 21:11) A... Jan 22 2009, 18:20
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|