目次: ROCK64/ROCKPro64
また忘れてしまいそうなので、メモがてら残しておきます。
ROCK64のデバイスツリーを見ると、I2Sデバイスの先頭i2s0には2つクロックが定義されています。ラベルはi2s_clkとi2s_hclkです。再生時にマスタークロックとして使われるのは前者の方で、クロックコントローラのID: SCLK_I2S0(= 41)のクロックでした。
RK3328のクロックドライバから、SCLK_I2S0のクロックを調べてみると、クロックゲートはCRU_CLKGATE_CON1アドレス0xff440204のビット3のようです。RK3328のTRM(Technical Reference Manual)を見るかぎり、ビット3のフィールド名はclk_i2s0_enとなっているので、たぶん合ってるでしょう。
クロックの設定はCRU_CLKSEL_CON6アドレス0xff440118のようです。レジスタの値をダンプしてみると、親クロックはCPLLで分周比1/16の設定になっていました。理由は知りません。
CPLLの発振周波数として /sys/kernel/debug/clk/cpll/clk_rateを信じるなら、CPLLは1.2GHzらしいです。従ってi2s0のマスタークロックは1.2GHz / 16 = 75MHzですね。
RK3328のI2Sドライバは、2 * 32 * fs(48kHzなど)と、マスタークロックが整数比にならない場合、エラーで弾く実装になっています。オーディオ用のコーデックICの仕様書とかで出てくる表現で書くと、MCLK = 64fsです。
しかし48kHzや44.1kHzは、75MHzとは整数比になることはありません。ふーむ、困った。次は、マスタークロックの周波数を変える方向で調べてみましょうかねえ。
Facebookって、職業の「現在も働いています」チェックを外さないと、2社で働いていることになってしまうんですね。知らなんだ。
メモ: 技術系の話はFacebookから転記しておくことにした。
< | 2018 | > | ||||
<< | < | 10 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | - | - | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.18.
using GD 2.3.3(png support.)