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

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

?? usb430.c

?? 其中的usb端口通信已經作為一個模塊來使用
?? C
字號:
#include <stdio.h>
#include <string.h>

#include <msp430x14x.h>                /* special function register declarations   */

#include "epphal.h"
#include "d12ci.h"
#include "mainloop.h"
#include "usb100.h"
#include "chap_9.h"

/*;
;*************************************************************************
; USB protocol function pointer arrays
;*************************************************************************
*/
void (*StandardDeviceRequest[])(void) =              
{  
	get_status,
	clear_feature,
	reserved,
	set_feature,
	reserved,
	set_address,
	get_descriptor,
	reserved,
	get_configuration,
	set_configuration,
	get_interface,
	set_interface,
	reserved,
	reserved,
	reserved,
	reserved
};              //標準請求處理函數入口列表


/*;
;*************************************************************************
;  Public static data
;*************************************************************************
*/
DEVICE_REQUEST DeviceRequest[30];
unsigned char LastState_0[30];
unsigned char LastState_1[30];
unsigned int CNT = 0;
unsigned int CNT_1 = 0;

EPPFLAGS bEPPflags;
CONTROL_XFER ControlData;
unsigned char GenEpBuf[EP1_PACKET_SIZE];
unsigned char MainEpBuf[];
unsigned char EpBuf[EP2_PACKET_SIZE];
unsigned int ClockTicks;
unsigned char sendvalue[2];
unsigned char Interval;

void init_TimerB(void)
{
  TBCTL = TBSSEL_2 + TBCLR;               //Timer B clock source select: 2 - SMCLK 
  TBCCR0 = 7;                           // PWM Period:500K Hz
  TBCCTL1 = OUTMOD_7;                     // CCR1 toggle/set
  TBCCR1 = 4;                           // CCR1 PWM duty cycle
  TBCTL |= MC0;                             // Start Timer_B in up mode
}

void init_TimerA(void)
{
  TACTL = TASSEL1 + TACLR;              // SMCLK, clear TAR
  
  CCR0 = 10000;
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  ClockTicks++;  
}	

void init_special_interrupts(void)
{
	P1DIR &=~0X04;
	P1IFG = 0X0;
	P1IES &=~0X04;
}

void init_port(void)
{
	P5DIR = 0XFF;
	P4OUT = 0xFF;
	P4DIR = 0XFF;
	P4SEL |= 0X02;                        //TB PWM Output:500K Hz
	
	P3DIR |= 0X40;
	P3OUT |= 0X40;	
}
/*
//A/D conversion setup
void init_AD(void)
{    P6SEL = 0xFF;         // Pin P6 used by ADC module

     ADC12CTL0 &=~ 0x02;   // Disable conversion before changing
                           // the ADC12 settings!!!
                           // selection of reference and input 
     ADC12MCTL0  = 0x10;    // Ref = AVss, Vref+; Input = A0
     ADC12MCTL1  = 0x11;    // Ref = AVss, AVcc; Input = A1
     ADC12MCTL2  = 0x12;    // Ref = AVss, AVcc; Input = A2
     ADC12MCTL3  = 0x93;    // Ref = AVss, AVcc; Input = A3          
     ADC12MCTL4  = 0x84;    // Ref = AVss, AVcc; Input = A4
     ADC12MCTL5  = 0x85;    // Ref = AVss, AVcc; Input = A5
     ADC12MCTL6  = 0x86;    // Ref = AVss, AVcc; Input = A6
     ADC12MCTL7  = 0x87;    // Ref = AVss, AVcc; Input = A7   //由通道A1至A8
     ADC12MCTL8  = 0x88;    // Ref = AVss, AVcc; Input = A8   //進行序列轉換,
     ADC12MCTL9  = 0x89;    // Ref = AVss, AVcc; Input = A9
     ADC12MCTL10 = 0x8A;    // Ref = AVss, AVcc; Input = A10
     ADC12MCTL11 = 0x8B;    // Ref = AVss, AVcc; Input = A11  //A8-A15不進行轉換。
     ADC12MCTL12 = 0x8C;    // Ref = AVss, AVcc; Input = A12
     ADC12MCTL13 = 0x8D;    // Ref = AVss, AVcc; Input = A13
     ADC12MCTL14 = 0x8E;    // Ref = AVss, AVcc; Input = A14
     ADC12MCTL15 = 0x8F;    // Ref = AVss, AVcc; Input = A15
                            // ADC12MCTL7 定義了序列結束點;
                            // (EOS bit is set!)

     ADC12CTL1 = 0x0200;    //序列單次轉換模式,第一個結果存在
                            //ADC12MEM0中,采樣信號由采樣定時器控制;
     ADC12CTL0 = 0x0070;    //采用2.5V內部參考電壓,打開由部參考電壓,
                            //打開ADC12內核。
     ADC12CTL0 |= SHT0_0;                            
     ADC12CTL0 |= 0x02;     // enable conversion
}
*/
void init(void)
{  
  unsigned char i;
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  BCSCTL1 &= ~XT2OFF;                   //Enable high frequency oscillator
  BCSCTL2 = 0X88;                       //MCLK = SMCLK = 4M Hz
  do 
  {
    IFG1 &= ~OFIFG;                       // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);           // Time for flag to set
  }
  while ((IFG1 & OFIFG) == OFIFG);      // OSCFault flag still set?                
  
  //init_AD(); 
  init_port();  
  init_special_interrupts();
  init_TimerA();
  init_TimerB();

  D12_SetAddressEnable(0x0,1);
  init_config();
}

void main(void)
{  
  unsigned char adflag = 0;
  //unsigned char channal;
  //unsigned int aver,adcount = 0;
  //unsigned int advalue[32];
  unsigned char i;//,adindex = 0;
  //unsigned long adtotal[4] = {0};
  
          
  _DINT();              
  init();
  MCU_D12RST_0;
  _NOP();
  MCU_D12RST_1;                             //reset usb 芯片
                      
  bEPPflags.value = 0;
  _EINT();
  reconnect_USB();
  P1IE = 0X04;
  
  //for(i = 0; i < 64; i++) sendvalue[i] = i;
  while(1)
  {    
    if (adflag)                                                 //A/D轉換數據發送
    {                    
                    //D12_WriteEndpoint(5,64,test2);                          //主端點發送測試
      /*              
      for (adcount=0;adcount < aver;adcount++)  
      {
        ADC12CTL0 |= 0x01;                      //開始轉換。
        //ADC12CTL0 |= SHT0_15;
        //ADC12CTL0 &=~0x01;
        while (ADC12CTL1&0x01);               //轉換完成了嗎?
        switch (channal)
        {
          case 1:adtotal[0]+=ADC12MEM0;break;
          case 2:adtotal[1]+=ADC12MEM1;break;
          case 3:adtotal[2]+=ADC12MEM2;break;
          case 4:adtotal[3]+=ADC12MEM3;break;
        }
      }     
                   
      advalue[adindex]=adtotal[channal-1]/aver;adtotal[channal-1]=0;
      sendvalue[adindex*2]=advalue[adindex]/256;
      sendvalue[adindex*2+1]=advalue[adindex]%256;
      adindex++;   
      if (adindex>=32) 
      {
        adindex=0;D12_WriteEndpoint(5,64,sendvalue);
      } 
      */   
      //D12_WriteEndpoint(5,64,sendvalue);
    }//if adflag
                
               
    if (bEPPflags.bits.ep1_rxdone)              //端點1接收響應
    {
      bEPPflags.bits.ep1_rxdone = 0;            //flag set zero


      if(GenEpBuf[3] == 0xff)
      {
        TACTL = TASSEL1 + TACLR + MC1;              // SMCLK, clear TAR ,start Timer A
                                                    //start A/D
      }
      else if(GenEpBuf[3] == 0xfe)
      {
        TACTL = 0;
      }
        //adflag = 0;                             //stop A/D
      else if(GenEpBuf[3] == 0xee)
      {
        Interval = TAR;
        sendvalue[1] = (unsigned char)(TAR & 0xff);
        sendvalue[0] = (unsigned char)(TAR >> 8) & 0xff;
        D12_WriteEndpoint(5,2,sendvalue);
        sendvalue[0] = sendvalue[1] = 0;
      }
      /*
      else 
      {
        aver = GenEpBuf[0] * 256 + GenEpBuf[1];                  //獲得平均次數
        channal = GenEpBuf[3];                               //獲得通道選擇
        //adcount=0;
        adindex = 0;
        adtotal[channal-1] = 0;
        ADC12CTL0 &= ~0x02;        //ENC=0
        ADC12CTL1 &= ~0xf000;
        ADC12CTL1 |= ((channal-1)<<12);                      //選擇轉換通道
        ADC12CTL0 |= 0x02;         //ENC=1 
      }
      */
    }//if bEPPflags.bits.ep1_rxdone


    if (bEPPflags.bits.timer)
    {                               //計時器中斷響應
      bEPPflags.bits.timer = 0;
    }
              
    if (bEPPflags.bits.bus_reset) 
    {                        //總線重起中斷響應
      _DINT();
      bEPPflags.bits.bus_reset = 0;
      _EINT();						
    } // if bus reset

    if (bEPPflags.bits.suspend) 
    {                          //掛起中斷響應
      _DINT();
      bEPPflags.bits.suspend= 0;
      _EINT();
      if((P4OUT & D12_SUSPD) == D12_SUSPD) 
      {
        D12_SUSPD_0;
	P5DIR = 0XFF;
	P5OUT = 0xFF;
	P5DIR = 0X0;
	P4DIR = 0XFF;
	P4OUT = 0xFF;
	D12_SetDMA(0xC3);
	D12_SUSPD_1;
      }
    } // if suspend change

    if (bEPPflags.bits.setup_packet)
    {                    //接收到設置包中斷處理
      _DINT();
      bEPPflags.bits.setup_packet = 0;

      control_handler();
      _EINT();
			//P1OUT |=D12SUSPD;
    } // if setup_packet
  } // Main Loop
}

