wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1769|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

TI M3庫(kù)函數(shù)說(shuō)明

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1104531 發(fā)表于 2023-12-17 21:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
通常對(duì)CM3內(nèi)部資源應(yīng)用,軟件有三種不同的形式可操作:一種就是用最低層的匯編語(yǔ)言操作;第二種就是用C語(yǔ)直接寄存器操作;第三種就是利用提供的API庫(kù)函數(shù)進(jìn)行操作。由于提供庫(kù)函數(shù)操作簡(jiǎn)單,同時(shí)都是經(jīng)過(guò)認(rèn)證通過(guò)的,因此,下面主要講解API庫(kù)函數(shù)。

1:通常,Stellaris系列ARM所有片內(nèi)外設(shè)只有在使能以后才可以工作,否則被禁止。暫時(shí)不用的片內(nèi)外設(shè)被禁止后可以節(jié)省功耗。GPIO也不例外,復(fù)位時(shí)所有GPIO模塊都被禁止,在使用GPIO模塊之前必須首先要使能。例如:
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // 使能GPIOB模塊
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); // 使能GPIOG模塊

2:這幾個(gè)函數(shù)用來(lái)設(shè)置GPIO管腳的方向和模式、電流驅(qū)動(dòng)強(qiáng)度和類(lèi)型。但是在我們的實(shí)際編程當(dāng)中它們并不常用,而是采用更加方便的GPIOPinType系列函數(shù)來(lái)代替。
GPIO管腳的方向可以設(shè)置為輸入方向或輸出方向。很多片內(nèi)外設(shè)的特定功能管腳,如UART模塊的Rx和Tx、Timer模塊的CCP管腳等,都與GPIO管腳復(fù)用,如果要使用這些特定功能,則必須先要把GPIO管腳的模式設(shè)置為硬件自動(dòng)管理。
    GPIO管腳的電流驅(qū)動(dòng)強(qiáng)度可以選擇2mA、4mA、8mA或者帶轉(zhuǎn)換速率(Slew Rate)控制的8mA驅(qū)動(dòng)。驅(qū)動(dòng)強(qiáng)度越大表明帶負(fù)載能力越強(qiáng),但功耗也越高。對(duì)絕大多數(shù)應(yīng)用場(chǎng)合選擇2mA驅(qū)動(dòng)即可滿足要求。GPIO管腳類(lèi)型可以配置成輸入、推挽、開(kāi)漏三大類(lèi),每一類(lèi)當(dāng)中還有上拉、下拉的區(qū)別。對(duì)于配置用作輸入端口的管腳,端口可按照要求設(shè)置,但是對(duì)輸入唯一真正有影響的是上拉或下拉終端的配置。關(guān)于轉(zhuǎn)換速率(Slew Rate)。對(duì)輸出信號(hào)采取適當(dāng)舒緩的轉(zhuǎn)換速率控制對(duì)抑制信號(hào)在傳輸線上的反射和電磁干擾非常有效。按照Stellaris系列ARM數(shù)據(jù)手冊(cè)里給出的數(shù)據(jù):在2mA驅(qū)動(dòng)下GPIO輸出的上升和下降時(shí)間為17ns(典型值,下同);而在8mA驅(qū)動(dòng)下加快到6ns,電磁干擾現(xiàn)象可能比較突出;但在使能8mA轉(zhuǎn)換速率控制以后上升和下降時(shí)間分別為10ns和11ns,有了明顯的延緩。8mA驅(qū)動(dòng)在使能其轉(zhuǎn)換速率控制后,并不影響其直流驅(qū)動(dòng)能力,仍然是8mA。

功能      設(shè)置所選GPIO端口指定管腳的方向和模式   
原型      void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulPinIO)
參數(shù)      ulPort:所選GPIO端口的基址,應(yīng)當(dāng)取下列值之一:
                     GPIO_PORTA_BASE // GPIOA的基址(0x40004000)
                     GPIO_PORTB_BASE // GPIOB的基址(0x40005000)
                     GPIO_PORTC_BASE // GPIOC的基址(0x40006000)
                     GPIO_PORTD_BASE // GPIOD的基址(0x40007000)
                     GPIO_PORTE_BASE // GPIOE的基址(0x40024000)
                     GPIO_PORTF_BASE // GPIOF的基址(0x40025000)
                     GPIO_PORTG_BASE // GPIOG的基址(0x40026000)
                     GPIO_PORTH_BASE // GPIOH的基址(0x40027000)
在2008年新推出的DustDevil家族(LM3S3xxx/5xxx系列,以及部分LM3S1xxx/2xxx型號(hào))里新增了一項(xiàng)AHB功能(GPIO高速總線訪問(wèn))。如果已經(jīng)用函數(shù)SysCtlGPIOAHBEnable( )使能了AHB功能,則參數(shù)ulPort應(yīng)當(dāng)取下列值之一:
                     GPIO_PORTA_AHB_BASE // GPIOA的AHB基址
                     GPIO_PORTB_AHB_BASE // GPIOB的AHB基址
                     GPIO_PORTC_AHB_BASE // GPIOC的AHB基址
                     GPIO_PORTD_AHB_BASE // GPIOD的AHB基址
                     GPIO_PORTE_AHB_BASE // GPIOE的AHB基址
                     GPIO_PORTF_AHB_BASE // GPIOF的AHB基址
                     GPIO_PORTG_AHB_BASE // GPIOG的AHB基址
                     GPIO_PORTH_AHB_BASE // GPIOH的AHB基址
         ucPins:指定管腳的位組合表示,應(yīng)當(dāng)取下列值之一或者它們之間的任意“或運(yùn)算”組合形式:
                     GPIO_PIN_0 // GPIO管腳0的位表示(0x01)
                     GPIO_PIN_1 // GPIO管腳1的位表示(0x02)
                     GPIO_PIN_2 // GPIO管腳2的位表示(0x04)
                     GPIO_PIN_3 // GPIO管腳3的位表示(0x08)
                     GPIO_PIN_4 // GPIO管腳4的位表示(0x10)
                     GPIO_PIN_5 // GPIO管腳5的位表示(0x20)
                     GPIO_PIN_6 // GPIO管腳6的位表示(0x40)
                     GPIO_PIN_7 // GPIO管腳7的位表示(0x80)   
          ulPinIO:管腳的方向或模式,應(yīng)當(dāng)取下列值之一:
                     GPIO_DIR_MODE_IN // 輸入方向
                     GPIO_DIR_MODE_OUT // 輸出方向
                     GPIO_DIR_MODE_HW // 硬件控制     
返回      無(wú)

3:功能        設(shè)置所選GPIO端口指定管腳的驅(qū)動(dòng)強(qiáng)度和類(lèi)型   
原型      void GPIOPadConfigSet(unsigned long ulPort,
                      unsigned char ucPins,
                      unsigned long ulStrength,
                      unsigned long ulPadType)      
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示
              ulStrength:指定輸出驅(qū)動(dòng)強(qiáng)度,應(yīng)當(dāng)取下列值之一:
              GPIO_STRENGTH_2MA // 2mA驅(qū)動(dòng)強(qiáng)度
              GPIO_STRENGTH_4MA // 4mA驅(qū)動(dòng)強(qiáng)度
              GPIO_STRENGTH_8MA // 8mA驅(qū)動(dòng)強(qiáng)度
              GPIO_STRENGTH_8MA_SC // 帶轉(zhuǎn)換速率(Slew Rate)
                                                             控制的8mA驅(qū)動(dòng)
              ulPadType:指定管腳類(lèi)型。應(yīng)當(dāng)取下列值之一:
              GPIO_PIN_TYPE_STD // 推挽
              GPIO_PIN_TYPE_STD_WPU // 帶弱上拉的推挽
              GPIO_PIN_TYPE_STD_WPD // 帶弱下拉的推挽
              GPIO_PIN_TYPE_OD // 開(kāi)漏
              GPIO_PIN_TYPE_OD_WPU // 帶弱上拉的開(kāi)漏
              GPIO_PIN_TYPE_OD_WPD // 帶弱下拉的開(kāi)漏
              GPIO_PIN_TYPE_ANALOG // 模擬比較器      
返回      無(wú)


4、GPIO管腳類(lèi)型設(shè)置
這是一系列以GPIOPinType開(kāi)頭的函數(shù)。對(duì)于前3個(gè)函數(shù),名稱(chēng)太長(zhǎng),所以在我們實(shí)際編程當(dāng)中常常采用簡(jiǎn)短的定義:
#define    GPIOPinTypeIn              GPIOPinTypeGPIOInput
#define    GPIOPinTypeOut            GPIOPinTypeGPIOOutput
#define    GPIOPinTypeOD            GPIOPinTypeGPIOOutputOD

函數(shù)GPIOPinTypeGPIOInput( )
功能      設(shè)置所選GPIO端口指定的管腳為高阻輸入模式   
原型      void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins)
參數(shù)      ulPort:所選GPIO端口的基址
        ucPins:指定管腳的位組合表示      
返回      無(wú)
舉例:GPIOPinTypeGPIOInput (GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1)

5:函數(shù)GPIOPinTypeGPIOOutput( )
功能      設(shè)置所選GPIO端口指定的管腳為推挽輸出模式   
原型      GPIOPinTypeGPIOOutput(unsigned long ulPort, unsigned char ucPins)  
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      無(wú)

6:函數(shù)GPIOPinTypeGPIOOutputOD( )
功能      設(shè)置所選GPIO端口指定的管腳為開(kāi)漏輸出模式   
原型      GPIOPinTypeGPIOOutputOD(unsigned long ulPort, unsigned char ucPins)
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      無(wú)
舉例:GPIOPinTypeGPIOOutputOD(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1)

7:函數(shù)GPIOPinTypeADC( )
   和這個(gè)函數(shù)一樣的還有:
   GPIOPinTypeCAN( )、 GPIOPinTypeComparator( )
   GPIOPinTypeI2C( ) 、 GPIOPinTypePWM( )
   GPIOPinTypeQEI( )、 GPIOPinTypeSSI( )
   GPIOPinTypeSSI( )、 GPIOPinTypeUART( )
   GPIOPinTypeUSBDigital( )
功能      設(shè)置所選GPIO端口指定的管腳為ADC功能
原型      void GPIOPinTypeADC(unsigned long ulPort, unsigned char ucPins)     
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      無(wú)  
說(shuō)明      對(duì)于Sandstorm和Fury家族,ADC管腳是獨(dú)立存在的,沒(méi)有與任何GPIO管
        腳復(fù)用,因此使用ADC功能時(shí)不需要調(diào)用本函數(shù)。對(duì)于2008年新推出的
        DustDevil家族,ADC管腳與GPIO管腳是復(fù)用的,因此使用ADC功能時(shí)就
        必須要調(diào)用本函數(shù)進(jìn)行配置。

8:GPIO管腳讀寫(xiě)
對(duì)GPIO管腳的讀寫(xiě)操作是通過(guò)函數(shù)GPIOPinWrite( )和GPIOPinRead( )實(shí)現(xiàn)的,這是兩個(gè)非常重要而且很常用的庫(kù)函數(shù)。

函數(shù)GPIOPinWrite( )
功能      向所選GPIO端口的指定管腳寫(xiě)入一個(gè)值,以更新管腳狀態(tài)      
原型      void GPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal);
參數(shù)      ulPort:所選GPIO端口的基址
                ucPins:指定管腳的位組合表示
                ucVal:寫(xiě)入指定管腳的值
               注:ucPins指定的管腳對(duì)應(yīng)的ucVal當(dāng)中的位如果是1,則置位相應(yīng)的管腳,如果是0,則
               清零相應(yīng)的管腳;ucPins未指定的管腳不受影響。
返回      無(wú)  
示例      GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); // 清除PA3
        GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0xFF); // 置位PB5

// 同時(shí)置位PD2、PD6
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_6, 0xFF);

// 變量ucData輸出到PA0~PA7
  GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, ucData);  

