реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ARM926EJ-S, никак не могу понять как пользоватся сопроцессорами
Шамаев Дамир
сообщение Dec 25 2010, 17:51
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 25-12-10
Из: Россия, Астрахань
Пользователь №: 61 876



Помогите, проц ARM926EJ-S, никак не могу понять как пользоватся сопроцессорами, любое исполнение вызывает
Undefined Instruction, кроме MRC p7, 0, r0, c7, c10, 3, остальные другие вариации, к примеру: MRC p15, 0, r0, c1, c0 дают исключение.
Что надо включить или выключить чтобы всё работало?
Хочу включать и выключать MMU (Таблица переадресации и все остальные дела есть, сама MMU инициализирована и включена)
Go to the top of the page
 
+Quote Post
Шамаев Дамир
сообщение Dec 25 2010, 19:27
Сообщение #2





Группа: Новичок
Сообщений: 4
Регистрация: 25-12-10
Из: Россия, Астрахань
Пользователь №: 61 876



То есть я пишу под телефон (Sie CX75 процеccор ARM926EJ-S), в нём уже есть прошивочные ф-ии (которые он использует для инициализации MMU) по этому поводу:
(Вроде верно нашёл)

Код
MMU_enable
0000:A0B183A0 10 40 2D E9                 STMFD   SP!, {R4,LR}
0000:A0B183A4 E9 0A DC EB                 BL      disable_INT
0000:A0B183A8 00 40 A0 E1                 MOV     R4, R0
0000:A0B183AC 53 0B DC EB                 BL      getCP15_register_1
0000:A0B183B0 01 00 80 E3                 ORR     R0, R0, #1
0000:A0B183B4 54 0B DC EB                 BL      setCP15_register_1
0000:A0B183B8 04 00 A0 E1                 MOV     R0, R4
0000:A0B183BC 10 40 BD E8                 LDMFD   SP!, {R4,LR}
0000:A0B183C0 EA 0A DC EA                 B       enable_INT


MMU_disable    
0000:A0B183C4 10 40 2D E9                 STMFD   SP!, {R4,LR}
0000:A0B183C8 E0 0A DC EB                 BL      disable_INT
0000:A0B183CC 00 40 A0 E1                 MOV     R4, R0
0000:A0B183D0 4A 0B DC EB                 BL      getCP15_register_1
0000:A0B183D4 01 00 C0 E3                 BIC     R0, R0, #1
0000:A0B183D8 4B 0B DC EB                 BL      setCP15_register_1
0000:A0B183DC 04 00 A0 E1                 MOV     R0, R4
0000:A0B183E0 10 40 BD E8                 LDMFD   SP!, {R4,LR}
0000:A0B183E4 E1 0A DC EA                 B       enable_INT

isMMUenable
0000:A0B183E8 08 40 2D E9                 STMFD   SP!, {R3,LR}
0000:A0B183EC 43 0B DC EB                 BL      getCP15_register_1
0000:A0B183F0 01 00 10 E2                 ANDS    R0, R0, #1
0000:A0B183F4 01 00 A0 13                 MOVNE   R0, #1
0000:A0B183F8 08 80 BD E8                 LDMFD   SP!, {R3,PC}


где:

Код
getCP15_register_1

0000:A021B100 00 00 A0 E3                 MOV     R0, #0
0000:A021B104 10 0F 11 EE                 MRC     p15, 0, R0,c1,c0
0000:A021B108 1E FF 2F E1                 BX      LR

setCP15_register_1

0000:A021B10C 10 0F 01 EE                 MCR     p15, 0, R0,c1,c0
0000:A021B110 00 00 A0 E1                 NOP
0000:A021B114 00 00 A0 E1                 NOP
0000:A021B118 00 00 A0 E1                 NOP
0000:A021B11C 1E FF 2F E1                 BX      LR

disable_INT

0000:A021AF50 00 00 0F E1                 MRS     R0, CPSR
0000:A021AF54 C0 10 80 E3                 ORR     R1, R0, #0xC0
0000:A021AF58 1F 20 00 E2                 AND     R2, R0, #0x1F
0000:A021AF5C 10 00 52 E3                 CMP     R2, #0x10
0000:A021AF60 00 00 00 0F                 SWIEQ   0
0000:A021AF64 01 F0 21 E1                 MSR     CPSR_c, R1
0000:A021AF68 C0 00 00 E2                 AND     R0, R0, #0xC0
0000:A021AF6C 1E FF 2F E1                 BX      LR             ; R0 = old CPSR.f and CPSR.i

enable_INT

0000:A021AF70 00 10 0F E1                 MRS     R1, CPSR
0000:A021AF74 C0 10 C1 E3                 BIC     R1, R1, #0xC0
0000:A021AF78 00 10 81 E1                 ORR     R1, R1, R0
0000:A021AF7C 1F 20 01 E2                 AND     R2, R1, #0x1F
0000:A021AF80 10 00 52 E3                 CMP     R2, #0x10
0000:A021AF84 00 00 00 0F                 SWIEQ   0
0000:A021AF88 01 F0 21 E1                 MSR     CPSR_c, R1
0000:A021AF8C 1E FF 2F E1                 BX      LR


И сам ARM Ассемблер знаю неплохо, но вот решил изучить сопроцессор и тут загвоздка.
При вызове их получаю Undefined Instruction, в адресе соответсвующему команде MCR/MRC, слышал что это из-за того что может закрыт доступ к сопроцессорам, тогда как его снова открыть, этот доступ?
В недоумении .... помогите ....
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016