ICD2 - breakpoints

Michal HW michalgregor@centrum.cz
Úterý Prosinec 2 12:11:35 CET 2008


Takze jsem udelal hokus pokus. (Vypis programu je na konci mailu.) Advanced Breakpoint jsem nastavil na Promenna_B, zapis hodnoty 0x55.
Program se zastavil, ale probehly dalsi instrukce:
   
    movwf    Promenna_B
    retfi FAST
    nop ; tady je uklazatel v MPLABU

Takze ICDII advanced breakpoin funguje i v preruseni. Normalni breakpoint funguje jak ma.
Zpozdeni je ruzne:
Program breakpoint: zastavuje na dalsi instrukci
Advanced break point - zapis hodnoty: zastavuje na treti instrukci
Advanced break point - cteni hodnoty: zastavuje na dalsi instrukci (nejake zmatene - po resetu na druhe instrukci)

Advanced break point - pouze zapis: zastavuje na dalsi instrukci
Preruseni: Advanced break point - pouze zapis: zastavuje na treti instrukci
Advanced break point - pouze cteni: zastavuje na dalsi instrukci

Skoda ze neni nekde detailni popis ICDII. Kolik je toho reseno pomoci HW/ SW.

Michal Gregor
PS: Program taky zkousi chybu Fast Stack register, ale u 8723 se nastesti neprojevuje

    
;***********************************************************************
;
; Test breakpointu v ICD II
; 18F8723
;
;**********************************************************************
;**********************************************************************
;**********************************************************************

 list      p=18F8723
 #include <p18F8723.inc>
 

 CONFIG OSC = HS
 CONFIG FCMEN = OFF
 CONFIG IESO = OFF
 CONFIG PWRT = OFF
 CONFIG BOREN = OFF
 CONFIG WDT = OFF
 CONFIG MODE = MC
 CONFIG WAIT = OFF
 
 CONFIG MCLRE = ON
 CONFIG STVREN = OFF
 CONFIG LVP = OFF
 CONFIG XINST = OFF
 CONFIG DEBUG = ON
 CONFIG CP0 = OFF
 CONFIG CP1 = OFF
 CONFIG CP2 = OFF
 CONFIG CP3 = OFF
 CONFIG CP4 = OFF
 CONFIG CP5 = OFF
 CONFIG CP6 = OFF
 CONFIG CP7 = OFF

 CONFIG CPB = OFF
 CONFIG CPD = OFF

 CONFIG WRT0 = OFF
 CONFIG WRT1 = OFF
 CONFIG WRT2 = OFF
 CONFIG WRT3 = OFF
 CONFIG WRT4 = OFF
 CONFIG WRT5 = OFF
 CONFIG WRT6 = OFF
 CONFIG WRT7 = OFF
;**********************************************************************


Promenna_A equ 0
Promenna_B equ 1
Promenna_C equ 2
Promenna_D equ 3

W_Temp  equ 4
STATUS_Temp equ 5
;*********************************************************
 org 0

 nop
 bcf INTCON,GIE
      goto    Start              
;*********************************************************
;Přerušení jen CCP1

 org 0x16

; movwf W_Temp
; movff STATUS,STATUS_Temp
 
;---------------------------------------------------------------------
;Ukončení přerušení

Navrat bcf PIR1,CCP1IF
 clrf T1CON
 
 movlw 0x55
 movwf Promenna_B
 
; movff W_Temp,WREG
; movff STATUS_Temp,STATUS

 retfie  FAST
;**********************************************************************
;**********************************************************************
Start clrf INTCON
 
 
 clrf STATUS

 setf TRISA
 setf TRISB
 setf TRISC
 setf TRISD
 setf TRISE
 setf TRISF
 setf TRISG
 setf TRISH

 movlw b'00000100' ; CCP1
 movwf PIE1
 movlw b'01000000' ;pouze periferie
 movwf INTCON
 clrf PIR1 ;Vynulovat
 
 movlw 0x4
 movwf CCPR1L
 movlw 0x00
 movwf CCPR1H
 movlw b'00001011'
 movwf CCP1CON


 bsf INTCON,GIE
;**********************************************************************
;Hlavní smyčka