void stall_ep0(void)                                    
{
	D12_SetEndpointStatus(0, 1);
	D12_SetEndpointStatus(1, 1);
}

void disconnect_USB(void)
{
	// Initialize D12 configuration
	D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
}

void connect_USB(void)
{
	// reset event flags
	bEPPflags.value = 0;
	D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
}


void reconnect_USB(void)
{	  
  // Pull-down D12's SUSPEND pin  
  // Release D12's SUSPEND pin after receiving bus reset from host  
  
  D12_SUSPD_0;
  disconnect_USB();
  
  ClockTicks = 0;
  TACCTL0 = CCIE;                         // TACCR0 interrupt enabled
  TACTL |= MC0;
   
  while(ClockTicks < 400) P3OUT &= ~0X40;  
  
  TACTL = 0;
  TACCTL0 = 0; 
  P3OUT |= 0X40;

  connect_USB(); 
}

void init_unconfig(void)
{
  D12_SetEndpointEnable(0);	/* Disable all endpoints but EPP0. */
}

void init_config(void)
{
	D12_SetEndpointEnable(1);	/* Enable  generic/iso endpoints. */
}

void single_transmit(unsigned char * buf, unsigned char len)
{
	if( len <= EP0_PACKET_SIZE) {
		D12_WriteEndpoint(1, len, buf);
	}
}

void code_transmit(unsigned char * pRomData, unsigned short len)
{
	ControlData.wCount = 0;
	if(ControlData.wLength > len)
		ControlData.wLength = len;

	ControlData.pData = pRomData;
	if( ControlData.wLength >= EP0_PACKET_SIZE) {
		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
		ControlData.wCount += EP0_PACKET_SIZE;
		_DINT();            
	        bEPPflags.bits.control_state = USB_TRANSMIT;               //總線處于傳輸狀態
	        _EINT();
	}
	else {  
		D12_WriteEndpoint(1, ControlData.wLength, pRomData);
		ControlData.wCount += ControlData.wLength;
		_DINT();
		bEPPflags.bits.control_state = USB_IDLE;                   //總線空閑
		_EINT();
	}
}


