| Форум РадиоКот https://radiokot.ru/forum/ |
|
| xmega и assembler (atmel studio) https://radiokot.ru/forum/viewtopic.php?f=57&t=72460 |
Страница 1 из 1 |
| Автор: | neurofunk [ Пн май 21, 2012 21:19:00 ] |
| Заголовок сообщения: | xmega и assembler (atmel studio) |
Здравствуйте, помогите с настройкой портов в 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 не удалось пока что( |
|
| Автор: | coredumped [ Пн май 21, 2012 23:08:56 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
известная проблема, которая встречается также и на новых мегах (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 |
|
| Автор: | neurofunk [ Вт май 22, 2012 02:14:35 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Благодарю за оперативный ответ! Вы мне очень сильно помогли! В этом топике, если удобно, можно будет задавать вопросы по xmega на ASM.. |
|
| Автор: | neurofunk [ Вт май 22, 2012 12:17:36 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Кто-нибудь может помочь выставить частоту на внутренний 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 МГц... А так.. На глаз не знаю как проверить) |
|
| Автор: | Alkul [ Вт май 22, 2012 12:23:22 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
neurofunk писал(а): Кто-нибудь может помочь выставить частоту на внутренний RC генератор 32МГц? В AVR симулятор частота остается 1,000 МГц... А так.. На глаз не знаю как проверить) С xmega пока еще не работал, но вообще в AVR Studio частота для симуляции устанавливается принудительно руками. А проверить... если есть реальная железка, то запрограммировать поочередный вывод в порт нулей и единиц и осциллографом посмотреть частоту. На глаз действительно не проверить |
|
| Автор: | ploop [ Вт май 22, 2012 12:45:49 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Можно и на глаз, вывести на порт импульсы ~1Гц, и зацепить светодиод. Точно частоту не определишь, но 1МГц от 4Мгц - запросто. Не говоря уже о более высоких частотах. |
|
| Автор: | neurofunk [ Вт май 22, 2012 12:52:02 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
НУ НАКОНЕЦ ТО!!! В общем вот код, очень коряво всё) Но главное работает!!! кто разбирается суть поймет: Код: 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 ;---------- |
|
| Автор: | Dima89 [ Пт авг 10, 2012 18:53:04 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Всем привет! Мой предыдущий код настройки генератора совсем неверен, совсем что то я напутал на самом деле. Вот адекватный код: Код: ; Частота 32Мгц от внутреннего генератора ; генератор 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 И теперь вопрос команда sbrc - Пропустить если бит n в Rn очищен, а у нас как бы получается наоборот, что он выставлен... Но работает всё именно так. Объясните, что я не так пойму? Если точка в AtmelStudio стоит, то значит бит очищен? Тогда почему с портами ввода вывода наоборот*? Запутался |
|
| Автор: | BOB51 [ Сб авг 11, 2012 07:55:30 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
не верь симулятору!!! предварительно просмотри help в разделе ограничений в работе симулятора по данному МК
|
|
| Автор: | Dima89 [ Сб авг 11, 2012 17:04:15 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
неужели там такая вот простая инструкция криво выполняется или что там вообще, что ему нельзя верить? |
|
| Автор: | BOB51 [ Сб авг 11, 2012 17:59:12 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
возможно любое "ненормальное" поведение при симуляции периферийных устройств (не ставятся или не сбрасываются флаги...) - таймеры, регистры управления и контроля - там в хелпе выявленные указаны для простого (Known Issues in AVR Simulator 1 и по каждому МК) а для Simulator 2 пока "лови сам" иной раз мозги плавятся... |
|
| Автор: | Dima89 [ Вс авг 12, 2012 08:33:11 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Парни!!! Помогите!! Это бред какой-то Код: ; Стек: 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 Ну нифига не загорается светодиод ни на одной из ножек Всё верно подключил, и программатор шьет и видит нормально контроллер |
|
| Автор: | zero648 [ Вс авг 12, 2012 08:59:19 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Dima89 писал(а): Парни!!! Помогите!! Это бред какой-то Какой камень? Как подключен светодиод? Почему здесь так, Код: sts CPU_SPL,R16 а здесь так?Код: OUT CPU_SPH,R16
|
|
| Автор: | Dima89 [ Вс авг 12, 2012 09:05:17 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
xmega256A3 анод к ножке, катод к минусу. Пробовал и наоборот... И использовал другие порты. Всё тоже самое( На счет стека в принципе и так и так работает, но не в нем то дело, студия ошибок не показывает по этому поводу |
|
| Автор: | BOB51 [ Вс авг 12, 2012 09:06:29 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
ну во-первых адресация любого порта как ячейки ОЗУ требует смещения 0x20 т.е к примеру (для ATtiny2313 -ибо доставать карту под Ваш камень влом, но принцип один и тот же): ldi r16,low(ramend) out spl,r16 равноценно ldi r16,low(ramend) sts (spl+0x20),r16 так как к ячейкам оперативной памяти относится и регистровый файл если же Ваш PORTA_DIRset был указан как адрес без смещения то попадание кода в регистр на 20H младше... Внимательно учите матчасть |
|
| Автор: | Dima89 [ Вс авг 12, 2012 09:09:18 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
Ту что в обучалке? Благодарю... Нюансов я вообще не знаю видимо) PS. Опять таки наступаю практически на те же грабли, подключил macros.inc c сайта Atmel. Написал STORE... Всё заработало!! Код: LDI r16,0b11111111
STORE PORTE_DIR,r16 STORE PORTE_OUT,r16 |
|
| Автор: | BOB51 [ Вс авг 12, 2012 09:49:35 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
и обучалку и оригинальный datasheet а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится) ![]() ассемблер - не Сиии - тут собственными мозгами шевелить надо! |
|
| Автор: | Dima89 [ Вс авг 12, 2012 10:02:16 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
BOB51 писал(а): и обучалку и оригинальный datasheet а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится) ![]() ассемблер - не Сиии - тут собственными мозгами шевелить надо! дык чужие не использую ) А в inc от студии на мою хмегу всегда смотрел) Вот только с обучалками не очень, потому что всё почти на Си. Вот и пытаюсь шевелить мозгом) |
|
| Автор: | BOB51 [ Пн авг 13, 2012 08:40:20 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
под "чужими" надо понимать и оригинальные APPNOTE от атмел (включая и прилагаемые к studio *.inc файлы) http://www.atmel.com/products/microcont ... =documents вкладки подразделов : Applications notes datasheets other documents да и с xmegи начинать на асме... варварство как-то... |
|
| Автор: | Dima89 [ Пн авг 13, 2012 08:49:40 ] |
| Заголовок сообщения: | Re: xmega и assembler (atmel studio) |
скорость камня 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 |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|



