Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/20: Рейтинг темы: голосов - 20, средняя оценка - 4.55
Okiofimykmo
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 343
1

Обработчик прерывания Си & ASM

13.08.2010, 01:49. Просмотров 3559. Ответов 2
Метки нет (Все метки)

Не подскажет ли кто нибудь как можно в WinAVR написать обработчик прерывания через asm, просто компилятор пихает в обычном прерывании нахрен мне не нужные регистры в стек и угрохивает аж целых 8 тактов на входе и 7 на выходе что оч хреново в моей программе. Программа написана на Си и переписывать из за этого на ASM очень сильно влом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2010, 01:49
Ответы с готовыми решениями:

Atmega2560. Обработчик прерывания UART
Добрый день. Помогите исправить код. Проблема в том, что при поступлении байта...

Прерывания в MSP430 (ASM, IAR)
Помогите,пожалуйста,разобраться При нажатии PUSH2(P1.3) - зажигается красный...

Вызов прерывания в обработке прерывания
В программе,нажатие кнопки вызывает прерывание,в котором оно...

Прерывания
Здравствуйте, такая проблема: Контроллер ATMega32, при нажатии на кнопку,...

Прерывания на мк 8051
Привет. Стоит задача разработать программу с использованием таймеров и...

2
xroymom
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
13.08.2010, 02:09 2
Не знаю на сколько это правильно по своей сути, но...

вот такой код
Код
unsykned char val;
unsykned char val2;

__attribute__((naked)) ISR(ADC_vect)
{
asm volatile(
"push r16" "\n"
"in r16,0x3F" "\n" //save sreg
"push r16" "\n"
"push r17" "\n"
"lds r17,0x78" "\n" //read adcl
"lds r16,0x79" "\n" //read adch
"sts val,r16" "\n" //store values to global variables
"sts val2,r17" "\n"
"pop r17" "\n"
"pop r16" "\n"
"out 0x3F,r16" "\n" //restore sreg
"pop r16" "\n"
"reti"
);
}
Код
0000044a <__vector_21>:
44a:   0f 93          push   r16
44c:   0f b7          in   r16, 0x3f   ; 63
44e:   0f 93          push   r16
450:   1f 93          push   r17
452:   10 91 78 00    lds   r17, 0x0078
456:   00 91 79 00    lds   r16, 0x0079
45a:   00 93 02 01    sts   0x0102, r16
45e:   10 93 03 01    sts   0x0103, r17
462:   1f 91          pop   r17
464:   0f 91          pop   r16
466:   0f bf          out   0x3f, r16   ; 63
468:   0f 91          pop   r16
46a:   18 95          reti
одна фигня, оно не знает имен регистров, надо объявлять или писать числами
0
Okiofimykmo
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 343
13.08.2010, 02:21 3
Большое спасибо xroymom, именно то что нужно! Всё чётко работает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2010, 02:21

Внешние прерывания
Всем привет! пытаюсь осуществить светодиодную подсветку лестницы. Вверху и...

Прерывания xmega
У меня есть atxmego32a4, хочу понять как там пользоваться таймерами. Для Xmeg...

AT90S8535. Прерывания
Нужно сделать прерывание по сравнению события А таймер счётчик, внешнее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru