[Armadillo:07478] Re: Armadillo-440のUART動作クロック

Takenoshita Koyo email@hidden
2011年 8月 16日 (火) 11:08:17 JST


竹之下です。

遅ればせながら、コメントします。
Armadillo-400シリーズ(i.MX25)へのOSポーティングの際には、クロック
の設定が一つの鬼門ですよね。

各モジュールへのクロックをどのクロックソースから生成できるかは、
以下のページの「Tool For Calculating i.MX25 Clock Settings」を
使うと分かりやすいです。
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX25_SW&fsrch=1

Armadillo-400シリーズで実際どのように設定されているかは、Linuxを起動して
/proc/cpu/clocksを見てみることで分かります。

[email@hidden (ttymxc1) ~]# cat /proc/cpu/clocks | grep uart
uart_ipg_clk-4:         66500000, 1, ipg_clk-0
uart_clk-4:             120000000, 1, per_uart_clk-15
uart_ipg_clk-3:         66500000, 0, ipg_clk-0
uart_clk-3:             120000000, 0, per_uart_clk-15
uart_ipg_clk-2:         66500000, 1, ipg_clk-0
uart_clk-2:             120000000, 1, per_uart_clk-15
uart_ipg_clk-1:         66500000, 1, ipg_clk-0
uart_clk-1:             120000000, 3, per_uart_clk-15
uart_ipg_clk-0:         66500000, 0, ipg_clk-0
uart_clk-0:             120000000, 0, per_uart_clk-15
per_uart_clk-15:        120000000, 3, upll-0

フォーマットは以下の通りです。
クロック名:             実際のクロック数, 使用カウント, 親クロック名

uart_clk-2 は 120MHzで、親クロックは per_uart_clk-15 となっています。
(シリアルインターフェース1には、UART2が繋がっています。)
per_uart_clk-15 の親クロックは、upll-0 です。
さらにたどっていくと、upll-0 の親は、osc24m-0(24MHz)ということも分かります。

(2011年08月11日 09:54), Singo SAKAI wrote:
> 古賀様
> 
> 分かりやすい説明ありがとうございました。
> やはりCCMの設定が間違っていました。
> 
> 教えていただいたフィールドの設定を見なおしたところ、ターミナルに正しく
> 表示されるようになりました。
> 
> 
> どうもありがとうございました。
> 
> 酒井
> 
> 
>> サムシングプレシャスの古賀と申します。
>>
>> SAKAIさん([Armadillo:07464]):
>>> とあるOSをArmadillo-440へ移植しています。
>>> UARTのドライバを作成しているのですが、ArmadilloからPCへ文字列を送って
>>> も文字化けしてしまうため、ボーレートがうまく設定できていないように見え
>>> ます。
>>>
>>> 質問としては、
>>>  ・i.MX257内蔵のUARTに入力するクロックは、66.5MHzで合っていますでしょ
>>> うか。
>>>
>>> hermitのコードを見ますと、「120MHz」としてボーレートの計算をされていま
>>> すが、「Armadillo-400シリーズハードウェアマニュアル」を見ますと
>>>
>>> 	BUSクロック:133MHz
>>>
>>> となっていますので、その半分の66.5MHzが入力されるものと考えています。
>>> この考えは正しいでしょうか?
>>
>> UART に入力されるクロックの周波数は、i.MX257 の CCM (Clock Control
>> Module) の設定により変わるのではないでしょうか。133MHz は BUS
>> クロック、つまり AHB のクロックで、120MHz は USB PLL の 240MHz の
>> 半分の値ですよね。UART へ供給される PER のクロックは、CCM の MCR
>> レジスタの設定(MCR の PER CLK MUX フィールドの UART 対応ビット)
>> によって決まり、USB PLL クロックがソースになるか HCLK/AHB クロック
>> がソースになるかが変わるのだと思います。
>>
>> これと、CCM の PCDRn (PER Clock Divider Register n) の対応フィールド
>> に設定した divider 値で、実際に供給されるクロック周波数が決まるんじゃ
>> ないでしょうか。
>>
>>> また、hermitのコードで設定しているものと同じ値をUARTコントローラに設定
>>> しても、PC上の端末には正しく文字が出力されないため、何か他の設定も必要
>>> なのかどうか、教えていただけないでしょうか。
>>
>> UART コントローラを設定する前、(おそらくブートコードにおいて)CCM
>> をどのように設定しているのかを確認されるのがよいのではないかと思い
>> ます。
>>
>> 以上、もし参考になりましたら幸いです。
>>
>> --
>> 古賀信哉 (株)サムシングプレシャス
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 


-- 
Koyo Takenoshita




armadillo メーリングリストの案内