После этого я начал общаться с открытием в изблоге. Периферия аппаратное обеспечениеиздействовать, Аппаратная периферия включает в себя последовательный порт, Flash, SD-карта, сетевая карта ждать; LED да Самый простой из Периферийное оборудование; Периферияаппаратное обеспечениеводить Процесс проектирования программы машины : ① Схема анализа ② Анализ чтения руководство по чипу, ③ управляемый дизайн, ④ Написано кодом ;
Загрузите справочные статьи и сопутствующие материалы из этого блога. :
один. LED Введение 1. LED Принципиальная схема (1) LED опорная плита Принципиальная схема
LED опорная плита Принципиальная схема Анализ :
###(2) LED основная плата Принципиальная схема
LED основная плата Принципиальная схема :
NLED1
подобрать CPU GPIO из GPM0
приколотьначальство, Поэтому его можно эксплуатировать GPIO из GPM0 приколоть выполнятьнастраивать NLED1 приколотьизнизкий уровеньдействовать; ##2. GPIO
###( 1 ) GPIO Введение
GPIO Введение : Полное английское имя General-Purpose Input / Output Ports, Китайский перевод : Порты ввода и вывода общего назначения;
###(2) Документация по GPIO
Справочное руководство : ARM-чип руководство S3C6410X.pdf ( на основе 6410 Совет по развитию ARM 11 )
Документация GPIO:
###( 3 ) зажечься LED лампа
зажечься LED лампа :
##3. Инициализация базового адреса периферийного устройства.
###( 1 ) C15 зарегистрироваться Введение
C15 зарегистрироваться : Полное английское имя Peripheral Port Memory Remap Register, Карта памяти периферийных портов зарегистрироваться ;
###( 2 )Карта памяти периферийных портов зарегистрироваться свойство
Карта памяти периферийных портов зарегистрироваться свойство :
#два. LED контроль Написано кодом
##1. Сборник Написано кодом ###(1) контроль LED выключатель
LED контроль Сборник Написано кодом : на основе OK6410 Совет по развитию; 1 ~ 3 Шаги подготовка данных, 4 ~ 6 Шаги настраивать GPIO из GPM контрользарегистрироватьсяценить,Воляприколотьнастраиватьдлявыход Функция, 7 ~ 9 шаг для настраивать GPIO из GPM данныезарегистрироватьсяценить ;
#define GPBCON 0x7F008820
, Изображение ниже S3C6410X.pdf документсередина 10-GPIO Page 338 представлять;
#define GPBDAT 0x7F008824
, Картинка выше S3C6410X.pdf документсередина 10-GPIO Page 338 представлять;light_led :
, Можетксуществовать Чтоэто Кусочекнаборпроходить перейти к Выполнено на этом лейбле LED лампабитьоткрытьиздействовать;ldr r0, =GPBCON
, в Воля 0x7F008820 Адрес загружен. r0 зарегистрироватьсясередина, GPBCON
да Извпередопределениеиз GPM проверить адрес устройства из постоянного ;ldr r1, =0x1111
;
str r1, [r0]
, Интерпретация : Воля r1 серединаизценить хранить в r0 Укажите адрес в памяти ;Оно еще не завершено,нравитьсяфрукты Вспышка Долженпрограмма, Будет невозможность зажечься LED лариз ситуация, OK6410 Совет по развитие также требует инициализации базового адреса периферийного устройствашаг;
###(2) Инициализация базового адреса периферийного порта
Справочное руководство : Ядро ARM руководство Arm1176jzfs.pdf ( на основе OK6410 Совет по развитию ARM 11 )
Инициализация базового адреса периферийного порта шаг :
set_serial_port :
;0x70000000
; использовать ldr r0, =0x70000000
Заявление о базовом адресе Воля ценить 0x70000000 стоять Прямо сейчасчислоценить загрузить в r0 зарегистрироватьсясередина; ldr r0, =0x70000000
и ldr r0, 0x70000000
заявление, вперед ВОЗда Воля стоять Прямо сейчасчисло 0x7000000 загрузить в r0 зарегистрироватьсясередина, Последняяда Воля число 0x70000000 из Адрес загрузить в r0 зарегистрироватьсясередина;
orr r0, r0, #0x13
;
mcr p15, 0, r0, c15, c2, 4
; MCR p,o,Rd,CRN,CRM,q
Воля rd зарегистрироватьсяценить перешел к CRN сопроцессор,mov pc, lr
, На этой метке выполнение кода завершается, Перейдите к точке обратного вызова и продолжите выполнение следующего содержимого;set_serial_port :
ldr r0, =0x70000000 @ Волябазаадресзагрузить в r0 зарегистрироватьсясередина, Базовый адрес существовать arm ядерный Определение в руководстве
orr r0, r0, #0x13 @ настройка базового адреса инициализации из диапазона, Воля r0 серединаизценить и 0x13 стоять Прямо сейчасчисло осуществлять или действовать, Результаты воли сохраняются в r0 середина
mcr p15, 0, r0, c15, c2, 4 @ Воля r0 серединаизценитьнастраивать Давать c15 сопроцессор
mov pc, lr
###(3) Полный код компиляции
Полный код компиляции : Подробная версия аннотации ;
@****************************
@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 set_serial_port @ настраиватьпериферийные устройствабазаадреспортинициализация
bl disable_watchdog @ перейти к disable_watchdog выполнение этикетки, Отключить сторожевой таймер
bl disable_interrupt @ перейти к disable_interrupt выполнение этикетки, закрытиесерединаперерыв
bl disable_mmu @ перейти к disable_mmu выполнение этикетки, закрытие MMU
bl light_led @ битьоткрыть Совет по развитиюначальствоиз LED светоизлучающий диод
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 зарегистрироватьсясередина
mov pc, lr @ Вернуться в точка возврата Продолжайте выполнять следующий исход
#define pWTCON 0x7e004000 @ Определение Watchdog контрользарегистрироваться адрес ( 6410Совет по развитию )
disable_watchdog:
ldr r0, =pWTCON @ Первый Воляконтрользарегистрироватьсяадрессохранить в Универсальныйзарегистрироватьсясередина
mov r1, #0x0 @ подготовить один 0 ценить,сторожевой песконтрользарегистрироваться Всенастраиватьдля0, Прямо сейчассторожевой пестакжезакрытие Понятно
str r1, [r0] @ Воля 0 ценить настраиватьприезжать сторожевой песконтрользарегистрироватьсясередина
mov pc, lr @ Вернуться в точка возврата Продолжайте выполнять следующий исход
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 Универсальныйзарегистрироватьсясередина
mov pc, lr @ Вернуться в точка возврата Продолжайте выполнять следующий исход
disable_mmu :
mcr p15,0,r0,c7,c7,0 @ настраивать I-Cache и D-Cache Неверный
mrc p15,0,r0,c1,c0,0 @ Воля c1 зарегистрироватьсясерединаизценить читать R0 Универсальныйзарегистрироватьсясередина
bic r0, r0,#0x00000007 @ использовать bic Кусочек Прозрачныйинструкция, Воля R0 зарегистрироватьсясерединаиз Нет. 0, 1,2 три Кусочек настраиватьстановиться0, представлять закрытие MMU и D-Cache
mcr p15,0,r0,c1,c0,0 @ Воля R0 зарегистрироватьсясерединаизценитьнапиши ответприезжать C1 зарегистрироватьсясередина
mov pc, lr @ Вернуться в точка возврата Продолжайте выполнять следующий исход
set_serial_port :
ldr r0, =0x70000000 @ Волябазаадресзагрузить в r0 зарегистрироватьсясередина, Базовый адрес существовать arm ядерный Определение в руководстве
orr r0, r0, #0x13 @ настройка базового адреса инициализации из диапазона, Воля r0 серединаизценить и 0x13 стоять Прямо сейчасчисло осуществлять или действовать, Результаты воли сохраняются в r0 середина
mcr p15, 0, r0, c15, c2, 4 @ Воля r0 серединаизценитьнастраивать Давать c15 сопроцессор
mov pc, lr
#define GPBCON 0x7F008820
#define GPBDAT 0x7F008824
light_led :
ldr r0, =GPBCON @ Воля 0x7F008820 GPM контрользарегистрироватьсяиз Адрес 0x7F008820 загрузить в r0 зарегистрироватьсясередина
ldr r1, =0x1111 @ настраивать GPM контрользарегистрироватьсяиз ХОРОШОдля для Output выход,Прямо сейчаскаждыйпереписыватьсяприколотьизнастраиватьдля 0b0001 ценить
str r1, [r0] @ Воля r1 серединаизценить хранить в r0 указать на GPBCON 0x7F008820 адресиз Памятьсередина
ldr r0, =GPBDAT @ Воля GPBDAT 0x7F008824 адресценить загрузить в r0 зарегистрироватьсясередина
ldr r1, =0b110000 @ вычислить GPM данныезарегистрироватьсясерединаизценить, настраивать 0 для низкий уровень, настраивать 1 длявысокий уровень,здесьнастраивать 0 ~ 3 Кусочекдлянизкий уровень, Другоедлявысокий уровень
str r1, [r0] @ Воля r1 серединаизценить хранить в r0 указать на GPBDAT 0x7F008824 адресиз Памятьсередина
mov pc, lr
##2. Скрипт компоновщика.
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 часть Заканчивать Кусочекнабор*/
}
##3. Скрипт компиляции Makefile.
Написание 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: #clearкомпилировать информацию
rm *.o *.elf *.bin
##4. Скомпилируйте и выведите исполняемый файл.
Процесс компиляции:
make
;##5. Вспышкакодприезжать Совет по развитиюи Выполнять ХОРОШО ###( 1 ) OK6410 Совет по разработка метода переключения
OK6410 Совет по разработка метода переключения : проходитьконтроль Совет по развитиюправая сторонаиз 8индивидуальныйвыключатель Приходитьнастраиватьзапускать Приходитьисточник;
###(2) Сделайте SD-карту загрузочной и подготовьте программу
Сделайте SD-карту загрузочным диском:
Ссылки : Метод программирования OK6410 для программы без платы Об этом вчера написал в блоге: как только ссылка;
###( 3 ) SecureCRT Подключить по развитиюи Вспышкапрограмма
SecureCRT Подключить по развитиюи Вспышкапрограмма шаг :
Загрузите справочные статьи и сопутствующие материалы из этого блога. :