Работа с регистрами
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Работа с регистрами
Есть ли в ардуино файл описаний для атмеги 328? И как производить запись/чтение необходимых регистров. Мне напримет требуется считать значение регистра для того что бы понять изменяет ли его какая подключенная библиотека или нет
Re: Работа с регистрами
Работа с регистрами ни чем не отличается от работы с переменными.
Если речь идёт о периферии, то необходимо внимательно читать даташит. В частности, в каком поярдке осуществлять запись регистров, как и когда их читать и прочее.
Если речь идёт о периферии, то необходимо внимательно читать даташит. В частности, в каком поярдке осуществлять запись регистров, как и когда их читать и прочее.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: Работа с регистрами
У меня ничего не вышло. Я не понимаю как. На примере можете объяснить?
Если я сделаю так
i=0x21; //он переменной назначает константу а не значение регистра 0x21
Если я сделаю так
i=0x21; //он переменной назначает константу а не значение регистра 0x21
Re: Работа с регистрами
Пиши название (Name) регистров. Ардуино знает название (Name) всех регистров.
ADMUX=0x21; //присвоить регистру ADMUX значение 0x21 (ADMUX - регистр настройки АЦП).
...
i=ADCL; //присвоить переменной значение регистра ADCL (ADCL - младший регистр данных АЦП).
...
и т.д.

...
i=ADCL; //присвоить переменной значение регистра ADCL (ADCL - младший регистр данных АЦП).
...
и т.д.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: Работа с регистрами
Да спасибо. До меня раньше доперло. Я регистр не правильно писал 
Ещё бы узнать с какой частотой тактируется cpu
Ещё бы узнать с какой частотой тактируется cpu
Re: Работа с регистрами
Какой в Ардуино кварц с такой частотой тактируется CPU.
По умолчанию 16 МГц.
По умолчанию 16 МГц.
Re: Работа с регистрами
С прямым обращением к регистрам поаккуратнее надо - учитываем системные функции референса IDE (дабы их не зацепить).
Частота для различных платформ на основе AVR по умолчанию 16 МГЦ, если в описании платформы не присутствует чего иного - те же варианты от MCUdude или diy....

Частота для различных платформ на основе AVR по умолчанию 16 МГЦ, если в описании платформы не присутствует чего иного - те же варианты от MCUdude или diy....
Re: Работа с регистрами
если хочется оперировать адресом регистра, то надо сперва взять его адрес:i=0x21; //он переменной назначает константу а не значение регистра 0x21
Всё. Теперь при записи в переменную OCR значения, оно запишется в регистр OCR1A. Почему так? Потому, что в переменной OCR лежит адрес регистра OCR1A. Сама переменная OCR уже называется указатель.volatile uint16_t* OCR;
OCR = &OCR1A;
Re: Работа с регистрами
Нафига нам указатель, если можно просто записать в регистр OCR1A любое значение.
OCR1A=0x21; //присвоить регистру OCR1A значение 0x21 (OCR1A - регистр настройки таймера).
Одна строчка кода.))

OCR1A=0x21; //присвоить регистру OCR1A значение 0x21 (OCR1A - регистр настройки таймера).
Одна строчка кода.))
Re: Работа с регистрами
А если мы на момент записи не знаем, в какой именно регистр класть значение? А вот куда именно класть, мы возьмём инфу из полученной структуры.
Re: Работа с регистрами
Говорю же - не троньте регистры без предварительного ознакомления с их системным назначением 9без предварительного анализа возможных "наложений")...
Т0 - используется в millis() и delay() а также в ШИМ на выводах D5 и D6.
Т1 - ШИМ на выводах D9 и D10.
Т2 - ШИМ на выводах D3 и D11 и функция tone().
Из "свободно-безопасного" использование прерывания по OCR0A - но там смотрим в каких кристаллах он имеется (168 и 328 есть а в 8 нету).
Относительно прямого управления регистрами портов - смотрим разве что в случае, если в пределах порта часть выводов используется другими функциями.

