Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Вопросы по программированию ARM

Пт июн 08, 2012 12:31:51

Здрасьте :) В общем, собрал отладочную плату для МК ATSAM3U4C. А вот разбираться с методами программирования для ARM лень, да и нет времени.
Использую IAR Embedded Workbench 5.5, прошиваю с помощью JTAG отладчика.
Собственно интересуют элементарные вопросы:
1). Как выставить лог "1" или "0" на линию ввода/вывода, например на 15 ножку.
2). Как используя условие ЕСЛИ ТО, записать: Если на 20 ноге лог "0", то подать на 15 ножку лог "1".
Короче хочу зажечь светодиод по нажатию кнопки.

Светодиод подключил так
Изображение

Раньше программировал АВР-ки (2 года назад) на ассемблере, так что кому не сложно хотелось бы вариант кода на ассемблере, а лучше ещё и на Си.
Понятно, что придётся использовать функции своего МК, но думаю в даташите найду. Мне главное общий шаблон для воркбэнча :))

Re: Вопросы по программированию ARM

Пт июн 08, 2012 15:06:03

Uklunok писал(а):Здрасьте :) В общем, собрал отладочную плату для МК ATSAM3U4C. А вот разбираться с методами программирования для ARM лень, да и нет времени.

При таком подходе нужно действовать след. образом.
1. Разобрать отладочную плату.
2. Удалить с компа ИАР
3. Забыть об этом навсегда.

А если есть желание научиться, то без траты времени и сил - никак не обойтись. Начните с чтения даташитов и изучения примеров программ, коих у Атмела на сайте всегда было достаточно. Я конечно могу набросать вам такую программку, но вы один хрен ничего не поймете, тогда какой смысл?
PS: Под ARM на ассемблере обычно не пишут, в основном на С (но это не есть правило!) К тому-же все примеры на С, сл-но его и изучайте. Ассемблерный мнемокод (ARM-овский) тяжеловат для восприятия, но изучить его нужно, тк может сильно пригодиться при отладке.

Re: Вопросы по программированию ARM

Пт июн 08, 2012 15:23:43

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

Код там ничуть не тяжеловат, тяжеловата архитектура, если писать на чистом асме. А вот отладка или ассемблеровские вставки выглядят вполне нормально.
Так что просто разграничить: рутину компилятору, а полёт фантазии можно и ручками.

Re: Вопросы по программированию ARM

Сб июн 09, 2012 10:12:03

coredumped писал(а):
Uklunok писал(а):Здрасьте :) В общем, собрал отладочную плату для МК ATSAM3U4C. А вот разбираться с методами программирования для ARM лень, да и нет времени.

тогда какой смысл?


Это дипломный проект, точнее его часть. А изучать я это дело не хочу, т.к. мне это мягко сказать не по нраву. Да и зарабатывать на жизнь я себе этим точно не буду. 8)
Я конечно не настаиваю, поищу исходники, проекты. Просто вопрос стоял за то, что если у кого есть проект с подобным функционалом, то я бы не отказался :)

Re: Вопросы по программированию ARM

Сб июн 09, 2012 13:28:37

Вот аппноты http://www.atmel.com/products/microcont ... =documents
Возьмите любой готовый проект, например этот: "Using the Serial Peripheral Interface with AT91SAMxx Devices " - там какраз под ИАР, и используйте его как скелет.

Re: Вопросы по программированию ARM

Вс июн 10, 2012 14:07:50

кТО может посоветовать, где можно почитать полный список ассемблерных команд для arm/. Желательно на русском описание, и с примерами :)
И вопросы:
Запись:
Код:
MOV R1,#99
почему максимальное число можно записать только 99? Регистры же 32-х разрядные, что делать если хочу записать число 32000?
Какая команда выдачи в порт I/O ? - Аналогичная в АВР
Код:
in r1, PINA


Вроде пока всё. Спасибо всем кто откликнулся :)

Re: Вопросы по программированию ARM

Вс июн 10, 2012 15:01:35

Uklunok писал(а):...почему максимальное число можно записать только 99?
... это где Вас этому научили?
Uklunok писал(а):где можно почитать полный список ассемблерных команд для arm
... например здесь http://www.eng.auburn.edu/~nelson/cours ... syLang.pdf

Re: Вопросы по программированию ARM

Вс июн 10, 2012 15:54:56

Код:
#99
компилятор в IAR ругается

А вообще для 8086 записывал так:
Код:
lxi  b, EA60


Для АТМЕГА16 так:
Код:
ldi a5,0b00010000


А как мне записать а IAR ДЛЯ ASM? Напимер в 16сист. число 48AF в регистр