void control_handler(void)                                                                   //usb請求處理程序
{
	unsigned char type, req;

	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;              //請求類型:標準or廠商
	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;                         //具體請求代號	

	if (type == USB_STANDARD_REQUEST)                                                    //標準請求處理
		(*StandardDeviceRequest[req])();	
	else
		stall_ep0();
		
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区不卡| 秋霞午夜av一区二区三区| 国产精品一卡二| 久久精品网站免费观看| 国产一区二区免费看| 国产亚洲精品资源在线26u| 国产成人午夜精品5599| 欧美国产精品中文字幕| 色婷婷亚洲综合| 亚洲国产日韩精品| 91精品国产一区二区三区 | 激情文学综合丁香| 精品久久国产字幕高潮| 国产成人精品三级| 亚洲免费观看高清| 欧美日韩在线播放| 久久成人免费网| 中文在线一区二区| 欧美色成人综合| 久久99精品国产.久久久久久 | 91看片淫黄大片一级| 中文字幕日韩一区二区| 欧美浪妇xxxx高跟鞋交| 国内精品写真在线观看| 自拍偷拍欧美激情| 欧美久久一区二区| 国产成人av电影免费在线观看| 亚洲欧美日韩精品久久久久| 欧美高清hd18日本| 国产福利一区二区| 亚洲一区二区三区四区五区中文 | 久久99久久99| 自拍偷拍国产精品| 91麻豆精品国产91久久久久久 | 国产精品久久夜| 欧美日韩久久一区| 欧美精品一区二区三区蜜桃视频| 国产成a人无v码亚洲福利| 亚洲无线码一区二区三区| 久久人人97超碰com| 91福利在线播放| 国内精品久久久久影院一蜜桃| 亚洲日本va午夜在线影院| 精品欧美一区二区三区精品久久| 色综合久久久久综合体| 国产一区二区三区免费在线观看 | 亚洲成人自拍偷拍| 国产蜜臀av在线一区二区三区| 欧美精品一二三| 99精品桃花视频在线观看| 蜜桃av一区二区三区电影| 亚洲视频香蕉人妖| 久久综合久色欧美综合狠狠| 欧美日韩国产欧美日美国产精品| 成人av动漫在线| 狠狠色狠狠色合久久伊人| 亚洲成av人片在线观看| 亚洲天堂2016| 国产精品欧美综合在线| 久久色在线视频| 欧美一级片免费看| 欧美日韩久久一区| 91麻豆视频网站| 99视频精品全部免费在线| 国产一区二区导航在线播放| 午夜激情久久久| 亚洲一二三专区| 亚洲激情一二三区| 国产精品久久久久久久久动漫| 久久综合五月天婷婷伊人| 日韩视频在线一区二区| 欧美日韩国产一二三| 欧美影片第一页| 91麻豆福利精品推荐| 91视频免费播放| 91啪亚洲精品| 一本到不卡免费一区二区| 欧美国产亚洲另类动漫| 久久综合五月天婷婷伊人| 精品日韩欧美在线| 久久综合av免费| 久久久亚洲欧洲日产国码αv| 欧美电视剧免费全集观看| 欧美一级搡bbbb搡bbbb| 日韩精品中文字幕一区| 日韩精品一区在线| 欧美精品一区二区在线观看| 久久久亚洲午夜电影| 国产欧美一区二区精品秋霞影院| 国产日产亚洲精品系列| 国产精品美女视频| 亚洲色图欧洲色图| 亚洲在线视频一区| 首页综合国产亚洲丝袜| 日本成人在线电影网| 久久精品99国产精品日本| 国产在线精品一区二区夜色| 成人深夜在线观看| 色综合久久中文字幕综合网 | 午夜不卡在线视频| 日本视频免费一区| 国产综合久久久久影院| 国产99久久久国产精品| 99精品在线免费| 欧美日韩不卡一区二区| 日韩欧美亚洲国产精品字幕久久久| 精品国产一区二区三区久久影院| 国产亚洲精品bt天堂精选| 亚洲欧洲一区二区三区| 亚洲3atv精品一区二区三区| 久久成人免费电影| av一本久道久久综合久久鬼色| 在线免费精品视频| 欧美一区二区播放| 国产精品色在线| 天堂一区二区在线| 国产一区二区在线免费观看| 91视频在线观看| 日韩欧美第一区| 国产精品久久久久久久久免费丝袜 | 不卡一区中文字幕| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲gay无套男同| 狠狠狠色丁香婷婷综合激情| aaa亚洲精品一二三区| 欧美精品乱人伦久久久久久| 国产人成一区二区三区影院| 亚洲一级片在线观看| 国产一区二区三区在线观看精品| 91免费观看视频在线| 日韩欧美一级特黄在线播放| 国产精品对白交换视频 | 成人性视频免费网站| 欧美日韩成人激情| 亚洲欧洲www| 麻豆成人久久精品二区三区红 | 狠狠狠色丁香婷婷综合激情| 91国产免费观看| 国产乱码字幕精品高清av| 色激情天天射综合网| 欧美精品一区二区三区在线播放| 亚洲综合图片区| 成人精品gif动图一区| 91精品国产一区二区三区香蕉 | 欧美影院精品一区| 亚洲国产高清aⅴ视频| 日本成人在线电影网| 在线观看欧美黄色| 国产精品无码永久免费888| 老司机免费视频一区二区三区| 99re热视频精品| 国产欧美精品区一区二区三区 | 精品一区二区三区蜜桃| 欧美午夜精品一区二区三区| 18成人在线观看| 国产白丝精品91爽爽久久| 日韩欧美中文一区二区| 亚洲123区在线观看| 91老师片黄在线观看| 国产精品青草综合久久久久99| 韩国精品在线观看| 日韩欧美国产一二三区| 日韩精品每日更新| 在线免费观看日本欧美| 亚洲日本一区二区三区| 99久久久无码国产精品| 国产精品久久久久久亚洲伦| 国产福利精品一区| 久久久精品一品道一区| 国产麻豆午夜三级精品| 精品福利在线导航| 精品一二线国产| 久久久久久久综合色一本| 国精品**一区二区三区在线蜜桃| 精品三级av在线| 韩国一区二区三区| 欧美电影免费观看高清完整版在| 久久国内精品自在自线400部| 欧美一级理论性理论a| 老司机免费视频一区二区| 日韩精品一区二区三区蜜臀| 精品一区二区成人精品| 国产亚洲精品aa| 成人国产精品免费观看| 亚洲欧美偷拍三级| 欧美视频在线观看一区| 午夜精品久久久久久久久| 制服丝袜中文字幕亚洲| 狠狠色狠狠色综合系列| 国产日韩av一区| 91视频com| 亚洲国产日韩a在线播放性色| 6080午夜不卡| 韩国欧美国产1区| 国产精品嫩草99a| 欧美视频中文一区二区三区在线观看| 婷婷开心久久网| 精品国产乱码久久久久久夜甘婷婷| 国产乱子轮精品视频| 亚洲三级电影网站|