亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? davinci_evm.c

?? MSP430和GPS的接口程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*****************************************************************************
//  DaVinci EVM (IR Decode, Software I2C Slave, UART)
//
//  Description:  MSP430 application for the DaVinci EVM board. Reports
//                board status and decoded infra-red (IR) data to the
//                DaVinci DSP. The MSP430 interrupts the DaVinci DSP
//                whenever an event occurs. An I2C bus and a UART provide
//                the communication links between the two processors. The
//                MSP430 operates as a slave device on the I2C bus.
//
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = BRCLK = DCOCLK = 7358000Hz
//  Baud rate divider with 7358000Hz = 7358000/9600 (~766) (0x2FE)
//  //* An external 32kHz watch crystal btw XIN & XOUT is required for ACLK *//
//
//                         MSP430F1232
//        /|\         ---------------------
//         |         |                  XIN|-
//         +- 100k --|P2.5/Rosc            | 32768Hz
//                   |                 XOUT|-
//  3V3_SYS_RESETz-->|RST                  |
//                   |                 P1.0|--> DCO Status LED (FET board only)
//        IR Rx In-->|P1.2/TA1             |
//                   |             P1.1/TA0|--> MSP430_INT (to Davinci)
//     3V3_I2C_CLK-->|P1.0(P1.3 FET board) |
//   3V3_I2C_DATA<-->|P2.0                 |
//                   |                     |
//      SD/MMC_INS-->|P2.1             P3.0|--> 3V3_SM_CEz
//          MS_INS-->|P2.2             P3.3|--> 3V3_CF_PWR_ON
//      3V3_CF_CD1-->|P2.3             P2.3|--> Status LED (FET board only)
//      3V3_CF_CD2-->|P2.4             P2.4|--> Status LED (FET board only)
//           SM_CD-->|P3.1                 |
//           xD_CD-->|P3.2                 |
//       SD/MMC_WP-->|P3.6       P3.4/UTXD0|-----------> 3V3_UART_RXD1
//        SM_xD_WP-->|P3.7                 |  9600 8N1
//                   |           P3.5/URXD0|<----------- 3V3_UART_TxD1
//                   |                     |
//
//
//  G. Morton
//  Texas Instruments Inc.
//  June 2005
//  Built with IAR Embedded Workbench Version: 3.30A
//*****************************************************************************

#include "DaVinci_EVM.h"

#ifdef IR_LED_DEBUG
#undef  P2_MASK
#define P2_MASK         0x06                // Input pins P2.2,1
#endif


#ifdef FET_BOARD                            // MSP430 on FET board

#ifdef FET_UART_DEBUG
void txStr(const char* pStr);
void txByte(unsigned char byte);
void txWord(unsigned int word);
#endif /* FET_UART_DEBUG */

#else                                       // MSP430 on DaVinci EVM

#undef DCO_STATUS_LED
#undef DCO_LOCKED
#define DCO_STATUS_LED
#define DCO_LOCKED

#endif /* FET_BOARD */


//
// Functions
//
void configPortPins(void);
void configUart0(void);
void resetIR(void);
void configIR(void);
void configWDT(void);
void configTimerA(void);
void configI2C(void);
void setDCO(void);
void interruptMaster(void);

void i2cReadMsg(unsigned char i2cData);
void getRTC(void);
void setRTC(void);
void getIRData(void);
void getIRVal(void);
void getInputState(void);
void getEvent(void);
void setOutputState(void);




//
// Interrupt Service Routines (ISRs)
//
__interrupt void timerA0_ISR(void);
__interrupt void timerA_ISR(void);
__interrupt void wdt_ISR(void);
__interrupt void usart0_Rx_ISR(void);


//
// Global Variables
//
unsigned char Event = 0;
unsigned char EventFlag = 0;
unsigned int Error = 0;
unsigned char IRBit = 0;
unsigned int IRData = 0;

unsigned int MaxCnt = 0;
unsigned char prevP2State;
unsigned char prevP3State;

unsigned char irReadIndex = 0;
unsigned char irWriteIndex = 0;
unsigned int IRBuff[IRBUFFLEN];

extern unsigned char i2cIndex; // MW

typedef void (*I2CMSG)(void);


//
// I2C Message Function Table
//
I2CMSG i2cMsgTbl[] =
{
  setRTC,                                   // I2C msg ID is SET_RTC_PARAMS
  getRTC,                                   // I2C msg ID is GET_RTC_PARAMS
  getIRData,                                // I2C msg ID is SEND_IR_DATA
  getIRVal,                                 // I2C msg ID is GET_LAST_IR_VALUE
  getInputState,                            // I2C msg ID is GET_INPUT_STATE
  getEvent,                                 // I2C msg ID is GET_EVENT
  setOutputState                            // I2C msg ID is SET_OUTPUT_STATE
};


