📄 datalog.lst
字号:
00437 ; | 0x13 | LBA 0-7 |
00438 ; | 0x14 | LBA 8-15 |
00439 ; | 0x15 | LBA 16-23 |
00440 ; | 0x16 | LBA 24-27 |
00441 ; | 0x17 | Command |
00442 ; +------+----------------------------+
00443
00444 ;====================================================================
00445 ; Read a register from the ATA drive (16 bit)
00446 ;--------------------------------------------------------------------
00447 ; W contains address
00448 ; TMP1 contains data low
00449 ; TMP2 contains data high
00450 ;--------------------------------------------------------------------
0001F4 00451 ATA_Reg16_Read
0001F4 AA82 00452 btfss PORTC, 5 ; Wait until ready
0001F6 D7FE 00453 bra ATA_Reg16_Read
0001F8 0B1F 00454 andlw B'00011111' ; Set address
0001FA 6E82 00455 movwf PORTC
0001FC 908D 00456 bcf LATE, 0 ; DIOR low
0001FE 0000 00457 nop ; Wait
000200 0000 00458 nop
000202 5081 00459 movf PORTB, W ; Get data
000204 6E00 00460 movwf TMP1
000206 5083 00461 movf PORTD, W
000208 6E01 00462 movwf TMP2
00020A 808D 00463 bsf LATE, 0 ; DIOR high
00020C 0012 00464 return
00465
00466 ;====================================================================
00467 ; Write a register to the ATA drive (16 bit)
MPASM 03.00 Released DATALOG.ASM 3-29-2004 12:59:54 PAGE 10
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00468 ;--------------------------------------------------------------------
00469 ; W contains address
00470 ; TMP1 contains data low
00471 ; TMP2 contains data high
00472 ;--------------------------------------------------------------------
00020E 00473 ATA_Reg16_Write
00020E AA82 00474 btfss PORTC, 5 ; Wait until ready
000210 D7FE 00475 bra ATA_Reg16_Write
000212 0B1F 00476 andlw B'00011111' ; Set address
000214 6E82 00477 movwf PORTC
000216 5000 00478 movf TMP1, W ; Set data
000218 6E81 00479 movwf PORTB
00021A 5001 00480 movf TMP2, W
00021C 6E83 00481 movwf PORTD
00021E 6A93 00482 clrf TRISB ; Port for output
000220 6A95 00483 clrf TRISD
000222 928D 00484 bcf LATE, 1 ; DIOW low
000224 0000 00485 nop ; Wait
000226 0000 00486 nop
000228 828D 00487 bsf LATE, 1 ; DIOW high
00022A 6893 00488 setf TRISB ; Ports for input
00022C 6895 00489 setf TRISD
00022E 0012 00490 return
00491
00492 ;====================================================================
00493 ; Output string routines
00494 ;--------------------------------------------------------------------
000230 00495 OUT_VERSION
000230 0E00 00496 movlw UPPER(MSG_VERSION)
000232 6EF8 00497 movwf TBLPTRU
000234 0E03 00498 movlw HIGH(MSG_VERSION)
000236 6EF7 00499 movwf TBLPTRH
000238 0E98 00500 movlw LOW(MSG_VERSION)
00023A 6EF6 00501 movwf TBLPTRL
00023C EF8C F000 00502 goto UART_Puts
000240 00503 OUT_HELP
000240 0E00 00504 movlw UPPER(MSG_HELP)
000242 6EF8 00505 movwf TBLPTRU
000244 0E03 00506 movlw HIGH(MSG_HELP)
000246 6EF7 00507 movwf TBLPTRH
000248 0EC8 00508 movlw LOW(MSG_HELP)
00024A 6EF6 00509 movwf TBLPTRL
00024C EF8C F000 00510 goto UART_Puts
000250 00511 OUT_COMMAND
000250 0E00 00512 movlw UPPER(MSG_COMMAND)
000252 6EF8 00513 movwf TBLPTRU
000254 0E03 00514 movlw HIGH(MSG_COMMAND)
000256 6EF7 00515 movwf TBLPTRH
000258 0EB6 00516 movlw LOW(MSG_COMMAND)
00025A 6EF6 00517 movwf TBLPTRL
00025C EF8C F000 00518 goto UART_Puts
000260 00519 OUT_CRLF
000260 0E00 00520 movlw UPPER(MSG_CRLF)
MPASM 03.00 Released DATALOG.ASM 3-29-2004 12:59:54 PAGE 11
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000262 6EF8 00521 movwf TBLPTRU
000264 0E03 00522 movlw HIGH(MSG_CRLF)
000266 6EF7 00523 movwf TBLPTRH
000268 0EC4 00524 movlw LOW(MSG_CRLF)
00026A 6EF6 00525 movwf TBLPTRL
00026C EF8C F000 00526 goto UART_Puts
000270 00527 OUT_UNKNOWN
000270 0E00 00528 movlw UPPER(MSG_UNKNOWN)
000272 6EF8 00529 movwf TBLPTRU
000274 0E04 00530 movlw HIGH(MSG_UNKNOWN)
000276 6EF7 00531 movwf TBLPTRH
000278 0E0E 00532 movlw LOW(MSG_UNKNOWN)
00027A 6EF6 00533 movwf TBLPTRL
00027C EF8C F000 00534 goto UART_Puts
000280 00535 OUT_LOG
000280 0E00 00536 movlw UPPER(MSG_LOG)
000282 6EF8 00537 movwf TBLPTRU
000284 0E04 00538 movlw HIGH(MSG_LOG)
000286 6EF7 00539 movwf TBLPTRH
000288 0E22 00540 movlw LOW(MSG_LOG)
00028A 6EF6 00541 movwf TBLPTRL
00028C EF8C F000 00542 goto UART_Puts
000290 00543 OUT_DUMP
000290 0E00 00544 movlw UPPER(MSG_DUMP)
000292 6EF8 00545 movwf TBLPTRU
000294 0E04 00546 movlw HIGH(MSG_DUMP)
000296 6EF7 00547 movwf TBLPTRH
000298 0E46 00548 movlw LOW(MSG_DUMP)
00029A 6EF6 00549 movwf TBLPTRL
00029C EF8C F000 00550 goto UART_Puts
00551
00552 ;====================================================================
00553 ; Output value to USART as two hexadecimal digits
00554 ;--------------------------------------------------------------------
00555 ; W contains value to be output
00556 ;--------------------------------------------------------------------
0002A0 00557 OUT_HEX
0002A0 6E00 00558 movwf TMP1
0002A2 3800 00559 swapf TMP1, W
0002A4 D801 00560 rcall OUT_HEX_SUB1
0002A6 5000 00561 movf TMP1, W
0002A8 00562 OUT_HEX_SUB1
0002A8 0B0F 00563 andlw 0x0F
0002AA 0FF6 00564 addlw 0xF6
0002AC B0D8 00565 btfsc STATUS, C
0002AE 0F07 00566 addlw 0x07
0002B0 0F3A 00567 addlw 0x3A
0002B2 D72D 00568 bra UART_Putch
00569
00570 ;====================================================================
00571 ; Start logging
00572 ;--------------------------------------------------------------------
0002B4 00573 LOG_START
MPASM 03.00 Released DATALOG.ASM 3-29-2004 12:59:54 PAGE 12
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0002B4 D818 00574 rcall LOG_RESET
0002B6 D81B 00575 rcall INIT_ADC
0002B8 D822 00576 rcall INIT_TIMER
0002BA D828 00577 rcall START_TIMER
0002BC 8ED0 00578 bsf RCON, IPEN ; Enable interrupt priority
0002BE 8EF2 00579 bsf INTCON, GIEH ; Enable high prority interrupts
0002C0 8CF2 00580 bsf INTCON, GIEL ; Enable low prority interrupts
0002C2 0012 00581 return
00582
00583 ;====================================================================
00584 ; Stop logging
00585 ;--------------------------------------------------------------------
0002C4 00586 LOG_STOP
0002C4 9EF2 00587 bcf INTCON, 7 ; Disable interrupts
0002C6 D824 00588 rcall STOP_TIMER
0002C8 D827 00589 rcall STOP_ADC
0002CA DF3D 00590 rcall ATA_Block_Write ; Flush buffer to disk
0002CC 00591 LOG_UPDATE
0002CC CFD9 F00E 00592 movff FSR2L, END_POSL ; Copy over to end log pointers
0002D0 CFDA F00F 00593 movff FSR2H, END_POSH
0002D4 C002 F010 00594 movff ATA_A0, END_ATA_A0
0002D8 C003 F011 00595 movff ATA_A1, END_ATA_A1
0002DC C004 F012 00596 movff ATA_A2, END_ATA_A2
0002E0 C005 F013 00597 movff ATA_A3, END_ATA_A3
0002E4 0012 00598 return
00599
00600 ;====================================================================
00601 ; Reset log ready for start of logging
00602 ;--------------------------------------------------------------------
0002E6 00603 LOG_RESET
Message[314]: LFSR instruction is not supported on some versions of the 18Cxx2 devices.
Message[315]: Please refer to Microchip document DS80058A for more details.
0002E6 EE24 F000 00604 lfsr FSR2, ATA_BUF ; Point to start of data capture buffer
0002EA DF4A 00605 rcall ATA_A_RESET
0002EC 0012 00606 return
00607
00608 ;====================================================================
00609 ; Initialise ADC converter
00610 ;--------------------------------------------------------------------
0002EE 00611 INIT_ADC
0002EE 0E0E 00612 movlw B'00001110'
0002F0 6EC1 00613 movwf ADCON1
0002F2 0EC1 00614 movlw B'11000001'
0002F4 6EC2 00615 movwf ADCON0
0002F6 9C9F 00616 bcf IPR1, ADIP ; Low priority
0002F8 9C9E 00617 bcf PIR1, ADIF ; Clear any pending interrupt
0002FA 8C9D 00618 bsf PIE1, ADIE ; Enable ADC conversion interrupt
00619
0002FC 0012 00620 return
00621
00622 ;====================================================================
00623 ; Initialise timer 0
00624 ;--------------------------------------------------------------------
MPASM 03.00 Released DATALOG.ASM 3-29-2004 12:59:54 PAGE 13
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0002FE 00625 INIT_TIMER
0002FE 0E46 00626 movlw B'01000110'
000300 6ED5 00627 movwf T0CON
000302 0E01 00628 movlw D'1' ; Setup countdown on TMR0 for ADC trigger
000304 6E0D 00629 movwf T0COUNT
000306 94F2 00630 bcf INTCON, TMR0IF ; Clear any pending TMR0 overflow interrupt
000308 8AF2 00631 bsf INTCON, TMR0IE ; Enable timer 0 overflow interrupt
00030A 0012 00632 return
00633
00634 ;====================================================================
00635 ; Start timer 0
00636 ;--------------------------------------------------------------------
00030C 00637 START_TIMER
00030C 8ED5 00638 bsf T0CON, 7 ; Start timer 0
00030E 0012 00639 return
00640
00641 ;====================================================================
00642 ; Stop timer 0
00643 ;--------------------------------------------------------------------
000310 00644 STOP_TIMER
000310 9AF2 00645 bcf INTCON, TMR0IE ; Disable timer 0 overflow interrupt
000312 94F2 00646 bcf INTCON, TMR0IF ; Clear any pending TMR0 overflow interrupt
000314 9ED5 00647 bcf T0CON, 7 ; Stop timer 0
000316 0012 00648 return
00649
00650 ;====================================================================
00651 ; Stop ADC conversion
00652 ;--------------------------------------------------------------------
000318 00653 STOP_ADC
000318 9C9D 00654 bcf PIE1, ADIE ; Diasable ADC conversion interrupt
00031A 9C9E 00655 bcf PIR1, ADIF ; Clear any pending interrupt
00031C 90C2 00656 bcf ADCON0, ADON ; Turn off ADC module
00031E 0012 00657 return
00658
00659 ;====================================================================
00660 ; Dump data from ATA to USART in hex
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -