おはよーございます.コミケで疲労なひらりんです.
UARTのbaudrateを設定できない不調を調査します.
UARTのライブラリsourceはadi_uart_bf60x.cが使われています.
まずこの中に不調があります.
この行で、system clock周波数を得ているのですが、正常終了はするものの、3変数とも値がゼロです.
if(adi_pwr_GetSystemFreq(0u, &fsysclk, &fsclk0, &fsclk1) != ...)
原因はadi_pwr_GetSystemFreqにあり.
fileはadi_pwr_v2.cです.
やってることは単純でこれだけ.ptrがゼロってるのかなぁ?
ADI_PWR_CLK_STRUCT clk;
ADI_PWR_DEVICE *pDevice = &gPWRDevice[nDeviceNum];
GetFreq(pDevice, &clk);
*fsysclk = clk.syscclk0;
*fsclk0 = clk.sclk0;
*fsclk1 = clk.sclk1;
ptrは非ゼロでした.疑いは晴れる.
&clk = 0x11803f50
pDevice = 0x11b00ce4
ということは、GetFreq()がおかしいのかな?
clk計算の種子であるclkinがゼロでした.これは基板上の25MHz Xtalを指すと思うのですが、#defineを忘れてるのかもしれない.
pDevice->pDevData->clkin
解決しました.main()の最初で、このpower init関数を呼ばなければならないのです.25MHzはここで設定します.
adi_pwr_Init(0,25000000); // clkin 25MHz
悪いのはわたしでした~ 切腹してお詫びを
かしこ
murasaki
返信削除他人の作ったライブラリを使うときにこの辺が面倒くさいですよねー。ハード周りはmain()に来る前に設定してくれる場合と、用意された初期化関数呼ばなきゃいけない場合といろいろあって、すんなりといかないですね。
このライブラリは統一感ないんです.open()の内部でinit()してくれるのとかもあるし.
削除murasaki
削除うーん、最悪。
ライブラリやフレームワークは頭のいい人に作って欲しいです。
「STM32・STM8は出来が良かった」と遠い眼をしています.
削除STMのライブラリとかmiddlewareの出来とか、分け隔てない公開度がフツーと思ってました.
ともあれまずは切腹してお詫びを.
いえいえ別に悪くなくてこういうのは全てが貴重なノウハウですー。
削除ならばせめて辞職をもってお詫びを..
削除power initって復活の呪文みたいでいいな
power_initというのもあまり耳なじみのない関数名ですねー。コールドスタート系ですかね。
削除最近の遊技機系は初期化もコールドスタート時やホットスタート時やWDT発生時とか、ノイズで描画や動画デコードがハングした時のエラー復帰系とかいろいろあってややこしいです。
兵器並みのフェイルセーフ。
削除ライターでハンドルに火花飛ばして初期化するのはプロの仕事師。
いや知らんけど。