忍者ブログ
グラビアアイドルについて語るブログ。
[1] [2] [3] [4] [5] [6]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

gcc で CQ_V850 アプリ開発をするためにまとめたメモです。インターフェース2007年6月号「TOPPERS OS の移植とライン・トレース・カーの製作事例」のサンプルソースを参考にしています。

今回は uart_echoback のソースを読み、UART の使い方についてまとめました。


■UARTA0 の設定 (init_uart)

○ポートの設定

ユーザーズ・マニュアル「V850ES/JG2 ハードウエア編」の「4.5 兼用機能使用時のポートのレジスタ設定」によると、P30 を TXDA0 として使うためには PMC30 = 1, PFC30 = 0 に、P31 を RXDA0 として使うためには PMC31 = 1, PFC31 = 0 に設定する必要があります。「4.3 ポートの構成」も読んでおくとよいでしょう。

○UARTA0 の設定

動作周波数が20MHzの場合、ユーザーズマニュアル505ページの表「ボー・レート・ジェネレータ設定データ」が、UA0CTL1, UA0CTL2 (UARTA0 制御レジスタ1, 2) の設定値として使えます。

ボー・レート設定後、UA0CTL0 (UARTA0 制御レジスタ0) を設定し、UARTA0 を起動します。

・ビット0 (UA0SL)
送信データのストップ・ビット長指定

・ビット1 (UA0CL)
送受信データ1フレームのデータ・キャラクタ長指定

・ビット2、ビット3 (UA0PS0, UA0PS1)
送受信時のパリティ選択

・ビット4 (UA0DIR)
転送方向選択

・ビット5 (UA0RXE)
受信動作許可

・ビット6 (UA0TXE)
送信動作許可

・ビット7 (UA0PWR)
UARTA0 の動作の制御


■割り込みの許可 (init_intc)

割り込み制御レジスタ UA0RIC, UA0TIC を設定し、UART0 の送受信割り込みを許可します(ビット6で許可/禁止、ビット0〜ビット2で優先度)。割り込み制御レジスタについては、ユーザーズ・マニュアルの19.3.4を参照。


■UARTA0 の送受信 (uart_int_handler)

割り込みが発生するとハンドラ _interrupt にジャンプしますが、その中で uart_int_handler が呼び出されています。

受信は UA0RX (UARTA0 受信データ・レジスタ) から読み込み、エラーの有無は UA0STR (UARTA0 状態レジスタ) のビット0〜ビット2で確認します。

送信は UA0TX (UARTA0 送信データ・レジスタ) に書き込みます。送信完了は UA0STR のビット7で確認します。

また、UART と直接関係はありませんが、割り込み発生時、割り込み要因は ECR から読み出せます。システム・レジスタですので、stsr 命令でストアしなければなりません。


●関連エントリ
CQ_V850 gccメモ(共通編)
CQ_V850 gccメモ(クロック編)
CQ_V850 gccメモ(LED編)
CQ_V850 gccメモ(タイマ割り込み編)
PR
gcc で CQ_V850 アプリ開発をするためにまとめたメモです。インターフェース2007年6月号「TOPPERS OS の移植とライン・トレース・カーの製作事例」のサンプルソースを参考にしています。

今回は16ビット・インターバル・タイマM(TMM)の使い方について、timer_int のソースおよびユーザーズ・マニュアル「V850ES/JG2 ハードウエア編」の「第9章 16ビット・インターバル・タイマM(TMM)」を読んでまとめました。


■TMM0 の設定 (init_timer)

以下の手順で行います。

・TM0CTL0 (TMM0制御レジスタ0) のビット7を0(TMM0 動作禁止)に設定。
・TM0CTL0 のビット0〜ビット2を設定(カウント・クロックの選択)。
・TM0CMP0 (TMM0コンペア・レジスタ0) に値を設定。
・TM0CTL0 のビット8を1(TMM0 動作許可)に設定。

