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

 
 
> Прерывания USART AVR32.
DeadCodder
сообщение Feb 16 2012, 10:35
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 4-10-10
Пользователь №: 59 904



Здравствуйте!

Подскажите в чем может быть дело -

процессор AT32UC3A3256, прерывание по приему для одного (UART0) UART работает, для остальных нет.
Чтение без прерываний работает, что подтверждает правильность настройки самого модуля.

Инициализация прерываний аналогична во всех случаях.

Что может быть причиной?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
slavik.ksu
сообщение Feb 19 2012, 08:04
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 15-12-11
Пользователь №: 68 876



Доброго времени суток!
Новую тему не стал заводить, название вроде подходит? кристал маленько другой sm.gif

Объясните пожалуйста такую вещь:

1 случай:
ldi temp , 0b00000011 ; активирую таймер с делением частоты на 64
out TCCR1B,temp
ldi temp,(1<<TOIE1 ) ;активирую прерывание по переполнению!
out TIMSK,temp

обработчик прерывания:
perepolnenie:
in temp, PortB
eor temp,r18
out PortB,temp
reti
В этом случае светодиод моргает с частотой 1 раз в скунду

2 случай:
ldi temp , 0b00001101 ; запуск таймера T\C1 с делением !!! на 1024 !!!
out TCCR1B,temp ; режим(CTC) сброс при совпадении

ldi temp, 0xFF ;здесь записываю максимальное число
out OCR1AL,temp ;по сути получается "прерывание по переполнению"
ldi temp, 0xFF ;
out OCR1AH,temp ;

ldi temp,( 1<<OCIE1A) ; разрешение прерывание по сравнению
out TIMSK,temp

НО!!! в этом случае, не смотря на то что деление частоты большее,
т.е. таймер должен работать медленней,а моргание происходит чаще!
Как такое может быть?


Работаю на отладочной плате STK500, на Atmega8515
полный код прилагаю.
Прикрепленные файлы
Прикрепленный файл  __________.rar ( 2.1 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
Xenia
сообщение Feb 19 2012, 09:05
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(slavik.ksu @ Feb 19 2012, 12:04) *
НО!!! в этом случае, не смотря на то что деление частоты большее,
т.е. таймер должен работать медленней,а моргание происходит чаще!
Как такое может быть?


Может. Потому что при прерывании по переполнению счет ведется от заданного значения вверх до переполнения, а в режиме CTC - от нуля до заданного значения. И эти отрезки по длине разные!

Представим себе ситуацию, что задано значение 10, а переполнение происходит после 255. При этом я считаю в 10 раз медленнее, чем вы. Но я считаю в режиме CNC от нуля до 10, а вы в режиме переполнения с 10 до 255. Кто из нас быстрее достигнет прерывания? - Я! Потому что мне надо перечислить только 10 чисел, а вам 245. И тут я со своей в десятеро медленной скоростью стравлюсь быстрее.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:41
Рейтинг@Mail.ru


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