<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 5125|回復: 0
    打印 上一主題 下一主題

    [提問] s3c2440串口通訊的相關配置,廣州信盈達嵌入式培訓

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2014-3-27 17:47:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    UART配置的相關寄存器如下(s3c2440手冊中的順序列出):
    聯系方式:QQ 1765841775電話15089711217
    信盈達實訓學院官網:http://www.edu118.com
    1.   ULCONn寄存器:線性控制寄存器
    功能:設置奇偶校驗,停止位, 數據位(5-8)
    注意:一般設置為無校驗,一個停止位,數據位為8,也就是常說的“8N1”,此時寄存器值為0x3。(bit[6]0為正常模式,否則為紅外模式);
    2.   UCONn寄存器:通道n控制器
    功能:選擇UART時鐘源、設置UART中斷方式
    注意:可選擇PCLK、UEXTCLKFCLK/n。bit[5]=1為回送模式,用于測試;bit[3:2]bit[1:0]分別控制傳輸和接收模式,初學者常設置為中斷請求或查詢模式,bit[3:2]bit[1:0]01。
    3.   UFCONn寄存器:FIFO控制寄存器
    功能:用于設置是否使用FIFO,設置各FIFO的觸發闕值,即發送FIFO中有多少個數據時產生中斷、接收FIFO中有多少個數據時產生中斷。并可以通過設置UFCONn寄存器來復位各個FIFO。讀取UFSTATn寄存器可以知道各個FIFO是否已經滿,其中有多少個數據。
    注意:bit[0]=1時,FIFO使能,否則禁止。初學者可不使用FIFO
    4.   UMCONn寄存器:UART MODEM控制寄存器
    注意:bit[4]=0,AFC無效
    5.UBRDIVn寄存器:波特率除數寄存器
    功能:設置波特率除數
    注意:UBRDIVn=(int)(UART時鐘/(波特率*16))-1;
    UART時鐘:PCLK,FCLK/n或者UEXTCLK,例如,如果波特率為115200bps并且UART時鐘為40MHz,則UBRDIVn為:
    UBRDIVn=(int)(40000000/(115200*16))-1=(int)(21.7)-1(取最接近的整數)=22-1=21。
    5.   UTRSTATn寄存器:接收/發送狀態寄存器
    功能:顯示接收/發送緩存寄存器狀態
    注意:在非FIFO模式時,bit[0]=1表明接收到數據;bit[1]=1表明發送緩存寄存器為空。在FIFO模式時,UFSTAT寄存器的相關位,具體見手冊。
    6.   UERSTATn寄存器:錯誤狀態寄存器
    功能:表示各種錯誤是否發生
    注意:初學者可以不關注其狀態,待深入學習時,再查相關資料
    7.   UFSTATn寄存器:FIFO狀態寄存器
    功能:表明FIFO的相關狀態
    注意:bit[14]=1,表明發送FIFO已滿,暫時不能再發送數據。Bit[6]=0,表明接收FIFO中有數據(個人理解,不過不太嚴謹)。
    8.   UMSTATn寄存器:UART MODEM 狀態寄存器
    注意:初學者可以不管
    9.   UTXHn寄存器:發送緩存寄存器
    功能:UART即會將它保存到緩沖區中,并自動發送出去
    注意:bit[7:0]=發送數據。
    10.            URXHn寄存器:接收緩存寄存器
    功能:當UART接收到數據時,CPU讀取這個寄存器,即可獲得數據。
    注意:bit[7:0]=接收數據;
    注:URXHnUTXHn有大、小端之分,定義寄存器時要注意,不過一般都是用小端法。
    以串口0為例:FCLK=400M,FCLK:HCLKCLK=1:4:8;波特率為115200
    注:特別重要的一點,與串口通訊有關的GPHCON要進行配置;這是初學者容易忽略的,我就忽略過,導致不能實現串口通訊,最后才找到原因。
    void Port_Init(void)
    {
       
       GPHCON = 0x00faaa;
       GPHUP = 0x7ff;
    }
    void Uart_Init(void)
    {
    //模式一
    /******PCLK is used as uart's clock****************/
    /***no FIFO---*************************************/
    #if 1
        ULCON0 = 0x3;   //8N1
        UCON0  = 0x245; //PCLK作為串口時鐘
        UFCON0 = 0x0;   //no FIFO
        UMCON0 = 0x0;   // AFC disable
        UBRDIV0=26;
    /**************************************************/
    #endif
    //模式二
    /**********************loop_uart-pclk—noFIFO*************/
    #if 0
        ULCON0 = 0x3;  //8N1
        UCON0 = 0x265; //bit[5] control loop mode: 1 is valid
        UFCON0 = 0x0;  //no FIFO
        UMCON0 = 0x0;   // AFC disable
        UBRDIV0=26;
    /**********************loop_uart********************/
    #endif
    //模式三
    /**********************uart--FIFO--PCLK*******************/
    #if 0
        ULCON0 = 0x3;  //8N1
        UCON0 = 0x245; // PCLK作為串口時鐘
        UFCON0 = 0x31; //bit0]=1表示使能FIFO  
       
        UMCON0 = 0x0;   // AFC disable
       
        UBRDIV0=26;
    /******************************************/
    #endif
    }
    注:有定義如下
    #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
    #define RdURXH0()   (*(volatile unsigned char *)0x50000024)
    使用模式一和模式二時,輸入和輸出函數可如下形式
    char Uart_Get_Char(void)
    {
       
       while(!(UTRSTAT0 & 0x1)); //Receive data ready
       
        return (char)(RdURXH0());
       
       
       
    }
    char Uart_Put_Char(char ch)
    {
       
        while(!(UTRSTAT0 & 0x2));   //Wait until THR is empty.
             WrUTXH0(ch);  
       
       return ch;
    }
    使用模式三時,輸入和輸出函數可用形式如下:
    char Uart_FIFO_Put_Char(char ch)
    {
       
    while((UFSTAT0 & 0x4000));  
         WrUTXH0(ch);  
       
       return ch;
    }
    char Uart_FIFO_Get_Char(void)
    {
       
    while(!(UFSTAT0 & 0x1f));  
       eturn (char)(RdURXH0());
    }
    聯系方式:QQ 1765841775電話15089711217
    信盈達實訓學院官網:http://www.edu118.com
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