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

📄 i2c_master.lst

📁 msp430板子红外驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
    297                iicSend(I2C_ADDR, 0, 1);              // I2C read
    298                txStr("\r\nInterrupt Event:");
    299                for(x = 1; x < RX_DATA[0]; x++)
    300                {
    301                  txStr(" ");
    302                  txByte(RX_DATA[x]);
    303                }
    304          
    305                if( RX_DATA[2] & EVENT_STATE_CHG )
    306                {
    307                  txStr("\r\nInt - Get Input Pin State");
    308                  getInputState();
    309                  iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    310                  iicSend(I2C_ADDR, 0, 1);              // I2C read
    311                  txStr("\r\nPin State:");
    312                  for(x = 1; x < RX_DATA[0]; x++)
    313                  {
    314                    txStr(" ");
    315                    txByte(RX_DATA[x]);
    316                  }
    317                }
    318          
    319                if( RX_DATA[2] & EVENT_IR_DATA )
    320                {
    321                  txStr("\r\nInt - Get IR Data");
    322                  getIRData();
    323                  iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    324                  iicSend(I2C_ADDR, 0, 1);              // I2C read
    325                  txStr("\r\nIR Data:");
    326                  for(x = 1; x < RX_DATA[0]; x++)
    327                  {
    328                    txStr(" ");
    329                    txByte(RX_DATA[x]);
    330                  }
    331                }
    332              }
    333            }
    334          }
    335          
    336          
    337          //
    338          // USART0 I2C Interrupt Service Routine
    339          //
    340          #pragma vector=USART0TX_VECTOR
    341          __interrupt void I2C_IV (void)
    342          {
    343            switch( I2CIV )
    344            {
    345            case 0x02: break;                         // ALIFG: n/a
    346            case 0x04:                                // NACKIFG: n/a
    347              break;
    348            case 0x06: break;                         // OAIFG: n/a
    349            case 0x08: break;                         // ARDYIFG: n/a
    350            case 0x0A:
    351              RX_DATA[rxIdx++] = I2CDRB;
    352          
    353              if( rxIdx == 1 )                        // RXRDYIFG
    354              {
    355                rxMsgLen = RX_DATA[0]-1;              // Save message length
    356              }
    357          
    358              if( --rxMsgLen == 0 )
    359              {
    360                I2CTCTL |= I2CSTP;
    361              }
    362          
    363              break;
    364            case 0x0C:                                // TXRDYIFG
    365              I2CDRB = TX_DATA[txIdx++];
    366              break;
    367            case 0x0E: break;                         // GCIFG: n/a
    368            case 0x10: break;                         // STTIFG: n/a
    369            }
    370          }
    371          
    372          
    373          //
    374          // PORT 1 Interrupt Service Routine
    375          //
    376          #pragma vector=PORT1_VECTOR
    377          __interrupt void port1_ISR (void)
    378          {
    379            // P1.4
    380            if( P1IFG & 0x10 )
    381            {
    382              P1IE  &= ~0x10;                         // Disable interrupt
    383              P1IFG &= ~0x10;                         // Clear interrupt flag
    384              debounceCnt[0] = DEBOUNCE_CNT;
    385              IE1 |= WDTIE;                           // Enable WDT interrupt
    386            }
    387          
    388            // P1.5
    389            if( P1IFG & 0x20 )
    390            {
    391              P1IE  &= ~0x20;                         // Disable interrupt
    392              P1IFG &= ~0x20;                         // Clear interrupt flag
    393              debounceCnt[1] = DEBOUNCE_CNT;
    394              IE1 |= WDTIE;                           // Enable WDT interrupt
    395            }
    396          }
    397          
    398          
    399          //
    400          // PORT 2 Interrupt Service Routine
    401          //
    402          #pragma vector=PORT2_VECTOR
    403          __interrupt void port2_ISR (void)
    404          {
    405            // P2.0
    406            if( P2IFG & 0x01 )
    407            {
    408              P2IE  &= ~0x01;                         // Disable interrupt
    409              P2IFG &= ~0x01;                         // Clear interrupt flag
    410              Event |= EVENT_INT;                     // Set event flag
    411              LPM0_EXIT;                              // Exit LPM0
    412            }
    413          }
    414          
    415          
    416          
    417          //
    418          // Watchdog Timer (WDT) Interrupt Service Routine
    419          //
    420          #pragma vector=WDT_VECTOR
    421          __interrupt void wdt_ISR(void)
    422          {
    423            unsigned char contFlag = 0;
    424          
    425            if( debounceCnt[0] > 0 )
    426            {
    427              if( --debounceCnt[0] == 0 )
    428              {
    429                P1IFG &= ~0x10;                       // Clear interrupt flag
    430                P1IE  |=  0x10;                       // Enable interrupt
    431                Event |= EVENT_SW1;                   // Set event flag
    432                LPM0_EXIT;                            // Exit LPM0
    433              }
    434              else
    435              {
    436                contFlag = 1;                         // Set continue WDT flag
    437              }
    438            }
    439          
    440            if( debounceCnt[1] > 0 )
    441            {
    442              if( --debounceCnt[1] == 0 )
    443              {
    444                P1IFG &= ~0x20;                       // Clear interrupt flag
    445                P1IE  |=  0x20;                       // Enable interrupt
    446                Event |= EVENT_SW2;                   // Set event flag
    447                LPM0_EXIT;                            // Exit LPM0
    448              }
    449              else
    450              {
    451                contFlag = 1;                         // Set continue WDT flag
    452              }
    453            }
    454          
    455            if( !contFlag )
    456            {
    457              IE1 &= ~WDTIE;                          // Disable WDT interrupt
    458            }
    459          }
    460          
    461          
    462          //
    463          // SW1 Options
    464          //
    465          void sw1Options(void)
    466          {
    467            unsigned char option;
    468          
    469            option = (P4IN >> 4);                     // Read value on pins P4.7,6,5,4
    470          
    471            switch( option )
    472            {
    473              case 0x00:
    474                break;
    475              case 0x01:
    476                break;
    477              case 0x02:
    478                break;
    479              case 0x03:
    480                break;
    481              case 0x04:
    482                break;
    483              case 0x05:
    484                break;
    485              case 0x06:
    486                break;
    487              case 0x07:
    488                break;
    489              case 0x08:
    490                break;
    491              case 0x09:
    492                break;
    493              case 0x0A:
    494                break;
    495              case 0x0B:
    496                break;
    497              case 0x0C:
    498                break;
    499              case 0x0D:
    500                break;
    501              case 0x0E:
    502                break;
    503              case 0x0F:
    504                break;
    505            };
    506          }
    507          
    508          
    509          //
    510          // SW2 Options
    511          //
    512          void sw2Options(void)
    513          {
    514            unsigned char x;
    515            unsigned char option;
    516          
    517            option = (P4IN >> 4);                     // Read value on pins P4.7,6,5,4
    518          
    519            switch( option )
    520            {
    521              case 0x00:                              // Get RTC params
    522                txStr("\r\nGet RTC Parameters");
    523                getRTC();
    524                iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    525                iicSend(I2C_ADDR, 0, 1);              // I2C read
    526                txStr("\r\nRTC Parameters:");
    527                for(x = 1; x < RX_DATA[0]; x++)
    528                {
    529                  txStr(" ");
    530                  txByte(RX_DATA[x]);
    531                }
    532                break;
    533              case 0x01:
    534                txStr("\r\nSet RTC Parameters");
    535                setRTC();
    536                iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    537                txStr("...done.");
    538                break;
    539              case 0x02:
    540                txStr("\r\nGet IR Data");
    541                getIRData();
    542                iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    543                iicSend(I2C_ADDR, 0, 1);              // I2C read
    544                txStr("\r\nIR Data:");
    545                for(x = 1; x < RX_DATA[0]; x++)
    546                {
    547                  txStr(" ");
    548                  txByte(RX_DATA[x]);
    549                }
    550                break;
    551              case 0x03:
    552                txStr("\r\nGet Last IR Value");
    553                getIRVal();
    554                iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    555                iicSend(I2C_ADDR, 0, 1);              // I2C read
    556                txStr("\r\nIR Data:");
    557                for(x = 1; x < RX_DATA[0]; x++)
    558                {
    559                  txStr(" ");
    560                  txByte(RX_DATA[x]);
    561                }
    562                break;
    563              case 0x04:
    564                txStr("\r\nGet Port Pin State");
    565                getInputState();
    566                iicSend(I2C_ADDR, TX_DATA[0], 0);     // I2C write
    567                iicSend(I2C_ADDR, 0, 1);              // I2C read
    568                txStr("\r\nPort Pin:");
    569                for(x = 1; x < RX_DATA[0]; x++)
    570                {
    571                  txStr(" ");
    572                  txByte(RX_DATA[x]);
    573                }
    574                break;
    575              case 0x05:
    576                break;
    577              case 0x06:
    578                break;
    579              case 0x07:
    580                break;
    581              case 0x08:
    582                break;
    583              case 0x09:
    584                break;
    585              case 0x0A:
    586                break;
    587              case 0x0B:
    588                break;
    589              case 0x0C:
    590                break;
    591              case 0x0D:
    592                break;
    593              case 0x0E:
    594                break;
    595              case 0x0F:
    596                break;
    597            };
    598          }
    599          
    600          
    601          //
    602          // UART1 RX Interrupt Service Routine
    603          //
    604          #pragma vector=UART1RX_VECTOR
    605          __interrupt void usart1_Rx_ISR(void)
    606          {
    607            while( !(IFG2 & UTXIFG1) ){}              // Is USART1 TX buffer ready?
    608            TXBUF1 = RXBUF1 + 1;                      // Increment RXBUF1, copy to TXBUF1
    609          }
    610          
    611          
    612          //
    613          // UART Function - transmit null-terminated string
    614          //
    615          void txStr(const char* pStr)
    616          {
    617            unsigned int cnt = 0;
    618          
    619            for(; *pStr; ++pStr)
    620            {
    621              while (!(IFG2 & UTXIFG1))               // USART1 TX buffer ready?
    622              {
    623                if( ++cnt == UART_TX_RETRY )
    624                {

⌨️ 快捷键说明

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