TOPPERSプロジェクト 設計メモ PrimeCell UART(PL11)に関するメモ 作成者: 高田広章(名古屋大学) 最終更新: 2015年7月26日 ○メモの位置づけ このメモは,ARM PrimeCell UART(PL011)に関して,TOPPERSカーネルをポー ティングするにあたって必要となる事項をまとめたものである. ○目次 ・参考文献 ・概要 ・プログラミングモデル ○参考文献 [1] PrimeCell UART (PL011) Technical Reference Manual, 2007 Revision: r1p5 DDI0183G_uart_pl011_r1p5_trm.pdf ○概要([1] 第1章) ・AMBAのAPBに接続されるスレーブモジュール ・UARTとIrDA SIR(Serial InfraRed)に対応 ・送受信用のFIFOバッファを持つ.ディスエーブルすることも可能 - 送信FIFOは8ビット幅 - 受信FIFOは12ビット幅 ・DMAにも対応 ・バージョンがr1p0〜r1p5まであり,少しずつバージョンアップされている - r1p5で,FIFOバッファのサイズが大きくなった ・PrimeCell UART(PL010)とは,後方互換性がない ○プログラミングモデル(Programmers' Model)([1] 第3章) ※凡例: レジスタ名(レジスタ略称)オフセット,ビット幅 データレジスタ(UADR)0x000, 12/8 - データ(8ビット)をライトすると,送信FIFOに送られる - リードすると,受信FIFOから,データ(8ビット)とステータス(4ビッ ト)が取り出される - ステータスの構成 + OE(Overrun error) + BE(Break error) + PE(Parity error) + FE(Framing error) 受信ステータスレジスタ(UARTRSR)0x004, 4/0 エラークリアレジスタ(UARTECR) - リードすると,ステータス(4ビット)が読み出される + データレジスタを先に読む必要がある + OEは,最新の状態が読める + BE,PE,FEは,FIFOの先頭の状態が読める - ライトすると,ステータスがクリアされる(データは無視) フラグレジスタ(UARTFR)0x018, 9/-(RO) - 以下の状態をそれぞれ1ビットで参照できる + RI:Ring Indicator(外部からの信号) + TXFE:送信FIFOが空 + RXFF:受信FIFOがフル + TXFF:送信FIFOがフル + RXFE:受信FIFOが空 + BUSY:データ送信中 + DCD:Data Carrir Detect(外部からの信号) + DSR:Data Set Ready(外部からの信号) + CTS:Clear To Send(外部からの信号) IrDAローパワーカウンタレジスタ(UARTILPR)0x20, 8 <省略> ボーレート(整数部)レジスタ(UARTIBRD)0x24, 16 - ボーレートの整数部(16ビット)を設定するレジスタ - このレジスタ書き込んだ後に,ライン制御レジスタに書き込むことが必要 ボーレート(小数部)レジスタ(UARTFBRD)0x28, 6 - ボーレートの小数部(6ビット)を設定するレジスタ - このレジスタ書き込んだ後に,ライン制御レジスタに書き込むことが必要 ライン制御レジスタ(UARTLCR_H)0x2c, 8 - シリアル通信の規格を設定するためのレジスタ [7] SPS:スティッキーパリティに [6:5] WLEN:データ長(8ビット,7ビット,6ビット,5ビットから選択) [4] FEN:FIFOイネーブル [3] STP2:ストップビットを2ビットに [2] EPS:偶数パリティに [1] PEN:パリティを用いる [0] BRK:ブレークを送信する - これらの3つのレジスタは,UARTをディスエーブルして操作する 制御レジスタ(UARTCR)0x30, 16 - UARTを動作を設定するためのレジスタ [15] CTSEn:CTSハードウェアフロー制御を行う [14] RTSEn:RTSハードウェアフロー制御を行う [13] Out2:UART Out2の反転(RIに使える) [12] Out1:UART Out1の反転(DCDに使える) [11] RTS:RTS(Request To Send)の反転 [10] DTR:DTR(Data Transmit Ready)の反転 [9] RXE:受信イネーブル [8] TXE:送信イネーブル [7] LBE:ループバックイネーブル [6:3] 予約 [2] SIRLP:SIRローパワーIrDAモード [1] SIREN:SIRイネーブル [0] UARTEN:UARTイネーブル 割込みFIFOレベル選択レジスタ(UARTIFLS)0x34, 6 - 送受信独立に,FIFOのデータ量がどれだけになったところで割込みをか けるかを設定できる + 1/8, 1/4, 1/2, 3/4, 7/8 - デフォルトでは,送受信とも,FIFOが半分のところで割込みがかかる 割込みマスクセット/クリアレジスタ(UARTIMSC)0x38, 11 - 割込みマスクを設定するレジスタ + 1:割込みを許可(割込みをマスクをセットと書いてあるが…) + 0:割込みを禁止(割込みをマスクをクリアと書いてあるが…) - 以下の割込みに対する割込みマスクをセット/クリアできる + OEIM:Overrun Error Interrupt Mask + BEIM + PEIM + FEIM + RTIM:受信タイムアウト割込みマスク + TXIM:送信割込みマスク + RXIM:受信割込みマスク + DSRMIM + DCDMIM + CTSMIM + RIMIM ※マニュアルは,マスクのセット/クリアと,割込を許可/禁止の関係を,  勘違いして書いてあると思われる.別の箇所には,1が割込みイネーブル  であると明確に記載してある. 生の割込みステータスレジスタ(UARTRIS)0x3c, 11/-(RO) マスクされた割込みステータスレジスタ(UARTMIS)0x40, 11/-(RO) 割込みクリアレジスタ(UARTICR)0x44, -/11(WO) DMA制御レジスタ(UARTDMACR)0x48, 3 ●ペリフェラルの種類を識別するためのレジスタ UARTペリフェラルID0レジスタ(UARTPeriphID0)0xfe0, 8/-(RO) UARTペリフェラルID1レジスタ(UARTPeriphID1)0xfe4, 8/-(RO) UARTペリフェラルID2レジスタ(UARTPeriphID2)0xfe8, 8/-(RO) UARTペリフェラルID3レジスタ(UARTPeriphID3)0xfec, 8/-(RO) UART PCell ID0レジスタ(UARTPCellID0)0xff0, 8/-(RO) UART PCell ID1レジスタ(UARTPCellID1)0xff4, 8/-(RO) UART PCell ID2レジスタ(UARTPCellID2)0xff8, 8/-(RO) UART PCell ID3レジスタ(UARTPCellID3)0xffc, 8/-(RO) 以上