Обсуждаем контроллеры компании Atmel.
Ответить

xmega и assembler (atmel studio)

Пн май 21, 2012 21:19:00

Здравствуйте, помогите с настройкой портов в xmega (256A3)

Пишу в Studio например:

clr r22
ldi r22,0b00000001
out PORTE_DIRSET,r22
out PORTE_outSET,r22

Далее debug и ошибка:

Error 1 Operand 1 out of range: 0x681

Совсем не могу понять в чем дело... На С много примеров, там всё работает (наверное) у них... Вот например помигали светодиодом:

Код:
#include <avr/io.h>
#include <util/delay.h>

#define BLINK_DELAY_MS 1000

int main( void )
{
  PORTA.DIRSET = 0b00000001 ; // Set pin 0 to be output.
 
  while(1){ // loop forever
    PORTA.OUTSET = 0b00000001 ; // set the output high.
    _delay_ms( BLINK_DELAY_MS ) ; // wait.
    PORTA.OUTCLR = 0b00000001 ; // set the output low.
    _delay_ms( BLINK_DELAY_MS ) ; // wait.
  }
}

Для меня принципиально изучить assembler... На мегах раобрался. На xmega не удалось пока что(

Re: xmega и assembler (atmel studio)

Пн май 21, 2012 23:08:56

известная проблема, которая встречается также и на новых мегах (mega88 итп)
дело в том, что инструкции IN/OUT применимы только к портам ввода-вывода с номерами до 63. А в новых семействах адресное пространство портов-регистров значительно расширено, поэтому для портов с адресом болле 63 нужно использовать инструкции STS/LDS
для примера:
sts PORTE_DIRSET,r22
Atmel советует заменить все подобные обращения макросами, для облегчения переносимости программ... http://www.atmel.com/Images/doc2550.pdf http://www.atmel.com/Images/AVR001.zip

Re: xmega и assembler (atmel studio)

Вт май 22, 2012 02:14:35

Благодарю за оперативный ответ! Вы мне очень сильно помогли! :)))

В этом топике, если удобно, можно будет задавать вопросы по xmega на ASM..

Re: xmega и assembler (atmel studio)

Вт май 22, 2012 12:17:36

Кто-нибудь может помочь выставить частоту на внутренний RC генератор 32МГц?
Я написал так:
Код:
ldi r17,0b00000010
ldi r16,0xD8
sts OSC_RC32MEN_bm,r17;          Включить RC ген-р
sts OSC_RC32MRDY_bm,r17;        Ожидание готовности
sts CPU_CCP,r16;                         отключение защиты
sts CLK_SCLKSEL1_bm,r17;           ну и типа перевод на этот генератор...


В AVR симулятор частота остается 1,000 МГц... А так.. На глаз не знаю как проверить)

Re: xmega и assembler (atmel studio)

Вт май 22, 2012 12:23:22

neurofunk писал(а):Кто-нибудь может помочь выставить частоту на внутренний RC генератор 32МГц?
В AVR симулятор частота остается 1,000 МГц... А так.. На глаз не знаю как проверить)

С xmega пока еще не работал, но вообще в AVR Studio частота для симуляции устанавливается принудительно руками.
А проверить... если есть реальная железка, то запрограммировать поочередный вывод в порт нулей и единиц и осциллографом посмотреть частоту. На глаз действительно не проверить :)

Re: xmega и assembler (atmel studio)

Вт май 22, 2012 12:45:49

Можно и на глаз, вывести на порт импульсы ~1Гц, и зацепить светодиод. Точно частоту не определишь, но 1МГц от 4Мгц - запросто. Не говоря уже о более высоких частотах.

Re: xmega и assembler (atmel studio)

Вт май 22, 2012 12:52:02

НУ НАКОНЕЦ ТО!!! :)))

В общем вот код, очень коряво всё) Но главное работает!!! кто разбирается суть поймет:
Код:
settings:
;Частота:
;----------
ldi r17,0x02                      ; Загрузка необходимых значений в регистры
ldi r19,0b00000001
ldi r16,0xD8
;----------
sts osc_ctrl,r17                 ; Включаем RC32MEN т.е. генератор на 32МГц
sts OSC_STATUS,r17        ; Типа проверка готовности, видимо я не так сделал тут что-то
rcall delay1                      ; ВЫЗОВ ЗАДЕРЖКИ, БЕЗ НЕЁ НЕ ПАШЕТ
sts CLK_LOCK,r19            ; Регистр блокировки изменения системной частоты
sts CPU_CCP,r16             ; Тоже еще одна блокировка важных, эм, короче изменений регистров
sts CLK_CTRL,r19            ; Собственно вот само использование RC32MEN
;----------
delay1:
ldi r20,255
ldi r21,255
mov r25,r20
mov r26,r21
loop1:
subi r25,1
sbci r26,0
brcc loop1
ret
;----------

Re: xmega и assembler (atmel studio)

Пт авг 10, 2012 18:53:04

Всем привет! Мой предыдущий код настройки генератора совсем неверен, совсем что то я напутал на самом деле.

Вот адекватный код:

Код:
;   Частота 32Мгц от внутреннего генератора
    LDI r16,0xD8                                ; загрузка сигнатуры (вместо 0xD8 можно вставить CCP_IOREG_gc)
    sts CPU_CCP,r16                           ; отключаем защиту ядра от изменений важных конфигурации
    LDI r16,OSC_RC32MEN_bm           ; маска включения RC32MEN
    sts OSC_CTRL,r16                         ; само включение
    status_chek:       
    LDI r16,OSC_STATUS                    ; адекватная проверка статуса готовности генератора
    sbrc R16,1                                    ; если бит 1 установлен в OSC_STATUS (готовность RC32MEN) то пропустить след. строку
    rjmp status_chek
   
    LDI r16,0xD8
    sts CPU_CCP,r16

    LDI r16,CLK_SCLKSEL_RC32M_gc  ; перевод системы на
    sts CLK_CTRL,r16