Re: Вопросы по программированию ARM

Пн июн 11, 2012 13:00:09

Дам 200руб тому, кто напишет программу для зажигания светодиода на 15 ножке (порт B). Нужно выставить ноль на эту линию.
Так то вроде понятно, что надо сделать:
Код:
1). Подключить тактовый сигнал к нужному порту I/O.
2). Выбрать частоту тактирования.
3). Настроить порт на вывод.
4). Установить линию порта на вывод.
5). Записать данные в регистр.

И по идее должен загореться.
Проблема в том что информации катастрофически мало в интернете, есть только для STM32. Пытался поискать в даташите на свой МК функции аналогичные функциям в исходнике для STM32, но нихрена не вышло. В официальных проектах на SAM3U4C разобраться конечно же терпения не хватает :twisted:
Х.З. в общем, вот даташит http://www.atmel.com/products/microcont ... =documents

Re: Вопросы по программированию ARM

Вт июн 12, 2012 16:50:32

Что, никто не хочет помочь? Или большинство заходят на форум поболтать ни о чём?
Нашёл исходник для Olimex STM32-P103 ARM Cortex M3 board:
Код:
;;; led-stm32.asm
;;; written by Frank Sergeant
;;;    frank@pygmy.utoh.org
;;;    http://pygmy.utoh.org/riscy
;;; This program is in the public domain.  See http://pygmy.utoh.org/riscy/cortex/
;;; for notes about the program and how to assemble, link, and burn to flash.

;;; Blink the LED on the Olimex STM32-P103 ARM Cortex M3 board.

;;; Directives
        .thumb                  ; (same as saying '.code 16')
        .syntax unified

;;; Equates
        .equ GPIOC_CRH,   0x40011004
        .equ GPIOC_ODR,   0x4001100C
        .equ RCC_APB2ENR, 0x40021018
        .equ STACKINIT,   0x20005000
       
        .equ LEDDELAY,    800000
       
.section .text
        .org 0

;;; Vectors
vectors:       
        .word STACKINIT         ; stack pointer value when stack is empty
        .word _start + 1        ; reset vector (manually adjust to odd for thumb)
        .word _nmi_handler + 1  ;
        .word _hard_fault  + 1  ;
        .word _memory_fault + 1 ;
        .word _bus_fault + 1    ;
        .word _usage_fault + 1  ;

_start:

        ;; Enable the Port C peripheral clock by setting bit 4
        ldr r6, = RCC_APB2ENR
        mov r0, 0x10
        str r0, [r6]
       
        ;; Set the config and mode bits for Port C bit 12 so it will
        ;; be a push-pull output (up to 50 MHz) by setting bits 19-16
        ;; to '0011'.

        ldr r6, = GPIOC_CRH
        ldr r0, = 0x44434444
        str r0, [r6]

        ;; Load R2 and R3 with the "on" and "off" constants
        mov r2, 0              ; value to turn on LED
        mov r3, 0x1000         ; value to turn off LED

        ldr r6, = GPIOC_ODR    ;  point to Port C output data register
       
loop:
        str r2, [r6]           ; clear Port C, pin 12, turning on LED
        ldr r1, = LEDDELAY
delay1:
        subs r1, 1
        bne delay1
       
        str r3, [r6]           ; set Port C, pin 12, turning off LED
        ldr r1, = LEDDELAY
delay2:
        subs r1, 1
        bne delay2

        b loop                 ; continue forever

_dummy:                        ; if any int gets triggered, just hang in a loop
_nmi_handler:
_hard_fault:
_memory_fault:
_bus_fault:
_usage_fault:
        add r0, 1
        add r1, 1
        b _dummy

Может, кто подскажет в каких строках что заменить? :oops: :)

Re: Вопросы по программированию ARM

Вт июн 12, 2012 22:21:47

Я бы помог, но на ASM - это изврат, пиши на С - все получится. И с ИАР тоже как-то не сложилось. В основном народ Keil использует. Что же касается Atmel - есть простой способ, в лоб.
1. Скачать и установить ATmel Studio 6
2. Запустить и выбрать слева в панели "New Example Project from ASF"
3. В списке выберите любой проект под ваш SAM3 - в принципе, пофиг какой - все они с ядром Cortex M3
4. Соберите, запустите.
5. У вас уже готовый проект с инциализацией ARM - осталось только подправить в main() функционал. Куда уже проще?

PS: Читать нужно в разделе GPIO - это порты ввода-вывода. В ARM не так все просто, как AVR - команд по-больше понадобиться.
2

Re: Вопросы по программированию ARM

Ср июн 13, 2012 05:49:59

coredumped, спасибо :)
Тема закрыта