STM32でDCC/DDCを作ろう! INDEXページへ
情報が間違っていても責任とらないし賠償とかしないです.
XC9536でbitclkを生成しています.
bitclkの源発振は2つのXTALを使い分けます.
44.1kHz系列は45.1584MHzのXTAL
48kHz系列は49.152MHzのXTAL
つまり、当deviceのサンプリング周波数を、44.1kHz→48kHzのように切り替えるとき、XTALを切り替えなくちゃいけません.これでちょっとした課題が生じます.
課題1
ロジック回路はむやみにclockを切り替えると誤動作する可能性があります.ヒゲのように細くて周波数が高いclockが入るとロジックは発狂するんですね.そこで、45M/49Mの切り替えには工夫が必要です.
課題2
使ってない方のXTALはオフしたい
課題3
XTALをオンした直後の起動時間がどれだけかかるのか不明(実測で0.3mSecなど)
対策
1)45M/49Mを切り替えたら、その後でロジックをresetする
2)STOP時には45M/49Mを両方ともONにしておく
3)再生開始時に不要なXTALをOFFする
ロジック回路のverilog codeはこのようにしてあります.
always@(posedge clk or negedge xrst2)
if(!xrst2) bck<=0;
else if(seq_en) bck<=~bck;
assign clk49en = PB2_clksel | PA12_clkbothon;
assign clk45en = ~PB2_clksel | PA12_clkbothon;
STM32はGPIOを操作します.
45M/49Mの切り替え操作 →PB2_clksel
HAL_GPIO_WritePin(FPGA_CKSEL_PRT, FPGA_CKSEL_BIT, (Fs_ctl&4)>>2 );
FPGAをresetする操作 →PC9_reset
HAL_GPIO_WritePin(FPGA_RESET_PRT, FPGA_RESET_BIT, 1);
XTALを両方ともONする操作(STOP時) →PA12_clkbothon
HAL_GPIO_WritePin(FPGA_CKBON_PRT, FPGA_CKBON_BIT, 1);
使っていないXTALをOFFする操作(再生開始時) →PA12_clkbothon
HAL_GPIO_WritePin(FPGA_CKBON_PRT, FPGA_CKBON_BIT, 0);
かしこ
0 件のコメント:
コメントを投稿