AT91SAM9260: С чего начать?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

AT91SAM9260: С чего начать?

Сообщение lishni »

Здоров ребят!
проблема такая: раньше (да и сейчас макетка лежит) баловался с Attiny2313 - LCD дисплей датчик температуры DS1820 моргание светодиодами, мало-по-малу изучал сам по этому сайту (Кстати большое спасибо много интересного нашел!). Сейчас устроился на работу, они работают с микроконтроллерами на основе ядра ARM, дали отладочную плату AS-9260 (аналог AT91SAM9260-EK), даташиты и IAR тоже дали.

Вопрос с чего начать?

перерыл половину интернета но на ARM9 информации не так много особенно на русском, на ARM7 гораздо больше, говорят если ARM7 освоить то и ARM9 не сложно будет. Хорошо - скачал книжку "микроконтроллеры arm7 семейства at91sam7", но там только как бы общие сведения (регистры, что зачем нужно) по идее все понятно но как начать непонятно. Вычитал что программа зашивается определенным образом и разными способами.

Вообщем на данный момент я запустил пример getstarting (для моей платы) bp IAR Embedded вроде светодиод мигает, но коду там море, различных заголовочных файлов для инициализации и т п. Хотелось бы разобраться во всем.
на Attiny2313 вообще проблем не составляло помигать светодиодом, а тут ну прям много всего.

Нужна помощь)
Где можно почитать? что почитать?
хотя бы пока чтобы просто проц запустился до процедуры main();
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: AT91SAM9260: С чего начать?

Сообщение Satyr »

Чем тебя даташиты и аппноты на атмел.ком не устраивают ?
Этого исчерпывающе.
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: AT91SAM9260: С чего начать?

Сообщение Satyr »

Да и вобще он довольно устаревший уже, если чтото новое и далеко идущее планируешь делать.
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

Re: AT91SAM9260: С чего начать?

Сообщение lishni »

Нашел книгу додэка - микроконтроллеры arm7 семейства at91sam7.2008. На ARM7 все то же самое что и ARM9 только хар-ки другие. Даташиты пока сложновато понимать.
Спасибо за ответы.
Реклама
Эиком - электронные компоненты и радиодетали
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

ИМХО, если время не слишком критично, лучше осваивать, работая исключительно на ассемблере и без всяких левых библиотек. Только так сможете понять, что там к чему и как работает.

По работе с различными контроллерами (USART, SPI и т.д.) вполне годится литература по SAM7: у Атмела в этом плане АРМы в значительной степени совместимы. Ну, даташит -- само собой, особенно если решите действительно разбираться с процессором, а не тупо брать чужой код за основу: надо ведь инициализировать процессор сначала, это не АВРки, где, кроме фузов, особо делать и нечего (ну, стек установить).

Пы.Сы. А устаревший или нет -- особой роли не играет, особенно при освоении. Это для серийного производства обычно лучше новое закладывать.
Реклама
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

Re: AT91SAM9260: С чего начать?

Сообщение lishni »

Да действительно SII, на данный момент помигал светодиодом и связался с компьютером по USART , но говорят (на работе) что нужно знать досканально, т.е ументь самому все инициализировать включать и т.п.
Я с Ассемблером совсем никогда не работал.
Посоветуете какие книги почитать? (на русском)
хотя бы на данный момент для того чтобы разобраться как инициализировать ARM в самом начале, до выполнения main.c
буду очень благодарен! (время ограничено(( )
Реклама
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

На русском никогда не встречал, но и не искал за ненадобностью. Сам пользуюсь только справочной литературой: описанием архитектуры ARM (качается с сайта ARM) и даташитом на МК (с сайта ATMEL).

Кстати, в упомянутом даташите обязательно изучите раздел Errata: подозреваю, что у 9260 ошибок полно (их очень много у 9261 -- одним из тех, с кем имею дело; вот у 9G45 многое исправили).
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: AT91SAM9260: С чего начать?

Сообщение Satyr »

lishni писал(а):Да действительно SII, на данный момент помигал светодиодом и связался с компьютером по USART , но говорят (на работе) что нужно знать досканально, т.е ументь самому все инициализировать включать и т.п.
Я с Ассемблером совсем никогда не работал.
А причем тут ассемблер то ?
"Инициализировать досканально" на язык никак не завязано.
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

Без ассемблера как минимум не построишь таблицу векторов и не сделаешь инициализацию стека. Всё остальное действительно можно инициализировать и на ЯВУ. Правда, без знания ассемблера не может быть досконального знания микроконтроллера :)
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

Re: AT91SAM9260: С чего начать?

Сообщение lishni »

Да как раз об этом речь =) о стеке и векторах прерывания. в файле sturtup.s

