From: <vac...@se...> - 2005-11-10 08:26:07
|
Hi Raphael, > ------------ Puvodni zprava ------------ > Od: Raphael Neider <RN...@we...> >> > > Wait one or two days, download and install SDCC and try again, sorry... > Thanks for solution, I will try to get new version on friday. > > BTW: In SDCC version 2.4.0 following part of code did not work. PIC always > sent 0x80000000. Is there something that I can't use ? > > > > void spi_senddata( void) > > { > > char i; > > unsigned long int tmpdat = 0xffff00ff; > > > > for (i = 0; i<32; i++) { > > if((tmpdat & 0x80000000) != 0) { > > PORTB |= SPI_TDI; > > } else { > > PORTB &= (~SPI_TDI); > > } > > // rising edge of SPI_CLK > > PORTB &= (~SPI_CLK); > > PORTB |= SPI_CLK; > > > > tmpdat <<= 1; > > } > > } > > I checked the .asm output from SDCC 2.5.4 #1151---looks good to me. If > you still have problems please report back with your values for SPI_TDI > and SPI_CLK. > I found the problem in version 2.4.0 the function was compiled incorrectly - memory for 32 bits was not initialized after the start of function. For the reference ASM output follows. I hope the bug was removed intentionally. Sorry for email longer than necessary. Regards, Vaclav _spi_senddata ;Function start ; 2 exit points ;#CSRC jtagenb.c 55 ; void spi_senddata( WORD32 dat) BANKSEL r0x49 MOVWF r0x49 MOVF s0x7F,W ;;104 MOVWF r0x4A MOVF s0x7E,W ;;102 MOVWF r0x4B MOVF s0x7D,W ;;100 MOVWF r0x4C ;#CSRC jtagenb.c 60 ; for (i = 0; i<32; i++) { CLRF r0x4D _00116_DS_ MOVF r0x4D,W MOVWF r0x4E CLRF r0x4F BTFSC r0x4D,7 DECF r0x4F,F BTFSC r0x4F,7 GOTO _00125_DS_ MOVLW 0x00 SUBWF r0x4F,W MOVLW 0x20 BTFSC STATUS,2 SUBWF r0x4E,W BTFSC STATUS,0 GOTO _00120_DS_ ;;105 CLRF r0x50 ;;107 CLRF r0x51 ;;109 CLRF r0x52 _00125_DS_ ;#CSRC jtagenb.c 61 ; if((tmpdat & 0x80000000) != 0) { MOVLW 0x80 ANDWF r0x49,W MOVWF r0x53 ;;106 MOVF r0x50,W ;; peep 7 - Removed redundant move MOVF r0x53,W BTFSC STATUS,2 GOTO _00114_DS_ ;#CSRC jtagenb.c 62 ; PORTB |= SPI_TDI; BCF STATUS,5 BCF STATUS,6 BSF _PORTB,2 GOTO _00115_DS_ _00114_DS_ ;#CSRC jtagenb.c 64 ; PORTB &= (~SPI_TDI); BCF STATUS,5 BCF STATUS,6 MOVF _PORTB,W BANKSEL r0x54 MOVWF r0x54 MOVLW 0xfb ANDWF r0x54,W BCF STATUS,5 BCF STATUS,6 MOVWF _PORTB _00115_DS_ ;#CSRC jtagenb.c 67 ; PORTB &= (~SPI_CLK); MOVF _PORTB,W BANKSEL r0x55 MOVWF r0x55 MOVLW 0xfd ANDWF r0x55,W BCF STATUS,5 BCF STATUS,6 MOVWF _PORTB ;#CSRC jtagenb.c 68 ; PORTB |= SPI_CLK; BSF _PORTB,1 ;;99 MOVWF r0x4C ;;101 MOVWF r0x4B ;;103 MOVWF r0x4A ;#CSRC jtagenb.c 70 ; tmpdat <<= 1; BANKSEL r0x49 MOVWF r0x49 ;#CSRC jtagenb.c 60 ; for (i = 0; i<32; i++) { INCF r0x4D,F GOTO _00116_DS_ _00120_DS_ RETURN ; exit point of _spi_senddata |