реклама на сайте
подробности

 
 
> Узнал новое о GPIO портах AVR
demiurg_spb
сообщение Oct 16 2012, 05:49
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата из даташита на atmega1281
Цитата
13.2.2 Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
Note that the SBI instruction can be used to toggle one single bit in a port.

Забавно, но в достаточно свежих мегах эта фича есть, а в старых мегах типа mega16,64,128 не было, поэтому не обращал внимания.
А так получается за один такт можно атомарно инвертировать несколько бит в порту например так PINA = (1<<7)|(1<<0);
Может кому-нибудь пригодится..


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 24)
Сергей Борщ
сообщение Oct 22 2012, 19:05
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (ReAl @ Oct 22 2012, 18:41) *
Надо как-то по мере необходимости для себя править файлы, а потом предложить патч.
Не возьмут. Аргументируют это тем, что эти заголовочники они генерят скриптом из каких-то атмеловских файлов студии (xml?). Т.е. надо либо патч к их скрипту делать, либо патч в атмел посылать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 23 2012, 05:18
Сообщение #17


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ILYAUL @ Oct 22 2012, 21:50) *
а sbi PORTX,N чем плох?
Ничем не плох, но он только устанавливает, а мы говорим об инвертировании...
Цитата(Сергей Борщ @ Oct 22 2012, 23:05) *
Не возьмут. Аргументируют это тем, что эти заголовочники они генерят скриптом из каких-то атмеловских файлов студии (xml?). Т.е. надо либо патч к их скрипту делать, либо патч в атмел посылать.
Поговорить можно с Dean Camera он теперь ведь на Атмел работает. Он очень адекватный малый и думаю, что если ему донести сию мысль, то возможно он её продвинет.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 24 2012, 12:00
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(demiurg_spb @ Oct 23 2012, 09:18) *
Ничем не плох, но он только устанавливает, а мы говорим об инвертировании...

cli PORT,N
А вертирование через PIN - только себя в итоге запутать


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ae_
сообщение Oct 25 2012, 02:57
Сообщение #19


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(ILYAUL @ Oct 24 2012, 21:00) *
cli PORT,N ;А вертирование через PIN - только себя в итоге запутать

cli - опечатка, cbi
А вот практический пример использования
Код
sbi PINB, BEEPER

вместо
Код
;генерация звука
    sbic    PORTB, BEEPER
    rjmp    beep_off
;beep_on
    sbi    PORTB, BEEPER
    rjmp    beep_quit
beep_off:
    cbi    PORTB, BEEPER
beep_quit:

;или используя 2 временных регистра

    in    temp1, PORTB
    ldi    temp2, 1<<BEEPER
    eor    temp1, temp2
    out    PORTB, temp1
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 25 2012, 05:20
Сообщение #20


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ILYAUL @ Oct 24 2012, 16:00) *
cli PORT,N
Почитайте наконец уже доку на avrasm...

Цитата(ILYAUL @ Oct 24 2012, 16:00) *
через PIN - только себя в итоге запутать
Чтобы не путать никого
Код
#define CPLPORTx PINx
CPLPORTx |= (1<<n);


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 25 2012, 05:58
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
cli - опечатка, cbi
Конечно.
Цитата
вместо ...

Ну для ногодрыганья , то да. Ну уговорили sm.gif , хотя честно говоря не прикину где сие можно применить. В бипере уже точно нет - там всё делает таймер. 1-wire не предлогать- там USART . Выключение включение чего-то -но там всегда условия.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 26 2012, 09:47
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(ILYAUL @ Oct 16 2012, 12:40) *
Помоему они нашли свой баг и решили сделать из него себе большой ПЛЮС

Вы неправы. Появилось это в atmega88, вместе со второй фичей. Её здесь не обсуждают.
Обе без пыли и шума.
Вторая это:
Цитата
The ATmega48/88/168 contains three General Purpose I/O Registers. These registers
can be used for storing any information, and they are particularly useful for storing global
variables and Status Flags. General Purpose I/O Registers within the address range
0x00 - 0x1F are directly bit-accessible using the SBI, CBI, SBIS, and SBIC instructions.

То есть опять же для атомарного доступа.
И то и другое достаточно удобно.
Правда почти не работаю уже с atmel
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Oct 26 2012, 15:50
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(SasaVitebsk @ Oct 26 2012, 13:47) *
..... General Purpose I/O Registers

Ну это уже обсуждалось и по-моему не раз
Кстати пасибо , что напомнили , вот они тут же и пригодились. a14.gif Забываешь, что они где-то , но всё таки есть


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 26 2012, 17:53
Сообщение #24


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Мало того, что атомарный доступ, еще и флаги при этом не трогаются. Иногда очень приятно.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 26 2012, 18:47
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



А где используется? ... biggrin.gif
Я делал bootloader для atmega8. Цель шифрование, нормальный протокол, малый объём.
Написал - ну никак не влазит. Переписал шифрование, CRC на ASMе + определённым образом распределил регистры - вошло и 2 байта лишних осталось. )) Только на версии IAR 5.11. На других - не влезает ... ))
Перенёс на 88. Ну а там ведь доступ к некоторым портам более длинный. Короче пару байт не хватило. )) Ну а светодиодом дёргаю при загрузке ... )) Применил новые фичи - влезло ... ))))) Приятно ... ))
Ну ещё где-то применял ... Хотя не очень актуально.
General Purpose I/O Registers более актуальная вещь, но учитывая что реализовано не везде, то тоже проблематично ...
Должен быть единообразный подход к кристалам ... Так сказать общая политика предприятия ...
Из всех существующих я наблюдаю это только в STM. NXP мне нравятся больше, но их разброд просто убивает ... Недаром количество постов по применению stm растёт регулярно ...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 21:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016