9:函數(shù)GPIOPinRead( )
功能      讀取所選GPIO端口指定管腳的值   
原型      long GPIOPinRead(unsigned long ulPort, unsigned char ucPins)     
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      返回1個(gè)位組合的字節(jié)。該字節(jié)提供了由ucPins指定管腳的狀態(tài),對(duì)應(yīng)的位
              值表示GPIO管腳的高低狀態(tài)。ucPins未指定管腳位值是0。返回值已強(qiáng)制
              轉(zhuǎn)換為long型,因此位31:8應(yīng)該忽略。   
示例      // 讀取PA4,返回值保存在ucData里,可能的值是0x00或0x10
             ucData = GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_4);
            // 同時(shí)讀取PB1、PB2和PB6,返回PB1、PB2和PB6的位組合存在ucData里 ucData = GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_1 |GPIO_PIN_2 | GPIO_PIN_6);
// 讀取整個(gè)PF端口
ucData = GPIOPinRead(GPIO_PORTF_BASE, 0xFF);

10、GPIO中斷

在Stellaris系列ARM里,每個(gè)GPIO管腳都可以作為外部中斷輸入。中斷的觸發(fā)類(lèi)型分為邊沿觸發(fā)和電平觸發(fā)兩大類(lèi),共5種,用起來(lái)非常靈活。
(1)配置GPIO管腳的中斷觸發(fā)方式可以通過(guò)調(diào)用函數(shù)GPIOIntTypeSet( )來(lái)實(shí)現(xiàn),函數(shù)GPIOIntTypeGet( )用來(lái)獲取配置情況。
(2)函數(shù)GPIOPinIntEnable( )和GPIOPinIntDisable( )用來(lái)使能和禁止GPIO管腳中斷。
(3)函數(shù)GPIOPinIntStatus( )用來(lái)獲取GPIO管腳的中斷狀態(tài)。在同一個(gè)GPIO端口上,8個(gè)GPIO管腳的中斷向量都是共用的。如果同時(shí)配置了同一端口上的多個(gè)管腳中斷,則可以先利用函數(shù)GPIOPinIntStatus( )讀取中斷狀態(tài),再進(jìn)一步確認(rèn)具體是哪個(gè)管腳產(chǎn)生的中斷請(qǐng)求。
(4)函數(shù)GPIOPinIntClear( )用來(lái)及時(shí)清除GPIO管腳的中斷狀態(tài)。
(5)函數(shù)GPIOPortIntRegister( )用來(lái)注冊(cè)一個(gè)GPIO端口中斷服務(wù)函數(shù),而注銷(xiāo)的方法是調(diào)用函數(shù)GPIOPortIntUnregister( )。

A:函數(shù)GPIOIntTypeSet( )
能   設(shè)置所選GPIO端口指定管腳的中斷觸發(fā)類(lèi)型      
原型      void GPIOIntTypeSet(unsigned long ulPort, unsigned char ucPins,
                                                  unsigned long ulIntType)
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示
              ulIntType:指定中斷觸發(fā)機(jī)制的類(lèi)型,應(yīng)當(dāng)取下列值之一:
              GPIO_FALLING_EDGE // 下降沿觸發(fā)中斷
              GPIO_RISING_EDGE // 上升沿觸發(fā)中斷
              GPIO_BOTH_EDGES // 雙邊沿觸發(fā)中斷(上升沿和下降沿都會(huì)觸發(fā)中斷)
              GPIO_LOW_LEVEL // 低電平觸發(fā)中斷
              GPIO_HIGH_LEVEL // 高電平觸發(fā)中斷   
返回      無(wú)
舉例:GPIOIntTypeSet (GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1), GPIO_FALLING_EDGE

B:函數(shù)GPIOIntTypeGet( )
功能      獲取所選GPIO端口指定管腳的中斷觸發(fā)類(lèi)型      
原型      unsigned long GPIOIntTypeGet(unsigned long ulPort, unsigned char ucPin)
參數(shù)      ulPort:所選GPIO端口的基址
             ucPins:指定管腳的位組合表示     
返回      與上表當(dāng)中參數(shù)ulIntType的取值相同

C:函數(shù)GPIOPinIntEnable( )
功能      使能所選GPIO端口指定管腳的中斷      
原型      void GPIOPinIntEnable(unsigned long ulPort, unsigned char ucPins)      
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      無(wú)
D:函數(shù)GPIOPinIntDisable( )
功能      禁止所選GPIO端口指定管腳的中斷      
原型      void GPIOPinIntDisable(unsigned long ulPort, unsigned char ucPins)     
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      無(wú)

E:函數(shù)GPIOPinIntStatus( )
功能      獲取所選GPIO端口所有管腳的中斷狀態(tài)      
原型      long GPIOPinIntStatus(unsigned long ulPort, tBoolean bMasked)   
參數(shù)      ulPort:所選GPIO端口的基址
              bMasked:屏蔽標(biāo)志,如果是true則返回屏蔽的中斷狀態(tài),如果是false則返
              回原始的中斷狀態(tài)  
返回      1個(gè)位組合字節(jié)。在該字節(jié)中置位的位用來(lái)識(shí)別一個(gè)有效的屏蔽中斷或原始
              中斷。字節(jié)的位0代表GPIO端口管腳0、位1代表GPIO端口管腳1,等等。
              返回值已被強(qiáng)制轉(zhuǎn)換為long型,因此位31:8應(yīng)該忽略。

F:函數(shù)GPIOPinIntClear( )
功能      清除所選GPIO端口指定管腳的中斷      
原型      void GPIOPinIntClear(unsigned long ulPort, unsigned char ucPins)
參數(shù)      ulPort:所選GPIO端口的基址
              ucPins:指定管腳的位組合表示   
返回      無(wú)

G:功能   注冊(cè)所選GPIO端口的一個(gè)中斷處理程序      
原型      void GPIOPortIntRegister(unsigned long ulPort, void
        (*pfnIntHandler)(void))      
參數(shù)      ulPort:所選GPIO端口的基址
              pfnIntHandler:函數(shù)指針,指向GPIO端口中斷處理函數(shù)      
返回      無(wú)


