Загрузите справочные статьи и сопутствующие материалы для этого блога. :
Этот раздел на основе S3C 6410 Совет по развитию, Различные платы разработки а также другой чип Управление прерываниями Механизмдругойиз ;
Закрыть шаг прерывания :
Регистр слов состояния программы:
CPRS Зарегистрируйте биты, связанные с управлением прерываниями :
Справочное руководство : S3C6410X.pdf ( на основе 6410 Совет по развитию )
Регистр разрешения прерываний ( VICINTENABLE ) :
Регистр маски прерывания (VICINTENCLEAR). Введение:
Справочное руководство : S3C6410X.pdf ( на основе 6410 Совет по развитию )
CPRS настраивать ценить анализировать : Этот реестр должен учитывать два аспекта: ① настраиватьпроцессориз SVC Рабочая модель, ② Отключить прерывания ;
код логика анализировать : До настраивать Когда процессор находится в рабочем режиме вовлеченный CPRS зарегистрироватьсянастраивать, существоватьздесь Воля Отключить Также включена операция прерыванияиз.;
set_svc :
, метка существования определяет группу сборников стандартов; mrs r0 cpsr
Воля CPSR зарегистрироватьсясерединаизценить Экспортировать в R0 зарегистрироватьсясередина; bic r0, r0, #0x1f
, Воля R0 зарегистрироватьсяизценить и #0x1f руководить и операция,Прямо сейчас Через 5 Кусочек Всенастраиватьстановиться0, Затем Воля и Результаты операций подтверждаются в R0 зарегистрироватьсясередина ; orr r0, r0, #0xd3
заявлениенастраивать, Воля R0 зарегистрироватьсясерединаизценить и 0x13 руководить или операция, Воля или Операцияиз Результаты Хранить в R0 зарегистрироватьсясередина;
msr cpsr, r0
, Воляпричинанадиз CPSR зарегистрироватьсяценить настраивать Давать CPSR зарегистрироваться;настраивать Маскирование прерываний зарегистрироваться Код компиляции анализировать :
disable_interrupt :
, Затем существовать reset в, перейти к Эта метка выполняется , bl disable_interrupt
; mvn r1, #0x0
, Воля 0 в соответствии с Кусочекотрицать настраиватьприезжать r1 Универсальныйзарегистрироватьсясередина;
MVN{условие}{S} <dest>, <op 1>
, Воля Количество операций 1 изценить Первыйв соответствии с Кусочекотрицать, существовать Воляценитьнастройкиto dest зарегистрироватьсясередина ; ldr r0, =0x71200014
, ② Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина, код str r1,[r0]
;
LDR{условие} Rd, <адрес>
,Воля Памятьсерединаизданныенагрузкаприезжать зарегистрироваться середина, Rd Должна быть общая регистрация, STR{условие} Rd, <адрес>
, Волязарегистрироватьсясерединаизданные нагрузка памяти середина; Воля Rd зарегистрироватьсяизсодержание нагрузкаприезжатьадрессередина; ldr r0, =0x71200014
и ldr r0, 0x71200014
, Первый - Воля 0x71200014 числоценитьнагрузкаприезжатьзарегистрироватьсясередина, Последний - Воля 0x71200014 Адрес серединаиз Контент нагрузкиto r0 зарегистрироватьсясередина ; ldr r0, =0x71300014
, ② Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина, код str r1,[r0]
;
LDR{условие} Rd, <адрес>
,Воля Памятьсерединаизданныенагрузкаприезжать зарегистрироваться середина, Rd Должна быть общая регистрация, STR{условие} Rd, <адрес>
, Волязарегистрироватьсясерединаизданные нагрузка памяти середина; Воля Rd зарегистрироватьсяизсодержание нагрузкаприезжатьадрессередина; ldr r0, =0x71200014
и ldr r0, 0x71200014
, Первый - Воля 0x71300014 числоценитьнагрузкаприезжатьзарегистрироватьсясередина, Последний - Воля 0x71300014 Адрес серединаиз Контент нагрузкиto r0 зарегистрироватьсясередина ; Код компиляции Пример : Bootloader процесс : ① Инициализировать таблицу векторов исключений , ② настраивать svc модель , ③ Выключите сторожевой таймер, ④ Отключить прерывания ;
@****************************
@File:start.S
@
@BootLoader Инициализировать
@****************************
.text @ Макрос Укажите кодовую часть
.global _start @ Заявление о псевдостандарте Полный символ начала иннинга
_start: @ входной знак программы
b reset @ reset Комплексное исключение Кусочек
ldr pc, _undefined_instruction @ неопределенное исключение,Воля _undefined_instruction ценитьнагрузкаприезжать pc указательсередина
ldr pc,_software_interrupt @ мягкийпрерыватьаномальный
ldr pc, _prefetch_abort @ Исключение по предварительной выборке
ldr pc, _data_abort @ Исключение чтения данных
ldr pc, _not_used @ занимать 0x00000014 адрес
ldr pc,_irq @ обычнопрерыватьаномальный
ldr pc, _fiq @ мягкийпрерыватьаномальный
_undefined_instruction: .word undefined_instruction @ _undefined_instruction Этикетка хранит ценить, Долженценитьда 32 Кусочекадрес undefined_instruction, undefined_instruction даодинадрес
_software_interrupt: .word software_interrupt @ мягкийпрерыватьаномальный
_prefetch_abort: .word prefetch_abort @ Исключение по предварительной выборке причина
_data_abort: .word data_abort @ Исключение чтения данных
_not_used: .word not_used @ нулевой Кусочекпричина
_irq: .word irq @ обычнопрерыватьпричина
_fiq: .word fiq @ быстрыйпрерыватьпричина
undefined_instruction: @ undefined_instruction адрес Требования к хранениюосуществлятьизсодержание
nop
software_interrupt: @ software_interrupt адрес Требования к хранениюосуществлятьизсодержание
nop
prefetch_abort: @ prefetch_abort адрес Требования к хранениюосуществлятьизсодержание
nop
data_abort: @ data_abort адрес Требования к хранениюосуществлятьизсодержание
nop
not_used: @ not_used адрес Требования к хранениюосуществлятьизсодержание
nop
irq: @ irq адрес Требования к хранениюосуществлятьизсодержание
nop
fiq: @ fiq адрес Требования к хранениюосуществлятьизсодержание
nop
reset: @ reset адрес Требования к хранениюосуществлятьизсодержание
bl set_svc @ перейти к set_svc этикетка в исполнении
bl disable_watchdog @ перейти к disable_watchdog выполнение этикетки, закрытиесторожевой пес
bl disable_interrupt @ перейти к disable_interrupt выполнение этикетки, Отключить прерывания
set_svc:
mrs r0, cpsr @ Воля CPSR зарегистрироватьсясерединаизценить Экспортировать в R0 зарегистрироватьсясередина
bic r0, r0, #0x1f @ Воля R0 зарегистрироватьсясерединаизценить и #0x1f стоять Прямо сейчасчисло руководитьи операция, Я хочу сохранить результаты в R0 зарегистрироватьсясередина, На самом деле это Волязарегистрироваться 0 ~ 4 Кусочек набор 0
orr r0, r0,#0xd3 @ Воля R0 зарегистрироватьсясерединаизценить и #0xd3 стоять Прямо сейчасчисло руководитьили операция, Я хочу сохранить результаты в R0 зарегистрироватьсясередина, действительныйданастраивать 0 ~ 4 Кусочек зарегистрироватьсяценить изпроцессор Рабочая моделькод
msr cpsr, r0 @ Воля R0 зарегистрироватьсясерединаизценить сохранить в CPSR зарегистрироватьсясередина
#define pWTCON 0x7e004000 @ Определение сторожевого контроля зарегистрироваться адрес ( 6410Совет по развитию )
disable_watchdog:
ldr r0, =pWTCON @ Первый генералконтрользарегистрироватьсяадрессохранить в Универсальныйзарегистрироватьсясередина mov r1, #0x0 @ подготовить один 0 ценить,сторожевой песконтрользарегистрироваться Всенастраиватьдля0, Прямо сейчасwatchdog также закрытие
str r1, [r0] @ Воля 0 ценить настраиватьприезжать Сторожевой контроль зарегистрироваться середина
disable_interrupt:
mvn r1,#0x0 @ Воля 0x0 в соответствии с Кусочекотрицать, получать Полный 1 изданные,настраиватьприезжать R1 зарегистрироватьсясередина
ldr r0,=0x71200014 @ настраивать Нет.один Маскирование прерыванийзарегистрироваться,Первый генерал зарегистрироваться Адрес загружается в Универсальныйзарегистрироваться R0 середина
str r1,[r0] @ Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина ldr r0,=0x71300014 @ настраивать Нет.два Маскирование прерыванийзарегистрироваться,Первый генерал зарегистрироваться Адрес загружается в Универсальныйзарегистрироваться R0 середина
str r1,[r0] @ Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина
gboot.lds скрипт компоновщика кодоаналитика :
OUTPUT_ARCH(имя схемы)
указатьвыходной формат,Прямо сейчаспроцессориз Архитектура, вот arm архитектураиз, OUTPUT_ARCH(arm)
;ENTRY(Вход Кусочекнабор)
, существоватьвышеиз Start.S серединанастраиватьизпрограмма Входда _start
, коддля ENTRY(_start)
;.text :
настраиватькодчасть; .data :
настраиватьданныечасть;.bss :
настраивать BSS часть;
bss_start = .;
;bss_end = .;
;. = ALIGN(4);
настройки четырехбайтовое выравнивание Прямой сейчас Может;OUTPUT_ARCH(arm) /*Указываем структуру процессора*/
ENTRY(_start) /*Указываем вход в программу существовать _start Этикетка **/
SECTIONS {
. = 0x50008000; /*весьпрограмма Связьизначинать Кусочекнабор, По данным Совета по развитию Конечно, другой Совет по развитиюадреснепоследовательный*/
. = ALIGN(4); /*Причина выравнивания, Каждыйчастьначинать Доруководить 4 Выравнивание байтов */
.text : /*кодчасть*/
{
start.o (.text) /*start.S Конвертировать в исходную часть*/
*(.text) /*Другая часть кода*/
}
. = ALIGN(4); /*Причина выравнивания, Каждыйчастьначинать Доруководить 4 Выравнивание байтов */
.data : /*данныечасть*/
{
*(.data)
}
. = ALIGN(4); /*Причина выравнивания, Каждыйчастьначинать Доруководить 4 Выравнивание байтов */
bss_start = .; /*Записывать bss частьначинать Кусочекнабор*/
.bss : /*bss часть*/
{
*(.bss)
}
bss_end = .; /*Записывать bss часть Заканчивать Кусочекнабор*/
}
makefile Написание документов :
%.o : %.S
, Производственный процесс arm-linux-gcc -g -c $^
, Чтосередина ^
Логотип все зависит от документа, существовать по этому правилу start.S будет мутировать в start.o ; %.o : %.c
, Производственный процесс arm-linux-gcc -g -c $^
; all: start.o #зависит от start.o
arm-linux-ld -Tgboot.lds -o gboot.elf $^ #использоватьскрипт компоновщика, Воля start.o изменятьдля gboot.elf
arm-linux-objcopy -O binary gboot.elf gboot.bin #Воля gboot.elf Преобразуйте для Может непосредственно в существование и выполните его на доске из gboot.bin документ
%.o : %.S #общие правила, нравиться start.o сделан из start.S компилировать Приходитьиз, -c только компилировать, не связано
arm-linux-gcc -g -c $^
%.o : %.c #общие правила, нравиться start.o сделан из start.c компилировать Приходитьиз, -c только компилировать, не связано
arm-linux-gcc -g -c $^
.PHONY: clean
clean: #Прозрачныйкомпилироватьинформация
rm *.o *.elf *.bin
Процесс компиляции :
make
; Загрузите справочные статьи и сопутствующие материалы для этого блога. :