; генератор 32МГц

И теперь вопрос
команда sbrc - Пропустить если бит n в Rn очищен, а у нас как бы получается наоборот, что он выставлен... Но работает всё именно так. Объясните, что я не так пойму? Если точка в AtmelStudio стоит, то значит бит очищен? Тогда почему с портами ввода вывода наоборот*? Запутался

Re: xmega и assembler (atmel studio)

Сб авг 11, 2012 07:55:30

не верь симулятору!!! :cry:
предварительно просмотри help в разделе ограничений в работе симулятора по данному МК
:beer:

Re: xmega и assembler (atmel studio)

Сб авг 11, 2012 17:04:15

неужели там такая вот простая инструкция криво выполняется или что там вообще, что ему нельзя верить? :)

Re: xmega и assembler (atmel studio)

Сб авг 11, 2012 17:59:12

возможно любое "ненормальное" поведение при симуляции периферийных устройств (не ставятся или не сбрасываются флаги...) - таймеры, регистры управления и контроля - там в хелпе выявленные указаны для простого (Known Issues in AVR Simulator 1 и по каждому МК) а для Simulator 2 пока "лови сам" иной раз мозги плавятся... :cry:

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 08:33:11

Парни!!! Помогите!! Это бред какой-то :cry:

Код:
;   Стек:
    LDI R16,Low(RAMEND)
   sts CPU_SPL,R16
   LDI R16,High(RAMEND)
   OUT CPU_SPH,R16
;   Посветим светодиодом
   LDI r16,0b11111111
   STS PORTA_DIRset,r16
   STS PORTA_OUTSET,r16
   nop
   nop
   nop


Ну нифига не загорается светодиод ни на одной из ножек :cry:
Всё верно подключил, и программатор шьет и видит нормально контроллер :?

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 08:59:19

Dima89 писал(а):Парни!!! Помогите!! Это бред какой-то

Какой камень? Как подключен светодиод?
Почему здесь так,
Код:
sts CPU_SPL,R16
а здесь так?
Код:
OUT CPU_SPH,R16

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 09:05:17

xmega256A3

анод к ножке, катод к минусу. Пробовал и наоборот... И использовал другие порты. Всё тоже самое(

На счет стека в принципе и так и так работает, но не в нем то дело, студия ошибок не показывает по этому поводу
Последний раз редактировалось Dima89 Вс авг 12, 2012 09:07:32, всего редактировалось 1 раз.

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 09:06:29

ну во-первых адресация любого порта как ячейки ОЗУ требует смещения 0x20 :tea:
т.е к примеру (для ATtiny2313 -ибо доставать карту под Ваш камень влом, но принцип один и тот же):

ldi r16,low(ramend)
out spl,r16

равноценно

ldi r16,low(ramend)
sts (spl+0x20),r16

так как к ячейкам оперативной памяти относится и регистровый файл

если же Ваш PORTA_DIRset был указан как адрес без смещения то попадание кода в регистр на 20H младше...
Внимательно учите матчасть 8)

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 09:09:18

Ту что в обучалке?
Благодарю... Нюансов я вообще не знаю видимо)

PS. Опять таки наступаю практически на те же грабли, подключил macros.inc c сайта Atmel. Написал STORE... Всё заработало!!
Код:
   LDI r16,0b11111111
   STORE PORTE_DIR,r16
   STORE PORTE_OUT,r16

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 09:49:35

и обучалку и оригинальный datasheet
а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится) :sleep:
ассемблер - не Сиии - тут собственными мозгами шевелить надо! 8)

Re: xmega и assembler (atmel studio)

Вс авг 12, 2012 10:02:16

BOB51 писал(а):и обучалку и оригинальный datasheet
а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится) :sleep:
ассемблер - не Сиии - тут собственными мозгами шевелить надо! 8)

дык чужие не использую )

А в inc от студии на мою хмегу всегда смотрел) Вот только с обучалками не очень, потому что всё почти на Си. Вот и пытаюсь шевелить мозгом)

Re: xmega и assembler (atmel studio)

Пн авг 13, 2012 08:40:20

под "чужими" надо понимать и оригинальные APPNOTE от атмел (включая и прилагаемые к studio *.inc файлы)
http://www.atmel.com/products/microcont ... =documents
вкладки подразделов :
Applications notes
datasheets
other documents
да и с xmegи начинать на асме... варварство как-то...

Re: xmega и assembler (atmel studio)

Пн авг 13, 2012 08:49:40

скорость камня 32МГц xMega256A3
Код:
        ;32Мгц от внутреннего генератора
   LDI r16,OSC_RC32MEN_bm
   store OSC_CTRL,r16            ; инициализация генератора
   chek:                         ; проверка готовности
   load r16,OSC_STATUS           ; загружаем в регистр значение OSC_STATUS
   SBRS r16,1                    ; если бит 1 будет установлен, то идем дальше
   rjmp chek                     ; если нет, то опять проверяем
   LDI r16,0xD8                  ; отключаем           
   store CPU_CCP,r16             ; защиту
   LDI r16,CLK_SCLKSEL_RC32M_gc  ; выбираем источник
   store CLK_CTRL,r16            ; тактового сигнала от RC32MEN
Ответить