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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user