H:函數(shù)GPIOPortIntUnregister( )
功能      注銷(xiāo)所選GPIO端口的中斷處理程序      
原型      void GPIOPortIntUnregister(unsigned long ulPort)   
參數(shù)      ulPort:所選GPIO端口的基址
返回      無(wú)





    // Set GPIO A0 and A1 as UART pins.
    //
    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                      SYSCTL_XTAL_8MHZ);
    //
    // Enable the pull-ups on the JTAG signals.
    //
  //  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
   // GPIOPadConfigSet(GPIO_PORTC_BASE,
  //                   GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3,
   //                  GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

    //
    // Configure CAN Pins.

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);
    GPIOPinConfigure(GPIO_PB4_CAN0RX);
    GPIOPinConfigure(GPIO_PB5_CAN0TX);


    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeCAN(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    GPIOPinConfigure(GPIO_PF0_CAN1RX);
    GPIOPinConfigure(GPIO_PF1_CAN1TX);


    //
    // Enable the CAN controller.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN1);

    //
    // Reset the state of all the message object and the state of the CAN
    // module to a known state.
    //
    CANInit(CAN0_BASE);
    CANInit(CAN1_BASE);

    //
    // Configure the bit rate for the CAN device, the clock rate to the CAN
    // controller is fixed at 8MHz for this class of device and the bit rate is
    // set to 250000.
    //
    CANBitRateSet(CAN0_BASE, 8000000, 20000);
    CANBitRateSet(CAN1_BASE, 8000000, 20000);

    //
    // Take the CAN0 device out of INIT state.
    //
    CANEnable(CAN0_BASE);
    CANEnable(CAN1_BASE);

    //
    // Enable interrups from CAN controller.
    //
    CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR);
    CANIntEnable(CAN1_BASE, CAN_INT_MASTER | CAN_INT_ERROR);

    //
    // Set up the message object that will receive all messages on the CAN
    // bus.
    //
    //CANConfigureNetwork();
    // This message object will receive updates for the LED brightness.
    //
    g_MsgObjectLED.ulMsgID = 0x21;
    g_MsgObjectLED.ulMsgIDMask = 0;

幾個(gè)頭文件的說(shuō)明



Void  UARTIntHandler(void) 中斷函數(shù)的定義  The UART interrupt handler.


11:   Stellaris?UART正常的異步串行通信,涉及如下內(nèi)容:

   1) 波特率的產(chǎn)生
    波特率除數(shù)公式:
BRD= IBRD*FBRD = SystemClock/(16×BaudRate)
其中:
           BRD是22位的波特率除數(shù),由16位整數(shù)和6位小數(shù)組成
           IBRD是BRD的整數(shù)部分
           FBRD是BRD的小數(shù)部分
           SystemClock是系統(tǒng)時(shí)鐘(UART模塊的時(shí)鐘直接來(lái)自SystemClock)
          BaudRate是波特率(9600,38400,115200等)

例如,假定系統(tǒng)時(shí)鐘為20MHz,波特率115200。計(jì)算UARTIBRD和UARTFBRD?
BRD = 20,000,000 / (16 * 115,200) = 10.8507
UARTIBRD=10
UARTFBRD=integer(0.8507 * 64 + 0.5) = 54
在UART接收器空閑時(shí),如果數(shù)據(jù)輸入變成“低電平”,即接收到了起始位,則接收計(jì)數(shù)器開(kāi)始運(yùn)行,并且數(shù)據(jù)在Baud16的第8個(gè)周期被采樣。如果Rx在Baud16的第8周期仍然為低電平,則起始位有效,否則會(huì)被認(rèn)為是錯(cuò)誤的起始位并將其忽略。
       如果起始位有效,則根據(jù)數(shù)據(jù)字符被編程的長(zhǎng)度,在Baud16的每第16個(gè)周期對(duì)連續(xù)的數(shù)據(jù)位(即一個(gè)位周期之后)進(jìn)行采樣。如果奇偶校驗(yàn)?zāi)J绞鼓埽瑒t還會(huì)檢測(cè)奇偶校驗(yàn)位。
       最后,如果Rx為高電平,則有效的停止位被確認(rèn),否則發(fā)生幀錯(cuò)誤。當(dāng)接收到一個(gè)完整的字符時(shí),將數(shù)據(jù)存放在接收FIFO中。

2)  初始化
要使用UART,必須使能外設(shè)時(shí)鐘,這可以通過(guò)將RCGC1寄存器中的UART0、 UART1或 UART2 位置位來(lái)實(shí)現(xiàn)。
本小節(jié)討論了使用UART模塊所需的步驟。例如,假定系統(tǒng)時(shí)鐘為20MHz,且所需的UART配置為:
■ 波特率115200         ■ 數(shù)據(jù)長(zhǎng)度8位     ■ 1個(gè)停止位      ■ 無(wú)奇偶校驗(yàn)     ■ FIFO禁能      ■ 無(wú)中斷
因?yàn)閷?duì)UARTIBRD和UARTFBRD寄存器的寫(xiě)操作必須先于UARTLCRH寄存器,所以在對(duì)UART進(jìn)行編程時(shí),首先要考慮的是波特率除數(shù)(BRD)。而B(niǎo)RD可以通過(guò)等式計(jì)算得到:
BRD = 20,000,000 / (16 * 115,200) = 10.8507
即UARTIBRD 寄存器的DIVINT位域應(yīng)該設(shè)為10。加載到UARTFBRD 寄存器的值是通過(guò)以下等式算出來(lái)的:
UARTFBRD[DIVFRAC] = integer(0.8507 * 64 + 0.5) = 54
如此便得到了BRD的值,接著要按照以下順序?qū)ART配置寫(xiě)入模塊:
1. 將UARTCTL寄存器中的UARTEN位清零,以便將UART禁能。
2. 將BRD的整數(shù)部分寫(xiě)入U(xiǎn)ARTIBRD寄存器。
3. 將BRD的小數(shù)部分寫(xiě)入U(xiǎn)ARTFBRD寄存器。
4. 將所需的串行參數(shù)寫(xiě)入U(xiǎn)ARTLCRH寄存器(這種情況下為0x0000.0060)。
5. 將UARTCTL寄存器中的UARTEN位置位,以便將UART使能。
UARTConfigSetExpClk( )用來(lái)對(duì)UART端口的波特率、數(shù)據(jù)格式進(jìn)行配置。UARTConfigGetExpClk( )用來(lái)獲取當(dāng)前的配置情況。參見(jiàn)表1和表2的描述。
功能      UART配置(要求提供明確的時(shí)鐘速率)      
原型      void UARTConfigSetExpClk(unsigned long ulBase,unsigned long ulUARTClk, unsigned long ulBaud,
                                                                    unsigned long ulConfig)      
