天天看點

學習uboot前奏之hardware-uart[s3c2440]

學習uboot的前奏篇終于要完結了,在這篇UART後,我們将正式開始Uboot的學習,那麼現在開始今天的話題。

UART稱為通用異步收發器,即Universal Asynchronous Receiver Transmitter。發送資料的時候,CPU将資料輸入UART,UART按照一定的格式在一根電線上串行發出,接收資料時,UART檢查另一根電線上的信号,将串行收集放在緩沖區中,CPU可讀取UART的資料。UART之間以全雙工方式傳輸資料。

學習uboot前奏之hardware-uart[s3c2440]

從上圖可以看出UART最簡單的連線,隻需要三根TxD,RxD,Gnd用于給雙方提供參考電平。

TxD、RxD資料線以“位”為最小的傳輸機關。幀有具有完整意義的,不可分割的若幹位組成,包含開始位、資料位、校驗位和停止位。發送資料之前,UART雙方需要約定資料的傳輸速率、資料的傳輸格式。

下面說資料傳輸的流程。

  1. 平時資料線處于“空閑”狀态(1狀态)
  2. 當要發送資料時,UART改變TxD資料線的狀态(變為0狀态)并維持一位的時間 ,這樣接收方檢測到開始位後,再等待1.5位的時間就開始一位一位地檢測資料線的狀态得到傳輸的資料。
  3. UART一幀中可以有5、6、7、8位的資料,發送方一位改變資料線的狀态,将他們發送出去,首先發送的是最低位。
  4. 如果使用校驗功能,UART在發送完資料位後,還要發送一個校驗位。校驗有奇偶之分—資料線連同校驗位中的1資料等于奇數或者偶數。
  5. 最後,發送停止位,資料線恢複到“空閉”狀态。停止位有三種:1位,1.5位,2位。

對于S3C2440來說,有三個獨立的通道,每個通道可以工作在中斷或者DMA模式。S3C2440 UART收發都最大有64位元組的FIFO,發送資料時,CPU先将資料寫入到FIFO到,然後UART自動将FIFO中的資料複制到“發送移位器”中,發送移位器将資料一位一位地發送到Tx資料線上,接收資料時,“接收移位器”将Rx資料線上的資料一位一位接收進來然後複制到接收FIFO中,CPU即可從中讀取資料。

學習uboot前奏之hardware-uart[s3c2440]

下面将結合前面說到中斷和本章的UART

第一步初始化序列槽

void uart0_init(void)
{
    GPHCON  |= ;    // GPH2,GPH3用作TXD0,RXD0
    GPHUP   = ;     // GPH2,GPH3内部上拉

    ULCON0  |= ;     // 8N1(8個資料位,無較驗,1個停止位)
    UCON0   = ;     // 中斷或者查詢方式,UART時鐘源為PCLK
    UMCON0  = ;     // 不使用流控
    UBRDIV0 = UART_BRD; // 波特率為115200
    URXH0  =;
}
           

第二步打開序列槽中斷

void init_irq( )
{
    /*打開UART0 RX中斷,TX不打開中斷*/
    INTSUBMSK &=(~(<<)) ;
    /*打開UART0中斷*/
    INTMSK    &=  (~(<<));
}
           

第三步定義中斷處理程式

void INT_Handle()
{
    unsigned long oft = INTOFFSET;

    unsigned char c;   

    if(SUBSRCPND & (<<))    //接收中斷
    {
        c = getc();
        if((<<)==(GPFDAT &((<<))))
        {
            GPFDAT &= ~(<<);  
        }else if(==(GPFDAT &((<<))))
        {
            GPFDAT |= (<<);  
        }
        SUBSRCPND |= (<<);
        if (isDigit(c) || isLetter(c))  
            putc(c+);
    }

    SRCPND = <<oft;
    INTPND = <<oft;

}
           

上面的程式的主要功能:中斷方式接收UART發過來的資料,中斷處理程式中将接收的資料加1,再發送出去,同時每進入一次中斷LED的電平就取反一次,經測試本程式工作正常。

至此學習uboot的所有準備工作已經完成,接下來将正式開始uboot的學習。

繼續閱讀