Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 28.11.2007, 16:30  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

Господа, позвольте вернуться к вопросу по теме.
В реальной задаче, которой на данный момент нет, если она сформулирована правильно и правильно составлен алгоритм работы, глобальный запрет прерываний при выходе из прерывания сбрасывать не нужно.
Для запрета прерываний внутри обработчика можно сбросить все запросы и запретить прерывания от источников, сбросив индивидуальные флаги разрешения прерываний.
Ну, а если уж автору очень надо, то можно использовать следующий прием. Пишем где-нибудь в основном коде строки cli, ret (или на C - функцию, просто сбрасывающюю флаг i). Перед выходом из прерывания в стек заносим адрес вызова этой функции. Т.о. при выходе из обработчика будет сначала исполнена команда cli, а затем командой ret выполнится возврат в основной код.
Удачи.
ЗЫ пардон за частое употребление "прерываний"
Реклама:
nokazus вне форума  
Непрочитано 28.11.2007, 19:19  
buka_2004
Временная регистрация
 
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
buka_2004 на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
Вот я в примере LED из CVAVR вписал строку

OCR1A = 314;

нормально скушал и записал по байтам.
Нда странно все это (
Почему же тогда у меня не так?

В хедере добавляем строки
Код:
#define ICR1 (*(unsigned int *) 0x86) // 16 bit access
#define OCR1A (*(unsigned int *) 0x88) // 16 bit acces
#define OCR1B (*(unsigned int *) 0x8A) // 16 bit access
#define OCR1C (*(unsigned int *) 0x8C) // 16 bit access
В main() после настройки конфигурации пишем:
Код:
void main(void)
{
...

while (1)
      {
 		ICR1 = 620;
		OCR1A = 621;
		OCR1B = 622;
		OCR1C = 623;
      };

}
Теперь открываем листинг и что мы там видим?
Коды добавленные копилятором я частично вырезал.
Код:
198 while (1)
199       {
200  		ICR1 = 620;
	LDI  R30,LOW(620)
	LDI  R31,HIGH(620)
	STS  134,R30
	STS  134+1,R31
201 		OCR1A = 621;
	LDI  R30,LOW(621)
	LDI  R31,HIGH(621)
	STS  136,R30
	STS  136+1,R31
202 		OCR1B = 622;
	LDI  R30,LOW(622)
	LDI  R31,HIGH(622)
	STS  138,R30
	STS  138+1,R31
203 		OCR1C = 623;
	LDI  R30,LOW(623)
	LDI  R31,HIGH(623)
	STS  140,R30
	STS  140+1,R31
204       };
Не корректно записываются значения в регистры.
Ну и что с этим делать? Надо вначале старший потом младший байт. А никак не наоборот.
buka_2004 вне форума  
Непрочитано 29.11.2007, 08:22  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

buka_2004
Хоть я и не силен в C, но все же. Вы объявили регистры, как переменные в статической памяти, поэтому компилятор и вставил строки STS (заметьте не OUT, как у nml). И обращается он с регистрами в этом случае как с обычной переменной int. Я думаю nml вообще не декларировал (дополнительно) регистры, а использовал хидер аврки.
Удачи.
nokazus вне форума  
Непрочитано 30.11.2007, 02:15  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию

Сообщение от nokazus
buka_2004
Хоть я и не силен в C, но все же. Вы объявили регистры, как переменные в статической памяти, поэтому компилятор и вставил строки STS (заметьте не OUT, как у nml). И обращается он с регистрами в этом случае как с обычной переменной int. Я думаю nml вообще не декларировал (дополнительно) регистры, а использовал хидер аврки.
Удачи.
Долго врубался в пост по этой теме и зачинателю настоятельно советую принять всерьез цитату и предыдущее сообщение того же автора "nokazus". Он мудр и рационален. Кроме того, FAST (подчеркнуто) PWM на стандартных AtMega-AtTiny исходно восьмиразрядный (может отстал?) и фортели с 9, 10 и прочими битами непредсказуемы.
marera вне форума  
Непрочитано 30.11.2007, 17:05  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от marera
... FAST (подчеркнуто) PWM на стандартных AtMega-AtTiny исходно восьмиразрядный (может отстал?) и фортели с 9, 10 и прочими битами непредсказуемы.
Отстал, отстал - разрешение FastPWM'а и больше бывает, и это не фортели - это документированные режимы:
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/30112007/434799.gif" frameborder="0" name="fr7275841" scrolling="yes" width="470" height="279" align="bottom"›[img]nuke/users_images/30112007/434799.gif[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.

‹/IFRAME›
‹/center›
tempora вне форума  
Непрочитано 01.12.2007, 16:01  
buka_2004
Временная регистрация
 
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
buka_2004 на пути к лучшему
По умолчанию

Сообщение от nokazus
buka_2004
Хоть я и не силен в C, но все же. Вы объявили регистры, как переменные в статической памяти, поэтому компилятор и вставил строки STS (заметьте не OUT, как у nml). И обращается он с регистрами в этом случае как с обычной переменной int. Я думаю nml вообще не декларировал (дополнительно) регистры, а использовал хидер аврки.
Удачи.
В том то и проблема что в хидере эти переменные объявлены только как char а мне надо бы обращатся как int потому что так получается быстрее выполнение кода.
buka_2004 вне форума  
Непрочитано 01.12.2007, 17:35  
buka_2004
Временная регистрация
 
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
buka_2004 на пути к лучшему
По умолчанию

Еще вопрос по поводу сброса флагов прерываний от таймера. Как правильно сбросить все флаги прерываний?
В ДШ пишут что сброс флага осуществляется записью единицы в разряд. С другой стороны если флаг не стоит то что будет если записать единицу?
buka_2004 вне форума  
Непрочитано 01.12.2007, 17:44  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

ноль будет.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 01.12.2007, 18:26  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от buka_2004
Еще вопрос по поводу сброса флагов прерываний от таймера. Как правильно сбросить все флаги прерываний?
В ДШ пишут что сброс флага осуществляется записью единицы в разряд. С другой стороны если флаг не стоит то что будет если записать единицу?
Обычно в таких случаях запускаю аврстудио, и на нем все смотрю... Удобно
dimonbest вне форума  
Непрочитано 02.12.2007, 13:20  
buka_2004
Временная регистрация
 
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
buka_2004 на пути к лучшему
По умолчанию

Сообщение от dimonbest
Обычно в таких случаях запускаю аврстудио, и на нем все смотрю... Удобно
Это конечно удобно, но студия_4 очень плохо симулирует работу. Большинство переферии вообще не симулирует.
buka_2004 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CVAVR while и таймер kr11507 Микроконтроллеры, АЦП, память и т.д 10 13.12.2008 21:29
Програмирование портов Infenon С167 vadimvarn Микроконтроллеры, АЦП, память и т.д 1 01.11.2008 02:31
Програмирование по SPI EKuzmich Микроконтроллеры, АЦП, память и т.д 2 09.07.2008 21:35
програмирование АТmega32??? TimaON Микроконтроллеры, АЦП, память и т.д 0 06.05.2008 14:41
Програмирование attiny2313 Gorgic Микроконтроллеры, АЦП, память и т.д 1 15.12.2007 00:00


Часовой пояс GMT +4, время: 11:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot