Заголовок сообщения: Re: xmega и assembler (atmel studio)
Добавлено: Пн май 21, 2012 23:08:56
Опытный кот
Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19 Сообщений: 838 Откуда: с Земли
Рейтинг сообщения:0
известная проблема, которая встречается также и на новых мегах (mega88 итп) дело в том, что инструкции IN/OUT применимы только к портам ввода-вывода с номерами до 63. А в новых семействах адресное пространство портов-регистров значительно расширено, поэтому для портов с адресом болле 63 нужно использовать инструкции STS/LDS для примера: sts PORTE_DIRSET,r22 Atmel советует заменить все подобные обращения макросами, для облегчения переносимости программ... http://www.atmel.com/Images/doc2550.pdfhttp://www.atmel.com/Images/AVR001.zip
_________________ Все будет только лучше, в крайнем случае - хуже.
Заголовок сообщения: Re: xmega и assembler (atmel studio)
Добавлено: Вт май 22, 2012 12:17:36
Открыл глаза
Зарегистрирован: Вс май 29, 2011 19:59:19 Сообщений: 58
Рейтинг сообщения:0
Кто-нибудь может помочь выставить частоту на внутренний 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 МГц... А так.. На глаз не знаю как проверить)
Кто-нибудь может помочь выставить частоту на внутренний RC генератор 32МГц? В AVR симулятор частота остается 1,000 МГц... А так.. На глаз не знаю как проверить)
С xmega пока еще не работал, но вообще в AVR Studio частота для симуляции устанавливается принудительно руками. А проверить... если есть реальная железка, то запрограммировать поочередный вывод в порт нулей и единиц и осциллографом посмотреть частоту. На глаз действительно не проверить
Можно и на глаз, вывести на порт импульсы ~1Гц, и зацепить светодиод. Точно частоту не определишь, но 1МГц от 4Мгц - запросто. Не говоря уже о более высоких частотах.
Заголовок сообщения: Re: xmega и assembler (atmel studio)
Добавлено: Вт май 22, 2012 12:52:02
Открыл глаза
Зарегистрирован: Вс май 29, 2011 19:59:19 Сообщений: 58
Рейтинг сообщения:0
НУ НАКОНЕЦ ТО!!!
В общем вот код, очень коряво всё) Но главное работает!!! кто разбирается суть поймет:
Код:
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 ;----------
Всем привет! Мой предыдущий код настройки генератора совсем неверен, совсем что то я напутал на самом деле.
Вот адекватный код:
Код:
; Частота 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 стоит, то значит бит очищен? Тогда почему с портами ввода вывода наоборот*? Запутался
возможно любое "ненормальное" поведение при симуляции периферийных устройств (не ставятся или не сбрасываются флаги...) - таймеры, регистры управления и контроля - там в хелпе выявленные указаны для простого (Known Issues in AVR Simulator 1 и по каждому МК) а для Simulator 2 пока "лови сам" иной раз мозги плавятся...
ну во-первых адресация любого порта как ячейки ОЗУ требует смещения 0x20 т.е к примеру (для ATtiny2313 -ибо доставать карту под Ваш камень влом, но принцип один и тот же):
ldi r16,low(ramend) out spl,r16
равноценно
ldi r16,low(ramend) sts (spl+0x20),r16
так как к ячейкам оперативной памяти относится и регистровый файл
если же Ваш PORTA_DIRset был указан как адрес без смещения то попадание кода в регистр на 20H младше... Внимательно учите матчасть
и обучалку и оригинальный datasheet а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится) ассемблер - не Сиии - тут собственными мозгами шевелить надо!
и обучалку и оригинальный datasheet а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится) ассемблер - не Сиии - тут собственными мозгами шевелить надо!
дык чужие не использую )
А в inc от студии на мою хмегу всегда смотрел) Вот только с обучалками не очень, потому что всё почти на Си. Вот и пытаюсь шевелить мозгом)
под "чужими" надо понимать и оригинальные APPNOTE от атмел (включая и прилагаемые к studio *.inc файлы) http://www.atmel.com/products/microcont ... =documents вкладки подразделов : Applications notes datasheets other documents да и с xmegи начинать на асме... варварство как-то...
;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
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения