Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: General Purpose I/O Register
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ILYAUL
Всем , привет!

Кто нибудь , когда нибудь использовал эти регистры. В DS инфы по ним 0 (нуль). Отличненькое местечко , что бы хранить SREG ( вместо SAVESREG ) + SPH+SPL для много задачных программ. Но как то стрёмно , не понимая на ... они нужны. Для тех , кто срочно начнёт искать их в своих процах , учтите , что они есть не везде. Что тоже настораживает.
МП41
Я использую один из них для хранения результатов различных тестов. В ИАРе объявляю так:
Код
#pragma location=0x33// (GPIOR0);
__no_init char errors;

Компилятор при работе с битами этого регистра использует команды sbi, cbi.
ILYAUL
QUOTE (МП41 @ Oct 28 2011, 16:27) *
Я использую один из них для хранения результатов различных тестов. В ИАРе объявляю так:
CODE
#pragma location=0x33// (GPIOR0);
__no_init char errors;

Компилятор при работе с битами этого регистра использует команды sbi, cbi.


Ну раз они в области ввода\вывода , то по идее , на них распростроняются все команды относящиеся к этому пространству памяти. OUT IN SBIS SBIC и выше перечисленные.
МП41
Цитата(ILYAUL @ Oct 28 2011, 15:33) *
Ну раз они в области ввода\вывода , то по идее , на них распростроняются все команды относящиеся к этому пространству памяти. OUT IN SBIS SBIC и выше перечисленные.

Речь о том, что компилятор "сообразил" и сделал как надо, хотя мог и через st, ld сделать обращение ради изменения одного бита.
ILYAUL
Замечательно работает , и не надо помнить последовательность загрузки регистров , главное не перепутать какой куда. Хорошо избавляют от push ,когда надо не много затолкнуть.
QUOTE (МП41 @ Oct 28 2011, 16:40) *
Речь о том, что компилятор "сообразил" и сделал как надо, хотя мог и через st, ld сделать обращение ради изменения одного бита.


Хвала разработчикам компилятора! Аминь..
zombi
Цитата(ILYAUL @ Oct 29 2011, 15:37) *
Замечательно работает , и не надо помнить последовательность загрузки регистров , главное не перепутать какой куда. Хорошо избавляют от push ,когда надо не много затолкнуть.


Вот и я добрался до GPIORn.
И вот какой возник вопрос:
Сколько тактов мк экономится при замене одного PUSH и одного POP на OUT и IN соответсвенно при условии что стек находится во внутренней RAM хмеги?
ILYAUL
Цитата(zombi @ Jan 25 2012, 22:23) *
Вот и я добрался до GPIORn.
И вот какой возник вопрос:
Сколько тактов мк экономится при замене одного PUSH и одного POP на OUT и IN соответсвенно при условии что стек находится во внутренней RAM хмеги?

PUSH , POP 2такта

IN , OUT - 1 такт
_Артём_
Цитата(ILYAUL @ Jan 25 2012, 21:09) *
PUSH , POP 2такта

IN , OUT - 1 такт


ST -Y,Rx
LD Rx,Y+
Тоже по два такта?
zombi
Цитата(ILYAUL @ Jan 25 2012, 22:09) *
PUSH , POP 2такта

IN , OUT - 1 такт

Получается экономим всего 1 такт sad.gif

Цитата(_Артём_ @ Jan 25 2012, 22:37) *
ST -Y,Rx
LD Rx,Y+
Тоже по два такта?

Тоже хотел этот вопрос поднять.
Всё сложнее и сложнее становиться в мк такты считать! в мегах по проще было.

И еще: добавили GPIOR с возможностью побитового доступа но в тоже время добавили такт к SBIC,SBIS biggrin.gif
ILYAUL
Цитата(zombi @ Jan 25 2012, 23:48) *
Получается экономим всего 1 такт sad.gif


Посчитайте сколько у Вас General Purpose регистров на столько тактов и экономите. Не забудьте умножить на два
zombi
Цитата(ILYAUL @ Jan 25 2012, 23:20) *
Посчитайте сколько у Вас General Purpose регистров на столько тактов и экономите. Не забудьте умножить на два

Максимум 16 тактов можем выиграть. Почему на два множить!?
ILYAUL
Цитата(zombi @ Jan 26 2012, 00:24) *
Максимум 16 тактов можем выиграть. Почему на два множить!?

На каждом push - один такт и на каждом pop - ещё один такт
zombi
Цитата(ILYAUL @ Jan 26 2012, 22:14) *
На каждом push - один такт и на каждом pop - ещё один такт

PUSH=1t / POP=2t
sKWO
Цитата(ILYAUL @ Oct 28 2011, 14:39) *
Кто нибудь , когда нибудь использовал эти регистры. В DS инфы по ним 0 (нуль).

В зависимости от компилятора.
ИАР ДЖПИОР регистры не исспользует на своё предусмотрение, кодэвижн вроди бы размещает в них битовые переменные.
rx3apf
Цитата(zombi @ Jan 27 2012, 02:01) *
PUSH=1t / POP=2t

И откуда такая чудесная растактовка для PUSH ?
_Артём_
Цитата(rx3apf @ Jan 27 2012, 21:40) *
И откуда такая чудесная растактовка для PUSH ?

Из даташита вестимо...
А POP возражений не вызывает?
rx3apf
Цитата(_Артём_ @ Jan 28 2012, 00:51) *
Из даташита вестимо...

А, обсуждалась xmega - тогда да, один такт.
Цитата
А POP возражений не вызывает?

Не вызывает, она одинаково работает.
Diusha
Цитата(ILYAUL @ Oct 28 2011, 14:39) *
В DS инфы по ним 0 (нуль).

Инфы предостаточно: название говорит само за себя, а адреса в DS указаны.

Цитата(ILYAUL @ Oct 28 2011, 14:39) *
Кто нибудь , когда нибудь использовал эти регистры.

Которые в зоне доступа sbi, cbi, очень удобно использовать под битовые флаги
sKWO
Цитата(Diusha @ Jan 28 2012, 21:02) *
Которые в зоне доступа sbi, cbi, очень удобно использовать под битовые флаги

К регистрам с адресами $00..$1F, если позволите более точно, в зависимости какие ресурсы МК вы исспользуете.
К примеру как альтернативу регистру общего назначения я при отключённом TWI исспользовал его регистр задания скорости (TWBR) в меге 168. Правда дата регистры к этому непригодны.
В некоторых случаях, для хранения даных использую UBRR0L или UBRR0H, правда последний 4-х битный и адресами недостигаемыми командами sbi, cbi.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.