參數(shù)       ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE
                      ulUARTClk:提供給UART模塊的時(shí)鐘速率,即系統(tǒng)時(shí)鐘頻率
                      ulBaud:期望設(shè)定的波特率
                      ulConfig:UART端口的數(shù)據(jù)格式,取下列各組數(shù)值之間的“或運(yùn)算”組合形式:
                      ● 數(shù)據(jù)字長(zhǎng)度
                         UART_CONFIG_WLEN_8 // 8位數(shù)據(jù)
                         UART_CONFIG_WLEN_7 // 7位數(shù)據(jù)
                         UART_CONFIG_WLEN_6 // 6位數(shù)據(jù)
                         UART_CONFIG_WLEN_5 // 5位數(shù)據(jù)
                     ● 停止位
                         UART_CONFIG_STOP_ONE // 1個(gè)停止位
                         UART_CONFIG_STOP_TWO // 2個(gè)停止位(可降低誤碼率)
                     ● 校驗(yàn)位
                        UART_CONFIG_PAR_NONE // 無(wú)校驗(yàn)
                        UART_CONFIG_PAR_EVEN // 偶校驗(yàn)
                        UART_CONFIG_PAR_ODD // 奇校驗(yàn)
                        UART_CONFIG_PAR_ONE // 校驗(yàn)位恒為1
                        UART_CONFIG_PAR_ZERO // 校驗(yàn)位恒為0
返回      無(wú)
表2 函數(shù)UARTConfigGetExpClk( )
功能      獲取UART的配置(要求提供明確的時(shí)鐘速率)  
原型      void UARTConfigGetExpClk(unsigned long ulBase, unsigned long ulUARTClk,
                                                                unsigned long *pulBaud, unsigned long *pulConfig)      
參數(shù)      ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE
                  ulUARTClk:提供給UART模塊的時(shí)鐘速率,即系統(tǒng)時(shí)鐘頻率
                  pulBaud:指針,指向保存獲取的波特率的緩沖區(qū)
                  pulConfig:指針,指向保存UART端口的數(shù)據(jù)格式的緩沖區(qū),參見(jiàn)表1參數(shù)ulConfig的描述  
返回      無(wú)






在實(shí)際編程時(shí),往往用兩個(gè)形式更簡(jiǎn)單的宏函數(shù)UARTConfigSet( )和UARTConfigGet( )來(lái)代替上述兩個(gè)庫(kù)函數(shù)。參見(jiàn)表3和表4的描述。

表3宏函數(shù)UARTConfigSet( )
功能      UART配置(自動(dòng)獲取時(shí)鐘速率)   
原型      #define UARTConfigSet(a, b, c)   UARTConfigSetExpClk(a, SysCtlClockGet( ), b, c)
參數(shù)      詳見(jiàn)表1的描述  
返回      無(wú)  
說(shuō)明      本宏函數(shù)常常用來(lái)代替函數(shù)UARTConfigSetExpClk( ),在調(diào)用之前應(yīng)當(dāng)先調(diào)用
               SysCtlClockSet()函數(shù)設(shè)置系統(tǒng)時(shí)鐘(不要使用誤差很大的內(nèi)部振蕩器IOSC、IOSC/4、
                                                                          INT30等)
示例      // 配置UART0:波特率9600,8個(gè)數(shù)據(jù)位,1個(gè)停止位,無(wú)校驗(yàn)
               UARTConfigSet(UART0_BASE, 9600, UART_CONFIG_WLEN_8 |
                                         UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
               // 配置UART1:波特率最大,5個(gè)數(shù)據(jù)位,1個(gè)停止位,無(wú)校驗(yàn)
               UARTConfigSet(UART1_BASE, SysCtlClockGet( ) / 16, UART_CONFIG_WLEN_5 |
                                          UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
               // 配置UART2:波特率2400,8個(gè)數(shù)據(jù)位,2個(gè)停止位,偶校驗(yàn)
               UARTConfigSet(UART2_BASE, 2400, UART_CONFIG_WLEN_8 |
                           UART_CONFIG_STOP_TWO | UART_CONFIG_PAR_EVEN);

表4宏函數(shù)UARTConfigGet( )
功能      獲取UART的配置(自動(dòng)獲取時(shí)鐘速率)
原型      #define UARTConfigGet(a, b, c)      UARTConfigGetExpClk(a,
                                                    SysCtlClockGet( ), b, c)      
參數(shù)      詳見(jiàn)表1和表2的描述      
返回      無(wú)  













函數(shù)UARTParityModeSet( )用來(lái)設(shè)置校驗(yàn)位的類(lèi)型,但在實(shí)際編程時(shí)一般不會(huì)用到它,因?yàn)樵赨ARTConfigSet( )的參數(shù)里已經(jīng)包含了對(duì)校驗(yàn)位的配置。函數(shù)UARTParityModeGet( )用來(lái)獲取校驗(yàn)位的設(shè)置情況。參見(jiàn)表5和表6的描述。
功能      設(shè)置指定UART端口的校驗(yàn)類(lèi)型     
原型      void UARTParityModeSet(unsigned long ulBase, unsigned long ulParity)      
參數(shù)      ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE
                ulParity:指定使用的校驗(yàn)類(lèi)型,取下列值之一:
                               UART_CONFIG_PAR_NONE // 無(wú)校驗(yàn)
                               UART_CONFIG_PAR_EVEN  // 偶校驗(yàn)
                               UART_CONFIG_PAR_ODD   // 奇校驗(yàn)
                               UART_CONFIG_PAR_ONE   // 校驗(yàn)位恒為1
                               UART_CONFIG_PAR_ZERO // 校驗(yàn)位恒為0   