//
//  Low-level system initialization - called prior to main()
//
int __low_level_init(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  return (1);                               // Force initialization of RAM
  //  return (0);                           // Skip initialization of RAM
}


//
// Set DCO frequency (calibrated from external 32kHz watch crystal)
//
void setDCO(void)
{
  unsigned char orig;
  unsigned int clkCnt;
  unsigned int prevCnt = 0;

//  DCO_STATUS_LED;                           // Set status LED pin as output

  BCSCTL2 |= DCO_ROSC;                      // Set DCOR bit if using Rosc

  orig = BCSCTL1 & ~DCO_RSEL_MASK;          // Save, clear RSEL bits

  BCSCTL1 |= DIVA_3;                        // ACLK = LFXT1CLK/8 = 4096 Hz

  // Timer A Control Register
  TACTL = TASSEL_2 + MC_2 + TACLR;          // Clk src is SMCLK
                                            // Input clock divider is 1
                                            // Continuous mode
                                            // Reset
                                            // Interrupt is disabled
                                            // Clear interrupt flag (TAIFG)

  // Timer_A Capture/Compare Control Register
  TACCTL2 = CM_1 + CCIS_1 + CAP;            // Capture on rising Edge
                                            // Capture input is CCI2B = ACLK
                                            // Async capture
                                            // Capture mode
                                            // Output mode is OUT bit
                                            // Interrupt disabled
                                            // OUT bit is 0
                                            // Clear capture overflow bit (COV)
                                            // Clear interrupt flag (CCIFG)


  while(1)
  {
    while( !(TACCTL2 & CCIFG) );            // Wait for capture event

    TACCTL2 &= ~CCIFG;                      // Capture occured, clear flag

    clkCnt = TACCR2 - prevCnt;              // Num of clks since last capture

    prevCnt = TACCR2;                       // Save current clock count

    // Check to see if number of DCO clocks is within range
    if( (clkCnt <= (DCO_CLKS + DCO_TOL)) && (clkCnt >= (DCO_CLKS - DCO_TOL)) )
    {
      DCO_LOCKED;                           // Illuminate DCO status LED
      break;
    }
    else if( clkCnt > DCO_CLKS )            // DCO is too fast, slow it down
    {
      DCOCTL--;

      if( DCOCTL == 0xFF )
      {
        if( BCSCTL1 & DCO_RSEL_MASK )
        {
          BCSCTL1--;                        // DCO role under?, dec RSEL
        }
        else
        {
          Error |= ERROR_DCO_MIN;
          break;                            // Error condition, break loop
        }
      }
    }
    else                                    // DCO is too slow, speed it up
    {
      DCOCTL++;

      if( DCOCTL == 0x00 )
      {
        if( (BCSCTL1 & DCO_RSEL_MASK) != DCO_RSEL_MASK )
        {
          BCSCTL1++;                        // DCO role over? Inc RSEL
        }
        else
        {
          Error |= ERROR_DCO_MAX;
          break;                            // Error condition, break loop
        }
      }
    }

    if( TACCTL2 & COV )                     // Check for timer overflow
    {
      Error |= ERROR_DCO_OV;
      break;
    }
  }

  TACTL = 0;                                // Stop Timer_A
  TACCTL2 = 0;
  orig |= BCSCTL1 & DCO_RSEL_MASK;          // Save new RSEL setting
  BCSCTL1 = orig;                           // Restore with new RSEL values
}


//
// Configure Port I/O Pins
//
void configPortPins(void)
{
// MW  P1OUT &= ~0x02;                           // Set P1.1 output low
  P1OUT |= 0x02;                            // Set P1.1 output high (deassert DaVinci interrupt)
  P1DIR |=  0x02;                           // Set P1.1 as output

  P3OUT |=  0x81;                            // Disable SM CE
  P3OUT &= ~0x08;                            // Disable CompactFlash power
  P3DIR |=  0x89;                            // Set P3.7, P3.3,0 as outputs

#ifdef FET_BOARD
  P2OUT = 0;
  P3OUT = 0;

  P2DIR |=  0x1E;                           // Set P2.4,3,2,1 as outputs
  P3DIR |=  0xC0;                           // Set P3.7,6 as outputs

  P2OUT |=  0x08;                           // Set P2.3 high
  P2OUT &= ~0x10;                           // Set P2.4 low
#endif
}


//
//  System Initialization
//
void sysInit(void)
{
  configPortPins();                         // Configure port I/O pins

  setDCO();                                 // Set DCO frequency

  configTimerA();                           // Configure Timer_A

  configIR();                               // Configure IR

  configUart0();                            // Configure UART0

  configI2C();                              // Configure I2C

  configWDT();                              // Configure Watchdog Timer
}


