要正確計算串列埠波特率,首先要搞清楚晶元的時鐘工作原理,這部分在
s3c2410/s3c2440datasheet上寫的比較詳細,但對新手來說結合thisway同志
「s3c2410完全開發流程」中的timer和clock兩個實驗,邊做實驗邊看資料,更容易
理解。
我這裡只根據我的失敗經驗談一下設定波特率暫存器ubrdivn的值的計算要注意的一
個問題。
datasheet上ubrdivn暫存器部分寫著:
uart baud rate divisor registerthere are three uart baud rate divisor registers including ubrdiv0,
ubrdiv1 and ubrdiv2 in the uart block.the value stored in the baud rate divisor register (ubrdivn), is used to
determine the serial tx/rx clock rate (baudrate) as follows:ubrdivn = (int)( uart clock / ( buad rate x 16) ) –1
( uart clock: pclk, fclk/n or uextclk )
where, ubrdivn should be from 1 to (216-1), but can be set zero only
using the uextclk which should be smaller than pclk.for example, if the baud-rate is 115200 bps and uart clock is 40 mhz,
ubrdivn is:ubrdivn = (int)(40000000 / (115200 x 16) ) -1
= (int)(21.7) -1 [round to the nearest whole number]
= 22 -1 = 21
也就是說,只要知道這個uart clock 就計算出ubrdivn 的值,下面分別講:
1. uextclk
查手冊:the uart can support bit rates up to 115.2k bps using system
clock. if an external device provides the uart with uextclk, then the
uart can operate at higher speed.是說當用系統時鐘(system clock)時uart波
特率最高可達到115200,但是如果用這個uextclk(external clocks for the uart
operation)串列埠外設時鐘,可以設定115200以上的波特率。
2. pclk和fclk/n
這裡又分兩種情況:使用mpll和不使用mpll
我們知道s3c2410最高頻率可達266m,s3c2440最高頻率可達533m,而一般外接晶振
只有幾十m,如何使幾十m變成幾百m呢?這就是mpll的功勞了
s3c2410有兩個pll(phase locked loop,鎖相環,在高頻中學過,可以實現倍頻,
s3c2410的高頻就是由此電路產生的)。其中乙個是mpll,m即為main,用來產生三
種時鐘訊號:fclk(給cpu核供給時鐘訊號,我們所說的s3c2410的cpu主頻為200mhz
,就是指的這個時鐘訊號,相應的,1/fclk即為cpu時鐘週期)、hclk(為ahb bus
peripherals供給時鐘訊號,ahb為advanced high-performance bus)、pclk(為
apb bus peripherals供給時鐘訊號,apb為advanced peripherals bus)。ahb和
apb這兩種匯流排所連的外設是有區別的。ahb匯流排連線高速外設,低速外設則通過apb
匯流排互連。顯然,對不同匯流排上的外設,應該使用不同的時鐘訊號,ahb匯流排對應
hclk,apb匯流排對應pclk。那麼事先就應該弄清楚,每條匯流排對應的外設有那些,這
樣在設定好時鐘訊號後,對應外設的初始化的值就要依此而確定了。
當不使用mpll(即不設定mpllcon暫存器)時,外部晶振直接作為系統時鐘。一般外
部晶振有兩個,一是用於系統時鐘,為12mhz(或其他,由具體板子決定);乙個用
於實時時鐘(rtc,real time clock,根據cpu的要求送出或設定時鐘、日曆的各種
資料),為32.768khz。此時,pclk即為12mhz。
當使用mpll時,要通過對暫存器mpllcon和clkdivn的設定來得到fclk、hclk和pclk
。
得到這個uart clock(pclk, fclk/n or uextclk ),根據公式
ubrdivn = (int)( uart clock / ( buad rate x 16) ) –1
來計算就簡單了。
S3C2410 S3C2440開發板相關書籍
1 arm處理器裸機開發實戰 機制而非策略 王小強 主編 電子工業出版社 實驗平台 tq2440。裸跑中的經典教程,有注釋,例項多而實用,是目前市場上最受好評的2440 裸跑教程。讓您從微控制器51入手arm 從此再無憂。2.c os ii原理與arm應用程式設計 張勇 方勤 蔡鵬 許波 著 3.嵌...
s3c2410與s3c2440的部分細節區別整理
這兩個soc都是arm920,cpuid都是0x41129200,很多暫存器設定都是一樣的,但是你要想直接把2410的bootloader 核心拿到2440上用,那是肯定會出錯的 網上這樣的文章很多,大多都僅僅是巨集觀上比劃兩句,如攝像頭驅動 主頻之類,沒有什麼意義 細節是魔鬼,只有在細節上充分積累...
S3C6410和S3C2410的區別
s3c6400平台和s3c24xx平台而言,基本上沒什麼大的變化 1.記憶體支援ddr記憶體一般都是128m,起始位址是0x50000000,其他暫存器位址與s3c24xx有很大的不同。2.時鐘沒有了epll換上了mpll所以時鐘方面要小心了。3.新增tv卡的支援,以及keypad.的支援。4.fl...