|
Узнал новое о GPIO портах AVR |
|
|
|
Oct 16 2012, 05:49
|

неотягощённый злом
     
Группа: Свой
Сообщений: 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); Может кому-нибудь пригодится..
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 24)
|
Oct 23 2012, 05:18
|

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

|
Цитата(ILYAUL @ Oct 22 2012, 21:50)  а sbi PORTX,N чем плох? Ничем не плох, но он только устанавливает, а мы говорим об инвертировании... Цитата(Сергей Борщ @ Oct 22 2012, 23:05)  Не возьмут. Аргументируют это тем, что эти заголовочники они генерят скриптом из каких-то атмеловских файлов студии (xml?). Т.е. надо либо патч к их скрипту делать, либо патч в атмел посылать. Поговорить можно с Dean Camera он теперь ведь на Атмел работает. Он очень адекватный малый и думаю, что если ему донести сию мысль, то возможно он её продвинет.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 25 2012, 02:57
|
Участник
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 25 2012, 05: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);
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 25 2012, 05:58
|

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

|
Цитата cli - опечатка, cbi Конечно. Цитата вместо ... Ну для ногодрыганья , то да. Ну уговорили  , хотя честно говоря не прикину где сие можно применить. В бипере уже точно нет - там всё делает таймер. 1-wire не предлогать- там USART . Выключение включение чего-то -но там всегда условия.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Oct 26 2012, 09:47
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 26 2012, 15:50
|

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

|
Цитата(SasaVitebsk @ Oct 26 2012, 13:47)  ..... General Purpose I/O Registers Ну это уже обсуждалось и по-моему не раз Кстати пасибо , что напомнили , вот они тут же и пригодились.  Забываешь, что они где-то , но всё таки есть
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Oct 26 2012, 18:47
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

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