返回      無(wú)  

功能      獲取指定UART端口正在使用的校驗(yàn)類(lèi)型     
原型      unsigned long UARTParityModeGet(unsigned long ulBase)      
參數(shù)      ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE 返回      校驗(yàn)類(lèi)型,與表5當(dāng)中參數(shù)ulParity的取值相同


函數(shù)UARTFIFOLevelSet( )和UARTFIFOLevelGet( )用來(lái)設(shè)置和獲取收發(fā)FIFO觸發(fā)中斷時(shí)的深度級(jí)別。參見(jiàn)表7和表8描述
功能      設(shè)置使指定UART端口產(chǎn)生中斷的收發(fā)FIFO深度級(jí)別      
原型      void UARTFIFOLevelSet(unsigned long ulBase, unsigned long ulTxLevel, unsigned long ulRxLevel)
參數(shù)      ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE
                     ulTxLevel:發(fā)送中斷FIFO的深度級(jí)別,取下列值之一:
                                 UART_FIFO_TX1_8 // 在1/8深度時(shí)產(chǎn)生發(fā)送中斷
                                     UART_FIFO_TX2_8 // 在1/4深度時(shí)產(chǎn)生發(fā)送中斷
                                     UART_FIFO_TX4_8 // 在1/2深度時(shí)產(chǎn)生發(fā)送中斷
                                     UART_FIFO_TX6_8 // 在3/4深度時(shí)產(chǎn)生發(fā)送中斷
                                     UART_FIFO_TX7_8 // 在7/8深度時(shí)產(chǎn)生發(fā)送中斷
                   注:當(dāng)發(fā)送FIFO里剩余的數(shù)據(jù)減少到預(yù)設(shè)的深度時(shí)觸發(fā)中斷,而非填充到預(yù)設(shè)深度時(shí)觸發(fā)中 斷。因
                         此在需要發(fā)送大量數(shù)據(jù)的應(yīng)用場(chǎng)合,為了減少中斷次數(shù)提高發(fā)送效率,發(fā)送FIFO中斷觸發(fā)深度
                         級(jí)別設(shè)置的越淺越好,如設(shè)置為UART_FIFO_TX1_8。
                   ulRxLevel:接收中斷FIFO的深度級(jí)別,取下列值之一:
                              UART_FIFO_RX1_8 // 在1/8深度時(shí)產(chǎn)生接收中斷
                                  UART_FIFO_RX2_8 // 在1/4深度時(shí)產(chǎn)生接收中斷
                                  UART_FIFO_RX4_8 // 在1/2深度時(shí)產(chǎn)生接收中斷
                                  UART_FIFO_RX6_8 // 在3/4深度時(shí)產(chǎn)生接收中斷
                                  UART_FIFO_RX7_8 // 在7/8深度時(shí)產(chǎn)生接收中斷
                    注:當(dāng)接收FIFO里已有的數(shù)據(jù)累積到預(yù)設(shè)的深度時(shí)觸發(fā)中斷,因此在需要接收大量數(shù)據(jù)的應(yīng)用場(chǎng)
                          合,為了減少中斷次數(shù)提高接收效率,接收FIFO中斷觸發(fā)深度級(jí)別設(shè)置的越深越好,如設(shè)置為
                          UART_FIFO_RX7_8。   
返回      無(wú)


功能      獲取使指定UART端口產(chǎn)生中斷的收發(fā)FIFO深度級(jí)別      
原型      void UARTFIFOLevelGet(unsigned long ulBase, unsigned long *pulTxLevel,
                                                           unsigned long *pulRxLevel)  
參數(shù)      ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE
                   pulTxLevel:指針,指向保存發(fā)送中斷FIFO的深度級(jí)別的緩沖區(qū)
                   pulRxLevel:指針,指向保存接收中斷FIFO的深度級(jí)別的緩沖區(qū)      
返回      無(wú)

(2)  使能與禁止
函數(shù)UARTEnable( )和UARTDisable( )用來(lái)使能和禁止UART端口的收發(fā)功能。一般是先配置UART,最后使能收發(fā)。當(dāng)需要修改UART配置時(shí),應(yīng)當(dāng)先禁止,配置完成后再使能。參見(jiàn)表9和表10的描述。





表11 函數(shù)UARTEnableSIR( )













表12  函數(shù)UARTDisableSIR( )












函數(shù)UARTDMAEnable( )和UARTDMADisable( )用來(lái)使能和禁止UART端口的DMA(Direct Memory Access,直接存儲(chǔ)器訪問(wèn))操作。在2008年新推出的DustDevil家族里,新增了一個(gè)μDMA控制器。UART端口也支持DMA傳輸,能夠提高大批量傳輸數(shù)據(jù)的效率。參見(jiàn)表13和表14的描述。




















函數(shù)UARTCharPut( )以輪詢(xún)的方式發(fā)送數(shù)據(jù),如果發(fā)送FIFO有空位則填充要發(fā)送的數(shù)據(jù),如果沒(méi)有空位則一直等待。參見(jiàn)表15的描述



函數(shù)UARTCharGet( )以輪詢(xún)的方式接收數(shù)據(jù),如果接收FIFO里有數(shù)據(jù)則讀出數(shù)據(jù)并返回,如果沒(méi)有數(shù)據(jù)則一直等待。參見(jiàn)表16的描述。
  函數(shù)UARTSpaceAvail( )用來(lái)探測(cè)發(fā)送FIFO里是否有可用的空位。該函數(shù)一般用在正式發(fā)送之前,以避免長(zhǎng)時(shí)間的等待。參見(jiàn)表17的描述。
函數(shù)UARTCharsAvail( )用來(lái)探測(cè)接收FIFO里是否有接收到的數(shù)據(jù)。該函數(shù)一般用在正式接收之前,以避免長(zhǎng)時(shí)間的等待。參見(jiàn)表18的描述。



