On Tue, 17 Feb 2015 11:55:39 +0100 Gál Zsolt <tralitove...@freemail.hu> wrote:
> Hello, > > The CCPR1 is defined in a header file as an 8 bit special function register > and not 16 bit special function register. So the compiler does its job > perfectly in this situation. > > //============================================================================== > > extern __at(0x0FBE) __sfr CCPR1; > extern __at(0x0FBE) __sfr CCPR1L; > extern __at(0x0FBF) __sfr CCPR1H; > > The question is, why isn't defined CCPR1 as __sfr16. > I don't know why. Probably the endianness not the same in the hardware as > the SDCC requires. I think, the developers will answer this question. > This is the problem: Not unequivocal the treatment order of the bytes. For example: Refer to the TIMER1 module in 16 bit operation. (PIC18F1320 data sheet - DS39605F-page 106 - "12.6 Timer1 16-Bit Read/Write Mode") (PIC18F2550 data sheet - DS39632E-page 133 - "12.2 Timer1 16-Bit Read/Write Mode") The reading and writing different. To my knowledge this difficult to optimize. Károly > So you should divide the value moving into two steps temporally while there > will be better solution. > > Zsolt > > 2015-02-16 22:20 GMT+01:00 Tomas Nordin <tom...@kth.se>: > > > I am writing code for the PIC 18f2550 target. Forgot to mension. > > > > On Mon, Feb 16, 2015 at 10:16:20PM +0100, Nordin Tomas wrote: > > > Hi > > > > > > I have a function that look like this: > > > > > > void set_ccp1_rc2(unsigned int match_cnt) > > > { > > > T1CONbits.TMR1ON = 0; // Stop timer. > > > TMR1 = 0; //Clear timer. > > > CCPR1 = match_cnt; > > > CCP1CON = 0b00001001; // From here pin will be set. Cleared on > > match. > > > T1CONbits.TMR1ON = 1; // Roll the timer. > > > } > > > > > > It translates after compile to this: > > > > > > S_timing__set_ccp1_rc2 code > > > _set_ccp1_rc2: > > > ; .line 87; SRC/timing.c void set_ccp1_rc2(unsigned int > > match_cnt) > > > MOVFF FSR2L, POSTDEC1 > > > MOVFF FSR1L, FSR2L > > > MOVFF r0x00, POSTDEC1 > > > MOVFF r0x01, POSTDEC1 > > > MOVLW 0x02 > > > MOVFF PLUSW2, r0x00 > > > MOVLW 0x03 > > > MOVFF PLUSW2, r0x01 > > > ; .line 89; SRC/timing.c T1CONbits.TMR1ON = 0; // Stop > > timer. > > > BCF _T1CONbits, 0 > > > ; .line 90; SRC/timing.c TMR1 = 0; //Clear timer. > > > CLRF _TMR1 > > > ; .line 91; SRC/timing.c CCPR1 = match_cnt; > > > MOVF r0x00, W > > > MOVWF _CCPR1 > > > ; .line 92; SRC/timing.c CCP1CON = 0b00001001; // From here > > pin will be set. Cleared on match. > > > MOVLW 0x09 > > > MOVWF _CCP1CON > > > ; .line 93; SRC/timing.c T1CONbits.TMR1ON = 1; // Roll the > > timer. > > > BSF _T1CONbits, 0 > > > MOVFF PREINC1, r0x01 > > > MOVFF PREINC1, r0x00 > > > MOVFF PREINC1, FSR2L > > > RETURN > > > > > > There is a problem with the running code on the device. It occurs to me > > > that only one byte is written to the _CCPR1 register (MOVWF _CCPR1). > > > Also I am confused to see direct writes to 16-bit equates in the > > > assembly code, is that possible? > > > > > > Should the above translation work as intended or is there something > > > funky? > > > > > > / > > > > > > Tomas > > > > > > ------------------------------------------------------------------------------ > > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > > with Interactivity, Sharing, Native Excel Exports, App Integration & more > > Get technology previously reserved for billion-dollar corporations, FREE > > > > http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk > > _______________________________________________ > > Sdcc-user mailing list > > Sdcc-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > > > -- > ~~~~~~~~~~~~~~~~ > http://galzsolt.zzl.org ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user