AVR-Fråga, några AVRare här?
AVR-Fråga, några AVRare här?
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?
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?
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
"#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?
CLI() : BCF INTCON, GIE
SEI() : BSF INTCON, GIE
Ungefär, i alla fall i assembler...
SEI() : BSF INTCON, GIE
Ungefär, i alla fall i assembler...
Re: AVR-Fråga, några AVRare här?
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.
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?
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".johano skrev:Disables all interrupts by clearing the global interrupt mask.
Re: AVR-Fråga, några AVRare här?
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
CLI = clear I, SEI = set I
Re: AVR-Fråga, några AVRare här?
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.Norpan skrev:...


Senast redigerad av manw 29 januari 2009, 14:51:32, redigerad totalt 2 gånger.
Re: AVR-Fråga, några AVRare här?
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.
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?
> 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 !?
Men det gör mna väl inte med SEI !?
Re: AVR-Fråga, några AVRare här?
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.
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?
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.
ä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.