Отговори на тема  [ 8 мнения ] 
USART Transmit Complete Interrupt в ATmega 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение USART Transmit Complete Interrupt в ATmega
Как мога програмно да извикам функцията на това прекъсване?
Никога не ми се е налагало да трябва да извикам от програмата функция на прекъсване,ама се оказва че понякога тябва.


Пет Юни 03, 2005 3:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Всъщност зададох въпроса некоректно. А asm команда не е проблем да се извика,въпроса е как е коректно да се извика от C кода. ИАР не разрешава викането на функциите на прекъсванята и се предполага че за това си има някакви съображения.


Пет Юни 03, 2005 3:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Това си е за академия.

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

SIGNAL(interrupt_num)
{
   ProcessInterrupt();
}


Пет Юни 03, 2005 4:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
отговора е принципен и не касае конкретно някое прекъсване.

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

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

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

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


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

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


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

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

void interrupt INTA () {
proc();
}


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


Пет Юни 03, 2005 4:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Е нема нужда да се повтаряме бе, колега. :)


Пет Юни 03, 2005 4:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
ми докато го напша и го видя как изглежда си ме изпреварил...
все пак си форумния бог :oops:


Пет Юни 03, 2005 4:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Хехехе. :) Едно леко съветче - давай по-смислени имена на ф-иите, това важи два пъти по-силно когато става въпрос за педагогика. ;)


Пет Юни 03, 2005 4:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Реконструктор ако погледнеш това което си написал е точно това кото казвам че IAR не допуска.

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

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


Пет Юни 03, 2005 5:10 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни