Rev 339 | Blame | Last modification | View Log | SVN | RSS feed
MP2COD 4.1, COFF to COD File ConverterCopyright (c) 2006 Microchip Technology Inc.Listing File Generated: Mon Feb 26 21:28:44 2007Address Value Disassembly Source File------- ------- ----------------------- ------------------------------------------------------------------------------- -----/********************************************************************* F:\MCP\projects\CAN\canBoot\Source\Main.c* F:\MCP\projects\CAN\canBoot\Source\Main.c* Main application F:\MCP\projects\CAN\canBoot\Source\Main.c* F:\MCP\projects\CAN\canBoot\Source\Main.c********************************************************************* F:\MCP\projects\CAN\canBoot\Source\Main.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canBoot/Source/Main.c $ F:\MCP\projects\CAN\canBoot\Source\Main.c* Last changed: $LastChangedDate: 2007-02-25 20:51:08 +0100 (sö, 25 feb 2007) $ F:\MCP\projects\CAN\canBoot\Source\Main.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\canBoot\Source\Main.c* Revision: $Revision: 339 $ F:\MCP\projects\CAN\canBoot\Source\Main.c********************************************************************/ F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c#include <compiler.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <stackTasks.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <CANdefs.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <CAN.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <crc16.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <boot.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <funcdefs.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <EEaccess.h> F:\MCP\projects\CAN\canBoot\Source\Main.c#include <reset.h> F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c/** V E C T O R R E M A P P I N G *******************************************/ F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c#pragma code _HIGH_INTERRUPT_VECTOR = 0x000008 F:\MCP\projects\CAN\canBoot\Source\Main.cvoid _high_ISR (void) F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000008 ef04 GOTO 0x3008 _asm goto RM_HIGH_INTERRUPT_VECTOR _endasm F:\MCP\projects\CAN\canBoot\Source\Main.c00000a f01800000c 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c#pragma code _LOW_INTERRUPT_VECTOR = 0x000018 F:\MCP\projects\CAN\canBoot\Source\Main.cvoid _low_ISR (void) F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000018 ef0c GOTO 0x3018 _asm goto RM_LOW_INTERRUPT_VECTOR _endasm F:\MCP\projects\CAN\canBoot\Source\Main.c00001a f01800001c 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c#pragma code F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cstatic CAN_PACKET cp; F:\MCP\projects\CAN\canBoot\Source\Main.cstatic DWORD cnt =0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cstatic void mainInit(void); F:\MCP\projects\CAN\canBoot\Source\Main.cstatic BOOL canGetPacket(void); F:\MCP\projects\CAN\canBoot\Source\Main.cvoid TBLWT_Func(void); F:\MCP\projects\CAN\canBoot\Source\Main.cvoid TBLWTPOSTINC_Func (void); F:\MCP\projects\CAN\canBoot\Source\Main.cvoid TBLRD_Func(void); F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c#define TICK_SUB_COUNTER_10MS 312 F:\MCP\projects\CAN\canBoot\Source\Main.c#define PACKET_TIMEOUT 14 F:\MCP\projects\CAN\canBoot\Source\Main.c#define BOOTLOADER_INIT_TIMOUT 500 F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cDWORD tickCounter = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cDWORD tickSubCounter = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cDWORD tickGet(void); F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cstatic int MY_ID = DEFAULT_ID; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000038 cfd9 MOVFF 0xfd9,0xfe6 void main() F:\MCP\projects\CAN\canBoot\Source\Main.c00003a ffe600003c cfe1 MOVFF 0xfe1,0xfd900003e ffd9000040 0e2a MOVLW 0x2a000042 26e1 ADDWF 0xe1,0x1,0x0{ F:\MCP\projects\CAN\canBoot\Source\Main.cstatic PROGRAM_STATE pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.cstatic PROGRAM_STATE pgsAckNext = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cstatic BYTE programmerId=0; F:\MCP\projects\CAN\canBoot\Source\Main.cstatic BYTE pgmData[64]; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cstatic BOOT_TYPE ackType = btACK; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cstatic DWORD pgmAddress = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cstatic DWORD newPgmAddress = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cstatic DWORD tBoot; F:\MCP\projects\CAN\canBoot\Source\Main.cstatic DWORD t = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cCAN_PACKET outCp; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Inits F:\MCP\projects\CAN\canBoot\Source\Main.c000044 ecad CALL 0x95a,0x0 mainInit(); F:\MCP\projects\CAN\canBoot\Source\Main.c000046 f004F:\MCP\projects\CAN\canBoot\Source\Main.c000048 ecb3 CALL 0x966,0x0 canInit(); F:\MCP\projects\CAN\canBoot\Source\Main.c00004a f004F:\MCP\projects\CAN\canBoot\Source\Main.c00004c ec38 CALL 0xc70,0x0 tBoot = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c00004e f006000050 c010 MOVFF 0x10,0xb1000052 f0b1000054 c011 MOVFF 0x11,0xb2000056 f0b2000058 c012 MOVFF 0x12,0xb300005a f0b300005c c013 MOVFF 0x13,0xb400005e f0b4F:\MCP\projects\CAN\canBoot\Source\Main.c// Read ID if exist. F:\MCP\projects\CAN\canBoot\Source\Main.c000060 0e00 MOVLW 0x0 if (EERead(NODE_ID_EE)==NODE_HAS_ID) F:\MCP\projects\CAN\canBoot\Source\Main.c000062 6ee6 MOVWF 0xe6,0x0000064 6ae6 CLRF 0xe6,0x0000066 ec16 CALL 0xe2c,0x0000068 f00700006a 52e5 MOVF 0xe5,0x1,0x000006c 52e5 MOVF 0xe5,0x1,0x000006e 082a SUBLW 0x2a000070 e10a BNZ 0x86{ F:\MCP\projects\CAN\canBoot\Source\Main.c000072 0e01 MOVLW 0x1 MY_ID=EERead(NODE_ID_EE + 1); F:\MCP\projects\CAN\canBoot\Source\Main.c000074 6ee6 MOVWF 0xe6,0x0000076 6ae6 CLRF 0xe6,0x0000078 ec16 CALL 0xe2c,0x000007a f00700007c 52e5 MOVF 0xe5,0x1,0x000007e 52e5 MOVF 0xe5,0x1,0x0000080 0100 MOVLB 0x0000082 6fc1 MOVWF 0xc1,0x1000084 6bc2 CLRF 0xc2,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000086 0100 MOVLB 0x0 for(t=0;t<64;t++) pgmData[t]=0x0; F:\MCP\projects\CAN\canBoot\Source\Main.c000088 6bcf CLRF 0xcf,0x100008a 6bd0 CLRF 0xd0,0x100008c 6bd1 CLRF 0xd1,0x100008e 6bd2 CLRF 0xd2,0x1000090 0e40 MOVLW 0x40000092 0100 MOVLB 0x0000094 5dcf SUBWF 0xcf,0x0,0x1000096 0e00 MOVLW 0x0000098 59d0 SUBWFB 0xd0,0x0,0x100009a 0e00 MOVLW 0x000009c 59d1 SUBWFB 0xd1,0x0,0x100009e 0e00 MOVLW 0x00000a0 59d2 SUBWFB 0xd2,0x0,0x10000a2 e210 BC 0xc40000a4 0e71 MOVLW 0x710000a6 0100 MOVLB 0x00000a8 25cf ADDWF 0xcf,0x0,0x10000aa 6ee9 MOVWF 0xe9,0x00000ac 0e00 MOVLW 0x00000ae 0100 MOVLB 0x00000b0 21d0 ADDWFC 0xd0,0x0,0x10000b2 6eea MOVWF 0xea,0x00000b4 6aef CLRF 0xef,0x00000b6 0100 MOVLB 0x00000b8 2bcf INCF 0xcf,0x1,0x10000ba 0e00 MOVLW 0x00000bc 23d0 ADDWFC 0xd0,0x1,0x10000be 23d1 ADDWFC 0xd1,0x1,0x10000c0 23d2 ADDWFC 0xd2,0x1,0x10000c2 d7e6 BRA 0x90F:\MCP\projects\CAN\canBoot\Source\Main.c// Send bootloader startup F:\MCP\projects\CAN\canBoot\Source\Main.c0000c4 0e01 MOVLW 0x1 outCp.type=ptPGM; F:\MCP\projects\CAN\canBoot\Source\Main.c0000c6 6edf MOVWF 0xdf,0x00000c8 0e01 MOVLW 0x1 outCp.pgm.class=pcCTRL; F:\MCP\projects\CAN\canBoot\Source\Main.c0000ca 6adb CLRF 0xdb,0x00000cc 0e02 MOVLW 0x2 outCp.pgm.id=pctBOOTBOOT; F:\MCP\projects\CAN\canBoot\Source\Main.c0000ce 6adb CLRF 0xdb,0x00000d0 0e03 MOVLW 0x30000d2 6adb CLRF 0xdb,0x00000d4 0e03 MOVLW 0x3 outCp.length=3; F:\MCP\projects\CAN\canBoot\Source\Main.c0000d6 6ef3 MOVWF 0xf3,0x00000d8 0e08 MOVLW 0x80000da cff3 MOVFF 0xff3,0xfdb0000dc ffdb0000de ecda CALL 0xfb4,0x0 outCp.data[2] = (isBOR()<<7)+(isLVD()<<6)+(isMCLR()<<5)+(isPOR()<<4)+(isWDTTO()<<3)+(isWDTWU()<<2)+(isWU()<<1); F:\MCP\projects\CAN\canBoot\Source\Main.c0000e0 f0070000e2 24e8 ADDWF 0xe8,0x0,0x00000e4 6e05 MOVWF 0x5,0x00000e6 c005 MOVFF 0x5,0xfe60000e8 ffe60000ea eced CALL 0xfda,0x00000ec f0070000ee 52e5 MOVF 0xe5,0x1,0x00000f0 cfe7 MOVFF 0xfe7,0x50000f2 f0050000f4 0d04 MULLW 0x40000f6 cff3 MOVFF 0xff3,0x40000f8 f0040000fa c004 MOVFF 0x4,0xfe60000fc ffe60000fe c005 MOVFF 0x5,0xfe6000100 ffe6000102 ec00 CALL 0x1000,0x0000104 f008000106 52e5 MOVF 0xe5,0x1,0x0000108 cfe7 MOVFF 0xfe7,0x500010a f00500010c 52e5 MOVF 0xe5,0x1,0x000010e cfe7 MOVFF 0xfe7,0x4000110 f004000112 0d08 MULLW 0x8000114 cff3 MOVFF 0xff3,0x3000116 f003000118 c003 MOVFF 0x3,0xfe600011a ffe600011c c004 MOVFF 0x4,0xfe600011e ffe6000120 c005 MOVFF 0x5,0xfe6000122 ffe6000124 ec13 CALL 0x1026,0x0000126 f008000128 52e5 MOVF 0xe5,0x1,0x000012a cfe7 MOVFF 0xfe7,0x500012c f00500012e 52e5 MOVF 0xe5,0x1,0x0000130 cfe7 MOVFF 0xfe7,0x4000132 f004000134 52e5 MOVF 0xe5,0x1,0x0000136 cfe7 MOVFF 0xfe7,0x3000138 f00300013a 0d10 MULLW 0x1000013c cff3 MOVFF 0xff3,0x200013e f002000140 c002 MOVFF 0x2,0xfe6000142 ffe6000144 c003 MOVFF 0x3,0xfe6000146 ffe6000148 c004 MOVFF 0x4,0xfe600014a ffe600014c c005 MOVFF 0x5,0xfe600014e ffe6000150 ecbb CALL 0xf76,0x0000152 f007000154 52e5 MOVF 0xe5,0x1,0x0000156 cfe7 MOVFF 0xfe7,0x5000158 f00500015a 52e5 MOVF 0xe5,0x1,0x000015c cfe7 MOVFF 0xfe7,0x400015e f004000160 52e5 MOVF 0xe5,0x1,0x0000162 cfe7 MOVFF 0xfe7,0x3000164 f003000166 52e5 MOVF 0xe5,0x1,0x0000168 cfe7 MOVFF 0xfe7,0x200016a f00200016c 0d20 MULLW 0x2000016e cff3 MOVFF 0xff3,0x1000170 f001000172 c001 MOVFF 0x1,0xfe6000174 ffe6000176 c002 MOVFF 0x2,0xfe6000178 ffe600017a c003 MOVFF 0x3,0xfe600017c ffe600017e c004 MOVFF 0x4,0xfe6000180 ffe6000182 c005 MOVFF 0x5,0xfe6000184 ffe6000186 ec3f CALL 0x107e,0x0000188 f00800018a 52e5 MOVF 0xe5,0x1,0x000018c cfe7 MOVFF 0xfe7,0x500018e f005000190 52e5 MOVF 0xe5,0x1,0x0000192 cfe7 MOVFF 0xfe7,0x4000194 f004000196 52e5 MOVF 0xe5,0x1,0x0000198 cfe7 MOVFF 0xfe7,0x300019a f00300019c 52e5 MOVF 0xe5,0x1,0x000019e cfe7 MOVFF 0xfe7,0x20001a0 f0020001a2 52e5 MOVF 0xe5,0x1,0x00001a4 cfe7 MOVFF 0xfe7,0x10001a6 f0010001a8 0d40 MULLW 0x400001aa cff3 MOVFF 0xff3,0x00001ac f0000001ae c000 MOVFF 0x0,0xfe60001b0 ffe60001b2 c001 MOVFF 0x1,0xfe60001b4 ffe60001b6 c002 MOVFF 0x2,0xfe60001b8 ffe60001ba c003 MOVFF 0x3,0xfe60001bc ffe60001be c004 MOVFF 0x4,0xfe60001c0 ffe60001c2 c005 MOVFF 0x5,0xfe60001c4 ffe60001c6 ec34 CALL 0x1068,0x00001c8 f0080001ca 52e5 MOVF 0xe5,0x1,0x00001cc cfe7 MOVFF 0xfe7,0x50001ce f0050001d0 52e5 MOVF 0xe5,0x1,0x00001d2 cfe7 MOVFF 0xfe7,0x40001d4 f0040001d6 52e5 MOVF 0xe5,0x1,0x00001d8 cfe7 MOVFF 0xfe7,0x30001da f0030001dc 52e5 MOVF 0xe5,0x1,0x00001de cfe7 MOVFF 0xfe7,0x20001e0 f0020001e2 52e5 MOVF 0xe5,0x1,0x00001e4 cfe7 MOVFF 0xfe7,0x10001e6 f0010001e8 52e5 MOVF 0xe5,0x1,0x00001ea cfe7 MOVFF 0xfe7,0x00001ec f0000001ee 0d80 MULLW 0x800001f0 50f3 MOVF 0xf3,0x0,0x00001f2 2400 ADDWF 0x0,0x0,0x00001f4 2401 ADDWF 0x1,0x0,0x00001f6 2402 ADDWF 0x2,0x0,0x00001f8 2403 ADDWF 0x3,0x0,0x00001fa 2404 ADDWF 0x4,0x0,0x00001fc 2405 ADDWF 0x5,0x0,0x00001fe 6ee7 MOVWF 0xe7,0x0000200 0e0b MOVLW 0xb000202 cfe7 MOVFF 0xfe7,0xfdb000204 ffdb000206 0e0a MOVLW 0xa outCp.data[1]=(BYTE)((BOOT_VERSION & 0xFF00)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000208 6adb CLRF 0xdb,0x000020a 0e04 MOVLW 0x4 outCp.data[0]=(BOOT_VERSION & 0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c00020c 6ef3 MOVWF 0xf3,0x000020e 0e09 MOVLW 0x9000210 cff3 MOVFF 0xff3,0xfdb000212 ffdb000214 ec47 CALL 0x108e,0x0 StatusReset(); F:\MCP\projects\CAN\canBoot\Source\Main.c000216 f008000218 cfd9 MOVFF 0xfd9,0xfe9 while(!canSendMessage(outCp)); F:\MCP\projects\CAN\canBoot\Source\Main.c00021a ffe900021c cfda MOVFF 0xfda,0xfea00021e ffea000220 cfee MOVFF 0xfee,0xfe6000222 ffe6000224 cfee MOVFF 0xfee,0xfe6000226 ffe6000228 cfee MOVFF 0xfee,0xfe600022a ffe600022c cfee MOVFF 0xfee,0xfe600022e ffe6000230 cfee MOVFF 0xfee,0xfe6000232 ffe6000234 cfee MOVFF 0xfee,0xfe6000236 ffe6000238 cfee MOVFF 0xfee,0xfe600023a ffe600023c cfee MOVFF 0xfee,0xfe600023e ffe6000240 cfee MOVFF 0xfee,0xfe6000242 ffe6000244 cfee MOVFF 0xfee,0xfe6000246 ffe6000248 cfee MOVFF 0xfee,0xfe600024a ffe600024c cfee MOVFF 0xfee,0xfe600024e ffe6000250 cfee MOVFF 0xfee,0xfe6000252 ffe6000254 cfee MOVFF 0xfee,0xfe6000256 ffe6000258 cfee MOVFF 0xfee,0xfe600025a ffe600025c cfee MOVFF 0xfee,0xfe600025e ffe6000260 cfee MOVFF 0xfee,0xfe6000262 ffe6000264 ec6a CALL 0xad4,0x0000266 f005000268 6e00 MOVWF 0x0,0x000026a 0e11 MOVLW 0x1100026c 5ee1 SUBWF 0xe1,0x1,0x000026e 5000 MOVF 0x0,0x0,0x0000270 0900 IORLW 0x0000272 e101 BNZ 0x276000274 d7d1 BRA 0x218F:\MCP\projects\CAN\canBoot\Source\Main.c000276 8282 BSF 0x82,0x1,0x0 LED0_IO= 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000944 d499 BRA 0x278 for(;;) F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.cBYTE i; F:\MCP\projects\CAN\canBoot\Source\Main.cCAN_PACKET outCm; F:\MCP\projects\CAN\canBoot\Source\Main.c000278 db93 RCALL 0x9a0 BOOL hasPacket = canGetPacket() && (cp.type == ptBOOT && cp.boot.rid == MY_ID); F:\MCP\projects\CAN\canBoot\Source\Main.c00027a 0900 IORLW 0x000027c e00e BZ 0x29a00027e 0100 MOVLB 0x0000280 5160 MOVF 0x60,0x0,0x1000282 e10b BNZ 0x29a000284 0100 MOVLB 0x0000286 5166 MOVF 0x66,0x0,0x1000288 6e00 MOVWF 0x0,0x000028a 6a01 CLRF 0x1,0x000028c 0100 MOVLB 0x000028e 51c1 MOVF 0xc1,0x0,0x1000290 1800 XORWF 0x0,0x0,0x0000292 e102 BNZ 0x298000294 51c2 MOVF 0xc2,0x0,0x1000296 1801 XORWF 0x1,0x0,0x0000298 e002 BZ 0x29e00029a 0e00 MOVLW 0x000029c d001 BRA 0x2a000029e 0e01 MOVLW 0x10002a0 6ee7 MOVWF 0xe7,0x00002a2 0e23 MOVLW 0x230002a4 cfe7 MOVFF 0xfe7,0xfdb0002a6 ffdbF:\MCP\projects\CAN\canBoot\Source\Main.c0002a8 0100 MOVLB 0x0 tickSubCounter++; F:\MCP\projects\CAN\canBoot\Source\Main.c0002aa 2bbd INCF 0xbd,0x1,0x10002ac 0e00 MOVLW 0x00002ae 23be ADDWFC 0xbe,0x1,0x10002b0 23bf ADDWFC 0xbf,0x1,0x10002b2 23c0 ADDWFC 0xc0,0x1,0x10002b4 80d8 BSF 0xd8,0x0,0x0 if (tickSubCounter>TICK_SUB_COUNTER_10MS) F:\MCP\projects\CAN\canBoot\Source\Main.c0002b6 0e38 MOVLW 0x380002b8 0100 MOVLB 0x00002ba 55bd SUBFWB 0xbd,0x0,0x10002bc 0e01 MOVLW 0x10002be 55be SUBFWB 0xbe,0x0,0x10002c0 0e00 MOVLW 0x00002c2 55bf SUBFWB 0xbf,0x0,0x10002c4 0e00 MOVLW 0x00002c6 55c0 SUBFWB 0xc0,0x0,0x10002c8 e20c BC 0x2e2{ F:\MCP\projects\CAN\canBoot\Source\Main.c0002ca 0100 MOVLB 0x0 tickCounter++; F:\MCP\projects\CAN\canBoot\Source\Main.c0002cc 2bb9 INCF 0xb9,0x1,0x10002ce 0e00 MOVLW 0x00002d0 23ba ADDWFC 0xba,0x1,0x10002d2 23bb ADDWFC 0xbb,0x1,0x10002d4 23bc ADDWFC 0xbc,0x1,0x10002d6 0100 MOVLB 0x0 tickSubCounter=0; F:\MCP\projects\CAN\canBoot\Source\Main.c0002d8 6bbd CLRF 0xbd,0x10002da 6bbe CLRF 0xbe,0x10002dc 6bbf CLRF 0xbf,0x10002de 6bc0 CLRF 0xc0,0x10002e0 0004 CLRWDT ClrWdt(); F:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0002e2 0100 MOVLB 0x0 switch(pgs) F:\MCP\projects\CAN\canBoot\Source\Main.c0002e4 51c3 MOVF 0xc3,0x0,0x10002e6 0a05 XORLW 0x50002e8 e101 BNZ 0x2ec0002ea d325 BRA 0x9360002ec 0a01 XORLW 0x10002ee e101 BNZ 0x2f20002f0 d26c BRA 0x7ca0002f2 0a07 XORLW 0x70002f4 e101 BNZ 0x2f80002f6 d165 BRA 0x5c20002f8 0a01 XORLW 0x10002fa e101 BNZ 0x2fe0002fc d0c0 BRA 0x47e0002fe 0a03 XORLW 0x3000300 e101 BNZ 0x304000302 d079 BRA 0x3f6000304 0a01 XORLW 0x1000306 e001 BZ 0x30a000308 d31a BRA 0x93e{ F:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsWAITING_START: F:\MCP\projects\CAN\canBoot\Source\Main.c// Wait for first addresspacket. F:\MCP\projects\CAN\canBoot\Source\Main.c// Set startAddress to data[2]:[0]. F:\MCP\projects\CAN\canBoot\Source\Main.c// Send ack. Goto next state. F:\MCP\projects\CAN\canBoot\Source\Main.c00030a 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btADDR) F:\MCP\projects\CAN\canBoot\Source\Main.c00030c 04db DECF 0xdb,0x0,0x000030e e153 BNZ 0x3b6000310 0100 MOVLB 0x0000312 5164 MOVF 0x64,0x0,0x1000314 e150 BNZ 0x3b6{ F:\MCP\projects\CAN\canBoot\Source\Main.c000316 c067 MOVFF 0x67,0xc5 programmerId = cp.sid; F:\MCP\projects\CAN\canBoot\Source\Main.c000318 f0c500031a c06b MOVFF 0x6b,0x0 pgmAddress = (((DWORD)cp.data[2])<<16)+(((DWORD)cp.data[1])<<8)+((DWORD)cp.data[0]); F:\MCP\projects\CAN\canBoot\Source\Main.c00031c f00000031e 6a01 CLRF 0x1,0x0000320 6a02 CLRF 0x2,0x0000322 6a03 CLRF 0x3,0x0000324 0e10 MOVLW 0x10000326 0b1f ANDLW 0x1f000328 e007 BZ 0x33800032a 90d8 BCF 0xd8,0x0,0x000032c 3600 RLCF 0x0,0x1,0x000032e 3601 RLCF 0x1,0x1,0x0000330 3602 RLCF 0x2,0x1,0x0000332 3603 RLCF 0x3,0x1,0x0000334 06e8 DECF 0xe8,0x1,0x0000336 e1f9 BNZ 0x32a000338 c06a MOVFF 0x6a,0x400033a f00400033c 6a05 CLRF 0x5,0x000033e 6a06 CLRF 0x6,0x0000340 6a07 CLRF 0x7,0x0000342 0e08 MOVLW 0x8000344 0b1f ANDLW 0x1f000346 e007 BZ 0x356000348 90d8 BCF 0xd8,0x0,0x000034a 3604 RLCF 0x4,0x1,0x000034c 3605 RLCF 0x5,0x1,0x000034e 3606 RLCF 0x6,0x1,0x0000350 3607 RLCF 0x7,0x1,0x0000352 06e8 DECF 0xe8,0x1,0x0000354 e1f9 BNZ 0x348000356 5004 MOVF 0x4,0x0,0x0000358 2600 ADDWF 0x0,0x1,0x000035a 5005 MOVF 0x5,0x0,0x000035c 2201 ADDWFC 0x1,0x1,0x000035e 5006 MOVF 0x6,0x0,0x0000360 2202 ADDWFC 0x2,0x1,0x0000362 5007 MOVF 0x7,0x0,0x0000364 2203 ADDWFC 0x3,0x1,0x0000366 c069 MOVFF 0x69,0x8000368 f00800036a 6a09 CLRF 0x9,0x000036c 6a0a CLRF 0xa,0x000036e 6a0b CLRF 0xb,0x0000370 5000 MOVF 0x0,0x0,0x0000372 2408 ADDWF 0x8,0x0,0x0000374 0100 MOVLB 0x0000376 6fc7 MOVWF 0xc7,0x1000378 5001 MOVF 0x1,0x0,0x000037a 2009 ADDWFC 0x9,0x0,0x000037c 0100 MOVLB 0x000037e 6fc8 MOVWF 0xc8,0x1000380 5002 MOVF 0x2,0x0,0x0000382 200a ADDWFC 0xa,0x0,0x0000384 0100 MOVLB 0x0000386 6fc9 MOVWF 0xc9,0x1000388 5003 MOVF 0x3,0x0,0x000038a 200b ADDWFC 0xb,0x0,0x000038c 0100 MOVLB 0x000038e 6fca MOVWF 0xca,0x1000390 ec38 CALL 0xc70,0x0 t = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c000392 f006000394 c010 MOVFF 0x10,0xcf000396 f0cf000398 c011 MOVFF 0x11,0xd000039a f0d000039c c012 MOVFF 0x12,0xd100039e f0d10003a0 c013 MOVFF 0x13,0xd20003a2 f0d20003a4 0100 MOVLB 0x0 ackType = btACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0003a6 0e04 MOVLW 0x40003a8 6fc6 MOVWF 0xc6,0x10003aa 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0003ac 0e02 MOVLW 0x20003ae 6fc4 MOVWF 0xc4,0x10003b0 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0003b2 0e01 MOVLW 0x10003b4 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Bootloader timeout F:\MCP\projects\CAN\canBoot\Source\Main.c0003b6 ec38 CALL 0xc70,0x0 if ((tickGet()-tBoot)>BOOTLOADER_INIT_TIMOUT) F:\MCP\projects\CAN\canBoot\Source\Main.c0003b8 f0060003ba 0100 MOVLB 0x00003bc 51b1 MOVF 0xb1,0x0,0x10003be 5c10 SUBWF 0x10,0x0,0x00003c0 6e00 MOVWF 0x0,0x00003c2 0100 MOVLB 0x00003c4 51b2 MOVF 0xb2,0x0,0x10003c6 5811 SUBWFB 0x11,0x0,0x00003c8 6e01 MOVWF 0x1,0x00003ca 0100 MOVLB 0x00003cc 51b3 MOVF 0xb3,0x0,0x10003ce 5812 SUBWFB 0x12,0x0,0x00003d0 6e02 MOVWF 0x2,0x00003d2 0100 MOVLB 0x00003d4 51b4 MOVF 0xb4,0x0,0x10003d6 5813 SUBWFB 0x13,0x0,0x00003d8 6e03 MOVWF 0x3,0x00003da 80d8 BSF 0xd8,0x0,0x00003dc 0ef4 MOVLW 0xf40003de 5400 SUBFWB 0x0,0x0,0x00003e0 0e01 MOVLW 0x10003e2 5401 SUBFWB 0x1,0x0,0x00003e4 0e00 MOVLW 0x00003e6 5402 SUBFWB 0x2,0x0,0x00003e8 0e00 MOVLW 0x00003ea 5403 SUBFWB 0x3,0x0,0x00003ec e203 BC 0x3f4{ F:\MCP\projects\CAN\canBoot\Source\Main.c0003ee 0100 MOVLB 0x0 pgs = pgsDONE; F:\MCP\projects\CAN\canBoot\Source\Main.c0003f0 0e05 MOVLW 0x50003f2 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c0003f4 d2a7 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsSEND_ACK: F:\MCP\projects\CAN\canBoot\Source\Main.c// send ack F:\MCP\projects\CAN\canBoot\Source\Main.c0003f6 6adf CLRF 0xdf,0x0 outCp.type = ptBOOT; F:\MCP\projects\CAN\canBoot\Source\Main.c0003f8 0e06 MOVLW 0x6 outCp.boot.rid = programmerId; F:\MCP\projects\CAN\canBoot\Source\Main.c0003fa c0c5 MOVFF 0xc5,0xfdb0003fc ffdb0003fe 0e04 MOVLW 0x4 outCp.boot.type = ackType; F:\MCP\projects\CAN\canBoot\Source\Main.c000400 c0c6 MOVFF 0xc6,0xfdb000402 ffdb000404 0e08 MOVLW 0x8 outCp.length=0; F:\MCP\projects\CAN\canBoot\Source\Main.c000406 6adb CLRF 0xdb,0x0000408 ec38 CALL 0xc70,0x0 t = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c00040a f00600040c c010 MOVFF 0x10,0xcf00040e f0cf000410 c011 MOVFF 0x11,0xd0000412 f0d0000414 c012 MOVFF 0x12,0xd1000416 f0d1000418 c013 MOVFF 0x13,0xd200041a f0d200041c c0c4 MOVFF 0xc4,0xc3 pgs = pgsAckNext; F:\MCP\projects\CAN\canBoot\Source\Main.c00041e f0c3F:\MCP\projects\CAN\canBoot\Source\Main.c000420 cfd9 MOVFF 0xfd9,0xfe9 while(!canSendMessage(outCp)); F:\MCP\projects\CAN\canBoot\Source\Main.c000422 ffe9000424 cfda MOVFF 0xfda,0xfea000426 ffea000428 cfee MOVFF 0xfee,0xfe600042a ffe600042c cfee MOVFF 0xfee,0xfe600042e ffe6000430 cfee MOVFF 0xfee,0xfe6000432 ffe6000434 cfee MOVFF 0xfee,0xfe6000436 ffe6000438 cfee MOVFF 0xfee,0xfe600043a ffe600043c cfee MOVFF 0xfee,0xfe600043e ffe6000440 cfee MOVFF 0xfee,0xfe6000442 ffe6000444 cfee MOVFF 0xfee,0xfe6000446 ffe6000448 cfee MOVFF 0xfee,0xfe600044a ffe600044c cfee MOVFF 0xfee,0xfe600044e ffe6000450 cfee MOVFF 0xfee,0xfe6000452 ffe6000454 cfee MOVFF 0xfee,0xfe6000456 ffe6000458 cfee MOVFF 0xfee,0xfe600045a ffe600045c cfee MOVFF 0xfee,0xfe600045e ffe6000460 cfee MOVFF 0xfee,0xfe6000462 ffe6000464 cfee MOVFF 0xfee,0xfe6000466 ffe6000468 cfee MOVFF 0xfee,0xfe600046a ffe600046c db33 RCALL 0xad400046e 6e00 MOVWF 0x0,0x0000470 0e11 MOVLW 0x11000472 5ee1 SUBWF 0xe1,0x1,0x0000474 5000 MOVF 0x0,0x0,0x0000476 0900 IORLW 0x0000478 e101 BNZ 0x47c00047a d7d2 BRA 0x42000047c d263 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsWAIT_FIRST_DATA: F:\MCP\projects\CAN\canBoot\Source\Main.c// Wait for first pgm packet. use offset to determine data index. F:\MCP\projects\CAN\canBoot\Source\Main.c// When receiving crc from host, check crc for offsets bytes. F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c00047e ec38 CALL 0xc70,0x0 if ((tickGet()-t)>PACKET_TIMEOUT) F:\MCP\projects\CAN\canBoot\Source\Main.c000480 f006000482 0100 MOVLB 0x0000484 51cf MOVF 0xcf,0x0,0x1000486 5c10 SUBWF 0x10,0x0,0x0000488 6e00 MOVWF 0x0,0x000048a 0100 MOVLB 0x000048c 51d0 MOVF 0xd0,0x0,0x100048e 5811 SUBWFB 0x11,0x0,0x0000490 6e01 MOVWF 0x1,0x0000492 0100 MOVLB 0x0000494 51d1 MOVF 0xd1,0x0,0x1000496 5812 SUBWFB 0x12,0x0,0x0000498 6e02 MOVWF 0x2,0x000049a 0100 MOVLB 0x000049c 51d2 MOVF 0xd2,0x0,0x100049e 5813 SUBWFB 0x13,0x0,0x00004a0 6e03 MOVWF 0x3,0x00004a2 80d8 BSF 0xd8,0x0,0x00004a4 0e0e MOVLW 0xe0004a6 5400 SUBFWB 0x0,0x0,0x00004a8 0e00 MOVLW 0x00004aa 5401 SUBFWB 0x1,0x0,0x00004ac 0e00 MOVLW 0x00004ae 5402 SUBFWB 0x2,0x0,0x00004b0 0e00 MOVLW 0x00004b2 5403 SUBFWB 0x3,0x0,0x00004b4 e206 BC 0x4c2{ F:\MCP\projects\CAN\canBoot\Source\Main.c// Timeout, resend ack/nack. F:\MCP\projects\CAN\canBoot\Source\Main.c0004b6 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0004b8 0e02 MOVLW 0x20004ba 6fc4 MOVWF 0xc4,0x10004bc 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0004be 0e01 MOVLW 0x10004c0 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0004c2 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btPGM) F:\MCP\projects\CAN\canBoot\Source\Main.c0004c4 04db DECF 0xdb,0x0,0x00004c6 e157 BNZ 0x5760004c8 0100 MOVLB 0x00004ca 0564 DECF 0x64,0x0,0x10004cc e154 BNZ 0x576{ F:\MCP\projects\CAN\canBoot\Source\Main.c0004ce 0e24 MOVLW 0x24 BYTE localIndex = cp.boot.offset; F:\MCP\projects\CAN\canBoot\Source\Main.c0004d0 c065 MOVFF 0x65,0xfdb0004d2 ffdb0004d4 0e24 MOVLW 0x24 pgmData[localIndex+0]=cp.data[0]; pgmData[localIndex+1]=cp.data[1]; pgmData[localIndex+2]=cp.data[2]; pgmData[localIndex+3]=cp.data[3]; F:\MCP\projects\CAN\canBoot\Source\Main.c0004d6 50db MOVF 0xdb,0x0,0x00004d8 6aea CLRF 0xea,0x00004da 0f71 ADDLW 0x710004dc 6ee9 MOVWF 0xe9,0x00004de 0e00 MOVLW 0x00004e0 22ea ADDWFC 0xea,0x1,0x00004e2 c069 MOVFF 0x69,0xfef0004e4 ffef0004e6 0e24 MOVLW 0x240004e8 28db INCF 0xdb,0x0,0x00004ea 6aea CLRF 0xea,0x00004ec 0f71 ADDLW 0x710004ee 6ee9 MOVWF 0xe9,0x00004f0 0e00 MOVLW 0x00004f2 22ea ADDWFC 0xea,0x1,0x00004f4 c06a MOVFF 0x6a,0xfef0004f6 ffef0004f8 0e24 MOVLW 0x240004fa 50db MOVF 0xdb,0x0,0x00004fc 0f02 ADDLW 0x20004fe 6aea CLRF 0xea,0x0000500 0f71 ADDLW 0x71000502 6ee9 MOVWF 0xe9,0x0000504 0e00 MOVLW 0x0000506 22ea ADDWFC 0xea,0x1,0x0000508 c06b MOVFF 0x6b,0xfef00050a ffef00050c 0e24 MOVLW 0x2400050e 50db MOVF 0xdb,0x0,0x0000510 0f03 ADDLW 0x3000512 6aea CLRF 0xea,0x0000514 0f71 ADDLW 0x71000516 6ee9 MOVWF 0xe9,0x0000518 0e00 MOVLW 0x000051a 22ea ADDWFC 0xea,0x1,0x000051c c06c MOVFF 0x6c,0xfef00051e ffef000520 0e24 MOVLW 0x24 pgmData[localIndex+4]=cp.data[4]; pgmData[localIndex+5]=cp.data[5]; pgmData[localIndex+6]=cp.data[6]; pgmData[localIndex+7]=cp.data[7]; F:\MCP\projects\CAN\canBoot\Source\Main.c000522 50db MOVF 0xdb,0x0,0x0000524 0f04 ADDLW 0x4000526 6aea CLRF 0xea,0x0000528 0f71 ADDLW 0x7100052a 6ee9 MOVWF 0xe9,0x000052c 0e00 MOVLW 0x000052e 22ea ADDWFC 0xea,0x1,0x0000530 c06d MOVFF 0x6d,0xfef000532 ffef000534 0e24 MOVLW 0x24000536 50db MOVF 0xdb,0x0,0x0000538 0f05 ADDLW 0x500053a 6aea CLRF 0xea,0x000053c 0f71 ADDLW 0x7100053e 6ee9 MOVWF 0xe9,0x0000540 0e00 MOVLW 0x0000542 22ea ADDWFC 0xea,0x1,0x0000544 c06e MOVFF 0x6e,0xfef000546 ffef000548 0e24 MOVLW 0x2400054a 50db MOVF 0xdb,0x0,0x000054c 0f06 ADDLW 0x600054e 6aea CLRF 0xea,0x0000550 0f71 ADDLW 0x71000552 6ee9 MOVWF 0xe9,0x0000554 0e00 MOVLW 0x0000556 22ea ADDWFC 0xea,0x1,0x0000558 c06f MOVFF 0x6f,0xfef00055a ffef00055c 0e24 MOVLW 0x2400055e 50db MOVF 0xdb,0x0,0x0000560 0f07 ADDLW 0x7000562 6aea CLRF 0xea,0x0000564 0f71 ADDLW 0x71000566 6ee9 MOVWF 0xe9,0x0000568 0e00 MOVLW 0x000056a 22ea ADDWFC 0xea,0x1,0x000056c c070 MOVFF 0x70,0xfef00056e ffef000570 0100 MOVLB 0x0 pgs = pgsWAIT_DATA_OR_CRC; F:\MCP\projects\CAN\canBoot\Source\Main.c000572 0e03 MOVLW 0x3000574 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000576 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btADDR) F:\MCP\projects\CAN\canBoot\Source\Main.c000578 04db DECF 0xdb,0x0,0x000057a e10e BNZ 0x59800057c 0100 MOVLB 0x000057e 5164 MOVF 0x64,0x0,0x1000580 e10b BNZ 0x598{ F:\MCP\projects\CAN\canBoot\Source\Main.c000582 db76 RCALL 0xc70 tBoot = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c000584 c010 MOVFF 0x10,0xb1000586 f0b1000588 c011 MOVFF 0x11,0xb200058a f0b200058c c012 MOVFF 0x12,0xb300058e f0b3000590 c013 MOVFF 0x13,0xb4000592 f0b4000594 0100 MOVLB 0x0 pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.c000596 6bc3 CLRF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000598 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btCRC) F:\MCP\projects\CAN\canBoot\Source\Main.c00059a 04db DECF 0xdb,0x0,0x000059c e107 BNZ 0x5ac00059e 0e06 MOVLW 0x60005a0 0100 MOVLB 0x00005a2 5d64 SUBWF 0x64,0x0,0x10005a4 e103 BNZ 0x5ac{ F:\MCP\projects\CAN\canBoot\Source\Main.c0005a6 0100 MOVLB 0x0 pgs = pgsWAIT_DATA_OR_CRC; F:\MCP\projects\CAN\canBoot\Source\Main.c0005a8 0e03 MOVLW 0x30005aa 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0005ac 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btDONE) F:\MCP\projects\CAN\canBoot\Source\Main.c0005ae 04db DECF 0xdb,0x0,0x00005b0 e107 BNZ 0x5c00005b2 0e02 MOVLW 0x20005b4 0100 MOVLB 0x00005b6 5d64 SUBWF 0x64,0x0,0x10005b8 e103 BNZ 0x5c0{ F:\MCP\projects\CAN\canBoot\Source\Main.c0005ba 0100 MOVLB 0x0 pgs = pgsDONE; F:\MCP\projects\CAN\canBoot\Source\Main.c0005bc 0e05 MOVLW 0x50005be 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0005c0 d1c1 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsWAIT_DATA_OR_CRC: F:\MCP\projects\CAN\canBoot\Source\Main.c// Wait for pgm packet. use offset to determine data index. F:\MCP\projects\CAN\canBoot\Source\Main.c// When receiving crc from host, check crc for offsets bytes. F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0005c2 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btCRC) F:\MCP\projects\CAN\canBoot\Source\Main.c0005c4 04db DECF 0xdb,0x0,0x00005c6 e001 BZ 0x5ca0005c8 d08d BRA 0x6e40005ca 0e06 MOVLW 0x60005cc 0100 MOVLB 0x00005ce 5d64 SUBWF 0x64,0x0,0x10005d0 e001 BZ 0x5d40005d2 d088 BRA 0x6e4{ F:\MCP\projects\CAN\canBoot\Source\Main.c0005d4 c06d MOVFF 0x6d,0x2 WORD crc16 = (((WORD)cp.data[4])<<8)+((WORD)cp.data[3]); F:\MCP\projects\CAN\canBoot\Source\Main.c0005d6 f0020005d8 c002 MOVFF 0x2,0x30005da f0030005dc 6a02 CLRF 0x2,0x00005de 0100 MOVLB 0x00005e0 516c MOVF 0x6c,0x0,0x10005e2 0100 MOVLB 0x00005e4 2402 ADDWF 0x2,0x0,0x00005e6 6e00 MOVWF 0x0,0x00005e8 0e00 MOVLW 0x00005ea 2003 ADDWFC 0x3,0x0,0x00005ec 6e01 MOVWF 0x1,0x00005ee 0e25 MOVLW 0x250005f0 c000 MOVFF 0x0,0xfdb0005f2 ffdb0005f4 0e26 MOVLW 0x260005f6 c001 MOVFF 0x1,0xfdb0005f8 ffdb0005fa 0e40 MOVLW 0x40 WORD crc16calc = calc_crc(pgmData,64); F:\MCP\projects\CAN\canBoot\Source\Main.c0005fc 6ee6 MOVWF 0xe6,0x00005fe 6ae6 CLRF 0xe6,0x0000600 0e71 MOVLW 0x71000602 6ee6 MOVWF 0xe6,0x0000604 0e00 MOVLW 0x0000606 6ee6 MOVWF 0xe6,0x0000608 ecd6 CALL 0xdac,0x000060a f00600060c 52e5 MOVF 0xe5,0x1,0x000060e 52e5 MOVF 0xe5,0x1,0x0000610 52e5 MOVF 0xe5,0x1,0x0000612 52e5 MOVF 0xe5,0x1,0x0000614 0e27 MOVLW 0x27000616 cff3 MOVFF 0xff3,0xfdb000618 ffdb00061a 0e28 MOVLW 0x2800061c cff4 MOVFF 0xff4,0xfdb00061e ffdbF:\MCP\projects\CAN\canBoot\Source\Main.c// check CRC. F:\MCP\projects\CAN\canBoot\Source\Main.c000620 0e27 MOVLW 0x27 if (crc16calc==crc16) F:\MCP\projects\CAN\canBoot\Source\Main.c000622 cfdb MOVFF 0xfdb,0x0000624 f000000626 0e28 MOVLW 0x28000628 cfdb MOVFF 0xfdb,0x100062a f00100062c 0e25 MOVLW 0x2500062e 50db MOVF 0xdb,0x0,0x0000630 1800 XORWF 0x0,0x0,0x0000632 e103 BNZ 0x63a000634 0e26 MOVLW 0x26000636 50db MOVF 0xdb,0x0,0x0000638 1801 XORWF 0x1,0x0,0x000063a e142 BNZ 0x6c0{ F:\MCP\projects\CAN\canBoot\Source\Main.c00063c c06b MOVFF 0x6b,0x0 newPgmAddress = (((DWORD)cp.data[2])<<16)+(((DWORD)cp.data[1])<<8)+((DWORD)cp.data[0]); F:\MCP\projects\CAN\canBoot\Source\Main.c00063e f000000640 6a01 CLRF 0x1,0x0000642 6a02 CLRF 0x2,0x0000644 6a03 CLRF 0x3,0x0000646 0e10 MOVLW 0x10000648 0b1f ANDLW 0x1f00064a e007 BZ 0x65a00064c 90d8 BCF 0xd8,0x0,0x000064e 3600 RLCF 0x0,0x1,0x0000650 3601 RLCF 0x1,0x1,0x0000652 3602 RLCF 0x2,0x1,0x0000654 3603 RLCF 0x3,0x1,0x0000656 06e8 DECF 0xe8,0x1,0x0000658 e1f9 BNZ 0x64c00065a c06a MOVFF 0x6a,0x400065c f00400065e 6a05 CLRF 0x5,0x0000660 6a06 CLRF 0x6,0x0000662 6a07 CLRF 0x7,0x0000664 0e08 MOVLW 0x8000666 0b1f ANDLW 0x1f000668 e007 BZ 0x67800066a 90d8 BCF 0xd8,0x0,0x000066c 3604 RLCF 0x4,0x1,0x000066e 3605 RLCF 0x5,0x1,0x0000670 3606 RLCF 0x6,0x1,0x0000672 3607 RLCF 0x7,0x1,0x0000674 06e8 DECF 0xe8,0x1,0x0000676 e1f9 BNZ 0x66a000678 5004 MOVF 0x4,0x0,0x000067a 2600 ADDWF 0x0,0x1,0x000067c 5005 MOVF 0x5,0x0,0x000067e 2201 ADDWFC 0x1,0x1,0x0000680 5006 MOVF 0x6,0x0,0x0000682 2202 ADDWFC 0x2,0x1,0x0000684 5007 MOVF 0x7,0x0,0x0000686 2203 ADDWFC 0x3,0x1,0x0000688 c069 MOVFF 0x69,0x800068a f00800068c 6a09 CLRF 0x9,0x000068e 6a0a CLRF 0xa,0x0000690 6a0b CLRF 0xb,0x0000692 5000 MOVF 0x0,0x0,0x0000694 2408 ADDWF 0x8,0x0,0x0000696 0100 MOVLB 0x0000698 6fcb MOVWF 0xcb,0x100069a 5001 MOVF 0x1,0x0,0x000069c 2009 ADDWFC 0x9,0x0,0x000069e 0100 MOVLB 0x00006a0 6fcc MOVWF 0xcc,0x10006a2 5002 MOVF 0x2,0x0,0x00006a4 200a ADDWFC 0xa,0x0,0x00006a6 0100 MOVLB 0x00006a8 6fcd MOVWF 0xcd,0x10006aa 5003 MOVF 0x3,0x0,0x00006ac 200b ADDWFC 0xb,0x0,0x00006ae 0100 MOVLB 0x00006b0 6fce MOVWF 0xce,0x10006b2 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0006b4 0e02 MOVLW 0x20006b6 6fc4 MOVWF 0xc4,0x10006b8 0100 MOVLB 0x0 pgs = pgsWRITE_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0006ba 0e04 MOVLW 0x40006bc 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c0006be d012 BRA 0x6e4 else F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c0006c0 dad7 RCALL 0xc70 t = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c0006c2 c010 MOVFF 0x10,0xcf0006c4 f0cf0006c6 c011 MOVFF 0x11,0xd00006c8 f0d00006ca c012 MOVFF 0x12,0xd10006cc f0d10006ce c013 MOVFF 0x13,0xd20006d0 f0d20006d2 0100 MOVLB 0x0 ackType = btNACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0006d4 0e05 MOVLW 0x50006d6 6fc6 MOVWF 0xc6,0x10006d8 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0006da 0e02 MOVLW 0x20006dc 6fc4 MOVWF 0xc4,0x10006de 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0006e0 0e01 MOVLW 0x10006e2 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0006e4 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btPGM) F:\MCP\projects\CAN\canBoot\Source\Main.c0006e6 04db DECF 0xdb,0x0,0x00006e8 e154 BNZ 0x7920006ea 0100 MOVLB 0x00006ec 0564 DECF 0x64,0x0,0x10006ee e151 BNZ 0x792{ F:\MCP\projects\CAN\canBoot\Source\Main.c0006f0 0e29 MOVLW 0x29 BYTE localIndex = cp.boot.offset; F:\MCP\projects\CAN\canBoot\Source\Main.c0006f2 c065 MOVFF 0x65,0xfdb0006f4 ffdb0006f6 0e29 MOVLW 0x29 pgmData[localIndex+0]=cp.data[0]; pgmData[localIndex+1]=cp.data[1]; pgmData[localIndex+2]=cp.data[2]; pgmData[localIndex+3]=cp.data[3]; F:\MCP\projects\CAN\canBoot\Source\Main.c0006f8 50db MOVF 0xdb,0x0,0x00006fa 6aea CLRF 0xea,0x00006fc 0f71 ADDLW 0x710006fe 6ee9 MOVWF 0xe9,0x0000700 0e00 MOVLW 0x0000702 22ea ADDWFC 0xea,0x1,0x0000704 c069 MOVFF 0x69,0xfef000706 ffef000708 0e29 MOVLW 0x2900070a 28db INCF 0xdb,0x0,0x000070c 6aea CLRF 0xea,0x000070e 0f71 ADDLW 0x71000710 6ee9 MOVWF 0xe9,0x0000712 0e00 MOVLW 0x0000714 22ea ADDWFC 0xea,0x1,0x0000716 c06a MOVFF 0x6a,0xfef000718 ffef00071a 0e29 MOVLW 0x2900071c 50db MOVF 0xdb,0x0,0x000071e 0f02 ADDLW 0x2000720 6aea CLRF 0xea,0x0000722 0f71 ADDLW 0x71000724 6ee9 MOVWF 0xe9,0x0000726 0e00 MOVLW 0x0000728 22ea ADDWFC 0xea,0x1,0x000072a c06b MOVFF 0x6b,0xfef00072c ffef00072e 0e29 MOVLW 0x29000730 50db MOVF 0xdb,0x0,0x0000732 0f03 ADDLW 0x3000734 6aea CLRF 0xea,0x0000736 0f71 ADDLW 0x71000738 6ee9 MOVWF 0xe9,0x000073a 0e00 MOVLW 0x000073c 22ea ADDWFC 0xea,0x1,0x000073e c06c MOVFF 0x6c,0xfef000740 ffef000742 0e29 MOVLW 0x29 pgmData[localIndex+4]=cp.data[4]; pgmData[localIndex+5]=cp.data[5]; pgmData[localIndex+6]=cp.data[6]; pgmData[localIndex+7]=cp.data[7]; F:\MCP\projects\CAN\canBoot\Source\Main.c000744 50db MOVF 0xdb,0x0,0x0000746 0f04 ADDLW 0x4000748 6aea CLRF 0xea,0x000074a 0f71 ADDLW 0x7100074c 6ee9 MOVWF 0xe9,0x000074e 0e00 MOVLW 0x0000750 22ea ADDWFC 0xea,0x1,0x0000752 c06d MOVFF 0x6d,0xfef000754 ffef000756 0e29 MOVLW 0x29000758 50db MOVF 0xdb,0x0,0x000075a 0f05 ADDLW 0x500075c 6aea CLRF 0xea,0x000075e 0f71 ADDLW 0x71000760 6ee9 MOVWF 0xe9,0x0000762 0e00 MOVLW 0x0000764 22ea ADDWFC 0xea,0x1,0x0000766 c06e MOVFF 0x6e,0xfef000768 ffef00076a 0e29 MOVLW 0x2900076c 50db MOVF 0xdb,0x0,0x000076e 0f06 ADDLW 0x6000770 6aea CLRF 0xea,0x0000772 0f71 ADDLW 0x71000774 6ee9 MOVWF 0xe9,0x0000776 0e00 MOVLW 0x0000778 22ea ADDWFC 0xea,0x1,0x000077a c06f MOVFF 0x6f,0xfef00077c ffef00077e 0e29 MOVLW 0x29000780 50db MOVF 0xdb,0x0,0x0000782 0f07 ADDLW 0x7000784 6aea CLRF 0xea,0x0000786 0f71 ADDLW 0x71000788 6ee9 MOVWF 0xe9,0x000078a 0e00 MOVLW 0x000078c 22ea ADDWFC 0xea,0x1,0x000078e c070 MOVFF 0x70,0xfef000790 ffef} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000792 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btADDR) F:\MCP\projects\CAN\canBoot\Source\Main.c000794 04db DECF 0xdb,0x0,0x0000796 e10e BNZ 0x7b4000798 0100 MOVLB 0x000079a 5164 MOVF 0x64,0x0,0x100079c e10b BNZ 0x7b4{ F:\MCP\projects\CAN\canBoot\Source\Main.c00079e da68 RCALL 0xc70 tBoot = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c0007a0 c010 MOVFF 0x10,0xb10007a2 f0b10007a4 c011 MOVFF 0x11,0xb20007a6 f0b20007a8 c012 MOVFF 0x12,0xb30007aa f0b30007ac c013 MOVFF 0x13,0xb40007ae f0b40007b0 0100 MOVLB 0x0 pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.c0007b2 6bc3 CLRF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0007b4 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btDONE) F:\MCP\projects\CAN\canBoot\Source\Main.c0007b6 04db DECF 0xdb,0x0,0x00007b8 e107 BNZ 0x7c80007ba 0e02 MOVLW 0x20007bc 0100 MOVLB 0x00007be 5d64 SUBWF 0x64,0x0,0x10007c0 e103 BNZ 0x7c8{ F:\MCP\projects\CAN\canBoot\Source\Main.c0007c2 0100 MOVLB 0x0 pgs = pgsDONE; F:\MCP\projects\CAN\canBoot\Source\Main.c0007c4 0e05 MOVLW 0x50007c6 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0007c8 d0bd BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsWRITE_DATA: F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0007ca 0004 CLRWDT ClrWdt(); F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Write program and send ack. F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Check addr limit F:\MCP\projects\CAN\canBoot\Source\Main.c0007cc 0e00 MOVLW 0x0 if (pgmAddress<RM_RESET_VECTOR) F:\MCP\projects\CAN\canBoot\Source\Main.c0007ce 0100 MOVLB 0x00007d0 5dc7 SUBWF 0xc7,0x0,0x10007d2 0e30 MOVLW 0x300007d4 59c8 SUBWFB 0xc8,0x0,0x10007d6 0e00 MOVLW 0x00007d8 59c9 SUBWFB 0xc9,0x0,0x10007da 0e00 MOVLW 0x00007dc 59ca SUBWFB 0xca,0x0,0x10007de e20a BC 0x7f4{ F:\MCP\projects\CAN\canBoot\Source\Main.c0007e0 0100 MOVLB 0x0 ackType = btNACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0007e2 0e05 MOVLW 0x50007e4 6fc6 MOVWF 0xc6,0x10007e6 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0007e8 0e02 MOVLW 0x20007ea 6fc4 MOVWF 0xc4,0x10007ec 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0007ee 0e01 MOVLW 0x10007f0 6fc3 MOVWF 0xc3,0x1//Not allowed to write here! F:\MCP\projects\CAN\canBoot\Source\Main.c0007f2 d0a8 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c//Load Table pointer registers with base address to erase. F:\MCP\projects\CAN\canBoot\Source\Main.c0007f4 c0c7 MOVFF 0xc7,0x0 TBLPTRU = (BYTE)((pgmAddress & 0xFF0000)>>16); F:\MCP\projects\CAN\canBoot\Source\Main.c0007f6 f0000007f8 c0c8 MOVFF 0xc8,0x10007fa f0010007fc c0c9 MOVFF 0xc9,0x20007fe f002000800 c0ca MOVFF 0xca,0x3000802 f003000804 6a00 CLRF 0x0,0x0000806 6a01 CLRF 0x1,0x0000808 6a03 CLRF 0x3,0x000080a 0e10 MOVLW 0x1000080c 90d8 BCF 0xd8,0x0,0x000080e 3203 RRCF 0x3,0x1,0x0000810 3202 RRCF 0x2,0x1,0x0000812 3201 RRCF 0x1,0x1,0x0000814 3200 RRCF 0x0,0x1,0x0000816 06e8 DECF 0xe8,0x1,0x0000818 e1f9 BNZ 0x80c00081a 5000 MOVF 0x0,0x0,0x000081c 6ef8 MOVWF 0xf8,0x000081e c0c7 MOVFF 0xc7,0x0 TBLPTRH = (BYTE)((pgmAddress & 0xFF00)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000820 f000000822 c0c8 MOVFF 0xc8,0x1000824 f001000826 c0c9 MOVFF 0xc9,0x2000828 f00200082a c0ca MOVFF 0xca,0x300082c f00300082e 6a00 CLRF 0x0,0x0000830 6a02 CLRF 0x2,0x0000832 6a03 CLRF 0x3,0x0000834 0e08 MOVLW 0x8000836 90d8 BCF 0xd8,0x0,0x0000838 3203 RRCF 0x3,0x1,0x000083a 3202 RRCF 0x2,0x1,0x000083c 3201 RRCF 0x1,0x1,0x000083e 3200 RRCF 0x0,0x1,0x0000840 06e8 DECF 0xe8,0x1,0x0000842 e1f9 BNZ 0x836000844 5000 MOVF 0x0,0x0,0x0000846 6ef7 MOVWF 0xf7,0x0000848 0100 MOVLB 0x0 TBLPTRL = (BYTE)(pgmAddress & 0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c00084a 51c7 MOVF 0xc7,0x0,0x100084c 6ef6 MOVWF 0xf6,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// point to Flash program memory F:\MCP\projects\CAN\canBoot\Source\Main.c00084e 8ea6 BSF 0xa6,0x7,0x0 EECON1bits.EEPGD = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c// access Flash program memory F:\MCP\projects\CAN\canBoot\Source\Main.c000850 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c// enable write to memory F:\MCP\projects\CAN\canBoot\Source\Main.c000852 84a6 BSF 0xa6,0x2,0x0 EECON1bits.WREN = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c// enable Row Erase operation F:\MCP\projects\CAN\canBoot\Source\Main.c000854 88a6 BSF 0xa6,0x4,0x0 EECON1bits.FREE = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c// disable interrupts F:\MCP\projects\CAN\canBoot\Source\Main.c000856 9ef2 BCF 0xf2,0x7,0x0 INTCONbits.GIE = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Do it! F:\MCP\projects\CAN\canBoot\Source\Main.c000858 0e55 MOVLW 0x55 EECON2 = 0x55; F:\MCP\projects\CAN\canBoot\Source\Main.c00085a 6ea7 MOVWF 0xa7,0x000085c 0eaa MOVLW 0xaa EECON2 = 0xAA; F:\MCP\projects\CAN\canBoot\Source\Main.c00085e 6ea7 MOVWF 0xa7,0x0000860 82a6 BSF 0xa6,0x1,0x0 EECON1bits.WR = 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// enable interrupts F:\MCP\projects\CAN\canBoot\Source\Main.c000862 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIE = 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c//Load Table pointer registers with base address to program. F:\MCP\projects\CAN\canBoot\Source\Main.c000864 c0c7 MOVFF 0xc7,0x0 TBLPTRU = (BYTE)((pgmAddress & 0xFF0000)>>16); F:\MCP\projects\CAN\canBoot\Source\Main.c000866 f000000868 c0c8 MOVFF 0xc8,0x100086a f00100086c c0c9 MOVFF 0xc9,0x200086e f002000870 c0ca MOVFF 0xca,0x3000872 f003000874 6a00 CLRF 0x0,0x0000876 6a01 CLRF 0x1,0x0000878 6a03 CLRF 0x3,0x000087a 0e10 MOVLW 0x1000087c 90d8 BCF 0xd8,0x0,0x000087e 3203 RRCF 0x3,0x1,0x0000880 3202 RRCF 0x2,0x1,0x0000882 3201 RRCF 0x1,0x1,0x0000884 3200 RRCF 0x0,0x1,0x0000886 06e8 DECF 0xe8,0x1,0x0000888 e1f9 BNZ 0x87c00088a 5000 MOVF 0x0,0x0,0x000088c 6ef8 MOVWF 0xf8,0x000088e c0c7 MOVFF 0xc7,0x0 TBLPTRH = (BYTE)((pgmAddress & 0xFF00)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000890 f000000892 c0c8 MOVFF 0xc8,0x1000894 f001000896 c0c9 MOVFF 0xc9,0x2000898 f00200089a c0ca MOVFF 0xca,0x300089c f00300089e 6a00 CLRF 0x0,0x00008a0 6a02 CLRF 0x2,0x00008a2 6a03 CLRF 0x3,0x00008a4 0e08 MOVLW 0x80008a6 90d8 BCF 0xd8,0x0,0x00008a8 3203 RRCF 0x3,0x1,0x00008aa 3202 RRCF 0x2,0x1,0x00008ac 3201 RRCF 0x1,0x1,0x00008ae 3200 RRCF 0x0,0x1,0x00008b0 06e8 DECF 0xe8,0x1,0x00008b2 e1f9 BNZ 0x8a60008b4 5000 MOVF 0x0,0x0,0x00008b6 6ef7 MOVWF 0xf7,0x00008b8 0100 MOVLB 0x0 TBLPTRL = (BYTE)(pgmAddress & 0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c0008ba 51c7 MOVF 0xc7,0x0,0x10008bc 6ef6 MOVWF 0xf6,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// Load bytes F:\MCP\projects\CAN\canBoot\Source\Main.c0008be 0e11 MOVLW 0x11 for(i=0;i<63;i++) F:\MCP\projects\CAN\canBoot\Source\Main.c0008c0 6adb CLRF 0xdb,0x00008c2 0e3f MOVLW 0x3f0008c4 6ef3 MOVWF 0xf3,0x00008c6 0e11 MOVLW 0x110008c8 cfdb MOVFF 0xfdb,0xff40008ca fff40008cc 50f3 MOVF 0xf3,0x0,0x00008ce 5cf4 SUBWF 0xf4,0x0,0x00008d0 e215 BC 0x8fc0008f6 0e11 MOVLW 0x110008f8 2adb INCF 0xdb,0x1,0x00008fa d7e3 BRA 0x8c2{ F:\MCP\projects\CAN\canBoot\Source\Main.c0008d2 0e11 MOVLW 0x11 TABLAT=pgmData[i]; F:\MCP\projects\CAN\canBoot\Source\Main.c0008d4 50db MOVF 0xdb,0x0,0x00008d6 6aea CLRF 0xea,0x00008d8 0f71 ADDLW 0x710008da 6ee9 MOVWF 0xe9,0x00008dc 0e00 MOVLW 0x00008de 22ea ADDWFC 0xea,0x1,0x00008e0 50ef MOVF 0xef,0x0,0x00008e2 6ef5 MOVWF 0xf5,0x00008e4 0e11 MOVLW 0x11 pgmData[i]=0x0; F:\MCP\projects\CAN\canBoot\Source\Main.c0008e6 50db MOVF 0xdb,0x0,0x00008e8 6aea CLRF 0xea,0x00008ea 0f71 ADDLW 0x710008ec 6ee9 MOVWF 0xe9,0x00008ee 0e00 MOVLW 0x00008f0 22ea ADDWFC 0xea,0x1,0x00008f2 6aef CLRF 0xef,0x00008f4 d9bb RCALL 0xc6c TBLWTPOSTINC_Func(); F:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.c0008fc c0b0 MOVFF 0xb0,0xff5 TABLAT=pgmData[63]; F:\MCP\projects\CAN\canBoot\Source\Main.c0008fe fff5000900 d9b3 RCALL 0xc68 TBLWT_Func(); F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// point to Flash program memory F:\MCP\projects\CAN\canBoot\Source\Main.c000902 8ea6 BSF 0xa6,0x7,0x0 EECON1bits.EEPGD = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c// access Flash program memory F:\MCP\projects\CAN\canBoot\Source\Main.c000904 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c// enable write to memory F:\MCP\projects\CAN\canBoot\Source\Main.c000906 84a6 BSF 0xa6,0x2,0x0 EECON1bits.WREN = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c// disable interrupts F:\MCP\projects\CAN\canBoot\Source\Main.c000908 9ef2 BCF 0xf2,0x7,0x0 INTCONbits.GIE = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Do it! F:\MCP\projects\CAN\canBoot\Source\Main.c00090a 0e55 MOVLW 0x55 EECON2 = 0x55; F:\MCP\projects\CAN\canBoot\Source\Main.c00090c 6ea7 MOVWF 0xa7,0x000090e 0eaa MOVLW 0xaa EECON2 = 0xAA; F:\MCP\projects\CAN\canBoot\Source\Main.c000910 6ea7 MOVWF 0xa7,0x0000912 82a6 BSF 0xa6,0x1,0x0 EECON1bits.WR = 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// enable interrupts F:\MCP\projects\CAN\canBoot\Source\Main.c000914 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIE = 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// disable write to memory F:\MCP\projects\CAN\canBoot\Source\Main.c000916 94a6 BCF 0xa6,0x2,0x0 EECON1bits.WREN = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000918 c0cb MOVFF 0xcb,0xc7 pgmAddress = newPgmAddress; F:\MCP\projects\CAN\canBoot\Source\Main.c00091a f0c700091c c0cc MOVFF 0xcc,0xc800091e f0c8000920 c0cd MOVFF 0xcd,0xc9000922 f0c9000924 c0ce MOVFF 0xce,0xca000926 f0ca000928 0100 MOVLB 0x0 ackType = btACK; F:\MCP\projects\CAN\canBoot\Source\Main.c00092a 0e04 MOVLW 0x400092c 6fc6 MOVWF 0xc6,0x100092e 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c000930 0e01 MOVLW 0x1000932 6fc3 MOVWF 0xc3,0x1F:\MCP\projects\CAN\canBoot\Source\Main.c000934 d007 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsDONE: F:\MCP\projects\CAN\canBoot\Source\Main.c000936 9282 BCF 0x82,0x1,0x0 LED0_IO= 0; F:\MCP\projects\CAN\canBoot\Source\Main.c000938 ef00 GOTO 0x3000 _asm goto RM_RESET_VECTOR _endasm F:\MCP\projects\CAN\canBoot\Source\Main.c00093a f01800093c d003 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cdefault: F:\MCP\projects\CAN\canBoot\Source\Main.c00093e 0100 MOVLB 0x0 pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.c000940 6bc3 CLRF 0xc3,0x1000942 d000 BRA 0x944 break; F:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.c000946 0e2a MOVLW 0x2a } F:\MCP\projects\CAN\canBoot\Source\Main.c000948 5ce1 SUBWF 0xe1,0x0,0x000094a e202 BC 0x95000094c 6ae1 CLRF 0xe1,0x000094e 52e5 MOVF 0xe5,0x1,0x0000950 6ee1 MOVWF 0xe1,0x0000952 52e5 MOVF 0xe5,0x1,0x0000954 cfe7 MOVFF 0xfe7,0xfd9000956 ffd9000958 0012 RETURN 0x0F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c/* F:\MCP\projects\CAN\canBoot\Source\Main.c* Function: mainInit F:\MCP\projects\CAN\canBoot\Source\Main.c* F:\MCP\projects\CAN\canBoot\Source\Main.c* Input: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Output: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Pre-conditions: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Affects: Se code F:\MCP\projects\CAN\canBoot\Source\Main.c* Depends: none. F:\MCP\projects\CAN\canBoot\Source\Main.c*/ F:\MCP\projects\CAN\canBoot\Source\Main.cvoid mainInit() F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c00095a 9294 BCF 0x94,0x1,0x0 LED0_TRIS=0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Enable internal PORTB pull-ups F:\MCP\projects\CAN\canBoot\Source\Main.c00095c 9ef1 BCF 0xf1,0x7,0x0 INTCON2bits.RBPU = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Enable Interrupts F:\MCP\projects\CAN\canBoot\Source\Main.c00095e 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIEH = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c000960 8cf2 BSF 0xf2,0x6,0x0 INTCONbits.GIEL = 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Enable interrupt prirority F:\MCP\projects\CAN\canBoot\Source\Main.c000962 8ed0 BSF 0xd0,0x7,0x0 RCONbits.IPEN=1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000964 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c/// CAN------------------------------------------------------- F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c/* F:\MCP\projects\CAN\canBoot\Source\Main.c* Function: canInit F:\MCP\projects\CAN\canBoot\Source\Main.c* F:\MCP\projects\CAN\canBoot\Source\Main.c* Input: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Output: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Pre-conditions: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Affects: Changes can registers. F:\MCP\projects\CAN\canBoot\Source\Main.c* Depends: none. F:\MCP\projects\CAN\canBoot\Source\Main.c*/ F:\MCP\projects\CAN\canBoot\Source\Main.cvoid canInit() F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000966 0e80 MOVLW 0x80 CANCON = 0x80; //request config mode F:\MCP\projects\CAN\canBoot\Source\Main.c000968 6e6f MOVWF 0x6f,0x000096a 0ee0 MOVLW 0xe0 while ((CANSTAT & 0xE0) != 0x80 ); //wait for config mode request F:\MCP\projects\CAN\canBoot\Source\Main.c00096c 146e ANDWF 0x6e,0x0,0x000096e 0880 SUBLW 0x80000970 e001 BZ 0x974000972 d7fb BRA 0x96aF:\MCP\projects\CAN\canBoot\Source\Main.c// BAUD AND TQS F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// 500Khz@40Mhz (new by the book) F:\MCP\projects\CAN\canBoot\Source\Main.c000974 0e04 MOVLW 0x4 BRGCON1 = 0x04; F:\MCP\projects\CAN\canBoot\Source\Main.c000976 6e70 MOVWF 0x70,0x0000978 0ed1 MOVLW 0xd1 BRGCON2 = 0xD1; F:\MCP\projects\CAN\canBoot\Source\Main.c00097a 6e71 MOVWF 0x71,0x000097c 0e81 MOVLW 0x81 BRGCON3 = 0x81; F:\MCP\projects\CAN\canBoot\Source\Main.c00097e 6e72 MOVWF 0x72,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c000980 6a77 CLRF 0x77,0x0 ECANCON=0; F:\MCP\projects\CAN\canBoot\Source\Main.c000982 8e77 BSF 0x77,0x7,0x0 ECANCONbits.MDSEL1 = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c000984 9c77 BCF 0x77,0x6,0x0 ECANCONbits.MDSEL0 = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// FILTERS AND MASKS F:\MCP\projects\CAN\canBoot\Source\Main.c000986 8c60 BSF 0x60,0x6,0x0 RXB0CONbits.RXM1=1; F:\MCP\projects\CAN\canBoot\Source\Main.c000988 9a60 BCF 0x60,0x5,0x0 RXB0CONbits.RXM0=0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// INTERRUPTS F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Diable transmit interrupt F:\MCP\projects\CAN\canBoot\Source\Main.c00098a 010d MOVLB 0xd TXBIE = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c00098c 6bfc CLRF 0xfc,0x1F:\MCP\projects\CAN\canBoot\Source\Main.c//rx no interrupt F:\MCP\projects\CAN\canBoot\Source\Main.c00098e 6aa4 CLRF 0xa4,0x0 PIR3 = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c000990 6aa3 CLRF 0xa3,0x0 PIE3 = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Programmable no buffers interrupt F:\MCP\projects\CAN\canBoot\Source\Main.c000992 6bfa CLRF 0xfa,0x1 BIE0 = 0x00; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c//loopback mode or not F:\MCP\projects\CAN\canBoot\Source\Main.c#ifdef CAN_LOOPBACK_MODE F:\MCP\projects\CAN\canBoot\Source\Main.cCANCON = 0x40;//request loopback mode F:\MCP\projects\CAN\canBoot\Source\Main.cwhile ((CANSTAT & 0xE0) != 0x40 );//wait for loopback mode F:\MCP\projects\CAN\canBoot\Source\Main.c#else F:\MCP\projects\CAN\canBoot\Source\Main.c000994 6a6f CLRF 0x6f,0x0 CANCON = 0x00;//request normal mode F:\MCP\projects\CAN\canBoot\Source\Main.c000996 0ee0 MOVLW 0xe0 while ((CANSTAT & 0xE0) != 0x00 );//wait for normal mode F:\MCP\projects\CAN\canBoot\Source\Main.c000998 146e ANDWF 0x6e,0x0,0x000099a e001 BZ 0x99e00099c d7fc BRA 0x996#endif F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c00099e 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c/* F:\MCP\projects\CAN\canBoot\Source\Main.c* Function: canGetPacket F:\MCP\projects\CAN\canBoot\Source\Main.c* F:\MCP\projects\CAN\canBoot\Source\Main.c* Input: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Output: none F:\MCP\projects\CAN\canBoot\Source\Main.c* Pre-conditions: a call to canISR and an packet is available and banked to RXB0 F:\MCP\projects\CAN\canBoot\Source\Main.c* Affects: Calls canParse() function in main for parsing received packet. F:\MCP\projects\CAN\canBoot\Source\Main.c* Depends: none. F:\MCP\projects\CAN\canBoot\Source\Main.c*/ F:\MCP\projects\CAN\canBoot\Source\Main.cBOOL canGetPacket() F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Get which buffer that is ful. F:\MCP\projects\CAN\canBoot\Source\Main.c0009a0 0e0f MOVLW 0xf ECANCON=(ECANCON&0b00000)|(0b10000|(CANCON&0x0F)); F:\MCP\projects\CAN\canBoot\Source\Main.c0009a2 146f ANDWF 0x6f,0x0,0x00009a4 0910 IORLW 0x100009a6 6e00 MOVWF 0x0,0x00009a8 0e00 MOVLW 0x00009aa 1477 ANDWF 0x77,0x0,0x00009ac 1000 IORWF 0x0,0x0,0x00009ae 6e77 MOVWF 0x77,0x00009b0 be60 BTFSC 0x60,0x7,0x0 if (!RXB0CONbits.RXFUL) return FALSE; F:\MCP\projects\CAN\canBoot\Source\Main.c0009b2 d002 BRA 0x9b80009b4 0e00 MOVLW 0x00009b6 d08d BRA 0xad2F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0SIDH 28 27 26 25 24 23 22 21 F:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0SIDL 20 19 18 xx xx xx 17 16 F:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0EIDH 15 14 13 12 11 10 09 08 F:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0EIDL 07 06 05 04 03 02 01 00 F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0009b8 0e06 MOVLW 0x6 cp.type = ((RXB0SIDH&0xC)>>6); F:\MCP\projects\CAN\canBoot\Source\Main.c0009ba 6e00 MOVWF 0x0,0x00009bc 0e0c MOVLW 0xc0009be 1461 ANDWF 0x61,0x0,0x00009c0 c000 MOVFF 0x0,0xfe70009c2 ffe70009c4 52e7 MOVF 0xe7,0x1,0x00009c6 e004 BZ 0x9d00009c8 42e8 RRNCF 0xe8,0x1,0x00009ca 0b7f ANDLW 0x7f0009cc 06e7 DECF 0xe7,0x1,0x00009ce e1fc BNZ 0x9c80009d0 0100 MOVLB 0x00009d2 6f60 MOVWF 0x60,0x1F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0009d4 5160 MOVF 0x60,0x0,0x1 if (cp.type==ptBOOT) F:\MCP\projects\CAN\canBoot\Source\Main.c0009d6 e11b BNZ 0xa0e{ F:\MCP\projects\CAN\canBoot\Source\Main.c0009d8 0e38 MOVLW 0x38 cp.boot.type = ((RXB0SIDH&0x38)>>3); F:\MCP\projects\CAN\canBoot\Source\Main.c0009da 1461 ANDWF 0x61,0x0,0x00009dc 40e8 RRNCF 0xe8,0x0,0x00009de 40e8 RRNCF 0xe8,0x0,0x00009e0 40e8 RRNCF 0xe8,0x0,0x00009e2 0b1f ANDLW 0x1f0009e4 6f64 MOVWF 0x64,0x10009e6 0e03 MOVLW 0x3 cp.boot.offset= ((RXB0SIDH&0x7)<<5)+((RXB0SIDL&0xE0)>>3)+(RXB0SIDL&0x3); F:\MCP\projects\CAN\canBoot\Source\Main.c0009e8 1462 ANDWF 0x62,0x0,0x00009ea 6e01 MOVWF 0x1,0x00009ec 0ee0 MOVLW 0xe00009ee 1462 ANDWF 0x62,0x0,0x00009f0 40e8 RRNCF 0xe8,0x0,0x00009f2 40e8 RRNCF 0xe8,0x0,0x00009f4 40e8 RRNCF 0xe8,0x0,0x00009f6 0b1f ANDLW 0x1f0009f8 6e00 MOVWF 0x0,0x00009fa 0e07 MOVLW 0x70009fc 1461 ANDWF 0x61,0x0,0x00009fe 0d20 MULLW 0x20000a00 50f3 MOVF 0xf3,0x0,0x0000a02 2400 ADDWF 0x0,0x0,0x0000a04 2401 ADDWF 0x1,0x0,0x0000a06 6f65 MOVWF 0x65,0x1000a08 cf63 MOVFF 0xf63,0x66 cp.boot.rid = RXB0EIDH; F:\MCP\projects\CAN\canBoot\Source\Main.c000a0a f066} F:\MCP\projects\CAN\canBoot\Source\Main.c000a0c d033 BRA 0xa74 else F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000a0e 0e3c MOVLW 0x3c cp.pgm.class= ((RXB0SIDH&0x3C)>>2); F:\MCP\projects\CAN\canBoot\Source\Main.c000a10 1461 ANDWF 0x61,0x0,0x0000a12 40e8 RRNCF 0xe8,0x0,0x0000a14 40e8 RRNCF 0xe8,0x0,0x0000a16 0b3f ANDLW 0x3f000a18 6f61 MOVWF 0x61,0x1000a1a 0e03 MOVLW 0x3 cp.pgm.id = (((WORD)RXB0SIDH&0x3)<<13)+(((WORD)RXB0SIDL&0xE0)<<5)+(((WORD)RXB0SIDL&0x3)<<8)+(WORD)RXB0EIDH; F:\MCP\projects\CAN\canBoot\Source\Main.c000a1c 1461 ANDWF 0x61,0x0,0x0000a1e 6e04 MOVWF 0x4,0x0000a20 6a05 CLRF 0x5,0x0000a22 3804 SWAPF 0x4,0x0,0x0000a24 6a04 CLRF 0x4,0x0000a26 34e8 RLCF 0xe8,0x0,0x0000a28 0be0 ANDLW 0xe0000a2a 6e05 MOVWF 0x5,0x0000a2c 0ee0 MOVLW 0xe0000a2e 1462 ANDWF 0x62,0x0,0x0000a30 6e06 MOVWF 0x6,0x0000a32 6a07 CLRF 0x7,0x0000a34 0e05 MOVLW 0x5000a36 90d8 BCF 0xd8,0x0,0x0000a38 3606 RLCF 0x6,0x1,0x0000a3a 3607 RLCF 0x7,0x1,0x0000a3c 04e8 DECF 0xe8,0x0,0x0000a3e e1fb BNZ 0xa36000a40 5004 MOVF 0x4,0x0,0x0000a42 2406 ADDWF 0x6,0x0,0x0000a44 6e02 MOVWF 0x2,0x0000a46 5005 MOVF 0x5,0x0,0x0000a48 2007 ADDWFC 0x7,0x0,0x0000a4a 6e03 MOVWF 0x3,0x0000a4c 0e03 MOVLW 0x3000a4e 1462 ANDWF 0x62,0x0,0x0000a50 6e08 MOVWF 0x8,0x0000a52 6a09 CLRF 0x9,0x0000a54 c008 MOVFF 0x8,0x9000a56 f009000a58 6a08 CLRF 0x8,0x0000a5a 5002 MOVF 0x2,0x0,0x0000a5c 2408 ADDWF 0x8,0x0,0x0000a5e 6e00 MOVWF 0x0,0x0000a60 5003 MOVF 0x3,0x0,0x0000a62 2009 ADDWFC 0x9,0x0,0x0000a64 6e01 MOVWF 0x1,0x0000a66 5063 MOVF 0x63,0x0,0x0000a68 0100 MOVLB 0x0000a6a 2400 ADDWF 0x0,0x0,0x0000a6c 6f62 MOVWF 0x62,0x1000a6e 0e00 MOVLW 0x0000a70 2001 ADDWFC 0x1,0x0,0x0000a72 6f63 MOVWF 0x63,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c000a74 cf64 MOVFF 0xf64,0x67 cp.sid = RXB0EIDL; F:\MCP\projects\CAN\canBoot\Source\Main.c000a76 f067F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Data length F:\MCP\projects\CAN\canBoot\Source\Main.c000a78 5065 MOVF 0x65,0x0,0x0 cp.length=(RXB0DLCbits.DLC3<<3)+(RXB0DLCbits.DLC2<<2)+(RXB0DLCbits.DLC1<<1)+RXB0DLCbits.DLC0; F:\MCP\projects\CAN\canBoot\Source\Main.c000a7a 0b01 ANDLW 0x1000a7c 6e02 MOVWF 0x2,0x0000a7e 5065 MOVF 0x65,0x0,0x0000a80 0b02 ANDLW 0x2000a82 e001 BZ 0xa86000a84 0e01 MOVLW 0x1000a86 24e8 ADDWF 0xe8,0x0,0x0000a88 6e01 MOVWF 0x1,0x0000a8a 5065 MOVF 0x65,0x0,0x0000a8c 0b04 ANDLW 0x4000a8e e001 BZ 0xa92000a90 0e01 MOVLW 0x1000a92 0d04 MULLW 0x4000a94 cff3 MOVFF 0xff3,0x0000a96 f000000a98 5065 MOVF 0x65,0x0,0x0000a9a 0b08 ANDLW 0x8000a9c e001 BZ 0xaa0000a9e 0e01 MOVLW 0x1000aa0 0d08 MULLW 0x8000aa2 50f3 MOVF 0xf3,0x0,0x0000aa4 2400 ADDWF 0x0,0x0,0x0000aa6 2401 ADDWF 0x1,0x0,0x0000aa8 2402 ADDWF 0x2,0x0,0x0000aaa 6f68 MOVWF 0x68,0x1F:\MCP\projects\CAN\canBoot\Source\Main.c// Data one bye one, for speed F:\MCP\projects\CAN\canBoot\Source\Main.c000aac cf66 MOVFF 0xf66,0x69 cp.data[0]=RXB0D0; cp.data[1]=RXB0D1; F:\MCP\projects\CAN\canBoot\Source\Main.c000aae f069000ab0 cf67 MOVFF 0xf67,0x6a000ab2 f06a000ab4 cf68 MOVFF 0xf68,0x6b cp.data[2]=RXB0D2; cp.data[3]=RXB0D3; F:\MCP\projects\CAN\canBoot\Source\Main.c000ab6 f06b000ab8 cf69 MOVFF 0xf69,0x6c000aba f06c000abc cf6a MOVFF 0xf6a,0x6d cp.data[4]=RXB0D4; cp.data[5]=RXB0D5; F:\MCP\projects\CAN\canBoot\Source\Main.c000abe f06d000ac0 cf6b MOVFF 0xf6b,0x6e000ac2 f06e000ac4 cf6c MOVFF 0xf6c,0x6f cp.data[6]=RXB0D6; cp.data[7]=RXB0D7; F:\MCP\projects\CAN\canBoot\Source\Main.c000ac6 f06f000ac8 cf6d MOVFF 0xf6d,0x70000aca f070F:\MCP\projects\CAN\canBoot\Source\Main.c// Clear ful status F:\MCP\projects\CAN\canBoot\Source\Main.c000acc 9e60 BCF 0x60,0x7,0x0 RXB0CONbits.RXFUL=0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000ace 0e01 MOVLW 0x1 return TRUE; F:\MCP\projects\CAN\canBoot\Source\Main.c000ad0 d000 BRA 0xad2000ad2 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c/* F:\MCP\projects\CAN\canBoot\Source\Main.c* Function: canSendMessage F:\MCP\projects\CAN\canBoot\Source\Main.c* F:\MCP\projects\CAN\canBoot\Source\Main.c* Input: CAN_MESSAGE to send F:\MCP\projects\CAN\canBoot\Source\Main.c* Output: True if packet scheduled sucess, false otherwise. F:\MCP\projects\CAN\canBoot\Source\Main.c* Pre-conditions: canInit F:\MCP\projects\CAN\canBoot\Source\Main.c* Affects: .. F:\MCP\projects\CAN\canBoot\Source\Main.c* Depends: .. F:\MCP\projects\CAN\canBoot\Source\Main.c*/ F:\MCP\projects\CAN\canBoot\Source\Main.c000ad4 cfd9 MOVFF 0xfd9,0xfe6 BOOL canSendMessage(CAN_PACKET cp) F:\MCP\projects\CAN\canBoot\Source\Main.c000ad6 ffe6000ad8 cfe1 MOVFF 0xfe1,0xfd9000ada ffd9000adc 52e6 MOVF 0xe6,0x1,0x0{ F:\MCP\projects\CAN\canBoot\Source\Main.c000ade 0e03 MOVLW 0x3 BYTE prio = 3; F:\MCP\projects\CAN\canBoot\Source\Main.c000ae0 6edf MOVWF 0xdf,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c000ae2 010f MOVLB 0xf if ( TXB0CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00011; } F:\MCP\projects\CAN\canBoot\Source\Main.c000ae4 b740 BTFSC 0x40,0x3,0x1000ae6 d004 BRA 0xaf0000ae8 0e00 MOVLW 0x0000aea 1477 ANDWF 0x77,0x0,0x0000aec 0903 IORLW 0x3000aee 6e77 MOVWF 0x77,0x0000af0 010f MOVLB 0xf if ( TXB1CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00100; } F:\MCP\projects\CAN\canBoot\Source\Main.c000af2 b730 BTFSC 0x30,0x3,0x1000af4 d004 BRA 0xafe000af6 0e00 MOVLW 0x0000af8 1477 ANDWF 0x77,0x0,0x0000afa 0904 IORLW 0x4000afc 6e77 MOVWF 0x77,0x0000afe 010f MOVLB 0xf if ( TXB2CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00101; } F:\MCP\projects\CAN\canBoot\Source\Main.c000b00 b720 BTFSC 0x20,0x3,0x1000b02 d005 BRA 0xb0e000b04 0e00 MOVLW 0x0000b06 1477 ANDWF 0x77,0x0,0x0000b08 0905 IORLW 0x5000b0a 6e77 MOVWF 0x77,0x0// None of the transmit buffers were empty. F:\MCP\projects\CAN\canBoot\Source\Main.c000b0c d002 BRA 0xb12 else { return FALSE;} F:\MCP\projects\CAN\canBoot\Source\Main.c000b0e 0e00 MOVLW 0x0000b10 d0a4 BRA 0xc5aF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0SIDH 28 27 26 25 24 23 22 21 F:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0SIDL 20 19 18 xx xx xx 17 16 F:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0EIDH 15 14 13 12 11 10 09 08 F:\MCP\projects\CAN\canBoot\Source\Main.c//RXB0EIDL 07 06 05 04 03 02 01 00 F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000b12 0eee MOVLW 0xee if (cp.type==ptBOOT) F:\MCP\projects\CAN\canBoot\Source\Main.c000b14 50db MOVF 0xdb,0x0,0x0000b16 e124 BNZ 0xb60{ F:\MCP\projects\CAN\canBoot\Source\Main.c000b18 0ef3 MOVLW 0xf3 RXB0SIDH = ((cp.type&0x3)<<6)+((cp.boot.type&0x7)<<3)+((cp.boot.offset&0xE0)>>5); F:\MCP\projects\CAN\canBoot\Source\Main.c000b1a 50db MOVF 0xdb,0x0,0x0000b1c 0be0 ANDLW 0xe0000b1e 0be0 ANDLW 0xe0000b20 38e8 SWAPF 0xe8,0x0,0x0000b22 40e8 RRNCF 0xe8,0x0,0x0000b24 6e01 MOVWF 0x1,0x0000b26 0ef2 MOVLW 0xf2000b28 50db MOVF 0xdb,0x0,0x0000b2a 0b07 ANDLW 0x7000b2c 0d08 MULLW 0x8000b2e cff3 MOVFF 0xff3,0x0000b30 f000000b32 0eee MOVLW 0xee000b34 50db MOVF 0xdb,0x0,0x0000b36 0b03 ANDLW 0x3000b38 0d40 MULLW 0x40000b3a 50f3 MOVF 0xf3,0x0,0x0000b3c 2400 ADDWF 0x0,0x0,0x0000b3e 2401 ADDWF 0x1,0x0,0x0000b40 6e61 MOVWF 0x61,0x0000b42 0ef3 MOVLW 0xf3 RXB0SIDL = ((cp.boot.offset&0x1C)<<3)+(cp.boot.offset&0x3); F:\MCP\projects\CAN\canBoot\Source\Main.c000b44 50db MOVF 0xdb,0x0,0x0000b46 0b03 ANDLW 0x3000b48 6e00 MOVWF 0x0,0x0000b4a 0ef3 MOVLW 0xf3000b4c 50db MOVF 0xdb,0x0,0x0000b4e 0b1c ANDLW 0x1c000b50 0d08 MULLW 0x8000b52 50f3 MOVF 0xf3,0x0,0x0000b54 2400 ADDWF 0x0,0x0,0x0000b56 6e62 MOVWF 0x62,0x0000b58 0ef4 MOVLW 0xf4 RXB0EIDH = cp.boot.rid; F:\MCP\projects\CAN\canBoot\Source\Main.c000b5a 50db MOVF 0xdb,0x0,0x0000b5c 6e63 MOVWF 0x63,0x0} F:\MCP\projects\CAN\canBoot\Source\Main.c000b5e d04f BRA 0xbfe else F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000b60 0eef MOVLW 0xef RXB0SIDH = ((cp.type&0x3)<<6)+((cp.pgm.class&0xF)<<2)+((cp.pgm.id&0x6000)>>13); F:\MCP\projects\CAN\canBoot\Source\Main.c000b62 50db MOVF 0xdb,0x0,0x0000b64 0b0f ANDLW 0xf000b66 0d04 MULLW 0x4000b68 cff3 MOVFF 0xff3,0x2000b6a f002000b6c 0eee MOVLW 0xee000b6e 50db MOVF 0xdb,0x0,0x0000b70 0b03 ANDLW 0x3000b72 0d40 MULLW 0x40000b74 50f3 MOVF 0xf3,0x0,0x0000b76 2402 ADDWF 0x2,0x0,0x0000b78 6e00 MOVWF 0x0,0x0000b7a 6a01 CLRF 0x1,0x0000b7c be00 BTFSC 0x0,0x7,0x0000b7e 6801 SETF 0x1,0x0000b80 0ef0 MOVLW 0xf0000b82 cfdb MOVFF 0xfdb,0x3000b84 f003000b86 0ef1 MOVLW 0xf1000b88 cfdb MOVFF 0xfdb,0x4000b8a f004000b8c 0e00 MOVLW 0x0000b8e 1603 ANDWF 0x3,0x1,0x0000b90 0e60 MOVLW 0x60000b92 1604 ANDWF 0x4,0x1,0x0000b94 3804 SWAPF 0x4,0x0,0x0000b96 6a04 CLRF 0x4,0x0000b98 30e8 RRCF 0xe8,0x0,0x0000b9a 0b07 ANDLW 0x7000b9c 6e03 MOVWF 0x3,0x0000b9e 5000 MOVF 0x0,0x0,0x0000ba0 2403 ADDWF 0x3,0x0,0x0000ba2 6e61 MOVWF 0x61,0x0000ba4 0ef0 MOVLW 0xf0 RXB0SIDL = ((cp.pgm.id&0x1C00)>>5)+((cp.pgm.id&0x300)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000ba6 cfdb MOVFF 0xfdb,0x0000ba8 f000000baa 0ef1 MOVLW 0xf1000bac cfdb MOVFF 0xfdb,0x1000bae f001000bb0 0e00 MOVLW 0x0000bb2 1600 ANDWF 0x0,0x1,0x0000bb4 0e1c MOVLW 0x1c000bb6 1601 ANDWF 0x1,0x1,0x0000bb8 0e05 MOVLW 0x5000bba 90d8 BCF 0xd8,0x0,0x0000bbc 3201 RRCF 0x1,0x1,0x0000bbe 3200 RRCF 0x0,0x1,0x0000bc0 04e8 DECF 0xe8,0x0,0x0000bc2 e1fb BNZ 0xbba000bc4 0ef0 MOVLW 0xf0000bc6 cfdb MOVFF 0xfdb,0x2000bc8 f002000bca 0ef1 MOVLW 0xf1000bcc cfdb MOVFF 0xfdb,0x3000bce f003000bd0 0e00 MOVLW 0x0000bd2 1602 ANDWF 0x2,0x1,0x0000bd4 0e03 MOVLW 0x3000bd6 1603 ANDWF 0x3,0x1,0x0000bd8 c003 MOVFF 0x3,0x2000bda f002000bdc 6a03 CLRF 0x3,0x0000bde 5000 MOVF 0x0,0x0,0x0000be0 2402 ADDWF 0x2,0x0,0x0000be2 6e62 MOVWF 0x62,0x0000be4 0eff MOVLW 0xff RXB0EIDH = (cp.pgm.id&0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c000be6 6ee7 MOVWF 0xe7,0x0000be8 0ef0 MOVLW 0xf0000bea cfdb MOVFF 0xfdb,0x0000bec f000000bee 0ef1 MOVLW 0xf1000bf0 cfdb MOVFF 0xfdb,0x1000bf2 f001000bf4 50e7 MOVF 0xe7,0x0,0x0000bf6 1600 ANDWF 0x0,0x1,0x0000bf8 6a01 CLRF 0x1,0x0000bfa 5000 MOVF 0x0,0x0,0x0000bfc 6e63 MOVWF 0x63,0x0} F:\MCP\projects\CAN\canBoot\Source\Main.c000bfe c0c1 MOVFF 0xc1,0xf64 RXB0EIDL = MY_ID; F:\MCP\projects\CAN\canBoot\Source\Main.c000c00 ff64F:\MCP\projects\CAN\canBoot\Source\Main.c// Data length F:\MCP\projects\CAN\canBoot\Source\Main.c000c02 6a65 CLRF 0x65,0x0 RXB0DLC = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c000c04 0ef6 MOVLW 0xf6 if (cp.length>8) RXB0DLC=8; else RXB0DLC=cp.length; F:\MCP\projects\CAN\canBoot\Source\Main.c000c06 50db MOVF 0xdb,0x0,0x0000c08 0808 SUBLW 0x8000c0a e203 BC 0xc12000c0c 0e08 MOVLW 0x8000c0e 6e65 MOVWF 0x65,0x0000c10 d003 BRA 0xc18000c12 0ef6 MOVLW 0xf6000c14 50db MOVF 0xdb,0x0,0x0000c16 6e65 MOVWF 0x65,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// NOT Remote request F:\MCP\projects\CAN\canBoot\Source\Main.c_asm F:\MCP\projects\CAN\canBoot\Source\Main.c000c18 9c65 BCF 0x65,0x6,0x0 bcf RXB0DLC, 6, 0 F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Data one bye one, for speed F:\MCP\projects\CAN\canBoot\Source\Main.c000c1a 0ef7 MOVLW 0xf7 RXB0D0=cp.data[0]; RXB0D1=cp.data[1]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c1c 50db MOVF 0xdb,0x0,0x0000c1e 6e66 MOVWF 0x66,0x0000c20 0ef8 MOVLW 0xf8000c22 50db MOVF 0xdb,0x0,0x0000c24 6e67 MOVWF 0x67,0x0000c26 0ef9 MOVLW 0xf9 RXB0D2=cp.data[2]; RXB0D3=cp.data[3]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c28 50db MOVF 0xdb,0x0,0x0000c2a 6e68 MOVWF 0x68,0x0000c2c 0efa MOVLW 0xfa000c2e 50db MOVF 0xdb,0x0,0x0000c30 6e69 MOVWF 0x69,0x0000c32 0efb MOVLW 0xfb RXB0D4=cp.data[4]; RXB0D5=cp.data[5]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c34 50db MOVF 0xdb,0x0,0x0000c36 6e6a MOVWF 0x6a,0x0000c38 0efc MOVLW 0xfc000c3a 50db MOVF 0xdb,0x0,0x0000c3c 6e6b MOVWF 0x6b,0x0000c3e 0efd MOVLW 0xfd RXB0D6=cp.data[6]; RXB0D7=cp.data[7]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c40 50db MOVF 0xdb,0x0,0x0000c42 6e6c MOVWF 0x6c,0x0000c44 0efe MOVLW 0xfe000c46 50db MOVF 0xdb,0x0,0x0000c48 6e6d MOVWF 0x6d,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// set extended or not F:\MCP\projects\CAN\canBoot\Source\Main.c000c4a 8662 BSF 0x62,0x3,0x0 RXB0SIDLbits.EXID=1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Priority F:\MCP\projects\CAN\canBoot\Source\Main.c000c4c 0efc MOVLW 0xfc RXB0CON = (RXB0CON & 0b11111100) | prio; F:\MCP\projects\CAN\canBoot\Source\Main.c000c4e 1460 ANDWF 0x60,0x0,0x0000c50 10df IORWF 0xdf,0x0,0x0000c52 6e60 MOVWF 0x60,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// mark as redy to transmit F:\MCP\projects\CAN\canBoot\Source\Main.c_asm F:\MCP\projects\CAN\canBoot\Source\Main.c000c54 8660 BSF 0x60,0x3,0x0 bsf RXB0CON, 3, 0 F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000c56 0e01 MOVLW 0x1 return TRUE; F:\MCP\projects\CAN\canBoot\Source\Main.c000c58 d000 BRA 0xc5aF:\MCP\projects\CAN\canBoot\Source\Main.c000c5a 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.c000c5c 52e5 MOVF 0xe5,0x1,0x0000c5e cfe7 MOVFF 0xfe7,0xfd9000c60 ffd9000c62 0012 RETURN 0x0F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cvoid TBLRD_Func() F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c_asm F:\MCP\projects\CAN\canBoot\Source\Main.c000c64 0008 TBLRD TBLRD F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.c000c66 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cvoid TBLWT_Func() F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c_asm F:\MCP\projects\CAN\canBoot\Source\Main.c000c68 000c TBLWT TBLWT F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.c000c6a 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cvoid TBLWTPOSTINC_Func (void){ F:\MCP\projects\CAN\canBoot\Source\Main.c_asm F:\MCP\projects\CAN\canBoot\Source\Main.c000c6c 000d TBLWTPOSTINC TBLWTPOSTINC F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.c000c6e 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cDWORD tickGet() F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000c70 c0b9 MOVFF 0xb9,0x10 return tickCounter; F:\MCP\projects\CAN\canBoot\Source\Main.c000c72 f010000c74 c0ba MOVFF 0xba,0x11000c76 f011000c78 c0bb MOVFF 0xbb,0x12000c7a f012000c7c c0bc MOVFF 0xbc,0x13000c7e f013000c80 d000 BRA 0xc82000c82 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c#pragma code user = RM_RESET_VECTOR F:\MCP\projects\CAN\canBoot\Source\Main.c/********************************************************************* F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c* Functions for reading and writing to EEPROM. F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c********************************************************************* F:\MCP\projects\CAN\Include\EEAccess.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/Include/EEAccess.c $ F:\MCP\projects\CAN\Include\EEAccess.c* Last changed: $LastChangedDate: 2006-11-20 21:31:03 +0100 (må, 20 nov 2006) $ F:\MCP\projects\CAN\Include\EEAccess.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\Include\EEAccess.c* Revision: $Revision: 139 $ F:\MCP\projects\CAN\Include\EEAccess.c********************************************************************/ F:\MCP\projects\CAN\Include\EEAccess.c#include <p18cxxx.h> F:\MCP\projects\CAN\Include\EEAccess.c#include <EEaccess.h> F:\MCP\projects\CAN\Include\EEAccess.cF:\MCP\projects\CAN\Include\EEAccess.c/* F:\MCP\projects\CAN\Include\EEAccess.c* Function: EERead F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c* Input: WORD address to read from. F:\MCP\projects\CAN\Include\EEAccess.c* Output: Byte read. F:\MCP\projects\CAN\Include\EEAccess.c* Pre-conditions: none F:\MCP\projects\CAN\Include\EEAccess.c* Affects: none. F:\MCP\projects\CAN\Include\EEAccess.c* Depends: none. F:\MCP\projects\CAN\Include\EEAccess.c*/ F:\MCP\projects\CAN\Include\EEAccess.c000e2c cfd9 MOVFF 0xfd9,0xfe6 BYTE EERead(WORD addr) F:\MCP\projects\CAN\Include\EEAccess.c000e2e ffe6000e30 cfe1 MOVFF 0xfe1,0xfd9000e32 ffd9{ F:\MCP\projects\CAN\Include\EEAccess.c000e34 0efd MOVLW 0xfd EEADRH=(BYTE)(addr>>8); F:\MCP\projects\CAN\Include\EEAccess.c000e36 cfdb MOVFF 0xfdb,0x0000e38 f000000e3a 0efe MOVLW 0xfe000e3c cfdb MOVFF 0xfdb,0x1000e3e f001000e40 c001 MOVFF 0x1,0x0000e42 f000000e44 6a01 CLRF 0x1,0x0000e46 5000 MOVF 0x0,0x0,0x0000e48 6eaa MOVWF 0xaa,0x0000e4a 0eff MOVLW 0xff EEADR=(BYTE)(addr & 0xFF); F:\MCP\projects\CAN\Include\EEAccess.c000e4c 6ee7 MOVWF 0xe7,0x0000e4e 0efd MOVLW 0xfd000e50 cfdb MOVFF 0xfdb,0x0000e52 f000000e54 0efe MOVLW 0xfe000e56 cfdb MOVFF 0xfdb,0x1000e58 f001000e5a 50e7 MOVF 0xe7,0x0,0x0000e5c 1600 ANDWF 0x0,0x1,0x0000e5e 6a01 CLRF 0x1,0x0000e60 5000 MOVF 0x0,0x0,0x0000e62 6ea9 MOVWF 0xa9,0x0000e64 9ea6 BCF 0xa6,0x7,0x0 EECON1bits.EEPGD=0; F:\MCP\projects\CAN\Include\EEAccess.c000e66 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS=0; F:\MCP\projects\CAN\Include\EEAccess.c000e68 80a6 BSF 0xa6,0x0,0x0 EECON1bits.RD=1; F:\MCP\projects\CAN\Include\EEAccess.c000e6a 50a8 MOVF 0xa8,0x0,0x0 return EEDATA; F:\MCP\projects\CAN\Include\EEAccess.c000e6c d000 BRA 0xe6e000e6e 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\Include\EEAccess.c000e70 cfe7 MOVFF 0xfe7,0xfd9000e72 ffd9000e74 0012 RETURN 0x0F:\MCP\projects\CAN\Include\EEAccess.cF:\MCP\projects\CAN\Include\EEAccess.c/* F:\MCP\projects\CAN\Include\EEAccess.c* Function: EEWrite F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c* Input: WORD address to write to and BYTE data to write. F:\MCP\projects\CAN\Include\EEAccess.c* Output: none. F:\MCP\projects\CAN\Include\EEAccess.c* Pre-conditions: none F:\MCP\projects\CAN\Include\EEAccess.c* Affects: none. F:\MCP\projects\CAN\Include\EEAccess.c* Depends: none. F:\MCP\projects\CAN\Include\EEAccess.c*/ F:\MCP\projects\CAN\Include\EEAccess.c000e76 cfd9 MOVFF 0xfd9,0xfe6 void EEWrite(WORD addr,BYTE data) F:\MCP\projects\CAN\Include\EEAccess.c000e78 ffe6000e7a cfe1 MOVFF 0xfe1,0xfd9000e7c ffd9{ F:\MCP\projects\CAN\Include\EEAccess.c000e7e 98a1 BCF 0xa1,0x4,0x0 PIR2bits.EEIF=0; F:\MCP\projects\CAN\Include\EEAccess.c000e80 0efd MOVLW 0xfd EEADRH=(BYTE)(addr>>8); F:\MCP\projects\CAN\Include\EEAccess.c000e82 cfdb MOVFF 0xfdb,0x0000e84 f000000e86 0efe MOVLW 0xfe000e88 cfdb MOVFF 0xfdb,0x1000e8a f001000e8c c001 MOVFF 0x1,0x0000e8e f000000e90 6a01 CLRF 0x1,0x0000e92 5000 MOVF 0x0,0x0,0x0000e94 6eaa MOVWF 0xaa,0x0000e96 0eff MOVLW 0xff EEADR=(BYTE)(addr & 0xFF); F:\MCP\projects\CAN\Include\EEAccess.c000e98 6ee7 MOVWF 0xe7,0x0000e9a 0efd MOVLW 0xfd000e9c cfdb MOVFF 0xfdb,0x0000e9e f000000ea0 0efe MOVLW 0xfe000ea2 cfdb MOVFF 0xfdb,0x1000ea4 f001000ea6 50e7 MOVF 0xe7,0x0,0x0000ea8 1600 ANDWF 0x0,0x1,0x0000eaa 6a01 CLRF 0x1,0x0000eac 5000 MOVF 0x0,0x0,0x0000eae 6ea9 MOVWF 0xa9,0x0000eb0 0efc MOVLW 0xfc EEDATA=data; F:\MCP\projects\CAN\Include\EEAccess.c000eb2 50db MOVF 0xdb,0x0,0x0000eb4 6ea8 MOVWF 0xa8,0x0000eb6 9ea6 BCF 0xa6,0x7,0x0 EECON1bits.EEPGD=0; F:\MCP\projects\CAN\Include\EEAccess.c000eb8 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS=0; F:\MCP\projects\CAN\Include\EEAccess.c000eba 84a6 BSF 0xa6,0x2,0x0 EECON1bits.WREN=1; F:\MCP\projects\CAN\Include\EEAccess.c000ebc 9ef2 BCF 0xf2,0x7,0x0 INTCONbits.GIE=0; F:\MCP\projects\CAN\Include\EEAccess.c000ebe 0e55 MOVLW 0x55 EECON2=0x55; F:\MCP\projects\CAN\Include\EEAccess.c000ec0 6ea7 MOVWF 0xa7,0x0000ec2 0eaa MOVLW 0xaa EECON2=0xAA; F:\MCP\projects\CAN\Include\EEAccess.c000ec4 6ea7 MOVWF 0xa7,0x0000ec6 82a6 BSF 0xa6,0x1,0x0 EECON1bits.WR=1; F:\MCP\projects\CAN\Include\EEAccess.c000ec8 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIE=1; F:\MCP\projects\CAN\Include\EEAccess.c000eca a8a1 BTFSS 0xa1,0x4,0x0 while(!PIR2bits.EEIF); F:\MCP\projects\CAN\Include\EEAccess.c000ecc d7fe BRA 0xeca000ece 94a6 BCF 0xa6,0x2,0x0 EECON1bits.WREN=0; F:\MCP\projects\CAN\Include\EEAccess.c000ed0 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\Include\EEAccess.c000ed2 cfe7 MOVFF 0xfe7,0xfd9000ed4 ffd9000ed6 0012 RETURN 0x0/* $Id: statrst.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\statrst.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\statrst.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\statrst.cE:\Program\MCC18\src\traditional\pmc\reset\statrst.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\statrst.c* Function Name: StatusReset * E:\Program\MCC18\src\traditional\pmc\reset\statrst.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\statrst.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\statrst.c* Description: This routine resets the POR and BOR bits. * E:\Program\MCC18\src\traditional\pmc\reset\statrst.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\statrst.cvoid StatusReset(void) E:\Program\MCC18\src\traditional\pmc\reset\statrst.c{ E:\Program\MCC18\src\traditional\pmc\reset\statrst.c00108e 82d0 BSF 0xd0,0x1,0x0 RCONbits.NOT_POR = 1; // Reset POR bit E:\Program\MCC18\src\traditional\pmc\reset\statrst.c// If BOR enabled E:\Program\MCC18\src\traditional\pmc\reset\statrst.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\statrst.c001090 80d0 BSF 0xd0,0x0,0x0 RCONbits.NOT_BOR = 1; // Reset BOR bit E:\Program\MCC18\src\traditional\pmc\reset\statrst.c#endif E:\Program\MCC18\src\traditional\pmc\reset\statrst.c001092 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\statrst.cE:\Program\MCC18\src\traditional\pmc\reset\statrst.c/* $Id: isbor.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\isbor.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\isbor.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\isbor.cE:\Program\MCC18\src\traditional\pmc\reset\isbor.c// Only if Brown-out Reset is enabled E:\Program\MCC18\src\traditional\pmc\reset\isbor.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\isbor.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\isbor.c* Function Name: isBOR * E:\Program\MCC18\src\traditional\pmc\reset\isbor.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\isbor.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\isbor.c* Description: This routine checks to see if a BOR occurred* E:\Program\MCC18\src\traditional\pmc\reset\isbor.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\isbor.cchar isBOR(void) E:\Program\MCC18\src\traditional\pmc\reset\isbor.c{ E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001068 b0d0 BTFSC 0xd0,0x0,0x0 if(!RCONbits.NOT_BOR) // If BOR is clear E:\Program\MCC18\src\traditional\pmc\reset\isbor.c00106a d006 BRA 0x1078{ E:\Program\MCC18\src\traditional\pmc\reset\isbor.c00106c b2d0 BTFSC 0xd0,0x1,0x0 if(!RCONbits.NOT_POR) // And POR is clear E:\Program\MCC18\src\traditional\pmc\reset\isbor.c00106e d002 BRA 0x1074001070 0e00 MOVLW 0x0 return 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001072 d004 BRA 0x107c001074 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001076 d002 BRA 0x107c} E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001078 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\isbor.c00107a d000 BRA 0x107c00107c 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\isbor.c#endif E:\Program\MCC18\src\traditional\pmc\reset\isbor.c/* $Id: islvd.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\islvd.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\islvd.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\islvd.cE:\Program\MCC18\src\traditional\pmc\reset\islvd.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\islvd.c* Function Name: isLVD * E:\Program\MCC18\src\traditional\pmc\reset\islvd.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\islvd.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\islvd.c* Description: This routine determines if a low voltage * E:\Program\MCC18\src\traditional\pmc\reset\islvd.c* condition occurred. * E:\Program\MCC18\src\traditional\pmc\reset\islvd.c*********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\islvd.cchar isLVD() E:\Program\MCC18\src\traditional\pmc\reset\islvd.c{ E:\Program\MCC18\src\traditional\pmc\reset\islvd.c00107e a4a1 BTFSS 0xa1,0x2,0x0 if(PIR2bits.LVDIF) E:\Program\MCC18\src\traditional\pmc\reset\islvd.c001080 d003 BRA 0x1088001082 0e01 MOVLW 0x1 return 1; E:\Program\MCC18\src\traditional\pmc\reset\islvd.c001084 d003 BRA 0x108c001086 d002 BRA 0x108c else E:\Program\MCC18\src\traditional\pmc\reset\islvd.c001088 0e00 MOVLW 0x0 return 0; E:\Program\MCC18\src\traditional\pmc\reset\islvd.c00108a d000 BRA 0x108c00108c 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\islvd.c/* $Id: ismclr.c,v 1.2 2005/06/28 19:04:36 nairnj Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(__18C242) || defined(__18C252) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18C442) || defined(__18C452) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18C658) || defined(__18C858) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F1220) || defined(__18F1320) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F242) || defined(__18F2439) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F2455) || defined(__18F248) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F252) || defined(__18F2539) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F2550) || defined(__18F258) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F442) || defined(__18F4439) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F4455) || defined(__18F448) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F452) || defined(__18F4539) || \ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cdefined(__18F4550) || defined(__18F458) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#define STKOVF STKFUL E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c* Function Name: isMCLR * E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c* Description: This routine checks to see if a MCLR induced* E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c* reset occurred. * E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.cchar isMCLR(void) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c{ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f76 a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // If POR is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f78 d01a BRA 0xfae{ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f7a a4d0 BTFSS 0xd0,0x2,0x0 if(RCONbits.NOT_PD) // If NOT_PD is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f7c d016 BRA 0xfaa{ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c// If BOR is enabled E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f7e a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // If BOR is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f80 d012 BRA 0xfa6{ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c// If BOR and WDT are enabled E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f82 b6d0 BTFSC 0xd0,0x3,0x0 if(!RCONbits.NOT_TO) // If TO is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f84 d002 BRA 0xf8a000f86 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f88 d014 BRA 0xfb2#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f8a b8d0 BTFSC 0xd0,0x4,0x0 if(!RCONbits.NOT_RI) // If RI is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f8c d002 BRA 0xf92000f8e 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f90 d010 BRA 0xfb2E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(STVR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f92 aefc BTFSS 0xfc,0x7,0x0 if(STKPTRbits.STKOVF) // If STKOVF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f94 d002 BRA 0xf9a000f96 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f98 d00c BRA 0xfb2E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f9a acfc BTFSS 0xfc,0x6,0x0 if(STKPTRbits.STKUNF) // If STKUNF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f9c d002 BRA 0xfa2000f9e 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fa0 d008 BRA 0xfb2#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fa2 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fa4 d006 BRA 0xfb2} E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fa6 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fa8 d004 BRA 0xfb2// BOR is disabled E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#else E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c// If WDT is enabled E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(!RCONbits.NOT_TO) // If TO is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(!RCONbits.NOT_RI) // If RI is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(STVR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(STKPTRbits.STKOVF) // If STKOVF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(STKPTRbits.STKUNF) // If STKUNF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c// BOR and WDT are disabled E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#else E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(!RCONbits.NOT_RI) // If RI is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(STVR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(STKPTRbits.STKOVF) // If STKOVF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.cif(STKPTRbits.STKUNF) // If STKUNF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c} E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000faa 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fac d002 BRA 0xfb2} E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fae 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000fb0 d000 BRA 0xfb2000fb2 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c/* $Id: ispor.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\ispor.cE:\Program\MCC18\src\traditional\pmc\reset\ispor.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\ispor.c* Function Name: isPOR * E:\Program\MCC18\src\traditional\pmc\reset\ispor.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\ispor.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\ispor.c* Description: This routine checks to see if a POR occurred* E:\Program\MCC18\src\traditional\pmc\reset\ispor.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\ispor.cchar isPOR(void) E:\Program\MCC18\src\traditional\pmc\reset\ispor.c{ E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001026 b2d0 BTFSC 0xd0,0x1,0x0 if(!RCONbits.NOT_POR) // If POR cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001028 d00e BRA 0x1046{ E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00102a a4d0 BTFSS 0xd0,0x2,0x0 if(RCONbits.NOT_PD) // If PD set E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00102c d00a BRA 0x1042{ E:\Program\MCC18\src\traditional\pmc\reset\ispor.c// If BOR is enabled E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00102e b0d0 BTFSC 0xd0,0x0,0x0 if(!RCONbits.NOT_BOR) // If BOR cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001030 d006 BRA 0x103e{ E:\Program\MCC18\src\traditional\pmc\reset\ispor.c// if BOR and WDT are enabled E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001032 b6d0 BTFSC 0xd0,0x3,0x0 if(!RCONbits.NOT_TO) // If TO cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001034 d002 BRA 0x103a001036 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001038 d008 BRA 0x104a#endif E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00103a 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00103c d006 BRA 0x104a} E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00103e 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001040 d004 BRA 0x104a// BOR is disabled E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#else E:\Program\MCC18\src\traditional\pmc\reset\ispor.c// If WDT is enabled E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ispor.cif(!RCONbits.NOT_TO) // If TO cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.creturn 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#else E:\Program\MCC18\src\traditional\pmc\reset\ispor.c// Otherwise BOR and WDT are disabled E:\Program\MCC18\src\traditional\pmc\reset\ispor.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ispor.c#endif E:\Program\MCC18\src\traditional\pmc\reset\ispor.c} E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001042 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001044 d002 BRA 0x104a} E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001046 0e00 MOVLW 0x0 return 0x00; E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001048 d000 BRA 0x104a00104a 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\ispor.cE:\Program\MCC18\src\traditional\pmc\reset\ispor.c/* $Id: iswdtto.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c* Function Name: isWDTTO * E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c* Description: This routine checks to see if a WDT timeout * E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c* has occurred during normal operation. * E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c// If WDT is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtto.cchar isWDTTO(void) E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001000 a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // if POR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001002 d00e BRA 0x1020{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001004 a4d0 BTFSS 0xd0,0x2,0x0 if(RCONbits.NOT_PD) // if NOT_PD is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001006 d00a BRA 0x101c{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c// If BOR is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001008 a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // if BOR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00100a d006 BRA 0x1018{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00100c a6d0 BTFSS 0xd0,0x3,0x0 if(RCONbits.NOT_TO) // if TO is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00100e d002 BRA 0x1014001010 0e00 MOVLW 0x0 return 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001012 d008 BRA 0x1024001014 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001016 d006 BRA 0x1024} E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001018 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00101a d004 BRA 0x1024// BOR is disabled E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#else E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.cif(RCONbits.NOT_TO) // if TO is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.creturn 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#endif E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c} E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00101c 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00101e d002 BRA 0x1024} E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001020 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001022 d000 BRA 0x1024001024 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c#endif E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c/* $Id: iswdtwu.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c* Function Name: isWDTWU * E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c* Description: This routine checks to see if a WDT wakeup * E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c* from sleep has occurred. * E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c// If WDT is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.cchar isWDTWU(void) E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fda a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // if POR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fdc d00e BRA 0xffa{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fde b4d0 BTFSC 0xd0,0x2,0x0 if(!RCONbits.NOT_PD) // if NOT_PD is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe0 d00a BRA 0xff6{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c// If BOR is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe2 a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // if BOR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe4 d006 BRA 0xff2{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe6 a6d0 BTFSS 0xd0,0x3,0x0 if(RCONbits.NOT_TO) // if TO is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe8 d002 BRA 0xfee000fea 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fec d008 BRA 0xffe000fee 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ff0 d006 BRA 0xffe} E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ff2 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ff4 d004 BRA 0xffe// BOR is disabled E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#else E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.cif(RCONbits.NOT_TO) // If NOT_TO is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.creturn 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#endif E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c} E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ff6 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ff8 d002 BRA 0xffe} E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ffa 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000ffc d000 BRA 0xffe000ffe 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c#endif E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.cE:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c/* $Id: iswu.c,v 1.1 2003/12/09 22:52:09 GrosbaJ Exp $ */ E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#include <p18cxxx.h> E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#include <reset.h> E:\Program\MCC18\src\traditional\pmc\reset\iswu.cE:\Program\MCC18\src\traditional\pmc\reset\iswu.c/******************************************************************** E:\Program\MCC18\src\traditional\pmc\reset\iswu.c* Function Name: isWU * E:\Program\MCC18\src\traditional\pmc\reset\iswu.c* Return Value: char * E:\Program\MCC18\src\traditional\pmc\reset\iswu.c* Parameters: void * E:\Program\MCC18\src\traditional\pmc\reset\iswu.c* Description: This routine checks to see if a wakeup from * E:\Program\MCC18\src\traditional\pmc\reset\iswu.c* sleep has occurred. * E:\Program\MCC18\src\traditional\pmc\reset\iswu.c********************************************************************/ E:\Program\MCC18\src\traditional\pmc\reset\iswu.cchar isWU(void) E:\Program\MCC18\src\traditional\pmc\reset\iswu.c{ E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb4 a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // If POR is set E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb6 d00e BRA 0xfd4{ E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb8 b4d0 BTFSC 0xd0,0x2,0x0 if(!RCONbits.NOT_PD) // If PD is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fba d00a BRA 0xfd0{ E:\Program\MCC18\src\traditional\pmc\reset\iswu.c// If BOR is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#if defined(BOR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fbc a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // If BOR is set E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fbe d006 BRA 0xfcc{ E:\Program\MCC18\src\traditional\pmc\reset\iswu.c// If WDT is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fc0 b6d0 BTFSC 0xd0,0x3,0x0 if(!RCONbits.NOT_TO) // If TO is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fc2 d002 BRA 0xfc8000fc4 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fc6 d008 BRA 0xfd8#endif E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fc8 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fca d006 BRA 0xfd8} E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fcc 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fce d004 BRA 0xfd8// BOR is disabled E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#else E:\Program\MCC18\src\traditional\pmc\reset\iswu.c// If WDT is enabled E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#if defined(WDT_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\iswu.cif(!RCONbits.NOT_TO) // If TO is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswu.creturn 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#else E:\Program\MCC18\src\traditional\pmc\reset\iswu.creturn 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#endif E:\Program\MCC18\src\traditional\pmc\reset\iswu.c#endif E:\Program\MCC18\src\traditional\pmc\reset\iswu.c} E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fd0 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fd2 d002 BRA 0xfd8} E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fd4 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fd6 d000 BRA 0xfd8000fd8 0012 RETURN 0x0 } E:\Program\MCC18\src\traditional\pmc\reset\iswu.cE:\Program\MCC18\src\traditional\pmc\reset\iswu.c#include <p18cxxx.h> F:\MCP\projects\CAN\canBoot\Source\crc16.c#include <crc16.h> F:\MCP\projects\CAN\canBoot\Source\crc16.cF:\MCP\projects\CAN\canBoot\Source\crc16.c// ***************************************************************************** F:\MCP\projects\CAN\canBoot\Source\crc16.c// Update the CRC for transmitted and received data using F:\MCP\projects\CAN\canBoot\Source\crc16.c// the CCITT 16bit algorithm (X^16 + X^12 + X^5 + X^0) F:\MCP\projects\CAN\canBoot\Source\crc16.c// F:\MCP\projects\CAN\canBoot\Source\crc16.c// Adapted by R Andrag from an F:\MCP\projects\CAN\canBoot\Source\crc16.c// asm routine by John C. Wren (google to find the original code) F:\MCP\projects\CAN\canBoot\Source\crc16.c// roland.andrag at gmail.com F:\MCP\projects\CAN\canBoot\Source\crc16.c// F:\MCP\projects\CAN\canBoot\Source\crc16.c// To check your crc implementation use: F:\MCP\projects\CAN\canBoot\Source\crc16.c// http://www.zorc.breitbandkatze.de/crc.html F:\MCP\projects\CAN\canBoot\Source\crc16.c// Web calculator by Sven Reifegerste F:\MCP\projects\CAN\canBoot\Source\crc16.c// CRC order = 16 F:\MCP\projects\CAN\canBoot\Source\crc16.c// CRC polynomial = 1021 hex F:\MCP\projects\CAN\canBoot\Source\crc16.c// Initial value = FFFF hex F:\MCP\projects\CAN\canBoot\Source\crc16.c// direct CRC F:\MCP\projects\CAN\canBoot\Source\crc16.c// Final XOR value = 0 F:\MCP\projects\CAN\canBoot\Source\crc16.c// Don't reverse data bytes or CRC result F:\MCP\projects\CAN\canBoot\Source\crc16.c// calculator allows you to enter hex bytes by prefixing % F:\MCP\projects\CAN\canBoot\Source\crc16.c// append 00 00 to your mesage when you calulate the crc F:\MCP\projects\CAN\canBoot\Source\crc16.c// i.e. crc should work out to zero on: message:00:00:crc_h:crc_l F:\MCP\projects\CAN\canBoot\Source\crc16.c// e.g. %01%02%00%00 gives a crc of 9c14 F:\MCP\projects\CAN\canBoot\Source\crc16.c// %01%02%00%00%9c%14 gives a crc of 0000 F:\MCP\projects\CAN\canBoot\Source\crc16.c// %01%02%9c%14 gives a crc of 9327 hex F:\MCP\projects\CAN\canBoot\Source\crc16.c// ***************************************************************************** F:\MCP\projects\CAN\canBoot\Source\crc16.c000c84 cfd9 MOVFF 0xfd9,0xfe6 void update_crc(uint16 *p_crc, uint8 data) { F:\MCP\projects\CAN\canBoot\Source\crc16.c000c86 ffe6000c88 cfe1 MOVFF 0xfe1,0xfd9000c8a ffd9000c8c 0efd MOVLW 0xfd *p_crc = (*p_crc >> 8) | (*p_crc << 8); F:\MCP\projects\CAN\canBoot\Source\crc16.c000c8e cfdb MOVFF 0xfdb,0xfe9000c90 ffe9000c92 0efe MOVLW 0xfe000c94 cfdb MOVFF 0xfdb,0xfea000c96 ffea000c98 cfee MOVFF 0xfee,0x2000c9a f002000c9c cfef MOVFF 0xfef,0x3000c9e f003000ca0 c003 MOVFF 0x3,0x2000ca2 f002000ca4 6a03 CLRF 0x3,0x0000ca6 0efd MOVLW 0xfd000ca8 cfdb MOVFF 0xfdb,0xfe9000caa ffe9000cac 0efe MOVLW 0xfe000cae cfdb MOVFF 0xfdb,0xfea000cb0 ffea000cb2 cfee MOVFF 0xfee,0x4000cb4 f004000cb6 cfef MOVFF 0xfef,0x5000cb8 f005000cba c004 MOVFF 0x4,0x5000cbc f005000cbe 6a04 CLRF 0x4,0x0000cc0 5002 MOVF 0x2,0x0,0x0000cc2 1004 IORWF 0x4,0x0,0x0000cc4 6e00 MOVWF 0x0,0x0000cc6 5003 MOVF 0x3,0x0,0x0000cc8 1005 IORWF 0x5,0x0,0x0000cca 6e01 MOVWF 0x1,0x0000ccc 0efd MOVLW 0xfd000cce cfdb MOVFF 0xfdb,0xfe9000cd0 ffe9000cd2 0efe MOVLW 0xfe000cd4 cfdb MOVFF 0xfdb,0xfea000cd6 ffea000cd8 c000 MOVFF 0x0,0xfee000cda ffee000cdc c001 MOVFF 0x1,0xfed000cde ffed000ce0 0efc MOVLW 0xfc *p_crc ^= data; F:\MCP\projects\CAN\canBoot\Source\crc16.c000ce2 50db MOVF 0xdb,0x0,0x0000ce4 6e00 MOVWF 0x0,0x0000ce6 6a01 CLRF 0x1,0x0000ce8 0efd MOVLW 0xfd000cea cfdb MOVFF 0xfdb,0xfe9000cec ffe9000cee 0efe MOVLW 0xfe000cf0 cfdb MOVFF 0xfdb,0xfea000cf2 ffea000cf4 5000 MOVF 0x0,0x0,0x0000cf6 1aee XORWF 0xee,0x1,0x0000cf8 5001 MOVF 0x1,0x0,0x0000cfa 1aed XORWF 0xed,0x1,0x0000cfc 0efd MOVLW 0xfd *p_crc ^= (*p_crc & 0xff) >> 4; F:\MCP\projects\CAN\canBoot\Source\crc16.c000cfe cfdb MOVFF 0xfdb,0xfe9000d00 ffe9000d02 0efe MOVLW 0xfe000d04 cfdb MOVFF 0xfdb,0xfea000d06 ffea000d08 cfee MOVFF 0xfee,0x0000d0a f000000d0c cfef MOVFF 0xfef,0x1000d0e f001000d10 0eff MOVLW 0xff000d12 1600 ANDWF 0x0,0x1,0x0000d14 0e00 MOVLW 0x0000d16 1601 ANDWF 0x1,0x1,0x0000d18 0e04 MOVLW 0x4000d1a 90d8 BCF 0xd8,0x0,0x0000d1c 3201 RRCF 0x1,0x1,0x0000d1e 3200 RRCF 0x0,0x1,0x0000d20 04e8 DECF 0xe8,0x0,0x0000d22 e1fb BNZ 0xd1a000d24 0efd MOVLW 0xfd000d26 cfdb MOVFF 0xfdb,0xfe9000d28 ffe9000d2a 0efe MOVLW 0xfe000d2c cfdb MOVFF 0xfdb,0xfea000d2e ffea000d30 5000 MOVF 0x0,0x0,0x0000d32 1aee XORWF 0xee,0x1,0x0000d34 5001 MOVF 0x1,0x0,0x0000d36 1aed XORWF 0xed,0x1,0x0000d38 0efd MOVLW 0xfd *p_crc ^= *p_crc << 12; F:\MCP\projects\CAN\canBoot\Source\crc16.c000d3a cfdb MOVFF 0xfdb,0xfe9000d3c ffe9000d3e 0efe MOVLW 0xfe000d40 cfdb MOVFF 0xfdb,0xfea000d42 ffea000d44 cfee MOVFF 0xfee,0x0000d46 f000000d48 cfef MOVFF 0xfef,0x1000d4a f001000d4c 3800 SWAPF 0x0,0x0,0x0000d4e 6a00 CLRF 0x0,0x0000d50 0bf0 ANDLW 0xf0000d52 6e01 MOVWF 0x1,0x0000d54 0efd MOVLW 0xfd000d56 cfdb MOVFF 0xfdb,0xfe9000d58 ffe9000d5a 0efe MOVLW 0xfe000d5c cfdb MOVFF 0xfdb,0xfea000d5e ffea000d60 5000 MOVF 0x0,0x0,0x0000d62 1aee XORWF 0xee,0x1,0x0000d64 5001 MOVF 0x1,0x0,0x0000d66 1aed XORWF 0xed,0x1,0x0000d68 0efd MOVLW 0xfd *p_crc ^= (*p_crc & 0xff) << 5; F:\MCP\projects\CAN\canBoot\Source\crc16.c000d6a cfdb MOVFF 0xfdb,0xfe9000d6c ffe9000d6e 0efe MOVLW 0xfe000d70 cfdb MOVFF 0xfdb,0xfea000d72 ffea000d74 cfee MOVFF 0xfee,0x0000d76 f000000d78 cfef MOVFF 0xfef,0x1000d7a f001000d7c 0eff MOVLW 0xff000d7e 1600 ANDWF 0x0,0x1,0x0000d80 0e00 MOVLW 0x0000d82 1601 ANDWF 0x1,0x1,0x0000d84 0e05 MOVLW 0x5000d86 90d8 BCF 0xd8,0x0,0x0000d88 3600 RLCF 0x0,0x1,0x0000d8a 3601 RLCF 0x1,0x1,0x0000d8c 04e8 DECF 0xe8,0x0,0x0000d8e e1fb BNZ 0xd86000d90 0efd MOVLW 0xfd000d92 cfdb MOVFF 0xfdb,0xfe9000d94 ffe9000d96 0efe MOVLW 0xfe000d98 cfdb MOVFF 0xfdb,0xfea000d9a ffea000d9c 5000 MOVF 0x0,0x0,0x0000d9e 1aee XORWF 0xee,0x1,0x0000da0 5001 MOVF 0x1,0x0,0x0000da2 1aed XORWF 0xed,0x1,0x0000da4 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canBoot\Source\crc16.c000da6 cfe7 MOVFF 0xfe7,0xfd9000da8 ffd9000daa 0012 RETURN 0x0F:\MCP\projects\CAN\canBoot\Source\crc16.cF:\MCP\projects\CAN\canBoot\Source\crc16.c000dac cfd9 MOVFF 0xfd9,0xfe6 uint16 calc_crc(uint8 * p_data, uint16 n_bytes) { F:\MCP\projects\CAN\canBoot\Source\crc16.c000dae ffe6000db0 cfe1 MOVFF 0xfe1,0xfd9000db2 ffd9000db4 0e02 MOVLW 0x2000db6 26e1 ADDWF 0xe1,0x1,0x0000db8 68de SETF 0xde,0x0 uint16 crc = 0xFFFF; F:\MCP\projects\CAN\canBoot\Source\crc16.c000dba 68dd SETF 0xdd,0x0F:\MCP\projects\CAN\canBoot\Source\crc16.c000dbc 50d9 MOVF 0xd9,0x0,0x0 for (; n_bytes > 0; n_bytes--) { F:\MCP\projects\CAN\canBoot\Source\crc16.c000dbe 0ffb ADDLW 0xfb000dc0 6ee9 MOVWF 0xe9,0x0000dc2 0eff MOVLW 0xff000dc4 20da ADDWFC 0xda,0x0,0x0000dc6 6eea MOVWF 0xea,0x0000dc8 0e00 MOVLW 0x0000dca 80d8 BSF 0xd8,0x0,0x0000dcc 54ee SUBFWB 0xee,0x0,0x0000dce 0e00 MOVLW 0x0000dd0 54ed SUBFWB 0xed,0x0,0x0000dd2 e219 BC 0xe06000dfa 0efb MOVLW 0xfb000dfc 06db DECF 0xdb,0x1,0x0000dfe 0efc MOVLW 0xfc000e00 e201 BC 0xe04000e02 06db DECF 0xdb,0x1,0x0000e04 d7db BRA 0xdbc000dd4 0efd MOVLW 0xfd update_crc(&crc, *(p_data++)); F:\MCP\projects\CAN\canBoot\Source\crc16.c000dd6 cfdb MOVFF 0xfdb,0xfe9000dd8 ffe9000dda 2adb INCF 0xdb,0x1,0x0000ddc 0efe MOVLW 0xfe000dde cfdb MOVFF 0xfdb,0xfea000de0 ffea000de2 e301 BNC 0xde6000de4 2adb INCF 0xdb,0x1,0x0000de6 50ef MOVF 0xef,0x0,0x0000de8 6ee6 MOVWF 0xe6,0x0000dea cfd9 MOVFF 0xfd9,0xfe6000dec ffe6000dee cfda MOVFF 0xfda,0xfe6000df0 ffe6000df2 df48 RCALL 0xc84000df4 52e5 MOVF 0xe5,0x1,0x0000df6 52e5 MOVF 0xe5,0x1,0x0000df8 52e5 MOVF 0xe5,0x1,0x0} F:\MCP\projects\CAN\canBoot\Source\crc16.cF:\MCP\projects\CAN\canBoot\Source\crc16.c000e06 cfde MOVFF 0xfde,0x0 return crc; F:\MCP\projects\CAN\canBoot\Source\crc16.c000e08 f000000e0a cfdd MOVFF 0xfdd,0x1000e0c f001000e0e c000 MOVFF 0x0,0xff3000e10 fff3000e12 c001 MOVFF 0x1,0xff4000e14 fff4000e16 0e02 MOVLW 0x2 } F:\MCP\projects\CAN\canBoot\Source\crc16.c000e18 5ce1 SUBWF 0xe1,0x0,0x0000e1a e203 BC 0xe22000e1c d000 BRA 0xe1e000e1e 6ae1 CLRF 0xe1,0x0000e20 52e5 MOVF 0xe5,0x1,0x0000e22 6ee1 MOVWF 0xe1,0x0000e24 52e5 MOVF 0xe5,0x1,0x0000e26 cfe7 MOVFF 0xfe7,0xfd9000e28 ffd9000e2a 0012 RETURN 0x0