乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      嵌入式學習筆記之UART通信協(xié)議

       昵稱2009261 2014-04-25

              UART是用于控制計算機與串行設備的芯片。有一點要注意的是,它提供了數(shù)據(jù)終端設備接口,這樣計算機就可以和調制解調器或其它使用RS-232C接口的串行設備通信了。作為接口的一部分,UART還提供以下功能:

      1. 將由計算機內(nèi)部傳送過來的并行數(shù)據(jù)轉換為輸出的串行數(shù)據(jù)流;
      2. 將計算機外部來的串行數(shù)據(jù)轉換為字節(jié),供計算機內(nèi)部使用并行數(shù)據(jù)的器件使用;
      3. 在輸出的串行數(shù)據(jù)流中加入奇偶校驗位,并對從外部接收的數(shù)據(jù)流進行奇偶校驗;
      4. 在輸出數(shù)據(jù)流中加入啟停標記,并從接收數(shù)據(jù)流中刪除啟停標記;
      5. 處理由鍵盤或鼠標發(fā)出的中斷信號(鍵盤和鼠票也是串行設備);
      6. 可以處理計算機與外部串行設備的同步管理問題;

             

      異步串口通信協(xié)議,工作原理是將傳輸數(shù)據(jù)的每個字符以串行方式一位接一位的傳輸。如下圖:

                

       

      其中每一位(bit)的意義如下:

           起始位:先發(fā)出一個邏輯“0”的信號,表示傳輸字符的開始。

           數(shù)據(jù)位:緊跟起始位之后。數(shù)據(jù)位的個數(shù)可以是4、5、6、7、8等,構成一個字符。通常采用ASCII碼。從最低位開始傳送,靠時鐘來定位。

           奇偶校驗位:數(shù)據(jù)位加上這一位后(跟在數(shù)據(jù)位尾部),使得“1”的位數(shù)應為偶數(shù)(偶校驗)或奇數(shù)(奇校驗),以此來校驗數(shù)據(jù)傳送的正確性。

           停止位:它是一個字符數(shù)據(jù)的結束標志??梢允?位、1.5位、2位的高電平(邏輯“1”)。

           空閑位:處于邏輯“1”狀態(tài),表示當前線路上沒有數(shù)據(jù)的傳送。

          波特率:是衡量數(shù)據(jù)傳輸速率的指針。表示為每秒鐘傳送的二進制位數(shù)(bit數(shù))。例如資料傳送速率為120字符/秒,而每一個字符為10位,則其傳送的波特率為:

                                                                                      10×120   =  1200字符/秒=1200波特。

           以上的數(shù)據(jù)位、奇偶校驗位、波特率等均可以在COM接口中設置。也可以在代碼中對UART寄存器的各位進行設置,UART寄存器的各位所代表的含義如下:

         

                   下面通過幾個小程序,了解UART通信協(xié)議進行數(shù)據(jù)傳輸?shù)倪^程:

      1. #include "2410lib.h"  
      2.   
      3. /********************************************************************************************* 
      4. * name:     uart0_test 
      5. * func:     uart test function 
      6. * para:     none 
      7. * ret:      none 
      8. * modify: 
      9. * comment:       
      10. *********************************************************************************************/  
      11. void uart0_test()  
      12. {  
      13.     char cInput[256];  
      14.     UINT8T ucInNo=0;  
      15.     char c;  
      16.     uart_init(0,115200,0); //define the baud rate  
      17.     uart_printf("\n UART0 Communication Test Example\n");     
      18.     uart_printf(" Please input words, then press Enter:\n");  
      19. #ifdef BOARDTEST      
      20.     sprintf(&cInput, "Type via UART0 to test.");  
      21.     print_lcd(195,170,0x1c,&cInput);      
      22. #endif  
      23.     uart_printf(" ");  
      24.     g_nKeyPress = 1;  
      25.     while(g_nKeyPress==1)           // only for board test to exit  
      26.     {  
      27.         c=uart_getch();  
      28.         //uart_sendbyte(c);  
      29.           
      30.         uart_printf("%c",c);  
      31.         if(c!='\r')  
      32.             cInput[ucInNo++]=c;  
      33.         else  
      34.         {  
      35.             cInput[ucInNo]='\0';  
      36.             break;  
      37.         }  
      38.     }  
      39.     delay(1000);      
      40.   
      41.     uart_printf(" \nThe words that you input are: %s\n",cInput);          
      42.     uart_printf(" end.\n");   
      43. }  
      44.   
      45. void Main(int argc,char **argv)  
      46. {  
      47.       
      48.     sys_init();         // Initial s3c2410's Clock, MMU, Interrupt,Port and UART       
      49.       
      50.     while(1)  
      51.     {  
      52.         uart0_test();  
      53.     }  
      54.     for(;;);  
      55.   
      56. }  

      在這里我們使用 uart_init 函數(shù)便完成了UART各個位的設置,現(xiàn)在來看看uart_init在系統(tǒng)中是如何定義的:

      1. void uart_init(int nMainClk, int nBaud, int nChannel)  
      2. {  
      3.     int i;  
      4.       
      5.     if(nMainClk == 0)  
      6.     nMainClk    = PCLK;  
      7.       
      8.     switch (nChannel)  
      9.     {  
      10.         case UART0:   
      11.         rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable  
      12.         rUMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable  
      13.         rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits  
      14.         // [10]       [9]     [8]     [7]          [6]      [5]        [4]         [3:2]          [1:0]  
      15.         // Clock Sel, Tx Int, Rx Int, Rx Time Out, Rx err,  Loop-back, Send break, Transmit Mode, Receive Mode  
      16.         // 0          1       0,      0            1        0          0,          01             01  
      17.         // PCLK       Level   Pulse   Disable      Generate Normal     Normal      Interrupt or Polling  
      18.         rUCON0  = 0x245;                            // Control register  
      19.         //rUBRDIV0=( (int)(nMainClk/16./nBaud) -1 );    // Baud rate divisior register 0  
      20.         rUBRDIV0=( (int)(nMainClk/16./nBaud+0.5) -1 );  // Baud rate divisior register 0      
      21.         break;  
      22.               
      23.     case UART1:   
      24.         rUFCON1 = 0x0;   //UART channel 1 FIFO control register, FIFO disable  
      25.         rUMCON1 = 0x0;   //UART chaneel 1 MODEM control register, AFC disable  
      26.         rULCON1 = 0x3;  
      27.         rUCON1  = 0x245;  
      28.         rUBRDIV1=( (int)(nMainClk/16./nBaud) -1 );  
      29.         break;  
      30.               
      31.         case UART2:   
      32.         rULCON2 = 0x3;  
      33.         rUCON2  = 0x245;  
      34.         rUBRDIV2=( (int)(nMainClk/16./nBaud) -1 );      
      35.         rUFCON2 = 0x0;   //UART channel 2 FIFO control register, FIFO disable  
      36.         break;  
      37.               
      38.     default:  
      39.         break;  
      40.     }  
      41.   
      42.     for(i=0;i<100;i++);  
      43.     delay(0);  
      44. }  

             UART0 --- UART2 便是開發(fā)板為我們提供的三個寄存器,通過rUFCON、rUMCON、rULCON、rUCON、rUBRDIV 等引腳的賦值完成UART寄存器的設置。

             關于更多ARM開發(fā)板的源碼,由于CSDN資源分享的頁面出現(xiàn)異常無法上傳分享,如有需要、給我留言,我發(fā)給大家。

             “往往都是事情改變?nèi)?,人卻改變不了事情?!奔仁侨绱?,為何不先改變自己呢?

             明天、學習繼續(xù)!

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多