16ビット・カウンタのカウント値と TM0CMP0 レジスタの値が一致すると、16ビット・カウンタをクリアし、TMM0 コンペア一致割り込み要求信号 (INTTM0EQ0) が発生します。

init_timer では割り込み発生の周期を1000msとしていますが、次の式により、適切な TM0CMP0 レジスタの設定値が導き出されます。

インターバル間隔 = (TM0CMP0 レジスタ設定値 + 1) × カウント・クロック周期

timer_int のサンプルでは、割り込みが発生するとハンドラ _interrupt にジャンプしています。


■割り込みの許可 (init_intc)

次の手順で、TMM0 からの割り込みを許可します。割り込み制御レジスタについては、ユーザーズ・マニュアルの19.3.4を参照。

・割り込み制御レジスタ TM0EQIC0 に値を設定します(ビット6で許可/禁止、ビット0〜ビット2で優先度)。

さらに、ei 命令でマスカブル割り込みを許可します。


●関連エントリ
CQ_V850 gccメモ(共通編)
CQ_V850 gccメモ(クロック編)
CQ_V850 gccメモ(LED編)
gcc で CQ_V850 アプリ開発をするためにまとめたメモです。インターフェース2007年6月号「TOPPERS OS の移植とライン・トレース・カーの製作事例」のサンプルソースを参考にしています。

今回は LED の使い方についてまとめました。led_c.c のソースにある通りです。


■LED の使い方

CQ_V850 では LED はポート PCT6 に接続されています。

PCT6 は兼用端子であるため、入出力ポートとして書き込みを行うには、次の手順が必要です。

・ポート CT モード・コントロール・レジスタ(PMCCT)のビット6を0(入出力ポート)に設定。
・ポート CT モード・レジスタ(PMCT)のビット6を0(出力モード)に設定。

LED の点灯/消灯は、ポート CT レジスタ(PCT)のビット6を設定することで切り替えます(0:点灯/1:消灯)。


●関連エントリ
CQ_V850 gccメモ(共通編)
CQ_V850 gccメモ(クロック編)
gcc で CQ_V850 アプリ開発をするためにまとめたメモです。インターフェース2007年6月号「TOPPERS OS の移植とライン・トレース・カーの製作事例」のサンプルソースを参考にしています。

今回は gcc に特化した内容ではありませんが、クロック関係のレジスタの設定についてまとめました。詳細はユーザーズ・マニュアル「V850ES/JG2 ハードウエア編」の「第6章 クロック発生機能」を参照。


■プロセッサ・クロック・コントロール・レジスタ (PCC)

・特定レジスタ。
・初期値は0x03(メインクロック動作、8分周)。

○ビット0〜ビット3 (CK0, CK1, CK2, CK3)

クロックの選択。

○ビット4 (CLS)

CPU クロックの状態(メインクロック動作/サブクロック動作)。リードオンリー。

○ビット5 (MFRC)

メイン・クロックの内蔵帰還抵抗の選択。

○ビット6 (MCK)

メイン・クロック発振回路の制御。

○ビット7 (FRC)

サブクロックの内蔵帰還抵抗の選択。


■内蔵発振モード・レジスタ (RCM)

・初期値は0x00(内蔵発振器発振)。

○ビット0 (RSTOP)

内蔵発振器の発振/停止。


■CPU 動作クロック・ステータス・レジスタ (CCLS)

・リードオンリー。

○ビット0 (CCLSF)

CPU動作クロックの状態。


■PLL コントロール・レジスタ (PLLCTL)

・初期値は0x01(PLL 動作、クロック・スルー・モード)。

○ビット0 (PLLON)

PLL 動作停止レジスタ。

○ビット1 (SELPLL)

CPU 動作クロック選択レジスタ。


■クロック・コントロール・レジスタ (CKC)

・特定レジスタ。
・初期値は0x0a(4てい倍)。

○ビット0 (CKDIV0)

PLL モード時の内部システム・クロック。


