(5)CC3200学习之串口

CC3200串口设置一般有以下步骤

1、引脚映射

2、串口时钟使能

3、波特率及其参数设置

4、FIFO设置

5、中断设置

6、中断函数编写

7、发送数据和接收数据

1.引脚映射

PinTypeUART(ulPin, ulPinMode);

Parameters:

       unsigned long ulPin

              设置Pin端口,Pin_XX

       unsigned long ulPinMode

              设置端口的模式,Pin_Mode_X,X可取0-15,分别对应不同的模式可在driverlib中的pin_h查看。

如:

PinTypeUART(PIN_55, PIN_MODE_3);

 

2.串口时钟使能

PRCMPeripheralClkEnable(ulPeripheral, ulClkFlags);

Parameters:

       unsignedlong ulPeripheral

              一个外设的端口号,取值可在driverlib中的prcm_h中查看。

       unsignedlong ulClkFlags

              可以或逻辑取值两种,PRCM_RUN_MODE_CLK和PRCM_SLP_MODE_CLK,前一种启用时钟,后一种关闭时钟。

如:

PRCMPeripheralClkEnable(PRCM_UARTA0,PRCM_RUN_MODE_CLK);

 

3.波特率及参数设置

UARTConfigSetExpClk(ulBase, ulUARTCLK, ulBaud, ulConfig);

Parameters:

        unsigned long ulBase

              UART端口的基地址。通常取值为即为ulBase,0号串口。

       unsigned long ulUARTCLK

              UART的时钟速率。通常使用函数PRCMPeripheralClockGet(PRCM_UARTA0)来获得

       unsigned long ulBaud

              波特率,即为,115200

       unsigned long ulConfig

              (UART_CONFIG_WLEN_X |UART_CONFIG_STOP_X|UART_CONFIG_PAR_X)

              由三个或逻辑组成分别为数据位(X可取8,7,6,5,指几位数据),停止位(X可取ONE,TWO,即可设置一或两位停止位)和校验位(可取NONE,EVEN,ODD,ZERO,即没有校验位,偶校验,奇校验和零点校验)

如:

UARTConfigSetExpClk(

UARTA0_BASE,

PRCMPeripheralClockGet(PRCM_UARTA0),

115200,

(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE)

);

 

4.FIFO设置

使能串口0的FIFO功能,当设置接收触发中断后,每接收到一个字符就触发一个中断。

UARTFIFODisable(ulBase);

Parameters:

       unsigned long ulBase

设置FIFO的触发阀值,CC3200的FIFO是16个8bit的寄存器,当设置接收触发中断,UART_FIFO_RX1_8设置的阀值是2字节,当接收到2个以上的字节就会触发中断。

UARTFIFOLevelSet(ulBase, ulTxLevel, ulRxLevel);

Parameters:

       unsigned long ulBase

              基地址0号串口

       unsigned long ulTxLevel

              发送FIFO中断级别,UART_FIFO_TXX_8,X的位置可取1,2,4,6,7,五个级别。

      unsigned long ulRxLevel

              接收FIFO中断级别,UART_FIFO_TXX_8,X的位置可取1,2,4,6,7,五个级别。

如:

UARTFIFOLevelSet(UARTA0_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8);

5.中断设置

注册一个中断函数

UARTIntRegister(ulBase, *pfnHandler);

Parameters:

       unsigned long ulBase

              基地址0号串口

       void(*) void    pfnHandler

              中断回调函数,其函数声明为uartvoid uart_handle(void)

6.中断函数编写

首先获取串口中断状态寄存器的值

UARTIntStatus(ulBase, bMasked);

Parameters:

       unsigned long ulBase

              基地址0号串口

       tBoolean          bMasked

              获取经过屏蔽的中断状态寄存器,一般取true

如:

UARTIntStatus(UARTA0_BASE,true);

然后查看接收的FIFO有无数据

UARTCharsAvail(UARTA0_BASE);

最后清除中断标志位,必须在中断处理程序中调用此函数,以便在退出时立即阻止该中断再次被识别。

UARTIntClear(UARTA0_BASE,UART_INT_RX);

7.收发数据

获取数据, 该函数从指定端口的接收FIFO中获取一个字符。如果没有可用字符,则该函数将一直等待直到返回一个字符为止。

UARTCharGet(ulBase);

Parameters:

       unsigned long ulBase

            基地址0号串口

如:

UARTCharGet(UARTA0_BASE);

发送数据,该函数将字符ucdata为指定端口发送FIFO。如果在传输FIFO中没有可用空间,则该函数等待返回之前有可用空间。

UARTCharPut(ulBase, ucData);

Parameters:

      unsigned long ulBase

            基地址0号串口

      unsigned char ucData

            要发送的字符数据

如:

UARTCharPut(UARTA0_BASE,'a');

发送一个字母a

 

下面举个例子:

voiduart_handle(void) {  

    int i,k,j;

    #if 1  

    //获取经过屏蔽的中断状态

    i = UARTIntStatus(UARTA0_BASE,true);

    //接收中断

    if(i&UART_INT_RX){

        //判断FIFO有没有数据

        while(UARTCharsAvail(UARTA0_BASE)){

            //获取接收的数据,并直接再发送

            UARTCharPut(UARTA0_BASE,UARTCharGet(UARTA0_BASE));

        }

    //清除中断标志位

    UARTIntClear(UARTA0_BASE,UART_INT_RX);

    }

}

void uart0_Init(void) {

    // 使能时钟

    PRCMPeripheralClkEnable(PRCM_UARTA0,PRCM_RUN_MODE_CLK);

    //引脚映射

    PinTypeUART(PIN_55,PIN_MODE_3);

    PinTypeUART(PIN_57,PIN_MODE_3);

    //波特率及其参数设置 UARTConfigSetExpClk(UARTA0_BASE,PRCMPeripheralClockGet(PRCM_UARTA0),         UART_BAUD_RATE,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|

                          UART_CONFIG_PAR_NONE));

    //设置中断回调函数

    UARTIntRegister(UARTA0_BASE,uart_handle);

    //设置接收中断

    UARTIntEnable(UARTA0_BASE,UART_INT_RX);

    //失能fifo

    UARTFIFODisable(UARTA0_BASE);

    //设置FIFO的阀值    //UARTFIFOLevelSet(UARTA0_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8);

    //发送一个a

    UARTCharPut(UARTA0_BASE,'a');

}

void main(){

    char cString[MAX_STRING_LENGTH+1];

    char cCharacter;

    int iStringLength =0;

    // Initailizing theboard

    BoardInit();

    uart0_Init();

    while(1){};

}

你可能感兴趣的:(CC3200)