//
// Configure TimerA
//
void configTimerA(void)
{
  // Configure Timer_A
  TACTL = TASSEL0 + MC1 + TACLR;            // ACLK, continuous mode, clear
}


//
// Configure USART0 for UART mode
//
void configUart0(void)
{
  unsigned int rate;

  // Calculate Buad Rate Clock divider values
  rate = DCO_FREQ/UART_BAUD_RATE;

  P3SEL |= 0x30;                            // P3.4,5 = UTXD0/URXD0
  ME2 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  U0CTL |= (CHAR + SWRST);                  // 8-bit char, reset
  U0TCTL |= SSEL1;                          // BRCLK = SMCLK
  U0BR0 = (unsigned char)(rate & 0xff);     // Lower 8 bits of BR clk divider
  U0BR1 = (unsigned char)(rate >> 8);       // Upper 8 bits of BR clk divider
  U0MCTL = 0;                               // Modulation
  U0CTL &= ~SWRST;                          // Initialize USART state machine
  IE2 |= URXIE0;                            // Enable USART0 RX interrupt
}


//
// Configure Watchdog Timer (WDT)
//
void configWDT(void)
{
  WDTCTL = WDT_ADLY_250;                    // Clk source is ACLK,
                                            // interval timer mode,
                                            // clear, divide by 8192

  IE1 |= WDTIE;                             // Enable WDT interrupt
}


//
// Configure IR
//
void configIR(void)
{
  IR_DIR &= ~IR_PIN;                        // Set IR pin as input
  IR_SEL |=  IR_PIN;                        // Select IR pin as CCI1A

  resetIR();
}


//
// Reset IR
//
void resetIR(void)
{
  IRData = 1;                               // Initialize IR receive data
  IRBit = 14;                               // 2 start bits + 12 data bits

  // Configure TA1 to capture first falling edge of IR data packet
  TACCTL1 = CAP + CM1 + SCS + CCIE;         // Capture mode,
                                            // capture on falling edge,
                                            // synchronous capture,
                                            // enable TACCR1 CCIFG interrupts
}


//
// Configure I2C
//
void configI2C(void)
{
  initSWI2C();                              // Initialize SW I2C

// MW  i2cIndex = 0;
  regI2CCallBack(i2cReadMsg);               // Register callback function
}


#ifdef FET_UART_DEBUG

//
// UART Function - transmit null-terminated string
//
void txStr(const char* pStr)
{
  unsigned int cnt = 0;

  for(; *pStr; ++pStr)
  {
    while (!(IFG2 & UTXIFG0))               // USART0 TX buffer ready?
    {
      if( ++cnt == UART_TX_RETRY )
      {
        return;
      }

      if( cnt > MaxCnt )
      {
        MaxCnt = cnt;
      }
    }
    TXBUF0 = *pStr;                         // Transmit character
  }
}


