Hallo, ich suche nach einer Möglichkeit den Wert des I (Global Interrupt enable) Bits meines M16c auszulesen. Verwende den Tasking M16c Compiler, er bietet diese Fkt. nicht, hab jedenfalls nix gefunden. Deshalb dachte ich an Inline Assembler, aber finde nun nicht den passenden asm command... "JCnd" bietet leider nicht die Möglichkeit nach dem Wert des I Bits zu springen. Gibt es wirklich keinen branch Befehl, der dies ermöglicht? Grund ist, daß bei mir 2 Fkt, die jeweils keinen Interrupt erlauben dürfen, sich gegenseitig aufrufen.Beide Fkt stoppen alle anderen Interrupts und machen diese zum Schluß global wieder an. Wenn nun die eine gekapselte Fkt am Ende I wieder anmacht ist dies auch für den aufrufenden Interrupt gültig :( Danke schonmal!
Hallo, ja kenne ich nur zu gut, aber warum schreibst du kein weitere Rahmensubprogramm wo dann halt die Funktion aufruft und vor und danach das erledigt. in Assembler dann halt speziell für das Controll-Register: PUSH.W R0 ; Register immer retten (Compiler ?!?) STC FLG,R0 ; lade Flag-Register in R0 (Store from Controlregister) POP.W R0 ; viele Compiler nehmen R0 auch als Return Value somit kannst du es in C verklauben RTS oder PUSH.W R0 STC FLG,R0 BTST I,R0 ; I=7 test I also ab ins Carry oder negativ ins Zero JC Ja_Interrupt .... .... POP.W R0 RTS Ich hoffe ich konnte dir helfen. PS. der M16C bietet einen recht intresanten Befehlssatz mit einer sehr starken Arithmetik. Gruß Sascha
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.