asm vs 9g45 или достучаться до ядра

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Max001
Родился
Сообщения: 2
Зарегистрирован: Ср фев 27, 2013 21:02:11

asm vs 9g45 или достучаться до ядра

Сообщение Max001 »

Всем здрасьте.
Перерыв кучу документации и разрозненных кусков кода, наконец-то решил обратиться к вам :)))


Вобщем есть некий девайс SK-9G45-OEM
Исполнение кода на си не вызывает особых сложностей.
Задача - нужно рулить процессами непосредственно на асме.

Сложности на данный момент - если брать готовые куски - а-ля getting-started-project под си -
никак не могу вставить кусок кода на ассемблере (в идеале в отдельный файл проекта), по крайней мере при вставке чисел вида
0xFFAABBDD - вылетает что-то вроде value out of range or illegal:

Вообще после инициализации нужно передать управление в асм и все остальное делать там.
Однако в этом случае уткнулся как-раз таки в саму инициализацию, если изначально делать на ассемблере(больше всего не въехал наверное в PLL)

В принципе ничего крутого не надо - включить настроить процессор, шины и программно устанавливать и снимать значения(энергопотребление не важно, поэтому можно повключать все и сразу :)) ), даже прерывания и стек не нужен, разве что возможность переключать перефирию, в частности АЦП

Проект мучается в IARe
Помогите разобраться :facepalm:
Реклама
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: asm vs 9g45 или достучаться до ядра

Сообщение coredumped »

А зачем такой мазохизм? Думаете, на асме лучше написать? Или это контрольная работа?
Возьмите, включите в опциях компилятора генерацию листинга на Ассемблере. Как в IAR это сделать не знаю, где-то птичку поставить нужно. Получите скомпиленный код и листинг на asm. Вот вам готовая "рыба" с инциализацией PLL, стека и таблицы векторов.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Max001
Родился
Сообщения: 2
Зарегистрирован: Ср фев 27, 2013 21:02:11

Re: asm vs 9g45 или достучаться до ядра

Сообщение Max001 »

Вообще изначально хотел и планирую изучать на асме.
Включить в опциях не проблема - проблема потом все это правильно "склеить"
Пока не особо хорошо в этом разбираюсь, но судя по симулятору данные устанавливать в нужное место могу.
Только как зацепить в проекте все асмовые файлы и еще заставить их потом работать - пока не очень
Пробывал так собирать в один файл, но что-то не получается
Есть подозрения что после заливки управление до программы так и не доходит.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: asm vs 9g45 или достучаться до ядра

Сообщение coredumped »

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

Re: asm vs 9g45 или достучаться до ядра

Сообщение SII »

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

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

; Для микроконтроллера AT91SAM9G45 выполняются следующие действия:
;
; - включается кэш-память инструкций;
; - производится переход на систему команд Thumb;
; - запрещается работа сторожевого таймера;
; - в качестве источника синхронизации выбирается главный генератор частотой
;   12 МГц (MAINCK; микроконтроллер спроектирован в расчёте именно на эту часто-
;   ту внешнего кварцевого резонатора);
; - на выходе PLLA устанавливается частота 400 МГц (PLLACK);
; - частота процессора (PCK) устанавливается равной частоте PLLA, т.е. 400 МГц;
; - главная частота периферийных контроллеров (MCK) устанавливается равной трети
;   частоты PLLA, т.е. 133 МГц;
; - выполняется настройка линий ввода-вывода, на этапе генерации отведённых под
;   определённые применения;
; - настраивается матрица межсоединений;
; - на заданные периферийные контроллеры подаётся синхронизация.

        MACRO
        CPU_INIT

        ; Включение кэша инструкций.
        mrc     p15, 0, R1, c1, c0, 0
        orr     R1, R1, #0x00001000
        mcr     p15, 0, R1, c1, c0, 0

        ; Переход на систему команд Thumb.
        blx     %F10

        THUMB

        ; Запрет сторожевого таймера.
