Абсолютно никаких проблем ...
Прежде всего, запустите и запустите последовательный порт, у меня есть одна из более старых / более ранних версий beagleboards, и я помню, что последовательный порт и почти все о том, что ввод-вывод был болезненным, тем не менее, установите на нем последовательный порт, чтобы вы могли видеть, как он загружается.
Я думаю, он загружает uboot, и вы можете нажать клавишу или esc или что-то в этом роде, чтобы прервать обычную загрузку (в Linux). Из приглашения uboot легко загрузить ваши первые простые программы.
На данный момент у меня под рукой есть код биглборда, но у меня нет под рукой самого биглборда, чтобы попробовать их. Итак, перейдите на http://sam7stuff.blogspot.com/, чтобы получить представление о том, как смешать некоторый стартовый ассемблер и код C для встроенных программ без ОС (для arm у меня есть несколько примеров для других платформ thumb / cortex-m3, но они загружаются немного по-другому).
Порты sam7 для вещей и адресного пространства памяти полностью отличаются от beagleboard / omap. Вышеупомянутая структура, которую вы можете изменить или заново изобрести.
Вам понадобится техническое справочное руководство OMAP 35x с сайта ti.com. Найдите часть omap на их сайте OMAP3530.
Также документация beagleboard. Например, это утверждение:
На BeagleBoard имеется один порт RS232, обеспечивающий доступ к линиям TX и RX UART3.
Таким образом, в trm для omap поиск UART3 показывает, что он находится по базовому адресу 0x49020000. (часто бывает очень сложно вычислить весь адрес для чего-либо, поскольку в руководствах обычно есть часть карты памяти здесь, а другая часть там, а рядом с описанием регистров вызываются только несколько младших битов адреса.)
Глядя на регистры uart, THR_REG - это то место, куда вы пишете байты для отправки uart, обратите внимание, что это 16-битный регистр.
Зная это, мы можем составить первую программу:
.globl _start
_start:
ldr r0,=0x49020000
mov r1,#0x55
strh r1,[r0]
strh r1,[r0]
strh r1,[r0]
strh r1,[r0]
strh r1,[r0]
hang: b hang
Вот make-файл для него:
ARMGNU = arm-none-linux-gnueabi
AOPS = --warn --fatal-warnings
COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding
uarttest.bin : uarttest.s
$(ARMGNU)-as $(AOPS) uarttest.s -o uarttest.o
$(ARMGNU)-ld -T rammap uarttest.o -o uarttest.elf
$(ARMGNU)-objdump -D uarttest.elf > uarttest.list
$(ARMGNU)-objcopy uarttest.elf -O srec uarttest.srec
$(ARMGNU)-objcopy uarttest.elf -O binary uarttest.bin
И используемый скрипт компоновщика:
/* rammap */
MEMORY
{
ram : ORIGIN = 0x80300000, LENGTH = 0x10000
}
SECTIONS
{
.text : { *(.text*) } > ram
}
Обратите внимание, что вызывается версия linux из codeourcery, вам не нужна эта версия кросс-компилятора GNU, на самом деле этот код, являющийся asm, требует только ассемблера и компоновщика (материал binutils). Кросс-компилятор типа arm-none-eabi -... также будет работать (при условии, что вы получаете облегченные инструменты из codeourcery).
Если у вас есть файл .bin, посмотрите справку по uboot, я не помню точную команду, но, вероятно, это l 0x80300000 или load_xmodem или что-то в этом роде. В основном вы хотите, чтобы x, y или z модемировали файл .bin через последовательный порт в пространство памяти для процессора, а затем с помощью команды go или любой другой команды сообщали uboot о переходе к вашей программе.
Вы должны увидеть несколько символов U (0x55 - «U»), выходящих из последовательного порта при запуске.
Ваша главная цель - создать простую процедуру последовательного порта, чтобы вы могли распечатывать данные для отладки и иным образом видеть, что делают ваши программы. Позже вы сможете заняться графикой и т. Д., Но сначала используйте последовательный порт.
Происходил какой-то обман. Так как uboot подошел и инициализировал последовательный порт, нам не пришлось, просто засунуть байты в th. но быстро вы переполните хранилище thr и потеряете байты, поэтому вам нужно будет прочитать trm для omap и найти какой-то бит, который указывает, что передатчик пуст, он все передал, а затем создать функцию типа uart_send, которая опрашивает передатчик пустой, затем отправляет один байт.
также забудьте о printf (), вам нужно создать свой собственный номер для печати (восьмеричный или шестнадцатеричный - самые простые) и, возможно, строку для печати. Я делаю такую работу весь день и всю ночь, и в 99% случаев все, что я использую, - это небольшая процедура, которая выводит 32-битные шестнадцатеричные числа из uart. по номерам я могу отлаживать и видеть статус программ.
Итак, возьмите модель sam7 или что-то в этом роде (обратите внимание, что параметры командной строки компилятора и компоновщика важны, как и порядок файлов в командной строке ссылки, первый файл должен быть вашей точкой входа, если вы хотите получить первую инструкцию / слово в файле .bin будет вашей точкой входа, что обычно является хорошей идеей, поскольку в будущем вы захотите узнать, как управлять этим для загрузки из ROM).
Вероятно, вы можете немного обойтись без удаления или замены uboot, если вы начнете смотреть на команды загрузки на основе Linux для uboot, вы увидите, что он копирует то, что в значительной степени является файлом .bin из флэш-памяти или где-то в место в оперативной памяти , затем переходя к нему. Теперь, переходя на linux, esp arm linux включает в себя несколько таблиц arm и возможную настройку некоторых регистров, где ваши программы не хотят или не нуждаются в этом. в основном, какую бы команду вы ни выбрали для использования после того, как вы скопировали свою программу в RAM, вы будете использовать скрипт в загрузочном скрипте для uboot, если вы решите, что плата загружается и запускается, как это происходит с Linux.
Говоря, что вы можете использовать jtag и не полагаться на uboot для работы, когда вы идете по этому пути, хотя, вероятно, есть определенное количество вещей, которые вам нужно сделать при загрузке, чтобы запустить и запустить чип, в частности, настройка uart, вероятно, будет где-то несколько делителей тактовой частоты, включение тактовой частоты, включение ввода-вывода и тому подобное. Вот почему пример sam7 начинается с мигания светодиода вместо элемента uart. Amotek jtag-tiny - хороший jtag wiggler, я был очень доволен, использую их весь день каждый день на работе. Beagleboard, вероятно, использует распиновку TI, а не стандартную распиновку ARM, поэтому вам, вероятно, придется изменить кабели. И я не знаю, дает ли OMAP вам прямой доступ к контроллеру касания руки или вам нужно сделать что-то конкретное. Вам лучше пока просто пойти по маршруту uboot.
Когда у вас есть фреймворк, в котором у вас есть небольшое количество asm для настройки стека и перехода к вашему коду C точки входа, вы можете начать превращать этот код C в ОС или делать все, что захотите. Если вы посмотрите на chibios, prex или другие подобные, вы обнаружите, что у них есть небольшой загрузочный код asm, который вводит их в свою систему. Точно так же там есть отладочные и неотладочные процедуры uart. Многие rtoses захотят использовать прерывания, а не опрашивать, чтобы thr оставался пустым.
Если этот пост не поможет вам начать работу со своим приветственным миром (позволяя вам выполнить часть работы), дайте мне знать, и я откопаю свой биглборд и создам полный пример. Моя доска не совсем совпадает с вашей, но что касается hello world, она должна быть достаточно близкой.
person
old_timer
schedule
29.07.2011