Страница 1 из 1
xmega и assembler (atmel studio)
Добавлено: Пн май 21, 2012 21:19:00
neurofunk
Здравствуйте, помогите с настройкой портов в 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
coredumped
известная проблема, которая встречается также и на новых мегах (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
neurofunk
Благодарю за оперативный ответ! Вы мне очень сильно помогли!
В этом топике, если удобно, можно будет задавать вопросы по xmega на ASM..
Re: xmega и assembler (atmel studio)
Добавлено: Вт май 22, 2012 12:17:36
neurofunk
Кто-нибудь может помочь выставить частоту на внутренний 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
Alkul
neurofunk писал(а):Кто-нибудь может помочь выставить частоту на внутренний RC генератор 32МГц?
В AVR симулятор частота остается 1,000 МГц... А так.. На глаз не знаю как проверить)
С xmega пока еще не работал, но вообще в AVR Studio частота для симуляции устанавливается принудительно руками.
А проверить... если есть реальная железка, то запрограммировать поочередный вывод в порт нулей и единиц и осциллографом посмотреть частоту. На глаз действительно не проверить

Re: xmega и assembler (atmel studio)
Добавлено: Вт май 22, 2012 12:45:49
ploop
Можно и на глаз, вывести на порт импульсы ~1Гц, и зацепить светодиод. Точно частоту не определишь, но 1МГц от 4Мгц - запросто. Не говоря уже о более высоких частотах.
Re: xmega и assembler (atmel studio)
Добавлено: Вт май 22, 2012 12:52:02
neurofunk
НУ НАКОНЕЦ ТО!!!
В общем вот код, очень коряво всё) Но главное работает!!! кто разбирается суть поймет:
Код: Выделить всё
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
Dima89
Всем привет! Мой предыдущий код настройки генератора совсем неверен, совсем что то я напутал на самом деле.
Вот адекватный код:
Код: Выделить всё
; Частота 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
BOB51
не верь симулятору!!!
предварительно просмотри help в разделе ограничений в работе симулятора по данному МК

Re: xmega и assembler (atmel studio)
Добавлено: Сб авг 11, 2012 17:04:15
Dima89
неужели там такая вот простая инструкция криво выполняется или что там вообще, что ему нельзя верить?

Re: xmega и assembler (atmel studio)
Добавлено: Сб авг 11, 2012 17:59:12
BOB51
возможно любое "ненормальное" поведение при симуляции периферийных устройств (не ставятся или не сбрасываются флаги...) - таймеры, регистры управления и контроля - там в хелпе выявленные указаны для простого (Known Issues in AVR Simulator 1 и по каждому МК) а для Simulator 2 пока "лови сам" иной раз мозги плавятся...

Re: xmega и assembler (atmel studio)
Добавлено: Вс авг 12, 2012 08:33:11
Dima89
Парни!!! Помогите!! Это бред какой-то
Код: Выделить всё
; Стек:
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
Ну нифига не загорается светодиод ни на одной из ножек

Всё верно подключил, и программатор шьет и видит нормально контроллер

Re: xmega и assembler (atmel studio)
Добавлено: Вс авг 12, 2012 08:59:19
zero648
Dima89 писал(а):Парни!!! Помогите!! Это бред какой-то
Какой камень? Как подключен светодиод?
Почему здесь так,
а здесь так?
Re: xmega и assembler (atmel studio)
Добавлено: Вс авг 12, 2012 09:05:17
Dima89
xmega256A3
анод к ножке, катод к минусу. Пробовал и наоборот... И использовал другие порты. Всё тоже самое(
На счет стека в принципе и так и так работает, но не в нем то дело, студия ошибок не показывает по этому поводу
Re: xmega и assembler (atmel studio)
Добавлено: Вс авг 12, 2012 09:06:29
BOB51
ну во-первых адресация любого порта как ячейки ОЗУ требует смещения 0x20
т.е к примеру (для ATtiny2313 -ибо доставать карту под Ваш камень влом, но принцип один и тот же):
ldi r16,low(ramend)
out spl,r16
равноценно
ldi r16,low(ramend)
sts (spl+0x20),r16
так как к ячейкам оперативной памяти относится и регистровый файл
если же Ваш PORTA_DIRset был указан как адрес без смещения то попадание кода в регистр на 20H младше...
Внимательно учите матчасть

Re: xmega и assembler (atmel studio)
Добавлено: Вс авг 12, 2012 09:09:18
Dima89
Ту что в обучалке?
Благодарю... Нюансов я вообще не знаю видимо)
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
BOB51
и обучалку и оригинальный datasheet
а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится)

ассемблер - не Сиии - тут собственными мозгами шевелить надо!

Re: xmega и assembler (atmel studio)
Добавлено: Вс авг 12, 2012 10:02:16
Dima89
BOB51 писал(а):и обучалку и оригинальный datasheet
а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится)

ассемблер - не Сиии - тут собственными мозгами шевелить надо!

дык чужие не использую )
А в inc от студии на мою хмегу всегда смотрел) Вот только с обучалками не очень, потому что всё почти на Си. Вот и пытаюсь шевелить мозгом)
Re: xmega и assembler (atmel studio)
Добавлено: Пн авг 13, 2012 08:40:20
BOB51
под "чужими" надо понимать и оригинальные 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
Dima89
скорость камня 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