может быть есть какой-нибудь пример? где все очень подробно написано какая строчка, что делает, и зачем и почему =)

в перспективе необходимо уметь оптимизировать код, ясно что сначала оптимальный алгоритм нужно сделать, а дальше паходу нужно в ассемблер лезть)
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

Инициализация целиком и полностью зависит от задачи и от используемых инструментов. Я, например, решать стоящие задачи собираюсь (собственно, и решаю) не так, как традиционно поступают на микроконтроллерах (целевая задача, работающая на "голом" железе или, в лучшем случае, использующая крайне примитивную "подложку", гордо именуемую операционной системой): такой поход хорош для простых задач, традиционно решавшихся на 8-разрядных МК, у меня же задачи существенно обширней сложней. Поэтому я создаю свою ОС, хотя небольшую, но полноценную (чем она кардинально отличается от всяких там FreeRTOS, RTX и прочая; другое дело, что всё сразу сделать невозможно, и процесс создания собственно ОС растягивается на годы: сначала делаю то, что нужно прямо сейчас, потом -- нечто менее востребованное, ну и т.д.), а параллельно с этим использую её для решения целевых задач, стоящих перед нашей конторой. Соответственно, моя низкоуровневая инициализация рассчитана на потребности моей системы и является несовместимой со стандартными библиотеками популярных компиляторов, будь то IAR, Keil или GCC, тем более, что Си я вообще нигде и никак не использую и не буду использовать; весь системный код пишу на ассемблере, а прикладной -- на Аде (ещё думаю Фри Паскаль прикрутить, но руки никак не дойдут). В общем, мой случай вряд ли годится в качестве примера для обучения, тем более быстрого.

Ну а вообще, в первую очередь надо читать документацию на процессор; без этого всё равно ничего толком понятно не будет. Надо разбираться в принципах работы процессора, а не пытаться что-то понять по каким-то обрывкам кода: эти обрывки способны только кашу в голове породить, ну а нужно реальное понимание того, как что работает, взаимодействует и т.д. и т.п.

Если угодно, то пожалуйста, ниже привожу мой стартовый код для любых процессоров "настоящей" архитектуры ARM (не ARMv6-M и ARMv7-M, более известных по названию процессорых ядер для этих архитектур -- Cortex-M; для них стартовый код совершенно другой, поскольку это, строго говоря, не АРМы). Он написан для ассемблера от Кейл, но суть не меняется, при необходимости его можно и для ИАР адаптировать, и для ГНУсного ассемблера.

Код: Выделить всё

        AREA    RESET, CODE, READONLY
        ARM


Vectors ldr     PC, Reset_Addr
        ldr     PC, UD_Addr
        ldr     PC, SVC_Addr
        ldr     PC, PAbt_Addr
        ldr     PC, DAbt_Addr
        DCD     0
        GO_TO_IRQ_HANDLER
    IF  FAST_IRQ = 1
        GO_TO_FIQ_HANDLER
    ELSE
        b       .
    ENDIF


Reset_Addr  DCD     Reset
UD_Addr     DCD     UD_Handler
SVC_Addr    DCD     SVC_Handler
PAbt_Addr   DCD     PAbt_Handler
DAbt_Addr   DCD     DAbt_Handler


; ========================
;
; ОСОБАЯ ОБРАБОТКА ВНЕШНИХ И БЫСТРЫХ ПРЕРЫВАНИЙ
;
; ========================
;
; Использованный здесь макрос может сформировать код, предназначенный для выпол-
; нения особой обработки внешних и быстрых прерываний. На него не накладывается
; никаких формальных ограничений, он лишь должен быть соответствующим образом
; увязан с кодом инициализации процессора, платы и устройств.

        SPECIAL_IRQ


