📄 davinci_evm.lst
字号:
\ 000012 7FF00F00 AND.B #0xf, R15
\ 000016 C14F0100 MOV.B R15, 0x1(SP)
425 str[2] = 0;
\ 00001A C1430200 MOV.B #0x0, 0x2(SP)
426
427 for(x = 0; x < 2; x++)
\ 00001E 4D43 MOV.B #0x0, R13
\ ??txByte_0:
\ 000020 6D93 CMP.B #0x2, R13
\ 000022 192C JC ??txByte_1
428 {
429 if( str[x] > 9 )
\ 000024 4F4D MOV.B R13, R15
\ 000026 3FF0FF00 AND.W #0xff, R15
\ 00002A 0F51 ADD.W SP, R15
\ 00002C FF900A000000 CMP.B #0xa, 0x0(R15)
\ 000032 0828 JNC ??txByte_2
430 {
431 str[x] += 0x37;
\ 000034 4F4D MOV.B R13, R15
\ 000036 3FF0FF00 AND.W #0xff, R15
\ 00003A 0F51 ADD.W SP, R15
\ 00003C FF5037000000 ADD.B #0x37, 0x0(R15)
\ 000042 073C JMP ??txByte_3
432 }
433 else
434 {
435 str[x] += 0x30;
\ ??txByte_2:
\ 000044 4F4D MOV.B R13, R15
\ 000046 3FF0FF00 AND.W #0xff, R15
\ 00004A 0F51 ADD.W SP, R15
\ 00004C FF5030000000 ADD.B #0x30, 0x0(R15)
436 }
437 }
\ ??txByte_3:
\ 000052 5D53 ADD.B #0x1, R13
\ 000054 E53F JMP ??txByte_0
438
439 txStr(str);
\ ??txByte_1:
\ 000056 0C41 MOV.W SP, R12
\ 000058 B012.... CALL #txStr
440 }
\ 00005C 2152 ADD.W #0x4, SP
\ 00005E 3041 RET
441
442
443 //
444 // UART Function - transmit word data as ASCII characters
445 //
\ In segment CODE, align 2
446 void txWord(unsigned int word)
\ txWord:
447 {
\ 000000 0A12 PUSH.W R10
\ 000002 0A4C MOV.W R12, R10
448 txByte(word >> 8);
\ 000004 0C4A MOV.W R10, R12
\ 000006 8C10 SWPB R12
\ 000008 3CF0FF00 AND.W #0xff, R12
\ 00000C B012.... CALL #txByte
449 txByte(word & 0x00ff);
\ 000010 4C4A MOV.B R10, R12
\ 000012 B012.... CALL #txByte
450 }
\ 000016 3A41 POP.W R10
\ 000018 3041 RET
451
452 #endif /* FET_UART_DEBUG */
453
454
455 //
456 // Main Program Loop
457 //
\ In segment CODE, align 2
458 void main(void)
\ main:
459 {
\ 000000 0A12 PUSH.W R10
\ 000002 0B12 PUSH.W R11
\ 000004 0812 PUSH.W R8
460 unsigned char P2State;
461 unsigned char P3State;
462 unsigned char stateChange;
463
464 // Initialize System
465 sysInit();
\ 000006 B012.... CALL #sysInit
466
467 #ifdef FET_UART_DEBUG
468 txStr("\x1b[2JDaVinci ");
\ 00000A 3C40.... MOV.W #`?<Constant "\\033[2JDaVinci ">`, R12
\ 00000E B012.... CALL #txStr
469 #endif
470
471 prevP2State = (P2IN & P2_MASK); // Get current P2 state
\ 000012 5E422800 MOV.B &0x28, R14
\ 000016 7EF01E00 AND.B #0x1e, R14
\ 00001A C24E.... MOV.B R14, &prevP2State
472 prevP3State = (P3IN & P3_MASK); // Get current P3 state
\ 00001E 5E421800 MOV.B &0x18, R14
\ 000022 7EF0C600 AND.B #0xc6, R14
\ 000026 C24E.... MOV.B R14, &prevP3State
473
474 // Main Program Loop
475 for(;;)
476 {
477 if( !Event )
\ ??main_0:
\ 00002A C293.... CMP.B #0x0, &Event
\ 00002E 0320 JNE ??main_1
478 {
479 // Enter low-power mode 0 with interrupts enabled
480 _BIS_SR(LPM0_bits + GIE);
\ 000030 32D01800 BIS.W #0x18, SR
481
482 _NOP();
\ 000034 0343 NOP
483 }
484
485 if( Event & EVENT_TIMEOUT ) // Check for timeout event
\ ??main_1:
\ 000036 D2B3.... BIT.B #0x1, &Event
\ 00003A 0E28 JNC ??main_2
486 {
487 Event &= ~EVENT_TIMEOUT; // Clear event flag
\ 00003C D2C3.... BIC.B #0x1, &Event
488
489 // MW P1OUT &= ~0x02; // Set P1.1 to low
490 P1OUT |= 0x02; // Set P1.1 high (deassert DaVinci interrupt)
\ 000040 E2D32100 BIS.B #0x2, &0x21
491 i2cIndex = 0; // Reset buffer index
\ 000044 C243.... MOV.B #0x0, &i2cIndex
492 resetSWI2C(); // Reset I2C
\ 000048 B012.... CALL #resetSWI2C
493 resetIR(); // Reset IR
\ 00004C B012.... CALL #resetIR
494 IE2 |= URXIE0; // Enable USART0 RX interrupt
\ 000050 D2D30100 BIS.B #0x1, &0x1
495 IE1 |= WDTIE; // Enable WDT interrupt
\ 000054 D2D30000 BIS.B #0x1, &0x0
496 }
497
498 if( Event & EVENT_RTC ) // Check for RTC event
\ ??main_2:
\ 000058 F2B2.... BIT.B #0x8, &Event
\ 00005C 0428 JNC ??main_3
499 {
500 Event &= ~EVENT_RTC; // Clear event flag
\ 00005E F2C2.... BIC.B #0x8, &Event
501 incrementSeconds(); // Increment seconds
\ 000062 B012.... CALL #incrementSeconds
502 }
503
504 if( Event & EVENT_CHK_PINS ) // Check I/O pin state event
\ ??main_3:
\ 000066 E2B2.... BIT.B #0x4, &Event
\ 00006A 2528 JNC ??main_4
505 {
506 Event &= ~EVENT_CHK_PINS; // Clear event flag
\ 00006C E2C2.... BIC.B #0x4, &Event
507 stateChange = 0; // Clear flag
\ 000070 4B43 MOV.B #0x0, R11
508
509 P2State = (P2IN & P2_MASK); // Read P2
\ 000072 5E422800 MOV.B &0x28, R14
\ 000076 7EF01E00 AND.B #0x1e, R14
\ 00007A 4A4E MOV.B R14, R10
510 P3State = (P3IN & P3_MASK); // Read P3
\ 00007C 5E421800 MOV.B &0x18, R14
\ 000080 7EF0C600 AND.B #0xc6, R14
\ 000084 484E MOV.B R14, R8
511
512 if( P2State != prevP2State ) // Check for P2 input state change
\ 000086 5A92.... CMP.B &prevP2State, R10
\ 00008A 0124 JEQ ??main_5
513 {
514 stateChange = 1; // Set state change flag
\ 00008C 5B43 MOV.B #0x1, R11
515 }
516
517 if( P3State != prevP3State ) // Check for P3 input state change
\ ??main_5:
\ 00008E 5892.... CMP.B &prevP3State, R8
\ 000092 0124 JEQ ??main_6
518 {
519 stateChange = 1; // Set state change flag
\ 000094 5B43 MOV.B #0x1, R11
520 }
521
522 prevP2State = (P2State & P2_MASK); // Save current P2 input state
\ ??main_6:
\ 000096 4E4A MOV.B R10, R14
\ 000098 7EF01E00 AND.B #0x1e, R14
\ 00009C C24E.... MOV.B R14, &prevP2State
523 prevP3State = (P3State & P3_MASK); // Save current P3 input state
\ 0000A0 4E48 MOV.B R8, R14
\ 0000A2 7EF0C600 AND.B #0xc6, R14
\ 0000A6 C24E.... MOV.B R14, &prevP3State
524
525 if( stateChange )
\ 0000AA 4B93 CMP.B #0x0, R11
\ 0000AC 0424 JEQ ??main_4
526 {
527 EventFlag = EVENT_STATE_CHG; // Set event flag
\ 0000AE D243.... MOV.B #0x1, &EventFlag
528 interruptMaster(); // Interrupt master I2C device
\ 0000B2 B012.... CALL #interruptMaster
529 }
530 }
531
532 if( Event & EVENT_IR ) // Check for IR event flag
\ ??main_4:
\ 0000B6 E2B3.... BIT.B #0x2, &Event
\ 0000BA B72B JNC ??main_0
533 {
534 Event &= ~EVENT_IR; // Clear event flag
\ 0000BC E2C3.... BIC.B #0x2, &Event
535
536 #ifdef IR_LED_DEBUG
537 P2OUT ^= 0x18; // Toggle LEDs
538 #endif
539
540 #ifdef FET_UART_DEBUG
541 txStr("\r\n");
\ 0000C0 3C40.... MOV.W #`?<Constant "\\r\\n">`, R12
\ 0000C4 B012.... CALL #txStr
542 txStr("Raw: 0x");
\ 0000C8 3C40.... MOV.W #`?<Constant "Raw: 0x">`, R12
\ 0000CC B012.... CALL #txStr
543 txWord(IRData & 0x3FFF);
\ 0000D0 1C42.... MOV.W &IRData, R12
\ 0000D4 3CF0FF3F AND.W #0x3fff, R12
\ 0000D8 B012.... CALL #txWord
544 txStr(", Addr: 0x");
\ 0000DC 3C40.... MOV.W #`?<Constant ", Addr: 0x">`, R12
\ 0000E0 B012.... CALL #txStr
545 txWord((IRData & 0x07C0) >> 6);
\ 0000E4 1C42.... MOV.W &IRData, R12
\ 0000E8 3CF0C007 AND.W #0x7c0, R12
\ 0000EC B012.... CALL #?ShiftRight16u_6
\ 0000F0 B012.... CALL #txWord
546 txStr(", Data: 0x");
\ 0000F4 3C40.... MOV.W #`?<Constant ", Data: 0x">`, R12
\ 0000F8 B012.... CALL #txStr
547 txWord(IRData & 0x003F);
\ 0000FC 1C42.... MOV.W &IRData, R12
\ 000100 3CF03F00 AND.W #0x3f, R12
\ 000104 B012.... CALL #txWord
548 #endif MW /* FET_UART_DEBUG */
549
550 i2cIndex = 0; // Reset buffer index
\ 000108 C243.... MOV.B #0x0, &i2cIndex
551 resetSWI2C(); // Reset I2C
\ 00010C B012.... CALL #resetSWI2C
552 EventFlag = EVENT_IR_DATA; // Set event flag
\ 000110 E243.... MOV.B #0x2, &EventFlag
553 interruptMaster(); // Interrupt master I2C device
\ 000114 B012.... CALL #interruptMaster
\ 000118 883F JMP ??main_0
554 }
555 }
556 }
557
558
559 //
560 // UART0 RX Interrupt Service Routine
561 //
562 #pragma vector=UART0RX_VECTOR
\ In segment CODE, align 2
563 __interrupt void usart0_Rx_ISR(void)
\ usart0_Rx_ISR:
564 {
\ 000000 0E12 PUSH.W R14
565 while( !(IFG2 & UTXIFG0) ){} // Is USART0 TX buffer ready?
\ ??usart0_Rx_ISR_0:
\ 000002 E2B30300 BIT.B #0x2, &0x3
\ 000006 FD2B JNC ??usart0_Rx_ISR_0
566 TXBUF0 = RXBUF0 + 1; // Increment RXBUF0, copy to TXBUF0
\ 000008 5E427600 MOV.B &0x76, R14
\ 00000C 5E53 ADD.B #0x1, R14
\ 00000E C24E7700 MOV.B R14, &0x77
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -