Forum: Mikrocontroller und Digitale Elektronik ZILOG ENCORE WATCH DOG -MODUL ASM mit C.


von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

; ZILOG ENCORE WATCH DOG -MODUL ASM mit C.
; Ich möchte den Watchdog bei einer ez8 ZF8.6422 parametrieren,
; kennt sich einer damit aus ???

; ob das auf dem neuen
;  C Compiler Version 3.60 (08031703)
; so gemacht werden darf ???
; Zilog IDE version 4.11 (08050501)

; Die WD-Param.-Sequenz muss in einem jusch abgehen, da sonst
; der 24 Bit Parameter nicht übernommen wird.
; -------------------------------------------------------------
; Mit Immediate Adressierung , also festen Werten
; geht das im C Modul

;void Wdog_Set_Timer_Regs( void  )
;{
;  asm("LDX %0FF0, #%55");  // first  Unlock
;  asm("LDX %0FF0, #%AA");  // second Unlock

;  asm("LDX %0FF1, #%00");
;  asm("LDX %0FF2, #%7F");
;  asm("LDX %0FF3, #%FF");

;}

; Ich finde leider keine Beispiele für den WDog.
; Die IDE und MCU ist weiterenwickelt worden.


; .include "ez8.inc"
; Hier nur das was ich hier brauche an  SFR Register



WDTCTL  .equ  %FF0               ; Reset =   %80 Watchdog Timer Control
WDTU    .equ  %FF1               ; Reset =   %FF Watchdog Timer Reload 
Upper
WDTH    .equ  %FF2               ; Reset =   %FF Watchdog Timer Reload 
High
WDTL    .equ  %FF3               ; Reset =   %FF Watchdog Timer Reload 
Low

XSPH    .equ  %FFE               ; Reset =   %XX Stack Pointer High
XSPL    .equ  %FFF               ; Reset =   %XX  Stack Pointer Low


; ****************************************
.DEF _set_watch_dog_timer_regs ;  Make a <prototype>
 segment CODE
; *************************

_set_watch_dog_timer_regs: ; cF1,cF2,cF3
 ; DI ; No IRQs
 PUSH R15 ; push save working reg
 PUSH R14 ; push save working reg
    LDX  R14,XSPH ; save Stack-PointerH to R14
    LDX  R15,XSPL ; save Stack-PointerL to R15
    SUBX XSPL,#%03
    SBCX XSPH,#%00
     ; first load all R0,R1,R2 Registers from C-Stack
     LDX  R0,4(RR14) ; Register Relativ from R14 to R0 Grab F1 passed 
8-Bit parameter
     LDX  R1,5(RR14) ;Grab F2 passed parameter
     LDX  R2,6(RR14) ;Grab F3 passed parameter
      ; unlock
     LDX  WDTCTL, #%55   ; first  Unlock
     LDX  WDTCTL, #%AA   ; second Unlock
     ; Coseqently store registers
     LDX WDTU,R0  ; load in WDT-Upper Reg.
     LDX WDTH,R1  ; load in WDT-Higer Reg.
     LDX WDTL,R2  ; load in WDT-Lower Reg.
    ;
   LDX  XSPL,R15 ; Restore Stack-PointerL from R15
   LDX  XSPH,R14 ; Restore Stack-PointerH from R14
 POP  R14
 POP  R15
 ; EI
 RET
; ***********************
; Hier Funktion im C-Modul anmelden.
; void set_watch_dog_timer_regs( char, char, char );

; Beispiel für die Funktion set_watch_dog_timer_regs

; set_watch_dog_timer_regs( 0x00, 0x7F, 0xFF );

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Peter !
 Z8 Encore! XP F082A WDOG is jetz ok.
0x20 = Bit 7 Watchdog Timer oscillator is enabled.
Ich hatte den Ozilator nicht mit an.
Der Anhang ASM geht auf dem F082A, mal sehen was der
Z86422 so noch für Zicken bits hat.

Nur der WDOG-Code mit ASM geht ??????
Das is ja so verrammelt das ein Zeit-Fenster da genau am Takt hängt,
um den WDog zu schreiben.
0x20 = Bit 7 Watchdog Timer oscillator is enabled

 #define OSC_UNLOCK_SEQ1 0xE7
 #define OSC_UNLOCK_SEQ2 0x18
void Init_Oszi (void)
{
 OSCCTL = OSC_UNLOCK_SEQ1; // Unlock sequence for OSCTL write
 OSCCTL = OSC_UNLOCK_SEQ2; //
//  0x80 = Bit 5 INTEN Internal Precision Oscillator Enable
//  0x20 = Bit 7 Watchdog Timer oscillator is enabled

 OSCCTL  = (0x80 | 0x20 );
// make a short delay ::::: then call
}
----------------------------------------------
Das geht "nicht" in C Hochsprache.
void param_WDOG_reg (void)
{
// unlock
asm("LDX %FF0,#%55");// first  Unlock
asm("LDX %FF0,#%AA");// second Unlock

 // Coseqently store registers
asm("LDX %FF3,#%00");
asm("LDX %FF2,#%FF");
asm("LDX %FF1,#%10");
};

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Peter !
Das LED Constant-Strom als Open Drain.
Z8 Encore! XP F082A
Das macht der Port von sich aus.

http://www.youtube.com/watch?v=syPEBnK7ugk

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.