; ========================
;
; ПОДПРОГРАММА ОБРАБОТКИ СБРОСА
;
; ========================
;
; Эта подпрограмма получает управление сразу после загрузки образа системы. Фор-
; мально она является обработчиком сброса, хотя фактически это не всегда так:
; образ системы может загружаться из внешнего источника начальным загрузчиком,
; намертво зашитым в ПЗУ процессора; в этом случае после загрузки образа загруз-
; чик имитирует сброс, передавая управление на нулевой адрес образа системы.
;
; Обработчик сброса загружает указатели стеков привилегированных режимов, выпол-
; няет инициализацию базовой платы и процессора с помощью соответствующего ма-
; кроса, после чего передаёт управление программе инициализации ядра (KIP).
                               
        AREA  KERNEL, CODE, READONLY
        ARM

Reset   ROUT

        ; Установка указателей стеков привилегированных режимов.
        ldr     SP, =SVC_Stack_Top
        msr     CPSR_c, #PSR_MODE_ABT_D
        ldr     SP, =ABT_Stack_Top
        msr     CPSR_c, #PSR_MODE_UND_D
        ldr     SP, =UD_Stack_Top
        msr     CPSR_c, #PSR_MODE_IRQ_D
        ldr     SP, =IRQ_Stack_Top
    IF  FAST_IRQ = 1
        msr     CPSR_c, #PSR_MODE_FIQ_D
        ldr     SP, =FIQ_Stack_Top
    ENDIF
        msr     CPSR_c, #PSR_MODE_SYS_D
        ldr     SP, =KStack_Top

        ; Инициализация процессора и процессорной платы. После выполнения этого
        ; макроса будет установлена система команд Thumb.
        BOARD_INIT

        ; Переход на программу инициализации ядра.
        bl      KIP
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

Re: AT91SAM9260: С чего начать?

Сообщение РадиоЛоматель »

SII писал(а):Ну а вообще, в первую очередь надо читать документацию на процессор; без этого всё равно ничего толком понятно не будет. Надо разбираться в принципах работы процессора, а не пытаться что-то понять по каким-то обрывкам кода: эти обрывки способны только кашу в голове породить, ну а нужно реальное понимание того, как что работает, взаимодействует и т.д. и т.п.
В начале своей программистской деятельности, я истер до дыр даташит на МК pic16f84, но так и не понял, как оно работает. Точнее понял, но совершенно не понимал, как это применить для конкретной задачи. Ну в общем, почти бросил это дело, но случайно наткнулся на хорошо комментированый пример "бегущего огонька" на ассемблере. С тех пор, уже лет 8 я программирую МК, и авр и пик... И конечно, мне с моей колокольни кажется, что лучше ДШ ничего быть не может. Но для новичка это не так.
Так что вы зря так плохо относитесь к примерам. Нужно просто совмещать приятное с полезным.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: AT91SAM9260: С чего начать?

Сообщение Satyr »

Даташита, который конкретно на МК, не достаточно.
А если дополнить даташитом на само ядро, ерратой, и бумажкой-напутствием по железной части к данному МК - уже вполне.
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

РадиоЛоматель, человек же ясно написал, что он уже возился с МК и что работает программистом. Соответственно, его нельзя считать новичком.
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

Satyr писал(а):Даташита, который конкретно на МК, не достаточно.
А если дополнить даташитом на само ядро, ерратой, и бумажкой-напутствием по железной части к данному МК - уже вполне.
И не забыть описание архитектуры процессора ;) Система-то команд, работа с прерываниями и т.п. именно там описаны. Собственно, с него и надо начинать: бегло ознакомиться с системой команд и вообще с тем, что в процессорах данной архитектуры бывает, и внимательно -- с обработкой сброса и прерываний, набором регистров, стеками... В общем, с тем, с чем придётся иметь дело с самого начала. Ну а потом уже смотреть документацию на конкретный МК: какие у него особенности начальной загрузки, как переключать частоты и всё такое.
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

Re: AT91SAM9260: С чего начать?

Сообщение РадиоЛоматель »