//
// UART Function - transmit byte as ASCII characters
//
void txByte(unsigned char byte)
{
  unsigned char x;
  char str[3];

  str[0] = byte >> 4;
  str[1] = (byte & 0x0f);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久蜜臀aⅴ| 国产成人福利片| 一区二区三区自拍| 欧美国产精品专区| 精品国产欧美一区二区| 91精品在线免费观看| 欧美日韩在线播放| 日本韩国欧美一区| 99久久精品国产麻豆演员表| 国产精品自拍av| 国产剧情av麻豆香蕉精品| 精品美女被调教视频大全网站| 欧美精品久久天天躁| 欧美日韩一区高清| 欧美色老头old∨ideo| 欧美日本在线播放| 欧美日韩一级片在线观看| 欧美亚洲国产一区在线观看网站 | 91蜜桃网址入口| 丁香婷婷综合五月| 99re66热这里只有精品3直播| 99久久免费视频.com| 91免费视频网| 欧美日韩夫妻久久| 日韩三级精品电影久久久| www久久久久| 国产欧美一区视频| 《视频一区视频二区| 尤物在线观看一区| 日韩av在线发布| 精东粉嫩av免费一区二区三区| 国产精品99久久久久| 色综合久久久网| 51精品秘密在线观看| 久久天天做天天爱综合色| 国产精品久久综合| 亚洲第一福利视频在线| 黑人精品欧美一区二区蜜桃| 不卡区在线中文字幕| 欧美日韩精品一区二区三区蜜桃 | 色婷婷av一区二区三区之一色屋| 欧美日韩免费在线视频| 亚洲视频免费在线观看| 亚洲成人一二三| 国产精品一区在线观看你懂的| 专区另类欧美日韩| 久久电影网站中文字幕| 色94色欧美sute亚洲13| 精品久久久久久综合日本欧美 | 欧美激情一区在线观看| 五月综合激情日本mⅴ| 国产成人av一区二区三区在线观看| 欧美亚洲综合一区| 国产亚洲欧美中文| 天天射综合影视| 99免费精品在线| 欧美成人高清电影在线| 亚洲精品中文在线| 高潮精品一区videoshd| 日韩欧美一区二区视频| 一区二区欧美视频| www.亚洲在线| 久久久精品tv| 国产乱色国产精品免费视频| 欧美精品日韩一区| 日韩中文字幕1| 欧美四级电影网| 亚洲精品免费在线| 99久久国产综合精品色伊 | 欧美一级国产精品| 亚洲综合成人在线视频| 色悠悠久久综合| 亚洲欧美色图小说| 色婷婷久久一区二区三区麻豆| 丁香网亚洲国际| 中文字幕一区二区三区视频| 成人av在线播放网站| 欧美韩国日本综合| 国产99久久久国产精品潘金网站| 国产蜜臀97一区二区三区 | 日韩一区二区三区视频| 久久av中文字幕片| 亚洲精品一区二区三区香蕉| 经典三级视频一区| 国产婷婷色一区二区三区| 成人免费毛片app| 国产精品狼人久久影院观看方式| 丰满少妇久久久久久久| 日韩二区三区四区| 欧美电影免费观看高清完整版在线 | 精品少妇一区二区三区在线播放 | 国产精品麻豆视频| 99久久国产综合色|国产精品| 亚洲精品国产成人久久av盗摄| 在线观看三级视频欧美| 午夜电影一区二区| 欧美精品一区男女天堂| av电影在线观看不卡| 亚洲韩国精品一区| 精品va天堂亚洲国产| 懂色av中文一区二区三区| 玉足女爽爽91| 欧美www视频| 99在线精品免费| 日韩和欧美一区二区| 中文字幕乱码一区二区免费| 91国偷自产一区二区使用方法| 亚洲二区在线观看| 久久亚洲精品国产精品紫薇| av电影在线观看一区| 青椒成人免费视频| 国产精品国产三级国产三级人妇 | 欧美综合色免费| 国产在线视频精品一区| 一区二区三区中文免费| 久久毛片高清国产| 欧美丰满少妇xxxbbb| 色美美综合视频| 国产综合久久久久影院| 亚洲一区二区三区在线| 男人操女人的视频在线观看欧美| 国产亚洲精品久| 欧美一区二区三区免费观看视频| proumb性欧美在线观看| 麻豆成人久久精品二区三区红 | 国产精品久久久久久户外露出 | 欧洲国内综合视频| a美女胸又www黄视频久久| 久久国产精品99精品国产| 亚洲成人一二三| 亚洲影视在线观看| 亚洲视频 欧洲视频| 久久精品人人做人人综合| 欧美一级黄色片| 欧美久久一区二区| 欧美日韩精品一二三区| 欧美亚一区二区| 精品视频一区二区不卡| 91精彩视频在线观看| 色欧美片视频在线观看| 91视频免费播放| av资源网一区| 一本色道亚洲精品aⅴ| 99精品欧美一区二区三区小说| 成人福利视频网站| www.亚洲色图.com| 91碰在线视频| 欧美精品视频www在线观看| 91精品免费在线观看| 欧美一级高清片在线观看| 日韩一区二区不卡| 久久久亚洲欧洲日产国码αv| 久久女同精品一区二区| 国产亚洲精品资源在线26u| 国产精品沙发午睡系列990531| 亚洲另类春色国产| 首页亚洲欧美制服丝腿| 看片网站欧美日韩| 国产高清不卡一区| 一本一本大道香蕉久在线精品| 欧美精品一二三| 精品国产乱码久久久久久闺蜜 | 偷拍一区二区三区| 极品美女销魂一区二区三区 | 欧美精彩视频一区二区三区| 亚洲欧美另类图片小说| 青青国产91久久久久久| 国产精品一二三| 91蝌蚪porny九色| 欧美成人精品高清在线播放| 国产精品久99| 奇米四色…亚洲| 91老师国产黑色丝袜在线| 日韩精品一区二区三区三区免费| 国产日本一区二区| 亚洲一区视频在线| 国产精品白丝jk白祙喷水网站| 在线看日本不卡| 亚洲国产岛国毛片在线| 美女国产一区二区| 91丨porny丨国产入口| 欧美成人伊人久久综合网| 亚洲免费色视频| 国产精品影视在线观看| 欧美日韩高清影院| 综合久久国产九一剧情麻豆| 精品一区二区在线免费观看| 欧美色图天堂网| 综合分类小说区另类春色亚洲小说欧美| 蜜桃久久av一区| 欧美另类变人与禽xxxxx| 一区二区三区不卡视频| 成人国产一区二区三区精品| 欧美成人综合网站| 日韩av一区二区三区四区| 在线视频一区二区免费| 亚洲情趣在线观看| 91亚洲精华国产精华精华液| 中文在线一区二区| 国产精品一区二区x88av|