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

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

?? msp430-tusb3410_demo.c

?? MSP430操作TUSB3410,USB接口芯片的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//------------------------------------------------------------------------------
// MSP430-TUSB3410 Reference Design Demo Code V1.00
//
// This demo software interfaces the MSP430 to the TUSB3410 USB-to-serial
// bridge controller. The program is part of the "MSP430 USB Connectivity
// using TUSB3410" application note (SLAA276). It is demonstrated how a blank
// USB configuration EEPROM is detected, and how it gets programmed with an
// image that is stored in MSP430 Flash memory. After this, a demo application
// is started. The demo receives characters from the TUSB3410 virtual COM port
// (VCP) with a baud rate of 460,800. The lower nibble of a received character
// is output to the LEDs 1...4 on the demo board. Also, on press or release of
// any push-button SW1...SW4, a byte is transmitted back to the PC containing
// the updated button state.
//
// MSP430 ressources used:
//   o USART0 in UART mode for serial comm with TUSB3410
//   o USART0 in I2C mode for comm with EEPROM
//   o Timer_B7 for push-button query
//
// Andreas Dannenberg
// MSP430/TMS470 Applications
// Texas Instruments Inc.
// November 2005
//
// Built with IAR Embedded Workbench V3.30
//------------------------------------------------------------------------------
#include "msp430x16x.h"
//------------------------------------------------------------------------------
// I2C communication related definitions
//------------------------------------------------------------------------------
#define EEPROM_ADDRESS           0x50           // Address of EEPROM
#define OWN_ADDRESS              0x40           // I2C own address
//------------------------------------------------------------------------------
// Operate TUSB3410 RESET signal as open-drain output
//------------------------------------------------------------------------------
#define TUSB3410_RESET_LOW       P3DIR |= 0x01
#define TUSB3410_RESET_HIGHZ     P3DIR &= ~0x01
//------------------------------------------------------------------------------
// Misc definitions
//------------------------------------------------------------------------------
enum { false, true };
//------------------------------------------------------------------------------
// Globals used by I2C routines
//------------------------------------------------------------------------------
static unsigned char I2CBuffer[3];
static unsigned char I2CTxPtr;
//------------------------------------------------------------------------------
// Globals used by main() and ISRs
//------------------------------------------------------------------------------
static unsigned char ButtonState = 0;
static unsigned char ButtonSet = 0;
static unsigned char ButtonReleased = 0;
static unsigned char RxData;
static unsigned char DataReceived = 0;
//------------------------------------------------------------------------------
// The constant EEPROMImage[] contains the data to be loaded into the TUSB3410
// USB configuration EEPROM. It was generated using the tools provided in
// SLLC251 and then converted into a C constant. Note that the USB descriptor
// blocks contain checksums, therefore manual modification of the below EEPROM
// image is not recommended.
//
// USB vendor ID: 0x0451 (TI's VID)
// USB product ID: 0xbeef (This application's PID)
// USB product descriptor: "MSP430-TUSB3410 Reference Design"
//------------------------------------------------------------------------------
static const unsigned char EEPROMImage[] =
{
  0x10, 0x34, 0x03, 0x12, 0x00, 0x33, 0x12, 0x01,
  0x10, 0x01, 0xff, 0x00, 0x00, 0x08, 0x51, 0x04,
  0xef, 0xbe, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01,
  0x05, 0x6c, 0x00, 0x34, 0x04, 0x03, 0x09, 0x04,
  0x24, 0x03, 0x54, 0x00, 0x65, 0x00, 0x78, 0x00,
  0x61, 0x00, 0x73, 0x00, 0x20, 0x00, 0x49, 0x00,
  0x6e, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00,
  0x75, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x6e, 0x00,
  0x74, 0x00, 0x73, 0x00, 0x42, 0x03, 0x4d, 0x00,
  0x53, 0x00, 0x50, 0x00, 0x34, 0x00, 0x33, 0x00,
  0x30, 0x00, 0x2d, 0x00, 0x54, 0x00, 0x55, 0x00,
  0x53, 0x00, 0x42, 0x00, 0x33, 0x00, 0x34, 0x00,
  0x31, 0x00, 0x30, 0x00, 0x20, 0x00, 0x52, 0x00,
  0x65, 0x00, 0x66, 0x00, 0x65, 0x00, 0x72, 0x00,
  0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x65, 0x00,
  0x20, 0x00, 0x44, 0x00, 0x65, 0x00, 0x73, 0x00,
  0x69, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x00, 0x00,
  0x00
};
//------------------------------------------------------------------------------
// Function prototypes
//------------------------------------------------------------------------------
void InitSystem(void);
void InitUART(void);
void Delay100(void);
void InitI2C(void);
unsigned char EEPROM_CheckNACK(void);
void EEPROM_ByteWrite(unsigned int Address, unsigned char Data);
unsigned char EEPROM_CurrentAddressRead(void);
unsigned char EEPROM_RandomRead(unsigned int Address);
void EEPROM_Write(unsigned int Address, unsigned char *Buffer,
                  unsigned int Count);
