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

📄 davinci_evm.lst

📁 msp430板子红外驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
     88          void getIRVal(void);
     89          void getInputState(void);
     90          void getEvent(void);
     91          void setOutputState(void);
     92          
     93          
     94          
     95          
     96          //
     97          // Interrupt Service Routines (ISRs)
     98          //
     99          __interrupt void timerA0_ISR(void);
    100          __interrupt void timerA_ISR(void);
    101          __interrupt void wdt_ISR(void);
    102          __interrupt void usart0_Rx_ISR(void);
    103          
    104          
    105          //
    106          // Global Variables
    107          //

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    108          unsigned char Event = 0;
   \                     Event:
   \   000000                DS8 1

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    109          unsigned char EventFlag = 0;
   \                     EventFlag:
   \   000000                DS8 1

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    110          unsigned int Error = 0;
   \                     Error:
   \   000000                DS8 2

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    111          unsigned char IRBit = 0;
   \                     IRBit:
   \   000000                DS8 1

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    112          unsigned int IRData = 0;
   \                     IRData:
   \   000000                DS8 2
    113          

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    114          unsigned int MaxCnt = 0;
   \                     MaxCnt:
   \   000000                DS8 2

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    115          unsigned char prevP2State;
   \                     prevP2State:
   \   000000                DS8 1

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    116          unsigned char prevP3State;
   \                     prevP3State:
   \   000000                DS8 1
    117          

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    118          unsigned char irReadIndex = 0;
   \                     irReadIndex:
   \   000000                DS8 1

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    119          unsigned char irWriteIndex = 0;
   \                     irWriteIndex:
   \   000000                DS8 1

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    120          unsigned int IRBuff[IRBUFFLEN];
   \                     IRBuff:
   \   000000                DS8 64
    121          

   \                                 In segment DATA16_Z, align 1, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
    122          unsigned char i2cIndex = 0;
   \                     i2cIndex:
   \   000000                DS8 1
    123          
    124          typedef void (*I2CMSG)(void);
    125          
    126          
    127          //
    128          // I2C Message Function Table
    129          //

   \                                 In segment DATA16_I, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_copy
    130          I2CMSG i2cMsgTbl[] =
   \                     i2cMsgTbl:
   \   000000                DS8 14
   \   00000E                REQUIRE `?<Initializer for i2cMsgTbl>`
    131          {
    132            setRTC,                                   // I2C msg ID is SET_RTC_PARAMS
    133            getRTC,                                   // I2C msg ID is GET_RTC_PARAMS
    134            getIRData,                                // I2C msg ID is SEND_IR_DATA
    135            getIRVal,                                 // I2C msg ID is GET_LAST_IR_VALUE
    136            getInputState,                            // I2C msg ID is GET_INPUT_STATE
    137            getEvent,                                 // I2C msg ID is GET_EVENT
    138            setOutputState                            // I2C msg ID is SET_OUTPUT_STATE
    139          };
    140          
    141          
    142          //
    143          //  Low-level system initialization - called prior to main()
    144          //

   \                                 In segment CODE, align 2, root
    145          int __low_level_init(void)
   \                     __low_level_init:
   \   000000                REQUIRE ?cstart_call_low_level_init
    146          {
    147            WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
   \   000000   B240805A2001 MOV.W   #0x5a80, &0x120
    148            return (1);                               // Force initialization of RAM
   \   000006   1C43         MOV.W   #0x1, R12
   \   000008   3041         RET
    149            //  return (0);                           // Skip initialization of RAM
    150          }
    151          
    152          
    153          //
    154          // Set DCO frequency (calibrated from external 32kHz watch crystal)
    155          //

   \                                 In segment CODE, align 2
    156          void setDCO(void)
   \                     setDCO:
    157          {
    158            unsigned char orig;
    159            unsigned int clkCnt;
    160            unsigned int prevCnt = 0;
   \   000000   0D43         MOV.W   #0x0, R13
    161          
    162          //  DCO_STATUS_LED;                           // Set status LED pin as output
    163          
    164            BCSCTL2 |= DCO_ROSC;                      // Set DCOR bit if using Rosc
   \   000002   D2D35800     BIS.B   #0x1, &0x58
    165          
    166            orig = BCSCTL1 & ~DCO_RSEL_MASK;          // Save, clear RSEL bits
   \   000006   5C425700     MOV.B   &0x57, R12
   \   00000A   7CF0F800     AND.B   #0xf8, R12
   \   00000E   4E4C         MOV.B   R12, R14
    167          
    168            BCSCTL1 |= DIVA_3;                        // ACLK = LFXT1CLK/8 = 4096 Hz
   \   000010   F2D030005700 BIS.B   #0x30, &0x57
    169          
    170            // Timer A Control Register
    171            TACTL = TASSEL_2 + MC_2 + TACLR;          // Clk src is SMCLK
   \   000016   B24024026001 MOV.W   #0x224, &0x160
    172                                                      // Input clock divider is 1
    173                                                      // Continuous mode
    174                                                      // Reset
    175                                                      // Interrupt is disabled
    176                                                      // Clear interrupt flag (TAIFG)
    177          
    178            // Timer_A Capture/Compare Control Register
    179            TACCTL2 = CM_1 + CCIS_1 + CAP;            // Capture on rising Edge
   \   00001C   B24000516601 MOV.W   #0x5100, &0x166
    180                                                      // Capture input is CCI2B = ACLK
    181                                                      // Async capture
    182                                                      // Capture mode
    183                                                      // Output mode is OUT bit
    184                                                      // Interrupt disabled
    185                                                      // OUT bit is 0
    186                                                      // Clear capture overflow bit (COV)
    187                                                      // Clear interrupt flag (CCIFG)
    188          
    189          
    190            while(1)
    191            {
    192              while( !(TACCTL2 & CCIFG) );            // Wait for capture event
   \                     ??setDCO_0:
   \   000022   92B36601     BIT.W   #0x1, &0x166
   \   000026   FD2B         JNC     ??setDCO_0
    193          
    194              TACCTL2 &= ~CCIFG;                      // Capture occured, clear flag
   \   000028   92C36601     BIC.W   #0x1, &0x166
    195          
    196              clkCnt = TACCR2 - prevCnt;              // Num of clks since last capture
   \   00002C   1C427601     MOV.W   &0x176, R12
   \   000030   0C8D         SUB.W   R13, R12
   \   000032   0F4C         MOV.W   R12, R15
    197          
    198              prevCnt = TACCR2;                       // Save current clock count
   \   000034   1D427601     MOV.W   &0x176, R13
    199          
    200              // Check to see if number of DCO clocks is within range
    201              if( (clkCnt <= (DCO_CLKS + DCO_TOL)) && (clkCnt >= (DCO_CLKS - DCO_TOL)) )
   \   000038   3F900607     CMP.W   #0x706, R15
   \   00003C   032C         JC      ??setDCO_1
   \   00003E   3F900307     CMP.W   #0x703, R15
   \   000042   292C         JC      ??setDCO_2
    202              {
    203                DCO_LOCKED;                           // Illuminate DCO status LED
    204                break;
    205              }
    206              else if( clkCnt > DCO_CLKS )            // DCO is too fast, slow it down
   \                     ??setDCO_1:
   \   000044   3F900507     CMP.W   #0x705, R15
   \   000048   0F28         JNC     ??setDCO_3
    207              {
    208                DCOCTL--;
   \   00004A   F2535600     ADD.B   #0xff, &0x56
    209          
    210                if( DCOCTL == 0xFF )
   \   00004E   F2935600     CMP.B   #0xff, &0x56
   \   000052   1C20         JNE     ??setDCO_4
    211                {
    212                  if( BCSCTL1 & DCO_RSEL_MASK )
   \   000054   F2B007005700 BIT.B   #0x7, &0x57
   \   00005A   0324         JEQ     ??setDCO_5
    213                  {
    214                    BCSCTL1--;                        // DCO role under?, dec RSEL
   \   00005C   F2535700     ADD.B   #0xff, &0x57
   \   000060   153C         JMP     ??setDCO_4
    215                  }
    216                  else
    217                  {
    218                    Error |= ERROR_DCO_MIN;
   \                     ??setDCO_5:
   \   000062   92D3....     BIS.W   #0x1, &Error
    219                    break;                            // Error condition, break loop
   \   000066   173C         JMP     ??setDCO_2
    220                  }
    221                }
    222              }
    223              else                                    // DCO is too slow, speed it up
    224              {
    225                DCOCTL++;
   \                     ??setDCO_3:
   \   000068   D2535600     ADD.B   #0x1, &0x56
    226          
    227                if( DCOCTL == 0x00 )
   \   00006C   C2935600     CMP.B   #0x0, &0x56
   \   000070   0D20         JNE     ??setDCO_4
    228                {
    229                  if( (BCSCTL1 & DCO_RSEL_MASK) != DCO_RSEL_MASK )
   \   000072   5C425700     MOV.B   &0x57, R12
   \   000076   7CF00700     AND.B   #0x7, R12
   \   00007A   7C900700     CMP.B   #0x7, R12
   \   00007E   0324         JEQ     ??setDCO_6
    230                  {
    231                    BCSCTL1++;                        // DCO role over? Inc RSEL
   \   000080   D2535700     ADD.B   #0x1, &0x57
   \   000084   033C         JMP     ??setDCO_4
    232                  }
    233                  else
    234                  {
    235                    Error |= ERROR_DCO_MAX;
   \                     ??setDCO_6:
   \   000086   A2D3....     BIS.W   #0x2, &Error
    236                    break;                            // Error condition, break loop
   \   00008A   053C         JMP     ??setDCO_2
    237                  }
    238                }
    239              }
    240          
    241              if( TACCTL2 & COV )                     // Check for timer overflow
   \                     ??setDCO_4:
   \   00008C   A2B36601     BIT.W   #0x2, &0x166
   \   000090   C82B         JNC     ??setDCO_0
    242              {
    243                Error |= ERROR_DCO_OV;
   \   000092   A2D2....     BIS.W   #0x4, &Error
    244                break;
    245              }
    246            }
    247          

⌨️ 快捷键说明

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