下面就開始串口的學習了,關於串口的基本知識,稍微說下:
首先OK6410向PC機發送資料。具體流程為:TXD,平時為高電平,當要發送資料的時候那麼TXD就要拉低一段時間,這稱為起始位。然後發送需要發送的資料(先高後低),這段稱為資料位元。最後還有一個停止位,當然肯定是拉高了(等待下一次的資料發送)
同時PC機要接收來自OK6410的資料。接收流程為:開始PC機接收到的是高電平,當出現低電平的時候就知道要發資料了。然後進行檢測接收資料(先高後低)
校正位:發送完資料位元後,不放停止位,而是放校正位(奇、偶)學過51當單片機的人都明白串口的通訊原理(感覺我也是在廢話啊)~~~步入正題。。。。串口學習
首先聲明,這裡提到的串口都是指S3C6410 RSIC 微處理器上的通用非同步接收/發送器(UART)序列埠。
該 S3C6410 通用非同步接收和發送器( UART)提供了四個獨立的非同步串列 I / O (SIO)連接埠。每個非同步串列 I/O(SIO)連接埠通過中斷或者直接儲存空間存取(DMA)模式來操作。換句話說,UART 是通過產生一個中斷或 DMA 請求,在 CPU 和 UART 之間傳輸資料的。該 UART 使用系統時鐘的時間可以支援的位元速率最高為115.2kb/s。如果一外部裝置提供 ext_uclk0 或 ext_uclk1 ,則 UART 可以以更高的速度運行。每個UART 的通道包含了兩個 64 位元組收發
FIFO 儲存空間。
因為我們是在uboot上面進行的裸機程式實驗,所以應該瞭解並不完全是裸的,uboot上面已經對串口進行初始化了的。下面以串口0為例來說明
在地板手冊上可以看到這個
說明GPA是控制穿口0的GPIO口,我們就需要設定GPA了,從s3c6410的手冊上面可以看到這個
可以看出我們需要設定為串口模式,也就是00100010的模式以下代碼可以完成
GPACON &= ~0xff;
GPACON |= 0x22;
接下來我們還需要設定串口的格式:
8位元據位,1位停止位,無校正8N1
ULCON0 = 0x3; /* 資料位元:8, 無較驗, 停止位: 1, 8n1 */
/* ULCON0 */
ULCON0 = 0x3; /* 資料位元:8, 無較驗, 停止位: 1, 8n1 */
UCON0 = 0x5; /* 使能UART發送、接收/使用PCLK */
UFCON0 = 0x01; /* FIFOENABLE */
UMCON0 = 0;
/* 傳輸速率 */
/* DIV_VAL = (PCLK /(bps x 16 ) ) - 1
* bps = 115200
* DIV_VAL = (66500000 / ( x 16 ) ) - 1
* = 35.08
*/
UBRDIV0 = 35;
/* x/16 = 0.08
* x = 1
*/
UDIVSLOT0 = 0x1;
串口就學習到這裡了。。。。。