Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

USART Transmit Complete Interrupt в ATmega
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=716
Страница 1 от 1

Автор:  Nikola Kirov [ Пет Юни 03, 2005 3:13 pm ]
Заглавие:  USART Transmit Complete Interrupt в ATmega

Как мога програмно да извикам функцията на това прекъсване?
Никога не ми се е налагало да трябва да извикам от програмата функция на прекъсване,ама се оказва че понякога тябва.

Автор:  Nikola Kirov [ Пет Юни 03, 2005 3:33 pm ]
Заглавие: 

Всъщност зададох въпроса некоректно. А asm команда не е проблем да се извика,въпроса е как е коректно да се извика от C кода. ИАР не разрешава викането на функциите на прекъсванята и се предполага че за това си има някакви съображения.

Автор:  Реконструктор [ Пет Юни 03, 2005 4:15 pm ]
Заглавие: 

Това си е за академия.

Код:
void ProcessInterrupt()
{
   ..........
}

SIGNAL(interrupt_num)
{
   ProcessInterrupt();
}

Автор:  ДедоБоре [ Пет Юни 03, 2005 4:29 pm ]
Заглавие: 

отговора е принципен и не касае конкретно някое прекъсване.

нормални подпрограми (процедури) завършват с RET и се викат с някоя разновидност на CALL. всички (процедури), които обслужват прекъсване завършват с RETI и се викат от самия процесор по вектор.

разликата между RET и RETI е обуславена от хардуерната специфика на процесора и какво се намира в стека (на процесора)

та на С ако напишеш
Код:
void proc() {
...
}

това на асемблер ше изглежда така:
Код:
proc:
....
RET


съответно
Код:
void interrupt intA () {
....
}

и
Код:
intA:
....
RETI


до тук с теорията

сега по твоя случай. за да можеш да викаш дадена процерура и от прекъсване и от програмата, тя трябва да е нормална програма процедура, която да се вика от самото прекъсване:
Код:
void PROC () {
...
}

void interrupt INTA () {
proc();
}


това е в най-най-общи линии и сигурно малко зависи от компилатора ти.
ако искаш питай още

Автор:  Реконструктор [ Пет Юни 03, 2005 4:40 pm ]
Заглавие: 

Е нема нужда да се повтаряме бе, колега. :)

Автор:  ДедоБоре [ Пет Юни 03, 2005 4:48 pm ]
Заглавие: 

ми докато го напша и го видя как изглежда си ме изпреварил...
все пак си форумния бог :oops:

Автор:  Реконструктор [ Пет Юни 03, 2005 4:52 pm ]
Заглавие: 

Хехехе. :) Едно леко съветче - давай по-смислени имена на ф-иите, това важи два пъти по-силно когато става въпрос за педагогика. ;)

Автор:  Nikola Kirov [ Пет Юни 03, 2005 5:10 pm ]
Заглавие: 

Реконструктор ако погледнеш това което си написал е точно това кото казвам че IAR не допуска.

Дедо Боре мерси че ме насочи с разликата RET i RETI.

Значи може да се извика функция на прекъсване коректно но първо забраняваш прекъсванията след което asm("CALL Адреса на съответния вектор") а в самата процедура на прекъсването с RETI прекъсванията се разрешават пак.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/