⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 davinci_evm.lst

📁 msp430板子红外驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
    567          }
   \   000012   3E41         POP.W   R14
   \   000014   0013         RETI
    568          
    569          
    570          //
    571          // Watchdog Timer (WDT) Interrupt Service Routine
    572          //
    573          //   Interrupts once every 250 msec
    574          //
    575          #pragma vector=WDT_VECTOR

   \                                 In segment CODE, align 2
    576          __interrupt void wdt_ISR(void)
   \                     wdt_ISR:
    577          {
   \   000000   0F12         PUSH.W  R15
   \   000002   0E12         PUSH.W  R14
    578            static unsigned char cnt;
    579          
    580            if( (cnt++ & 0x3) == 0 )
   \   000004   5E42....     MOV.B   &??cnt, R14
   \   000008   4F4E         MOV.B   R14, R15
   \   00000A   5F53         ADD.B   #0x1, R15
   \   00000C   C24F....     MOV.B   R15, &??cnt
   \   000010   7EB00300     BIT.B   #0x3, R14
   \   000014   0220         JNE     ??wdt_ISR_0
    581            {
    582              Event |= EVENT_RTC;                     // Set RTC event flag
   \   000016   F2D2....     BIS.B   #0x8, &Event
    583            }
    584          
    585            Event |= EVENT_CHK_PINS;                  // Set check pins event
   \                     ??wdt_ISR_0:
   \   00001A   E2D2....     BIS.B   #0x4, &Event
    586          
    587            LPM0_EXIT;                                // Exit LPM0
   \   00001E   B1C010000400 BIC.W   #0x10, 0x4(SP)
    588          }
   \   000024   3E41         POP.W   R14
   \   000026   3F41         POP.W   R15
   \   000028   0013         RETI

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
   \                     ??cnt:
   \   000000                DS8 1
    589          
    590          
    591          //
    592          // Timer_A0 Interrupt Service Routine
    593          //
    594          #pragma vector=TIMERA0_VECTOR

   \                                 In segment CODE, align 2
    595          __interrupt void timerA0_ISR(void)
   \                     timerA0_ISR:
    596          {
    597            LPM0_EXIT;                                // Exit LPM0
   \   000000   B1C010000000 BIC.W   #0x10, 0x0(SP)
    598          }
   \   000006   0013         RETI
    599          
    600          
    601          //
    602          // Timer_A Interrupt Vector (TAIV) Handler
    603          //
    604          #pragma vector=TIMERA1_VECTOR

   \                                 In segment CODE, align 2
    605          __interrupt void timerA_ISR(void)
   \                     timerA_ISR:
    606          {
   \   000000   0F12         PUSH.W  R15
   \   000002   0E12         PUSH.W  R14
    607            switch( TAIV )
   \   000004   1F422E01     MOV.W   &0x12e, R15
   \   000008   2F83         SUB.W   #0x2, R15
   \   00000A   0324         JEQ     ??timerA_ISR_0
   \   00000C   2F83         SUB.W   #0x2, R15
   \   00000E   4E24         JEQ     ??timerA_ISR_1
   \   000010   563C         JMP     ??timerA_ISR_2
    608            {
    609              case  2:                                // TA1 CCIFG
    610                if( TACCTL1 & CAP )                   // Is TA1 in capture mode?
   \                     ??timerA_ISR_0:
   \   000012   B2B000016401 BIT.W   #0x100, &0x164
   \   000018   1528         JNC     ??timerA_ISR_3
    611                {                                     // Yes, capture mode
    612                  TACCTL2 = 0;                        // Disable TA2
   \   00001A   82436601     MOV.W   #0x0, &0x166
    613                  if( IRBit == 14 )
   \   00001E   F2900E00.... CMP.B   #0xe, &IRBit
   \   000024   0820         JNE     ??timerA_ISR_4
    614                  {
    615                    SDA_IE &= ~SDA_PIN;               // Disable SDA interrupt
   \   000026   D2C32D00     BIC.B   #0x1, &0x2d
    616                    SCL_IE &= ~SCL_PIN;               // Disable SCL interrupt
   \   00002A   D2C32500     BIC.B   #0x1, &0x25
    617                    IE2 = 0;                          // Disable interrupts
   \   00002E   C2430100     MOV.B   #0x0, &0x1
    618                    IE1 = 0;                          // Disable interrupts
   \   000032   C2430000     MOV.B   #0x0, &0x0
    619                  }
    620          
    621                  // Configure TA1 to measure 3/4 IR bit time
    622                  TACCR1 += BIT_75;                   // Add 3/4 IR bit time
   \                     ??timerA_ISR_4:
   \   000036   B2502A007401 ADD.W   #0x2a, &0x174
    623                  TACCTL1 = CCIE;                     // Compare mode, enable interrupt
   \   00003C   B24010006401 MOV.W   #0x10, &0x164
   \   000042   3D3C         JMP     ??timerA_ISR_2
    624                }
    625                else                                  // No, compare mode
    626                {
    627                  if( --IRBit == 0 )                  // Dec IR bit cnt, is 0?
   \                     ??timerA_ISR_3:
   \   000044   5E42....     MOV.B   &IRBit, R14
   \   000048   7E53         ADD.B   #0xff, R14
   \   00004A   C24E....     MOV.B   R14, &IRBit
   \   00004E   4E93         CMP.B   #0x0, R14
   \   000050   1720         JNE     ??timerA_ISR_5
    628                  {                                   // Yes, IR bit cnt = 0
    629                    TACCTL1 = 0;                      // Stop TA1
   \   000052   82436401     MOV.W   #0x0, &0x164
    630                    TACCTL2 = 0;                      // Stop TA2
   \   000056   82436601     MOV.W   #0x0, &0x166
    631                    IRBuff[irWriteIndex++] = IRData;  // Save IR data
   \   00005A   5F42....     MOV.B   &irWriteIndex, R15
   \   00005E   3FF0FF00     AND.W   #0xff, R15
   \   000062   0F5F         RLA.W   R15
   \   000064   9F42........ MOV.W   &IRData, IRBuff(R15)
   \   00006A   D253....     ADD.B   #0x1, &irWriteIndex
    632                    irWriteIndex &= (IRBUFFLEN-1);    // Reset index
   \   00006E   F2F01F00.... AND.B   #0x1f, &irWriteIndex
    633                    Event |= EVENT_IR;                // Set IR event flag
   \   000074   E2D3....     BIS.B   #0x2, &Event
    634                    LPM0_EXIT;                        // Exit LPM0
   \   000078   B1C010000400 BIC.W   #0x10, 0x4(SP)
   \   00007E   1F3C         JMP     ??timerA_ISR_2
    635                  }
    636                  else                                // No, IR bit cnt > 0
    637                  {
    638                    IRData <<= 1;                     // Left shift IRData
   \                     ??timerA_ISR_5:
   \   000080   9252........ RLA.W   &IRData
    639          
    640                    if( TACCTL1 & SCCI )              // Is SCCI bit set?
   \   000086   B2B000046401 BIT.W   #0x400, &0x164
   \   00008C   0228         JNC     ??timerA_ISR_6
    641                    {                                 // Yes, SCCI is set
    642                      IRData |= 1;                    // Set LSB to 1
   \   00008E   92D3....     BIS.W   #0x1, &IRData
    643                    }
    644          
    645                    // Set TA2 to generate a timeout if next IR packet edge
    646                    // is NOT captured within 1/2 I/R bit time
    647                    TACCR2 = TACCR1 + BIT_50;         // Add 1/2 IR bit time to TACCR1,
   \                     ??timerA_ISR_6:
   \   000092   1F427401     MOV.W   &0x174, R15
   \   000096   3F501D00     ADD.W   #0x1d, R15
   \   00009A   824F7601     MOV.W   R15, &0x176
    648                                                      // load into TACCR2
    649                    TACCTL2 = CCIE;                   // Compare mode, enable interrupt
   \   00009E   B24010006601 MOV.W   #0x10, &0x166
    650          
    651                    // Configure TA1 to capture IR data packet edge
    652                    TACCTL1 = CAP + CM1 + CM0 + SCS + CCIE;
   \   0000A4   B24010C96401 MOV.W   #0xc910, &0x164
   \   0000AA   093C         JMP     ??timerA_ISR_2
    653                                                      // Capture mode, CCI1A input,
    654                                                      // both edges, synchronous,
    655                                                      // enable interrupt
    656                  }
    657                }
    658                break;
    659          
    660              case  4:                                // TA2 CCIFG
    661                TACCTL1 = 0;                          // Timeout, stop TA1
   \                     ??timerA_ISR_1:
   \   0000AC   82436401     MOV.W   #0x0, &0x164
    662                TACCTL2 = 0;                          // Timeout, stop TA2
   \   0000B0   82436601     MOV.W   #0x0, &0x166
    663                Event |= EVENT_TIMEOUT;               // Set timeout event flag
   \   0000B4   D2D3....     BIS.B   #0x1, &Event
    664          // MW      P3OUT ^= 0x08;                        // DEBUG
    665                LPM0_EXIT;                            // Exit LPM0
   \   0000B8   B1C010000400 BIC.W   #0x10, 0x4(SP)
    666                break;
    667          
    668              case 10:                                // TA IFG
    669                break;
    670            }
    671          }
   \                     ??timerA_ISR_2:
   \   0000BE   3E41         POP.W   R14
   \   0000C0   3F41         POP.W   R15
   \   0000C2   0013         RETI
    672          
    673          
    674          
    675          //
    676          // Read message from I2C Master
    677          //
    678          //   I2C Message Format:
    679          //     Required Byte 1 = Msg Length (includes length and msg ID bytes)
    680          //     Required Byte 2 = Msg Identifier
    681          //     Optional Byte 3 = Data byte 0
    682          //     .
    683          //     .
    684          //     .
    685          //     Optional Byte N = Data byte N-1
    686          //
    687          //     I2C message length = number of data bytes + 2
    688          //
    689          //   +--------+--------+--------+-----+----------+
    690          //   | Length | Msg Id | Data 0 | ... | Data N-1 |
    691          //   +--------+--------+--------+-----+----------+
    692          //

   \                                 In segment CODE, align 2
    693          void i2cReadMsg(unsigned char i2cData)
   \                     i2cReadMsg:
    694          {
   \   000000   0A12         PUSH.W  R10
   \   000002   4A4C         MOV.B   R12, R10
    695            static unsigned char i2cLen;
    696          
    697            I2CRxBuff[i2cIndex++] = i2cData;             // Save I2C data
   \   000004   5F42....     MOV.B   &i2cIndex, R15
   \   000008   3FF0FF00     AND.W   #0xff, R15
   \   00000C   CF4A....     MOV.B   R10, I2CRxBuff(R15)
   \   000010   D253....     ADD.B   #0x1, &i2cIndex
    698          
    699            if( i2cIndex == 1 )
   \   000014   D293....     CMP.B   #0x1, &i2cIndex
   \   000018   0320         JNE     ??i2cReadMsg_0
    700            {
    701              i2cLen = i2cData;                       // First byte contains msg length
   \   00001A   C24A....     MOV.B   R10, &??i2cLen
   \   00001E   0C3C         JMP     ??i2cReadMsg_1
    702            }
    703            else if( i2cLen == i2cIndex )             // Msg length includes Length and
   \                     ??i2cReadMsg_0:
   \   000020   D292........ CMP.B   &i2cIndex, &??i2cLen
   \   000026   0820         JNE     ??i2cReadMsg_1
    704            {                                         // Msg Id bytes along with data
    705              // Process I2C message
    706              (i2cMsgTbl[I2CRxBuff[1]])();
   \   000028   5F42....     MOV.B   &I2CRxBuff + 1, R15
   \   00002C   3FF0FF00     AND.W   #0xff, R15
   \   000030   0F5F         RLA.W   R15
   \   000032   9F12....     CALL    i2cMsgTbl(R15)
    707          
    708              return;
   \   000036   033C         JMP     ??i2cReadMsg_2
    709            }
    710          
    711            i2cIndex &= (I2CMSGLEN-1);                // Prevent buffer overflow
   \                     ??i2cReadMsg_1:
   \   000038   F2F01F00.... AND.B   #0x1f, &i2cIndex
    712          }
   \                     ??i2cReadMsg_2:
   \   00003E   3A41         POP.W   R10
   \   000040   3041         RET

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
   \                     ??i2cLen:
   \   000000                DS8 1
    713          
    714          
    715          //
    716          // Get Real-Time Clock (RTC) Parameters
    717          //

   \                                 In segment CODE, align 2
    718          void getRTC(void)
   \                     getRTC:
    719          {
    720            I2CTxBuff[0] = 9;                         // Set length
   \   000000   F2400900.... MOV.B   #0x9, &I2CTxBuff
    721            I2CTxBuff[1] = GET_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -