Sida 1 av 1

AVR-Fråga, några AVRare här?

Postat: 27 januari 2009, 11:22:47
av TomasL
Håller på att portera lite programvara från AVR till PIC.

Min undran är vad de två C-funtionerna CLI() och SEI() exakt gör.

Är det bara stänga av och sätta på INT eller fixar dem till mer?

Re: AVR-Fråga, några AVRare här?

Postat: 27 januari 2009, 11:29:06
av speakman

Re: AVR-Fråga, några AVRare här?

Postat: 27 januari 2009, 11:30:16
av johano
2sek med google:

"#define cli()
Disables all interrupts by clearing the global interrupt mask. This function actually compiles into a single line of assembly, so there is no function call overhead."

http://www.gnu.org/savannah-checkouts/n ... a5973c3162

/johan

Re: AVR-Fråga, några AVRare här?

Postat: 27 januari 2009, 11:35:40
av sodjan
CLI() : BCF INTCON, GIE
SEI() : BSF INTCON, GIE

Ungefär, i alla fall i assembler...

Re: AVR-Fråga, några AVRare här?

Postat: 27 januari 2009, 11:52:12
av TomasL
Jo det var ungefär det jag gissade mig till.

I wiz-c blir det då bGIE=0, resp bGIE1.
Och i MC18 gissar jag på INTCONBits.GIE=1 typ.

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 12:52:03
av manw
johano skrev:Disables all interrupts by clearing the global interrupt mask.
Ops! Vad menas med detta egentligen? Trodde bara att den stänger av alla interrupt, eller nollställer den alla inställningar man gjort för olika interrupt? Står ju iofsg "global".

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 13:46:51
av Norpan
Den styr "I", alltså flaggan som behöver vara satt för att processorn ska titta på interrupter överhuvudtaget.
CLI = clear I, SEI = set I

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 13:49:43
av manw
Norpan skrev:...
OK, det var ungefär så jag tolkat det, att det bara är interrupt av, eller interrupt på, och påverkar inte inställningar för specifika interrupt man konfigurerat.

:arrow: Citerade föregående inlägg eftersom jag kände det som det var "flera bollar i luften" i tråden, men alla kanske inte upplever det så :?:

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 14:35:20
av Norpan
Jo, de andra interruptnivåerna påverkas högst betydligt, men ändras inte.
Om du hamnar i en interruptrutin pga en interrupt, så blir I resettad och behöver sättas igen när rutinen är färdig, (vet inte hur högnivåspråk sköter detta) men i asm iallafall.
Detta för att den inte ska få en annan interrupt innan den tycker den är färdig med den den håller på med.
Däremot lagras andra interrupter som kommer när I är av och behandlas när I kommer tillbaka i ordning efter prioritetslistan.

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 16:46:13
av sodjan
> Om du hamnar i en interruptrutin pga en interrupt, så blir I resettad och behöver sättas igen när rutinen är färdig,...

Men det gör mna väl inte med SEI !?

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 17:18:25
av Norpan
RETI är bättre där.
Eller det går kanske men då måste man ju ändå ha en RET efter som man kanske inte hinner till om nån i-flagga har blivit satt sen blir det jobbigt.

Re: AVR-Fråga, några AVRare här?

Postat: 29 januari 2009, 17:43:57
av sodjan
Man ska *inte* fippla med I flaggan inne i interruptet om man inte
är helt på det klara med vad man håller på med. Det finns en
anledning till att RETI är en "return" och en "SEI" kombinerat.