以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便大家保存):
TI M3庫(kù)函數(shù)說(shuō)明.doc (1.21 MB, 下載次數(shù): 3)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
xxxx.欧美| 久久久久久亚洲精品美女| 国产刺激高潮av| 免费看日本黄色片| 69堂免费视频| 动漫精品视频| 欧美激情啊啊啊| 欧美一二三四在线| 比比资源先锋| 在线免费不卡视频| 日韩123区| 伊人av在线| 色网站免费观看| 国产 日韩 欧美 成人| 午夜视频在线网站| 国产精品波多野结衣| 国产自摸综合网| 久久综合色88| 亚洲风情亚aⅴ在线发布| 日韩影片中文字幕| 理论视频在线观看| 亚洲欧美精品中文第三| 日韩在线视频免费播放| 大尺度做爰床戏呻吟舒畅| 黄色激情在线视频| 久久综合一区| 国产精品免费视频xxxx| 久久久精品电影| 亚洲福利小视频| 日本韩国一区二区三区| 中文字幕在线免费不卡| 国产91精品一区二区麻豆网站 | 国产一区91| 狠狠色丁香婷婷综合影院| 成人在线观看免费播放| 女人天堂av在线播放| 日本不卡视频一区二区| 国产福利在线播放| 全免费一级毛片免费看| 欧美最猛性xxxx高清| 超碰在线人人干| 波多野结衣爱爱| 亚洲国产精品久久不卡毛片| 日韩中文字幕91| 亚洲欧美日韩高清在线| 日韩美女毛片| 91国内精品| www.欧美视频| 国产综合色区在线观看| 阿v视频在线观看| 黄色av电影在线播放| 天堂中文在线资| 91热爆在线观看| 黄色免费影视| 国产91福利| 天天躁日日躁狠狠躁超碰2020| 妞干网在线免费视频| 色偷偷久久人人79超碰人人澡| 久久精品视频一区二区三区| 国产精品一区免费在线观看| 二区在线播放| 三级理论午夜在线观看| 午夜男人视频在线观看| 黄色一级视频网站| 免费免费啪视频在线观看| 成人免费淫片| 国产主播福利| 毛片在线网址播放| 黄网站app在线观看大全免费视频| v888av成人| 毛片视频免费观看| 最新亚洲伊人网| 三级黄视频在线观看| 欧美少妇另类| 黄色一级片在线观看| 91一区二区三区在线| 深夜国产在线播放| 吉吉日韩欧美| 黄色欧美视频| 成人涩涩网站| 日本电影一区二区| 欧美精品成人| 日韩1区2区3区| 国产二区国产一区在线观看| a级精品国产片在线观看| 国产亚洲精品资源在线26u| 国产精品电影院| 亚洲国产成人av网| 欧美日韩黄色一区二区| 精品国产乱码久久| 日韩中文字幕国产| 51精品国产黑色丝袜高跟鞋| 91精品久久久久久久久| 久久精品中文字幕一区二区三区| 亚洲激情一区二区| 国产黄色一级网站| 人妻巨大乳一二三区| 日本美女bbw| 亚洲色图在线看| 亚洲免费av网站| 欧美色播在线播放| 日韩美女在线视频| 中文字幕免费国产精品| 91av视频在线播放| 高清不卡一区二区三区| 在线观看福利一区| 久久国产色av免费观看| 黑森林av导航| 欧美国产日韩在线观看成人| 亚洲成人第一网站| 中国女人内谢69xxxx视频| 免费aⅴ网站| 天堂v视频永久在线播放| aa片在线观看视频在线播放| 91精品成人久久| 热99久久精品| 国产99在线播放| 7777精品伊人久久久大香线蕉的 | 欧美色图亚洲| 男人的天堂www| 日本中文字幕在线2020| 88xx成人网| 欧美三级美国一级| 免费av成人在线| 国产视频一区二区三区在线观看| 亚洲午夜精品网| 亚洲国产精品va在线看黑人| 欧美日韩成人黄色| 高清一区二区三区视频| 131美女爱做视频| 最新中文字幕视频| 波多野结衣影片| 麻豆精品永久免费视频| 最新天堂资源在线资源| 欧洲av不卡| 我不卡手机影院| 不卡视频在线看| 欧美亚洲高清一区| 九九九热精品免费视频观看网站| 国产精品久久国产精品| 国产三区在线视频| 无码人中文字幕| www.国产黄色| 成人免费淫片免费观看| 9999热视频在线观看| 国产精品亚洲人成在99www| 久久电影网电视剧免费观看| 一区二区三区精品| 伊人久久五月天| 97人人干人人| 69久久久久久| 性无码专区无码| 日韩中文字幕影院| 中文字幕av在线| 日韩欧美三区| 日日摸夜夜添夜夜添精品视频| 亚洲精品ww久久久久久p站| 精品中文视频在线| 国产手机精品在线| 红桃视频一区二区三区免费| 午夜婷婷在线观看| 国内一卡2卡三卡四卡在线| 日韩另类在线| 欧美激情一级片一区二区| 国产精品久久久久婷婷二区次| 精品爽片免费看久久| 国产精品日本一区二区| www.四虎精品| 好男人在线视频www| 日韩a在线看| 国产一区二区三区不卡av| 国产综合久久久久久久久久久久| 欧美三级乱人伦电影| 国产精品av在线| 999精品视频在线| 中文字幕欧美在线观看| 免费中文字幕在线观看| 97人妻人人澡人人爽人人精品 | 色噜噜噜噜噜噜| 午夜av入18在线| 国产日韩精品在线看| 国产精品免费不| 日本一区二区综合亚洲| 最近中文字幕日韩精品 | 激情综合网五月激情| 色呦呦在线播放| 好看不卡的中文字幕| 亚洲香蕉伊在人在线观| av中文资源在线资源免费观看| 91综合网人人| 综合分类小说区另类春色亚洲小说欧美| 国产性色av一区二区| 日韩免费av电影| 国产激情无码一区二区三区| 99成人国产精品视频| 激情亚洲影院在线观看| 久久精品久久99精品久久| 欧美日韩国产一区二区三区地区| 国产日韩综合一区二区性色av| 岛国毛片在线播放| 精品国产乱码一区二区三| 国产www.大片在线| 久久久久亚洲| 欧美日韩加勒比精品一区| 国产精品美女无圣光视频| 久久久福利影院| 天天操天天操天天| 欧美hdxxx| 九九视频精品免费| 亚洲欧美日韩国产精品| 日韩不卡视频一区二区| 精品国产一区二区三区四| 调教在线观看| 日韩一区三区| 欧美日韩亚洲一区二区| 成人免费淫片aa视频免费| 九九精品久久久| аⅴ成人天堂中文在线| 亚洲涩涩在线| 成人国产免费视频| 久久精品欧美视频| 亚洲 中文字幕 日韩 无码| 亚洲毛片在线播放| 超碰在线97国产| 亚洲午夜剧场| 日韩a在线看| 成人羞羞网站入口| 亚洲一区视频在线| 成人免费网站在线看| 性感美女一区二区三区| 欧美娇小性xxxx| 久久天堂影院| 日本一区二区视频在线观看| 欧美一区二粉嫩精品国产一线天| 在线a免费观看| 日本一区精品久久久久影院| 欧美日韩国产网站| 久久精品亚洲一区二区三区浴池| 性欧美xxxx交| www.啪啪.com| 精品产品国产在线不卡| 欧美成人午夜精品免费| 日本三级视频网站| 人体久久天天| 大荫蒂欧美视频另类xxxx| 国产一区喷水| 久久国产一级片| 青青草免费在线视频| 性色一区二区| 亚洲视频999| 欧美日韩中文在线视频| 亚洲精品国产一区二区| 警花av一区二区三区| 亚洲国产一二三| 国产一区免费在线| а中文在线天堂| free性欧美| 开心久久婷婷综合中文字幕| 成人18视频在线播放| 91sa在线看| 日本午夜精品视频| 日本aaa在线观看| 日本中文一区二区三区| 日韩激情视频在线| 国产麻豆电影在线观看| 国产视频手机在线| 欧美jizz18| 无码av免费一区二区三区试看| 精品免费国产| 性色av一区二区三区四区| 国产精品av一区二区三区| 国产精品福利一区二区| 国产高清精品一区| 中文字幕一区二区三区四区视频 | 国产一区二区三区自拍| 欧美午夜寂寞影院| 欧美乱做爰xxxⅹ久久久| 亚洲欧美自偷自拍| 国产精品香蕉| 欧美一区二区三区免费在线看| 国产原创popny丨九色| 国产麻豆视频网站| 999久久久国产精品| 精品呦交小u女在线| 国产艳妇疯狂做爰视频| 久草在线免费福利| 国产在线不卡视频| 成人黄色免费看| 丁香社区五月天| 久久亚洲精品人成综合网| 欧美日韩一区二区免费视频| 青青青青草视频| 日本三级电影免费观看| 亚洲一级黄色| 欧美激情日韩图片| 91popny丨九色丨国产| 天天操综合520| 日韩欧美一区二区在线视频| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 欧美女人天堂| 综合天堂av久久久久久久| 综合网中文字幕| 久久日免费视频| 黄色网页在线观看| 中文字幕一区二区三区av| 亚洲精品高清国产一线久久| 日韩欧美一区二区三区视频| 亚洲精品2区| 欧美激情视频在线免费观看 欧美视频免费一 | 中文字幕免费高清| 巨大荫蒂视频欧美另类大| 人妻一区二区三区免费| 在线免费电影网| 国产伦理一区| 亚洲精品www久久久| 黄色免费视频网站| 在线免费看黄网站| 一区二区在线观看免费| 熟女少妇在线视频播放| 色婷婷亚洲十月十月色天| 国产精品香蕉一区二区三区| 国产精品视频入口| 欧美午夜春性猛交xxxx| 亚洲一区成人| 成人国产在线视频| 偷拍精品一区二区三区| 一区久久精品| 国产精品一区二区久久| 性色av蜜臀av| 一区二区免费不卡在线| 日产精品99久久久久久| 国产精品视频一区二区三区,| 一区二区小说| 色综合久久久888| 久久精品视频2| 久久99国产成人小视频| 欧美美女操人视频| 一本大道伊人av久久综合| 国产精品入口久久| 久久久久久久久久亚洲| 糖心vlog精品一区二区| 成人激情免费视频| 国产69久久精品成人| 99热这里是精品| 欧美片第1页综合| 亚洲va国产va天堂va久久| 伊人国产视频| 久草精品在线观看| 一区二区三区我不卡| 国产91大片| 日韩一区日韩二区| 粉色视频免费看| 国产夫妻在线| 亚洲第一黄色网| 日韩精品一区三区| 日韩精品二区| 91精品国产综合久久久久久蜜臀| 影音先锋国产| www..com久久爱| 免费毛片网站在线观看| 黄色在线小视频| 欧美性一二三区| 日本一级特级毛片视频| 超碰成人在线观看| 国内精品一区二区三区| 天天干天天摸天天操| 麻豆精品视频在线观看| 亚洲免费久久| 久久米奇亚洲| 欧美日韩大陆一区二区| 丝袜美腿小色网| 激情综合网站| 2020国产精品久久精品不卡| 91中文字幕| 亚洲国产高清不卡| 精品人妻二区中文字幕| 青青青国产精品| 欧美激情精品久久久久久免费印度| 日本精品一区二区在线观看| 男女性色大片免费观看一区二区| 亚洲精品在线视频观看| 中文字幕在线二区| 欧美日韩美女一区二区| 久久久一区二区三区四区| 四季av在线一区二区三区| 国产伦精品一区二区| 日本桃色视频| 色婷婷精品大视频在线蜜桃视频| 亚洲女人久久久| 久久久综合久久久| 日韩理论电影| 99久久一区三区四区免费| 福利视频1000| 日韩精品视频网站| a级黄色片免费| 日本高清视频在线播放| 亚洲第一综合天堂另类专| 国产男男gay网站| 蜜臀久久99精品久久久久久9| 日本香蕉视频在线观看|