Rev 297 | Blame | Last modification | View Log | SVN | RSS feed
MP2COD 4.02, COFF to COD File ConverterCopyright (c) 2006 Microchip Technology Inc.Listing File Generated: Sun Feb 25 20:39:56 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-01-28 14:58:11 +0100 (sö, 28 jan 2007) $ F:\MCP\projects\CAN\canBoot\Source\Main.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\canBoot\Source\Main.c* Revision: $Revision: 260 $ 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.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 eca6 CALL 0x94c,0x0 mainInit(); F:\MCP\projects\CAN\canBoot\Source\Main.c000046 f004F:\MCP\projects\CAN\canBoot\Source\Main.c000048 ecac CALL 0x958,0x0 canInit(); F:\MCP\projects\CAN\canBoot\Source\Main.c00004a f004F:\MCP\projects\CAN\canBoot\Source\Main.c00004c ec2e CALL 0xc5c,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 ec0c CALL 0xe18,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 ec0c CALL 0xe18,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 0e01 MOVLW 0x1 outCp.length=1; F:\MCP\projects\CAN\canBoot\Source\Main.c0000d6 6ef3 MOVWF 0xf3,0x00000d8 0e08 MOVLW 0x80000da cff3 MOVFF 0xff3,0xfdb0000dc ffdb0000de ecd0 CALL 0xfa0,0x0 outCp.data[0] = (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 ece3 CALL 0xfc6,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 ecf6 CALL 0xfec,0x0000104 f007000106 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 ec09 CALL 0x1012,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 ecb1 CALL 0xf62,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 ec33 CALL 0x1066,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 ec28 CALL 0x1050,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 0e09 MOVLW 0x9000202 cfe7 MOVFF 0xfe7,0xfdb000204 ffdb000206 ec3b CALL 0x1076,0x0 StatusReset(); F:\MCP\projects\CAN\canBoot\Source\Main.c000208 f00800020a cfd9 MOVFF 0xfd9,0xfe9 while(!canSendMessage(outCp)); F:\MCP\projects\CAN\canBoot\Source\Main.c00020c ffe900020e cfda MOVFF 0xfda,0xfea000210 ffea000212 cfee MOVFF 0xfee,0xfe6000214 ffe6000216 cfee MOVFF 0xfee,0xfe6000218 ffe600021a cfee MOVFF 0xfee,0xfe600021c ffe600021e cfee MOVFF 0xfee,0xfe6000220 ffe6000222 cfee MOVFF 0xfee,0xfe6000224 ffe6000226 cfee MOVFF 0xfee,0xfe6000228 ffe600022a cfee MOVFF 0xfee,0xfe600022c ffe600022e cfee MOVFF 0xfee,0xfe6000230 ffe6000232 cfee MOVFF 0xfee,0xfe6000234 ffe6000236 cfee MOVFF 0xfee,0xfe6000238 ffe600023a cfee MOVFF 0xfee,0xfe600023c ffe600023e cfee MOVFF 0xfee,0xfe6000240 ffe6000242 cfee MOVFF 0xfee,0xfe6000244 ffe6000246 cfee MOVFF 0xfee,0xfe6000248 ffe600024a cfee MOVFF 0xfee,0xfe600024c ffe600024e cfee MOVFF 0xfee,0xfe6000250 ffe6000252 cfee MOVFF 0xfee,0xfe6000254 ffe6000256 ec60 CALL 0xac0,0x0000258 f00500025a 6e00 MOVWF 0x0,0x000025c 0e11 MOVLW 0x1100025e 5ee1 SUBWF 0xe1,0x1,0x0000260 5000 MOVF 0x0,0x0,0x0000262 0900 IORLW 0x0000264 e101 BNZ 0x268000266 d7d1 BRA 0x20aF:\MCP\projects\CAN\canBoot\Source\Main.c000268 8282 BSF 0x82,0x1,0x0 LED0_IO= 1; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000936 d499 BRA 0x26a 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.c00026a db93 RCALL 0x992 BOOL hasPacket = canGetPacket() && (cp.type == ptBOOT && cp.boot.rid == MY_ID); F:\MCP\projects\CAN\canBoot\Source\Main.c00026c 0900 IORLW 0x000026e e00e BZ 0x28c000270 0100 MOVLB 0x0000272 5160 MOVF 0x60,0x0,0x1000274 e10b BNZ 0x28c000276 0100 MOVLB 0x0000278 5166 MOVF 0x66,0x0,0x100027a 6e00 MOVWF 0x0,0x000027c 6a01 CLRF 0x1,0x000027e 0100 MOVLB 0x0000280 51c1 MOVF 0xc1,0x0,0x1000282 1800 XORWF 0x0,0x0,0x0000284 e102 BNZ 0x28a000286 51c2 MOVF 0xc2,0x0,0x1000288 1801 XORWF 0x1,0x0,0x000028a e002 BZ 0x29000028c 0e00 MOVLW 0x000028e d001 BRA 0x292000290 0e01 MOVLW 0x1000292 6ee7 MOVWF 0xe7,0x0000294 0e23 MOVLW 0x23000296 cfe7 MOVFF 0xfe7,0xfdb000298 ffdbF:\MCP\projects\CAN\canBoot\Source\Main.c00029a 0100 MOVLB 0x0 tickSubCounter++; F:\MCP\projects\CAN\canBoot\Source\Main.c00029c 2bbd INCF 0xbd,0x1,0x100029e 0e00 MOVLW 0x00002a0 23be ADDWFC 0xbe,0x1,0x10002a2 23bf ADDWFC 0xbf,0x1,0x10002a4 23c0 ADDWFC 0xc0,0x1,0x10002a6 80d8 BSF 0xd8,0x0,0x0 if (tickSubCounter>TICK_SUB_COUNTER_10MS) F:\MCP\projects\CAN\canBoot\Source\Main.c0002a8 0e38 MOVLW 0x380002aa 0100 MOVLB 0x00002ac 55bd SUBFWB 0xbd,0x0,0x10002ae 0e01 MOVLW 0x10002b0 55be SUBFWB 0xbe,0x0,0x10002b2 0e00 MOVLW 0x00002b4 55bf SUBFWB 0xbf,0x0,0x10002b6 0e00 MOVLW 0x00002b8 55c0 SUBFWB 0xc0,0x0,0x10002ba e20c BC 0x2d4{ F:\MCP\projects\CAN\canBoot\Source\Main.c0002bc 0100 MOVLB 0x0 tickCounter++; F:\MCP\projects\CAN\canBoot\Source\Main.c0002be 2bb9 INCF 0xb9,0x1,0x10002c0 0e00 MOVLW 0x00002c2 23ba ADDWFC 0xba,0x1,0x10002c4 23bb ADDWFC 0xbb,0x1,0x10002c6 23bc ADDWFC 0xbc,0x1,0x10002c8 0100 MOVLB 0x0 tickSubCounter=0; F:\MCP\projects\CAN\canBoot\Source\Main.c0002ca 6bbd CLRF 0xbd,0x10002cc 6bbe CLRF 0xbe,0x10002ce 6bbf CLRF 0xbf,0x10002d0 6bc0 CLRF 0xc0,0x10002d2 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.c0002d4 0100 MOVLB 0x0 switch(pgs) F:\MCP\projects\CAN\canBoot\Source\Main.c0002d6 51c3 MOVF 0xc3,0x0,0x10002d8 0a05 XORLW 0x50002da e101 BNZ 0x2de0002dc d325 BRA 0x9280002de 0a01 XORLW 0x10002e0 e101 BNZ 0x2e40002e2 d26c BRA 0x7bc0002e4 0a07 XORLW 0x70002e6 e101 BNZ 0x2ea0002e8 d165 BRA 0x5b40002ea 0a01 XORLW 0x10002ec e101 BNZ 0x2f00002ee d0c0 BRA 0x4700002f0 0a03 XORLW 0x30002f2 e101 BNZ 0x2f60002f4 d079 BRA 0x3e80002f6 0a01 XORLW 0x10002f8 e001 BZ 0x2fc0002fa d31a BRA 0x930{ 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.c0002fc 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btADDR) F:\MCP\projects\CAN\canBoot\Source\Main.c0002fe 04db DECF 0xdb,0x0,0x0000300 e153 BNZ 0x3a8000302 0100 MOVLB 0x0000304 5164 MOVF 0x64,0x0,0x1000306 e150 BNZ 0x3a8{ F:\MCP\projects\CAN\canBoot\Source\Main.c000308 c067 MOVFF 0x67,0xc5 programmerId = cp.sid; F:\MCP\projects\CAN\canBoot\Source\Main.c00030a f0c500030c 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.c00030e f000000310 6a01 CLRF 0x1,0x0000312 6a02 CLRF 0x2,0x0000314 6a03 CLRF 0x3,0x0000316 0e10 MOVLW 0x10000318 0b1f ANDLW 0x1f00031a e007 BZ 0x32a00031c 90d8 BCF 0xd8,0x0,0x000031e 3600 RLCF 0x0,0x1,0x0000320 3601 RLCF 0x1,0x1,0x0000322 3602 RLCF 0x2,0x1,0x0000324 3603 RLCF 0x3,0x1,0x0000326 06e8 DECF 0xe8,0x1,0x0000328 e1f9 BNZ 0x31c00032a c06a MOVFF 0x6a,0x400032c f00400032e 6a05 CLRF 0x5,0x0000330 6a06 CLRF 0x6,0x0000332 6a07 CLRF 0x7,0x0000334 0e08 MOVLW 0x8000336 0b1f ANDLW 0x1f000338 e007 BZ 0x34800033a 90d8 BCF 0xd8,0x0,0x000033c 3604 RLCF 0x4,0x1,0x000033e 3605 RLCF 0x5,0x1,0x0000340 3606 RLCF 0x6,0x1,0x0000342 3607 RLCF 0x7,0x1,0x0000344 06e8 DECF 0xe8,0x1,0x0000346 e1f9 BNZ 0x33a000348 5004 MOVF 0x4,0x0,0x000034a 2600 ADDWF 0x0,0x1,0x000034c 5005 MOVF 0x5,0x0,0x000034e 2201 ADDWFC 0x1,0x1,0x0000350 5006 MOVF 0x6,0x0,0x0000352 2202 ADDWFC 0x2,0x1,0x0000354 5007 MOVF 0x7,0x0,0x0000356 2203 ADDWFC 0x3,0x1,0x0000358 c069 MOVFF 0x69,0x800035a f00800035c 6a09 CLRF 0x9,0x000035e 6a0a CLRF 0xa,0x0000360 6a0b CLRF 0xb,0x0000362 5000 MOVF 0x0,0x0,0x0000364 2408 ADDWF 0x8,0x0,0x0000366 0100 MOVLB 0x0000368 6fc7 MOVWF 0xc7,0x100036a 5001 MOVF 0x1,0x0,0x000036c 2009 ADDWFC 0x9,0x0,0x000036e 0100 MOVLB 0x0000370 6fc8 MOVWF 0xc8,0x1000372 5002 MOVF 0x2,0x0,0x0000374 200a ADDWFC 0xa,0x0,0x0000376 0100 MOVLB 0x0000378 6fc9 MOVWF 0xc9,0x100037a 5003 MOVF 0x3,0x0,0x000037c 200b ADDWFC 0xb,0x0,0x000037e 0100 MOVLB 0x0000380 6fca MOVWF 0xca,0x1000382 ec2e CALL 0xc5c,0x0 t = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c000384 f006000386 c010 MOVFF 0x10,0xcf000388 f0cf00038a c011 MOVFF 0x11,0xd000038c f0d000038e c012 MOVFF 0x12,0xd1000390 f0d1000392 c013 MOVFF 0x13,0xd2000394 f0d2000396 0100 MOVLB 0x0 ackType = btACK; F:\MCP\projects\CAN\canBoot\Source\Main.c000398 0e04 MOVLW 0x400039a 6fc6 MOVWF 0xc6,0x100039c 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c00039e 0e02 MOVLW 0x20003a0 6fc4 MOVWF 0xc4,0x10003a2 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0003a4 0e01 MOVLW 0x10003a6 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.c0003a8 ec2e CALL 0xc5c,0x0 if ((tickGet()-tBoot)>BOOTLOADER_INIT_TIMOUT) F:\MCP\projects\CAN\canBoot\Source\Main.c0003aa f0060003ac 0100 MOVLB 0x00003ae 51b1 MOVF 0xb1,0x0,0x10003b0 5c10 SUBWF 0x10,0x0,0x00003b2 6e00 MOVWF 0x0,0x00003b4 0100 MOVLB 0x00003b6 51b2 MOVF 0xb2,0x0,0x10003b8 5811 SUBWFB 0x11,0x0,0x00003ba 6e01 MOVWF 0x1,0x00003bc 0100 MOVLB 0x00003be 51b3 MOVF 0xb3,0x0,0x10003c0 5812 SUBWFB 0x12,0x0,0x00003c2 6e02 MOVWF 0x2,0x00003c4 0100 MOVLB 0x00003c6 51b4 MOVF 0xb4,0x0,0x10003c8 5813 SUBWFB 0x13,0x0,0x00003ca 6e03 MOVWF 0x3,0x00003cc 80d8 BSF 0xd8,0x0,0x00003ce 0ef4 MOVLW 0xf40003d0 5400 SUBFWB 0x0,0x0,0x00003d2 0e01 MOVLW 0x10003d4 5401 SUBFWB 0x1,0x0,0x00003d6 0e00 MOVLW 0x00003d8 5402 SUBFWB 0x2,0x0,0x00003da 0e00 MOVLW 0x00003dc 5403 SUBFWB 0x3,0x0,0x00003de e203 BC 0x3e6{ F:\MCP\projects\CAN\canBoot\Source\Main.c0003e0 0100 MOVLB 0x0 pgs = pgsDONE; F:\MCP\projects\CAN\canBoot\Source\Main.c0003e2 0e05 MOVLW 0x50003e4 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c0003e6 d2a7 BRA 0x936 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.c0003e8 6adf CLRF 0xdf,0x0 outCp.type = ptBOOT; F:\MCP\projects\CAN\canBoot\Source\Main.c0003ea 0e06 MOVLW 0x6 outCp.boot.rid = programmerId; F:\MCP\projects\CAN\canBoot\Source\Main.c0003ec c0c5 MOVFF 0xc5,0xfdb0003ee ffdb0003f0 0e04 MOVLW 0x4 outCp.boot.type = ackType; F:\MCP\projects\CAN\canBoot\Source\Main.c0003f2 c0c6 MOVFF 0xc6,0xfdb0003f4 ffdb0003f6 0e08 MOVLW 0x8 outCp.length=0; F:\MCP\projects\CAN\canBoot\Source\Main.c0003f8 6adb CLRF 0xdb,0x00003fa ec2e CALL 0xc5c,0x0 t = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c0003fc f0060003fe c010 MOVFF 0x10,0xcf000400 f0cf000402 c011 MOVFF 0x11,0xd0000404 f0d0000406 c012 MOVFF 0x12,0xd1000408 f0d100040a c013 MOVFF 0x13,0xd200040c f0d200040e c0c4 MOVFF 0xc4,0xc3 pgs = pgsAckNext; F:\MCP\projects\CAN\canBoot\Source\Main.c000410 f0c3F:\MCP\projects\CAN\canBoot\Source\Main.c000412 cfd9 MOVFF 0xfd9,0xfe9 while(!canSendMessage(outCp)); F:\MCP\projects\CAN\canBoot\Source\Main.c000414 ffe9000416 cfda MOVFF 0xfda,0xfea000418 ffea00041a cfee MOVFF 0xfee,0xfe600041c ffe600041e cfee MOVFF 0xfee,0xfe6000420 ffe6000422 cfee MOVFF 0xfee,0xfe6000424 ffe6000426 cfee MOVFF 0xfee,0xfe6000428 ffe600042a cfee MOVFF 0xfee,0xfe600042c ffe600042e cfee MOVFF 0xfee,0xfe6000430 ffe6000432 cfee MOVFF 0xfee,0xfe6000434 ffe6000436 cfee MOVFF 0xfee,0xfe6000438 ffe600043a cfee MOVFF 0xfee,0xfe600043c ffe600043e cfee MOVFF 0xfee,0xfe6000440 ffe6000442 cfee MOVFF 0xfee,0xfe6000444 ffe6000446 cfee MOVFF 0xfee,0xfe6000448 ffe600044a cfee MOVFF 0xfee,0xfe600044c ffe600044e cfee MOVFF 0xfee,0xfe6000450 ffe6000452 cfee MOVFF 0xfee,0xfe6000454 ffe6000456 cfee MOVFF 0xfee,0xfe6000458 ffe600045a cfee MOVFF 0xfee,0xfe600045c ffe600045e db30 RCALL 0xac0000460 6e00 MOVWF 0x0,0x0000462 0e11 MOVLW 0x11000464 5ee1 SUBWF 0xe1,0x1,0x0000466 5000 MOVF 0x0,0x0,0x0000468 0900 IORLW 0x000046a e101 BNZ 0x46e00046c d7d2 BRA 0x41200046e d263 BRA 0x936 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.c000470 ec2e CALL 0xc5c,0x0 if ((tickGet()-t)>PACKET_TIMEOUT) F:\MCP\projects\CAN\canBoot\Source\Main.c000472 f006000474 0100 MOVLB 0x0000476 51cf MOVF 0xcf,0x0,0x1000478 5c10 SUBWF 0x10,0x0,0x000047a 6e00 MOVWF 0x0,0x000047c 0100 MOVLB 0x000047e 51d0 MOVF 0xd0,0x0,0x1000480 5811 SUBWFB 0x11,0x0,0x0000482 6e01 MOVWF 0x1,0x0000484 0100 MOVLB 0x0000486 51d1 MOVF 0xd1,0x0,0x1000488 5812 SUBWFB 0x12,0x0,0x000048a 6e02 MOVWF 0x2,0x000048c 0100 MOVLB 0x000048e 51d2 MOVF 0xd2,0x0,0x1000490 5813 SUBWFB 0x13,0x0,0x0000492 6e03 MOVWF 0x3,0x0000494 80d8 BSF 0xd8,0x0,0x0000496 0e0e MOVLW 0xe000498 5400 SUBFWB 0x0,0x0,0x000049a 0e00 MOVLW 0x000049c 5401 SUBFWB 0x1,0x0,0x000049e 0e00 MOVLW 0x00004a0 5402 SUBFWB 0x2,0x0,0x00004a2 0e00 MOVLW 0x00004a4 5403 SUBFWB 0x3,0x0,0x00004a6 e206 BC 0x4b4{ F:\MCP\projects\CAN\canBoot\Source\Main.c// Timeout, resend ack/nack. F:\MCP\projects\CAN\canBoot\Source\Main.c0004a8 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0004aa 0e02 MOVLW 0x20004ac 6fc4 MOVWF 0xc4,0x10004ae 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0004b0 0e01 MOVLW 0x10004b2 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0004b4 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btPGM) F:\MCP\projects\CAN\canBoot\Source\Main.c0004b6 04db DECF 0xdb,0x0,0x00004b8 e157 BNZ 0x5680004ba 0100 MOVLB 0x00004bc 0564 DECF 0x64,0x0,0x10004be e154 BNZ 0x568{ F:\MCP\projects\CAN\canBoot\Source\Main.c0004c0 0e24 MOVLW 0x24 BYTE localIndex = cp.boot.offset; F:\MCP\projects\CAN\canBoot\Source\Main.c0004c2 c065 MOVFF 0x65,0xfdb0004c4 ffdb0004c6 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.c0004c8 50db MOVF 0xdb,0x0,0x00004ca 6aea CLRF 0xea,0x00004cc 0f71 ADDLW 0x710004ce 6ee9 MOVWF 0xe9,0x00004d0 0e00 MOVLW 0x00004d2 22ea ADDWFC 0xea,0x1,0x00004d4 c069 MOVFF 0x69,0xfef0004d6 ffef0004d8 0e24 MOVLW 0x240004da 28db INCF 0xdb,0x0,0x00004dc 6aea CLRF 0xea,0x00004de 0f71 ADDLW 0x710004e0 6ee9 MOVWF 0xe9,0x00004e2 0e00 MOVLW 0x00004e4 22ea ADDWFC 0xea,0x1,0x00004e6 c06a MOVFF 0x6a,0xfef0004e8 ffef0004ea 0e24 MOVLW 0x240004ec 50db MOVF 0xdb,0x0,0x00004ee 0f02 ADDLW 0x20004f0 6aea CLRF 0xea,0x00004f2 0f71 ADDLW 0x710004f4 6ee9 MOVWF 0xe9,0x00004f6 0e00 MOVLW 0x00004f8 22ea ADDWFC 0xea,0x1,0x00004fa c06b MOVFF 0x6b,0xfef0004fc ffef0004fe 0e24 MOVLW 0x24000500 50db MOVF 0xdb,0x0,0x0000502 0f03 ADDLW 0x3000504 6aea CLRF 0xea,0x0000506 0f71 ADDLW 0x71000508 6ee9 MOVWF 0xe9,0x000050a 0e00 MOVLW 0x000050c 22ea ADDWFC 0xea,0x1,0x000050e c06c MOVFF 0x6c,0xfef000510 ffef000512 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.c000514 50db MOVF 0xdb,0x0,0x0000516 0f04 ADDLW 0x4000518 6aea CLRF 0xea,0x000051a 0f71 ADDLW 0x7100051c 6ee9 MOVWF 0xe9,0x000051e 0e00 MOVLW 0x0000520 22ea ADDWFC 0xea,0x1,0x0000522 c06d MOVFF 0x6d,0xfef000524 ffef000526 0e24 MOVLW 0x24000528 50db MOVF 0xdb,0x0,0x000052a 0f05 ADDLW 0x500052c 6aea CLRF 0xea,0x000052e 0f71 ADDLW 0x71000530 6ee9 MOVWF 0xe9,0x0000532 0e00 MOVLW 0x0000534 22ea ADDWFC 0xea,0x1,0x0000536 c06e MOVFF 0x6e,0xfef000538 ffef00053a 0e24 MOVLW 0x2400053c 50db MOVF 0xdb,0x0,0x000053e 0f06 ADDLW 0x6000540 6aea CLRF 0xea,0x0000542 0f71 ADDLW 0x71000544 6ee9 MOVWF 0xe9,0x0000546 0e00 MOVLW 0x0000548 22ea ADDWFC 0xea,0x1,0x000054a c06f MOVFF 0x6f,0xfef00054c ffef00054e 0e24 MOVLW 0x24000550 50db MOVF 0xdb,0x0,0x0000552 0f07 ADDLW 0x7000554 6aea CLRF 0xea,0x0000556 0f71 ADDLW 0x71000558 6ee9 MOVWF 0xe9,0x000055a 0e00 MOVLW 0x000055c 22ea ADDWFC 0xea,0x1,0x000055e c070 MOVFF 0x70,0xfef000560 ffef000562 0100 MOVLB 0x0 pgs = pgsWAIT_DATA_OR_CRC; F:\MCP\projects\CAN\canBoot\Source\Main.c000564 0e03 MOVLW 0x3000566 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000568 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btADDR) F:\MCP\projects\CAN\canBoot\Source\Main.c00056a 04db DECF 0xdb,0x0,0x000056c e10e BNZ 0x58a00056e 0100 MOVLB 0x0000570 5164 MOVF 0x64,0x0,0x1000572 e10b BNZ 0x58a{ F:\MCP\projects\CAN\canBoot\Source\Main.c000574 db73 RCALL 0xc5c tBoot = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c000576 c010 MOVFF 0x10,0xb1000578 f0b100057a c011 MOVFF 0x11,0xb200057c f0b200057e c012 MOVFF 0x12,0xb3000580 f0b3000582 c013 MOVFF 0x13,0xb4000584 f0b4000586 0100 MOVLB 0x0 pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.c000588 6bc3 CLRF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c00058a 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btCRC) F:\MCP\projects\CAN\canBoot\Source\Main.c00058c 04db DECF 0xdb,0x0,0x000058e e107 BNZ 0x59e000590 0e06 MOVLW 0x6000592 0100 MOVLB 0x0000594 5d64 SUBWF 0x64,0x0,0x1000596 e103 BNZ 0x59e{ F:\MCP\projects\CAN\canBoot\Source\Main.c000598 0100 MOVLB 0x0 pgs = pgsWAIT_DATA_OR_CRC; F:\MCP\projects\CAN\canBoot\Source\Main.c00059a 0e03 MOVLW 0x300059c 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c00059e 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btDONE) F:\MCP\projects\CAN\canBoot\Source\Main.c0005a0 04db DECF 0xdb,0x0,0x00005a2 e107 BNZ 0x5b20005a4 0e02 MOVLW 0x20005a6 0100 MOVLB 0x00005a8 5d64 SUBWF 0x64,0x0,0x10005aa e103 BNZ 0x5b2{ F:\MCP\projects\CAN\canBoot\Source\Main.c0005ac 0100 MOVLB 0x0 pgs = pgsDONE; F:\MCP\projects\CAN\canBoot\Source\Main.c0005ae 0e05 MOVLW 0x50005b0 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.c0005b2 d1c1 BRA 0x936 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.c0005b4 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btCRC) F:\MCP\projects\CAN\canBoot\Source\Main.c0005b6 04db DECF 0xdb,0x0,0x00005b8 e001 BZ 0x5bc0005ba d08d BRA 0x6d60005bc 0e06 MOVLW 0x60005be 0100 MOVLB 0x00005c0 5d64 SUBWF 0x64,0x0,0x10005c2 e001 BZ 0x5c60005c4 d088 BRA 0x6d6{ F:\MCP\projects\CAN\canBoot\Source\Main.c0005c6 c06d MOVFF 0x6d,0x2 WORD crc16 = (((WORD)cp.data[4])<<8)+((WORD)cp.data[3]); F:\MCP\projects\CAN\canBoot\Source\Main.c0005c8 f0020005ca c002 MOVFF 0x2,0x30005cc f0030005ce 6a02 CLRF 0x2,0x00005d0 0100 MOVLB 0x00005d2 516c MOVF 0x6c,0x0,0x10005d4 0100 MOVLB 0x00005d6 2402 ADDWF 0x2,0x0,0x00005d8 6e00 MOVWF 0x0,0x00005da 0e00 MOVLW 0x00005dc 2003 ADDWFC 0x3,0x0,0x00005de 6e01 MOVWF 0x1,0x00005e0 0e25 MOVLW 0x250005e2 c000 MOVFF 0x0,0xfdb0005e4 ffdb0005e6 0e26 MOVLW 0x260005e8 c001 MOVFF 0x1,0xfdb0005ea ffdb0005ec 0e40 MOVLW 0x40 WORD crc16calc = calc_crc(pgmData,64); F:\MCP\projects\CAN\canBoot\Source\Main.c0005ee 6ee6 MOVWF 0xe6,0x00005f0 6ae6 CLRF 0xe6,0x00005f2 0e71 MOVLW 0x710005f4 6ee6 MOVWF 0xe6,0x00005f6 0e00 MOVLW 0x00005f8 6ee6 MOVWF 0xe6,0x00005fa eccc CALL 0xd98,0x00005fc f0060005fe 52e5 MOVF 0xe5,0x1,0x0000600 52e5 MOVF 0xe5,0x1,0x0000602 52e5 MOVF 0xe5,0x1,0x0000604 52e5 MOVF 0xe5,0x1,0x0000606 0e27 MOVLW 0x27000608 cff3 MOVFF 0xff3,0xfdb00060a ffdb00060c 0e28 MOVLW 0x2800060e cff4 MOVFF 0xff4,0xfdb000610 ffdbF:\MCP\projects\CAN\canBoot\Source\Main.c// check CRC. F:\MCP\projects\CAN\canBoot\Source\Main.c000612 0e27 MOVLW 0x27 if (crc16calc==crc16) F:\MCP\projects\CAN\canBoot\Source\Main.c000614 cfdb MOVFF 0xfdb,0x0000616 f000000618 0e28 MOVLW 0x2800061a cfdb MOVFF 0xfdb,0x100061c f00100061e 0e25 MOVLW 0x25000620 50db MOVF 0xdb,0x0,0x0000622 1800 XORWF 0x0,0x0,0x0000624 e103 BNZ 0x62c000626 0e26 MOVLW 0x26000628 50db MOVF 0xdb,0x0,0x000062a 1801 XORWF 0x1,0x0,0x000062c e142 BNZ 0x6b2{ F:\MCP\projects\CAN\canBoot\Source\Main.c00062e 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.c000630 f000000632 6a01 CLRF 0x1,0x0000634 6a02 CLRF 0x2,0x0000636 6a03 CLRF 0x3,0x0000638 0e10 MOVLW 0x1000063a 0b1f ANDLW 0x1f00063c e007 BZ 0x64c00063e 90d8 BCF 0xd8,0x0,0x0000640 3600 RLCF 0x0,0x1,0x0000642 3601 RLCF 0x1,0x1,0x0000644 3602 RLCF 0x2,0x1,0x0000646 3603 RLCF 0x3,0x1,0x0000648 06e8 DECF 0xe8,0x1,0x000064a e1f9 BNZ 0x63e00064c c06a MOVFF 0x6a,0x400064e f004000650 6a05 CLRF 0x5,0x0000652 6a06 CLRF 0x6,0x0000654 6a07 CLRF 0x7,0x0000656 0e08 MOVLW 0x8000658 0b1f ANDLW 0x1f00065a e007 BZ 0x66a00065c 90d8 BCF 0xd8,0x0,0x000065e 3604 RLCF 0x4,0x1,0x0000660 3605 RLCF 0x5,0x1,0x0000662 3606 RLCF 0x6,0x1,0x0000664 3607 RLCF 0x7,0x1,0x0000666 06e8 DECF 0xe8,0x1,0x0000668 e1f9 BNZ 0x65c00066a 5004 MOVF 0x4,0x0,0x000066c 2600 ADDWF 0x0,0x1,0x000066e 5005 MOVF 0x5,0x0,0x0000670 2201 ADDWFC 0x1,0x1,0x0000672 5006 MOVF 0x6,0x0,0x0000674 2202 ADDWFC 0x2,0x1,0x0000676 5007 MOVF 0x7,0x0,0x0000678 2203 ADDWFC 0x3,0x1,0x000067a c069 MOVFF 0x69,0x800067c f00800067e 6a09 CLRF 0x9,0x0000680 6a0a CLRF 0xa,0x0000682 6a0b CLRF 0xb,0x0000684 5000 MOVF 0x0,0x0,0x0000686 2408 ADDWF 0x8,0x0,0x0000688 0100 MOVLB 0x000068a 6fcb MOVWF 0xcb,0x100068c 5001 MOVF 0x1,0x0,0x000068e 2009 ADDWFC 0x9,0x0,0x0000690 0100 MOVLB 0x0000692 6fcc MOVWF 0xcc,0x1000694 5002 MOVF 0x2,0x0,0x0000696 200a ADDWFC 0xa,0x0,0x0000698 0100 MOVLB 0x000069a 6fcd MOVWF 0xcd,0x100069c 5003 MOVF 0x3,0x0,0x000069e 200b ADDWFC 0xb,0x0,0x00006a0 0100 MOVLB 0x00006a2 6fce MOVWF 0xce,0x10006a4 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0006a6 0e02 MOVLW 0x20006a8 6fc4 MOVWF 0xc4,0x10006aa 0100 MOVLB 0x0 pgs = pgsWRITE_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0006ac 0e04 MOVLW 0x40006ae 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c0006b0 d012 BRA 0x6d6 else F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c0006b2 dad4 RCALL 0xc5c t = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c0006b4 c010 MOVFF 0x10,0xcf0006b6 f0cf0006b8 c011 MOVFF 0x11,0xd00006ba f0d00006bc c012 MOVFF 0x12,0xd10006be f0d10006c0 c013 MOVFF 0x13,0xd20006c2 f0d20006c4 0100 MOVLB 0x0 ackType = btNACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0006c6 0e05 MOVLW 0x50006c8 6fc6 MOVWF 0xc6,0x10006ca 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0006cc 0e02 MOVLW 0x20006ce 6fc4 MOVWF 0xc4,0x10006d0 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0006d2 0e01 MOVLW 0x10006d4 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.c0006d6 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btPGM) F:\MCP\projects\CAN\canBoot\Source\Main.c0006d8 04db DECF 0xdb,0x0,0x00006da e154 BNZ 0x7840006dc 0100 MOVLB 0x00006de 0564 DECF 0x64,0x0,0x10006e0 e151 BNZ 0x784{ F:\MCP\projects\CAN\canBoot\Source\Main.c0006e2 0e29 MOVLW 0x29 BYTE localIndex = cp.boot.offset; F:\MCP\projects\CAN\canBoot\Source\Main.c0006e4 c065 MOVFF 0x65,0xfdb0006e6 ffdb0006e8 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.c0006ea 50db MOVF 0xdb,0x0,0x00006ec 6aea CLRF 0xea,0x00006ee 0f71 ADDLW 0x710006f0 6ee9 MOVWF 0xe9,0x00006f2 0e00 MOVLW 0x00006f4 22ea ADDWFC 0xea,0x1,0x00006f6 c069 MOVFF 0x69,0xfef0006f8 ffef0006fa 0e29 MOVLW 0x290006fc 28db INCF 0xdb,0x0,0x00006fe 6aea CLRF 0xea,0x0000700 0f71 ADDLW 0x71000702 6ee9 MOVWF 0xe9,0x0000704 0e00 MOVLW 0x0000706 22ea ADDWFC 0xea,0x1,0x0000708 c06a MOVFF 0x6a,0xfef00070a ffef00070c 0e29 MOVLW 0x2900070e 50db MOVF 0xdb,0x0,0x0000710 0f02 ADDLW 0x2000712 6aea CLRF 0xea,0x0000714 0f71 ADDLW 0x71000716 6ee9 MOVWF 0xe9,0x0000718 0e00 MOVLW 0x000071a 22ea ADDWFC 0xea,0x1,0x000071c c06b MOVFF 0x6b,0xfef00071e ffef000720 0e29 MOVLW 0x29000722 50db MOVF 0xdb,0x0,0x0000724 0f03 ADDLW 0x3000726 6aea CLRF 0xea,0x0000728 0f71 ADDLW 0x7100072a 6ee9 MOVWF 0xe9,0x000072c 0e00 MOVLW 0x000072e 22ea ADDWFC 0xea,0x1,0x0000730 c06c MOVFF 0x6c,0xfef000732 ffef000734 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.c000736 50db MOVF 0xdb,0x0,0x0000738 0f04 ADDLW 0x400073a 6aea CLRF 0xea,0x000073c 0f71 ADDLW 0x7100073e 6ee9 MOVWF 0xe9,0x0000740 0e00 MOVLW 0x0000742 22ea ADDWFC 0xea,0x1,0x0000744 c06d MOVFF 0x6d,0xfef000746 ffef000748 0e29 MOVLW 0x2900074a 50db MOVF 0xdb,0x0,0x000074c 0f05 ADDLW 0x500074e 6aea CLRF 0xea,0x0000750 0f71 ADDLW 0x71000752 6ee9 MOVWF 0xe9,0x0000754 0e00 MOVLW 0x0000756 22ea ADDWFC 0xea,0x1,0x0000758 c06e MOVFF 0x6e,0xfef00075a ffef00075c 0e29 MOVLW 0x2900075e 50db MOVF 0xdb,0x0,0x0000760 0f06 ADDLW 0x6000762 6aea CLRF 0xea,0x0000764 0f71 ADDLW 0x71000766 6ee9 MOVWF 0xe9,0x0000768 0e00 MOVLW 0x000076a 22ea ADDWFC 0xea,0x1,0x000076c c06f MOVFF 0x6f,0xfef00076e ffef000770 0e29 MOVLW 0x29000772 50db MOVF 0xdb,0x0,0x0000774 0f07 ADDLW 0x7000776 6aea CLRF 0xea,0x0000778 0f71 ADDLW 0x7100077a 6ee9 MOVWF 0xe9,0x000077c 0e00 MOVLW 0x000077e 22ea ADDWFC 0xea,0x1,0x0000780 c070 MOVFF 0x70,0xfef000782 ffef} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000784 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btADDR) F:\MCP\projects\CAN\canBoot\Source\Main.c000786 04db DECF 0xdb,0x0,0x0000788 e10e BNZ 0x7a600078a 0100 MOVLB 0x000078c 5164 MOVF 0x64,0x0,0x100078e e10b BNZ 0x7a6{ F:\MCP\projects\CAN\canBoot\Source\Main.c000790 da65 RCALL 0xc5c tBoot = tickGet(); F:\MCP\projects\CAN\canBoot\Source\Main.c000792 c010 MOVFF 0x10,0xb1000794 f0b1000796 c011 MOVFF 0x11,0xb2000798 f0b200079a c012 MOVFF 0x12,0xb300079c f0b300079e c013 MOVFF 0x13,0xb40007a0 f0b40007a2 0100 MOVLB 0x0 pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.c0007a4 6bc3 CLRF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0007a6 0e23 MOVLW 0x23 if (hasPacket==TRUE && cp.boot.type==btDONE) F:\MCP\projects\CAN\canBoot\Source\Main.c0007a8 04db DECF 0xdb,0x0,0x00007aa e107 BNZ 0x7ba0007ac 0e02 MOVLW 0x20007ae 0100 MOVLB 0x00007b0 5d64 SUBWF 0x64,0x0,0x10007b2 e103 BNZ 0x7ba{ F:\MCP\projects\CAN\canBoot\Source\Main.c0007b4 0100 MOVLB 0x0 pgs = pgsDONE; F:\MCP\projects\CAN\canBoot\Source\Main.c0007b6 0e05 MOVLW 0x50007b8 6fc3 MOVWF 0xc3,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0007ba d0bd BRA 0x936 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.c0007bc 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.c0007be 0e00 MOVLW 0x0 if (pgmAddress<RM_RESET_VECTOR) F:\MCP\projects\CAN\canBoot\Source\Main.c0007c0 0100 MOVLB 0x00007c2 5dc7 SUBWF 0xc7,0x0,0x10007c4 0e30 MOVLW 0x300007c6 59c8 SUBWFB 0xc8,0x0,0x10007c8 0e00 MOVLW 0x00007ca 59c9 SUBWFB 0xc9,0x0,0x10007cc 0e00 MOVLW 0x00007ce 59ca SUBWFB 0xca,0x0,0x10007d0 e20a BC 0x7e6{ F:\MCP\projects\CAN\canBoot\Source\Main.c0007d2 0100 MOVLB 0x0 ackType = btNACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0007d4 0e05 MOVLW 0x50007d6 6fc6 MOVWF 0xc6,0x10007d8 0100 MOVLB 0x0 pgsAckNext = pgsWAIT_FIRST_DATA; F:\MCP\projects\CAN\canBoot\Source\Main.c0007da 0e02 MOVLW 0x20007dc 6fc4 MOVWF 0xc4,0x10007de 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c0007e0 0e01 MOVLW 0x10007e2 6fc3 MOVWF 0xc3,0x1//Not allowed to write here! F:\MCP\projects\CAN\canBoot\Source\Main.c0007e4 d0a8 BRA 0x936 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.c0007e6 c0c7 MOVFF 0xc7,0x0 TBLPTRU = (BYTE)((pgmAddress & 0xFF0000)>>16); F:\MCP\projects\CAN\canBoot\Source\Main.c0007e8 f0000007ea c0c8 MOVFF 0xc8,0x10007ec f0010007ee c0c9 MOVFF 0xc9,0x20007f0 f0020007f2 c0ca MOVFF 0xca,0x30007f4 f0030007f6 6a00 CLRF 0x0,0x00007f8 6a01 CLRF 0x1,0x00007fa 6a03 CLRF 0x3,0x00007fc 0e10 MOVLW 0x100007fe 90d8 BCF 0xd8,0x0,0x0000800 3203 RRCF 0x3,0x1,0x0000802 3202 RRCF 0x2,0x1,0x0000804 3201 RRCF 0x1,0x1,0x0000806 3200 RRCF 0x0,0x1,0x0000808 06e8 DECF 0xe8,0x1,0x000080a e1f9 BNZ 0x7fe00080c 5000 MOVF 0x0,0x0,0x000080e 6ef8 MOVWF 0xf8,0x0000810 c0c7 MOVFF 0xc7,0x0 TBLPTRH = (BYTE)((pgmAddress & 0xFF00)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000812 f000000814 c0c8 MOVFF 0xc8,0x1000816 f001000818 c0c9 MOVFF 0xc9,0x200081a f00200081c c0ca MOVFF 0xca,0x300081e f003000820 6a00 CLRF 0x0,0x0000822 6a02 CLRF 0x2,0x0000824 6a03 CLRF 0x3,0x0000826 0e08 MOVLW 0x8000828 90d8 BCF 0xd8,0x0,0x000082a 3203 RRCF 0x3,0x1,0x000082c 3202 RRCF 0x2,0x1,0x000082e 3201 RRCF 0x1,0x1,0x0000830 3200 RRCF 0x0,0x1,0x0000832 06e8 DECF 0xe8,0x1,0x0000834 e1f9 BNZ 0x828000836 5000 MOVF 0x0,0x0,0x0000838 6ef7 MOVWF 0xf7,0x000083a 0100 MOVLB 0x0 TBLPTRL = (BYTE)(pgmAddress & 0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c00083c 51c7 MOVF 0xc7,0x0,0x100083e 6ef6 MOVWF 0xf6,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// point to Flash program memory F:\MCP\projects\CAN\canBoot\Source\Main.c000840 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.c000842 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.c000844 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.c000846 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.c000848 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.c00084a 0e55 MOVLW 0x55 EECON2 = 0x55; F:\MCP\projects\CAN\canBoot\Source\Main.c00084c 6ea7 MOVWF 0xa7,0x000084e 0eaa MOVLW 0xaa EECON2 = 0xAA; F:\MCP\projects\CAN\canBoot\Source\Main.c000850 6ea7 MOVWF 0xa7,0x0000852 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.c000854 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.c000856 c0c7 MOVFF 0xc7,0x0 TBLPTRU = (BYTE)((pgmAddress & 0xFF0000)>>16); F:\MCP\projects\CAN\canBoot\Source\Main.c000858 f00000085a c0c8 MOVFF 0xc8,0x100085c f00100085e c0c9 MOVFF 0xc9,0x2000860 f002000862 c0ca MOVFF 0xca,0x3000864 f003000866 6a00 CLRF 0x0,0x0000868 6a01 CLRF 0x1,0x000086a 6a03 CLRF 0x3,0x000086c 0e10 MOVLW 0x1000086e 90d8 BCF 0xd8,0x0,0x0000870 3203 RRCF 0x3,0x1,0x0000872 3202 RRCF 0x2,0x1,0x0000874 3201 RRCF 0x1,0x1,0x0000876 3200 RRCF 0x0,0x1,0x0000878 06e8 DECF 0xe8,0x1,0x000087a e1f9 BNZ 0x86e00087c 5000 MOVF 0x0,0x0,0x000087e 6ef8 MOVWF 0xf8,0x0000880 c0c7 MOVFF 0xc7,0x0 TBLPTRH = (BYTE)((pgmAddress & 0xFF00)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000882 f000000884 c0c8 MOVFF 0xc8,0x1000886 f001000888 c0c9 MOVFF 0xc9,0x200088a f00200088c c0ca MOVFF 0xca,0x300088e f003000890 6a00 CLRF 0x0,0x0000892 6a02 CLRF 0x2,0x0000894 6a03 CLRF 0x3,0x0000896 0e08 MOVLW 0x8000898 90d8 BCF 0xd8,0x0,0x000089a 3203 RRCF 0x3,0x1,0x000089c 3202 RRCF 0x2,0x1,0x000089e 3201 RRCF 0x1,0x1,0x00008a0 3200 RRCF 0x0,0x1,0x00008a2 06e8 DECF 0xe8,0x1,0x00008a4 e1f9 BNZ 0x8980008a6 5000 MOVF 0x0,0x0,0x00008a8 6ef7 MOVWF 0xf7,0x00008aa 0100 MOVLB 0x0 TBLPTRL = (BYTE)(pgmAddress & 0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c0008ac 51c7 MOVF 0xc7,0x0,0x10008ae 6ef6 MOVWF 0xf6,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// Load bytes F:\MCP\projects\CAN\canBoot\Source\Main.c0008b0 0e11 MOVLW 0x11 for(i=0;i<63;i++) F:\MCP\projects\CAN\canBoot\Source\Main.c0008b2 6adb CLRF 0xdb,0x00008b4 0e3f MOVLW 0x3f0008b6 6ef3 MOVWF 0xf3,0x00008b8 0e11 MOVLW 0x110008ba cfdb MOVFF 0xfdb,0xff40008bc fff40008be 50f3 MOVF 0xf3,0x0,0x00008c0 5cf4 SUBWF 0xf4,0x0,0x00008c2 e215 BC 0x8ee0008e8 0e11 MOVLW 0x110008ea 2adb INCF 0xdb,0x1,0x00008ec d7e3 BRA 0x8b4{ F:\MCP\projects\CAN\canBoot\Source\Main.c0008c4 0e11 MOVLW 0x11 TABLAT=pgmData[i]; F:\MCP\projects\CAN\canBoot\Source\Main.c0008c6 50db MOVF 0xdb,0x0,0x00008c8 6aea CLRF 0xea,0x00008ca 0f71 ADDLW 0x710008cc 6ee9 MOVWF 0xe9,0x00008ce 0e00 MOVLW 0x00008d0 22ea ADDWFC 0xea,0x1,0x00008d2 50ef MOVF 0xef,0x0,0x00008d4 6ef5 MOVWF 0xf5,0x00008d6 0e11 MOVLW 0x11 pgmData[i]=0x0; F:\MCP\projects\CAN\canBoot\Source\Main.c0008d8 50db MOVF 0xdb,0x0,0x00008da 6aea CLRF 0xea,0x00008dc 0f71 ADDLW 0x710008de 6ee9 MOVWF 0xe9,0x00008e0 0e00 MOVLW 0x00008e2 22ea ADDWFC 0xea,0x1,0x00008e4 6aef CLRF 0xef,0x00008e6 d9b8 RCALL 0xc58 TBLWTPOSTINC_Func(); F:\MCP\projects\CAN\canBoot\Source\Main.c} F:\MCP\projects\CAN\canBoot\Source\Main.c0008ee c0b0 MOVFF 0xb0,0xff5 TABLAT=pgmData[63]; F:\MCP\projects\CAN\canBoot\Source\Main.c0008f0 fff50008f2 d9b0 RCALL 0xc54 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.c0008f4 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.c0008f6 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.c0008f8 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.c0008fa 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.c0008fc 0e55 MOVLW 0x55 EECON2 = 0x55; F:\MCP\projects\CAN\canBoot\Source\Main.c0008fe 6ea7 MOVWF 0xa7,0x0000900 0eaa MOVLW 0xaa EECON2 = 0xAA; F:\MCP\projects\CAN\canBoot\Source\Main.c000902 6ea7 MOVWF 0xa7,0x0000904 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.c000906 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.c000908 94a6 BCF 0xa6,0x2,0x0 EECON1bits.WREN = 0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c00090a c0cb MOVFF 0xcb,0xc7 pgmAddress = newPgmAddress; F:\MCP\projects\CAN\canBoot\Source\Main.c00090c f0c700090e c0cc MOVFF 0xcc,0xc8000910 f0c8000912 c0cd MOVFF 0xcd,0xc9000914 f0c9000916 c0ce MOVFF 0xce,0xca000918 f0ca00091a 0100 MOVLB 0x0 ackType = btACK; F:\MCP\projects\CAN\canBoot\Source\Main.c00091c 0e04 MOVLW 0x400091e 6fc6 MOVWF 0xc6,0x1000920 0100 MOVLB 0x0 pgs = pgsSEND_ACK; F:\MCP\projects\CAN\canBoot\Source\Main.c000922 0e01 MOVLW 0x1000924 6fc3 MOVWF 0xc3,0x1F:\MCP\projects\CAN\canBoot\Source\Main.c000926 d007 BRA 0x936 break; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.ccase pgsDONE: F:\MCP\projects\CAN\canBoot\Source\Main.c000928 9282 BCF 0x82,0x1,0x0 LED0_IO= 0; F:\MCP\projects\CAN\canBoot\Source\Main.c00092a ef00 GOTO 0x3000 _asm goto RM_RESET_VECTOR _endasm F:\MCP\projects\CAN\canBoot\Source\Main.c00092c f01800092e d003 BRA 0x936 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.c000930 0100 MOVLB 0x0 pgs = pgsWAITING_START; F:\MCP\projects\CAN\canBoot\Source\Main.c000932 6bc3 CLRF 0xc3,0x1000934 d000 BRA 0x936 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.c000938 0e2a MOVLW 0x2a } F:\MCP\projects\CAN\canBoot\Source\Main.c00093a 5ce1 SUBWF 0xe1,0x0,0x000093c e202 BC 0x94200093e 6ae1 CLRF 0xe1,0x0000940 52e5 MOVF 0xe5,0x1,0x0000942 6ee1 MOVWF 0xe1,0x0000944 52e5 MOVF 0xe5,0x1,0x0000946 cfe7 MOVFF 0xfe7,0xfd9000948 ffd900094a 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.c00094c 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.c00094e 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.c000950 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIEH = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c000952 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.c000954 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.c000956 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.c000958 0e80 MOVLW 0x80 CANCON = 0x80; //request config mode F:\MCP\projects\CAN\canBoot\Source\Main.c00095a 6e6f MOVWF 0x6f,0x000095c 0ee0 MOVLW 0xe0 while ((CANSTAT & 0xE0) != 0x80 ); //wait for config mode request F:\MCP\projects\CAN\canBoot\Source\Main.c00095e 146e ANDWF 0x6e,0x0,0x0000960 0880 SUBLW 0x80000962 e001 BZ 0x966000964 d7fb BRA 0x95cF:\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.c000966 0e04 MOVLW 0x4 BRGCON1 = 0x04; F:\MCP\projects\CAN\canBoot\Source\Main.c000968 6e70 MOVWF 0x70,0x000096a 0ed1 MOVLW 0xd1 BRGCON2 = 0xD1; F:\MCP\projects\CAN\canBoot\Source\Main.c00096c 6e71 MOVWF 0x71,0x000096e 0e81 MOVLW 0x81 BRGCON3 = 0x81; F:\MCP\projects\CAN\canBoot\Source\Main.c000970 6e72 MOVWF 0x72,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c000972 6a77 CLRF 0x77,0x0 ECANCON=0; F:\MCP\projects\CAN\canBoot\Source\Main.c000974 8e77 BSF 0x77,0x7,0x0 ECANCONbits.MDSEL1 = 1; F:\MCP\projects\CAN\canBoot\Source\Main.c000976 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.c000978 8c60 BSF 0x60,0x6,0x0 RXB0CONbits.RXM1=1; F:\MCP\projects\CAN\canBoot\Source\Main.c00097a 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.c00097c 010d MOVLB 0xd TXBIE = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c00097e 6bfc CLRF 0xfc,0x1F:\MCP\projects\CAN\canBoot\Source\Main.c//rx no interrupt F:\MCP\projects\CAN\canBoot\Source\Main.c000980 6aa4 CLRF 0xa4,0x0 PIR3 = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c000982 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.c000984 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.c000986 6a6f CLRF 0x6f,0x0 CANCON = 0x00;//request normal mode F:\MCP\projects\CAN\canBoot\Source\Main.c000988 0ee0 MOVLW 0xe0 while ((CANSTAT & 0xE0) != 0x00 );//wait for normal mode F:\MCP\projects\CAN\canBoot\Source\Main.c00098a 146e ANDWF 0x6e,0x0,0x000098c e001 BZ 0x99000098e d7fc BRA 0x988#endif F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000990 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.c000992 0e0f MOVLW 0xf ECANCON=(ECANCON&0b00000)|(0b10000|(CANCON&0x0F)); F:\MCP\projects\CAN\canBoot\Source\Main.c000994 146f ANDWF 0x6f,0x0,0x0000996 0910 IORLW 0x10000998 6e00 MOVWF 0x0,0x000099a 0e00 MOVLW 0x000099c 1477 ANDWF 0x77,0x0,0x000099e 1000 IORWF 0x0,0x0,0x00009a0 6e77 MOVWF 0x77,0x00009a2 be60 BTFSC 0x60,0x7,0x0 if (!RXB0CONbits.RXFUL) return FALSE; F:\MCP\projects\CAN\canBoot\Source\Main.c0009a4 d002 BRA 0x9aa0009a6 0e00 MOVLW 0x00009a8 d08a BRA 0xabeF:\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.c0009aa 0e06 MOVLW 0x6 cp.type = ((RXB0SIDH&0xC)>>6); F:\MCP\projects\CAN\canBoot\Source\Main.c0009ac 6e00 MOVWF 0x0,0x00009ae 0e0c MOVLW 0xc0009b0 1461 ANDWF 0x61,0x0,0x00009b2 c000 MOVFF 0x0,0xfe70009b4 ffe70009b6 52e7 MOVF 0xe7,0x1,0x00009b8 e004 BZ 0x9c20009ba 42e8 RRNCF 0xe8,0x1,0x00009bc 0b7f ANDLW 0x7f0009be 06e7 DECF 0xe7,0x1,0x00009c0 e1fc BNZ 0x9ba0009c2 0100 MOVLB 0x00009c4 6f60 MOVWF 0x60,0x1F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c0009c6 5160 MOVF 0x60,0x0,0x1 if (cp.type==ptBOOT) F:\MCP\projects\CAN\canBoot\Source\Main.c0009c8 e11b BNZ 0xa00{ F:\MCP\projects\CAN\canBoot\Source\Main.c0009ca 0e38 MOVLW 0x38 cp.boot.type = ((RXB0SIDH&0x38)>>3); F:\MCP\projects\CAN\canBoot\Source\Main.c0009cc 1461 ANDWF 0x61,0x0,0x00009ce 40e8 RRNCF 0xe8,0x0,0x00009d0 40e8 RRNCF 0xe8,0x0,0x00009d2 40e8 RRNCF 0xe8,0x0,0x00009d4 0b1f ANDLW 0x1f0009d6 6f64 MOVWF 0x64,0x10009d8 0e03 MOVLW 0x3 cp.boot.offset= ((RXB0SIDH&0x7)<<5)+((RXB0SIDL&0xE0)>>3)+(RXB0SIDL&0x3); F:\MCP\projects\CAN\canBoot\Source\Main.c0009da 1462 ANDWF 0x62,0x0,0x00009dc 6e01 MOVWF 0x1,0x00009de 0ee0 MOVLW 0xe00009e0 1462 ANDWF 0x62,0x0,0x00009e2 40e8 RRNCF 0xe8,0x0,0x00009e4 40e8 RRNCF 0xe8,0x0,0x00009e6 40e8 RRNCF 0xe8,0x0,0x00009e8 0b1f ANDLW 0x1f0009ea 6e00 MOVWF 0x0,0x00009ec 0e07 MOVLW 0x70009ee 1461 ANDWF 0x61,0x0,0x00009f0 0d20 MULLW 0x200009f2 50f3 MOVF 0xf3,0x0,0x00009f4 2400 ADDWF 0x0,0x0,0x00009f6 2401 ADDWF 0x1,0x0,0x00009f8 6f65 MOVWF 0x65,0x10009fa cf63 MOVFF 0xf63,0x66 cp.boot.rid = RXB0EIDH; F:\MCP\projects\CAN\canBoot\Source\Main.c0009fc f066} F:\MCP\projects\CAN\canBoot\Source\Main.c0009fe d030 BRA 0xa60 else F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000a00 0e3c MOVLW 0x3c cp.pgm.class= ((RXB0SIDH&0x3C)>>2); F:\MCP\projects\CAN\canBoot\Source\Main.c000a02 1461 ANDWF 0x61,0x0,0x0000a04 40e8 RRNCF 0xe8,0x0,0x0000a06 40e8 RRNCF 0xe8,0x0,0x0000a08 0b3f ANDLW 0x3f000a0a 6f61 MOVWF 0x61,0x1000a0c 0e03 MOVLW 0x3 cp.pgm.id = (((WORD)RXB0SIDH&0x3)<<13)+(((WORD)RXB0SIDL&0xE0)<<5)+((RXB0SIDL&0x3)<<8)+RXB0EIDH; F:\MCP\projects\CAN\canBoot\Source\Main.c000a0e 1461 ANDWF 0x61,0x0,0x0000a10 6e04 MOVWF 0x4,0x0000a12 6a05 CLRF 0x5,0x0000a14 3804 SWAPF 0x4,0x0,0x0000a16 6a04 CLRF 0x4,0x0000a18 34e8 RLCF 0xe8,0x0,0x0000a1a 0be0 ANDLW 0xe0000a1c 6e05 MOVWF 0x5,0x0000a1e 0ee0 MOVLW 0xe0000a20 1462 ANDWF 0x62,0x0,0x0000a22 6e06 MOVWF 0x6,0x0000a24 6a07 CLRF 0x7,0x0000a26 0e05 MOVLW 0x5000a28 90d8 BCF 0xd8,0x0,0x0000a2a 3606 RLCF 0x6,0x1,0x0000a2c 3607 RLCF 0x7,0x1,0x0000a2e 04e8 DECF 0xe8,0x0,0x0000a30 e1fb BNZ 0xa28000a32 5004 MOVF 0x4,0x0,0x0000a34 2406 ADDWF 0x6,0x0,0x0000a36 6e02 MOVWF 0x2,0x0000a38 5005 MOVF 0x5,0x0,0x0000a3a 2007 ADDWFC 0x7,0x0,0x0000a3c 6e03 MOVWF 0x3,0x0000a3e 0e03 MOVLW 0x3000a40 1462 ANDWF 0x62,0x0,0x0000a42 0e00 MOVLW 0x0000a44 50f3 MOVF 0xf3,0x0,0x0000a46 0100 MOVLB 0x0000a48 2402 ADDWF 0x2,0x0,0x0000a4a 6e00 MOVWF 0x0,0x0000a4c 0e00 MOVLW 0x0000a4e 2003 ADDWFC 0x3,0x0,0x0000a50 6e01 MOVWF 0x1,0x0000a52 5063 MOVF 0x63,0x0,0x0000a54 0100 MOVLB 0x0000a56 2400 ADDWF 0x0,0x0,0x0000a58 6f62 MOVWF 0x62,0x1000a5a 0e00 MOVLW 0x0000a5c 2001 ADDWFC 0x1,0x0,0x0000a5e 6f63 MOVWF 0x63,0x1} F:\MCP\projects\CAN\canBoot\Source\Main.c000a60 cf64 MOVFF 0xf64,0x67 cp.sid = RXB0EIDL; F:\MCP\projects\CAN\canBoot\Source\Main.c000a62 f067F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c// Data length F:\MCP\projects\CAN\canBoot\Source\Main.c000a64 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.c000a66 0b01 ANDLW 0x1000a68 6e02 MOVWF 0x2,0x0000a6a 5065 MOVF 0x65,0x0,0x0000a6c 0b02 ANDLW 0x2000a6e e001 BZ 0xa72000a70 0e01 MOVLW 0x1000a72 24e8 ADDWF 0xe8,0x0,0x0000a74 6e01 MOVWF 0x1,0x0000a76 5065 MOVF 0x65,0x0,0x0000a78 0b04 ANDLW 0x4000a7a e001 BZ 0xa7e000a7c 0e01 MOVLW 0x1000a7e 0d04 MULLW 0x4000a80 cff3 MOVFF 0xff3,0x0000a82 f000000a84 5065 MOVF 0x65,0x0,0x0000a86 0b08 ANDLW 0x8000a88 e001 BZ 0xa8c000a8a 0e01 MOVLW 0x1000a8c 0d08 MULLW 0x8000a8e 50f3 MOVF 0xf3,0x0,0x0000a90 2400 ADDWF 0x0,0x0,0x0000a92 2401 ADDWF 0x1,0x0,0x0000a94 2402 ADDWF 0x2,0x0,0x0000a96 6f68 MOVWF 0x68,0x1F:\MCP\projects\CAN\canBoot\Source\Main.c// Data one bye one, for speed F:\MCP\projects\CAN\canBoot\Source\Main.c000a98 cf66 MOVFF 0xf66,0x69 cp.data[0]=RXB0D0; cp.data[1]=RXB0D1; F:\MCP\projects\CAN\canBoot\Source\Main.c000a9a f069000a9c cf67 MOVFF 0xf67,0x6a000a9e f06a000aa0 cf68 MOVFF 0xf68,0x6b cp.data[2]=RXB0D2; cp.data[3]=RXB0D3; F:\MCP\projects\CAN\canBoot\Source\Main.c000aa2 f06b000aa4 cf69 MOVFF 0xf69,0x6c000aa6 f06c000aa8 cf6a MOVFF 0xf6a,0x6d cp.data[4]=RXB0D4; cp.data[5]=RXB0D5; F:\MCP\projects\CAN\canBoot\Source\Main.c000aaa f06d000aac cf6b MOVFF 0xf6b,0x6e000aae f06e000ab0 cf6c MOVFF 0xf6c,0x6f cp.data[6]=RXB0D6; cp.data[7]=RXB0D7; F:\MCP\projects\CAN\canBoot\Source\Main.c000ab2 f06f000ab4 cf6d MOVFF 0xf6d,0x70000ab6 f070F:\MCP\projects\CAN\canBoot\Source\Main.c// Clear ful status F:\MCP\projects\CAN\canBoot\Source\Main.c000ab8 9e60 BCF 0x60,0x7,0x0 RXB0CONbits.RXFUL=0; F:\MCP\projects\CAN\canBoot\Source\Main.cF:\MCP\projects\CAN\canBoot\Source\Main.c000aba 0e01 MOVLW 0x1 return TRUE; F:\MCP\projects\CAN\canBoot\Source\Main.c000abc d000 BRA 0xabe000abe 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.c000ac0 cfd9 MOVFF 0xfd9,0xfe6 BOOL canSendMessage(CAN_PACKET cp) F:\MCP\projects\CAN\canBoot\Source\Main.c000ac2 ffe6000ac4 cfe1 MOVFF 0xfe1,0xfd9000ac6 ffd9000ac8 52e6 MOVF 0xe6,0x1,0x0{ F:\MCP\projects\CAN\canBoot\Source\Main.c000aca 0e03 MOVLW 0x3 BYTE prio = 3; F:\MCP\projects\CAN\canBoot\Source\Main.c000acc 6edf MOVWF 0xdf,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c000ace 010f MOVLB 0xf if ( TXB0CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00011; } F:\MCP\projects\CAN\canBoot\Source\Main.c000ad0 b740 BTFSC 0x40,0x3,0x1000ad2 d004 BRA 0xadc000ad4 0e00 MOVLW 0x0000ad6 1477 ANDWF 0x77,0x0,0x0000ad8 0903 IORLW 0x3000ada 6e77 MOVWF 0x77,0x0000adc 010f MOVLB 0xf if ( TXB1CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00100; } F:\MCP\projects\CAN\canBoot\Source\Main.c000ade b730 BTFSC 0x30,0x3,0x1000ae0 d004 BRA 0xaea000ae2 0e00 MOVLW 0x0000ae4 1477 ANDWF 0x77,0x0,0x0000ae6 0904 IORLW 0x4000ae8 6e77 MOVWF 0x77,0x0000aea 010f MOVLB 0xf if ( TXB2CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00101; } F:\MCP\projects\CAN\canBoot\Source\Main.c000aec b720 BTFSC 0x20,0x3,0x1000aee d005 BRA 0xafa000af0 0e00 MOVLW 0x0000af2 1477 ANDWF 0x77,0x0,0x0000af4 0905 IORLW 0x5000af6 6e77 MOVWF 0x77,0x0// None of the transmit buffers were empty. F:\MCP\projects\CAN\canBoot\Source\Main.c000af8 d002 BRA 0xafe else { return FALSE;} F:\MCP\projects\CAN\canBoot\Source\Main.c000afa 0e00 MOVLW 0x0000afc d0a4 BRA 0xc46F:\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.c000afe 0eee MOVLW 0xee if (cp.type==ptBOOT) F:\MCP\projects\CAN\canBoot\Source\Main.c000b00 50db MOVF 0xdb,0x0,0x0000b02 e124 BNZ 0xb4c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000b04 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.c000b06 50db MOVF 0xdb,0x0,0x0000b08 0be0 ANDLW 0xe0000b0a 0be0 ANDLW 0xe0000b0c 38e8 SWAPF 0xe8,0x0,0x0000b0e 40e8 RRNCF 0xe8,0x0,0x0000b10 6e01 MOVWF 0x1,0x0000b12 0ef2 MOVLW 0xf2000b14 50db MOVF 0xdb,0x0,0x0000b16 0b07 ANDLW 0x7000b18 0d08 MULLW 0x8000b1a cff3 MOVFF 0xff3,0x0000b1c f000000b1e 0eee MOVLW 0xee000b20 50db MOVF 0xdb,0x0,0x0000b22 0b03 ANDLW 0x3000b24 0d40 MULLW 0x40000b26 50f3 MOVF 0xf3,0x0,0x0000b28 2400 ADDWF 0x0,0x0,0x0000b2a 2401 ADDWF 0x1,0x0,0x0000b2c 6e61 MOVWF 0x61,0x0000b2e 0ef3 MOVLW 0xf3 RXB0SIDL = ((cp.boot.offset&0x1C)<<3)+(cp.boot.offset&0x3); F:\MCP\projects\CAN\canBoot\Source\Main.c000b30 50db MOVF 0xdb,0x0,0x0000b32 0b03 ANDLW 0x3000b34 6e00 MOVWF 0x0,0x0000b36 0ef3 MOVLW 0xf3000b38 50db MOVF 0xdb,0x0,0x0000b3a 0b1c ANDLW 0x1c000b3c 0d08 MULLW 0x8000b3e 50f3 MOVF 0xf3,0x0,0x0000b40 2400 ADDWF 0x0,0x0,0x0000b42 6e62 MOVWF 0x62,0x0000b44 0ef4 MOVLW 0xf4 RXB0EIDH = cp.boot.rid; F:\MCP\projects\CAN\canBoot\Source\Main.c000b46 50db MOVF 0xdb,0x0,0x0000b48 6e63 MOVWF 0x63,0x0} F:\MCP\projects\CAN\canBoot\Source\Main.c000b4a d04f BRA 0xbea else F:\MCP\projects\CAN\canBoot\Source\Main.c{ F:\MCP\projects\CAN\canBoot\Source\Main.c000b4c 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.c000b4e 50db MOVF 0xdb,0x0,0x0000b50 0b0f ANDLW 0xf000b52 0d04 MULLW 0x4000b54 cff3 MOVFF 0xff3,0x2000b56 f002000b58 0eee MOVLW 0xee000b5a 50db MOVF 0xdb,0x0,0x0000b5c 0b03 ANDLW 0x3000b5e 0d40 MULLW 0x40000b60 50f3 MOVF 0xf3,0x0,0x0000b62 2402 ADDWF 0x2,0x0,0x0000b64 6e00 MOVWF 0x0,0x0000b66 6a01 CLRF 0x1,0x0000b68 be00 BTFSC 0x0,0x7,0x0000b6a 6801 SETF 0x1,0x0000b6c 0ef0 MOVLW 0xf0000b6e cfdb MOVFF 0xfdb,0x3000b70 f003000b72 0ef1 MOVLW 0xf1000b74 cfdb MOVFF 0xfdb,0x4000b76 f004000b78 0e00 MOVLW 0x0000b7a 1603 ANDWF 0x3,0x1,0x0000b7c 0e60 MOVLW 0x60000b7e 1604 ANDWF 0x4,0x1,0x0000b80 3804 SWAPF 0x4,0x0,0x0000b82 6a04 CLRF 0x4,0x0000b84 30e8 RRCF 0xe8,0x0,0x0000b86 0b07 ANDLW 0x7000b88 6e03 MOVWF 0x3,0x0000b8a 5000 MOVF 0x0,0x0,0x0000b8c 2403 ADDWF 0x3,0x0,0x0000b8e 6e61 MOVWF 0x61,0x0000b90 0ef0 MOVLW 0xf0 RXB0SIDL = ((cp.pgm.id&0x1C00)>>5)+((cp.pgm.id&0x300)>>8); F:\MCP\projects\CAN\canBoot\Source\Main.c000b92 cfdb MOVFF 0xfdb,0x0000b94 f000000b96 0ef1 MOVLW 0xf1000b98 cfdb MOVFF 0xfdb,0x1000b9a f001000b9c 0e00 MOVLW 0x0000b9e 1600 ANDWF 0x0,0x1,0x0000ba0 0e1c MOVLW 0x1c000ba2 1601 ANDWF 0x1,0x1,0x0000ba4 0e05 MOVLW 0x5000ba6 90d8 BCF 0xd8,0x0,0x0000ba8 3201 RRCF 0x1,0x1,0x0000baa 3200 RRCF 0x0,0x1,0x0000bac 04e8 DECF 0xe8,0x0,0x0000bae e1fb BNZ 0xba6000bb0 0ef0 MOVLW 0xf0000bb2 cfdb MOVFF 0xfdb,0x2000bb4 f002000bb6 0ef1 MOVLW 0xf1000bb8 cfdb MOVFF 0xfdb,0x3000bba f003000bbc 0e00 MOVLW 0x0000bbe 1602 ANDWF 0x2,0x1,0x0000bc0 0e03 MOVLW 0x3000bc2 1603 ANDWF 0x3,0x1,0x0000bc4 c003 MOVFF 0x3,0x2000bc6 f002000bc8 6a03 CLRF 0x3,0x0000bca 5000 MOVF 0x0,0x0,0x0000bcc 2402 ADDWF 0x2,0x0,0x0000bce 6e62 MOVWF 0x62,0x0000bd0 0eff MOVLW 0xff RXB0EIDH = (cp.pgm.id&0xFF); F:\MCP\projects\CAN\canBoot\Source\Main.c000bd2 6ee7 MOVWF 0xe7,0x0000bd4 0ef0 MOVLW 0xf0000bd6 cfdb MOVFF 0xfdb,0x0000bd8 f000000bda 0ef1 MOVLW 0xf1000bdc cfdb MOVFF 0xfdb,0x1000bde f001000be0 50e7 MOVF 0xe7,0x0,0x0000be2 1600 ANDWF 0x0,0x1,0x0000be4 6a01 CLRF 0x1,0x0000be6 5000 MOVF 0x0,0x0,0x0000be8 6e63 MOVWF 0x63,0x0} F:\MCP\projects\CAN\canBoot\Source\Main.c000bea c0c1 MOVFF 0xc1,0xf64 RXB0EIDL = MY_ID; F:\MCP\projects\CAN\canBoot\Source\Main.c000bec ff64F:\MCP\projects\CAN\canBoot\Source\Main.c// Data length F:\MCP\projects\CAN\canBoot\Source\Main.c000bee 6a65 CLRF 0x65,0x0 RXB0DLC = 0; F:\MCP\projects\CAN\canBoot\Source\Main.c000bf0 0ef6 MOVLW 0xf6 if (cp.length>8) RXB0DLC=8; else RXB0DLC=cp.length; F:\MCP\projects\CAN\canBoot\Source\Main.c000bf2 50db MOVF 0xdb,0x0,0x0000bf4 0808 SUBLW 0x8000bf6 e203 BC 0xbfe000bf8 0e08 MOVLW 0x8000bfa 6e65 MOVWF 0x65,0x0000bfc d003 BRA 0xc04000bfe 0ef6 MOVLW 0xf6000c00 50db MOVF 0xdb,0x0,0x0000c02 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.c000c04 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.c000c06 0ef7 MOVLW 0xf7 RXB0D0=cp.data[0]; RXB0D1=cp.data[1]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c08 50db MOVF 0xdb,0x0,0x0000c0a 6e66 MOVWF 0x66,0x0000c0c 0ef8 MOVLW 0xf8000c0e 50db MOVF 0xdb,0x0,0x0000c10 6e67 MOVWF 0x67,0x0000c12 0ef9 MOVLW 0xf9 RXB0D2=cp.data[2]; RXB0D3=cp.data[3]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c14 50db MOVF 0xdb,0x0,0x0000c16 6e68 MOVWF 0x68,0x0000c18 0efa MOVLW 0xfa000c1a 50db MOVF 0xdb,0x0,0x0000c1c 6e69 MOVWF 0x69,0x0000c1e 0efb MOVLW 0xfb RXB0D4=cp.data[4]; RXB0D5=cp.data[5]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c20 50db MOVF 0xdb,0x0,0x0000c22 6e6a MOVWF 0x6a,0x0000c24 0efc MOVLW 0xfc000c26 50db MOVF 0xdb,0x0,0x0000c28 6e6b MOVWF 0x6b,0x0000c2a 0efd MOVLW 0xfd RXB0D6=cp.data[6]; RXB0D7=cp.data[7]; F:\MCP\projects\CAN\canBoot\Source\Main.c000c2c 50db MOVF 0xdb,0x0,0x0000c2e 6e6c MOVWF 0x6c,0x0000c30 0efe MOVLW 0xfe000c32 50db MOVF 0xdb,0x0,0x0000c34 6e6d MOVWF 0x6d,0x0F:\MCP\projects\CAN\canBoot\Source\Main.c// set extended or not F:\MCP\projects\CAN\canBoot\Source\Main.c000c36 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.c000c38 0efc MOVLW 0xfc RXB0CON = (RXB0CON & 0b11111100) | prio; F:\MCP\projects\CAN\canBoot\Source\Main.c000c3a 1460 ANDWF 0x60,0x0,0x0000c3c 10df IORWF 0xdf,0x0,0x0000c3e 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.c000c40 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.c000c42 0e01 MOVLW 0x1 return TRUE; F:\MCP\projects\CAN\canBoot\Source\Main.c000c44 d000 BRA 0xc46F:\MCP\projects\CAN\canBoot\Source\Main.c000c46 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canBoot\Source\Main.c000c48 52e5 MOVF 0xe5,0x1,0x0000c4a cfe7 MOVFF 0xfe7,0xfd9000c4c ffd9000c4e 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.c000c50 0008 TBLRD TBLRD F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.c000c52 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.c000c54 000c TBLWT TBLWT F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.c000c56 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.c000c58 000d TBLWTPOSTINC TBLWTPOSTINC F:\MCP\projects\CAN\canBoot\Source\Main.c_endasm F:\MCP\projects\CAN\canBoot\Source\Main.c000c5a 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.c000c5c c0b9 MOVFF 0xb9,0x10 return tickCounter; F:\MCP\projects\CAN\canBoot\Source\Main.c000c5e f010000c60 c0ba MOVFF 0xba,0x11000c62 f011000c64 c0bb MOVFF 0xbb,0x12000c66 f012000c68 c0bc MOVFF 0xbc,0x13000c6a f013000c6c d000 BRA 0xc6e000c6e 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.c000e18 cfd9 MOVFF 0xfd9,0xfe6 BYTE EERead(WORD addr) F:\MCP\projects\CAN\Include\EEAccess.c000e1a ffe6000e1c cfe1 MOVFF 0xfe1,0xfd9000e1e ffd9{ F:\MCP\projects\CAN\Include\EEAccess.c000e20 0efd MOVLW 0xfd EEADRH=(BYTE)(addr>>8); F:\MCP\projects\CAN\Include\EEAccess.c000e22 cfdb MOVFF 0xfdb,0x0000e24 f000000e26 0efe MOVLW 0xfe000e28 cfdb MOVFF 0xfdb,0x1000e2a f001000e2c c001 MOVFF 0x1,0x0000e2e f000000e30 6a01 CLRF 0x1,0x0000e32 5000 MOVF 0x0,0x0,0x0000e34 6eaa MOVWF 0xaa,0x0000e36 0eff MOVLW 0xff EEADR=(BYTE)(addr & 0xFF); F:\MCP\projects\CAN\Include\EEAccess.c000e38 6ee7 MOVWF 0xe7,0x0000e3a 0efd MOVLW 0xfd000e3c cfdb MOVFF 0xfdb,0x0000e3e f000000e40 0efe MOVLW 0xfe000e42 cfdb MOVFF 0xfdb,0x1000e44 f001000e46 50e7 MOVF 0xe7,0x0,0x0000e48 1600 ANDWF 0x0,0x1,0x0000e4a 6a01 CLRF 0x1,0x0000e4c 5000 MOVF 0x0,0x0,0x0000e4e 6ea9 MOVWF 0xa9,0x0000e50 9ea6 BCF 0xa6,0x7,0x0 EECON1bits.EEPGD=0; F:\MCP\projects\CAN\Include\EEAccess.c000e52 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS=0; F:\MCP\projects\CAN\Include\EEAccess.c000e54 80a6 BSF 0xa6,0x0,0x0 EECON1bits.RD=1; F:\MCP\projects\CAN\Include\EEAccess.c000e56 50a8 MOVF 0xa8,0x0,0x0 return EEDATA; F:\MCP\projects\CAN\Include\EEAccess.c000e58 d000 BRA 0xe5a000e5a 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\Include\EEAccess.c000e5c cfe7 MOVFF 0xfe7,0xfd9000e5e ffd9000e60 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.c000e62 cfd9 MOVFF 0xfd9,0xfe6 void EEWrite(WORD addr,BYTE data) F:\MCP\projects\CAN\Include\EEAccess.c000e64 ffe6000e66 cfe1 MOVFF 0xfe1,0xfd9000e68 ffd9{ F:\MCP\projects\CAN\Include\EEAccess.c000e6a 98a1 BCF 0xa1,0x4,0x0 PIR2bits.EEIF=0; F:\MCP\projects\CAN\Include\EEAccess.c000e6c 0efd MOVLW 0xfd EEADRH=(BYTE)(addr>>8); F:\MCP\projects\CAN\Include\EEAccess.c000e6e cfdb MOVFF 0xfdb,0x0000e70 f000000e72 0efe MOVLW 0xfe000e74 cfdb MOVFF 0xfdb,0x1000e76 f001000e78 c001 MOVFF 0x1,0x0000e7a f000000e7c 6a01 CLRF 0x1,0x0000e7e 5000 MOVF 0x0,0x0,0x0000e80 6eaa MOVWF 0xaa,0x0000e82 0eff MOVLW 0xff EEADR=(BYTE)(addr & 0xFF); F:\MCP\projects\CAN\Include\EEAccess.c000e84 6ee7 MOVWF 0xe7,0x0000e86 0efd MOVLW 0xfd000e88 cfdb MOVFF 0xfdb,0x0000e8a f000000e8c 0efe MOVLW 0xfe000e8e cfdb MOVFF 0xfdb,0x1000e90 f001000e92 50e7 MOVF 0xe7,0x0,0x0000e94 1600 ANDWF 0x0,0x1,0x0000e96 6a01 CLRF 0x1,0x0000e98 5000 MOVF 0x0,0x0,0x0000e9a 6ea9 MOVWF 0xa9,0x0000e9c 0efc MOVLW 0xfc EEDATA=data; F:\MCP\projects\CAN\Include\EEAccess.c000e9e 50db MOVF 0xdb,0x0,0x0000ea0 6ea8 MOVWF 0xa8,0x0000ea2 9ea6 BCF 0xa6,0x7,0x0 EECON1bits.EEPGD=0; F:\MCP\projects\CAN\Include\EEAccess.c000ea4 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS=0; F:\MCP\projects\CAN\Include\EEAccess.c000ea6 84a6 BSF 0xa6,0x2,0x0 EECON1bits.WREN=1; F:\MCP\projects\CAN\Include\EEAccess.c000ea8 9ef2 BCF 0xf2,0x7,0x0 INTCONbits.GIE=0; F:\MCP\projects\CAN\Include\EEAccess.c000eaa 0e55 MOVLW 0x55 EECON2=0x55; F:\MCP\projects\CAN\Include\EEAccess.c000eac 6ea7 MOVWF 0xa7,0x0000eae 0eaa MOVLW 0xaa EECON2=0xAA; F:\MCP\projects\CAN\Include\EEAccess.c000eb0 6ea7 MOVWF 0xa7,0x0000eb2 82a6 BSF 0xa6,0x1,0x0 EECON1bits.WR=1; F:\MCP\projects\CAN\Include\EEAccess.c000eb4 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIE=1; F:\MCP\projects\CAN\Include\EEAccess.c000eb6 a8a1 BTFSS 0xa1,0x4,0x0 while(!PIR2bits.EEIF); F:\MCP\projects\CAN\Include\EEAccess.c000eb8 d7fe BRA 0xeb6000eba 94a6 BCF 0xa6,0x2,0x0 EECON1bits.WREN=0; F:\MCP\projects\CAN\Include\EEAccess.c000ebc 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\Include\EEAccess.c000ebe cfe7 MOVFF 0xfe7,0xfd9000ec0 ffd9000ec2 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.c001076 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.c001078 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.c00107a 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.c001050 b0d0 BTFSC 0xd0,0x0,0x0 if(!RCONbits.NOT_BOR) // If BOR is clear E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001052 d006 BRA 0x1060{ E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001054 b2d0 BTFSC 0xd0,0x1,0x0 if(!RCONbits.NOT_POR) // And POR is clear E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001056 d002 BRA 0x105c001058 0e00 MOVLW 0x0 return 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\isbor.c00105a d004 BRA 0x106400105c 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\isbor.c00105e d002 BRA 0x1064} E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001060 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\isbor.c001062 d000 BRA 0x1064001064 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.c001066 a4a1 BTFSS 0xa1,0x2,0x0 if(PIR2bits.LVDIF) E:\Program\MCC18\src\traditional\pmc\reset\islvd.c001068 d003 BRA 0x107000106a 0e01 MOVLW 0x1 return 1; E:\Program\MCC18\src\traditional\pmc\reset\islvd.c00106c d003 BRA 0x107400106e d002 BRA 0x1074 else E:\Program\MCC18\src\traditional\pmc\reset\islvd.c001070 0e00 MOVLW 0x0 return 0; E:\Program\MCC18\src\traditional\pmc\reset\islvd.c001072 d000 BRA 0x1074001074 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.c000f62 a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // If POR is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f64 d01a BRA 0xf9a{ E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f66 a4d0 BTFSS 0xd0,0x2,0x0 if(RCONbits.NOT_PD) // If NOT_PD is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f68 d016 BRA 0xf96{ 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.c000f6a a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // If BOR is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f6c d012 BRA 0xf92{ 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.c000f6e b6d0 BTFSC 0xd0,0x3,0x0 if(!RCONbits.NOT_TO) // If TO is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f70 d002 BRA 0xf76000f72 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f74 d014 BRA 0xf9e#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f76 b8d0 BTFSC 0xd0,0x4,0x0 if(!RCONbits.NOT_RI) // If RI is cleared E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f78 d002 BRA 0xf7e000f7a 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f7c d010 BRA 0xf9eE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c#if defined(STVR_ENABLED) E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f7e aefc BTFSS 0xfc,0x7,0x0 if(STKPTRbits.STKOVF) // If STKOVF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f80 d002 BRA 0xf86000f82 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f84 d00c BRA 0xf9eE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f86 acfc BTFSS 0xfc,0x6,0x0 if(STKPTRbits.STKUNF) // If STKUNF is set E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f88 d002 BRA 0xf8e000f8a 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f8c d008 BRA 0xf9e#endif E:\Program\MCC18\src\traditional\pmc\reset\ismclr.cE:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f8e 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f90 d006 BRA 0xf9e} E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f92 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f94 d004 BRA 0xf9e// 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.c000f96 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f98 d002 BRA 0xf9e} E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f9a 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ismclr.c000f9c d000 BRA 0xf9e000f9e 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.c001012 b2d0 BTFSC 0xd0,0x1,0x0 if(!RCONbits.NOT_POR) // If POR cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001014 d00e BRA 0x1032{ E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001016 a4d0 BTFSS 0xd0,0x2,0x0 if(RCONbits.NOT_PD) // If PD set E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001018 d00a BRA 0x102e{ 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.c00101a b0d0 BTFSC 0xd0,0x0,0x0 if(!RCONbits.NOT_BOR) // If BOR cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00101c d006 BRA 0x102a{ 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.c00101e b6d0 BTFSC 0xd0,0x3,0x0 if(!RCONbits.NOT_TO) // If TO cleared E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001020 d002 BRA 0x1026001022 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001024 d008 BRA 0x1036#endif E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001026 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001028 d006 BRA 0x1036} E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00102a 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c00102c d004 BRA 0x1036// 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.c00102e 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001030 d002 BRA 0x1036} E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001032 0e00 MOVLW 0x0 return 0x00; E:\Program\MCC18\src\traditional\pmc\reset\ispor.c001034 d000 BRA 0x1036001036 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.c000fec a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // if POR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000fee d00e BRA 0x100c{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000ff0 a4d0 BTFSS 0xd0,0x2,0x0 if(RCONbits.NOT_PD) // if NOT_PD is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000ff2 d00a BRA 0x1008{ 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.c000ff4 a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // if BOR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000ff6 d006 BRA 0x1004{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000ff8 a6d0 BTFSS 0xd0,0x3,0x0 if(RCONbits.NOT_TO) // if TO is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000ffa d002 BRA 0x1000000ffc 0e00 MOVLW 0x0 return 0x00; // Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c000ffe d008 BRA 0x1010001000 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001002 d006 BRA 0x1010} E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001004 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c001006 d004 BRA 0x1010// 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.c001008 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00100a d002 BRA 0x1010} E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00100c 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtto.c00100e d000 BRA 0x1010001010 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.c000fc6 a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // if POR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fc8 d00e BRA 0xfe6{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fca b4d0 BTFSC 0xd0,0x2,0x0 if(!RCONbits.NOT_PD) // if NOT_PD is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fcc d00a BRA 0xfe2{ 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.c000fce a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // if BOR is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fd0 d006 BRA 0xfde{ E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fd2 a6d0 BTFSS 0xd0,0x3,0x0 if(RCONbits.NOT_TO) // if TO is set E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fd4 d002 BRA 0xfda000fd6 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fd8 d008 BRA 0xfea000fda 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fdc d006 BRA 0xfea} E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fde 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe0 d004 BRA 0xfea// 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.c000fe2 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe4 d002 BRA 0xfea} E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe6 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswdtwu.c000fe8 d000 BRA 0xfea000fea 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.c000fa0 a2d0 BTFSS 0xd0,0x1,0x0 if(RCONbits.NOT_POR) // If POR is set E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fa2 d00e BRA 0xfc0{ E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fa4 b4d0 BTFSC 0xd0,0x2,0x0 if(!RCONbits.NOT_PD) // If PD is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fa6 d00a BRA 0xfbc{ 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.c000fa8 a0d0 BTFSS 0xd0,0x0,0x0 if(RCONbits.NOT_BOR) // If BOR is set E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000faa d006 BRA 0xfb8{ 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.c000fac b6d0 BTFSC 0xd0,0x3,0x0 if(!RCONbits.NOT_TO) // If TO is cleared E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fae d002 BRA 0xfb4000fb0 0e00 MOVLW 0x0 return 0x00;// Return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb2 d008 BRA 0xfc4#endif E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb4 0e01 MOVLW 0x1 return 1; // Else return TRUE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb6 d006 BRA 0xfc4} E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fb8 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fba d004 BRA 0xfc4// 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.c000fbc 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fbe d002 BRA 0xfc4} E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fc0 0e00 MOVLW 0x0 return 0x00; // Else return FALSE E:\Program\MCC18\src\traditional\pmc\reset\iswu.c000fc2 d000 BRA 0xfc4000fc4 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.c000c70 cfd9 MOVFF 0xfd9,0xfe6 void update_crc(uint16 *p_crc, uint8 data) { F:\MCP\projects\CAN\canBoot\Source\crc16.c000c72 ffe6000c74 cfe1 MOVFF 0xfe1,0xfd9000c76 ffd9000c78 0efd MOVLW 0xfd *p_crc = (*p_crc >> 8) | (*p_crc << 8); F:\MCP\projects\CAN\canBoot\Source\crc16.c000c7a cfdb MOVFF 0xfdb,0xfe9000c7c ffe9000c7e 0efe MOVLW 0xfe000c80 cfdb MOVFF 0xfdb,0xfea000c82 ffea000c84 cfee MOVFF 0xfee,0x2000c86 f002000c88 cfef MOVFF 0xfef,0x3000c8a f003000c8c c003 MOVFF 0x3,0x2000c8e f002000c90 6a03 CLRF 0x3,0x0000c92 0efd MOVLW 0xfd000c94 cfdb MOVFF 0xfdb,0xfe9000c96 ffe9000c98 0efe MOVLW 0xfe000c9a cfdb MOVFF 0xfdb,0xfea000c9c ffea000c9e cfee MOVFF 0xfee,0x4000ca0 f004000ca2 cfef MOVFF 0xfef,0x5000ca4 f005000ca6 c004 MOVFF 0x4,0x5000ca8 f005000caa 6a04 CLRF 0x4,0x0000cac 5002 MOVF 0x2,0x0,0x0000cae 1004 IORWF 0x4,0x0,0x0000cb0 6e00 MOVWF 0x0,0x0000cb2 5003 MOVF 0x3,0x0,0x0000cb4 1005 IORWF 0x5,0x0,0x0000cb6 6e01 MOVWF 0x1,0x0000cb8 0efd MOVLW 0xfd000cba cfdb MOVFF 0xfdb,0xfe9000cbc ffe9000cbe 0efe MOVLW 0xfe000cc0 cfdb MOVFF 0xfdb,0xfea000cc2 ffea000cc4 c000 MOVFF 0x0,0xfee000cc6 ffee000cc8 c001 MOVFF 0x1,0xfed000cca ffed000ccc 0efc MOVLW 0xfc *p_crc ^= data; F:\MCP\projects\CAN\canBoot\Source\crc16.c000cce 50db MOVF 0xdb,0x0,0x0000cd0 6e00 MOVWF 0x0,0x0000cd2 6a01 CLRF 0x1,0x0000cd4 0efd MOVLW 0xfd000cd6 cfdb MOVFF 0xfdb,0xfe9000cd8 ffe9000cda 0efe MOVLW 0xfe000cdc cfdb MOVFF 0xfdb,0xfea000cde ffea000ce0 5000 MOVF 0x0,0x0,0x0000ce2 1aee XORWF 0xee,0x1,0x0000ce4 5001 MOVF 0x1,0x0,0x0000ce6 1aed XORWF 0xed,0x1,0x0000ce8 0efd MOVLW 0xfd *p_crc ^= (*p_crc & 0xff) >> 4; F:\MCP\projects\CAN\canBoot\Source\crc16.c000cea cfdb MOVFF 0xfdb,0xfe9000cec ffe9000cee 0efe MOVLW 0xfe000cf0 cfdb MOVFF 0xfdb,0xfea000cf2 ffea000cf4 cfee MOVFF 0xfee,0x0000cf6 f000000cf8 cfef MOVFF 0xfef,0x1000cfa f001000cfc 0eff MOVLW 0xff000cfe 1600 ANDWF 0x0,0x1,0x0000d00 0e00 MOVLW 0x0000d02 1601 ANDWF 0x1,0x1,0x0000d04 0e04 MOVLW 0x4000d06 90d8 BCF 0xd8,0x0,0x0000d08 3201 RRCF 0x1,0x1,0x0000d0a 3200 RRCF 0x0,0x1,0x0000d0c 04e8 DECF 0xe8,0x0,0x0000d0e e1fb BNZ 0xd06000d10 0efd MOVLW 0xfd000d12 cfdb MOVFF 0xfdb,0xfe9000d14 ffe9000d16 0efe MOVLW 0xfe000d18 cfdb MOVFF 0xfdb,0xfea000d1a ffea000d1c 5000 MOVF 0x0,0x0,0x0000d1e 1aee XORWF 0xee,0x1,0x0000d20 5001 MOVF 0x1,0x0,0x0000d22 1aed XORWF 0xed,0x1,0x0000d24 0efd MOVLW 0xfd *p_crc ^= *p_crc << 12; F:\MCP\projects\CAN\canBoot\Source\crc16.c000d26 cfdb MOVFF 0xfdb,0xfe9000d28 ffe9000d2a 0efe MOVLW 0xfe000d2c cfdb MOVFF 0xfdb,0xfea000d2e ffea000d30 cfee MOVFF 0xfee,0x0000d32 f000000d34 cfef MOVFF 0xfef,0x1000d36 f001000d38 3800 SWAPF 0x0,0x0,0x0000d3a 6a00 CLRF 0x0,0x0000d3c 0bf0 ANDLW 0xf0000d3e 6e01 MOVWF 0x1,0x0000d40 0efd MOVLW 0xfd000d42 cfdb MOVFF 0xfdb,0xfe9000d44 ffe9000d46 0efe MOVLW 0xfe000d48 cfdb MOVFF 0xfdb,0xfea000d4a ffea000d4c 5000 MOVF 0x0,0x0,0x0000d4e 1aee XORWF 0xee,0x1,0x0000d50 5001 MOVF 0x1,0x0,0x0000d52 1aed XORWF 0xed,0x1,0x0000d54 0efd MOVLW 0xfd *p_crc ^= (*p_crc & 0xff) << 5; F:\MCP\projects\CAN\canBoot\Source\crc16.c000d56 cfdb MOVFF 0xfdb,0xfe9000d58 ffe9000d5a 0efe MOVLW 0xfe000d5c cfdb MOVFF 0xfdb,0xfea000d5e ffea000d60 cfee MOVFF 0xfee,0x0000d62 f000000d64 cfef MOVFF 0xfef,0x1000d66 f001000d68 0eff MOVLW 0xff000d6a 1600 ANDWF 0x0,0x1,0x0000d6c 0e00 MOVLW 0x0000d6e 1601 ANDWF 0x1,0x1,0x0000d70 0e05 MOVLW 0x5000d72 90d8 BCF 0xd8,0x0,0x0000d74 3600 RLCF 0x0,0x1,0x0000d76 3601 RLCF 0x1,0x1,0x0000d78 04e8 DECF 0xe8,0x0,0x0000d7a e1fb BNZ 0xd72000d7c 0efd MOVLW 0xfd000d7e cfdb MOVFF 0xfdb,0xfe9000d80 ffe9000d82 0efe MOVLW 0xfe000d84 cfdb MOVFF 0xfdb,0xfea000d86 ffea000d88 5000 MOVF 0x0,0x0,0x0000d8a 1aee XORWF 0xee,0x1,0x0000d8c 5001 MOVF 0x1,0x0,0x0000d8e 1aed XORWF 0xed,0x1,0x0000d90 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canBoot\Source\crc16.c000d92 cfe7 MOVFF 0xfe7,0xfd9000d94 ffd9000d96 0012 RETURN 0x0F:\MCP\projects\CAN\canBoot\Source\crc16.cF:\MCP\projects\CAN\canBoot\Source\crc16.c000d98 cfd9 MOVFF 0xfd9,0xfe6 uint16 calc_crc(uint8 * p_data, uint16 n_bytes) { F:\MCP\projects\CAN\canBoot\Source\crc16.c000d9a ffe6000d9c cfe1 MOVFF 0xfe1,0xfd9000d9e ffd9000da0 0e02 MOVLW 0x2000da2 26e1 ADDWF 0xe1,0x1,0x0000da4 68de SETF 0xde,0x0 uint16 crc = 0xFFFF; F:\MCP\projects\CAN\canBoot\Source\crc16.c000da6 68dd SETF 0xdd,0x0F:\MCP\projects\CAN\canBoot\Source\crc16.c000da8 50d9 MOVF 0xd9,0x0,0x0 for (; n_bytes > 0; n_bytes--) { F:\MCP\projects\CAN\canBoot\Source\crc16.c000daa 0ffb ADDLW 0xfb000dac 6ee9 MOVWF 0xe9,0x0000dae 0eff MOVLW 0xff000db0 20da ADDWFC 0xda,0x0,0x0000db2 6eea MOVWF 0xea,0x0000db4 0e00 MOVLW 0x0000db6 80d8 BSF 0xd8,0x0,0x0000db8 54ee SUBFWB 0xee,0x0,0x0000dba 0e00 MOVLW 0x0000dbc 54ed SUBFWB 0xed,0x0,0x0000dbe e219 BC 0xdf2000de6 0efb MOVLW 0xfb000de8 06db DECF 0xdb,0x1,0x0000dea 0efc MOVLW 0xfc000dec e201 BC 0xdf0000dee 06db DECF 0xdb,0x1,0x0000df0 d7db BRA 0xda8000dc0 0efd MOVLW 0xfd update_crc(&crc, *(p_data++)); F:\MCP\projects\CAN\canBoot\Source\crc16.c000dc2 cfdb MOVFF 0xfdb,0xfe9000dc4 ffe9000dc6 2adb INCF 0xdb,0x1,0x0000dc8 0efe MOVLW 0xfe000dca cfdb MOVFF 0xfdb,0xfea000dcc ffea000dce e301 BNC 0xdd2000dd0 2adb INCF 0xdb,0x1,0x0000dd2 50ef MOVF 0xef,0x0,0x0000dd4 6ee6 MOVWF 0xe6,0x0000dd6 cfd9 MOVFF 0xfd9,0xfe6000dd8 ffe6000dda cfda MOVFF 0xfda,0xfe6000ddc ffe6000dde df48 RCALL 0xc70000de0 52e5 MOVF 0xe5,0x1,0x0000de2 52e5 MOVF 0xe5,0x1,0x0000de4 52e5 MOVF 0xe5,0x1,0x0} F:\MCP\projects\CAN\canBoot\Source\crc16.cF:\MCP\projects\CAN\canBoot\Source\crc16.c000df2 cfde MOVFF 0xfde,0x0 return crc; F:\MCP\projects\CAN\canBoot\Source\crc16.c000df4 f000000df6 cfdd MOVFF 0xfdd,0x1000df8 f001000dfa c000 MOVFF 0x0,0xff3000dfc fff3000dfe c001 MOVFF 0x1,0xff4000e00 fff4000e02 0e02 MOVLW 0x2 } F:\MCP\projects\CAN\canBoot\Source\crc16.c000e04 5ce1 SUBWF 0xe1,0x0,0x0000e06 e203 BC 0xe0e000e08 d000 BRA 0xe0a000e0a 6ae1 CLRF 0xe1,0x0000e0c 52e5 MOVF 0xe5,0x1,0x0000e0e 6ee1 MOVWF 0xe1,0x0000e10 52e5 MOVF 0xe5,0x1,0x0000e12 cfe7 MOVFF 0xfe7,0xfd9000e14 ffd9000e16 0012 RETURN 0x0