Forum: Mikrocontroller und Digitale Elektronik M16c, Test des I Bits


von Berd Brams (Gast)


Lesenswert?

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!

von Sascha Pypke (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.