void EEPROM_Read(unsigned int Address, unsigned char *Buffer,
                 unsigned int Count);
unsigned int EEPROM_Verify(unsigned int Address, unsigned char *Buffer,
                           unsigned int Count);
//------------------------------------------------------------------------------
// void main(void)
//
// The main application code first initializes the MSP430 peripherals. Then,
// an event-processing loop is entered. While no event is pending, the MSP430
// rests in LPM0 with interrupts enabled.
//
// IN:  ButtonState
//      ButtonSet
//      ButtonReleased
//      DataReceived
//      RxData
// OUT: ButtonState
//      ButtonSet
//      ButtonReleased
//      DataReceived
//------------------------------------------------------------------------------
void main(void)
{
  InitSystem();

  // Initializes Timer_B7 to query the status of the push-buttons
  // SW1, SW2, SW3, and SW4
  TBCCTL0 = CM_1 + SCS + CAP + CCIE;            // Capt. rising edge of P4.0
  TBCCTL2 = CM_3 + SCS + CAP + CCIE;            // Capt. rising edge of P4.2
  TBCCTL4 = CM_3 + SCS + CAP + CCIE;            // Capt. rising edge of P4.4
  TBCCTL6 = CM_3 + SCS + CAP + CCIE;            // Capt. rising edge of P4.6
  TBCTL = TBSSEL_1 + ID_3 + MC_2;               // ACLK / 8, continuous mode

  // Activate UART0 RX interrupt operation
  IE1 |= URXIE0;                                // Enable USART0 RX interrupt
  IFG1 &= ~URXIFG0;                             // Ensure flag is cleared

  while (1)                                     // Main event processing loop
  {
    __disable_interrupt();                      // Protect the following code
    if (!ButtonSet && !ButtonReleased && !DataReceived)
    {
      __bis_SR_register(LPM0_bits + GIE);       // Wait in LPM0 for event, int
      __no_operation();
    }
    else
      __enable_interrupt();                     // Allow interrupts again

    if (ButtonSet || ButtonReleased)            // Button event pending?
    {
      while (!(IFG1 & UTXIFG0));                // Ensure USART is ready
      __disable_interrupt();                    // Protect the following code
      U0TXBUF = ButtonState;                    // TX current button state
      ButtonSet = 0;                            // Clear flags
      ButtonReleased = 0;
      __enable_interrupt();                     // Allow interrupts again
    }

    if (DataReceived)                           // UART RX revent pending?
    {
      __disable_interrupt();                    // Protect the following code

      if (RxData & 0x01)                        // Check bit 0 of RX'd char...
        P4OUT |= 0x02;                          // ...and set LED1 accordingly
      else
        P4OUT &= ~0x02;

      if (RxData & 0x02)                        // Check bit 1 of RX'd char...
        P4OUT |= 0x08;                          // ...and set LED2 accordingly
      else
        P4OUT &= ~0x08;

      if (RxData & 0x04)                        // Check bit 2 of RX'd char...
        P4OUT |= 0x20;                          // ...and set LED3 accordingly
      else
        P4OUT &= ~0x20;

      if (RxData & 0x08)                        // Check bit 3 of RX'd char...
        P4OUT |= 0x80;                          // ...and set LED4 accordingly
      else
        P4OUT &= ~0x80;

      DataReceived = false;                     // Event was handled
      __enable_interrupt();                     // Allow interrupts again
    }
  }
}
//------------------------------------------------------------------------------
// void InitSystem(void)
//
// This function configures the MSP430. Peripherals are initialized, the
// external 8MHz crystal on LFXT1 is activated and used for ACLK and MCLK,
// and the contents of the external EEPROM is validated.
//
// IN:  EEPROMImage[]
// OUT: -
//------------------------------------------------------------------------------
void InitSystem(void)
{
  WDTCTL = WDTPW + WDTHOLD;                     // Stop Watchdog timer

  // Port setup
  P1OUT = 0x00;                                 // Clear output latch
  P1DIR = 0xfd;                                 // All but P1.1 to output
  P2OUT = 0x00;                                 // Clear output latch
  P2DIR = 0xfb;                                 // All but P2.2 to output
  P3OUT = 0x00;                                 // Clear output latch
  P3SEL = 0x3a;                                 // Select I2C and UART0 pins
  P3DIR = 0xd4;                                 // P3.0/1/3/5 inp, others outp
  P4OUT = 0x00;                                 // Clear output latch
  P4SEL = 0x55;                                 // Timer funct. for P4.0/2/4/6
  P4DIR = 0xaa;                                 // P4.1/3/5/7 out, others inp
  P5OUT = 0x00;                                 // Clear output latch
  P5DIR = 0xff;                                 // All output
  P6OUT = 0x00;                                 // Clear output latch
  P6DIR = 0xff;                                 // All output

  // Check if a button is held down during power-up. If so, trap software here.
  // This is to allow the PC to invoke a BSL download, before the MSP430 RESET
  // pin is switched to NMI mode, thus avoiding that any unintended device
  // resets are caused by the TUSB3410 DTR signal.
  if (P4IN & 0x55)                              // Check all buttons
  {
    P4OUT = 0xaa;                               // All LEDs on
    while (1);                                  // Loop forever
  }

  TUSB3410_RESET_LOW;                           // Hold TUSB3410 in reset

  SVSCTL = 0xb0;                                // Enable SVS, monitor only
  while ((SVSCTL & (SVSON + SVSOP)) != SVSON);  // Wait until SVS is active,
                                                // and voltage condition is met
  // Clock system setup
  BCSCTL1 |= XTS;                               // ACLK = LFXT1 = HF XTAL
  __bic_SR_register(OSCOFF);                    // Turn on XT1 oscillator

  do {
    IFG1 &= ~OFIFG;
    Delay100();                                 // SW delay ~125us @ def. DCO
  } while (IFG1 & OFIFG);                       // Wait until XTAL is stable

  BCSCTL2 |= SELM_3;                            // Select HF XTAL for MCLK

  __enable_interrupt();                         // Global interrupt enable

  InitI2C();                                    // Configure USART0 for I2C

  // Check if EEPROM is present. If so, verify EEPROM contents and program
  // EEPROM image from MSP430 Flash memory if neccessary.
  if (!EEPROM_CheckNACK())
    if (!EEPROM_Verify(0, (void *)&EEPROMImage, sizeof EEPROMImage))
      EEPROM_Write(0, (void *)&EEPROMImage, sizeof EEPROMImage);

  WDTCTL = WDTPW + WDTHOLD + WDTNMI;            // Stop WDT, deactivate RESET
  TUSB3410_RESET_HIGHZ;                         // Resume TUSB3410 operation

  InitUART();                                   // Configure USART0 for UART
}
//------------------------------------------------------------------------------
// void InitUART(void)
//
// This function initializes the USART0 module for UART mode. It is used to
// setup the communication link with the TUSB3410 controller. Using an ACLK
// of 8MHz, the resulting UART baud rate is 460,800.
//
// IN:  -
// OUT: -
//------------------------------------------------------------------------------
void InitUART(void)
{
  U0CTL = 0;                                    // Ensure I2C mode is disabled
  U0CTL = SWRST;                                // Hold USART logic in reset
  ME1 |= UTXE0 + URXE0;                         // Enable USART0 TXD/RXD
  U0CTL |= CHAR;                                // 8-bit character
  U0TCTL = SSEL0;                               // UCLK = ACLK
  U0BR0 = 17;                                   // 8MHz / 460,800 = 17.xx
  U0BR1 = 0;
  U0MCTL = 0x52;                                // Modulation (See User's Guide)
  U0CTL &= ~SWRST;                              // Release USART state machine
}
//------------------------------------------------------------------------------
// void Delay100(void)
//
// This function implements a 100 cycle compiler optimization level
// independent software delay.
//
// IN:  -
// OUT: -
//------------------------------------------------------------------------------
void Delay100(void)
{
  asm("  mov.w    #33,R15  ");                  // Load loop counter
  asm("  dec.w    R15      ");                  // 1 Cycle
  asm("  jnz      $-2      ");                  // 2 Cycles
}
//------------------------------------------------------------------------------
// void InitI2C(void)
//
// This function initializes the USART0 module for I2C mode. It is used to
// setup the communication link with the external EEPROM. Using an ACLK of
// 8MHz, the resulting I2C bit rate is 100,000.
//
// IN:  -
// OUT: -
//------------------------------------------------------------------------------
void InitI2C(void)
{
  U0CTL = SWRST;                                // USART logic in reset state
  U0CTL &= ~I2CEN;                              // Clear I2CEN bit
  U0CTL = I2C + SYNC + MST;                     // I2C master mode, 7-bit addr
  I2CTCTL = I2CTRX + I2CSSEL_1;                 // Byte mode, repeat mode, ACLK
  I2CSA = EEPROM_ADDRESS;                       // I2C slave address
  I2COA = OWN_ADDRESS;                          // Own address
  I2CPSC = 3;                                   // I2C prd = 4 * clock prd
  I2CSCLH = 8;                                  // SCL high prd = 10 * I2C prd
  I2CSCLL = 8;                                  // SCL low prd = 10 * I2C prd
  U0CTL |= I2CEN;                               // Enable I2C module operation
}
//------------------------------------------------------------------------------
unsigned char EEPROM_CheckNACK(void)
{
  while (I2CDCTL & I2CBUSY);                    // Wait for I2C module

  U0CTL &= ~I2CEN;
  I2CTCTL |= I2CRM;                             // Disable repeat mode
  U0CTL |= I2CEN;

  U0CTL |= MST;                                 // I2C master mode
  I2CTCTL |= I2CTRX;                            // Transmit mode (R/W bit = 0)
  I2CIFG &= ~NACKIFG;                           // Clear interrupt flag

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频一区| 欧美综合亚洲图片综合区| 性久久久久久久久久久久| 中文字幕精品一区二区三区精品| 欧美精品乱人伦久久久久久| 欧美日韩在线综合| 欧美日韩在线观看一区二区| 精品污污网站免费看| 欧美无乱码久久久免费午夜一区| 色噜噜狠狠色综合中国| 91麻豆国产自产在线观看| 99久久婷婷国产综合精品 | 精品久久久久一区| 欧美精品一二三| 日韩欧美三级在线| 26uuu亚洲| 1024成人网| 一区av在线播放| 日韩二区在线观看| 国产在线播放一区| 不卡一卡二卡三乱码免费网站| 成人精品一区二区三区四区 | 最好看的中文字幕久久| 亚洲欧美日韩国产综合| 亚洲成人自拍网| 久久成人精品无人区| 国产激情精品久久久第一区二区| av在线播放成人| 在线看日韩精品电影| 91精品国产91热久久久做人人 | 99国产精品99久久久久久| 色婷婷精品久久二区二区蜜臂av | 欧美一级日韩一级| 国产亚洲成aⅴ人片在线观看| 国产精品国产三级国产aⅴ原创| 一区二区三区四区不卡在线 | xf在线a精品一区二区视频网站| 国产亚洲欧美一级| 亚洲欧美一区二区三区极速播放 | 国产一区二区电影| 色综合av在线| xnxx国产精品| 亚洲自拍偷拍av| 国产精品亚洲一区二区三区妖精 | 成人久久18免费网站麻豆| 欧美吞精做爰啪啪高潮| www久久精品| 亚洲国产裸拍裸体视频在线观看乱了 | 久久精品亚洲精品国产欧美| 一区二区三区免费| 国产福利一区二区三区视频在线 | 三级影片在线观看欧美日韩一区二区 | 欧美一级xxx| 久久综合给合久久狠狠狠97色69| 亚洲欧美一区二区三区极速播放| 免费成人你懂的| 欧美最猛黑人xxxxx猛交| 久久免费美女视频| 蜜桃视频在线一区| 欧美综合一区二区三区| 国产精品亲子伦对白| 日韩av一二三| 欧美精品精品一区| 一区二区三区高清在线| 粉嫩高潮美女一区二区三区 | 午夜av电影一区| 成人福利在线看| 久久女同精品一区二区| 麻豆精品视频在线观看视频| 在线观看91av| 亚洲综合色婷婷| 欧美在线视频不卡| 亚洲欧美另类图片小说| youjizz久久| 国产精品久久久久久福利一牛影视| 国产综合色在线| 精品国产伦一区二区三区观看方式| 日韩极品在线观看| 欧美日韩国产成人在线免费| 亚洲国产一区视频| 欧美日韩精品一区二区三区| 亚洲va天堂va国产va久| 欧美视频一区二区| 亚洲成人激情综合网| 96av麻豆蜜桃一区二区| 日韩欧美成人激情| 精品在线播放免费| 国产黑丝在线一区二区三区| 精品国产伦一区二区三区免费| 精品一区二区在线看| 精品国产乱码久久久久久牛牛| 老司机精品视频导航| 久久久精品日韩欧美| 波多野结衣视频一区| 一区二区三区资源| 欧美妇女性影城| 精品一区二区三区的国产在线播放| 精品免费日韩av| 国产99久久久精品| 亚洲精品久久嫩草网站秘色| 欧美日韩精品免费观看视频| 免费看欧美美女黄的网站| 久久夜色精品国产欧美乱极品| 懂色av一区二区在线播放| 亚洲欧美日韩国产手机在线| 欧美一区二区三区在线观看| 国产在线播精品第三| 亚洲精品视频在线观看网站| 91精品国产品国语在线不卡| 国产一区二区福利| 亚洲第一综合色| 久久香蕉国产线看观看99| 99精品国产一区二区三区不卡| 亚洲成人午夜电影| 久久精子c满五个校花| 91在线国产观看| 蜜臀av一级做a爰片久久| 国产精品久久久久影院老司| 欧美久久久久免费| 粉嫩一区二区三区性色av| 日本中文在线一区| 国产精品不卡在线| 欧美精品一区二区三区久久久| 91免费在线播放| 国产揄拍国内精品对白| 亚洲国产美女搞黄色| 国产精品乱码久久久久久| 欧美一区二区三区电影| 99久久婷婷国产综合精品| 国产一区二区三区在线看麻豆| 亚洲国产精品久久一线不卡| 欧美国产一区二区在线观看| 日韩一区二区三区精品视频| 色综合激情五月| 成人免费毛片高清视频| 久久av中文字幕片| 亚洲电影一区二区三区| 综合在线观看色| 欧美国产日韩亚洲一区| 日韩精品一区二区三区四区视频 | 国产午夜亚洲精品羞羞网站| 欧美亚洲国产一区二区三区 | 日韩电影免费在线| 亚洲视频在线观看一区| 国产日产欧美一区| 精品久久久影院| 日韩欧美综合在线| 91精品国产综合久久婷婷香蕉 | 丝袜美腿亚洲一区二区图片| 亚洲精品乱码久久久久久黑人| 国产精品久久久久久久久动漫 | 五月婷婷激情综合| 亚洲另类中文字| 亚洲视频狠狠干| 中文字幕亚洲成人| 国产精品国产成人国产三级| 国产目拍亚洲精品99久久精品| 26uuu精品一区二区在线观看| 精品美女被调教视频大全网站| 精品少妇一区二区三区| 日韩欧美国产午夜精品| 精品理论电影在线| 久久久亚洲综合| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品天天看| 亚洲免费在线观看| 亚洲制服丝袜在线| 日韩精品一区第一页| 日本aⅴ免费视频一区二区三区| 久久国内精品视频| 国产精品夜夜嗨| 亚洲色欲色欲www在线观看| 午夜精品久久久久久久99水蜜桃 | 亚洲国产欧美在线人成| 性做久久久久久免费观看| 精品国产制服丝袜高跟| 欧美老年两性高潮| 日韩一区二区三区免费观看| 精品日韩成人av| 国产日韩一级二级三级| 亚洲色图欧美偷拍| 亚洲成av人片在www色猫咪| 乱一区二区av| 国产成人精品www牛牛影视| 91视频在线看| 日韩欧美视频一区| 国产精品国产三级国产普通话蜜臀 | 久久久av毛片精品| 国产精品免费久久| 亚洲综合一二三区| 久久爱另类一区二区小说| 91免费精品国自产拍在线不卡| 欧美日韩成人在线一区| 中文字幕av一区二区三区高 | 亚洲第一主播视频| 国产成人精品免费一区二区| 欧美图区在线视频| 欧美国产精品专区| 日本强好片久久久久久aaa| 国产不卡免费视频|