gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; ---------------------------------------------- 00002 ; BASE DESIGN FOR USB PIC PERIPHERAL 00003 ; 00004 ; Copyright Telford Tendys 2006,2007,2009 00005 ; Licensed to the world under Gnu GPLv2 or later 00006 ; This software comes with absolutely no warranty 00007 ; ---------------------------------------------- 00008 00009 #include p18f2455.inc 00001 LIST 00002 00003 ;========================================================================== 00004 ; MPASM PIC18F2455 processor include 00005 ; 00006 ; (c) Copyright 1999-2007 Microchip Technology, All rights reserved 00007 ;========================================================================== 00008 00009 NOLIST 00010 00011 ;========================================================================== 00012 ; This header file defines configurations, registers, and other useful 00013 ; bits of information for the PIC18F2455 microcontroller. These names 00014 ; are taken to match the data sheets as closely as possible. 00015 ; 00016 ; Note that the processor must be selected before this file is included. 00017 ; The processor may be selected the following ways: 00018 ; 00019 ; 1. Command line switch: 00020 ; C:\MPASM MYFILE.ASM /PIC18F2455 00021 ; 2. LIST directive in the source file 00022 ; LIST P=PIC18F2455 00023 ; 3. Processor Type entry in the MPASM full-screen interface 00024 ; 4. Setting the processor in the MPLAB Project Dialog 00025 ;========================================================================== 00026 00027 ;========================================================================== 00028 ; 00029 ; Verify Processor 00030 ; 00031 ;========================================================================== 00032 IFNDEF __18F2455 00033 MESSG "Processor-header file mismatch. Verify selected processor." 00034 ENDIF 00035 00036 ;========================================================================== 00037 ; 18xxxx Family EQUates 00038 ;========================================================================== 00000000 00039 FSR0 EQU 0 00000001 00040 FSR1 EQU 1 00000002 00041 FSR2 EQU 2 00042 00000001 00043 FAST EQU 1 00044 00000000 00045 W EQU 0 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000000 00046 A EQU 0 00000000 00047 ACCESS EQU 0 00000001 00048 BANKED EQU 1 00049 ;========================================================================== 00050 00051 ;========================================================================== 00052 ; 16Cxxx/17Cxxx Substitutions 00053 ;========================================================================== 0000 00054 #define DDRA TRISA ; PIC17Cxxx SFR substitution 0000 00055 #define DDRB TRISB ; PIC17Cxxx SFR substitution 0000 00056 #define DDRC TRISC ; PIC17Cxxx SFR substitution 0000 00057 #define DDRD TRISD ; PIC17Cxxx SFR substitution 0000 00058 #define DDRE TRISE ; PIC17Cxxx SFR substitution 00059 00060 ;========================================================================== 00061 ; 00062 ; Register Definitions 00063 ; 00064 ;========================================================================== 00065 00066 ;----- Register Files ----------------------------------------------------- 00000F66 00067 UFRM EQU H'0F66' 00000F66 00068 UFRML EQU H'0F66' 00000F67 00069 UFRMH EQU H'0F67' 00000F68 00070 UIR EQU H'0F68' 00000F69 00071 UIE EQU H'0F69' 00000F6A 00072 UEIR EQU H'0F6A' 00000F6B 00073 UEIE EQU H'0F6B' 00000F6C 00074 USTAT EQU H'0F6C' 00000F6D 00075 UCON EQU H'0F6D' 00000F6E 00076 UADDR EQU H'0F6E' 00000F6F 00077 UCFG EQU H'0F6F' 00000F70 00078 UEP0 EQU H'0F70' 00000F71 00079 UEP1 EQU H'0F71' 00000F72 00080 UEP2 EQU H'0F72' 00000F73 00081 UEP3 EQU H'0F73' 00000F74 00082 UEP4 EQU H'0F74' 00000F75 00083 UEP5 EQU H'0F75' 00000F76 00084 UEP6 EQU H'0F76' 00000F77 00085 UEP7 EQU H'0F77' 00000F78 00086 UEP8 EQU H'0F78' 00000F79 00087 UEP9 EQU H'0F79' 00000F7A 00088 UEP10 EQU H'0F7A' 00000F7B 00089 UEP11 EQU H'0F7B' 00000F7C 00090 UEP12 EQU H'0F7C' 00000F7D 00091 UEP13 EQU H'0F7D' 00000F7E 00092 UEP14 EQU H'0F7E' 00000F7F 00093 UEP15 EQU H'0F7F' 00000F80 00094 PORTA EQU H'0F80' 00000F81 00095 PORTB EQU H'0F81' 00000F82 00096 PORTC EQU H'0F82' 00000F84 00097 PORTE EQU H'0F84' 00000F89 00098 LATA EQU H'0F89' 00000F8A 00099 LATB EQU H'0F8A' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000F8B 00100 LATC EQU H'0F8B' 00000F92 00101 DDRA EQU H'0F92' 00000F92 00102 TRISA EQU H'0F92' 00000F93 00103 DDRB EQU H'0F93' 00000F93 00104 TRISB EQU H'0F93' 00000F94 00105 DDRC EQU H'0F94' 00000F94 00106 TRISC EQU H'0F94' 00000F9B 00107 OSCTUNE EQU H'0F9B' 00000F9D 00108 PIE1 EQU H'0F9D' 00000F9E 00109 PIR1 EQU H'0F9E' 00000F9F 00110 IPR1 EQU H'0F9F' 00000FA0 00111 PIE2 EQU H'0FA0' 00000FA1 00112 PIR2 EQU H'0FA1' 00000FA2 00113 IPR2 EQU H'0FA2' 00000FA6 00114 EECON1 EQU H'0FA6' 00000FA7 00115 EECON2 EQU H'0FA7' 00000FA8 00116 EEDATA EQU H'0FA8' 00000FA9 00117 EEADR EQU H'0FA9' 00000FAB 00118 RCSTA EQU H'0FAB' 00000FAC 00119 TXSTA EQU H'0FAC' 00000FAD 00120 TXREG EQU H'0FAD' 00000FAE 00121 RCREG EQU H'0FAE' 00000FAF 00122 SPBRG EQU H'0FAF' 00000FB0 00123 SPBRGH EQU H'0FB0' 00000FB1 00124 T3CON EQU H'0FB1' 00000FB2 00125 TMR3L EQU H'0FB2' 00000FB3 00126 TMR3H EQU H'0FB3' 00000FB4 00127 CMCON EQU H'0FB4' 00000FB5 00128 CVRCON EQU H'0FB5' 00000FB6 00129 CCP1AS EQU H'0FB6' 00000FB6 00130 ECCP1AS EQU H'0FB6' 00000FB7 00131 CCP1DEL EQU H'0FB7' 00000FB7 00132 ECCP1DEL EQU H'0FB7' 00000FB8 00133 BAUDCON EQU H'0FB8' 00000FBA 00134 CCP2CON EQU H'0FBA' 00000FBB 00135 CCPR2 EQU H'0FBB' 00000FBB 00136 CCPR2L EQU H'0FBB' 00000FBC 00137 CCPR2H EQU H'0FBC' 00000FBD 00138 CCP1CON EQU H'0FBD' 00000FBE 00139 CCPR1 EQU H'0FBE' 00000FBE 00140 CCPR1L EQU H'0FBE' 00000FBF 00141 CCPR1H EQU H'0FBF' 00000FC0 00142 ADCON2 EQU H'0FC0' 00000FC1 00143 ADCON1 EQU H'0FC1' 00000FC2 00144 ADCON0 EQU H'0FC2' 00000FC3 00145 ADRES EQU H'0FC3' 00000FC3 00146 ADRESL EQU H'0FC3' 00000FC4 00147 ADRESH EQU H'0FC4' 00000FC5 00148 SSPCON2 EQU H'0FC5' 00000FC6 00149 SSPCON1 EQU H'0FC6' 00000FC7 00150 SSPSTAT EQU H'0FC7' 00000FC8 00151 SSPADD EQU H'0FC8' 00000FC9 00152 SSPBUF EQU H'0FC9' 00000FCA 00153 T2CON EQU H'0FCA' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000FCB 00154 PR2 EQU H'0FCB' 00000FCC 00155 TMR2 EQU H'0FCC' 00000FCD 00156 T1CON EQU H'0FCD' 00000FCE 00157 TMR1L EQU H'0FCE' 00000FCF 00158 TMR1H EQU H'0FCF' 00000FD0 00159 RCON EQU H'0FD0' 00000FD1 00160 WDTCON EQU H'0FD1' 00000FD2 00161 HLVDCON EQU H'0FD2' 00000FD2 00162 LVDCON EQU H'0FD2' 00000FD3 00163 OSCCON EQU H'0FD3' 00000FD5 00164 T0CON EQU H'0FD5' 00000FD6 00165 TMR0L EQU H'0FD6' 00000FD7 00166 TMR0H EQU H'0FD7' 00000FD8 00167 STATUS EQU H'0FD8' 00000FD9 00168 FSR2L EQU H'0FD9' 00000FDA 00169 FSR2H EQU H'0FDA' 00000FDB 00170 PLUSW2 EQU H'0FDB' 00000FDC 00171 PREINC2 EQU H'0FDC' 00000FDD 00172 POSTDEC2 EQU H'0FDD' 00000FDE 00173 POSTINC2 EQU H'0FDE' 00000FDF 00174 INDF2 EQU H'0FDF' 00000FE0 00175 BSR EQU H'0FE0' 00000FE1 00176 FSR1L EQU H'0FE1' 00000FE2 00177 FSR1H EQU H'0FE2' 00000FE3 00178 PLUSW1 EQU H'0FE3' 00000FE4 00179 PREINC1 EQU H'0FE4' 00000FE5 00180 POSTDEC1 EQU H'0FE5' 00000FE6 00181 POSTINC1 EQU H'0FE6' 00000FE7 00182 INDF1 EQU H'0FE7' 00000FE8 00183 WREG EQU H'0FE8' 00000FE9 00184 FSR0L EQU H'0FE9' 00000FEA 00185 FSR0H EQU H'0FEA' 00000FEB 00186 PLUSW0 EQU H'0FEB' 00000FEC 00187 PREINC0 EQU H'0FEC' 00000FED 00188 POSTDEC0 EQU H'0FED' 00000FEE 00189 POSTINC0 EQU H'0FEE' 00000FEF 00190 INDF0 EQU H'0FEF' 00000FF0 00191 INTCON3 EQU H'0FF0' 00000FF1 00192 INTCON2 EQU H'0FF1' 00000FF2 00193 INTCON EQU H'0FF2' 00000FF3 00194 PROD EQU H'0FF3' 00000FF3 00195 PRODL EQU H'0FF3' 00000FF4 00196 PRODH EQU H'0FF4' 00000FF5 00197 TABLAT EQU H'0FF5' 00000FF6 00198 TBLPTR EQU H'0FF6' 00000FF6 00199 TBLPTRL EQU H'0FF6' 00000FF7 00200 TBLPTRH EQU H'0FF7' 00000FF8 00201 TBLPTRU EQU H'0FF8' 00000FF9 00202 PC EQU H'0FF9' 00000FF9 00203 PCL EQU H'0FF9' 00000FFA 00204 PCLATH EQU H'0FFA' 00000FFB 00205 PCLATU EQU H'0FFB' 00000FFC 00206 STKPTR EQU H'0FFC' 00000FFD 00207 TOS EQU H'0FFD' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000FFD 00208 TOSL EQU H'0FFD' 00000FFE 00209 TOSH EQU H'0FFE' 00000FFF 00210 TOSU EQU H'0FFF' 00211 00212 ;----- UFRML Bits ----------------------------------------------------- 00000000 00213 FRM0 EQU H'0000' 00000001 00214 FRM1 EQU H'0001' 00000002 00215 FRM2 EQU H'0002' 00000003 00216 FRM3 EQU H'0003' 00000004 00217 FRM4 EQU H'0004' 00000005 00218 FRM5 EQU H'0005' 00000006 00219 FRM6 EQU H'0006' 00000007 00220 FRM7 EQU H'0007' 00221 00222 00223 ;----- UFRMH Bits ----------------------------------------------------- 00000000 00224 FRM8 EQU H'0000' 00000001 00225 FRM9 EQU H'0001' 00000002 00226 FRM10 EQU H'0002' 00227 00228 00229 ;----- UIR Bits ----------------------------------------------------- 00000000 00230 URSTIF EQU H'0000' 00000001 00231 UERRIF EQU H'0001' 00000002 00232 ACTVIF EQU H'0002' 00000003 00233 TRNIF EQU H'0003' 00000004 00234 IDLEIF EQU H'0004' 00000005 00235 STALLIF EQU H'0005' 00000006 00236 SOFIF EQU H'0006' 00237 00238 00239 ;----- UIE Bits ----------------------------------------------------- 00000000 00240 URSTIE EQU H'0000' 00000001 00241 UERRIE EQU H'0001' 00000002 00242 ACTVIE EQU H'0002' 00000003 00243 TRNIE EQU H'0003' 00000004 00244 IDLEIE EQU H'0004' 00000005 00245 STALLIE EQU H'0005' 00000006 00246 SOFIE EQU H'0006' 00247 00248 00249 ;----- UEIR Bits ----------------------------------------------------- 00000000 00250 PIDEF EQU H'0000' 00000001 00251 CRC5EF EQU H'0001' 00000002 00252 CRC16EF EQU H'0002' 00000003 00253 DFN8EF EQU H'0003' 00000004 00254 BTOEF EQU H'0004' 00000007 00255 BTSEF EQU H'0007' 00256 00257 00258 ;----- UEIE Bits ----------------------------------------------------- 00000000 00259 PIDEE EQU H'0000' 00000001 00260 CRC5EE EQU H'0001' 00000002 00261 CRC16EE EQU H'0002' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000003 00262 DFN8EE EQU H'0003' 00000004 00263 BTOEE EQU H'0004' 00000007 00264 BTSEE EQU H'0007' 00265 00266 00267 ;----- USTAT Bits ----------------------------------------------------- 00000001 00268 PPBI EQU H'0001' 00000002 00269 DIR EQU H'0002' 00000003 00270 ENDP0 EQU H'0003' 00000004 00271 ENDP1 EQU H'0004' 00000005 00272 ENDP2 EQU H'0005' 00000006 00273 ENDP3 EQU H'0006' 00274 00275 00276 ;----- UCON Bits ----------------------------------------------------- 00000001 00277 SUSPND EQU H'0001' 00000002 00278 RESUME EQU H'0002' 00000003 00279 USBEN EQU H'0003' 00000004 00280 PKTDIS EQU H'0004' 00000005 00281 SE0 EQU H'0005' 00000006 00282 PPBRST EQU H'0006' 00283 00284 00285 ;----- UADDR Bits ----------------------------------------------------- 00000000 00286 ADDR0 EQU H'0000' 00000001 00287 ADDR1 EQU H'0001' 00000002 00288 ADDR2 EQU H'0002' 00000003 00289 ADDR3 EQU H'0003' 00000004 00290 ADDR4 EQU H'0004' 00000005 00291 ADDR5 EQU H'0005' 00000006 00292 ADDR6 EQU H'0006' 00293 00294 00295 ;----- UCFG Bits ----------------------------------------------------- 00000000 00296 PPB0 EQU H'0000' 00000001 00297 PPB1 EQU H'0001' 00000002 00298 FSEN EQU H'0002' 00000003 00299 UTRDIS EQU H'0003' 00000004 00300 UPUEN EQU H'0004' 00000006 00301 UOEMON EQU H'0006' 00000007 00302 UTEYE EQU H'0007' 00303 00304 00305 ;----- UEP0 Bits ----------------------------------------------------- 00000000 00306 EPSTALL EQU H'0000' 00000001 00307 EPINEN EQU H'0001' 00000002 00308 EPOUTEN EQU H'0002' 00000003 00309 EPCONDIS EQU H'0003' 00000004 00310 EPHSHK EQU H'0004' 00311 00312 00313 ;----- UEP1 Bits ----------------------------------------------------- 00000000 00314 EPSTALL EQU H'0000' 00000001 00315 EPINEN EQU H'0001' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000002 00316 EPOUTEN EQU H'0002' 00000003 00317 EPCONDIS EQU H'0003' 00000004 00318 EPHSHK EQU H'0004' 00319 00320 00321 ;----- UEP2 Bits ----------------------------------------------------- 00000000 00322 EPSTALL EQU H'0000' 00000001 00323 EPINEN EQU H'0001' 00000002 00324 EPOUTEN EQU H'0002' 00000003 00325 EPCONDIS EQU H'0003' 00000004 00326 EPHSHK EQU H'0004' 00327 00328 00329 ;----- UEP3 Bits ----------------------------------------------------- 00000000 00330 EPSTALL EQU H'0000' 00000001 00331 EPINEN EQU H'0001' 00000002 00332 EPOUTEN EQU H'0002' 00000003 00333 EPCONDIS EQU H'0003' 00000004 00334 EPHSHK EQU H'0004' 00335 00336 00337 ;----- UEP4 Bits ----------------------------------------------------- 00000000 00338 EPSTALL EQU H'0000' 00000001 00339 EPINEN EQU H'0001' 00000002 00340 EPOUTEN EQU H'0002' 00000003 00341 EPCONDIS EQU H'0003' 00000004 00342 EPHSHK EQU H'0004' 00343 00344 00345 ;----- UEP5 Bits ----------------------------------------------------- 00000000 00346 EPSTALL EQU H'0000' 00000001 00347 EPINEN EQU H'0001' 00000002 00348 EPOUTEN EQU H'0002' 00000003 00349 EPCONDIS EQU H'0003' 00000004 00350 EPHSHK EQU H'0004' 00351 00352 00353 ;----- UEP6 Bits ----------------------------------------------------- 00000000 00354 EPSTALL EQU H'0000' 00000001 00355 EPINEN EQU H'0001' 00000002 00356 EPOUTEN EQU H'0002' 00000003 00357 EPCONDIS EQU H'0003' 00000004 00358 EPHSHK EQU H'0004' 00359 00360 00361 ;----- UEP7 Bits ----------------------------------------------------- 00000000 00362 EPSTALL EQU H'0000' 00000001 00363 EPINEN EQU H'0001' 00000002 00364 EPOUTEN EQU H'0002' 00000003 00365 EPCONDIS EQU H'0003' 00000004 00366 EPHSHK EQU H'0004' 00367 00368 00369 ;----- UEP8 Bits ----------------------------------------------------- gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000000 00370 EPSTALL EQU H'0000' 00000001 00371 EPINEN EQU H'0001' 00000002 00372 EPOUTEN EQU H'0002' 00000003 00373 EPCONDIS EQU H'0003' 00000004 00374 EPHSHK EQU H'0004' 00375 00376 00377 ;----- UEP9 Bits ----------------------------------------------------- 00000000 00378 EPSTALL EQU H'0000' 00000001 00379 EPINEN EQU H'0001' 00000002 00380 EPOUTEN EQU H'0002' 00000003 00381 EPCONDIS EQU H'0003' 00000004 00382 EPHSHK EQU H'0004' 00383 00384 00385 ;----- UEP10 Bits ----------------------------------------------------- 00000000 00386 EPSTALL EQU H'0000' 00000001 00387 EPINEN EQU H'0001' 00000002 00388 EPOUTEN EQU H'0002' 00000003 00389 EPCONDIS EQU H'0003' 00000004 00390 EPHSHK EQU H'0004' 00391 00392 00393 ;----- UEP11 Bits ----------------------------------------------------- 00000000 00394 EPSTALL EQU H'0000' 00000001 00395 EPINEN EQU H'0001' 00000002 00396 EPOUTEN EQU H'0002' 00000003 00397 EPCONDIS EQU H'0003' 00000004 00398 EPHSHK EQU H'0004' 00399 00400 00401 ;----- UEP12 Bits ----------------------------------------------------- 00000000 00402 EPSTALL EQU H'0000' 00000001 00403 EPINEN EQU H'0001' 00000002 00404 EPOUTEN EQU H'0002' 00000003 00405 EPCONDIS EQU H'0003' 00000004 00406 EPHSHK EQU H'0004' 00407 00408 00409 ;----- UEP13 Bits ----------------------------------------------------- 00000000 00410 EPSTALL EQU H'0000' 00000001 00411 EPINEN EQU H'0001' 00000002 00412 EPOUTEN EQU H'0002' 00000003 00413 EPCONDIS EQU H'0003' 00000004 00414 EPHSHK EQU H'0004' 00415 00416 00417 ;----- UEP14 Bits ----------------------------------------------------- 00000000 00418 EPSTALL EQU H'0000' 00000001 00419 EPINEN EQU H'0001' 00000002 00420 EPOUTEN EQU H'0002' 00000003 00421 EPCONDIS EQU H'0003' 00000004 00422 EPHSHK EQU H'0004' 00423 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00424 00425 ;----- UEP15 Bits ----------------------------------------------------- 00000000 00426 EPSTALL EQU H'0000' 00000001 00427 EPINEN EQU H'0001' 00000002 00428 EPOUTEN EQU H'0002' 00000003 00429 EPCONDIS EQU H'0003' 00000004 00430 EPHSHK EQU H'0004' 00431 00432 00433 ;----- PORTA Bits ----------------------------------------------------- 00000000 00434 RA0 EQU H'0000' 00000001 00435 RA1 EQU H'0001' 00000002 00436 RA2 EQU H'0002' 00000003 00437 RA3 EQU H'0003' 00000004 00438 RA4 EQU H'0004' 00000005 00439 RA5 EQU H'0005' 00000006 00440 RA6 EQU H'0006' 00441 00000000 00442 AN0 EQU H'0000' 00000001 00443 AN1 EQU H'0001' 00000002 00444 AN2 EQU H'0002' 00000003 00445 AN3 EQU H'0003' 00000004 00446 T0CKI EQU H'0004' 00000005 00447 AN4 EQU H'0005' 00000006 00448 OSC2 EQU H'0006' 00449 00000002 00450 VREFM EQU H'0002' 00000003 00451 VREFP EQU H'0003' 00000005 00452 LVDIN EQU H'0005' 00453 00000005 00454 HLVDIN EQU H'0005' 00455 00456 00457 ;----- PORTB Bits ----------------------------------------------------- 00000000 00458 RB0 EQU H'0000' 00000001 00459 RB1 EQU H'0001' 00000002 00460 RB2 EQU H'0002' 00000003 00461 RB3 EQU H'0003' 00000004 00462 RB4 EQU H'0004' 00000005 00463 RB5 EQU H'0005' 00000006 00464 RB6 EQU H'0006' 00000007 00465 RB7 EQU H'0007' 00466 00000000 00467 INT0 EQU H'0000' 00000001 00468 INT1 EQU H'0001' 00000002 00469 INT2 EQU H'0002' 00470 00000005 00471 PGM EQU H'0005' 00000006 00472 PGC EQU H'0006' 00000007 00473 PGD EQU H'0007' 00474 00475 00476 ;----- PORTC Bits ----------------------------------------------------- 00000000 00477 RC0 EQU H'0000' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000001 00478 RC1 EQU H'0001' 00000002 00479 RC2 EQU H'0002' 00000004 00480 RC4 EQU H'0004' 00000005 00481 RC5 EQU H'0005' 00000006 00482 RC6 EQU H'0006' 00000007 00483 RC7 EQU H'0007' 00484 00000000 00485 T1OSO EQU H'0000' 00000001 00486 T1OSI EQU H'0001' 00000002 00487 CCP1 EQU H'0002' 00000006 00488 TX EQU H'0006' 00000007 00489 RX EQU H'0007' 00490 00000000 00491 T13CKI EQU H'0000' 00000002 00492 P1A EQU H'0002' 00000006 00493 CK EQU H'0006' 00494 ; DT is a reserved word 00495 ; DT EQU H'0007' 00496 00497 00498 ;----- PORTE Bits ----------------------------------------------------- 00000003 00499 RE3 EQU H'0003' 00500 00501 00502 ;----- LATA Bits ----------------------------------------------------- 00000000 00503 LATA0 EQU H'0000' 00000001 00504 LATA1 EQU H'0001' 00000002 00505 LATA2 EQU H'0002' 00000003 00506 LATA3 EQU H'0003' 00000004 00507 LATA4 EQU H'0004' 00000005 00508 LATA5 EQU H'0005' 00000006 00509 LATA6 EQU H'0006' 00510 00511 00512 ;----- LATB Bits ----------------------------------------------------- 00000000 00513 LATB0 EQU H'0000' 00000001 00514 LATB1 EQU H'0001' 00000002 00515 LATB2 EQU H'0002' 00000003 00516 LATB3 EQU H'0003' 00000004 00517 LATB4 EQU H'0004' 00000005 00518 LATB5 EQU H'0005' 00000006 00519 LATB6 EQU H'0006' 00000007 00520 LATB7 EQU H'0007' 00521 00522 00523 ;----- LATC Bits ----------------------------------------------------- 00000000 00524 LATC0 EQU H'0000' 00000001 00525 LATC1 EQU H'0001' 00000002 00526 LATC2 EQU H'0002' 00000006 00527 LATC6 EQU H'0006' 00000007 00528 LATC7 EQU H'0007' 00529 00530 00531 ;----- DDRA Bits ----------------------------------------------------- gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000000 00532 RA0 EQU H'0000' 00000001 00533 RA1 EQU H'0001' 00000002 00534 RA2 EQU H'0002' 00000003 00535 RA3 EQU H'0003' 00000004 00536 RA4 EQU H'0004' 00000005 00537 RA5 EQU H'0005' 00000006 00538 RA6 EQU H'0006' 00539 00540 00541 ;----- TRISA Bits ----------------------------------------------------- 00000000 00542 TRISA0 EQU H'0000' 00000001 00543 TRISA1 EQU H'0001' 00000002 00544 TRISA2 EQU H'0002' 00000003 00545 TRISA3 EQU H'0003' 00000004 00546 TRISA4 EQU H'0004' 00000005 00547 TRISA5 EQU H'0005' 00000006 00548 TRISA6 EQU H'0006' 00549 00550 00551 ;----- DDRB Bits ----------------------------------------------------- 00000000 00552 RB0 EQU H'0000' 00000001 00553 RB1 EQU H'0001' 00000002 00554 RB2 EQU H'0002' 00000003 00555 RB3 EQU H'0003' 00000004 00556 RB4 EQU H'0004' 00000005 00557 RB5 EQU H'0005' 00000006 00558 RB6 EQU H'0006' 00000007 00559 RB7 EQU H'0007' 00560 00561 00562 ;----- TRISB Bits ----------------------------------------------------- 00000000 00563 TRISB0 EQU H'0000' 00000001 00564 TRISB1 EQU H'0001' 00000002 00565 TRISB2 EQU H'0002' 00000003 00566 TRISB3 EQU H'0003' 00000004 00567 TRISB4 EQU H'0004' 00000005 00568 TRISB5 EQU H'0005' 00000006 00569 TRISB6 EQU H'0006' 00000007 00570 TRISB7 EQU H'0007' 00571 00572 00573 ;----- DDRC Bits ----------------------------------------------------- 00000000 00574 RC0 EQU H'0000' 00000001 00575 RC1 EQU H'0001' 00000002 00576 RC2 EQU H'0002' 00000006 00577 RC6 EQU H'0006' 00000007 00578 RC7 EQU H'0007' 00579 00580 00581 ;----- TRISC Bits ----------------------------------------------------- 00000000 00582 TRISC0 EQU H'0000' 00000001 00583 TRISC1 EQU H'0001' 00000002 00584 TRISC2 EQU H'0002' 00000006 00585 TRISC6 EQU H'0006' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000007 00586 TRISC7 EQU H'0007' 00587 00588 00589 ;----- OSCTUNE Bits ----------------------------------------------------- 00000000 00590 TUN0 EQU H'0000' 00000001 00591 TUN1 EQU H'0001' 00000002 00592 TUN2 EQU H'0002' 00000003 00593 TUN3 EQU H'0003' 00000004 00594 TUN4 EQU H'0004' 00000007 00595 INTSRC EQU H'0007' 00596 00597 00598 ;----- PIE1 Bits ----------------------------------------------------- 00000000 00599 TMR1IE EQU H'0000' 00000001 00600 TMR2IE EQU H'0001' 00000002 00601 CCP1IE EQU H'0002' 00000003 00602 SSPIE EQU H'0003' 00000004 00603 TXIE EQU H'0004' 00000005 00604 RCIE EQU H'0005' 00000006 00605 ADIE EQU H'0006' 00606 00607 00608 ;----- PIR1 Bits ----------------------------------------------------- 00000000 00609 TMR1IF EQU H'0000' 00000001 00610 TMR2IF EQU H'0001' 00000002 00611 CCP1IF EQU H'0002' 00000003 00612 SSPIF EQU H'0003' 00000004 00613 TXIF EQU H'0004' 00000005 00614 RCIF EQU H'0005' 00000006 00615 ADIF EQU H'0006' 00616 00617 00618 ;----- IPR1 Bits ----------------------------------------------------- 00000000 00619 TMR1IP EQU H'0000' 00000001 00620 TMR2IP EQU H'0001' 00000002 00621 CCP1IP EQU H'0002' 00000003 00622 SSPIP EQU H'0003' 00000004 00623 TXIP EQU H'0004' 00000005 00624 RCIP EQU H'0005' 00000006 00625 ADIP EQU H'0006' 00626 00627 00628 ;----- PIE2 Bits ----------------------------------------------------- 00000000 00629 CCP2IE EQU H'0000' 00000001 00630 TMR3IE EQU H'0001' 00000002 00631 LVDIE EQU H'0002' 00000003 00632 BCLIE EQU H'0003' 00000004 00633 EEIE EQU H'0004' 00000005 00634 USBIE EQU H'0005' 00000006 00635 CMIE EQU H'0006' 00000007 00636 OSCFIE EQU H'0007' 00637 00000002 00638 HLVDIE EQU H'0002' 00639 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00640 00641 ;----- PIR2 Bits ----------------------------------------------------- 00000000 00642 CCP2IF EQU H'0000' 00000001 00643 TMR3IF EQU H'0001' 00000002 00644 LVDIF EQU H'0002' 00000003 00645 BCLIF EQU H'0003' 00000004 00646 EEIF EQU H'0004' 00000005 00647 USBIF EQU H'0005' 00000006 00648 CMIF EQU H'0006' 00000007 00649 OSCFIF EQU H'0007' 00650 00000002 00651 HLVDIF EQU H'0002' 00652 00653 00654 ;----- IPR2 Bits ----------------------------------------------------- 00000000 00655 CCP2IP EQU H'0000' 00000001 00656 TMR3IP EQU H'0001' 00000002 00657 LVDIP EQU H'0002' 00000003 00658 BCLIP EQU H'0003' 00000004 00659 EEIP EQU H'0004' 00000005 00660 USBIP EQU H'0005' 00000006 00661 CMIP EQU H'0006' 00000007 00662 OSCFIP EQU H'0007' 00663 00000002 00664 HLVDIP EQU H'0002' 00665 00666 00667 ;----- EECON1 Bits ----------------------------------------------------- 00000000 00668 RD EQU H'0000' 00000001 00669 WR EQU H'0001' 00000002 00670 WREN EQU H'0002' 00000003 00671 WRERR EQU H'0003' 00000004 00672 FREE EQU H'0004' 00000006 00673 CFGS EQU H'0006' 00000007 00674 EEPGD EQU H'0007' 00675 00676 00677 ;----- RCSTA Bits ----------------------------------------------------- 00000000 00678 RX9D EQU H'0000' 00000001 00679 OERR EQU H'0001' 00000002 00680 FERR EQU H'0002' 00000003 00681 ADDEN EQU H'0003' 00000004 00682 CREN EQU H'0004' 00000005 00683 SREN EQU H'0005' 00000006 00684 RX9 EQU H'0006' 00000007 00685 SPEN EQU H'0007' 00686 00000003 00687 ADEN EQU H'0003' 00688 00689 00690 ;----- TXSTA Bits ----------------------------------------------------- 00000000 00691 TX9D EQU H'0000' 00000001 00692 TRMT EQU H'0001' 00000002 00693 BRGH EQU H'0002' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000003 00694 SENDB EQU H'0003' 00000004 00695 SYNC EQU H'0004' 00000005 00696 TXEN EQU H'0005' 00000006 00697 TX9 EQU H'0006' 00000007 00698 CSRC EQU H'0007' 00699 00700 00701 ;----- T3CON Bits ----------------------------------------------------- 00000000 00702 TMR3ON EQU H'0000' 00000001 00703 TMR3CS EQU H'0001' 00000002 00704 T3SYNC EQU H'0002' 00000003 00705 T3CCP1 EQU H'0003' 00000004 00706 T3CKPS0 EQU H'0004' 00000005 00707 T3CKPS1 EQU H'0005' 00000006 00708 T3CCP2 EQU H'0006' 00000007 00709 RD16 EQU H'0007' 00710 00000002 00711 T3NSYNC EQU H'0002' 00712 00000002 00713 NOT_T3SYNC EQU H'0002' 00714 00715 00716 ;----- CMCON Bits ----------------------------------------------------- 00000000 00717 CM0 EQU H'0000' 00000001 00718 CM1 EQU H'0001' 00000002 00719 CM2 EQU H'0002' 00000003 00720 CIS EQU H'0003' 00000004 00721 C1INV EQU H'0004' 00000005 00722 C2INV EQU H'0005' 00000006 00723 C1OUT EQU H'0006' 00000007 00724 C2OUT EQU H'0007' 00725 00726 00727 ;----- CVRCON Bits ----------------------------------------------------- 00000000 00728 CVR0 EQU H'0000' 00000001 00729 CVR1 EQU H'0001' 00000002 00730 CVR2 EQU H'0002' 00000003 00731 CVR3 EQU H'0003' 00000004 00732 CVREF EQU H'0004' 00000005 00733 CVRR EQU H'0005' 00000006 00734 CVROE EQU H'0006' 00000007 00735 CVREN EQU H'0007' 00736 00000004 00737 CVRSS EQU H'0004' 00738 00739 00740 ;----- CCP1AS Bits ----------------------------------------------------- 00000002 00741 PSSAC0 EQU H'0002' 00000003 00742 PSSAC1 EQU H'0003' 00000004 00743 ECCPAS0 EQU H'0004' 00000005 00744 ECCPAS1 EQU H'0005' 00000006 00745 ECCPAS2 EQU H'0006' 00000007 00746 ECCPASE EQU H'0007' 00747 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00748 00749 ;----- ECCP1AS Bits ----------------------------------------------------- 00000002 00750 PSSAC0 EQU H'0002' 00000003 00751 PSSAC1 EQU H'0003' 00000004 00752 ECCPAS0 EQU H'0004' 00000005 00753 ECCPAS1 EQU H'0005' 00000006 00754 ECCPAS2 EQU H'0006' 00000007 00755 ECCPASE EQU H'0007' 00756 00757 00758 ;----- CCP1DEL Bits ----------------------------------------------------- 00000007 00759 PRSEN EQU H'0007' 00760 00761 00762 ;----- ECCP1DEL Bits ----------------------------------------------------- 00000007 00763 PRSEN EQU H'0007' 00764 00765 00766 ;----- BAUDCON Bits ----------------------------------------------------- 00000000 00767 ABDEN EQU H'0000' 00000001 00768 WUE EQU H'0001' 00000003 00769 BRG16 EQU H'0003' 00000004 00770 SCKP EQU H'0004' 00000006 00771 RCIDL EQU H'0006' 00000007 00772 ABDOVF EQU H'0007' 00773 00000004 00774 TXCKP EQU H'0004' 00000005 00775 RXDTP EQU H'0005' 00000006 00776 RCMT EQU H'0006' 00777 00778 00779 ;----- CCP2CON Bits ----------------------------------------------------- 00000000 00780 CCP2M0 EQU H'0000' 00000001 00781 CCP2M1 EQU H'0001' 00000002 00782 CCP2M2 EQU H'0002' 00000003 00783 CCP2M3 EQU H'0003' 00000004 00784 DC2B0 EQU H'0004' 00000005 00785 DC2B1 EQU H'0005' 00786 00787 00788 ;----- CCP1CON Bits ----------------------------------------------------- 00000000 00789 CCP1M0 EQU H'0000' 00000001 00790 CCP1M1 EQU H'0001' 00000002 00791 CCP1M2 EQU H'0002' 00000003 00792 CCP1M3 EQU H'0003' 00000004 00793 DC1B0 EQU H'0004' 00000005 00794 DC1B1 EQU H'0005' 00795 00796 00797 ;----- ADCON2 Bits ----------------------------------------------------- 00000000 00798 ADCS0 EQU H'0000' 00000001 00799 ADCS1 EQU H'0001' 00000002 00800 ADCS2 EQU H'0002' 00000003 00801 ACQT0 EQU H'0003' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000004 00802 ACQT1 EQU H'0004' 00000005 00803 ACQT2 EQU H'0005' 00000007 00804 ADFM EQU H'0007' 00805 00806 00807 ;----- ADCON1 Bits ----------------------------------------------------- 00000000 00808 PCFG0 EQU H'0000' 00000001 00809 PCFG1 EQU H'0001' 00000002 00810 PCFG2 EQU H'0002' 00000003 00811 PCFG3 EQU H'0003' 00000004 00812 VCFG0 EQU H'0004' 00000005 00813 VCFG1 EQU H'0005' 00814 00815 00816 ;----- ADCON0 Bits ----------------------------------------------------- 00000000 00817 ADON EQU H'0000' 00000001 00818 GO_DONE EQU H'0001' 00000002 00819 CHS0 EQU H'0002' 00000003 00820 CHS1 EQU H'0003' 00000004 00821 CHS2 EQU H'0004' 00000005 00822 CHS3 EQU H'0005' 00823 00000001 00824 DONE EQU H'0001' 00825 00000001 00826 GO EQU H'0001' 00827 00000001 00828 NOT_DONE EQU H'0001' 00829 00830 00831 ;----- SSPCON2 Bits ----------------------------------------------------- 00000000 00832 SEN EQU H'0000' 00000001 00833 RSEN EQU H'0001' 00000002 00834 PEN EQU H'0002' 00000003 00835 RCEN EQU H'0003' 00000004 00836 ACKEN EQU H'0004' 00000005 00837 ACKDT EQU H'0005' 00000006 00838 ACKSTAT EQU H'0006' 00000007 00839 GCEN EQU H'0007' 00840 00841 00842 ;----- SSPCON1 Bits ----------------------------------------------------- 00000000 00843 SSPM0 EQU H'0000' 00000001 00844 SSPM1 EQU H'0001' 00000002 00845 SSPM2 EQU H'0002' 00000003 00846 SSPM3 EQU H'0003' 00000004 00847 CKP EQU H'0004' 00000005 00848 SSPEN EQU H'0005' 00000006 00849 SSPOV EQU H'0006' 00000007 00850 WCOL EQU H'0007' 00851 00852 00853 ;----- SSPSTAT Bits ----------------------------------------------------- 00000000 00854 BF EQU H'0000' 00000001 00855 UA EQU H'0001' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000002 00856 R_W EQU H'0002' 00000003 00857 S EQU H'0003' 00000004 00858 P EQU H'0004' 00000005 00859 D_A EQU H'0005' 00000006 00860 CKE EQU H'0006' 00000007 00861 SMP EQU H'0007' 00862 00000002 00863 I2C_READ EQU H'0002' 00000003 00864 I2C_START EQU H'0003' 00000004 00865 I2C_STOP EQU H'0004' 00000005 00866 I2C_DAT EQU H'0005' 00867 00000002 00868 NOT_W EQU H'0002' 00000005 00869 NOT_A EQU H'0005' 00870 00000002 00871 NOT_WRITE EQU H'0002' 00000005 00872 NOT_ADDRESS EQU H'0005' 00873 00000002 00874 READ_WRITE EQU H'0002' 00000005 00875 DATA_ADDRESS EQU H'0005' 00876 00000002 00877 R EQU H'0002' 00000005 00878 D EQU H'0005' 00879 00880 00881 ;----- T2CON Bits ----------------------------------------------------- 00000000 00882 T2CKPS0 EQU H'0000' 00000001 00883 T2CKPS1 EQU H'0001' 00000002 00884 TMR2ON EQU H'0002' 00000003 00885 T2OUTPS0 EQU H'0003' 00000004 00886 T2OUTPS1 EQU H'0004' 00000005 00887 T2OUTPS2 EQU H'0005' 00000006 00888 T2OUTPS3 EQU H'0006' 00889 00890 00891 ;----- T1CON Bits ----------------------------------------------------- 00000000 00892 TMR1ON EQU H'0000' 00000001 00893 TMR1CS EQU H'0001' 00000002 00894 T1SYNC EQU H'0002' 00000003 00895 T1OSCEN EQU H'0003' 00000004 00896 T1CKPS0 EQU H'0004' 00000005 00897 T1CKPS1 EQU H'0005' 00000006 00898 T1RUN EQU H'0006' 00000007 00899 RD16 EQU H'0007' 00900 00000002 00901 NOT_T1SYNC EQU H'0002' 00902 00903 00904 ;----- RCON Bits ----------------------------------------------------- 00000000 00905 NOT_BOR EQU H'0000' 00000001 00906 NOT_POR EQU H'0001' 00000002 00907 NOT_PD EQU H'0002' 00000003 00908 NOT_TO EQU H'0003' 00000004 00909 NOT_RI EQU H'0004' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000006 00910 SBOREN EQU H'0006' 00000007 00911 NOT_IPEN EQU H'0007' 00912 00000000 00913 BOR EQU H'0000' 00000001 00914 POR EQU H'0001' 00000002 00915 PD EQU H'0002' 00000003 00916 TO EQU H'0003' 00000004 00917 RI EQU H'0004' 00000007 00918 IPEN EQU H'0007' 00919 00920 00921 ;----- WDTCON Bits ----------------------------------------------------- 00000000 00922 SWDTEN EQU H'0000' 00923 00000000 00924 SWDTE EQU H'0000' 00925 00926 00927 ;----- HLVDCON Bits ----------------------------------------------------- 00000000 00928 LVDL0 EQU H'0000' 00000001 00929 LVDL1 EQU H'0001' 00000002 00930 LVDL2 EQU H'0002' 00000003 00931 LVDL3 EQU H'0003' 00000004 00932 LVDEN EQU H'0004' 00000005 00933 IRVST EQU H'0005' 00934 00000000 00935 LVV0 EQU H'0000' 00000001 00936 LVV1 EQU H'0001' 00000002 00937 LVV2 EQU H'0002' 00000003 00938 LVV3 EQU H'0003' 00000005 00939 BGST EQU H'0005' 00940 00000000 00941 HLVDL0 EQU H'0000' 00000001 00942 HLVDL1 EQU H'0001' 00000002 00943 HLVDL2 EQU H'0002' 00000003 00944 HLVDL3 EQU H'0003' 00000004 00945 HLVDEN EQU H'0004' 00000007 00946 VDIRMAG EQU H'0007' 00947 00000005 00948 IVRST EQU H'0005' 00949 00950 00951 ;----- LVDCON Bits ----------------------------------------------------- 00000000 00952 LVDL0 EQU H'0000' 00000001 00953 LVDL1 EQU H'0001' 00000002 00954 LVDL2 EQU H'0002' 00000003 00955 LVDL3 EQU H'0003' 00000004 00956 LVDEN EQU H'0004' 00000005 00957 IRVST EQU H'0005' 00958 00000000 00959 LVV0 EQU H'0000' 00000001 00960 LVV1 EQU H'0001' 00000002 00961 LVV2 EQU H'0002' 00000003 00962 LVV3 EQU H'0003' 00000005 00963 BGST EQU H'0005' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00964 00000000 00965 HLVDL0 EQU H'0000' 00000001 00966 HLVDL1 EQU H'0001' 00000002 00967 HLVDL2 EQU H'0002' 00000003 00968 HLVDL3 EQU H'0003' 00000004 00969 HLVDEN EQU H'0004' 00000007 00970 VDIRMAG EQU H'0007' 00971 00000005 00972 IVRST EQU H'0005' 00973 00974 00975 ;----- OSCCON Bits ----------------------------------------------------- 00000000 00976 SCS0 EQU H'0000' 00000001 00977 SCS1 EQU H'0001' 00000002 00978 IOFS EQU H'0002' 00000003 00979 OSTS EQU H'0003' 00000004 00980 IRCF0 EQU H'0004' 00000005 00981 IRCF1 EQU H'0005' 00000006 00982 IRCF2 EQU H'0006' 00000007 00983 IDLEN EQU H'0007' 00984 00000002 00985 FLTS EQU H'0002' 00986 00987 00988 ;----- T0CON Bits ----------------------------------------------------- 00000000 00989 T0PS0 EQU H'0000' 00000001 00990 T0PS1 EQU H'0001' 00000002 00991 T0PS2 EQU H'0002' 00000003 00992 PSA EQU H'0003' 00000004 00993 T0SE EQU H'0004' 00000005 00994 T0CS EQU H'0005' 00000006 00995 T08BIT EQU H'0006' 00000007 00996 TMR0ON EQU H'0007' 00997 00998 00999 ;----- STATUS Bits ----------------------------------------------------- 00000000 01000 C EQU H'0000' 00000001 01001 DC EQU H'0001' 00000002 01002 Z EQU H'0002' 00000003 01003 OV EQU H'0003' 00000004 01004 N EQU H'0004' 01005 01006 01007 ;----- INTCON3 Bits ----------------------------------------------------- 00000000 01008 INT1IF EQU H'0000' 00000001 01009 INT2IF EQU H'0001' 00000003 01010 INT1IE EQU H'0003' 00000004 01011 INT2IE EQU H'0004' 00000006 01012 INT1IP EQU H'0006' 00000007 01013 INT2IP EQU H'0007' 01014 00000000 01015 INT1F EQU H'0000' 00000001 01016 INT2F EQU H'0001' 00000003 01017 INT1E EQU H'0003' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000004 01018 INT2E EQU H'0004' 00000006 01019 INT1P EQU H'0006' 00000007 01020 INT2P EQU H'0007' 01021 01022 01023 ;----- INTCON2 Bits ----------------------------------------------------- 00000000 01024 RBIP EQU H'0000' 00000002 01025 TMR0IP EQU H'0002' 00000004 01026 INTEDG2 EQU H'0004' 00000005 01027 INTEDG1 EQU H'0005' 00000006 01028 INTEDG0 EQU H'0006' 00000007 01029 NOT_RBPU EQU H'0007' 01030 00000002 01031 T0IP EQU H'0002' 00000007 01032 RBPU EQU H'0007' 01033 01034 01035 ;----- INTCON Bits ----------------------------------------------------- 00000000 01036 RBIF EQU H'0000' 00000001 01037 INT0IF EQU H'0001' 00000002 01038 TMR0IF EQU H'0002' 00000003 01039 RBIE EQU H'0003' 00000004 01040 INT0IE EQU H'0004' 00000005 01041 TMR0IE EQU H'0005' 00000006 01042 PEIE EQU H'0006' 00000007 01043 GIE EQU H'0007' 01044 00000001 01045 INT0F EQU H'0001' 00000002 01046 T0IF EQU H'0002' 00000004 01047 INT0E EQU H'0004' 00000005 01048 T0IE EQU H'0005' 00000006 01049 GIEL EQU H'0006' 00000007 01050 GIEH EQU H'0007' 01051 01052 01053 ;----- STKPTR Bits ----------------------------------------------------- 00000000 01054 STKPTR0 EQU H'0000' 00000001 01055 STKPTR1 EQU H'0001' 00000002 01056 STKPTR2 EQU H'0002' 00000003 01057 STKPTR3 EQU H'0003' 00000004 01058 STKPTR4 EQU H'0004' 00000006 01059 STKUNF EQU H'0006' 00000007 01060 STKFUL EQU H'0007' 01061 01062 01063 01064 ;========================================================================== 01065 ; 01066 ; RAM Definitions 01067 ; 01068 ;========================================================================== 01069 __MAXRAM H'0FFF' 01070 __BADRAM H'0800'-H'0F5F' 01071 __BADRAM H'0F83' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01072 __BADRAM H'0F85'-H'0F88' 01073 __BADRAM H'0F8C'-H'0F91' 01074 __BADRAM H'0F95'-H'0F9A' 01075 __BADRAM H'0F9C' 01076 __BADRAM H'0FA3'-H'0FA5' 01077 __BADRAM H'0FAA' 01078 __BADRAM H'0FB9' 01079 __BADRAM H'0FD4' 01080 01081 ;========================================================================== 01082 ; 01083 ; IMPORTANT: For the PIC18 devices, the __CONFIG directive has been 01084 ; superseded by the CONFIG directive. The following settings 01085 ; are available for this device. 01086 ; 01087 ; PLL Prescaler Selection bits: 01088 ; PLLDIV = 1 No prescale (4 MHz oscillator input drives PLL directly) 01089 ; PLLDIV = 2 Divide by 2 (8 MHz oscillator input) 01090 ; PLLDIV = 3 Divide by 3 (12 MHz oscillator input) 01091 ; PLLDIV = 4 Divide by 4 (16 MHz oscillator input) 01092 ; PLLDIV = 5 Divide by 5 (20 MHz oscillator input) 01093 ; PLLDIV = 6 Divide by 6 (24 MHz oscillator input) 01094 ; PLLDIV = 10 Divide by 10 (40 MHz oscillator input) 01095 ; PLLDIV = 12 Divide by 12 (48 MHz oscillator input) 01096 ; 01097 ; CPU System Clock Postscaler: 01098 ; CPUDIV = OSC1_PLL2 [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2] 01099 ; CPUDIV = OSC2_PLL3 [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3] 01100 ; CPUDIV = OSC3_PLL4 [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4] 01101 ; CPUDIV = OSC4_PLL6 [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6] 01102 ; 01103 ; USB Clock Selection bit (used in Full Speed USB mode only; UCFG:FSEN = 1): 01104 ; USBDIV = 1 USB clock source comes directly from the primary oscillator block with no postscale 01105 ; USBDIV = 2 USB clock source comes from the 96 MHz PLL divided by 2 01106 ; 01107 ; Oscillator Selection bits: 01108 ; FOSC = XT_XT XT oscillator, XT used by USB 01109 ; FOSC = XTPLL_XT XT oscillator, PLL enabled, XT used by USB 01110 ; FOSC = ECIO_EC External clock, port function on RA6, EC used by USB 01111 ; FOSC = EC_EC External clock, CLKOUT on RA6, EC used by USB 01112 ; FOSC = ECPLLIO_EC External clock, PLL enabled, port function on RA6, EC used by USB 01113 ; FOSC = ECPLL_EC External clock, PLL enabled, CLKOUT on RA6, EC used by USB 01114 ; FOSC = INTOSCIO_EC Internal oscillator, port function on RA6, EC used by USB 01115 ; FOSC = INTOSC_EC Internal oscillator, CLKOUT on RA6, EC used by USB 01116 ; FOSC = INTOSC_XT Internal oscillator, XT used by USB 01117 ; FOSC = INTOSC_HS Internal oscillator, HS used by USB 01118 ; FOSC = HS HS oscillator, HS used by USB 01119 ; FOSC = HSPLL_HS HS oscillator, PLL enabled, HS used by USB 01120 ; 01121 ; Fail-Safe Clock Monitor Enable bit: 01122 ; FCMEN = OFF Fail-Safe Clock Monitor disabled 01123 ; FCMEN = ON Fail-Safe Clock Monitor enabled 01124 ; 01125 ; Internal/External Oscillator Switchover bit: gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01126 ; IESO = OFF Oscillator Switchover mode disabled 01127 ; IESO = ON Oscillator Switchover mode enabled 01128 ; 01129 ; Power-up Timer Enable bit: 01130 ; PWRT = ON PWRT enabled 01131 ; PWRT = OFF PWRT disabled 01132 ; 01133 ; Brown-out Reset Enable bits: 01134 ; BOR = OFF Brown-out Reset disabled in hardware and software 01135 ; BOR = SOFT Brown-out Reset enabled and controlled by software (SBOREN is enabled) 01136 ; BOR = ON_ACTIVE Brown-out Reset enabled in hardware only and disabled in Sleep mode (SBOREN is disabled) 01137 ; BOR = ON Brown-out Reset enabled in hardware only (SBOREN is disabled) 01138 ; 01139 ; Brown-out Voltage bits: 01140 ; BORV = 0 Maximum setting 01141 ; BORV = 1 01142 ; BORV = 2 01143 ; BORV = 3 Minimum setting 01144 ; 01145 ; USB Voltage Regulator Enable bit: 01146 ; VREGEN = OFF USB voltage regulator disabled 01147 ; VREGEN = ON USB voltage regulator enabled 01148 ; 01149 ; Watchdog Timer Enable bit: 01150 ; WDT = OFF HW Disabled - SW Controlled 01151 ; WDT = ON HW Enabled - SW Disabled 01152 ; 01153 ; Watchdog Timer Postscale Select bits: 01154 ; WDTPS = 1 1:1 01155 ; WDTPS = 2 1:2 01156 ; WDTPS = 4 1:4 01157 ; WDTPS = 8 1:8 01158 ; WDTPS = 16 1:16 01159 ; WDTPS = 32 1:32 01160 ; WDTPS = 64 1:64 01161 ; WDTPS = 128 1:128 01162 ; WDTPS = 256 1:256 01163 ; WDTPS = 512 1:512 01164 ; WDTPS = 1024 1:1024 01165 ; WDTPS = 2048 1:2048 01166 ; WDTPS = 4096 1:4096 01167 ; WDTPS = 8192 1:8192 01168 ; WDTPS = 16384 1:16384 01169 ; WDTPS = 32768 1:32768 01170 ; 01171 ; MCLR Pin Enable bit: 01172 ; MCLRE = OFF RE3 input pin enabled; MCLR disabled 01173 ; MCLRE = ON MCLR pin enabled; RE3 input pin disabled 01174 ; 01175 ; Low-Power Timer 1 Oscillator Enable bit: 01176 ; LPT1OSC = OFF Timer1 configured for higher power operation 01177 ; LPT1OSC = ON Timer1 configured for low-power operation 01178 ; 01179 ; PORTB A/D Enable bit: gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01180 ; PBADEN = OFF PORTB<4:0> pins are configured as digital I/O on Reset 01181 ; PBADEN = ON PORTB<4:0> pins are configured as analog input channels on Reset 01182 ; 01183 ; CCP2 MUX bit: 01184 ; CCP2MX = OFF CCP2 input/output is multiplexed with RB3 01185 ; CCP2MX = ON CCP2 input/output is multiplexed with RC1 01186 ; 01187 ; Stack Full/Underflow Reset Enable bit: 01188 ; STVREN = OFF Stack full/underflow will not cause Reset 01189 ; STVREN = ON Stack full/underflow will cause Reset 01190 ; 01191 ; Single-Supply ICSP Enable bit: 01192 ; LVP = OFF Single-Supply ICSP disabled 01193 ; LVP = ON Single-Supply ICSP enabled 01194 ; 01195 ; Extended Instruction Set Enable bit: 01196 ; XINST = OFF Instruction set extension and Indexed Addressing mode disabled (Legacy mode) 01197 ; XINST = ON Instruction set extension and Indexed Addressing mode enabled 01198 ; 01199 ; Background Debugger Enable bit: 01200 ; DEBUG = ON Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug 01201 ; DEBUG = OFF Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins 01202 ; 01203 ; Code Protection bit Block 0: 01204 ; CP0 = ON Block 0 (000800-001FFFh) code-protected 01205 ; CP0 = OFF Block 0 (000800-001FFFh) not code-protected 01206 ; 01207 ; Code Protection bit Block 1: 01208 ; CP1 = ON Block 1 (002000-003FFFh) code-protected 01209 ; CP1 = OFF Block 1 (002000-003FFFh) not code-protected 01210 ; 01211 ; Code Protection bit Block 2: 01212 ; CP2 = ON Block 2 (004000-005FFFh) code-protected 01213 ; CP2 = OFF Block 2 (004000-005FFFh) not code-protected 01214 ; 01215 ; Boot Block Code Protection bit: 01216 ; CPB = ON Boot block (000000-0007FFh) code-protected 01217 ; CPB = OFF Boot block (000000-0007FFh) not code-protected 01218 ; 01219 ; Data EEPROM Code Protection bit: 01220 ; CPD = ON Data EEPROM code-protected 01221 ; CPD = OFF Data EEPROM not code-protected 01222 ; 01223 ; Write Protection bit Block 0: 01224 ; WRT0 = ON Block 0 (000800-001FFFh) write-protected 01225 ; WRT0 = OFF Block 0 (000800-001FFFh) not write-protected 01226 ; 01227 ; Write Protection bit Block 1: 01228 ; WRT1 = ON Block 1 (002000-003FFFh) write-protected 01229 ; WRT1 = OFF Block 1 (002000-003FFFh) not write-protected 01230 ; 01231 ; Write Protection bit Block 2: 01232 ; WRT2 = ON Block 2 (004000-005FFFh) write-protected 01233 ; WRT2 = OFF Block 2 (004000-005FFFh) not write-protected gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 24 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01234 ; 01235 ; Boot Block Write Protection bit: 01236 ; WRTB = ON Boot block (000000-0007FFh) write-protected 01237 ; WRTB = OFF Boot block (000000-0007FFh) not write-protected 01238 ; 01239 ; Configuration Register Write Protection bit: 01240 ; WRTC = ON Configuration registers (300000-3000FFh) write-protected 01241 ; WRTC = OFF Configuration registers (300000-3000FFh) not write-protected 01242 ; 01243 ; Data EEPROM Write Protection bit: 01244 ; WRTD = ON Data EEPROM write-protected 01245 ; WRTD = OFF Data EEPROM not write-protected 01246 ; 01247 ; Table Read Protection bit Block 0: 01248 ; EBTR0 = ON Block 0 (000800-001FFFh) protected from table reads executed in other blocks 01249 ; EBTR0 = OFF Block 0 (000800-001FFFh) not protected from table reads executed in other blocks 01250 ; 01251 ; Table Read Protection bit Block 1: 01252 ; EBTR1 = ON Block 1 (002000-003FFFh) protected from table reads executed in other blocks 01253 ; EBTR1 = OFF Block 1 (002000-003FFFh) not protected from table reads executed in other blocks 01254 ; 01255 ; Table Read Protection bit Block 2: 01256 ; EBTR2 = ON Block 2 (004000-005FFFh) protected from table reads executed in other blocks 01257 ; EBTR2 = OFF Block 2 (004000-005FFFh) not protected from table reads executed in other blocks 01258 ; 01259 ; Boot Block Table Read Protection: 01260 ; EBTRB = ON Boot block (000000-0007FFh) protected from table reads executed in other blocks 01261 ; EBTRB = OFF Boot block (000000-0007FFh) not protected from table reads executed in other blocks 01262 ; 01263 ;========================================================================== 01264 ;========================================================================== 01265 ; 01266 ; Configuration Bits 01267 ; 01268 ; NAME Address 01269 ; CONFIG1L 300000h 01270 ; CONFIG1H 300001h 01271 ; CONFIG2L 300002h 01272 ; CONFIG2H 300003h 01273 ; CONFIG3H 300005h 01274 ; CONFIG4L 300006h 01275 ; CONFIG5L 300008h 01276 ; CONFIG5H 300009h 01277 ; CONFIG6L 30000Ah 01278 ; CONFIG6H 30000Bh 01279 ; CONFIG7L 30000Ch 01280 ; CONFIG7H 30000Dh 01281 ; 01282 ;========================================================================== 01283 01284 ; The following is an assignment of address values for all of the 01285 ; configuration registers for the purpose of table reads 00300000 01286 _CONFIG1L EQU H'300000' 00300001 01287 _CONFIG1H EQU H'300001' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 25 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00300002 01288 _CONFIG2L EQU H'300002' 00300003 01289 _CONFIG2H EQU H'300003' 00300005 01290 _CONFIG3H EQU H'300005' 00300006 01291 _CONFIG4L EQU H'300006' 00300008 01292 _CONFIG5L EQU H'300008' 00300009 01293 _CONFIG5H EQU H'300009' 0030000A 01294 _CONFIG6L EQU H'30000A' 0030000B 01295 _CONFIG6H EQU H'30000B' 0030000C 01296 _CONFIG7L EQU H'30000C' 0030000D 01297 _CONFIG7H EQU H'30000D' 01298 01299 ;----- CONFIG1L Options -------------------------------------------------- 000000F8 01300 _PLLDIV_1_1L EQU H'F8' ; No prescale (4 MHz oscillator input drives PLL directly) 000000F9 01301 _PLLDIV_2_1L EQU H'F9' ; Divide by 2 (8 MHz oscillator input) 000000FA 01302 _PLLDIV_3_1L EQU H'FA' ; Divide by 3 (12 MHz oscillator input) 000000FB 01303 _PLLDIV_4_1L EQU H'FB' ; Divide by 4 (16 MHz oscillator input) 000000FC 01304 _PLLDIV_5_1L EQU H'FC' ; Divide by 5 (20 MHz oscillator input) 000000FD 01305 _PLLDIV_6_1L EQU H'FD' ; Divide by 6 (24 MHz oscillator input) 000000FE 01306 _PLLDIV_10_1L EQU H'FE' ; Divide by 10 (40 MHz oscillator input) 000000FF 01307 _PLLDIV_12_1L EQU H'FF' ; Divide by 12 (48 MHz oscillator input) 01308 000000E7 01309 _CPUDIV_OSC1_PLL2_1L EQU H'E7' ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2] 000000EF 01310 _CPUDIV_OSC2_PLL3_1L EQU H'EF' ; [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3] 000000F7 01311 _CPUDIV_OSC3_PLL4_1L EQU H'F7' ; [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4] 000000FF 01312 _CPUDIV_OSC4_PLL6_1L EQU H'FF' ; [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6] 01313 000000DF 01314 _USBDIV_1_1L EQU H'DF' ; USB clock source comes directly from the primary oscillator block with no postscale 000000FF 01315 _USBDIV_2_1L EQU H'FF' ; USB clock source comes from the 96 MHz PLL divided by 2 01316 01317 ;----- CONFIG1H Options -------------------------------------------------- 000000F0 01318 _FOSC_XT_XT_1H EQU H'F0' ; XT oscillator, XT used by USB 000000F2 01319 _FOSC_XTPLL_XT_1H EQU H'F2' ; XT oscillator, PLL enabled, XT used by USB 000000F4 01320 _FOSC_ECIO_EC_1H EQU H'F4' ; External clock, port function on RA6, EC used by USB 000000F5 01321 _FOSC_EC_EC_1H EQU H'F5' ; External clock, CLKOUT on RA6, EC used by USB 000000F6 01322 _FOSC_ECPLLIO_EC_1H EQU H'F6' ; External clock, PLL enabled, port function on RA6, EC used by USB 000000F7 01323 _FOSC_ECPLL_EC_1H EQU H'F7' ; External clock, PLL enabled, CLKOUT on RA6, EC used by USB 000000F8 01324 _FOSC_INTOSCIO_EC_1H EQU H'F8' ; Internal oscillator, port function on RA6, EC used by USB 000000F9 01325 _FOSC_INTOSC_EC_1H EQU H'F9' ; Internal oscillator, CLKOUT on RA6, EC used by USB 000000FA 01326 _FOSC_INTOSC_XT_1H EQU H'FA' ; Internal oscillator, XT used by USB 000000FB 01327 _FOSC_INTOSC_HS_1H EQU H'FB' ; Internal oscillator, HS used by USB 000000FC 01328 _FOSC_HS_1H EQU H'FC' ; HS oscillator, HS used by USB 000000FE 01329 _FOSC_HSPLL_HS_1H EQU H'FE' ; HS oscillator, PLL enabled, HS used by USB 01330 000000BF 01331 _FCMEN_OFF_1H EQU H'BF' ; Fail-Safe Clock Monitor disabled 000000FF 01332 _FCMEN_ON_1H EQU H'FF' ; Fail-Safe Clock Monitor enabled 01333 0000007F 01334 _IESO_OFF_1H EQU H'7F' ; Oscillator Switchover mode disabled 000000FF 01335 _IESO_ON_1H EQU H'FF' ; Oscillator Switchover mode enabled 01336 01337 ;----- CONFIG2L Options -------------------------------------------------- 000000FE 01338 _PWRT_ON_2L EQU H'FE' ; PWRT enabled 000000FF 01339 _PWRT_OFF_2L EQU H'FF' ; PWRT disabled 01340 000000F9 01341 _BOR_OFF_2L EQU H'F9' ; Brown-out Reset disabled in hardware and software gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 26 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000000FB 01342 _BOR_SOFT_2L EQU H'FB' ; Brown-out Reset enabled and controlled by software (SBOREN is enabled) 000000FD 01343 _BOR_ON_ACTIVE_2L EQU H'FD' ; Brown-out Reset enabled in hardware only and disabled in Sleep mode (SBOREN is disabled) 000000FF 01344 _BOR_ON_2L EQU H'FF' ; Brown-out Reset enabled in hardware only (SBOREN is disabled) 01345 000000E7 01346 _BORV_0_2L EQU H'E7' ; Maximum setting 000000EF 01347 _BORV_1_2L EQU H'EF' ; 000000F7 01348 _BORV_2_2L EQU H'F7' ; 000000FF 01349 _BORV_3_2L EQU H'FF' ; Minimum setting 01350 000000DF 01351 _VREGEN_OFF_2L EQU H'DF' ; USB voltage regulator disabled 000000FF 01352 _VREGEN_ON_2L EQU H'FF' ; USB voltage regulator enabled 01353 01354 ;----- CONFIG2H Options -------------------------------------------------- 000000FE 01355 _WDT_OFF_2H EQU H'FE' ; HW Disabled - SW Controlled 000000FF 01356 _WDT_ON_2H EQU H'FF' ; HW Enabled - SW Disabled 01357 000000E1 01358 _WDTPS_1_2H EQU H'E1' ; 1:1 000000E3 01359 _WDTPS_2_2H EQU H'E3' ; 1:2 000000E5 01360 _WDTPS_4_2H EQU H'E5' ; 1:4 000000E7 01361 _WDTPS_8_2H EQU H'E7' ; 1:8 000000E9 01362 _WDTPS_16_2H EQU H'E9' ; 1:16 000000EB 01363 _WDTPS_32_2H EQU H'EB' ; 1:32 000000ED 01364 _WDTPS_64_2H EQU H'ED' ; 1:64 000000EF 01365 _WDTPS_128_2H EQU H'EF' ; 1:128 000000F1 01366 _WDTPS_256_2H EQU H'F1' ; 1:256 000000F3 01367 _WDTPS_512_2H EQU H'F3' ; 1:512 000000F5 01368 _WDTPS_1024_2H EQU H'F5' ; 1:1024 000000F7 01369 _WDTPS_2048_2H EQU H'F7' ; 1:2048 000000F9 01370 _WDTPS_4096_2H EQU H'F9' ; 1:4096 000000FB 01371 _WDTPS_8192_2H EQU H'FB' ; 1:8192 000000FD 01372 _WDTPS_16384_2H EQU H'FD' ; 1:16384 000000FF 01373 _WDTPS_32768_2H EQU H'FF' ; 1:32768 01374 01375 ;----- CONFIG3H Options -------------------------------------------------- 0000007F 01376 _MCLRE_OFF_3H EQU H'7F' ; RE3 input pin enabled; MCLR disabled 000000FF 01377 _MCLRE_ON_3H EQU H'FF' ; MCLR pin enabled; RE3 input pin disabled 01378 000000FB 01379 _LPT1OSC_OFF_3H EQU H'FB' ; Timer1 configured for higher power operation 000000FF 01380 _LPT1OSC_ON_3H EQU H'FF' ; Timer1 configured for low-power operation 01381 000000FD 01382 _PBADEN_OFF_3H EQU H'FD' ; PORTB<4:0> pins are configured as digital I/O on Reset 000000FF 01383 _PBADEN_ON_3H EQU H'FF' ; PORTB<4:0> pins are configured as analog input channels on Reset 01384 000000FE 01385 _CCP2MX_OFF_3H EQU H'FE' ; CCP2 input/output is multiplexed with RB3 000000FF 01386 _CCP2MX_ON_3H EQU H'FF' ; CCP2 input/output is multiplexed with RC1 01387 01388 ;----- CONFIG4L Options -------------------------------------------------- 000000FE 01389 _STVREN_OFF_4L EQU H'FE' ; Stack full/underflow will not cause Reset 000000FF 01390 _STVREN_ON_4L EQU H'FF' ; Stack full/underflow will cause Reset 01391 000000FB 01392 _LVP_OFF_4L EQU H'FB' ; Single-Supply ICSP disabled 000000FF 01393 _LVP_ON_4L EQU H'FF' ; Single-Supply ICSP enabled 01394 000000BF 01395 _XINST_OFF_4L EQU H'BF' ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode) gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 27 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000000FF 01396 _XINST_ON_4L EQU H'FF' ; Instruction set extension and Indexed Addressing mode enabled 01397 0000007F 01398 _DEBUG_ON_4L EQU H'7F' ; Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug 000000FF 01399 _DEBUG_OFF_4L EQU H'FF' ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins 01400 01401 ;----- CONFIG5L Options -------------------------------------------------- 000000FE 01402 _CP0_ON_5L EQU H'FE' ; Block 0 (000800-001FFFh) code-protected 000000FF 01403 _CP0_OFF_5L EQU H'FF' ; Block 0 (000800-001FFFh) not code-protected 01404 000000FD 01405 _CP1_ON_5L EQU H'FD' ; Block 1 (002000-003FFFh) code-protected 000000FF 01406 _CP1_OFF_5L EQU H'FF' ; Block 1 (002000-003FFFh) not code-protected 01407 000000FB 01408 _CP2_ON_5L EQU H'FB' ; Block 2 (004000-005FFFh) code-protected 000000FF 01409 _CP2_OFF_5L EQU H'FF' ; Block 2 (004000-005FFFh) not code-protected 01410 01411 ;----- CONFIG5H Options -------------------------------------------------- 000000BF 01412 _CPB_ON_5H EQU H'BF' ; Boot block (000000-0007FFh) code-protected 000000FF 01413 _CPB_OFF_5H EQU H'FF' ; Boot block (000000-0007FFh) not code-protected 01414 0000007F 01415 _CPD_ON_5H EQU H'7F' ; Data EEPROM code-protected 000000FF 01416 _CPD_OFF_5H EQU H'FF' ; Data EEPROM not code-protected 01417 01418 ;----- CONFIG6L Options -------------------------------------------------- 000000FE 01419 _WRT0_ON_6L EQU H'FE' ; Block 0 (000800-001FFFh) write-protected 000000FF 01420 _WRT0_OFF_6L EQU H'FF' ; Block 0 (000800-001FFFh) not write-protected 01421 000000FD 01422 _WRT1_ON_6L EQU H'FD' ; Block 1 (002000-003FFFh) write-protected 000000FF 01423 _WRT1_OFF_6L EQU H'FF' ; Block 1 (002000-003FFFh) not write-protected 01424 000000FB 01425 _WRT2_ON_6L EQU H'FB' ; Block 2 (004000-005FFFh) write-protected 000000FF 01426 _WRT2_OFF_6L EQU H'FF' ; Block 2 (004000-005FFFh) not write-protected 01427 01428 ;----- CONFIG6H Options -------------------------------------------------- 000000BF 01429 _WRTB_ON_6H EQU H'BF' ; Boot block (000000-0007FFh) write-protected 000000FF 01430 _WRTB_OFF_6H EQU H'FF' ; Boot block (000000-0007FFh) not write-protected 01431 000000DF 01432 _WRTC_ON_6H EQU H'DF' ; Configuration registers (300000-3000FFh) write-protected 000000FF 01433 _WRTC_OFF_6H EQU H'FF' ; Configuration registers (300000-3000FFh) not write-protected 01434 0000007F 01435 _WRTD_ON_6H EQU H'7F' ; Data EEPROM write-protected 000000FF 01436 _WRTD_OFF_6H EQU H'FF' ; Data EEPROM not write-protected 01437 01438 ;----- CONFIG7L Options -------------------------------------------------- 000000FE 01439 _EBTR0_ON_7L EQU H'FE' ; Block 0 (000800-001FFFh) protected from table reads executed in other blocks 000000FF 01440 _EBTR0_OFF_7L EQU H'FF' ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks 01441 000000FD 01442 _EBTR1_ON_7L EQU H'FD' ; Block 1 (002000-003FFFh) protected from table reads executed in other blocks 000000FF 01443 _EBTR1_OFF_7L EQU H'FF' ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks 01444 000000FB 01445 _EBTR2_ON_7L EQU H'FB' ; Block 2 (004000-005FFFh) protected from table reads executed in other blocks 000000FF 01446 _EBTR2_OFF_7L EQU H'FF' ; Block 2 (004000-005FFFh) not protected from table reads executed in other blocks 01447 01448 ;----- CONFIG7H Options -------------------------------------------------- 000000BF 01449 _EBTRB_ON_7H EQU H'BF' ; Boot block (000000-0007FFh) protected from table reads executed in other blocks gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 28 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000000FF 01450 _EBTRB_OFF_7H EQU H'FF' ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks 01451 01452 003FFFFE 01453 _DEVID1 EQU H'3FFFFE' 003FFFFF 01454 _DEVID2 EQU H'3FFFFF' 01455 00200000 01456 _IDLOC0 EQU H'200000' 00200001 01457 _IDLOC1 EQU H'200001' 00200002 01458 _IDLOC2 EQU H'200002' 00200003 01459 _IDLOC3 EQU H'200003' 00200004 01460 _IDLOC4 EQU H'200004' 00200005 01461 _IDLOC5 EQU H'200005' 00200006 01462 _IDLOC6 EQU H'200006' 00200007 01463 _IDLOC7 EQU H'200007' 01464 01465 LIST 00010 00011 ; Woo Hoo! MPLAB works with Wine (at last)... 00012 ; * MPLAB IDB v8.00 from Microchip website 00013 ; * Wine 0.9.50 from winehq.org (0.9.50~winehq0~ubuntu~7.10-1) 00014 ; * Ubuntu Linux 7.10 00015 ; 00016 ; Settings for this file: 00017 ; * 10 point non-proportional font (Tlwg-Mono) 00018 ; * US-ASCII encoding (codepage 20127) 00019 ; 00020 ; For just a compile (if you don't like the IDE environment) 00021 ; using wine, the following will work: 00022 ; 00023 ; wine "C:/Program Files/Microchip/MPASM Suite/MPASMWIN.exe" /p18F2455 /y /q "usb.asm" 00024 ; 00025 ; As an alternative for cool Linux users, consider the 00026 ; gpasm program (part of the gputils package), use: 00027 ; 00028 ; gpasm -a INHX32 -p18F2455 -y usb.asm 00029 ; 00030 ; ---------------------------------------------- 00031 ; CODE CONVENTIONS 00032 ; ---------------------------------------------- 00033 ; 00034 ; * Uses the extended mode with [x] addressing 00035 ; because this is actually more powerful for 00036 ; struct handling. 00037 ; 00038 ; * Subroutines with name ending in "_pr" follow 00039 ; the "POP / RETURN" convention where failure 00040 ; is an ordinary RETURN, but success is a POP 00041 ; and a RETURN. 00042 ; 00043 ; * Subroutines with name ending in "_sw" call the 00044 ; other "_pr" subroutines one after another. 00045 ; 00046 ; * Subroutines with name ending in "_jt" are a 00047 ; jump-table based on W register offset. gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 29 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00048 ; Return is regular, not "POP / RETURN". 00049 ; 00050 ; ---------------------------------------------- 00051 ; STANDARDS 00052 ; ---------------------------------------------- 00053 ; 00054 ; * USB protocol documentation is based on 00055 ; "Universal Serial Bus Specification" 00056 ; Compaq / Intel / Microsoft / NEC 00057 ; Revision 1.1 00058 ; September 23, 1998 00059 ; 00060 ; Shorthand tag for a paragraph in this document 00061 ; is like, "USB1.1/8.5.2.1 Reporting Status Results" 00062 ; 00063 ; * PIC Data Sheet is from Microchip: 00064 ; "PIC18F2455/2550/4455/4550 Data Sheet" 00065 ; Part Number: DS39632B 00066 ; Marked as "Preliminary" even when the chips 00067 ; have been on the open market for years. 00068 ; 00069 ; Shorthand tag for a paragraph in this document 00070 ; is like: "DS39632B/5.4.3 INDIRECT ADDRESSING" 00071 ; 00072 ; ---------------------------------------------- 00073 ; MAGIC CONFIG FLAGS FOR CHIP 00074 ; ---------------------------------------------- 00075 00076 CONFIG CPUDIV = OSC2_PLL3 ; CPU at 32MHz 00077 CONFIG USBDIV = 2 00078 CONFIG PLLDIV = 5 ; Use 20MHz Crystal 300000 0E2C 00079 CONFIG FOSC = HSPLL_HS 00080 00081 ; Header files are not consistent, a mistake was made 00082 ; then fixed up later, but no back compatibility *SIGH* 00083 ; ifdef _FCMEM_OFF_1H 00084 ; CONFIG FCMEM = OFF 00085 ; endif 00086 ; ifdef _FCMEN_OFF_1H 300000 0E2C 00087 CONFIG FCMEN = OFF 00088 ; endif 00089 300000 0E2C 00090 CONFIG IESO = OFF 00091 CONFIG PWRT = ON 00092 CONFIG BOR = OFF 00093 CONFIG VREGEN = ON 300002 1E38 00094 CONFIG WDT = OFF 300002 1E38 00095 CONFIG WDTPS = 32768 300004 03FF 00096 CONFIG MCLRE = OFF 300004 03FF 00097 CONFIG LPT1OSC = OFF 300004 01FF 00098 CONFIG PBADEN = OFF 300004 00FF 00099 CONFIG CCP2MX = OFF 300006 FF85 00100 CONFIG STVREN = ON 300006 FF81 00101 CONFIG LVP = OFF gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 30 LOC OBJECT CODE LINE SOURCE TEXT VALUE 300006 FF81 00102 CONFIG DEBUG = OFF 300006 FFC1 00103 CONFIG XINST = ON 00104 CONFIG CP0 = OFF 00105 CONFIG CP1 = OFF 00106 CONFIG CP2 = OFF 300008 C00F 00107 CONFIG CPB = OFF 300008 C00F 00108 CONFIG CPD = OFF 00109 CONFIG WRT0 = OFF 00110 CONFIG WRT1 = OFF 00111 CONFIG WRT2 = OFF 30000A E00F 00112 CONFIG WRTB = OFF 30000A E00F 00113 CONFIG WRTC = OFF 30000A E00F 00114 CONFIG WRTD = OFF 00115 CONFIG EBTR0 = OFF 00116 CONFIG EBTR1 = OFF 00117 CONFIG EBTR2 = OFF 30000C 400F 00118 CONFIG EBTRB = OFF 00119 00120 ; ---------------------------------------------- 00121 ; Data Memory Layout 00122 ; ---------------------------------------------- 00123 ; 00124 ; BANK 0 00125 ; --- Global variables 00126 ; 00127 ; BANK 1 00128 ; 00129 ; BANK 2 00130 ; 00131 ; BANK 3 00132 ; 00133 ; BANK 4 00134 ; --- USB Buffer Descriptor 0 00135 ; --- USB Buffer Descriptor 1 00136 ; --- USB Buffer Descriptor 2 00137 ; --- USB Buffer Descriptor 3 00138 ; --- USB scratch variables 00139 ; --- USB Buffer 0 00140 ; --- USB Buffer 1 00141 ; --- USB Buffer 2 00142 ; --- USB Buffer 3 00143 ; 00144 ; BANK 15 00145 ; --- Relative offset memory 00146 ; --- Special Function Registers 00147 ; 00148 ; ---------------------------------------------- 00149 00150 ; ---------------------------------------------- 00151 ; VARIABLES 00152 ; ---------------------------------------------- 00153 00154 ; Normal variables sit in bank #0 00155 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 31 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000000 00156 blink1 EQU 0x00 00000001 00157 blink2 EQU 0x01 00000002 00158 idle_count_L EQU 0x02 00000003 00159 idle_count_H EQU 0x03 00000004 00160 timer_count_L EQU 0x04 ; Timer ticks over constantly 00000005 00161 timer_count_H EQU 0x05 ; 00000006 00162 blink3 EQU 0x06 00000007 00163 tmp_opcode EQU 0x07 ; Scratch space for byte interpreter 00000008 00164 current_opcode EQU 0x08 ; This is the actual opcode 00000009 00165 acc EQU 0x09 00000009 00166 stk_0 EQU 0x09 ; WARNING: stk_0 is also accumulator 0000000A 00167 stk_1 EQU 0x0A 0000000B 00168 stk_2 EQU 0x0B 0000000C 00169 stk_3 EQU 0x0C 0000000D 00170 stk_4 EQU 0x0D 0000000E 00171 stk_5 EQU 0x0E 0000000F 00172 stk_6 EQU 0x0F 00000010 00173 stk_7 EQU 0x10 00000011 00174 tmp_output EQU 0x11 ; Scratch space for output 00000012 00175 tmp_timer_0 EQU 0x12 ; Place to copy timer values (L) 00000013 00176 tmp_timer_1 EQU 0x13 ; Place to copy timer values 00000014 00177 tmp_timer_2 EQU 0x14 ; Place to copy timer values 00000015 00178 tmp_timer_3 EQU 0x15 ; Place to copy timer values 00000016 00179 tmp_hex_out EQU 0x16 ; Used when printing hex output 00180 00181 ; ---- Output buffering ---- 00182 ; Every time we send data back, we wipe the buffer with 00183 ; NUL characters and start printing from the top. Max 00184 ; size is 64 bytes, if more is printed then we mark the 00185 ; last character with ASCII NAK (0x15) to indicate an 00186 ; overflow condition and discard any remaining output. 00187 ; 00188 ; Output is available as fast as the host wants to read it 00189 ; because libusb only makes an attempt to read when the 00190 ; program wants to read, so reading output regularly is 00191 ; necessary to ensure it is not stale. 00192 0000001F 00193 output_ix EQU 0x1F ; Index of output in buffer 00000020 00194 output_start EQU 0x20 ; Buffer for output (first) 0000005F 00195 output_end EQU 0x5F ; Buffer for output (last) 0000003F 00196 output_mask EQU 0x3F ; 64 bytes wraparound 00197 00198 ; ---------------------------------------------- 00199 ; ADDITIONAL REGISTER DEFINES 00200 ; ---------------------------------------------- 00201 00000400 00202 BD0STAT EQU H'0400' 00000401 00203 BD0CNT EQU H'0401' 00000402 00204 BD0ADRL EQU H'0402' 00000403 00205 BD0ADRH EQU H'0403' 00206 00000404 00207 BD1STAT EQU H'0404' 00000405 00208 BD1CNT EQU H'0405' 00000406 00209 BD1ADRL EQU H'0406' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 32 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000407 00210 BD1ADRH EQU H'0407' 00211 00000408 00212 BD2STAT EQU H'0408' 00000409 00213 BD2CNT EQU H'0409' 0000040A 00214 BD2ADRL EQU H'040A' 0000040B 00215 BD2ADRH EQU H'040B' 00216 0000040C 00217 BD3STAT EQU H'040C' 0000040D 00218 BD3CNT EQU H'040D' 0000040E 00219 BD3ADRL EQU H'040E' 0000040F 00220 BD3ADRH EQU H'040F' 00221 00000500 00222 BD0_buffer EQU H'0500' 00000540 00223 BD1_buffer EQU H'0540' 00000580 00224 BD2_buffer EQU H'0580' 000005C0 00225 BD3_buffer EQU H'05C0' 00226 00227 ; Scratch space for USB algorithms 00000410 00228 USB_EP EQU H'0410' ; Not used 00000411 00229 USB_PID EQU H'0411' ; Copy of PID from BDnSTAT register 00000412 00230 USB_ADDR EQU H'0412' ; Used for address setting 00000413 00231 USB_copy EQU H'0413' ; Counter for copying descriptors 00000414 00232 USB_2_cnt EQU H'0414' ; Counter for BD2 00000415 00233 USB_3_cnt EQU H'0415' ; Counter for BD3 00000416 00234 USB_opcode_ix EQU H'0416' ; Index for opcodes out of USB packet 00235 00000007 00236 UOWN EQU 7 00000006 00237 DTS EQU 6 00000003 00238 DTSEN EQU 3 00239 00240 ; ---------------------------------------------- 00241 ; USB Defines 00242 ; ---------------------------------------------- 00243 00000000 00244 USB_GET_STATUS EQU 0 00000001 00245 USB_CLEAR_FEATURE EQU 1 00000003 00246 USB_SET_FEATURE EQU 3 00000005 00247 USB_SET_ADDRESS EQU 5 00000006 00248 USB_GET_DESCRIPTOR EQU 6 00000007 00249 USB_SET_DESCRIPTOR EQU 7 00000008 00250 USB_GET_CONFIGURATION EQU 8 00000009 00251 USB_SET_CONFIGURATION EQU 9 00000010 00252 USB_GET_INTERFACE EQU 10 00000011 00253 USB_SET_INTERFACE EQU 11 00000012 00254 USB_SYNCH_FRAME EQU 12 00255 00256 ; === USB1.1/9.3 USB Device Requests === 00000000 00257 USB_STRUCT_bmRequestType EQU 0 00000001 00258 USB_STRUCT_bRequest EQU 1 00000002 00259 USB_STRUCT_wValue EQU 2 00260 ; NB: USB1.1 standard presumes all struct fields are little-endian 00261 ; but never bothers to tell anyone. The name Microsoft says it all. 00000003 00262 USB_STRUCT_wValue_HI EQU 3 00000004 00263 USB_STRUCT_wIndex EQU 4 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 33 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000006 00264 USB_STRUCT_wLength EQU 6 00265 00266 ; ---------------------------------------------- 00267 ; MACROS 00268 ; ---------------------------------------------- 00269 00270 DEBUG_JACK_UP macro 00271 BCF LATB,2,ACCESS 00272 endm 00273 00274 DEBUG_JACK_DOWN macro 00275 BSF LATB,2,ACCESS 00276 endm 00277 00278 DEBUG_JILL_UP macro 00279 BCF LATB,4,ACCESS 00280 endm 00281 00282 DEBUG_JILL_DOWN macro 00283 BSF LATB,4,ACCESS 00284 endm 00285 00286 DEBUG_SETUP macro 00287 BCF TRISB,2,ACCESS 00288 BCF TRISB,4,ACCESS 00289 DEBUG_JACK_DOWN 00290 DEBUG_JILL_DOWN 00291 endm 00292 00293 ; Seven segment display (on test board) 00294 ; --[B3]-- 00295 ; | | 00296 ;[B2] [B4] 00297 ; | | 00298 ; --[B1]-- 00299 ; | | 00300 ;[B0] [C6] 00301 ; | | 00302 ; --[C7]-- (DP) 00303 ; 00304 00305 ; ---------------------------------------------- 00306 ; VECTORS 00307 ; ---------------------------------------------- 00308 0000 00309 ORG 0x0000 0000 00310 v_reset: 00311 ; GOTO testcode 00312 ; GOTO testboot 0000 EF0D F000 00313 GOTO start 00314 0008 00315 ORG 0x0008 0008 00316 v_interrupt_high: 00317 ; Available for high priority task implementation gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 34 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00318 ; This is the only one allowed to use the FAST return 0008 0100 00319 MOVLB 0 000A D97D 00320 RCALL main_clock_increment 000C 0011 00321 RETFIE FAST 00322 00323 00324 ; Not currently used for anything, should not be enabled 0018 00325 ORG 0x0018 0018 00326 v_interrupt_low: 0018 0010 00327 RETFIE 00328 00329 #if 0 00330 ; ---------------------------------------------- 00331 ; TEST FOR PIC BOOT OK 00332 ; toggle the port B lnes 00333 ; ---------------------------------------------- 00334 testdelay: 00335 MOVLW d'166' 00336 MOVWF blink3 00337 loop3: 00338 MOVLW d'100' 00339 MOVWF blink2 00340 loop2: 00341 MOVLW d'100' 00342 MOVWF blink1 00343 loop1: 00344 DECFSZ blink1,F 00345 BRA loop1 00346 DECFSZ blink2,F 00347 BRA loop2 00348 DECFSZ blink3,F 00349 BRA loop3 00350 RETURN 00351 00352 testboot: 00353 MOVLB 0 00354 DEBUG_SETUP 00355 testboot1: 00356 RCALL testdelay 00357 DEBUG_JACK_UP 00358 DEBUG_JILL_DOWN 00359 RCALL testdelay 00360 DEBUG_JILL_UP 00361 DEBUG_JACK_DOWN 00362 goto testboot1 00363 #endif 00364 00365 ; ---------------------------------------------- 00366 ; PROGRAM 00367 ; ---------------------------------------------- 00368 001A 00369 start: 001A 0100 00370 MOVLB 0 001C 0EFF 00371 MOVLW b'11111111' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 35 LOC OBJECT CODE LINE SOURCE TEXT VALUE 001E 6E93 00372 MOVWF TRISB,ACCESS 00373 DEBUG_SETUP 0020 9493 M BCF TRISB,2,ACCESS 0022 9893 M BCF TRISB,4,ACCESS M DEBUG_JACK_DOWN 0024 848A M BSF LATB,2,ACCESS M DEBUG_JILL_DOWN 0026 888A M BSF LATB,4,ACCESS 0028 0E3F 00374 MOVLW b'00111111' 002A 6E94 00375 MOVWF TRISC,ACCESS 002C 0E0E 00376 MOVLW 0Eh 002E 6EC1 00377 MOVWF ADCON1,ACCESS 0030 6A8A 00378 CLRF LATB,ACCESS 0032 6A8B 00379 CLRF LATC,ACCESS 0034 0E80 00380 MOVLW b'10000000' 0036 6ED0 00381 MOVWF RCON,ACCESS 0038 0E00 00382 MOVLW b'00000000' 003A 6EF1 00383 MOVWF INTCON2,ACCESS 003C 0E00 00384 MOVLW b'00000000' 003E 6EF0 00385 MOVWF INTCON3,ACCESS 0040 0E00 00386 MOVLW b'00000000' 0042 6EF2 00387 MOVWF INTCON,ACCESS 0044 D813 00388 RCALL Do_USB_reset ; Setup all USB registers 0046 D955 00389 RCALL main_clock_setup ; Setup for TIMER0 00390 00391 ; Here we GO! 0048 8EF2 00392 BSF INTCON,GIEH,ACCESS 00393 00394 ; ---------------------------------------------- 00395 ; USB THREAD 00396 ; ---------------------------------------------- 00397 00398 ; The USB code is single threaded and not interrupt 00399 ; oriented. Generally, the PC handles slow, complex 00400 ; calculations while the PIC18 handles fast, simple 00401 ; decisions and timing-critical steps. We want the 00402 ; peripheral I/O to be higher priority than the USB 00403 ; operations so it can achieve better timing consistency. 00404 00405 ; ---------------------------------------------------- 00406 ; Wait here for something to happen 00407 004A 00408 idle_loop: 004A D80E 00409 RCALL Handle_USB_URSTIF 004C D86A 00410 RCALL Handle_USB_TRNIF 004E 0100 00411 MOVLB 0 0050 2B02 00412 INCF idle_count_L,F,BANKED 0052 E109 00413 BNZ idle_count_done 0054 2B03 00414 INCF idle_count_H,F,BANKED 0056 AF03 00415 BTFSS idle_count_H,7,BANKED 00416 DEBUG_JACK_UP 0058 948A M BCF LATB,2,ACCESS 005A BF03 00417 BTFSC idle_count_H,7,BANKED 00418 DEBUG_JACK_DOWN gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 36 LOC OBJECT CODE LINE SOURCE TEXT VALUE 005C 848A M BSF LATB,2,ACCESS 005E 5103 00419 MOVF idle_count_H,W,BANKED 0060 E102 00420 BNZ idle_count_done 0062 0E2E 00421 MOVLW A'.' 0064 D9E2 00422 RCALL output_char 0066 00423 idle_count_done: 0066 D7F1 00424 BRA idle_loop 00425 00426 ; ---------------------------------------------------- 00427 ; Check for a USB reset and bring all registers back 00428 ; to a starting position. 0068 00429 Handle_USB_URSTIF: 0068 A068 00430 BTFSS UIR,URSTIF,ACCESS ; Check for USB reset 006A 0012 00431 RETURN 00432 ; Fall through when reset is required 006C 00433 Do_USB_reset: ; Set all USB stuff back to initial position 00434 DEBUG_JILL_UP 006C 988A M BCF LATB,4,ACCESS 006E 0104 00435 MOVLB 4 0070 6A6E 00436 CLRF UADDR,ACCESS 00437 ; Disable USB interrupts 0072 9AA0 00438 BCF PIE2,USBIE,ACCESS 0074 6A69 00439 CLRF UIE,ACCESS 00440 00441 ; Clear the USB buffers 0076 6B13 00442 CLRF USB_copy,BANKED 0078 EE05 F000 00443 LFSR 0,BD0_buffer 007C 00444 USB_reset_loop1: 007C 6AEE 00445 CLRF POSTINC0,ACCESS 007E 2F13 00446 DECFSZ USB_copy,F,BANKED 0080 D7FD 00447 BRA USB_reset_loop1 00448 00449 ; Clear the low-mem bank too (zero all global vars) 0082 6B13 00450 CLRF USB_copy,BANKED 0084 EE00 F000 00451 LFSR 0,0 0088 00452 USB_reset_loop2: 0088 6AEE 00453 CLRF POSTINC0,ACCESS 008A 2F13 00454 DECFSZ USB_copy,F,BANKED 008C D7FD 00455 BRA USB_reset_loop2 00456 00457 ; Only EP0 and EP1 are actually enabled 008E 0E16 00458 MOVLW b'00010110' ; EP0 is allowed to handle SETUP 0090 6E70 00459 MOVWF UEP0,ACCESS 0092 0E1E 00460 MOVLW b'00011110' ; EP1 can do only IN and OUT 0094 6E71 00461 MOVWF UEP1,ACCESS 0096 6A72 00462 CLRF UEP2,ACCESS 0098 6A73 00463 CLRF UEP3,ACCESS 009A 6A74 00464 CLRF UEP4,ACCESS 009C 6A75 00465 CLRF UEP5,ACCESS 009E 6A76 00466 CLRF UEP6,ACCESS 00A0 6A77 00467 CLRF UEP7,ACCESS 00A2 6A78 00468 CLRF UEP8,ACCESS 00A4 6A79 00469 CLRF UEP9,ACCESS 00A6 6A7A 00470 CLRF UEP10,ACCESS gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 37 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00A8 6A7B 00471 CLRF UEP11,ACCESS 00AA 6A7C 00472 CLRF UEP12,ACCESS 00AC 6A7D 00473 CLRF UEP13,ACCESS 00AE 6A7E 00474 CLRF UEP14,ACCESS 00B0 6A7F 00475 CLRF UEP15,ACCESS 00476 00477 ; Scratch variables related to USB handler 00478 ; (keep in same bank as other USB stuff) 00B2 6B12 00479 CLRF USB_ADDR,BANKED 00B4 6B14 00480 CLRF USB_2_cnt,BANKED 00B6 6B15 00481 CLRF USB_3_cnt,BANKED 00482 00483 ; Endpoint #0 OUT buffer descriptor 00484 ; (which is OUT of host, i.e. an input to the PIC) 00485 ; Also SETUP transactions end up here 00B8 0E00 00486 MOVLW LOW BD0_buffer 00BA 6F02 00487 MOVWF BD0ADRL,BANKED 00BC 0E05 00488 MOVLW HIGH BD0_buffer 00BE 6F03 00489 MOVWF BD0ADRH,BANKED 00C0 D84D 00490 RCALL prime_BD0 00491 00492 ; Endpoint #0 IN buffer descriptor 00493 ; (which is IN to host, i.e. an output from the PIC) 00C2 6B05 00494 CLRF BD1CNT,BANKED 00C4 0E40 00495 MOVLW LOW BD1_buffer 00C6 6F06 00496 MOVWF BD1ADRL,BANKED 00C8 0E05 00497 MOVLW HIGH BD1_buffer 00CA 6F07 00498 MOVWF BD1ADRH,BANKED 00CC 6B04 00499 CLRF BD1STAT,BANKED 00500 00501 ; Endpoint #1 OUT buffer 00CE 0E40 00502 MOVLW h'40' 00D0 6F09 00503 MOVWF BD2CNT,BANKED 00D2 0E80 00504 MOVLW LOW BD2_buffer 00D4 6F0A 00505 MOVWF BD2ADRL,BANKED 00D6 0E05 00506 MOVLW HIGH BD2_buffer 00D8 6F0B 00507 MOVWF BD2ADRH,BANKED 00DA 0E88 00508 MOVLW b'10001000' 00DC 6F08 00509 MOVWF BD2STAT,BANKED 00510 00511 ; Endpoint #1 IN buffer 00DE 6B0D 00512 CLRF BD3CNT,BANKED 00E0 0EC0 00513 MOVLW LOW BD3_buffer 00E2 6F0E 00514 MOVWF BD3ADRL,BANKED 00E4 0E05 00515 MOVLW HIGH BD3_buffer 00E6 6F0F 00516 MOVWF BD3ADRH,BANKED 00E8 0E88 00517 MOVLW b'10001000' 00EA 6F0C 00518 MOVWF BD3STAT,BANKED 00519 00520 ; Setup and activate USB module 00EC 0E54 00521 MOVLW b'01010100' 00EE 6E6F 00522 MOVWF UCFG,ACCESS 00F0 0E48 00523 MOVLW b'01001000' 00F2 6E6D 00524 MOVWF UCON,ACCESS gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 38 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00F4 6A68 00525 CLRF UIR,ACCESS ; clear USB interrupt flags 00F6 0012 00526 RETURN 00527 00528 ; ---------------------------------------------- 00529 ; COMPUTED BRANCH VECTOR TABLES 00530 ; ---------------------------------------------- 00531 0100 00532 ORG H'0100' 00533 ; Only supports EP0 to EP3 which is enough for 00534 ; most applications. Note these are all 2-byte 00535 ; instructions, cannot branch too far. 0100 00536 endpoint_branch_jt: 0100 26F9 00537 ADDWF PCL,F,ACCESS 0102 D025 00538 BRA USB_TRNIF_EP0_DIR0_PPB0 0104 D024 00539 BRA USB_TRNIF_EP0_DIR0_PPB1 0106 D021 00540 BRA USB_TRNIF_EP0_DIR1_PPB0 0108 D020 00541 BRA USB_TRNIF_EP0_DIR1_PPB1 010A D09C 00542 BRA USB_TRNIF_EP1_DIR0_PPB0 010C D09B 00543 BRA USB_TRNIF_EP1_DIR0_PPB1 010E D0B3 00544 BRA USB_TRNIF_EP1_DIR1_PPB0 0110 D0B2 00545 BRA USB_TRNIF_EP1_DIR1_PPB1 0112 D0C8 00546 BRA USB_TRNIF_EP2_DIR0_PPB0 0114 D0C7 00547 BRA USB_TRNIF_EP2_DIR0_PPB1 0116 D0C6 00548 BRA USB_TRNIF_EP2_DIR1_PPB0 0118 D0C5 00549 BRA USB_TRNIF_EP2_DIR1_PPB1 011A D0C4 00550 BRA USB_TRNIF_EP3_DIR0_PPB0 011C D0C3 00551 BRA USB_TRNIF_EP3_DIR0_PPB1 011E D0C2 00552 BRA USB_TRNIF_EP3_DIR1_PPB0 0120 D0C1 00553 BRA USB_TRNIF_EP3_DIR1_PPB1 00554 00555 ; ---------------------------------------------------- 00556 ; Normal USB packets will trigger the TRNIF flag 00557 ; ---------------------------------------------------- 0122 00558 Handle_USB_TRNIF: 0122 A668 00559 BTFSS UIR,TRNIF,ACCESS 0124 0012 00560 RETURN ; Give up... nothing to do 0126 0104 00561 MOVLB 4 00562 ; Figure out which endpoint we are handling 00563 ; EP0 is for systems/control use 00564 ; Other EPs are for application, use computed branch 00565 ; In order to keep the table size small, only consider 00566 ; the first two EP bits (thus EP0 to EP3 are usable). 00567 ; Also, we index on the direction and the PING/PONG 00568 ; bit to simplify other code. 00569 0128 0E01 00570 MOVLW HIGH endpoint_branch_jt 012A 6EFA 00571 MOVWF PCLATH,ACCESS 012C 0E1E 00572 MOVLW b'00011110' 012E 146C 00573 ANDWF USTAT,W,ACCESS 0130 DFE7 00574 RCALL endpoint_branch_jt 0132 9668 00575 BCF UIR,TRNIF,ACCESS 0134 0012 00576 RETURN 00577 00578 ; ---------------------------------------------------- gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 39 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00579 ; ENDPOINT 0 HANDLER (supports control only) 00580 ; ---------------------------------------------------- 00581 0136 00582 control_write_success: 00583 ; Sending an empty data transfer is an indication of 00584 ; success after a control write operation. Note that 00585 ; PID is always DATA1 for this. 0136 6B05 00586 CLRF BD1CNT,BANKED 0138 0EC8 00587 MOVLW b'11001000' 013A 6F04 00588 MOVWF BD1STAT,BANKED 013C 0012 00589 RETURN 00590 013E 00591 update_address: 00592 ; If there is an address waiting to use then use it now 013E 5112 00593 MOVF USB_ADDR,W,BANKED 0140 E003 00594 BZ update_address_done 00595 DEBUG_JILL_DOWN 0142 888A M BSF LATB,4,ACCESS 0144 6E6E 00596 MOVWF UADDR,ACCESS 0146 6B12 00597 CLRF USB_ADDR,BANKED 0148 00598 update_address_done: 0148 0012 00599 RETURN 00600 014A 00601 USB_TRNIF_EP0_DIR1_PPB0: 014A 00602 USB_TRNIF_EP0_DIR1_PPB1: 00603 ; This is caused by an IN token on the EP0, 00604 ; Since EP0 is only used for Control Transfers, 00605 ; the IN token is presumed to be part of a Control Transfer. 00606 ; 00607 ; === USB1.1/8.5.2.1 Reporting Status Results === 00608 ; A completed IN token transaction indicates completion of 00609 ; a control write, which might have been SET_ADDRESS. 00610 ; 014A DFF9 00611 RCALL update_address 00612 00613 ; Other complete control writes are not interesting to us. 00614 ; We don't actually process data on this endpoint. 00615 014C 0012 00616 RETURN 00617 00618 ; ---------------------------------------------------- 014E 00619 USB_TRNIF_EP0_DIR0_PPB0: 014E 00620 USB_TRNIF_EP0_DIR0_PPB1: 00621 ; This is caused by either a SETUP token on the EP0 00622 ; or an OUT token on the EP0. We can presume that the 00623 ; OUT token is part of a control transfer. 00624 ; 00625 ; Use the indirect addressing mode to give us the 00626 ; USB packet in EP0 buffer 014E C402 FFD9 00627 MOVFF BD0ADRL,FSR2L 0152 C403 FFDA 00628 MOVFF BD0ADRH,FSR2H 00629 00630 ; Annoying... EP0 seems to always register the DIR as 0 00631 ; in USTAT, doesn't really make sense but we need to gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 40 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00632 ; collect the updated address here. 00633 ; RCALL update_address 00634 00635 ; If PKTDIS hang is triggered then we got a SETUP packet 0156 B86D 00636 BTFSC UCON,PKTDIS,ACCESS 0158 D806 00637 RCALL USB_EP0_SETUP_sw 00638 ; Re-enable SIE (SETUP packet causes a hang) 015A 986D 00639 BCF UCON,PKTDIS,ACCESS 00640 00641 ; === USB1.1/8.5.2.1 Reporting Status Results === 00642 ; A completed OUT token transaction indicates completion of 00643 ; a control read, which should be a zero-length packet. 00644 ; 00645 ; We don't really care about this status event, 00646 ; no action is required... 00647 015C 00648 prime_BD0: 00649 ; We are finished with the buffer contents, 00650 ; hand over to the SIE for more SETUP packets. 015C 0E20 00651 MOVLW h'20' 015E 6F01 00652 MOVWF BD0CNT,BANKED 0160 0E80 00653 MOVLW b'10000000' 0162 6F00 00654 MOVWF BD0STAT,BANKED 0164 0012 00655 RETURN 00656 00657 ; ---------------------------------------------------- 00658 ; Run through the possible SETUP packets that we might find. 0166 00659 USB_EP0_SETUP_sw: 0166 D816 00660 RCALL handle_USB_CLEAR_FEATURE_pr 0168 D81A 00661 RCALL handle_USB_GET_CONFIGURATION_pr 016A D81E 00662 RCALL handle_USB_GET_DESCRIPTOR_pr 016C D844 00663 RCALL handle_USB_GET_INTERFACE_pr 016E D848 00664 RCALL handle_USB_GET_STATUS_pr 0170 D809 00665 RCALL handle_USB_SET_ADDRESS_pr 0172 D84B 00666 RCALL handle_USB_SET_CONFIGURATION_pr 0174 D850 00667 RCALL handle_USB_SET_DESCRIPTOR_pr 0176 D855 00668 RCALL handle_USB_SET_FEATURE_pr 0178 D859 00669 RCALL handle_USB_SET_INTERFACE_pr 017A D85E 00670 RCALL handle_USB_SYNCH_FRAME_pr 00671 ; Fall through if nothing is recognised above 00672 017C 00673 control_write_failure: 017C 00674 control_read_failure: 00675 ; === USB1.1/8.5.2.1 Reporting Status Results === 00676 ; Use STALL handshake for errors during both 00677 ; Control Write Transfer and Control Read Transfer. 00678 ; 00679 ; === DS39632B/17.4.1.2 BDnSTAT Register (CPU Mode) === 00680 ; STALL EP0 by setting BSTALL flags 017C 0E84 00681 MOVLW b'10000100' 017E 6F00 00682 MOVWF BD0STAT,BANKED 0180 6F04 00683 MOVWF BD1STAT,BANKED 0182 0012 00684 RETURN 00685 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 41 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00686 ; ---------------------------------------------------- 0184 00687 handle_USB_SET_ADDRESS_pr: 0184 0E05 00688 MOVLW USB_SET_ADDRESS 0186 6201 00689 CPFSEQ [USB_STRUCT_bRequest] 0188 0012 00690 RETURN 018A 5002 00691 MOVF [USB_STRUCT_wValue],W 018C 6F12 00692 MOVWF USB_ADDR,BANKED 018E DFD3 00693 RCALL control_write_success 0190 0006 00694 POP 0192 0012 00695 RETURN 00696 00697 ; ---------------------------------------------------- 0194 00698 handle_USB_CLEAR_FEATURE_pr: 0194 0E01 00699 MOVLW USB_CLEAR_FEATURE 0196 6201 00700 CPFSEQ [USB_STRUCT_bRequest] 0198 0012 00701 RETURN 019A 0006 00702 POP 019C 0012 00703 RETURN 00704 00705 ; ---------------------------------------------------- 019E 00706 handle_USB_GET_CONFIGURATION_pr: 019E 0E08 00707 MOVLW USB_GET_CONFIGURATION 01A0 6201 00708 CPFSEQ [USB_STRUCT_bRequest] 01A2 0012 00709 RETURN 01A4 0006 00710 POP 01A6 0012 00711 RETURN 00712 00713 ; ---------------------------------------------------- 01A8 00714 handle_USB_GET_DESCRIPTOR_pr: 01A8 0E06 00715 MOVLW USB_GET_DESCRIPTOR 01AA 6201 00716 CPFSEQ [USB_STRUCT_bRequest] 01AC 0012 00717 RETURN 00718 ; All of our descriptors fit in a single packet buffer. 00719 ; In theory we might need to chop up the transmit if 00720 ; the wLength value is small but that never happens so 00721 ; just send one big chunk and presume wLength is big 00722 ; enough. 00723 ; 00724 ; Linux seems to go for a 64 byte buffer then reconsiders 00725 ; with an 8 byte buffer if that fails. 00726 ; 01AE D802 00727 RCALL handle_USB_GET_DESCRIPTOR_sw 01B0 0006 00728 POP 01B2 0012 00729 RETURN 00730 01B4 00731 handle_USB_GET_DESCRIPTOR_sw: 01B4 D802 00732 RCALL handle_USB_GET_DESC_DEVICE_pr 01B6 D810 00733 RCALL handle_USB_GET_DESC_CONFIG_pr 01B8 D7E1 00734 BRA control_read_failure 00735 00736 ; ---------------------------------------------------- 01BA 00737 handle_USB_GET_DESC_DEVICE_pr: 01BA 0E01 00738 MOVLW 1 01BC 6203 00739 CPFSEQ [USB_STRUCT_wValue_HI] gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 42 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01BE 0012 00740 RETURN 01C0 0E00 00741 MOVLW UPPER USB_dsc_DEVICE 01C2 6EF8 00742 MOVWF TBLPTRU,ACCESS 01C4 0E02 00743 MOVLW HIGH USB_dsc_DEVICE 01C6 6EF7 00744 MOVWF TBLPTRH,ACCESS 01C8 0EC0 00745 MOVLW LOW USB_dsc_DEVICE 01CA 6EF6 00746 MOVWF TBLPTRL,ACCESS 01CC 0E18 00747 MOVLW 18 01CE D86B 00748 RCALL copy_EP0_IN 01D0 0EC8 00749 MOVLW b'11001000' 01D2 6F04 00750 MOVWF BD1STAT,BANKED 01D4 0006 00751 POP 01D6 0012 00752 RETURN 00753 00754 ; ---------------------------------------------------- 01D8 00755 handle_USB_GET_DESC_CONFIG_pr: 01D8 0E02 00756 MOVLW 2 01DA 6203 00757 CPFSEQ [USB_STRUCT_wValue_HI] 01DC 0012 00758 RETURN 01DE 0E00 00759 MOVLW UPPER USB_dsc_CONFIGURATION 01E0 6EF8 00760 MOVWF TBLPTRU,ACCESS 01E2 0E02 00761 MOVLW HIGH USB_dsc_CONFIGURATION 01E4 6EF7 00762 MOVWF TBLPTRH,ACCESS 01E6 0ED2 00763 MOVLW LOW USB_dsc_CONFIGURATION 01E8 6EF6 00764 MOVWF TBLPTRL,ACCESS 01EA 0E32 00765 MOVLW 32 01EC D85C 00766 RCALL copy_EP0_IN 01EE 0EC8 00767 MOVLW b'11001000' 01F0 6F04 00768 MOVWF BD1STAT,BANKED 01F2 0006 00769 POP 01F4 0012 00770 RETURN 00771 00772 ; ---------------------------------------------------- 01F6 00773 handle_USB_GET_INTERFACE_pr: 01F6 0E10 00774 MOVLW USB_GET_INTERFACE 01F8 6201 00775 CPFSEQ [USB_STRUCT_bRequest] 01FA 0012 00776 RETURN 00777 ; We always return the same thing here. 00778 ; FIXME 01FC 0006 00779 POP 01FE 0012 00780 RETURN 00781 00782 ; ---------------------------------------------------- 0200 00783 handle_USB_GET_STATUS_pr: 0200 0E00 00784 MOVLW USB_GET_STATUS 0202 6201 00785 CPFSEQ [USB_STRUCT_bRequest] 0204 0012 00786 RETURN 0206 0006 00787 POP 0208 0012 00788 RETURN 00789 00790 ; ---------------------------------------------------- 020A 00791 handle_USB_SET_CONFIGURATION_pr: 020A 0E09 00792 MOVLW USB_SET_CONFIGURATION 020C 6201 00793 CPFSEQ [USB_STRUCT_bRequest] gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 43 LOC OBJECT CODE LINE SOURCE TEXT VALUE 020E 0012 00794 RETURN 00795 ; We only have one configuration so don't actually 00796 ; set anything at all, but DO pretend to be happy 00797 ; to the host thinks everything is working. 0210 DF92 00798 RCALL control_write_success 0212 0006 00799 POP 0214 0012 00800 RETURN 00801 00802 ; ---------------------------------------------------- 0216 00803 handle_USB_SET_DESCRIPTOR_pr: 0216 0E07 00804 MOVLW USB_SET_DESCRIPTOR 0218 6201 00805 CPFSEQ [USB_STRUCT_bRequest] 021A 0012 00806 RETURN 00807 ; Not supported. In theory a device might want to allow 00808 ; the serial number or even the idVendor / idProduct to 00809 ; be updated but most likely not via this method. 021C DFAF 00810 RCALL control_write_failure 021E 0006 00811 POP 0220 0012 00812 RETURN 00813 00814 ; ---------------------------------------------------- 0222 00815 handle_USB_SET_FEATURE_pr: 0222 0E03 00816 MOVLW USB_SET_FEATURE 0224 6201 00817 CPFSEQ [USB_STRUCT_bRequest] 0226 0012 00818 RETURN 00819 ; FIXME: this does magic things like unlock a STALL 00820 ; need to figure out how to make this work 0228 0006 00821 POP 022A 0012 00822 RETURN 00823 00824 ; ---------------------------------------------------- 022C 00825 handle_USB_SET_INTERFACE_pr: 022C 0E11 00826 MOVLW USB_SET_INTERFACE 022E 6201 00827 CPFSEQ [USB_STRUCT_bRequest] 0230 0012 00828 RETURN 00829 ; Same reasoning here as SET_CONFIGURATION 0232 DF81 00830 RCALL control_write_success 0234 0006 00831 POP 0236 0012 00832 RETURN 00833 00834 ; ---------------------------------------------------- 0238 00835 handle_USB_SYNCH_FRAME_pr: 0238 0E12 00836 MOVLW USB_SYNCH_FRAME 023A 6201 00837 CPFSEQ [USB_STRUCT_bRequest] 023C 0012 00838 RETURN 00839 ; FIXME: What does this even do? 023E DF9E 00840 RCALL control_write_failure 0240 0006 00841 POP 0242 0012 00842 RETURN 00843 00844 ; ---------------------------------------------------- 00845 ; ENDPOINT 1 HANDLER (supports data tranfser) 00846 ; ---------------------------------------------------- 00847 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 44 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00848 ; For the OUT tokens, we take a block of bytecodes and execute 00849 ; the opcodes one at a time. Leave all the FSR registers 00850 ; available for the benefit of the opcode execution. 00851 0244 00852 USB_TRNIF_EP1_DIR0_PPB0: 0244 00853 USB_TRNIF_EP1_DIR0_PPB1: 00854 0244 6B16 00855 CLRF USB_opcode_ix,BANKED 0246 2B09 00856 INCF BD2CNT,F,BANKED 0248 00857 BD2_opcode_loop: 0248 4F09 00858 DCFSNZ BD2CNT,F,BANKED 024A D009 00859 BRA done_BD2_opcode_loop 024C EE05 F080 00860 LFSR 0,BD2_buffer 0250 5116 00861 MOVF USB_opcode_ix,W,BANKED 0252 26E9 00862 ADDWF FSR0L,F,ACCESS 0254 50EF 00863 MOVF INDF0,W,ACCESS 0256 D85E 00864 RCALL opcode_action 0258 0104 00865 MOVLB 4 025A 2B16 00866 INCF USB_opcode_ix,F,BANKED 025C D7F5 00867 BRA BD2_opcode_loop 025E 00868 done_BD2_opcode_loop: 00869 00870 #if 0 00871 MOVLW A'X' 00872 RCALL output_char 00873 MOVLB 4 00874 #endif 00875 025E 2B14 00876 INCF USB_2_cnt,F,BANKED 00877 00878 ; --- START DEBUG ONLY --- 0260 B114 00879 BTFSC USB_2_cnt,0,BANKED 00880 DEBUG_JILL_UP 0262 988A M BCF LATB,4,ACCESS 0264 A114 00881 BTFSS USB_2_cnt,0,BANKED 00882 DEBUG_JILL_DOWN 0266 888A M BSF LATB,4,ACCESS 00883 ; --- END DEBUG ONLY --- 00884 00885 ; Rearm the OUT side of the EP1 0268 0E40 00886 MOVLW h'40' 026A 6F09 00887 MOVWF BD2CNT,BANKED 026C 0E88 00888 MOVLW b'10001000' 026E B114 00889 BTFSC USB_2_cnt,0,BANKED 0270 0EC8 00890 MOVLW b'11001000' 0272 6F08 00891 MOVWF BD2STAT,BANKED 0274 0012 00892 RETURN 00893 00894 ; Because of the auto-handshake nature of the SIE in this chip, 00895 ; there is no way to provide on-the-fly calculated results in 00896 ; response to an IN token. You can only not provide results or 00897 ; provide whatever is sitting in the buffer. Nor is there a 00898 ; safe way to update the buffer either because once the SIE owns 00899 ; the buffer, it can trigger at any time. gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 45 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00900 00901 ; So we reload the IN data as soon as possible, whenever we 00902 ; are able to do so, and just depend on the host to read it. 00903 ; If the host reads on a regular basis, they will get valid data. 00904 0276 00905 USB_TRNIF_EP1_DIR1_PPB0: 0276 00906 USB_TRNIF_EP1_DIR1_PPB1: 0276 2B15 00907 INCF USB_3_cnt,F,BANKED 00908 00909 ; Copy the latest data into EP1 (BD3) 0278 0E40 00910 MOVLW H'40' 027A 6F13 00911 MOVWF USB_copy,BANKED 027C 6B0D 00912 CLRF BD3CNT,BANKED 027E EE05 F0C0 00913 LFSR 0,BD3_buffer 0282 EE10 F020 00914 LFSR 1,output_start 0286 00915 copy_BD3_loop: 0286 50E7 00916 MOVF INDF1,W,ACCESS 0288 E005 00917 BZ copy_BD3_short 028A 6AE6 00918 CLRF POSTINC1,ACCESS ; Clear behind ourselves 028C 6EEE 00919 MOVWF POSTINC0,ACCESS 028E 2B0D 00920 INCF BD3CNT,F,BANKED 0290 2F13 00921 DECFSZ USB_copy,F,BANKED 0292 D7F9 00922 BRA copy_BD3_loop 0294 00923 copy_BD3_short: ; Not a full buffer of data was available 0294 EE00 F01F 00924 LFSR 0,output_ix 0298 6AEF 00925 CLRF INDF0 ; Clear the index counter too 00926 00927 ; Now we have the data copied across, prime the USB interface 00928 ; --- Rearm the IN side of the EP1 --- 029A 0E88 00929 MOVLW b'10001000' 029C B115 00930 BTFSC USB_3_cnt,0,BANKED 029E 0EC8 00931 MOVLW b'11001000' 02A0 6F0C 00932 MOVWF BD3STAT,BANKED 02A2 0012 00933 RETURN 00934 00935 #if 0 00936 BCF INTCON,GIEH,ACCESS ; Stop interrupt from counting higher 00937 MOVFF TMR0L,BD3_buffer+0 00938 MOVFF TMR0H,BD3_buffer+1 00939 ; If TMR0H is zero, maybe the counter just rolled over after we stopped 00940 ; the interrupt and we actually WANT the interrupt to fire to make it 00941 ; count up a bit (unlikely, but will happen sometimes) flash the interrupt 00942 ; enable to trigger this situation ONLY for (TMR0H==0) no other time 00943 TSTFSZ BD3_buffer+1 00944 BRA no_int_flash 00945 BSF INTCON,GIEH,ACCESS ; Count-em while you can 00946 BCF INTCON,GIEH,ACCESS ; OK, had your chance 00947 no_int_flash: 00948 MOVFF timer_count_L,BD3_buffer+2 00949 MOVFF timer_count_H,BD3_buffer+3 00950 BSF INTCON,GIEH,ACCESS 00951 #endif 00952 00953 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 46 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00954 ; ---------------------------------------------------- 00955 ; ENDPOINT 2, 3 not implemented 00956 ; ---------------------------------------------------- 00957 02A4 00958 USB_TRNIF_EP2_DIR0_PPB0: 02A4 00959 USB_TRNIF_EP2_DIR0_PPB1: 02A4 00960 USB_TRNIF_EP2_DIR1_PPB0: 02A4 00961 USB_TRNIF_EP2_DIR1_PPB1: 02A4 00962 USB_TRNIF_EP3_DIR0_PPB0: 02A4 00963 USB_TRNIF_EP3_DIR0_PPB1: 02A4 00964 USB_TRNIF_EP3_DIR1_PPB0: 02A4 00965 USB_TRNIF_EP3_DIR1_PPB1: 00966 02A4 0012 00967 RETURN 00968 00969 ;; Presume that FSR2 is pointing to EP0_SETUP packet in buffer BD0 00970 ;; Also presume that table reader registers are setup to descriptor data 02A6 00971 copy_EP0_IN: 02A6 6F05 00972 MOVWF BD1CNT,BANKED 02A8 6F13 00973 MOVWF USB_copy,BANKED 02AA EE05 F040 00974 LFSR 0,BD1_buffer ; buffer used by EP0_IN 02AE 00975 copy_loop: 02AE 0009 00976 TBLRD *+ 02B0 50F5 00977 MOVF TABLAT,W,ACCESS 02B2 6EEE 00978 MOVWF POSTINC0 02B4 2F13 00979 DECFSZ USB_copy,F 02B6 D7FB 00980 BRA copy_loop 02B8 00981 truncate_EP0_IN: 02B8 5006 00982 MOVF [USB_STRUCT_wLength],W ; length requested by host 02BA 6105 00983 CPFSLT BD1CNT,BANKED ; compare to length of descriptor 02BC 6F05 00984 MOVWF BD1CNT,BANKED ; use shortest length 02BE 0012 00985 RETURN 00986 02C0 00987 USB_dsc_DEVICE: 02C0 0112 0110 00988 DB d'18', d'1', h'10', h'01' ; DEVICE descriptor header 02C4 FFFF 40FF 00989 DB h'FF', h'FF', h'FF', d'64' ; bDeviceClass / bDeviceSubclass / bProtocol, packet size 02C8 DEAD BEEF 00990 DB h'AD', h'DE', h'EF', h'BE' ; idVendor, idProduct (note little-endian) 02CC 0101 00991 DB h'01', h'01' ; bcdDevice 02CE 0000 0100 00992 DB 0, 0, 0, 1 ; no strings, only one configuration 00993 00994 ; Pain-in-the-arse... the microchip assembler MUST have 00995 ; even numbers of data bytes but the descriptor elements are 00996 ; odd number lengths... thus we must run the elements together 00997 ; into unreadable gibberish. It even has words that are not 00998 ; word-aligned to make a confusing situation worse 00999 02D2 01000 USB_dsc_CONFIGURATION: 02D2 0209 0020 01001 DB d'9', d'2', d'32', d'0' ; CONFIGUATION descriptor header 02D6 0101 01002 DB d'1', d'1' ; one interface, one configuration 02D8 8000 01003 DB d'0', b'10000000' ; no strings, bmAttributes 02DA 0932 01004 DB d'50', d'9' ; 100mA power suck, plus start of INTERFACE 01005 02DC 0004 0200 01006 DB d'4', d'0', d'0', d'2' ; INTERFACE descriptor header plus 2 endpoints 02E0 FFFF 00FF 01007 DB h'FF', h'FF', h'FF', 0 ; bInterfaceClass / bInterfaceSubClass / bInterfaceProtocol, no strings gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 47 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01008 01009 ; ENDPOINT descriptors (follow after interface) 02E4 0507 01010 DB d'7', d'5' ; bLength, bDescriptorType 02E6 0301 01011 DB h'01', b'00000011' ; bEndpointAddress, bmAttributes 02E8 0040 01012 DB d'64', d'0' ; wMaxPacketSize 02EA 0750 01013 DB 50, d'7' ; bInterval, bLength 02EC 8105 01014 DB d'5', h'81' ; bDescriptorType, bEndpointAddress 02EE 4003 5000 01015 DB b'00000011', d'64', 0, 50 ; bmAttributes, wMaxPacketSize, bInterval 01016 01017 01018 ; ---------------------------------------------------- 01019 ; TIMER 0 USED FOR MICROSECOND CLOCK 01020 ; ---------------------------------------------------- 01021 ; This clock allows the host to be able to easily 01022 ; read the time from the PIC chip in a 32 bit counter 01023 ; incrementing once per microsecond (overflow after approx 1 hour) 01024 ; 01025 ; Thus, the host can accurately schedule events or 01026 ; synchronise with the PIC peripheral. 01027 ; 02F2 01028 main_clock_setup: 02F2 0100 01029 MOVLB 0 02F4 6B04 01030 CLRF timer_count_L,BANKED 02F6 6B05 01031 CLRF timer_count_H,BANKED 02F8 84F1 01032 BSF INTCON2,TMR0IP,ACCESS ; High priority 02FA 6AD7 01033 CLRF TMR0H,ACCESS 02FC 6AD6 01034 CLRF TMR0L,ACCESS 01035 ; Divide 32 MHz by 4, then by 8 to get 1MHz (microsecond clock) 02FE 0E82 01036 MOVLW b'10000010' 0300 6ED5 01037 MOVWF T0CON,ACCESS 0302 8AF2 01038 BSF INTCON,TMR0IE,ACCESS 0304 0012 01039 RETURN 01040 0306 01041 main_clock_increment: 0306 A4F2 01042 BTFSS INTCON,TMR0IF,ACCESS 0308 0012 01043 RETURN 030A 2B04 01044 INCF timer_count_L,BANKED 030C E101 01045 BNZ clock_done 030E 2B05 01046 INCF timer_count_H,BANKED 01047 0310 01048 clock_done: 0310 94F2 01049 BCF INTCON,TMR0IF,ACCESS 0312 0012 01050 RETURN 01051 01052 #if 0 01053 ; ---------------------------------------------- 01054 ; TEST FOR BYTECODE 01055 ; send some data 01056 ; ---------------------------------------------- 01057 testcode: 01058 MOVLW A'1' 01059 CALL opcode_action 01060 MOVLW A'2' 01061 CALL opcode_action gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 48 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01062 MOVLW A'4' 01063 CALL opcode_action 01064 MOVLW A'8' 01065 CALL opcode_action 01066 MOVLW A'9' 01067 CALL opcode_action 01068 MOVLW A':' 01069 CALL opcode_action 01070 MOVLW A'F' 01071 CALL opcode_action 01072 MOVLW A'?' 01073 CALL opcode_action 01074 MOVLW A'>' 01075 CALL opcode_action 01076 MOVLW A'3' 01077 CALL opcode_action 01078 MOVLW A'?' 01079 CALL opcode_action 01080 MOVLW A'5' 01081 CALL opcode_action 01082 MOVLW A'>' 01083 CALL opcode_action 01084 MOVLW A'?' 01085 CALL opcode_action 01086 MOVLW A'<' 01087 CALL opcode_action 01088 MOVLW A'?' 01089 CALL opcode_action 01090 MOVLW A'<' 01091 CALL opcode_action 01092 goto testcode 01093 #endif 01094 01095 #if 0 01096 ; ---------------------------------------------- 01097 ; TEST BYTECODES FROM USB BUFFER 01098 ; ---------------------------------------------- 01099 testcode: 01100 LFSR 0,BD2_buffer 01101 MOVLW A'1' 01102 MOVWF POSTINC0,ACCESS 01103 MOVLW A'2' 01104 MOVWF POSTINC0,ACCESS 01105 MOVLW A'4' 01106 MOVWF POSTINC0,ACCESS 01107 MOVLW A'8' 01108 MOVWF POSTINC0,ACCESS 01109 MOVLW A'9' 01110 MOVWF POSTINC0,ACCESS 01111 MOVLW A':' 01112 MOVWF POSTINC0,ACCESS 01113 MOVLW A'F' 01114 MOVWF POSTINC0,ACCESS 01115 MOVLW A'?' gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 49 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01116 MOVWF POSTINC0,ACCESS 01117 MOVLW A'>' 01118 MOVWF POSTINC0,ACCESS 01119 MOVLW A'3' 01120 MOVWF POSTINC0,ACCESS 01121 MOVLW A'?' 01122 MOVWF POSTINC0,ACCESS 01123 MOVLW A'5' 01124 MOVWF POSTINC0,ACCESS 01125 MOVLW A'>' 01126 MOVWF POSTINC0,ACCESS 01127 MOVLW A'?' 01128 MOVWF POSTINC0,ACCESS 01129 MOVLW A'<' 01130 MOVWF POSTINC0,ACCESS 01131 MOVLW A'?' 01132 MOVWF POSTINC0,ACCESS 01133 MOVLW A'<' 01134 MOVWF POSTINC0,ACCESS 01135 LFSR 0,BD2CNT 01136 MOVLW D'17' 01137 MOVWF INDF0,ACCESS 01138 MOVLB 4 01139 CALL USB_TRNIF_EP1_DIR0_PPB0 01140 goto testcode 01141 #endif 01142 01143 ; ---------------------------------------------------- 01144 ; Bytecode interpreter, we are a bit lazy and 01145 ; only use 7 bits (high bit is always ignored) 01146 ; so each byte number takes two bytes in ASCII hex. 01147 ; Also we ignore all the characters less or equal 01148 ; to space (0x20) and they are considered NOOP. 01149 ; ---------------------------------------------------- 01150 0314 01151 opcode_action: 0314 0100 01152 MOVLB 0 0316 D82F 01153 RCALL opcode_action_do 0318 5108 01154 MOVF current_opcode,W,BANKED 031A D087 01155 BRA output_char 01156 01157 ; Macro to make it easier to system more modular 01158 ; In some cases we might need a double-jump to 01159 ; reach further than one code page. 01160 opcode_branch macro jump_to 01161 ifdef jump_to 01162 BRA jump_to 01163 else 01164 RETURN 01165 endif 01166 endm 01167 031C 01168 opcode_range_40_7F: 031C BB08 01169 BTFSC current_opcode,5,BANKED gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 50 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01170 opcode_branch opcode_range_60_7F M ifdef jump_to M BRA jump_to M else 031E 0012 M RETURN M endif 0320 01171 opcode_range_40_5F: 0320 B908 01172 BTFSC current_opcode,4,BANKED 01173 opcode_branch opcode_range_50_5F M ifdef jump_to M BRA jump_to M else 0322 0012 M RETURN M endif 0324 01174 opcode_range_40_4F: 0324 B708 01175 BTFSC current_opcode,3,BANKED 01176 opcode_branch opcode_range_48_4F M ifdef jump_to M BRA jump_to M else 0326 0012 M RETURN M endif 0328 01177 opcode_range_40_47: ; Contains @ABCDEFG 0328 0B07 01178 ANDLW H'07' 032A E00B 01179 BZ opcode_range_40_40 032C 6F07 01180 MOVWF tmp_opcode,BANKED 032E 2B07 01181 INCF tmp_opcode,F,BANKED 0330 B707 01182 BTFSC tmp_opcode,3,BANKED 01183 opcode_branch opcode_range_47_47 M ifdef jump_to M BRA jump_to M else 0332 0012 M RETURN M endif 0334 0E0F 01184 MOVLW H'0F' 0336 1709 01185 ANDWF acc,F 0338 3909 01186 SWAPF acc,W 033A 2507 01187 ADDWF tmp_opcode,W 033C 0F08 01188 ADDLW H'08' 033E 6F09 01189 MOVWF acc 0340 0012 01190 RETURN 01191 0342 01192 opcode_range_40_40: ; This is the at '@' symbol 01193 ; This is used to snapshot the timer and insert the 01194 ; value into the output buffer (8 hex digits) 0342 C004 F014 01195 MOVFF timer_count_L,tmp_timer_2 0346 C005 F015 01196 MOVFF timer_count_H,tmp_timer_3 01197 ; Write H then L, read L then H 034A CFD6 F012 01198 MOVFF TMR0L,tmp_timer_0 ; >>==--- SHAPSHOT! ---==<< 034E CFD7 F013 01199 MOVFF TMR0H,tmp_timer_1 01200 ; Maybe a rollover happened, so check the high bit. 01201 ; If high bit is set then no way could a rollover have happened. 01202 ; If high bit is clear, then presume a rollover did happen. 0352 AF13 01203 BTFSS tmp_timer_1,7,BANKED gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 51 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0354 C004 F014 01204 MOVFF timer_count_L,tmp_timer_2 0358 AF13 01205 BTFSS tmp_timer_1,7,BANKED 035A C005 F015 01206 MOVFF timer_count_H,tmp_timer_3 01207 01208 ; Now we have the values, copy them into output buffer 01209 ; Use big-endian output as per ASCII standard and similar to 01210 ; input methods that we are using. 035E 5115 01211 MOVF tmp_timer_3,W,BANKED 0360 D805 01212 RCALL output_double_hex 0362 5114 01213 MOVF tmp_timer_2,W,BANKED 0364 D803 01214 RCALL output_double_hex 0366 5113 01215 MOVF tmp_timer_1,W,BANKED 0368 D801 01216 RCALL output_double_hex 036A 5112 01217 MOVF tmp_timer_0,W,BANKED 01218 ; tail-chain optimised 01219 036C 01220 output_double_hex: 036C 6F16 01221 MOVWF tmp_hex_out,BANKED 036E 3916 01222 SWAPF tmp_hex_out,W 0370 D850 01223 RCALL output_single_hex 0372 5116 01224 MOVF tmp_hex_out,W 0374 D04E 01225 BRA output_single_hex 01226 01227 ; On entry, the opcode must be in W 01228 ; 01229 ; Tried jump-tables but they are too hard to get right 01230 ; so a bitwise binary trie is better, work MSB to LSB. 0376 01231 opcode_action_do: 0376 0B7F 01232 ANDLW H'7F' ; Ignore top bit 0378 6F08 01233 MOVWF current_opcode 037A BD08 01234 BTFSC current_opcode,6 01235 opcode_branch opcode_range_40_7F M ifdef jump_to 037C D7CF M BRA jump_to M else M RETURN M endif 037E 01236 opcode_range_00_3F: 037E AB08 01237 BTFSS current_opcode,5 01238 opcode_branch opcode_range_00_1F M ifdef jump_to M BRA jump_to M else 0380 0012 M RETURN M endif 0382 01239 opcode_range_20_3F: 0382 A908 01240 BTFSS current_opcode,4 01241 opcode_branch opcode_range_20_2F M ifdef jump_to M BRA jump_to M else 0384 0012 M RETURN M endif 0386 01242 opcode_range_30_3F: gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 52 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01243 ; This is used for numbers 0-9 and a few specials 0386 0B0F 01244 ANDLW H'0F' ; Opcode is still in W, want lower 4 bits 0388 6AD8 01245 CLRF STATUS 038A 0007 01246 DAW ; Split out 0-9 from 10-15 038C 6F07 01247 MOVWF tmp_opcode ; contains H'00' to H'09' 038E B907 01248 BTFSC tmp_opcode,4 01249 opcode_branch opcode_range_3A_3F M ifdef jump_to 0390 D006 M BRA jump_to M else M RETURN M endif 0392 01250 opcode_range_30_39: 0392 0E0F 01251 MOVLW H'0F' 0394 1709 01252 ANDWF acc,F 0396 3909 01253 SWAPF acc,W 0398 2507 01254 ADDWF tmp_opcode,W 039A 6F09 01255 MOVWF acc 039C 0012 01256 RETURN 01257 039E 01258 opcode_range_3A_3F: 039E 5108 01259 MOVF current_opcode,W 03A0 B508 01260 BTFSC current_opcode,2 01261 opcode_branch opcode_range_3C_3F M ifdef jump_to 03A2 D00D M BRA jump_to M else M RETURN M endif 03A4 01262 opcode_range_3A_3B: 03A4 B108 01263 BTFSC current_opcode,0 01264 opcode_branch opcode_range_3B_3B M ifdef jump_to 03A6 D002 M BRA jump_to M else M RETURN M endif 03A8 01265 opcode_range_3A_3A: ; This is colon ':' clear accumulator 03A8 6B09 01266 CLRF acc 03AA 0012 01267 RETURN 03AC 01268 opcode_range_3B_3B: ; Semicolon ';' clear entire stack 03AC 6B09 01269 CLRF stk_0 03AE 6B0A 01270 CLRF stk_1 03B0 6B0B 01271 CLRF stk_2 03B2 6B0C 01272 CLRF stk_3 03B4 6B0D 01273 CLRF stk_4 03B6 6B0E 01274 CLRF stk_5 03B8 6B0F 01275 CLRF stk_6 03BA 6B10 01276 CLRF stk_7 03BC 0012 01277 RETURN 01278 03BE 01279 opcode_range_3C_3F: 03BE B308 01280 BTFSC current_opcode,1 01281 opcode_branch opcode_range_3E_3F gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 53 LOC OBJECT CODE LINE SOURCE TEXT VALUE M ifdef jump_to 03C0 D013 M BRA jump_to M else M RETURN M endif 03C2 01282 opcode_range_3C_3D: 03C2 B108 01283 BTFSC current_opcode,0 01284 opcode_branch opcode_range_3D_3D M ifdef jump_to 03C4 D010 M BRA jump_to M else M RETURN M endif 03C6 01285 opcode_range_3C_3C: ; less-than '<' which we use as a stack pop 03C6 C00A F009 01286 MOVFF stk_1,stk_0 03CA C00B F00A 01287 MOVFF stk_2,stk_1 03CE C00C F00B 01288 MOVFF stk_3,stk_2 03D2 C00D F00C 01289 MOVFF stk_4,stk_3 03D6 C00E F00D 01290 MOVFF stk_5,stk_4 03DA C00F F00E 01291 MOVFF stk_6,stk_5 03DE C010 F00F 01292 MOVFF stk_7,stk_6 03E2 6B10 01293 CLRF stk_7 03E4 0012 01294 RETURN 01295 03E6 01296 opcode_range_3D_3D: ; equals '=' TODO 03E6 0012 01297 RETURN 01298 03E8 01299 opcode_range_3E_3F: 03E8 B108 01300 BTFSC current_opcode,0 01301 opcode_branch opcode_range_3F_3F M ifdef jump_to 03EA D010 M BRA jump_to M else M RETURN M endif 03EC 01302 opcode_range_3E_3E: ; greater-than '>' which we use as a stack push 03EC C00F F010 01303 MOVFF stk_6,stk_7 03F0 C00E F00F 01304 MOVFF stk_5,stk_6 03F4 C00D F00E 01305 MOVFF stk_4,stk_5 03F8 C00C F00D 01306 MOVFF stk_3,stk_4 03FC C00B F00C 01307 MOVFF stk_2,stk_3 0400 C00A F00B 01308 MOVFF stk_1,stk_2 0404 C009 F00A 01309 MOVFF stk_0,stk_1 0408 6B09 01310 CLRF stk_0 040A 0012 01311 RETURN 01312 01313 ; 01314 ; For printing accumulator, we need to translate to ASCII hex 01315 ; and add to output buffer. 040C 01316 opcode_range_3F_3F: ; equals '?' used for printing 040C 3909 01317 SWAPF acc,W 040E D801 01318 RCALL output_single_hex 0410 5109 01319 MOVF acc,W 01320 ; Tail-chain-optimise gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 54 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01321 01322 ; Takes the value in W and puts it onto the output buffer 01323 ; as an ASCII digit (converts to char) 0412 01324 output_single_hex: 0412 0100 01325 MOVLB 0 0414 0B0F 01326 ANDLW H'0F' ; One ASCII char => 4 bits hex 0416 6F11 01327 MOVWF tmp_output,BANKED 0418 6AD8 01328 CLRF STATUS ; May not be necessary 041A 0007 01329 DAW 041C 1311 01330 IORWF tmp_output,BANKED 041E B911 01331 BTFSC tmp_output,4 0420 D002 01332 BRA output_hex_letter 0422 01333 output_hex_number: 0422 0F30 01334 ADDLW H'30' 0424 D002 01335 BRA output_char 0426 01336 output_hex_letter: 0426 5111 01337 MOVF tmp_output,W,BANKED 0428 0F27 01338 ADDLW H'27' 01339 ; Tail-chain-optimise 01340 042A 01341 output_char: 042A 0100 01342 MOVLB 0 042C 6F11 01343 MOVWF tmp_output,BANKED 01344 ; Check to see whether the buffer is full 042E AD1F 01345 BTFSS output_ix,6,BANKED 0430 D003 01346 BRA output_avail_space 0432 0E15 01347 MOVLW H'15' ; ASCII NAK 0434 6F5F 01348 MOVWF output_end,BANKED 0436 0012 01349 RETURN 0438 01350 output_avail_space: 0438 EE00 F020 01351 LFSR 0,output_start 043C 511F 01352 MOVF output_ix,W,BANKED 01353 ; Post-increment 043E 2B1F 01354 INCF output_ix,F,BANKED 0440 0B3F 01355 ANDLW output_mask 0442 26E9 01356 ADDWF FSR0L,F,ACCESS 0444 C011 FFEF 01357 MOVFF tmp_output,INDF0 0448 0012 01358 RETURN 01359 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 55 SYMBOL TABLE LABEL VALUE A 00000000 ABDEN 00000000 ABDOVF 00000007 ACCESS 00000000 ACKDT 00000005 ACKEN 00000004 ACKSTAT 00000006 ACQT0 00000003 ACQT1 00000004 ACQT2 00000005 ACTVIE 00000002 ACTVIF 00000002 ADCON0 00000FC2 ADCON1 00000FC1 ADCON2 00000FC0 ADCS0 00000000 ADCS1 00000001 ADCS2 00000002 ADDEN 00000003 ADDR0 00000000 ADDR1 00000001 ADDR2 00000002 ADDR3 00000003 ADDR4 00000004 ADDR5 00000005 ADDR6 00000006 ADEN 00000003 ADFM 00000007 ADIE 00000006 ADIF 00000006 ADIP 00000006 ADON 00000000 ADRES 00000FC3 ADRESH 00000FC4 ADRESL 00000FC3 AN0 00000000 AN1 00000001 AN2 00000002 AN3 00000003 AN4 00000005 BANKED 00000001 BAUDCON 00000FB8 BCLIE 00000003 BCLIF 00000003 BCLIP 00000003 BD0ADRH 00000403 BD0ADRL 00000402 BD0CNT 00000401 BD0STAT 00000400 BD0_buffer 00000500 BD1ADRH 00000407 BD1ADRL 00000406 BD1CNT 00000405 BD1STAT 00000404 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 56 LOC OBJECT CODE LINE SOURCE TEXT VALUE BD1_buffer 00000540 BD2ADRH 0000040B BD2ADRL 0000040A BD2CNT 00000409 BD2STAT 00000408 BD2_buffer 00000580 BD2_opcode_loop 00000248 BD3ADRH 0000040F BD3ADRL 0000040E BD3CNT 0000040D BD3STAT 0000040C BD3_buffer 000005C0 BF 00000000 BGST 00000005 BOR 00000000 BRG16 00000003 BRGH 00000002 BSR 00000FE0 BTOEE 00000004 BTOEF 00000004 BTSEE 00000007 BTSEF 00000007 C 00000000 C1INV 00000004 C1OUT 00000006 C2INV 00000005 C2OUT 00000007 CCP1 00000002 CCP1AS 00000FB6 CCP1CON 00000FBD CCP1DEL 00000FB7 CCP1IE 00000002 CCP1IF 00000002 CCP1IP 00000002 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCP2CON 00000FBA CCP2IE 00000000 CCP2IF 00000000 CCP2IP 00000000 CCP2M0 00000000 CCP2M1 00000001 CCP2M2 00000002 CCP2M3 00000003 CCPR1 00000FBE CCPR1H 00000FBF CCPR1L 00000FBE CCPR2 00000FBB CCPR2H 00000FBC CCPR2L 00000FBB CFGS 00000006 CHS0 00000002 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 57 LOC OBJECT CODE LINE SOURCE TEXT VALUE CHS1 00000003 CHS2 00000004 CHS3 00000005 CIS 00000003 CK 00000006 CKE 00000006 CKP 00000004 CM0 00000000 CM1 00000001 CM2 00000002 CMCON 00000FB4 CMIE 00000006 CMIF 00000006 CMIP 00000006 CRC16EE 00000002 CRC16EF 00000002 CRC5EE 00000001 CRC5EF 00000001 CREN 00000004 CSRC 00000007 CVR0 00000000 CVR1 00000001 CVR2 00000002 CVR3 00000003 CVRCON 00000FB5 CVREF 00000004 CVREN 00000007 CVROE 00000006 CVRR 00000005 CVRSS 00000004 D 00000005 DATA_ADDRESS 00000005 DC 00000001 DC1B0 00000004 DC1B1 00000005 DC2B0 00000004 DC2B1 00000005 DFN8EE 00000003 DFN8EF 00000003 DIR 00000002 DONE 00000001 DTS 00000006 DTSEN 00000003 D_A 00000005 Do_USB_reset 0000006C ECCP1AS 00000FB6 ECCP1DEL 00000FB7 ECCPAS0 00000004 ECCPAS1 00000005 ECCPAS2 00000006 ECCPASE 00000007 EEADR 00000FA9 EECON1 00000FA6 EECON2 00000FA7 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 58 LOC OBJECT CODE LINE SOURCE TEXT VALUE EEDATA 00000FA8 EEIE 00000004 EEIF 00000004 EEIP 00000004 EEPGD 00000007 ENDP0 00000003 ENDP1 00000004 ENDP2 00000005 ENDP3 00000006 EPCONDIS 00000003 EPHSHK 00000004 EPINEN 00000001 EPOUTEN 00000002 EPSTALL 00000000 FAST 00000001 FERR 00000002 FLTS 00000002 FREE 00000004 FRM0 00000000 FRM1 00000001 FRM10 00000002 FRM2 00000002 FRM3 00000003 FRM4 00000004 FRM5 00000005 FRM6 00000006 FRM7 00000007 FRM8 00000000 FRM9 00000001 FSEN 00000002 FSR0 00000000 FSR0H 00000FEA FSR0L 00000FE9 FSR1 00000001 FSR1H 00000FE2 FSR1L 00000FE1 FSR2 00000002 FSR2H 00000FDA FSR2L 00000FD9 GCEN 00000007 GIE 00000007 GIEH 00000007 GIEL 00000006 GO 00000001 GO_DONE 00000001 HLVDCON 00000FD2 HLVDEN 00000004 HLVDIE 00000002 HLVDIF 00000002 HLVDIN 00000005 HLVDIP 00000002 HLVDL0 00000000 HLVDL1 00000001 HLVDL2 00000002 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 59 LOC OBJECT CODE LINE SOURCE TEXT VALUE HLVDL3 00000003 Handle_USB_TRNIF 00000122 Handle_USB_URSTIF 00000068 I2C_DAT 00000005 I2C_READ 00000002 I2C_START 00000003 I2C_STOP 00000004 IDLEIE 00000004 IDLEIF 00000004 IDLEN 00000007 INDF0 00000FEF INDF1 00000FE7 INDF2 00000FDF INT0 00000000 INT0E 00000004 INT0F 00000001 INT0IE 00000004 INT0IF 00000001 INT1 00000001 INT1E 00000003 INT1F 00000000 INT1IE 00000003 INT1IF 00000000 INT1IP 00000006 INT1P 00000006 INT2 00000002 INT2E 00000004 INT2F 00000001 INT2IE 00000004 INT2IF 00000001 INT2IP 00000007 INT2P 00000007 INTCON 00000FF2 INTCON2 00000FF1 INTCON3 00000FF0 INTEDG0 00000006 INTEDG1 00000005 INTEDG2 00000004 INTSRC 00000007 IOFS 00000002 IPEN 00000007 IPR1 00000F9F IPR2 00000FA2 IRCF0 00000004 IRCF1 00000005 IRCF2 00000006 IRVST 00000005 IVRST 00000005 LATA 00000F89 LATA0 00000000 LATA1 00000001 LATA2 00000002 LATA3 00000003 LATA4 00000004 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 60 LOC OBJECT CODE LINE SOURCE TEXT VALUE LATA5 00000005 LATA6 00000006 LATB 00000F8A LATB0 00000000 LATB1 00000001 LATB2 00000002 LATB3 00000003 LATB4 00000004 LATB5 00000005 LATB6 00000006 LATB7 00000007 LATC 00000F8B LATC0 00000000 LATC1 00000001 LATC2 00000002 LATC6 00000006 LATC7 00000007 LVDCON 00000FD2 LVDEN 00000004 LVDIE 00000002 LVDIF 00000002 LVDIN 00000005 LVDIP 00000002 LVDL0 00000000 LVDL1 00000001 LVDL2 00000002 LVDL3 00000003 LVV0 00000000 LVV1 00000001 LVV2 00000002 LVV3 00000003 N 00000004 NOT_A 00000005 NOT_ADDRESS 00000005 NOT_BOR 00000000 NOT_DONE 00000001 NOT_IPEN 00000007 NOT_PD 00000002 NOT_POR 00000001 NOT_RBPU 00000007 NOT_RI 00000004 NOT_T1SYNC 00000002 NOT_T3SYNC 00000002 NOT_TO 00000003 NOT_W 00000002 NOT_WRITE 00000002 OERR 00000001 OSC2 00000006 OSCCON 00000FD3 OSCFIE 00000007 OSCFIF 00000007 OSCFIP 00000007 OSCTUNE 00000F9B OSTS 00000003 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 61 LOC OBJECT CODE LINE SOURCE TEXT VALUE OV 00000003 P 00000004 P1A 00000002 PC 00000FF9 PCFG0 00000000 PCFG1 00000001 PCFG2 00000002 PCFG3 00000003 PCL 00000FF9 PCLATH 00000FFA PCLATU 00000FFB PD 00000002 PEIE 00000006 PEN 00000002 PGC 00000006 PGD 00000007 PGM 00000005 PIDEE 00000000 PIDEF 00000000 PIE1 00000F9D PIE2 00000FA0 PIR1 00000F9E PIR2 00000FA1 PKTDIS 00000004 PLUSW0 00000FEB PLUSW1 00000FE3 PLUSW2 00000FDB POR 00000001 PORTA 00000F80 PORTB 00000F81 PORTC 00000F82 PORTE 00000F84 POSTDEC0 00000FED POSTDEC1 00000FE5 POSTDEC2 00000FDD POSTINC0 00000FEE POSTINC1 00000FE6 POSTINC2 00000FDE PPB0 00000000 PPB1 00000001 PPBI 00000001 PPBRST 00000006 PR2 00000FCB PREINC0 00000FEC PREINC1 00000FE4 PREINC2 00000FDC PROD 00000FF3 PRODH 00000FF4 PRODL 00000FF3 PRSEN 00000007 PSA 00000003 PSSAC0 00000002 PSSAC1 00000003 R 00000002 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 62 LOC OBJECT CODE LINE SOURCE TEXT VALUE RA0 00000000 RA1 00000001 RA2 00000002 RA3 00000003 RA4 00000004 RA5 00000005 RA6 00000006 RB0 00000000 RB1 00000001 RB2 00000002 RB3 00000003 RB4 00000004 RB5 00000005 RB6 00000006 RB7 00000007 RBIE 00000003 RBIF 00000000 RBIP 00000000 RBPU 00000007 RC0 00000000 RC1 00000001 RC2 00000002 RC4 00000004 RC5 00000005 RC6 00000006 RC7 00000007 RCEN 00000003 RCIDL 00000006 RCIE 00000005 RCIF 00000005 RCIP 00000005 RCMT 00000006 RCON 00000FD0 RCREG 00000FAE RCSTA 00000FAB RD 00000000 RD16 00000007 RE3 00000003 READ_WRITE 00000002 RESUME 00000002 RI 00000004 RSEN 00000001 RX 00000007 RX9 00000006 RX9D 00000000 RXDTP 00000005 R_W 00000002 S 00000003 SBOREN 00000006 SCKP 00000004 SCS0 00000000 SCS1 00000001 SE0 00000005 SEN 00000000 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 63 LOC OBJECT CODE LINE SOURCE TEXT VALUE SENDB 00000003 SMP 00000007 SOFIE 00000006 SOFIF 00000006 SPBRG 00000FAF SPBRGH 00000FB0 SPEN 00000007 SREN 00000005 SSPADD 00000FC8 SSPBUF 00000FC9 SSPCON1 00000FC6 SSPCON2 00000FC5 SSPEN 00000005 SSPIE 00000003 SSPIF 00000003 SSPIP 00000003 SSPM0 00000000 SSPM1 00000001 SSPM2 00000002 SSPM3 00000003 SSPOV 00000006 SSPSTAT 00000FC7 STALLIE 00000005 STALLIF 00000005 STATUS 00000FD8 STKFUL 00000007 STKPTR 00000FFC STKPTR0 00000000 STKPTR1 00000001 STKPTR2 00000002 STKPTR3 00000003 STKPTR4 00000004 STKUNF 00000006 SUSPND 00000001 SWDTE 00000000 SWDTEN 00000000 SYNC 00000004 T08BIT 00000006 T0CKI 00000004 T0CON 00000FD5 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0IP 00000002 T0PS0 00000000 T0PS1 00000001 T0PS2 00000002 T0SE 00000004 T13CKI 00000000 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000FCD T1OSCEN 00000003 T1OSI 00000001 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 64 LOC OBJECT CODE LINE SOURCE TEXT VALUE T1OSO 00000000 T1RUN 00000006 T1SYNC 00000002 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000FCA T2OUTPS0 00000003 T2OUTPS1 00000004 T2OUTPS2 00000005 T2OUTPS3 00000006 T3CCP1 00000003 T3CCP2 00000006 T3CKPS0 00000004 T3CKPS1 00000005 T3CON 00000FB1 T3NSYNC 00000002 T3SYNC 00000002 TABLAT 00000FF5 TBLPTR 00000FF6 TBLPTRH 00000FF7 TBLPTRL 00000FF6 TBLPTRU 00000FF8 TMR0H 00000FD7 TMR0IE 00000005 TMR0IF 00000002 TMR0IP 00000002 TMR0L 00000FD6 TMR0ON 00000007 TMR1CS 00000001 TMR1H 00000FCF TMR1IE 00000000 TMR1IF 00000000 TMR1IP 00000000 TMR1L 00000FCE TMR1ON 00000000 TMR2 00000FCC TMR2IE 00000001 TMR2IF 00000001 TMR2IP 00000001 TMR2ON 00000002 TMR3CS 00000001 TMR3H 00000FB3 TMR3IE 00000001 TMR3IF 00000001 TMR3IP 00000001 TMR3L 00000FB2 TMR3ON 00000000 TO 00000003 TOS 00000FFD TOSH 00000FFE TOSL 00000FFD TOSU 00000FFF TRISA 00000F92 TRISA0 00000000 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 65 LOC OBJECT CODE LINE SOURCE TEXT VALUE TRISA1 00000001 TRISA2 00000002 TRISA3 00000003 TRISA4 00000004 TRISA5 00000005 TRISA6 00000006 TRISB 00000F93 TRISB0 00000000 TRISB1 00000001 TRISB2 00000002 TRISB3 00000003 TRISB4 00000004 TRISB5 00000005 TRISB6 00000006 TRISB7 00000007 TRISC 00000F94 TRISC0 00000000 TRISC1 00000001 TRISC2 00000002 TRISC6 00000006 TRISC7 00000007 TRMT 00000001 TRNIE 00000003 TRNIF 00000003 TUN0 00000000 TUN1 00000001 TUN2 00000002 TUN3 00000003 TUN4 00000004 TX 00000006 TX9 00000006 TX9D 00000000 TXCKP 00000004 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXIP 00000004 TXREG 00000FAD TXSTA 00000FAC UA 00000001 UADDR 00000F6E UCFG 00000F6F UCON 00000F6D UEIE 00000F6B UEIR 00000F6A UEP0 00000F70 UEP1 00000F71 UEP10 00000F7A UEP11 00000F7B UEP12 00000F7C UEP13 00000F7D UEP14 00000F7E UEP15 00000F7F UEP2 00000F72 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 66 LOC OBJECT CODE LINE SOURCE TEXT VALUE UEP3 00000F73 UEP4 00000F74 UEP5 00000F75 UEP6 00000F76 UEP7 00000F77 UEP8 00000F78 UEP9 00000F79 UERRIE 00000001 UERRIF 00000001 UFRM 00000F66 UFRMH 00000F67 UFRML 00000F66 UIE 00000F69 UIR 00000F68 UOEMON 00000006 UOWN 00000007 UPUEN 00000004 URSTIE 00000000 URSTIF 00000000 USBEN 00000003 USBIE 00000005 USBIF 00000005 USBIP 00000005 USB_2_cnt 00000414 USB_3_cnt 00000415 USB_ADDR 00000412 USB_CLEAR_FEATURE 00000001 USB_EP 00000410 USB_EP0_SETUP_sw 00000166 USB_GET_CONFIGURATION 00000008 USB_GET_DESCRIPTOR 00000006 USB_GET_INTERFACE 00000010 USB_GET_STATUS 00000000 USB_PID 00000411 USB_SET_ADDRESS 00000005 USB_SET_CONFIGURATION 00000009 USB_SET_DESCRIPTOR 00000007 USB_SET_FEATURE 00000003 USB_SET_INTERFACE 00000011 USB_STRUCT_bRequest 00000001 USB_STRUCT_bmRequestType 00000000 USB_STRUCT_wIndex 00000004 USB_STRUCT_wLength 00000006 USB_STRUCT_wValue 00000002 USB_STRUCT_wValue_HI 00000003 USB_SYNCH_FRAME 00000012 USB_TRNIF_EP0_DIR0_PPB0 0000014E USB_TRNIF_EP0_DIR0_PPB1 0000014E USB_TRNIF_EP0_DIR1_PPB0 0000014A USB_TRNIF_EP0_DIR1_PPB1 0000014A USB_TRNIF_EP1_DIR0_PPB0 00000244 USB_TRNIF_EP1_DIR0_PPB1 00000244 USB_TRNIF_EP1_DIR1_PPB0 00000276 USB_TRNIF_EP1_DIR1_PPB1 00000276 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 67 LOC OBJECT CODE LINE SOURCE TEXT VALUE USB_TRNIF_EP2_DIR0_PPB0 000002A4 USB_TRNIF_EP2_DIR0_PPB1 000002A4 USB_TRNIF_EP2_DIR1_PPB0 000002A4 USB_TRNIF_EP2_DIR1_PPB1 000002A4 USB_TRNIF_EP3_DIR0_PPB0 000002A4 USB_TRNIF_EP3_DIR0_PPB1 000002A4 USB_TRNIF_EP3_DIR1_PPB0 000002A4 USB_TRNIF_EP3_DIR1_PPB1 000002A4 USB_copy 00000413 USB_dsc_CONFIGURATION 000002D2 USB_dsc_DEVICE 000002C0 USB_opcode_ix 00000416 USB_reset_loop1 0000007C USB_reset_loop2 00000088 USTAT 00000F6C UTEYE 00000007 UTRDIS 00000003 VCFG0 00000004 VCFG1 00000005 VDIRMAG 00000007 VREFM 00000002 VREFP 00000003 W 00000000 WCOL 00000007 WDTCON 00000FD1 WR 00000001 WREG 00000FE8 WREN 00000002 WRERR 00000003 WUE 00000001 Z 00000002 _BORV_0_2L 000000E7 _BORV_1_2L 000000EF _BORV_2_2L 000000F7 _BORV_3_2L 000000FF _BOR_OFF_2L 000000F9 _BOR_ON_2L 000000FF _BOR_ON_ACTIVE_2L 000000FD _BOR_SOFT_2L 000000FB _CCP2MX_OFF_3H 000000FE _CCP2MX_ON_3H 000000FF _CONFIG1H 00300001 _CONFIG1L 00300000 _CONFIG2H 00300003 _CONFIG2L 00300002 _CONFIG3H 00300005 _CONFIG4L 00300006 _CONFIG5H 00300009 _CONFIG5L 00300008 _CONFIG6H 0030000B _CONFIG6L 0030000A _CONFIG7H 0030000D _CONFIG7L 0030000C _CP0_OFF_5L 000000FF gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 68 LOC OBJECT CODE LINE SOURCE TEXT VALUE _CP0_ON_5L 000000FE _CP1_OFF_5L 000000FF _CP1_ON_5L 000000FD _CP2_OFF_5L 000000FF _CP2_ON_5L 000000FB _CPB_OFF_5H 000000FF _CPB_ON_5H 000000BF _CPD_OFF_5H 000000FF _CPD_ON_5H 0000007F _CPUDIV_OSC1_PLL2_1L 000000E7 _CPUDIV_OSC2_PLL3_1L 000000EF _CPUDIV_OSC3_PLL4_1L 000000F7 _CPUDIV_OSC4_PLL6_1L 000000FF _DEBUG_OFF_4L 000000FF _DEBUG_ON_4L 0000007F _DEVID1 003FFFFE _DEVID2 003FFFFF _EBTR0_OFF_7L 000000FF _EBTR0_ON_7L 000000FE _EBTR1_OFF_7L 000000FF _EBTR1_ON_7L 000000FD _EBTR2_OFF_7L 000000FF _EBTR2_ON_7L 000000FB _EBTRB_OFF_7H 000000FF _EBTRB_ON_7H 000000BF _FCMEN_OFF_1H 000000BF _FCMEN_ON_1H 000000FF _FOSC_ECIO_EC_1H 000000F4 _FOSC_ECPLLIO_EC_1H 000000F6 _FOSC_ECPLL_EC_1H 000000F7 _FOSC_EC_EC_1H 000000F5 _FOSC_HSPLL_HS_1H 000000FE _FOSC_HS_1H 000000FC _FOSC_INTOSCIO_EC_1H 000000F8 _FOSC_INTOSC_EC_1H 000000F9 _FOSC_INTOSC_HS_1H 000000FB _FOSC_INTOSC_XT_1H 000000FA _FOSC_XTPLL_XT_1H 000000F2 _FOSC_XT_XT_1H 000000F0 _IDLOC0 00200000 _IDLOC1 00200001 _IDLOC2 00200002 _IDLOC3 00200003 _IDLOC4 00200004 _IDLOC5 00200005 _IDLOC6 00200006 _IDLOC7 00200007 _IESO_OFF_1H 0000007F _IESO_ON_1H 000000FF _LPT1OSC_OFF_3H 000000FB _LPT1OSC_ON_3H 000000FF _LVP_OFF_4L 000000FB _LVP_ON_4L 000000FF _MCLRE_OFF_3H 0000007F gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 69 LOC OBJECT CODE LINE SOURCE TEXT VALUE _MCLRE_ON_3H 000000FF _PBADEN_OFF_3H 000000FD _PBADEN_ON_3H 000000FF _PLLDIV_10_1L 000000FE _PLLDIV_12_1L 000000FF _PLLDIV_1_1L 000000F8 _PLLDIV_2_1L 000000F9 _PLLDIV_3_1L 000000FA _PLLDIV_4_1L 000000FB _PLLDIV_5_1L 000000FC _PLLDIV_6_1L 000000FD _PWRT_OFF_2L 000000FF _PWRT_ON_2L 000000FE _STVREN_OFF_4L 000000FE _STVREN_ON_4L 000000FF _USBDIV_1_1L 000000DF _USBDIV_2_1L 000000FF _VREGEN_OFF_2L 000000DF _VREGEN_ON_2L 000000FF _WDTPS_1024_2H 000000F5 _WDTPS_128_2H 000000EF _WDTPS_16384_2H 000000FD _WDTPS_16_2H 000000E9 _WDTPS_1_2H 000000E1 _WDTPS_2048_2H 000000F7 _WDTPS_256_2H 000000F1 _WDTPS_2_2H 000000E3 _WDTPS_32768_2H 000000FF _WDTPS_32_2H 000000EB _WDTPS_4096_2H 000000F9 _WDTPS_4_2H 000000E5 _WDTPS_512_2H 000000F3 _WDTPS_64_2H 000000ED _WDTPS_8192_2H 000000FB _WDTPS_8_2H 000000E7 _WDT_OFF_2H 000000FE _WDT_ON_2H 000000FF _WRT0_OFF_6L 000000FF _WRT0_ON_6L 000000FE _WRT1_OFF_6L 000000FF _WRT1_ON_6L 000000FD _WRT2_OFF_6L 000000FF _WRT2_ON_6L 000000FB _WRTB_OFF_6H 000000FF _WRTB_ON_6H 000000BF _WRTC_OFF_6H 000000FF _WRTC_ON_6H 000000DF _WRTD_OFF_6H 000000FF _WRTD_ON_6H 0000007F _XINST_OFF_4L 000000BF _XINST_ON_4L 000000FF __18F2455 00000001 acc 00000009 blink1 00000000 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 70 LOC OBJECT CODE LINE SOURCE TEXT VALUE blink2 00000001 blink3 00000006 clock_done 00000310 control_read_failure 0000017C control_write_failure 0000017C control_write_success 00000136 copy_BD3_loop 00000286 copy_BD3_short 00000294 copy_EP0_IN 000002A6 copy_loop 000002AE current_opcode 00000008 done_BD2_opcode_loop 0000025E endpoint_branch_jt 00000100 handle_USB_CLEAR_FEATURE_pr 00000194 handle_USB_GET_CONFIGURATION_pr 0000019E handle_USB_GET_DESCRIPTOR_pr 000001A8 handle_USB_GET_DESCRIPTOR_sw 000001B4 handle_USB_GET_DESC_CONFIG_pr 000001D8 handle_USB_GET_DESC_DEVICE_pr 000001BA handle_USB_GET_INTERFACE_pr 000001F6 handle_USB_GET_STATUS_pr 00000200 handle_USB_SET_ADDRESS_pr 00000184 handle_USB_SET_CONFIGURATION_pr 0000020A handle_USB_SET_DESCRIPTOR_pr 00000216 handle_USB_SET_FEATURE_pr 00000222 handle_USB_SET_INTERFACE_pr 0000022C handle_USB_SYNCH_FRAME_pr 00000238 idle_count_H 00000003 idle_count_L 00000002 idle_count_done 00000066 idle_loop 0000004A main_clock_increment 00000306 main_clock_setup 000002F2 opcode_action 00000314 opcode_action_do 00000376 opcode_range_00_3F 0000037E opcode_range_20_3F 00000382 opcode_range_30_39 00000392 opcode_range_30_3F 00000386 opcode_range_3A_3A 000003A8 opcode_range_3A_3B 000003A4 opcode_range_3A_3F 0000039E opcode_range_3B_3B 000003AC opcode_range_3C_3C 000003C6 opcode_range_3C_3D 000003C2 opcode_range_3C_3F 000003BE opcode_range_3D_3D 000003E6 opcode_range_3E_3E 000003EC opcode_range_3E_3F 000003E8 opcode_range_3F_3F 0000040C opcode_range_40_40 00000342 opcode_range_40_47 00000328 opcode_range_40_4F 00000324 opcode_range_40_5F 00000320 gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 71 LOC OBJECT CODE LINE SOURCE TEXT VALUE opcode_range_40_7F 0000031C output_avail_space 00000438 output_char 0000042A output_double_hex 0000036C output_end 0000005F output_hex_letter 00000426 output_hex_number 00000422 output_ix 0000001F output_mask 0000003F output_single_hex 00000412 output_start 00000020 prime_BD0 0000015C start 0000001A stk_0 00000009 stk_1 0000000A stk_2 0000000B stk_3 0000000C stk_4 0000000D stk_5 0000000E stk_6 0000000F stk_7 00000010 timer_count_H 00000005 timer_count_L 00000004 tmp_hex_out 00000016 tmp_opcode 00000007 tmp_output 00000011 tmp_timer_0 00000012 tmp_timer_1 00000013 tmp_timer_2 00000014 tmp_timer_3 00000015 truncate_EP0_IN 000002B8 update_address 0000013E update_address_done 00000148 v_interrupt_high 00000008 v_interrupt_low 00000018 v_reset 00000000 DDRA TRISA DDRB TRISB DDRC TRISC DDRD TRISD DDRE TRISE MEMORY USAGE MAP ('X' = Used, '-' = Unused) 00000000 : XXXXXXXX-------- XXXXXXXXXXXX---- ---------------- XXXXXXXXXXXXXXXX 00000040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000000c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000001c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ---------------- 00000200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX gpasm-0.14.0 usb.asm 12-31-2011 04:31:52 PAGE 72 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000002c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000003c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000400 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000440 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000004c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000500 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000540 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000580 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000005c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000600 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000640 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000680 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000006c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000700 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000740 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000780 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 000007c0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000800 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000840 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00000880 : XXXXXXXXXXXXXXXX XXXX------------ ---------------- ---------------- 00600000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXX---- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 1090 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 0 suppressed