Т0 - используется в millis() и delay() а также в ШИМ на выводах D5 и D6.
Т1 - ШИМ на выводах D9 и D10.
Т2 - ШИМ на выводах D3 и D11 и функция tone().
Из "свободно-безопасного" использование прерывания по OCR0A - но там смотрим в каких кристаллах он имеется (168 и 328 есть а в 8 нету).
Относительно прямого управления регистрами портов - смотрим разве что в случае, если в пределах порта часть выводов используется другими функциями.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Работа с регистрами
осторожно ссылка ломает видовс ХР (BOB51 так говорит - у других все нормально), и там на сайте есть переделанные библиотеки таймеров:Таймер 0 используется для работы системных функций времени delay(), delayMicroseconds() и millis() и micros(), поэтому перенастройка таймера 0 под свои нужды приведёт к некорректной работе функций времени, но при желании можно их скорректировать следующим образом:
#define delay(x * div)
#define delayMicroseconds(x * div)
#define millis() (millis() / div)
#define micros() (micros() / div)
// где div - делитель (или множитель), подбирать из степеней двойки
Таймер 1 используется в некоторых библиотеках, например Servo. При перенастройке таймера 1 под свои нужды Servo перестанет работать.
Таймер 2 используется для генерации звука стандартной функцией tone(), причём перенастройка таймера не “сломает” tone – вызов функции перенастроит таймер под нужды функции.
Различные библиотеки могут использовать таймеры для своих целей, если вам нужны прерывания по таймерам совместно с работой других библиотек – смотрите, не используют ли они эти же таймеры!
Прерывание по таймеру настраивается при помощи обращения к регистрам таймера. Мы сделали удобную, очень лёгкую и быструю библиотеку, которая позволит контролировать прерывания по таймерам при помощи простых команд.
https://alexgyver.ru/gyvertimers/
Re: Работа с регистрами
Я для себя сделал такие таймеры
Не хватает ещё оконных таймеров (в окне, вне окна). Будем делать.void SoftTimer_Disarm(SoftTimer_t* const SoftTimer);
void SoftTimer_ReSet(SoftTimer_t* const SoftTimer);
void SoftTimer_Set(SoftTimer_t* const SoftTimer, const SoftClock_t SoftTime);
Bool_t SoftTimer_FreeRun(SoftTimer_t* const SoftTimer, const SoftClock_t SoftTime);
Bool_t SoftTimer_Expired(SoftTimer_t* const SoftTimer);
Bool_t SoftTimer_Status(SoftTimer_t* const SoftTimer);
рецепт очень простой - слезть с этой дурины. Когда слезете, даже дышаться будет по-другому. Свободнее.Говорю же - не троньте регистры без предварительного ознакомления с их системным назначением
Re: Работа с регистрами
Зачем слезать преждевременно?
Если ресурс позволяет- его надо использовать до последнего возможного содержимого и лишь затем переходить к следующему уровню.
Ведь работа на уровне регистров подразумевает и "чистый ассемблер" в том числе - а это абсолютно полная проработка документации конкретного кристалла.
Нужно ли подобное даже "продвинутому пользователю"?
Вы же не используете в повседневной работе с компом ни функции биос, ни функции API - только сами программы в основном.
То же и для МК справедливо.
Относительно адуринки - весьма неплохой результат "независимой тикалки" можно получить из тандема
tone() + int0/int1

Если ресурс позволяет- его надо использовать до последнего возможного содержимого и лишь затем переходить к следующему уровню.
Ведь работа на уровне регистров подразумевает и "чистый ассемблер" в том числе - а это абсолютно полная проработка документации конкретного кристалла.
Нужно ли подобное даже "продвинутому пользователю"?
Вы же не используете в повседневной работе с компом ни функции биос, ни функции API - только сами программы в основном.
То же и для МК справедливо.
Относительно адуринки - весьма неплохой результат "независимой тикалки" можно получить из тандема
tone() + int0/int1
Re: Работа с регистрами
Ресурс с самого начала не позволял ))
Скачайте AVRStudio и пишите на ассемблере. http://easyelectronics.ru/avr-studio-likbez.html
Там есть все регистры )) И можно смотреть в реальном времени как они работают.
Скачайте AVRStudio и пишите на ассемблере. http://easyelectronics.ru/avr-studio-likbez.html
Там есть все регистры )) И можно смотреть в реальном времени как они работают.
Последний раз редактировалось roman.com Сб июн 26, 2021 14:45:46, всего редактировалось 2 раза.
Re: Работа с регистрами
Я на дурине задержался пару недель. Дольше нервов не хватило)
Re: Работа с регистрами
Весьма неплохой результат "тикалки" можно получить на ассемблере... Если точно подогнать такты процессора (CPU).

Re: Работа с регистрами
Так за "чистый ассемблер" отдельный разговор - там даташит перелопатить придется.
А у 328й это весьма моного для расчепятки и вычитывания...
Вряд-ли тот, кому терпения на адуринку не хватило в чистый ассемблер влезть осмелится.

А у 328й это весьма моного для расчепятки и вычитывания...
Вряд-ли тот, кому терпения на адуринку не хватило в чистый ассемблер влезть осмелится.
Re: Работа с регистрами
[uquote="roman.com",url="/forum/viewtopic.php?p=4052648#p4052648"]Скачайте AVRStudio и пишите на ассемблере. http://easyelectronics.ru/avr-studio-likbez.html
Там есть все регистры )) И можно смотреть в реальном времени как они работают.
[/uquote]
Такие красивые картинки очень вредны. Когда я не увидел оных в IAR, я чуть-чуть смутился. Но только чуть)
К асму у меня сформировалось отторжение ещё в универе. Поэтому си и только си)
Там есть все регистры )) И можно смотреть в реальном времени как они работают.
Такие красивые картинки очень вредны. Когда я не увидел оных в IAR, я чуть-чуть смутился. Но только чуть)
а есть не чистый ассемблер?чистый ассемблер
К асму у меня сформировалось отторжение ещё в универе. Поэтому си и только си)
Re: Работа с регистрами
В случае с ЯВУ ассемблерные вставки подчиняются правилам компилятора - всегда в соответствующей "обвертке" должны быть и с соблюдением определенных правил.
Взять хотя бы управление стеком...
В "чистом виде" - все ошибки на совести автора исходника, зато власть над ресурсами МК абсолютная.
Ессно желательно и тем и другим владеть хотя-бы "продвинутым пользователем".

Взять хотя бы управление стеком...
В "чистом виде" - все ошибки на совести автора исходника, зато власть над ресурсами МК абсолютная.
Ессно желательно и тем и другим владеть хотя-бы "продвинутым пользователем".