;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.7 #5883 (Jul 21 2010) (CYGWIN) ; This file was generated Thu Dec 30 17:14:06 2010 ;-------------------------------------------------------- ; PIC16 port for the Microchip 16-bit core micros ;-------------------------------------------------------- list p=18f2680 radix dec ;-------------------------------------------------------- ; public variables in this module ;-------------------------------------------------------- global _CAN_status_ptr global _pt global _ui global _CAN_init global _CAN_recv global _CAN_send global _CAN_setFilters global _CAN_status1 global _CAN_runOnce ;-------------------------------------------------------- ; extern variables in this module ;-------------------------------------------------------- extern __gptrput2 extern __gptrget1 extern __gptrget2 extern _RXF6SIDHbits extern _RXF6SIDLbits extern _RXF6EIDHbits extern _RXF6EIDLbits extern _RXF7SIDHbits extern _RXF7SIDLbits extern _RXF7EIDHbits extern _RXF7EIDLbits extern _RXF8SIDHbits extern _RXF8SIDLbits extern _RXF8EIDHbits extern _RXF8EIDLbits extern _RXF9SIDHbits extern _RXF9SIDLbits extern _RXF9EIDHbits extern _RXF9EIDLbits extern _RXF10SIDHbits extern _RXF10SIDLbits extern _RXF10EIDHbits extern _RXF10EIDLbits extern _RXF11SIDHbits extern _RXF11SIDLbits extern _RXF11EIDHbits extern _RXF11EIDLbits extern _RXF12SIDHbits extern _RXF12SIDLbits extern _RXF12EIDHbits extern _RXF12EIDLbits extern _RXF13SIDHbits extern _RXF13SIDLbits extern _RXF13EIDHbits extern _RXF13EIDLbits extern _RXF14SIDHbits extern _RXF14SIDLbits extern _RXF14EIDHbits extern _RXF14EIDLbits extern _RXF15SIDHbits extern _RXF15SIDLbits extern _RXF15EIDHbits extern _RXF15EIDLbits extern _RXFCON0bits extern _RXFCON1bits extern _SDFLCbits extern _RXFBCON0bits extern _RXFBCON1bits extern _RXFBCON2bits extern _RXFBCON3bits extern _RXFBCON4bits extern _RXFBCON5bits extern _RXFBCON6bits extern _RXFBCON7bits extern _MSEL0bits extern _MSEL1bits extern _MSEL2bits extern _MSEL3bits extern _BSEL0bits extern _BIE0bits extern _TXBIEbits extern _B0CONbits extern _B0SIDHbits extern _B0SIDLbits extern _B0EIDHbits extern _B0EIDLbits extern _B0DLCbits extern _B0D0bits extern _B0D1bits extern _B0D2bits extern _B0D3bits extern _B0D4bits extern _B0D5bits extern _B0D6bits extern _B0D7bits extern _CANSTAT_RO9bits extern _CANCON_RO9bits extern _B1CONbits extern _B1SIDHbits extern _B1SIDLbits extern _B1EIDHbits extern _B1EIDLbits extern _B1DLCbits extern _B1D0bits extern _B1D1bits extern _B1D2bits extern _B1D3bits extern _B1D4bits extern _B1D5bits extern _B1D6bits extern _B1D7bits extern _CANSTAT_RO8bits extern _CANCON_RO8bits extern _B2CONbits extern _B2SIDHbits extern _B2SIDLbits extern _B2EIDHbits extern _B2EIDLbits extern _B2DLCbits extern _B2D0bits extern _B2D1bits extern _B2D2bits extern _B2D3bits extern _B2D4bits extern _B2D5bits extern _B2D6bits extern _B2D7bits extern _CANSTAT_RO7bits extern _CANCON_RO7bits extern _B3CONbits extern _B3SIDHbits extern _B3SIDLbits extern _B3EIDHbits extern _B3EIDLbits extern _B3DLCbits extern _B3D0bits extern _B3D1bits extern _B3D2bits extern _B3D3bits extern _B3D4bits extern _B3D5bits extern _B3D6bits extern _B3D7bits extern _CANSTAT_RO6bits extern _CANCON_RO6bits extern _B4CONbits extern _B4SIDHbits extern _B4SIDLbits extern _B4EIDHbits extern _B4EIDLbits extern _B4DLCbits extern _B4D0bits extern _B4D1bits extern _B4D2bits extern _B4D3bits extern _B4D4bits extern _B4D5bits extern _B4D6bits extern _B4D7bits extern _CANSTAT_RO5bits extern _CANCON_RO5bits extern _B5CONbits extern _B5SIDHbits extern _B5SIDLbits extern _B5EIDHbits extern _B5EIDLbits extern _B5DLCbits extern _B5D0bits extern _B5D1bits extern _B5D2bits extern _B5D3bits extern _B5D4bits extern _B5D5bits extern _B5D6bits extern _B5D7bits extern _CANSTAT_RO4bits extern _CANCON_RO4bits extern _RXF0SIDHbits extern _RXF0SIDLbits extern _RXF0EIDHbits extern _RXF0EIDLbits extern _RXF1SIDHbits extern _RXF1SIDLbits extern _RXF1EIDHbits extern _RXF1EIDLbits extern _RXF2SIDHbits extern _RXF2SIDLbits extern _RXF2EIDHbits extern _RXF2EIDLbits extern _RXF3SIDHbits extern _RXF3SIDLbits extern _RXF3EIDHbits extern _RXF3EIDLbits extern _RXF4SIDHbits extern _RXF4SIDLbits extern _RXF4EIDHbits extern _RXF4EIDLbits extern _RXF5SIDHbits extern _RXF5SIDLbits extern _RXF5EIDHbits extern _RXF5EIDLbits extern _RXM0SIDHbits extern _RXM0SIDLbits extern _RXM0EIDHbits extern _RXM0EIDLbits extern _RXM1SIDHbits extern _RXM1SIDLbits extern _RXM1EIDHbits extern _RXM1EIDLbits extern _TXB2CONbits extern _TXB2SIDHbits extern _TXB2SIDLbits extern _TXB2EIDHbits extern _TXB2EIDLbits extern _TXB2DLCbits extern _TXB2D0bits extern _TXB2D1bits extern _TXB2D2bits extern _TXB2D3bits extern _TXB2D4bits extern _TXB2D5bits extern _TXB2D6bits extern _TXB2D7bits extern _CANSTAT_RO3bits extern _CANCON_RO3bits extern _TXB1CONbits extern _TXB1SIDHbits extern _TXB1SIDLbits extern _TXB1EIDHbits extern _TXB1EIDLbits extern _TXB1DLCbits extern _TXB1D0bits extern _TXB1D1bits extern _TXB1D2bits extern _TXB1D3bits extern _TXB1D4bits extern _TXB1D5bits extern _TXB1D6bits extern _TXB1D7bits extern _CANSTAT_RO2bits extern _CANCON_RO2bits extern _TXB0CONbits extern _TXB0SIDHbits extern _TXB0SIDLbits extern _TXB0EIDHbits extern _TXB0EIDLbits extern _TXB0DLCbits extern _TXB0D0bits extern _TXB0D1bits extern _TXB0D2bits extern _TXB0D3bits extern _TXB0D4bits extern _TXB0D5bits extern _TXB0D6bits extern _TXB0D7bits extern _CANSTAT_RO1bits extern _CANCON_RO1bits extern _RXB1CONbits extern _RXB1SIDHbits extern _RXB1SIDLbits extern _RXB1EIDHbits extern _RXB1EIDLbits extern _RXB1DLCbits extern _RXB1D0bits extern _RXB1D1bits extern _RXB1D2bits extern _RXB1D3bits extern _RXB1D4bits extern _RXB1D5bits extern _RXB1D6bits extern _RXB1D7bits extern _CANSTAT_RO0bits extern _CANCON_RO0bits extern _RXB0CONbits extern _RXB0SIDHbits extern _RXB0SIDLbits extern _RXB0EIDHbits extern _RXB0EIDLbits extern _RXB0DLCbits extern _RXB0D0bits extern _RXB0D1bits extern _RXB0D2bits extern _RXB0D3bits extern _RXB0D4bits extern _RXB0D5bits extern _RXB0D6bits extern _RXB0D7bits extern _CANSTATbits extern _CANCONbits extern _BRGCON1bits extern _BRGCON2bits extern _BRGCON3bits extern _CIOCONbits extern _COMSTATbits extern _RXERRCNTbits extern _TXERRCNTbits extern _ECANCONbits extern _PORTAbits extern _PORTBbits extern _PORTCbits extern _LATAbits extern _LATBbits extern _LATCbits extern _DDRAbits extern _TRISAbits extern _DDRBbits extern _TRISBbits extern _DDRCbits extern _TRISCbits extern _OSCTUNEbits extern _PIE1bits extern _PIR1bits extern _IPR1bits extern _PIE2bits extern _PIR2bits extern _IPR2bits extern _PIE3bits extern _PIR3bits extern _IPR3bits extern _EECON1bits extern _RCSTAbits extern _TXSTAbits extern _T3CONbits extern _BAUDCONbits extern _CCP1CONbits extern _ADCON2bits extern _ADCON1bits extern _ADCON0bits extern _SSPCON2bits extern _SSPCON1bits extern _SSPSTATbits extern _T2CONbits extern _T1CONbits extern _RCONbits extern _WDTCONbits extern _HLVDCONbits extern _LVDCONbits extern _OSCCONbits extern _T0CONbits extern _STATUSbits extern _INTCON3bits extern _INTCON2bits extern _INTCONbits extern _STKPTRbits extern __ECANRxFilterHitInfo extern _RXF6SIDH extern _RXF6SIDL extern _RXF6EIDH extern _RXF6EIDL extern _RXF7SIDH extern _RXF7SIDL extern _RXF7EIDH extern _RXF7EIDL extern _RXF8SIDH extern _RXF8SIDL extern _RXF8EIDH extern _RXF8EIDL extern _RXF9SIDH extern _RXF9SIDL extern _RXF9EIDH extern _RXF9EIDL extern _RXF10SIDH extern _RXF10SIDL extern _RXF10EIDH extern _RXF10EIDL extern _RXF11SIDH extern _RXF11SIDL extern _RXF11EIDH extern _RXF11EIDL extern _RXF12SIDH extern _RXF12SIDL extern _RXF12EIDH extern _RXF12EIDL extern _RXF13SIDH extern _RXF13SIDL extern _RXF13EIDH extern _RXF13EIDL extern _RXF14SIDH extern _RXF14SIDL extern _RXF14EIDH extern _RXF14EIDL extern _RXF15SIDH extern _RXF15SIDL extern _RXF15EIDH extern _RXF15EIDL extern _RXFCON0 extern _RXFCON1 extern _SDFLC extern _RXFBCON0 extern _RXFBCON1 extern _RXFBCON2 extern _RXFBCON3 extern _RXFBCON4 extern _RXFBCON5 extern _RXFBCON6 extern _RXFBCON7 extern _MSEL0 extern _MSEL1 extern _MSEL2 extern _MSEL3 extern _BSEL0 extern _BIE0 extern _TXBIE extern _B0CON extern _B0SIDH extern _B0SIDL extern _B0EIDH extern _B0EIDL extern _B0DLC extern _B0D0 extern _B0D1 extern _B0D2 extern _B0D3 extern _B0D4 extern _B0D5 extern _B0D6 extern _B0D7 extern _CANSTAT_RO9 extern _CANCON_RO9 extern _B1CON extern _B1SIDH extern _B1SIDL extern _B1EIDH extern _B1EIDL extern _B1DLC extern _B1D0 extern _B1D1 extern _B1D2 extern _B1D3 extern _B1D4 extern _B1D5 extern _B1D6 extern _B1D7 extern _CANSTAT_RO8 extern _CANCON_RO8 extern _B2CON extern _B2SIDH extern _B2SIDL extern _B2EIDH extern _B2EIDL extern _B2DLC extern _B2D0 extern _B2D1 extern _B2D2 extern _B2D3 extern _B2D4 extern _B2D5 extern _B2D6 extern _B2D7 extern _CANSTAT_RO7 extern _CANCON_RO7 extern _B3CON extern _B3SIDH extern _B3SIDL extern _B3EIDH extern _B3EIDL extern _B3DLC extern _B3D0 extern _B3D1 extern _B3D2 extern _B3D3 extern _B3D4 extern _B3D5 extern _B3D6 extern _B3D7 extern _CANSTAT_RO6 extern _CANCON_RO6 extern _B4CON extern _B4SIDH extern _B4SIDL extern _B4EIDH extern _B4EIDL extern _B4DLC extern _B4D0 extern _B4D1 extern _B4D2 extern _B4D3 extern _B4D4 extern _B4D5 extern _B4D6 extern _B4D7 extern _CANSTAT_RO5 extern _CANCON_RO5 extern _B5CON extern _B5SIDH extern _B5SIDL extern _B5EIDH extern _B5EIDL extern _B5DLC extern _B5D0 extern _B5D1 extern _B5D2 extern _B5D3 extern _B5D4 extern _B5D5 extern _B5D6 extern _B5D7 extern _CANSTAT_RO4 extern _CANCON_RO4 extern _RXF0SIDH extern _RXF0SIDL extern _RXF0EIDH extern _RXF0EIDL extern _RXF1SIDH extern _RXF1SIDL extern _RXF1EIDH extern _RXF1EIDL extern _RXF2SIDH extern _RXF2SIDL extern _RXF2EIDH extern _RXF2EIDL extern _RXF3SIDH extern _RXF3SIDL extern _RXF3EIDH extern _RXF3EIDL extern _RXF4SIDH extern _RXF4SIDL extern _RXF4EIDH extern _RXF4EIDL extern _RXF5SIDH extern _RXF5SIDL extern _RXF5EIDH extern _RXF5EIDL extern _RXM0SIDH extern _RXM0SIDL extern _RXM0EIDH extern _RXM0EIDL extern _RXM1SIDH extern _RXM1SIDL extern _RXM1EIDH extern _RXM1EIDL extern _TXB2CON extern _TXB2SIDH extern _TXB2SIDL extern _TXB2EIDH extern _TXB2EIDL extern _TXB2DLC extern _TXB2D0 extern _TXB2D1 extern _TXB2D2 extern _TXB2D3 extern _TXB2D4 extern _TXB2D5 extern _TXB2D6 extern _TXB2D7 extern _CANSTAT_RO3 extern _CANCON_RO3 extern _TXB1CON extern _TXB1SIDH extern _TXB1SIDL extern _TXB1EIDH extern _TXB1EIDL extern _TXB1DLC extern _TXB1D0 extern _TXB1D1 extern _TXB1D2 extern _TXB1D3 extern _TXB1D4 extern _TXB1D5 extern _TXB1D6 extern _TXB1D7 extern _CANSTAT_RO2 extern _CANCON_RO2 extern _TXB0CON extern _TXB0SIDH extern _TXB0SIDL extern _TXB0EIDH extern _TXB0EIDL extern _TXB0DLC extern _TXB0D0 extern _TXB0D1 extern _TXB0D2 extern _TXB0D3 extern _TXB0D4 extern _TXB0D5 extern _TXB0D6 extern _TXB0D7 extern _CANSTAT_RO1 extern _CANCON_RO1 extern _RXB1CON extern _RXB1SIDH extern _RXB1SIDL extern _RXB1EIDH extern _RXB1EIDL extern _RXB1DLC extern _RXB1D0 extern _RXB1D1 extern _RXB1D2 extern _RXB1D3 extern _RXB1D4 extern _RXB1D5 extern _RXB1D6 extern _RXB1D7 extern _CANSTAT_RO0 extern _CANCON_RO0 extern _RXB0CON extern _RXB0SIDH extern _RXB0SIDL extern _RXB0EIDH extern _RXB0EIDL extern _RXB0DLC extern _RXB0D0 extern _RXB0D1 extern _RXB0D2 extern _RXB0D3 extern _RXB0D4 extern _RXB0D5 extern _RXB0D6 extern _RXB0D7 extern _CANSTAT extern _CANCON extern _BRGCON1 extern _BRGCON2 extern _BRGCON3 extern _CIOCON extern _COMSTAT extern _RXERRCNT extern _TXERRCNT extern _ECANCON extern _PORTA extern _PORTB extern _PORTC extern _LATA extern _LATB extern _LATC extern _DDRA extern _TRISA extern _DDRB extern _TRISB extern _DDRC extern _TRISC extern _OSCTUNE extern _PIE1 extern _PIR1 extern _IPR1 extern _PIE2 extern _PIR2 extern _IPR2 extern _PIE3 extern _PIR3 extern _IPR3 extern _EECON1 extern _EECON2 extern _EEDATA extern _EEADR extern _EEADRH extern _RCSTA extern _TXSTA extern _TXREG extern _RCREG extern _SPBRG extern _SPBRGH extern _T3CON extern _TMR3L extern _TMR3H extern _BAUDCON extern _CCP1CON extern _CCPR1 extern _CCPR1L extern _CCPR1H extern _ADCON2 extern _ADCON1 extern _ADCON0 extern _ADRES extern _ADRESL extern _ADRESH extern _SSPCON2 extern _SSPCON1 extern _SSPSTAT extern _SSPADD extern _SSPBUF extern _T2CON extern _PR2 extern _TMR2 extern _T1CON extern _TMR1L extern _TMR1H extern _RCON extern _WDTCON extern _HLVDCON extern _LVDCON extern _OSCCON extern _T0CON extern _TMR0L extern _TMR0H extern _STATUS extern _FSR2L extern _FSR2H extern _PLUSW2 extern _PREINC2 extern _POSTDEC2 extern _POSTINC2 extern _INDF2 extern _BSR extern _FSR1L extern _FSR1H extern _PLUSW1 extern _PREINC1 extern _POSTDEC1 extern _POSTINC1 extern _INDF1 extern _WREG extern _FSR0L extern _FSR0H extern _PLUSW0 extern _PREINC0 extern _POSTDEC0 extern _POSTINC0 extern _INDF0 extern _INTCON3 extern _INTCON2 extern _INTCON extern _PROD extern _PRODL extern _PRODH extern _TABLAT extern _TBLPTR extern _TBLPTRL extern _TBLPTRH extern _TBLPTRU extern _PC extern _PCL extern _PCLATH extern _PCLATU extern _STKPTR extern _TOS extern _TOSL extern _TOSH extern _TOSU extern _ECANInitialize extern _ECANSendMessage extern _ECANReceiveMessage extern _ECANSetOperationMode extern __CANIDToRegs ;-------------------------------------------------------- ; Equates to used internal registers ;-------------------------------------------------------- STATUS equ 0xfd8 PCL equ 0xff9 PCLATH equ 0xffa PCLATU equ 0xffb WREG equ 0xfe8 FSR0L equ 0xfe9 FSR0H equ 0xfea FSR1L equ 0xfe1 FSR2L equ 0xfd9 INDF0 equ 0xfef POSTDEC1 equ 0xfe5 PREINC1 equ 0xfe4 PLUSW2 equ 0xfdb PRODL equ 0xff3 PRODH equ 0xff4 idata _ui db 0x61 _pt db LOW(_ui), HIGH(_ui), 0x80 _CAN_status_ptr db LOW(_CAN_status1), HIGH(_CAN_status1), 0x80 _CAN_send_rr_1_1 db 0x00 _CAN_setFilters_fltId_1_1 db 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 ; Internal registers .registers udata_ovr 0x0000 r0x00 res 1 r0x01 res 1 r0x02 res 1 r0x03 res 1 r0x04 res 1 r0x05 res 1 r0x06 res 1 r0x07 res 1 r0x08 res 1 r0x09 res 1 r0x0a res 1 r0x0b res 1 r0x0c res 1 r0x0d res 1 r0x0e res 1 r0x0f res 1 r0x10 res 1 r0x11 res 1 udata_can_0 udata _CAN_status1 res 5 udata_can_1 udata _CAN_recv_temp_1_1 res 4 udata_can_2 udata _CAN_recv_flags_1_1 res 1 ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- ; I code from now on! ; ; Starting pCode block S_can__CAN_setFilters code _CAN_setFilters: ; .line 88; can.c int CAN_setFilters( struct CAN_filter_dcr *flt ){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVFF r0x08, POSTDEC1 MOVFF r0x09, POSTDEC1 MOVFF r0x0a, POSTDEC1 MOVFF r0x0b, POSTDEC1 MOVFF r0x0c, POSTDEC1 MOVFF r0x0d, POSTDEC1 MOVFF r0x0e, POSTDEC1 MOVFF r0x0f, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 ; .line 99; can.c ECANSetOperationMode(ECAN_OP_MODE_CONFIG); // must be in config mode to change masks/filters MOVLW 0x80 MOVWF POSTDEC1 CALL _ECANSetOperationMode INCF FSR1L, F ; .line 102; can.c ECANSetRXM0Value(CAN_MASK_ELEVEN_BITS, ECAN_MSG_STD); MOVLW HIGH(_RXM0SIDH) MOVWF r0x04 MOVLW LOW(_RXM0SIDH) MOVWF r0x03 MOVLW 0x80 MOVWF r0x05 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x07 MOVWF POSTDEC1 MOVLW 0xff MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 CALL __CANIDToRegs MOVLW 0x08 ADDWF FSR1L, F ; .line 103; can.c ECANSetRXM1Value(CAN_MASK_ELEVEN_BITS, ECAN_MSG_STD); MOVLW HIGH(_RXM1SIDH) MOVWF r0x04 MOVLW LOW(_RXM1SIDH) MOVWF r0x03 MOVLW 0x80 MOVWF r0x05 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x07 MOVWF POSTDEC1 MOVLW 0xff MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 CALL __CANIDToRegs MOVLW 0x08 ADDWF FSR1L, F ; .line 105; can.c for (k = 0; kID, msg->buf, msg->len, MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget2 MOVWF r0x03 MOVFF PRODL, r0x04 CLRF r0x05 CLRF r0x06 MOVF r0x00, W ADDLW 0x03 MOVWF r0x07 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x08 MOVLW 0x00 ADDWFC r0x02, W MOVWF r0x09 MOVLW 0x02 ADDWF r0x00, F MOVLW 0x00 ADDWFC r0x01, F MOVLW 0x00 ADDWFC r0x02, F MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF r0x00 ; .line 79; can.c ECAN_TX_PRIORITY_0 & ECAN_TX_STD_FRAME & ECAN_TX_NO_RTR_FRAME); MOVLW 0x00 MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 MOVF r0x09, W MOVWF POSTDEC1 MOVF r0x08, W MOVWF POSTDEC1 MOVF r0x07, W MOVWF POSTDEC1 MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 CALL _ECANSendMessage MOVWF r0x00 MOVLW 0x09 ADDWF FSR1L, F CLRF r0x01 ; .line 81; can.c if (rc) MOVF r0x00, W IORWF r0x01, W BZ _00142_DS_ ; .line 82; can.c CAN_status1.tx++; MOVFF _CAN_status1, r0x02 INCF r0x02, F MOVF r0x02, W BANKSEL _CAN_status1 MOVWF _CAN_status1, B BRA _00143_DS_ _00142_DS_: ; .line 84; can.c CAN_status1.txError++; MOVFF (_CAN_status1 + 1), r0x02 INCF r0x02, F MOVF r0x02, W BANKSEL (_CAN_status1 + 1) MOVWF (_CAN_status1 + 1), B _00143_DS_: ; .line 86; can.c return rc; MOVFF r0x01, PRODL MOVF r0x00, W MOVFF PREINC1, r0x09 MOVFF PREINC1, r0x08 MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_can__CAN_recv code _CAN_recv: ; .line 44; can.c int CAN_recv( struct CAN_msg *msg ) { MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVFF r0x08, POSTDEC1 MOVFF r0x09, POSTDEC1 MOVFF r0x0a, POSTDEC1 MOVFF r0x0b, POSTDEC1 MOVFF r0x0c, POSTDEC1 MOVFF r0x0d, POSTDEC1 MOVFF r0x0e, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 ; .line 56; can.c if (!ECANReceiveMessage ((unsigned long *)&temp, msg->buf, &msg->len, &flags)) MOVLW HIGH(_CAN_recv_temp_1_1) MOVWF r0x04 MOVLW LOW(_CAN_recv_temp_1_1) MOVWF r0x03 MOVLW 0x80 MOVWF r0x05 MOVF r0x00, W ADDLW 0x03 MOVWF r0x06 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x07 MOVLW 0x00 ADDWFC r0x02, W MOVWF r0x08 MOVF r0x00, W ADDLW 0x02 MOVWF r0x09 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x0a MOVLW 0x00 ADDWFC r0x02, W MOVWF r0x0b MOVLW HIGH(_CAN_recv_flags_1_1) MOVWF r0x0d MOVLW LOW(_CAN_recv_flags_1_1) MOVWF r0x0c MOVLW 0x80 MOVWF r0x0e MOVF r0x0e, W MOVWF POSTDEC1 MOVF r0x0d, W MOVWF POSTDEC1 MOVF r0x0c, W MOVWF POSTDEC1 MOVF r0x0b, W MOVWF POSTDEC1 MOVF r0x0a, W MOVWF POSTDEC1 MOVF r0x09, W MOVWF POSTDEC1 MOVF r0x08, W MOVWF POSTDEC1 MOVF r0x07, W MOVWF POSTDEC1 MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 CALL _ECANReceiveMessage MOVWF r0x03 MOVLW 0x0c ADDWF FSR1L, F MOVF r0x03, W BNZ _00125_DS_ ; .line 57; can.c return 0; CLRF PRODL CLRF WREG BRA _00130_DS_ _00125_DS_: BANKSEL _CAN_recv_temp_1_1 ; .line 58; can.c msg->ID = (uint16_t) temp; MOVF _CAN_recv_temp_1_1, W, B MOVWF r0x03 BANKSEL (_CAN_recv_temp_1_1 + 1) MOVF (_CAN_recv_temp_1_1 + 1), W, B MOVWF r0x04 MOVFF r0x03, POSTDEC1 MOVFF r0x04, PRODH MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrput2 ; .line 59; can.c CAN_status1.rx ++; MOVFF (_CAN_status1 + 2), r0x03 INCF r0x03, F MOVF r0x03, W BANKSEL (_CAN_status1 + 2) MOVWF (_CAN_status1 + 2), B BANKSEL _CAN_recv_flags_1_1 ; .line 61; can.c if (flags & (ECAN_RX_XTD_FRAME | ECAN_RX_RTR_FRAME)) { // don't accept these strange things. MOVF _CAN_recv_flags_1_1, W, B ANDLW 0x60 BZ _00127_DS_ ; .line 62; can.c CAN_status1.exotic++; MOVFF (_CAN_status1 + 4), r0x03 INCF r0x03, F MOVF r0x03, W BANKSEL (_CAN_status1 + 4) MOVWF (_CAN_status1 + 4), B ; .line 63; can.c return -1; SETF PRODL SETF WREG BRA _00130_DS_ _00127_DS_: BANKSEL _CAN_recv_flags_1_1 ; .line 65; can.c if (flags & ECAN_RX_OVERFLOW) { // it's not clear what this flag means, but count it. BTFSS _CAN_recv_flags_1_1, 3, B BRA _00129_DS_ ; .line 66; can.c CAN_status1.overflow++; MOVFF (_CAN_status1 + 3), r0x03 INCF r0x03, F MOVF r0x03, W BANKSEL (_CAN_status1 + 3) MOVWF (_CAN_status1 + 3), B ; .line 67; can.c return -2; SETF PRODL MOVLW 0xfe BRA _00130_DS_ _00129_DS_: ; .line 70; can.c return msg->len; MOVLW 0x02 ADDWF r0x00, F MOVLW 0x00 ADDWFC r0x01, F MOVLW 0x00 ADDWFC r0x02, F MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF r0x00 CLRF r0x01 MOVFF r0x01, PRODL MOVF r0x00, W _00130_DS_: MOVFF PREINC1, r0x0e MOVFF PREINC1, r0x0d MOVFF PREINC1, r0x0c MOVFF PREINC1, r0x0b MOVFF PREINC1, r0x0a MOVFF PREINC1, r0x09 MOVFF PREINC1, r0x08 MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_can__CAN_init code _CAN_init: ; .line 31; can.c int CAN_init( void ) { MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 ; .line 36; can.c ECANInitialize(); CALL _ECANInitialize ; .line 38; can.c for (k = 0; k