ICD2 - breakpoints

andrej jancura hw_aj@zoznam.sk
Úterý Prosinec 2 17:36:26 CET 2008


Vdaka za prakticke info. Aspon trochu mi to pomohlo vyjasnit si moj 
matny technicko-filozoficky obraz o tom, ako to vyriesil Microchip.

A.


On Tue, 2 Dec 2008 12:11:35 +0100
  "Michal HW" <michalgregor@centrum.cz> wrote:
> 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ší informace o konferenci Hw-list