久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1356|回復: 0
打印 上一主題 下一主題
收起左側

TI M3庫函數(shù)說明

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

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

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

功能      設置所選GPIO端口指定管腳的方向和模式   
原型      void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulPinIO)
參數(shù)      ulPort:所選GPIO端口的基址,應當取下列值之一:
                     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型號)里新增了一項AHB功能(GPIO高速總線訪問)。如果已經(jīng)用函數(shù)SysCtlGPIOAHBEnable( )使能了AHB功能,則參數(shù)ulPort應當取下列值之一:
                     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:指定管腳的位組合表示,應當取下列值之一或者它們之間的任意“或運算”組合形式:
                     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:管腳的方向或模式,應當取下列值之一:
                     GPIO_DIR_MODE_IN // 輸入方向
                     GPIO_DIR_MODE_OUT // 輸出方向
                     GPIO_DIR_MODE_HW // 硬件控制     
返回      無

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


4、GPIO管腳類型設置
這是一系列以GPIOPinType開頭的函數(shù)。對于前3個函數(shù),名稱太長,所以在我們實際編程當中常常采用簡短的定義:
#define    GPIOPinTypeIn              GPIOPinTypeGPIOInput
#define    GPIOPinTypeOut            GPIOPinTypeGPIOOutput
#define    GPIOPinTypeOD            GPIOPinTypeGPIOOutputOD

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

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

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

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

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

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

// 同時置位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個位組合的字節(jié)。該字節(jié)提供了由ucPins指定管腳的狀態(tài),對應的位
              值表示GPIO管腳的高低狀態(tài)。ucPins未指定管腳位值是0。返回值已強制
              轉換為long型,因此位31:8應該忽略。   
示例      // 讀取PA4,返回值保存在ucData里,可能的值是0x00或0x10
             ucData = GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_4);
            // 同時讀取PB1、PB2和PB6,返回PB1、PB2和PB6的位組合存在ucData里 ucData = GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_1 |GPIO_PIN_2 | GPIO_PIN_6);
// 讀取整個PF端口
ucData = GPIOPinRead(GPIO_PORTF_BASE, 0xFF);

10、GPIO中斷

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

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

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

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

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

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

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


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





    // 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;

幾個頭文件的說明



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)時鐘(UART模塊的時鐘直接來自SystemClock)
          BaudRate是波特率(9600,38400,115200等)

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

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






在實際編程時,往往用兩個形式更簡單的宏函數(shù)UARTConfigSet( )和UARTConfigGet( )來代替上述兩個庫函數(shù)。參見表3和表4的描述。

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

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













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

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


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


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

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





表11 函數(shù)UARTEnableSIR( )













表12  函數(shù)UARTDisableSIR( )












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




















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



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



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


評分

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

查看全部評分

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久九九 | 久草精品视频 | 少妇诱惑av | 中文字幕视频在线 | 国产一区二区精品在线观看 | 日韩欧美一级 | av手机在线播放 | 亚洲成人精品在线 | 欧美精品中文字幕久久二区 | 中文二区| 性高湖久久久久久久久3小时 | av免费网址 | 日韩在线播放一区 | 国产成人精品一区 | 国产欧美日韩综合精品一区二区 | 精品一区二区三区在线视频 | www.青青草 | 国产一区在线免费观看视频 | 一区二区视频 | 一片毛片 | 网站一区二区三区 | 日韩av免费看 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 色妹子综合网 | 国产精品一区二区三区在线播放 | 国产在线精品一区二区三区 | 成人精品一区二区 | 久久午夜国产精品www忘忧草 | 国产激情综合五月久久 | 成人亚洲网站 | 国产精品久久久久久久久久 | 国产精品高清一区二区三区 | 欧美日韩中文字幕 | 久久精品国产一区二区电影 | 中文字幕在线欧美 | 欧美一页 | 91视频精选| 亚洲国产精品久久 | 日韩一区在线观看视频 | 天天综合永久入口 | 精品三区 |