Comments 35
А кто инициализирует память? например если это ддр то нужно же ей установить настройки в регистры типа таймингов и т.д., или это Вы без внешней памяти пример привели?
В данном случае, вероятно имеется в виду, что действие происходит во внутренней SRAM, инициализировать которую не требуется по определению. В случае же с внешней ddr данный код необходим, да.
Действительно, если есть внешняя память, то сначала надо инициализировать источник тактовой частоты и внешнюю память. Он этим обычно занимается загрузчик.
Считайте, что я описал пример самого простого загрузчика, которому хватит внутренней SRAM
Считайте, что я описал пример самого простого загрузчика, которому хватит внутренней SRAM
В общем интересно, если можно еще раскажите о Загрузчиках для ARM :) и о JTAG поподробнее.
Выходы есть почти на каждом роуторе, кпк (распаять надо)
Хочется поиграться с кпк, но вот надо jtag USB (com валяется, через переходник плохо работает, разбираться нету время)
Выходы есть почти на каждом роуторе, кпк (распаять надо)
Хочется поиграться с кпк, но вот надо jtag USB (com валяется, через переходник плохо работает, разбираться нету время)
Старт программы с адреса 0x0 это лишь один из вариантов загрузки который предлагает bootrom зашитый производителем (если речь идет о микроконтроллерах на ARM), ведь если нет JTAGа вам же придется как-то залить код через UART, SPI или нечто подобное.
А вообще представленный вами код в том или ином виде содержится в startup.s предоставляемый производителем чипа, не вижу смысла переписывать его заново, достаточно размеры стеков подправить под свои нужды, и обработчики вставить если это необходимо.
А вообще представленный вами код в том или ином виде содержится в startup.s предоставляемый производителем чипа, не вижу смысла переписывать его заново, достаточно размеры стеков подправить под свои нужды, и обработчики вставить если это необходимо.
А вообще представленный вами код в том или ином виде содержится в startup.s предоставляемый производителем чипа, не вижу смысла переписывать его заново
Вы, видимо, забыли, что это ознакомительная статья, для того, чтобы показать, как и что загружается, а не написание своей реализации загрузчика.
Автор, спасибо, было интересно прочитать. С нетерпением жду продолжения.
Вы, видимо, забыли, что это ознакомительная статья, для того, чтобы показать, как и что загружается, а не написание своей реализации загрузчика.
Автор, спасибо, было интересно прочитать. С нетерпением жду продолжения.
Ну процессор стартует с адреса 0x0. Что там находится — зависит уже от производителя и конфигурации процессора. Там может быть как bootrom, так и flash, можно туда замапить и RAM. Например, AT91SAM7X512 поддерживает все три варианта: изначально туда мапится bootrom, после перепрошивки мапится Flash, а с помощью Мemmory Controller можно замапить туда RAM (например что бы менять адреса обработчиков исключений в рантайме).
Код действительно повторяет startup.s, Но мне однажды пришлось очень хорошо разобраться, как этот код работает. Думаю, будет интересно не мне одному.
Код действительно повторяет startup.s, Но мне однажды пришлось очень хорошо разобраться, как этот код работает. Думаю, будет интересно не мне одному.
А можно какие-то принципиальные схемы, как все подсоединять, и что из этого можно получить…
Допустим, сделать какую-то простую схемку с парой диодов, и написать программку что они моргали…
Было бы интересно сделать самому, своими руками =)
Заранее благодарю!
Допустим, сделать какую-то простую схемку с парой диодов, и написать программку что они моргали…
Было бы интересно сделать самому, своими руками =)
Заранее благодарю!
Купите комплект разработчика(KIT) там уже все припаяли и собрали. В комплекте будет документация, среда разработки, компилятор и JTAG-отладчик. Цена вопроса от 5-6 тысяч. Правда софт скорее всего будет с ограничениями и под винду.
Краткая инструкция для желающих себя попробовать:
1. Выбираете МК.
2. Ищите киты на сайте производителя.
3. Ищите на efind.ru и ему подобных этот кит.
Краткая инструкция для желающих себя попробовать:
1. Выбираете МК.
2. Ищите киты на сайте производителя.
3. Ищите на efind.ru и ему подобных этот кит.
Кстати да. Я вот не могу понять, почему народ носится с Arduino, если можно купить демо-плату и получить как минимум те же возможности, а обычно — намного больше.
Arduino конечно проще, да. Но с KIT'ами поставляется документация и примеры. Разобраться в них — не сильно сложнее. А сделать можно больше интересных вещей
Arduino конечно проще, да. Но с KIT'ами поставляется документация и примеры. Разобраться в них — не сильно сложнее. А сделать можно больше интересных вещей
Да, было бы интересно
Спасибо, толком ничего не знаю о ARM7TDMI
если кому интерестно то современный ARM Cortex M3 инициализируется проще и на С
если кому интерестно то современный ARM Cortex M3 инициализируется проще и на С
Эм… насколько я понял из документации — он инициализируется точно так же.
Всё же кто-то должен прописать вектора обработчиков, инициализировать стеки и память. При желании это наверное можно сделать на C… Но выглядеть будет странно :)
Кстати, надо будет попробовать, спасибо за идею :)
А вообще вся периферия ARM7TDMI тоже инициализируеися на C.
В этой статье я просто описывал, что надо сделать, что бы C заработал.
Всё же кто-то должен прописать вектора обработчиков, инициализировать стеки и память. При желании это наверное можно сделать на C… Но выглядеть будет странно :)
Кстати, надо будет попробовать, спасибо за идею :)
А вообще вся периферия ARM7TDMI тоже инициализируеися на C.
В этой статье я просто описывал, что надо сделать, что бы C заработал.
во первых там в таблице лежат адресса обработчиков а не собственно обработчики.
главный стек тоже инициализируется с этой таблицы, поэтому можно обойтись просто так
__attribute__ ((section(".isr_vector")))
void (* const g_pfnVectors[])(void) =
{
(void (*)(void))((unsigned long)pulStack + sizeof(pulStack)),
// The initial stack pointer
ResetISR, // The reset handler
NmiSR, // The NMI handler
FaultISR, // The hard fault handler
FaultISR, // The MPU fault handler
FaultISR, // The bus fault handler
FaultISR, // The usage fault handler
0, // Reserved
0, // Reserved
0, // Reserved
0, // Reserved
IntDefaultHandler, // SVCall handler
IntDefaultHandler, // Debug monitor handler
0, // Reserved
PendSV_ISR, // The PendSV handler
SysTickTimer_ISR, // The SysTick handler
нужно еще в ResetISR скопировать данные в RAM, тоже вполне реализуемо на С
еще на каждый перефирийный девайс в Cortex M3 отдельное прерывание.
это я так понял пока отличия между архитектурами
главный стек тоже инициализируется с этой таблицы, поэтому можно обойтись просто так
__attribute__ ((section(".isr_vector")))
void (* const g_pfnVectors[])(void) =
{
(void (*)(void))((unsigned long)pulStack + sizeof(pulStack)),
// The initial stack pointer
ResetISR, // The reset handler
NmiSR, // The NMI handler
FaultISR, // The hard fault handler
FaultISR, // The MPU fault handler
FaultISR, // The bus fault handler
FaultISR, // The usage fault handler
0, // Reserved
0, // Reserved
0, // Reserved
0, // Reserved
IntDefaultHandler, // SVCall handler
IntDefaultHandler, // Debug monitor handler
0, // Reserved
PendSV_ISR, // The PendSV handler
SysTickTimer_ISR, // The SysTick handler
нужно еще в ResetISR скопировать данные в RAM, тоже вполне реализуемо на С
еще на каждый перефирийный девайс в Cortex M3 отдельное прерывание.
это я так понял пока отличия между архитектурами
Ух ты, буду знать. Спасибо :)
А как настроить стеки в других режимах?
А как настроить стеки в других режимах?
другой режим всего один.
есть два стека SP_main и SP_process
SP_main используется всегда в режиме обработчика прерываний, туда же сохраняются вложенные прерывания такого наверно в ARM7TDMI нет.
SP_process может использоватся (а может и нет) в обычном режиме
msr psp, r0
есть два стека SP_main и SP_process
SP_main используется всегда в режиме обработчика прерываний, туда же сохраняются вложенные прерывания такого наверно в ARM7TDMI нет.
SP_process может использоватся (а может и нет) в обычном режиме
msr psp, r0
Хм, вижу ARMv7 намного совершенней в этом плане, чем ARMv5.
Вложенные прерывания в ARM7TDMI организовать можно, но вручную: в общем обработчике прерываний сохраняем адрес возврата на стеке, разрешаем прерывания, вызываем настоящий обработчик. Что бы сделать стек прерываний небольшим — можно выполнять настоящий обработчик в основном режиме работы, там стек обычно большой.
Затем, если придет более высокоприоритетное прерывание (за этим следит AIC) — оно сможет выполнится точно таким же образом.
Вложенные прерывания в ARM7TDMI организовать можно, но вручную: в общем обработчике прерываний сохраняем адрес возврата на стеке, разрешаем прерывания, вызываем настоящий обработчик. Что бы сделать стек прерываний небольшим — можно выполнять настоящий обработчик в основном режиме работы, там стек обычно большой.
Затем, если придет более высокоприоритетное прерывание (за этим следит AIC) — оно сможет выполнится точно таким же образом.
UFO just landed and posted this here
Ну там можно ожидать Линукс, я думаю :)
Или WinCE.
Для таких ARM-ов, Линукс — вполне себе хорошее решение, насколько мне кажется. Во всяком случае там уже есть все драйвера и много софта.
Если уж очень хочется своё, то можно взять бесплатную realtime os, даташиты на процессор, всю периферию что стоит в ноуте, и писать, писать, писать :)
Только сначала надо будет получить доступ к памяти программ. Самый популярный способ — через JTAG, если производитель ноута не предоставит каких-нить стандартных способов перешивки.
Или WinCE.
Для таких ARM-ов, Линукс — вполне себе хорошее решение, насколько мне кажется. Во всяком случае там уже есть все драйвера и много софта.
Если уж очень хочется своё, то можно взять бесплатную realtime os, даташиты на процессор, всю периферию что стоит в ноуте, и писать, писать, писать :)
Только сначала надо будет получить доступ к памяти программ. Самый популярный способ — через JTAG, если производитель ноута не предоставит каких-нить стандартных способов перешивки.
UFO just landed and posted this here
Разбирать и изучать — это к сожалению единственный способ.
Но самое поганое не это. Некоторые производители жлобятся выкладывать подробные даташиты по своим продуктам в открытый доступ.
Хотя, думаю в дешевых китайских нетбуках стоят такие же дешевые комплектующие, документации по которым вагон :)
Но самое поганое не это. Некоторые производители жлобятся выкладывать подробные даташиты по своим продуктам в открытый доступ.
Хотя, думаю в дешевых китайских нетбуках стоят такие же дешевые комплектующие, документации по которым вагон :)
Попробуйте beagleboard.
Спасибо, очень интересно. Единственный недостаток, не имение под рукой arm'а, хотя это не ваша вина.
Хотелось бы попробовать сделать собственную плату, с микропроцессором/контроллером, но руки ни как не дойдут. Стоит ли начинать сразу с arm или лучше начать со всем известных атмелов? Не дадите ли ссылку на магазин где такое добро можно купить, за хорошую цену?
Хотелось бы попробовать сделать собственную плату, с микропроцессором/контроллером, но руки ни как не дойдут. Стоит ли начинать сразу с arm или лучше начать со всем известных атмелов? Не дадите ли ссылку на магазин где такое добро можно купить, за хорошую цену?
Ну AVRки (вы же о них?) разве что паять удобно (ибо бывают в больших корпусах). А в остальном — разницы между серией AT91SAM и AVR в плане разводки и сборки — немного. Единственное, что у ARM множество входов питания. И часть ножек — системные, они должны быть подтянуты к земле или питанию.
Если покупать демо-плату — то разницы вообще нет, ибо там уже всё разведено и припаяно.
Где купить в розницу — не подскажу, ибо мы процессоры покупаем тысячами сразу :)
Если покупать демо-плату — то разницы вообще нет, ибо там уже всё разведено и припаяно.
Где купить в розницу — не подскажу, ибо мы процессоры покупаем тысячами сразу :)
Попробуйте Cypress PSoC3(ядро i8051), а с него относительно безболезненно можно перейти на PSoC5 (ядро ARM Cortex-M3).
Что получите в отличие от Атмел. Наличие реконструируемых цифровых и аналоговых блоков, за счёт чего можно обойтись от обвязки обработав сигнал прямо в кристалле.
Универсальный кит под три семейства (PSoC1, PSoC3, PSoC5) www.cypress.com/?rID=37464
Дешёвый вариант с акселерометром и поддержкой сенсорных кнопок и разъёмом для подключения безпроводного модуля www.cypress.com/?rID=38235
Что получите в отличие от Атмел. Наличие реконструируемых цифровых и аналоговых блоков, за счёт чего можно обойтись от обвязки обработав сигнал прямо в кристалле.
Универсальный кит под три семейства (PSoC1, PSoC3, PSoC5) www.cypress.com/?rID=37464
Дешёвый вариант с акселерометром и поддержкой сенсорных кнопок и разъёмом для подключения безпроводного модуля www.cypress.com/?rID=38235
Спасибо огроменное! Всегда хотел узнать ARM по-ближе. Буду ждать новых статей.
Интересно посмотреть, как вы настроили окружение. Ну и sbrk() и прочие из newlib интересно.
Господа, ну что вы в самом деле! Поиграться с железками можно при цене вопроса от $25!
starterkit.ru/html/index.php
www.evodbg.com/index.php?option=com_content&task=view&id=19&Itemid=46
Причем не только светодиодиками поморгать, но и маленький «аппаратный» web сервер сделать. У меня на таком сайт более 5000 часов крутился…
starterkit.ru/html/index.php
www.evodbg.com/index.php?option=com_content&task=view&id=19&Itemid=46
Причем не только светодиодиками поморгать, но и маленький «аппаратный» web сервер сделать. У меня на таком сайт более 5000 часов крутился…
У меня на таком сайт более 5000 часов крутился
А потом что случилось, если не секрет?
Я имел ввиду что он был доступен из интернета, он и сейчас работает, но в домашней локалке, к нему подключен датчик температуры, я за погодой через web наблюдаю.
Вернее наблюдал, пока не написал скрипт на домашнем сервере, подтягивающий с него страничку, парсящий температуру и проговваривающий мне ее голосом (festival — синтезатор речи ) по утрам, пока я на работу собираюсь :D
Вернее наблюдал, пока не написал скрипт на домашнем сервере, подтягивающий с него страничку, парсящий температуру и проговваривающий мне ее голосом (festival — синтезатор речи ) по утрам, пока я на работу собираюсь :D
Не советовал бы брать StarterKit'ы на сайте starterkit.ru. У меня есть печальный опыт работы с этими «мастерами»…
Лучше заказывать StarterKit от производителя.
Лучше заказывать StarterKit от производителя.
Sign up to leave a comment.
Как загружается ARM