Cykluj
 clrf Promenna_B
 clrf TMR1L
 clrf TMR1H
 movlw b'00000001'
 movwf T1CON

 movlw 6
 movwf Promenna_A
 movlw 5
 movff Promenna_A,WREG
 nop
 nop
 nop

 movlw 7
 movwf Promenna_A
 movlw 8
 movff Promenna_A,WREG

 movlw 9
 movwf Promenna_A
 movlw 10
 movff Promenna_A,WREG

 
 goto Cykluj
 end




  ----- Original Message ----- 
  From: andrej jancura 
  To: HW-news 
  Sent: Monday, December 01, 2008 5:43 PM
  Subject: Re: ICD2 - breakpoints


  To je prave podla mna ten omyl. Myslim si, ze to je riesene tak, ze to 
  pozera len opkod zapis do pamati a ma to registre kde su ulozene 
  adresy. Aspon takto by som to riesil v HW emulatore.  ICD je na 
  podobny druh dbg nevhodne, pretoze ma len jeden register na stop, a to 
  tiez len pre konkretne adresy. Uz si to presne nepamatam, ale myslim 
  si, to advanced znamena len to, ze tie stop-registre su styri.

  Pokial potrebujes naozaj nieco slusne robit, musis si pozriet nejaky 
  HW emulator. Asix mal pre PIC16, ale len 8-pinove. ICD je len low cost 
  pre bastlicov, ale na profi pracu sa nehodi. Mimochodom to co 
  poskytuje robila uz stara HC11 a vsetky novsie HC08. Tam sa da pouzit 
  dbg monitor bud ten v eprom, alebo si ho natiahnut do RAM a mal presne 
  take iste obmedzenia ako ICD. Realne prerusenia sa tym nedali 
  debugovat tiez.

  A.


  On Mon, 1 Dec 2008 13:32:28 +0100
    "Michal HW" <michalgregor@centrum.cz> wrote:
  > Je to psane v C - vypis pameti. Prvni radek zapisuje hodnotu(0x272 - 
  >0x00) do WREG,
  > ICDII neni nikde popsan. Rada 16 ma specielni registr pro adresu 
  >breakpointu. Ale jak je to delane na 18xxxx jsem nezjistil. Podle mne 
  >tam ale pro breakpointy v RAMce musi byt nejaka HW podpora.
  > 
  > Michal Gregor
  > 
  > 
  >  ----- Original Message ----- 
  >  From: andrej jancura 
  >  To: HW-news 
  >  Sent: Monday, December 01, 2008 12:56 PM
  >  Subject: Re: ICD2 - breakpoints
  > 
  > 
  >  No len jedna poznamka, WREG ma na prvom riadku hodnotu >254 ? Skus 
  >si 
  >  tam napisat MOVLW...
  > 
  >  Na dbg interrupt rutiny by som ICD nepouzil, nakolko sa jedna o sw 
  >  emulovanie a to hold v isr moc dobre nemusi nechodi.
  > 
  >  A.
  > 
  > 
  > 
  >  On Mon, 1 Dec 2008 12:35:20 +0100
  >    "Michal HW" <michalgregor@centrum.cz> wrote:
  >  > Zkousim najit chybu v programu:
  >  > 
  >  > Line  Address  Opcode      Label                  Disassembly
  >  > 
  >  >  8546  042C2    C272                   MOVFF 0x272, WREG
  >  >  8547  042C4    FFE8                   NOP
  >  >  8548  042C6    0F07                   ADDLW 0x7
  >  >  8549  042C8    CFE8                   MOVFF WREG, Pocet_B
  >  >  8550  042CA    FD3D                   NOP
  >  >  8551  042CC    C0B7                   MOVFF Ukazatel, Vstup_P
  >  >  8552  042CE    F0BB                   NOP
  >  >  8553  042D0    C0B8                   MOVFF Vstup_K, 0xbc
  >  >  8554  042D2    F0BC                   NOP
  >  >  8555  042D4    C0B9                   MOVFF Vstup, 0xbd
  >  >  8556  042D6    F0BD                   NOP
  >  >  8557  042D8    EC08                   CALL Sloz_Konec, 0
  >  >  8558  042DA    F029                   NOP
  >  >  8559  042DC    6E00                   MOVWF 0, ACCESS
  >  >  8560  042DE    CD3D                   MOVFF Pocet_B, 0x1
  >  > 
  >  > Promenna Pocet_B ma chybnou hodnotu 0x05. Nastavil jsem si 
  >Advanced 
  >  > breakpoint na zapis hodnoty 0x05 do Pocet_B.
  >  > 
  >  > ICDII se zastavi na radku 8553, ktery vubec s Pocet_B nepracuje.
  >  > 
  >  > 0x272 obsahuje 0. Pocet_B ma 0x05. (Vysledek mel byt 7)
  >  > 
  >  > Vypada to ze z preruseni se vrati spatny obsah WREG. Kdyby se v 
  >  >preruseni 
  >  > zapisovala hodnota 0x05 do Pocet_B, tak to ICDII zachyti, Nebo 
  >ne?
  >  > Procesor je 18F8723. ERRATA jsou prazdne, takze chybu s Fast 
  >Stack 
  >  >Registrem 
  >  > by nemel mit.
  >  > 
  >  > Michal Gregor 
  >  > 
  >  _______________________________________________
  >  HW-list mailing list  -  sponsored by www.HW.cz
  >  Hw-list@list.hw.cz
  >  http://list.hw.cz/mailman/listinfo/hw-list

  _______________________________________________
  HW-list mailing list  -  sponsored by www.HW.cz
  Hw-list@list.hw.cz
  http://list.hw.cz/mailman/listinfo/hw-list

------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20081202/efc67883/attachment-0002.htm 


Další informace o konferenci Hw-list