2016-06-19 6 views
-1

Я хочу написать сборку для LPC1768, но я, когда ссылка не запускается. Это моя программа, я хочу включить светодиод.ARM-сборка в NXP LPC1768

STACK_TOP EQU  0x10008000 
AREA | Header Code |,CODE 
DCD STACK_TOP 
DCD START 
ENTRY 

START 

MOV R0,#0XFF 
LDR R1,=0x2009C040 
STRB R0,[R1] 

MOV R0,#0XFF 
LDR R1,=0x2009C054 
STRB R0,[R1] 

deadloop 
B deadloop 

END 

Я использую следующие команды:

armasm --cpu cortex-m3 -o lamp.o lamp.s 
armlink --rw_base 0x10000000 --ro_base 0x0 --map -o lamp.elf lamp.o 
fromelf --bin --output lamp.bin lamp.elf 
+0

Что происходит, когда вы пытаетесь запустить его? Измените точное сообщение об ошибке в свой вопрос. –

+0

не работают на моем микро, это означает, что не включайте светодиод! –

ответ

1

Так прежде всего, то, что делает разборку выглядеть? Правильно ли он сформировал векторный столбец 32-разрядный адрес стека, затем 32-битный начальный адрес orred с 1 (набор lsbit)? Это, конечно, предполагает, что вы загружаете это во флэш и не работаете из ram, если из ram тогда вы хотите сделать что-то другое наиболее вероятно или знать смещение к точке входа.

вы устанавливаете все выводы порта2 на выход. и затем устанавливают их высоко.

Ваш светодиод сконфигурирован таким образом, что высокий включает его или высокий отключает его? (должен быть gpio, led, резистор, а затем либо vcc, либо земля, для того, чтобы он мог повернуть его, он должен быть заземлен. Если это vcc, то вы хотите установить низкий уровень порта). (не имеет значения, какой заказ компоненты являются резистором, а затем привел или привел к резистору).

Моя догадка, которого не читал:

Критерия Действительного кода пользователя

зарезервированного Cortex-M3 вектор исключения местоположения 7 (смещение 0x 001C в таблице векторов) должен содержать дополнение-по чеке -sum записей таблицы с 0 по 6. Это приводит к тому, что контрольная сумма первых 8 записей таблицы будет равна 0. Код загрузчика проверяет первые 8 местоположений в секторе 0 флэш-памяти. Если результат равен 0, управление выполнением передается в код пользователя. ...

в технических описаниях?

Хммм, или вы хотите запустить это из бара? Вам нужно будет установить свой адрес ro на 0x10000xxx (см. Ниже), и вам не понадобится векторная таблица.

техническое описание также говорит:

ОЗУ используется ISP обработчика команды

ISP команды используют на чипе RAM от 0x1000 0118 до 0x1000 01FF. Пользователь может использовать эту область, но содержимое может быть потеряно после сброса. Команды программирования Flash используют верхние 32 байта ОЗУ. Стек находится в верхней части ОЗУ - 32. Максимальное использование стека составляет 256 байт, и оно растет вниз.

Таким образом, вы увидите, что люди часто резервируют 0x200 байт для загрузчика в основном при его использовании. Итак, начните с 0x10000200 вместо 0x10000000. по какой-то причине я более щедрый, я использую 0x10000800. Некоторые люди резервируют это 0x200 байт все время, даже если они не используются с помощью инструментов ISP.

Я предполагаю, что с вашего адреса ro и rw адрес и векторную таблицу вы хотите запустить со вспышки. вам нужно получить контрольную сумму там, и я рекомендую разобрать, чтобы увидеть, что таблица векторов имеет нечетный адрес для начала. вы, вероятно, захотите добавить несколько других векторов туда, чтобы заполнить пространство для контрольной суммы.

+0

спасибо! за меня помогли! Можете ли вы дать мне правильный код ?! с тем же адресом памяти! –

+0

Есть много примеров, просто используйте один ... –

+0

i very search in goolge Но я не нахожу программу Assembly для LPC1768 , если у вас есть сборка программы для LPC1768! Дай мне это...! Большое спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^