■ロック・レジスタ (LOCKR)

・PLL 周波数の安定状態を確認するのに使用する。
・リードオンリー。

○ビット0 (LOCK)

PLL のロック状態の確認。


■PLL ロックアップ時間指定レジスタ (PLLS)

・初期値は0x03(213/fx)。

○ビット0〜ビット2 (PLLS0, PLLS1)

PLL ロックアップ時間の選択。


●関連エントリ

CQ_V850 gccメモ(共通編)
gcc で CQ_V850 アプリ開発をするためにまとめたメモです。インターフェース2007年6月号「TOPPERS OS の移植とライン・トレース・カーの製作事例」のサンプルソースを参考にしています。

今回はスタートアップ・ルーチンでのレジスタの設定についてまとめました。


■最初に設定するレジスタ

最初に設定しなければならないレジスタは次の3つです。(ユーザーズ・マニュアル「V850ES/JG2 ハードウエア編」85ページ)

(1) システム・ウエイト・コントロール・レジスタ (VSWC)

動作周波数が16.6MHz未満では0(ノー・ウエイト)を、16.6MHz以上では1(ウエイト)を設定します。

動作周波数は、PLLCTL の設定がクロック・スルー・モード(デフォルト)であれば5MHzに、PLL モードでは20MHzになります。

(2) オンチップ・デバッグ・モード・レジスタ (OCDM)

通常動作モードにするには0を設定します。特定レジスタですので、特定の手順で設定します。

(3) ウォッチドッグ・タイマ・モード・レジスタ2 (WDTM2)

ユーザーズ・マニュアル「V850ES/JG2 ハードウエア編」422ページによると、ウォッチドッグ・タイマ2を停止するには、通常は RCM.RSTOP ビットに1を設定(内蔵発振器の停止)した上で WDTM2 レジスタに0を設定すればいいようですが、WDTM2.WDCS23 ビットに1を設定しても停止できるようです。サンプルでは後者の方法で停止しているということになります。


■特定レジスタ

次の8個のレジスタは、書き込み保護されている特定レジスタです。(ユーザーズ・マニュアル「V850ES/JG2 ハードウエア編」81ページ)

(1) パワー・セーブ・コントロール・レジスタ (PSC)
(2) クロック・コントロール・レジスタ (CKC)
(3) プロセッサ・クロック・コントロール・レジスタ (PCC)
(4) クロック・モニタ・モード・レジスタ (CLM)
(5) リセット要因フラグ・レジスタ (RESF)
(6) 低電圧検出レジスタ (LVIM)
(7) 内蔵 RAM データ・ステータス・レジスタ (RAMS)
(8) オンチップ・デバッグ・モード・レジスタ (OCDM)

特定レジスタへの書き込みは、次の手順で行います。

・DMA 動作を許可していた場合は禁止する。
・特定レジスタへの設定データを汎用レジスタに用意する。
・PRCMD レジスタに設定データを書き込む。
・特定レジスタに設定データを書き込む。
・NOP 命令を5回挿入する。
・DMA 動作が必要であれば許可する。

(例) PCC レジスタに2(メインクロック動作、4分周)を設定
movhi  hi(PRCMD), r0, r1
movea lo(PRCMD), r1, r1
movhi hi(PCC), r0, r3
movea lo(PCC), r3, r3
mov 0x02, r2
st.b r2, 0[r1]
st.b r2, 0[r3]
nop
nop
nop
nop
nop



忍者ブログ [PR]
ブログ内検索
カレンダー
04 2024/05 06
S M T W T F S
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
最新コメント
[07/07 tiffany jewelry uk]
[09/17 車載モニター・阿蘇テック]
[08/30 愛]
[06/12 シモネッタ]
[06/11 arms22]
最新トラックバック
フリーエリア
あわせて読みたい
    Firefox 2 無料ダウンロード
    バーコード
    プロフィール
    名前:
    シモネッタ
    性別:
    非公開
    カウンター
    アクセス解析