次はUART出力からターミナルにHello Worldと表示することを目指す
まずは仕様書の確認
■BeagleBoard仕様書
BeagleBoard SRM
■OMAP3530仕様書
OMAP3530はBeagleBoardに搭載されているCortex-A8のマイコン
OMAP35x Technical Reference Manual
OMAP3530仕様書のを見ると2638ページ「UART/IrDA/CIR Overview」からUARTデバイスは3つ存在することがわかる
また、BeagleBoard仕様書の23ページ「5.18 RS232 Header」からBeagleBoardのシリアル端子はUART3に繋がっているとわかる
したがってUARTからPCのシリアルポートにHello Worldを出力するにはUART3を制御することになる
UART3を制御する手順は以下の通り
■制御手順
(1)OMAP3530 Perブロックの電源をON
OMAP3530仕様書の582ページを参照
PM_PWSTCTRL_PERレジスタのPOWERSTATEに0x3を設定
(2)OMAP3530 Perブロック内UART3にクロック供給
供給するクロックはFunctionクロックとInterfaceクロックの2つ
OMAP3530仕様書の492ページを参照
CM_FCLKEN_PERレジスタとCM_ICLKEN_PERレジスタのUART3ビットを立てる
(3)UART3初期化
OMAP3530仕様書の2697ページを参照
[1]MDR1_REGレジスタに0x7を書き込んでUART無効化(2716ページ)
[2]LCR_REGレジスタに0x83を書き込んでConfigモードAに移行(2707ページ)
[3]DLL_REGレジスタ、DLH_REGレジスタの2つでボーレート設定(2697ページ、2701ページ)
DLL, DLHに設定する値の計算は2672ページ 17.4.4.1.1 UART Clock Generation: Baud Rate Generationを参照
(*)x16モードで動作させた場合にボーレートを115200にするのはDLL=0x1A, DLH=0x00
[4]LCR_REGレジスタに0x3を書き込んで通常モードに戻る
[5]MDR1_REGレジスタに0を書き込んでx16モードで動作開始
(4)出力バッファの空き確認
LSR_REGレジスタのTX_FIFO_Eビットがクリアされるまでループする(2710ページ)
(5)文字を出力バッファに書き込む
THR_REGレジスタに文字コードを書き込む(2698ページ)
(4)(5)を繰り返すことで文字列を出力
注意点はUARTレジスタは全て8ビットでアクセスすること
■サンプル
ソースコード
0 件のコメント:
コメントを投稿