Ммм.. Я не правильно выразился. Это не ДШ на конкретный МК, а некий сборник: система команд, прерывания, стек, описание переферии, регистры... Для быстрого старта, так сказать. До сих пор у меня распечатаный валяется в папке. Даже на русском. Ну ладно, не суть. А то увел в сторону тему :))
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

Re: AT91SAM9260: С чего начать?

Сообщение lishni »

SII я думаю можно считать меня новичком ) т.к пока что только испытательный срок а не работа)

Интересный подход SII, думается мне это очень удобно, спасибо за код. думаю будет полезно. но пока рано, ассемблер только изучаю. У меня есть ARM Architecture Reference Manual, но минус что это все на английском, нет ли у кого нибудь на русском про архитектуру АРМ.
Сейчас начал читать ДШ к AT91SAM9260 но я все же думаю что там общая информация, просто описание регистров (или есть алгоритмы что как делается?) . программировать он меня не научит.

РадиоЛоматель а у Вас не осталось этой информации в электронном виде?


помогите разобраться с кодом стартапа, из IAR:

Код: Выделить всё

/*
     IAR startup file for AT91SAM9260 microcontrollers.
 */

        MODULE  ?cstartup

        ;; Forward declaration of sections.
        SECTION IRQ_STACK:DATA:NOROOT(2)
        SECTION CSTACK:DATA:NOROOT(3)

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#define __ASSEMBLY__
#include "board.h"

//------------------------------------------------------------------------------
//         Definitions
//------------------------------------------------------------------------------

#define ARM_MODE_ABT     0x17
#define ARM_MODE_FIQ     0x11
#define ARM_MODE_IRQ     0x12
#define ARM_MODE_SVC     0x13
#define ARM_MODE_SYS     0x1F

#define I_BIT            0x80
#define F_BIT            0x40

//------------------------------------------------------------------------------
//         Startup routine
//------------------------------------------------------------------------------

/*
   Exception vectors
 */
        SECTION .vectors:CODE:NOROOT(2)

        PUBLIC  resetVector
        PUBLIC  irqHandler

        EXTERN  Undefined_Handler
        EXTERN  SWI_Handler
        EXTERN  Prefetch_Handler
        EXTERN  Abort_Handler
        EXTERN  FIQ_Handler

        ARM

__iar_init$$done:               ; The interrupt vector is not needed
                                ; until after copy initialization is done

resetVector:
        ; All default exception handlers (except reset) are
        ; defined as weak symbol definitions.
        ; If a handler is defined by the application it will take precedence.
        LDR     pc, =resetHandler        ; Reset
        LDR     pc, Undefined_Addr       ; Undefined instructions
        LDR     pc, SWI_Addr             ; Software interrupt (SWI/SVC)
        LDR     pc, Prefetch_Addr        ; Prefetch abort
        LDR     pc, Abort_Addr           ; Data abort
        B       .                        ; RESERVED
        LDR     pc, =irqHandler          ; IRQ
        LDR     pc, FIQ_Addr             ; FIQ

Undefined_Addr: DCD   Undefined_Handler
SWI_Addr:       DCD   SWI_Handler
Prefetch_Addr:  DCD   Prefetch_Handler
Abort_Addr:     DCD   Abort_Handler
FIQ_Addr:       DCD   FIQ_Handler
	
/*
   Handles incoming interrupt requests by branching to the corresponding
   handler, as defined in the AIC. Supports interrupt nesting.
 */
