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

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

?? usb430.c

?? 5個430系列微控制器源代碼
?? 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;


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 sendvalue[64],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;

  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);
      }    
    }//if adflag
                
               
    if (bEPPflags.bits.ep1_rxdone)              //端點1接收響應
    {
      bEPPflags.bits.ep1_rxdone = 0;            //flag set zero


      if(GenEpBuf[3] == 0xff)
        adflag = 1;                             //start A/D
      else if(GenEpBuf[3] == 0xfe)
        adflag = 0;                             //stop A/D
      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一区二区三区免费野_久草精品视频
欧美一区二区三区婷婷月色| 欧美电视剧免费观看| 99久久久免费精品国产一区二区 | 亚洲国产欧美在线人成| 一区二区三区在线视频观看58 | 久久亚洲春色中文字幕久久久| 精品毛片乱码1区2区3区| 国产精品成人在线观看| 天天综合色天天综合色h| 国产精品白丝jk黑袜喷水| 欧美视频一区在线| 中文字幕亚洲电影| 国产最新精品精品你懂的| 在线观看91视频| 国产精品第四页| 国产999精品久久久久久绿帽| 在线亚洲免费视频| 亚洲精品伦理在线| 99re热视频精品| 中文字幕在线一区| 成人午夜免费av| 国产人成亚洲第一网站在线播放| 青青草91视频| 国产一区二区久久| 久久久精品中文字幕麻豆发布| 天天爽夜夜爽夜夜爽精品视频| 成人高清视频在线| 日本中文一区二区三区| 亚洲高清一区二区三区| 亚洲1区2区3区视频| 大桥未久av一区二区三区中文| 欧美精品一区二区三区蜜桃视频| 另类小说欧美激情| 日本一区二区综合亚洲| 欧洲国产伦久久久久久久| 日本成人中文字幕| 国产精品成人一区二区艾草 | 成人免费av在线| 一区二区三区加勒比av| 欧美日韩国产乱码电影| 国内久久精品视频| 亚洲免费伊人电影| 91精品久久久久久久99蜜桃| 国产一区二区0| 亚洲成av人片在线观看无码| 久久先锋影音av鲁色资源| 99久久久精品| 九九精品一区二区| 亚洲永久免费av| 中文字幕不卡在线观看| 日韩一区和二区| 色综合久久天天| 麻豆精品视频在线| 香蕉av福利精品导航| 综合久久久久久| 日本一区二区视频在线观看| 久久婷婷成人综合色| 欧美精品一区二区不卡| 日韩精品一区二区三区蜜臀 | 在线视频你懂得一区| 国产精品99久久不卡二区| 日本亚洲视频在线| 日韩福利电影在线| 婷婷成人综合网| 亚洲国产va精品久久久不卡综合| 久久理论电影网| 国产午夜精品久久久久久久| 欧美一区三区二区| 欧美一区日韩一区| 欧美一区二区三区在| 欧美精品电影在线播放| 欧美久久婷婷综合色| 欧美喷潮久久久xxxxx| 99热这里都是精品| 欧美精品乱码久久久久久按摩| 欧美三级中文字幕在线观看| 717成人午夜免费福利电影| 欧美日韩高清不卡| 日韩欧美激情一区| 国产精品久久久久婷婷| 一区二区三区在线不卡| 日韩高清国产一区在线| av网站一区二区三区| 欧美日韩一本到| 国产亚洲女人久久久久毛片| 亚洲乱码国产乱码精品精可以看| 日韩女优制服丝袜电影| 亚洲精品高清在线观看| 免费在线观看成人| 欧美午夜宅男影院| 中文字幕欧美一| 国产在线麻豆精品观看| 欧美日韩国产高清一区| 国产精品毛片高清在线完整版| 天堂成人国产精品一区| jlzzjlzz欧美大全| 国产丝袜欧美中文另类| 日产欧产美韩系列久久99| 色悠悠久久综合| 亚洲伦理在线免费看| 色欧美日韩亚洲| 中文字幕中文字幕一区二区| 亚洲综合色成人| 欧美日韩激情一区二区三区| 一区二区三区四区在线播放| 色综合一个色综合| **欧美大码日韩| 精品一区二区成人精品| 欧美综合视频在线观看| 中文字幕中文字幕在线一区 | 一区二区三区在线视频免费| 国产精品99久久久久| 国产精品久久久久桃色tv| 欧美中文字幕一区二区三区| 亚洲成人在线免费| 久久色在线视频| 99久久综合国产精品| 日韩激情一二三区| 日本一区二区三区在线不卡| 色爱区综合激月婷婷| 国产一区二区三区电影在线观看| 欧美国产精品一区二区三区| 欧美亚洲另类激情小说| 激情丁香综合五月| 一区二区三区四区不卡视频| 精品日韩av一区二区| 欧美这里有精品| 国产aⅴ精品一区二区三区色成熟| 亚洲欧美另类小说| 欧美国产一区二区| 日韩欧美国产综合一区 | 中文字幕一区二区在线观看| 日韩网站在线看片你懂的| 91蝌蚪porny| 色婷婷精品大在线视频| 99国产麻豆精品| 成人一区在线观看| 国产福利精品一区二区| 激情五月婷婷综合网| 精品一区二区三区不卡| 激情久久五月天| 国产黄色成人av| 国产成人av一区二区三区在线| 国产在线不卡一区| 国产成人激情av| 91色婷婷久久久久合中文| 9l国产精品久久久久麻豆| caoporn国产一区二区| 91蜜桃在线观看| 欧洲生活片亚洲生活在线观看| 色偷偷88欧美精品久久久| 欧美美女网站色| 国产日韩精品一区二区三区在线| 中文字幕中文字幕一区| 亚洲国产一区二区三区| 蜜臀久久99精品久久久画质超高清| 精彩视频一区二区三区| 成人福利在线看| 欧美最新大片在线看| 久久这里只有精品视频网| 国产精品蜜臀av| 紧缚捆绑精品一区二区| 99久久99久久免费精品蜜臀| 欧美丰满少妇xxxxx高潮对白| 欧美成人一区二区三区| 亚洲午夜精品17c| 国产成人在线看| 欧美另类videos死尸| 1区2区3区精品视频| 伦理电影国产精品| 欧美怡红院视频| 亚洲人123区| 9i看片成人免费高清| 中文字幕av一区 二区| 蜜桃视频在线一区| 日韩区在线观看| 日韩和欧美的一区| 51精品久久久久久久蜜臀| 亚洲成人久久影院| 欧美军同video69gay| 综合久久一区二区三区| 99视频精品在线| 亚洲天堂成人网| 欧美日韩在线播放三区四区| 亚洲精品免费看| 91精品久久久久久久91蜜桃| 石原莉奈在线亚洲三区| 91精品国产综合久久精品| 婷婷丁香久久五月婷婷| 91精品国产91热久久久做人人| 秋霞午夜鲁丝一区二区老狼| 精品欧美一区二区三区精品久久| 久久成人免费网站| 国产欧美va欧美不卡在线| 欧美自拍丝袜亚洲| 精品中文av资源站在线观看| 国产网红主播福利一区二区| 99精品视频在线观看| 三级影片在线观看欧美日韩一区二区| 欧美一级视频精品观看|