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

Reply via email to