10      ldr     R0,  =BASE_WDT
        movs    R1, #1
        lsls    R1, #p_WDT_MR_WDDIS
        str     R1, [R0, #WDT_MR]

        ; Переход на низкоскоростной генератор, чтобы настроить PLL.
        ldr     R4, =BASE_PMC
        ldr     R5, [R4, #PMC_MCKR]
        movs    R1, #m_PMC_MCKR_CSS
        bics    R5, R1
        str     R5, [R4, #PMC_MCKR]

20      ldr     R2, [R4, #PMC_SR]
        lsrs    R2, #p_PMC_INTR_MCKRDY + 1
        bcc     %B20

        ; Запуск главного генератора и ожидание его готовности. На его раскачку
        ; требуется не более 2 мс, т.е. примерно 66,5 низкочастотных циклов.
        ldr     R0, =(9 << p_CKGR_MOR_OSCOUNT) + (1 << p_CKGR_MOR_MOSCEN)
        str     R0, [R4, #CKGR_MOR]

30      ldr     R0, [R4, #PMC_SR]
        lsrs    R0, #p_PMC_INTR_MOSCS + 1
        bcc     %B30

        ; Запуск PLLA и ожидание её готовности. На запуск схемы ФАПЧ требуется
        ; не более 50 мкс, т.е. менее двух низкочастотных циклов. Для получения
        ; выходной частоты 400 МГц входная частота (12 МГц) делится на 3 и умно-
        ; жается на 100.
        movs    R0, #1 << p_PMC_PLLICPR_ICPLLA
        adds    R7, R4, #4
        str     R0, [R7, #PMC_PLLICPR - 4]
        ldr     R0, =(1  << p_CKGR_PLLAR_ALWAYS_1)  + \
                     (99 << p_CKGR_PLLAR_MULA)      + \
                     (3  << p_CKGR_PLLAR_OUTA)      + \
                     (2  << p_CKGR_PLLAR_PLLACOUNT) + \
                     (3  << p_CKGR_PLLAR_DIVA)
        str     R0, [R4, #CKGR_PLLAR]

40      ldr     R0, [R4, #PMC_SR]
        lsrs    R0, #p_PMC_INTR_LOCKA + 1
        bcc     %B40

        ; Выбор источника частоты процессора и периферийных устройств. Таковой
        ; будет частота, вырабатываемая PLLA, т.е. 400 МГц. Одновременное изме-
        ; нение значений полей MDIV и CSS недопустимо, поэтому настройка источ-
        ; ника синхронизации и делителей производится в два этапа.
        ldr     R5, =(PMC_MCKR_PLLADIV2_OFF << p_PMC_MCKR_PLLADIV2) + \
                     (PMC_MCKR_MDIV_3       << p_PMC_MCKR_MDIV)     + \
                     (PMC_MCKR_PRES_1       << p_PMC_MCKR_PRES)
        str     R5, [R4, #PMC_MCKR]

50      ldr     R2, [R4, #PMC_SR]
        lsrs    R2, #p_PMC_INTR_MCKRDY + 1
        bcc     %B50

        movs    R2, #PMC_MCKR_CSS_PLLA << p_PMC_MCKR_CSS
        orrs    R5, R2
        str     R5, [R4, #PMC_MCKR]

60      ldr     R1, [R4, #PMC_SR]
        lsrs    R1, #p_PMC_INTR_MCKRDY + 1
        bcc     %B60

        ; Включение синхронизации периферийных контроллеров.
        movs    R0, #0
        mvns    R0, R0
        str     R0, [R4, #PMC_PCDR]
        str     R0, [R4, #PMC_SCDR]
        ldr     R0, =IO_PMC_PCER
        str     R0, [R4, #PMC_PCER]
        ldr     R0, =IO_PMC_SCER
        str     R0, [R4, #PMC_SCER]
Реклама
Ответить

Вернуться в «Разные вопросы по МК»