irqHandler:
        /* Save interrupt context on the stack to allow nesting */
        SUB     lr, lr, #4
        STMFD   sp!, {lr}
        MRS     lr, SPSR
        STMFD   sp!, {r0, lr}

        /* Write in the IVR to support Protect Mode */
        LDR     lr, =AT91C_BASE_AIC
        LDR     r0, [r14, #AIC_IVR]
        STR     lr, [r14, #AIC_IVR]

        /* Branch to interrupt handler in Supervisor mode */
        MSR     CPSR_c, #ARM_MODE_SYS
        STMFD   sp!, {r1-r3, r4, r12, lr}
        BLX     r0
        LDMIA   sp!, {r1-r3, r4, r12, lr}
        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT

        /* Acknowledge interrupt */
        LDR     lr, =AT91C_BASE_AIC
        STR     lr, [r14, #AIC_EOICR]

        /* Restore interrupt context and branch back to calling code */
        LDMIA   sp!, {r0, lr}
        MSR     SPSR_cxsf, lr
        LDMIA   sp!, {pc}^


/*
   After a reset, execution starts here, the mode is ARM, supervisor
   with interrupts disabled.
   Initializes the chip and branches to the main() function.
 */
        SECTION .cstartup:CODE:NOROOT(2)
        PUBLIC  resetHandler
        EXTERN  LowLevelInit
        EXTERN  ?main
        REQUIRE resetVector
        ARM

resetHandler:

        /* Set pc to actual code location (i.e. not in remap zone) */
	    LDR     pc, =label

        /* Perform low-level initialization of the chip using LowLevelInit() */
label:
	    LDR     r0, =LowLevelInit
        LDR     r4, =SFE(CSTACK)
        MOV     sp, r4
        BLX     r0

        /* Set up the interrupt stack pointer. */
        MSR     cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT      ; Change the mode
        LDR     sp, =SFE(IRQ_STACK)

        /* Set up the SYS stack pointer. */
        MSR     cpsr_c, #ARM_MODE_SYS | F_BIT              ; Change the mode
        LDR     sp, =SFE(CSTACK)

        /* Branch to main() */
        LDR     r0, =?main
        BLX     r0

        /* Loop indefinitely when program is finished */
loop4:
        B       loop4

        END
хочется каждую строчку понимать, например сначала эти

MODULE ?cstartup что это почему там знак вопроса, для компилятора эта директива или что?

;; Forward declaration of sections.
SECTION IRQ_STACK:DATA:NOROOT(2) тоже непонятно(
SECTION CSTACK:DATA:NOROOT(3)

буду очень благодарен за разъяснения уважаемые)
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: AT91SAM9260: С чего начать?

Сообщение SII »

Без английского -- абсолютно никуда. Полноценных и качественных переводов по АРМу в природе не существует, бывают лишь отдельные отрывки (например, я кое-что по поводу архитектуры описал на [url]ru.osdev.wikia.com[/url], но далеко не всё, да и времени практически нет, чтобы продолжать сей труд). Так что сразу привыкайте к использованию англоязычной документации.
MODULE ?cstartup что это почему там знак вопроса, для компилятора эта директива или что?

;; Forward declaration of sections.
SECTION IRQ_STACK:DATA:NOROOT(2) тоже непонятно(
SECTION CSTACK:DATA:NOROOT(3)
Синтаксис и значения параметров директив даны в описании транслятора, в данном случае IARовского. Поскольку я им не пользуюсь, то ничего толком сказать не могу. Так что по этому вопросу читайте документацию на IARовский ассемблер.

Чтобы что-то понимать в собственно коде, почитайте для начала ARM Architecture Reference Manual (надеюсь, у Вас на ту версию, что нужно? 9260 относится к ARMv5TEJ, в то время как новейшие АРМы -- разновидности ARMv7, и документация на них разная), разделы по регистрам общего назначения, регистрам состояния (PSR) и режимам процессора (обратите особое внимание на кучу PSR, SP и LR), а затем по обработке прерываний самим процессором. Всё это есть и на упомянутой Вике, так что можете смотреть параллельно её и АРМовский мануал. Ну а потом, когда в теории эти вопросы вроде бы поймёте, беритесь за разбор собственно стартового кода. Он очень простой (но может без проблем быть сокращён на 8 байт, а если программа достаточно компактно расположена -- в пределах, кажется, 16 Мбайт, лень сейчас точно вспоминать -- то и больше).
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: AT91SAM9260: С чего начать?

Сообщение Satyr »

lishni писал(а): У меня есть ARM Architecture Reference Manual, но минус что это все на английском, нет ли у кого нибудь на русском про архитектуру АРМ.
Это не минус, это нормально.
На русском есть пожалуй только под барахло, которому прилично за десяток лет и столько ж не меняется ничего.
Чтото свежее, динамичное, актуальное - только на языке производителя :))
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

Re: AT91SAM9260: С чего начать?

Сообщение lishni »

Понятно) да без английского никуда паходу) буду переводить потихонечку тогда этот толмут =)

Посоветуйте что почитать про bootloader-ы ? =)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»