RZ/A1Hグループ - Renesas Electronics

アプリケーションノート
RZ/A1Hグループ
初期設定例
R01AN1864JJ0100
Rev.1.00
2014.04.25
要旨
本アプリケーションノートでは、RZ/A1Hのブートモード 0(CS0 空間 16 ビットブート)を使用して、初期
設定を行う際に必要な設定項目の例について説明します。
対象デバイス
RZ/A1H
本アプリケーションノートを他のマイコンへ適用する場合、そのマイコンの仕様にあわせて変更し、十分
評価してください。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 1 of 71
初期設定例
RZ/A1Hグループ
目次
1.
仕様 ......................................................................................................................................................... 4
2.
動作確認条件 .......................................................................................................................................... 5
3.
関連アプリケーションノート ................................................................................................................. 5
4.
ハードウェア説明 ................................................................................................................................... 6
4.1
ハードウェア構成例 ....................................................................................................................... 6
4.2
使用端子一覧 .................................................................................................................................. 7
5.
ソフトウェア説明 ................................................................................................................................... 8
5.1
動作概要 ......................................................................................................................................... 8
5.2
サンプルコード実行時の周辺機能の設定およびメモリ配置 .......................................................... 9
5.2.1
周辺機能の設定 ....................................................................................................................... 9
5.2.2
メモリマップ......................................................................................................................... 11
5.2.3
サンプルコードのセクション配置 ........................................................................................ 12
5.2.4
MMU の設定 .......................................................................................................................... 15
5.2.5
例外処理ベクタテーブル ...................................................................................................... 16
5.3
使用割り込み一覧 ......................................................................................................................... 17
5.4
固定幅整数一覧............................................................................................................................. 17
5.5
定数一覧 ....................................................................................................................................... 18
5.6
変数一覧 ....................................................................................................................................... 19
5.7
関数一覧 ....................................................................................................................................... 20
5.8
関数仕様 ....................................................................................................................................... 22
5.9
フローチャート............................................................................................................................. 42
5.9.1
リセットハンドラ処理 .......................................................................................................... 42
5.9.2
周辺機能の初期設定($Sub$$main 関数) .......................................................................... 43
5.9.3
メイン処理 ............................................................................................................................ 44
5.9.4
周辺機能の初期設定関数(動作周波数とフラッシュメモリアクセスの最適化)................ 45
5.9.5
CPG の初期設定関数 ............................................................................................................ 46
5.9.6
PORT の初期設定関数(CS0 および CS1 空間) ................................................................ 47
5.9.7
BSC の初期設定関数 ............................................................................................................. 48
5.9.8
CS0 の初期設定関数 ............................................................................................................. 49
5.9.9
CS1 の初期設定関数 ............................................................................................................. 49
5.9.10
CS2 の初期設定関数 ............................................................................................................. 50
5.9.11
CS3 の初期設定関数 ............................................................................................................. 51
5.9.12
STB の初期設定関数 ............................................................................................................. 52
5.9.13
PORT の初期設定関数 .......................................................................................................... 53
5.9.14
INTC の初期設定関数............................................................................................................ 54
5.9.15
OSTM の初期設定関数.......................................................................................................... 55
5.9.16
OSTM のカウント開始関数 .................................................................................................. 56
5.9.17
OSTM のカウント停止関数 .................................................................................................. 56
5.9.18
OSTM チャネル 0 の初期設定関数 ....................................................................................... 57
5.9.19
OSTM チャネル 0 の割り込みハンドラ処理 ......................................................................... 58
5.9.20
INTC 割り込みの許可関数 .................................................................................................... 59
5.9.21
INTC 割り込みの禁止関数 .................................................................................................... 59
5.9.22
INTC 割り込み優先レベルの設定関数 .................................................................................. 60
5.9.23
INTC 割り込みマスクレベルの設定関数 ............................................................................... 60
5.9.24
INTC 割り込みマスクレベルの取得関数 ............................................................................... 60
5.9.25
INTC の割り込み保留状態の取得関数 .................................................................................. 61
5.9.26
INTC の端子割り込み検出モードの設定関数 ....................................................................... 61
5.9.27
INTC 割り込みハンドラの登録関数 ...................................................................................... 62
5.9.28
INTC 割り込みハンドラテーブルへの登録関数 .................................................................... 62
5.9.29
IRQ ハンドラ処理 ................................................................................................................. 63
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 2 of 71
初期設定例
RZ/A1Hグループ
5.9.30
5.9.31
5.9.32
5.9.33
5.9.34
5.9.35
5.9.36
INTC 割り込みハンドラ処理 ................................................................................................. 64
INTC 割り込み要因に対応したハンドラ処理 ....................................................................... 64
SCIF の初期設定関数 ............................................................................................................ 65
SCIF の調歩同期式モードの初期設定関数 ........................................................................... 65
SCIF チャネル 2 の調歩同期式モードの初期設定関数 ......................................................... 66
シリアルインタフェースからの 1 文字受信関数 .................................................................. 68
シリアルインタフェースへの 1 文字送信関数 ...................................................................... 69
6.
サンプルコード ..................................................................................................................................... 70
7.
参考ドキュメント ................................................................................................................................. 70
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 3 of 71
初期設定例
RZ/A1Hグループ
1.
仕様
リセット解除後に、CS0 空間の NOR フラッシュメモリに配置されたプログラムにて、クロックパルス発振
器、割り込みコントローラ、バスステートコントローラ、汎用入出力ポート、メモリ管理ユニット、L1 キャッ
シュの初期設定を行います。
本アプリケーションノートでは、クロックパルス発振器を CPG、割り込みコントローラを INTC、バスステー
トコントローラを BSC、OS タイマを OSTM、FIFO 内蔵シリアルコミュニケーションインタフェースを SCIF、
汎用入出力ポートを PORT、低消費電力モードを STB、メモリ管理ユニットを MMU とします。
表 1.1に使用する周辺機能と用途を、図 1.1にサンプルコード実行時の動作環境を示します。
表1.1
使用する周辺機能と用途
周辺機能
クロックパルス発振器(CPG)
割り込みコントローラ(INTC)
バスステートコントローラ(BSC)
OS タイマ(OSTM)
FIFO 内蔵シリアルコミュニケーション
インタフェース(SCIF)
汎用入出力ポート(PORT)
低消費電力モード(STB)
メモリ管理ユニット(MMU)
用途
RZ/A1Hの動作周波数の生成
OSTM チャネル 0 の割り込み制御に使用
CS0、CS1 空間で NOR フラッシュメモリを使用する
ための信号の生成、および CS2、CS3 空間で SDRAM
を使用するための信号の生成
OSTM チャネル 0 のタイマにより、LED 点灯および
消灯の周期を生成
SCIF チャネル 2 を用いて、ホスト PC との通信用と
して使用
CS1~CS3、SCIF チャネル 2 の兼用端子の切り替え
に使用、LED の点灯および消灯のための端子制御に
使用
RZ/A1Hの周辺 IO のモジュールスタンバイを解除す
るために使用、保持用内蔵 RAM をライト許可するた
めに使用
RZ/A1Hの外部アドレス空間において、L1 キャッシュ
の有効領域の指定やメモリタイプの指定などの変換
テーブルの生成
ターミナルソフト
(サンプルコードのメッセージを出力)
ホストPC
MESSAGE
R7S72100
R7S72100 CPUボード
RTK772100BC00000BR
図1.1
シリアルインタフェース
(RS-232Cケーブル)
動作環境
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 4 of 71
初期設定例
RZ/A1Hグループ
2.
動作確認条件
本アプリケーションノートのサンプルコードは、下記の条件で動作を確認しています。
表2.1
動作確認条件
項目
内容
使用マイコン
動作周波数(注)
動作電圧
統合開発環境
C コンパイラ
動作モード
ターミナルソフトの通信設定
使用ボード
使用デバイス
(ボード上で使用する機能)
RZ/A1H
CPU クロック(Iφ):400MHz
画像処理クロック(Gφ):266.67MHz
内部バスクロック(Bφ):133.33MHz
周辺クロック 1(P1φ):66.67MHz
周辺クロック 0(P0φ):33.33MHz
電源電圧(I/O):3.3V
電源電圧(内部):1.18V
®
ARM 統合開発環境
TM
ARM Development Studio 5(DS-5 )Version 5.16
ARM C/C++ Compiler/Linker/Assembler Ver.5.03 [Build 102]
コンパイラオプション(ディレクトリパスの追加は除く)
-O3 -Ospace --cpu=Cortex-A9 --littleend --arm --apcs=/interwork
--no_unaligned_access --fpu=vfpv3_fp16 -g --asm
ブートモード 0
(CS0 空間 16 ビットブート)
・通信速度:115200bps
・データ長:8 ビット
・パリティ:なし
・ストップビット長:1 ビット
・フロー制御:なし
GENMAI ボード
・R7S72100 CPU ボード RTK772100BC00000BR
・NOR フラッシュメモリ(CS0、CS1 空間に接続)
メーカ名:Spansion Inc.、型名:S29GL512S10TFI01
・SDRAM(CS2、CS3 空間に接続)
メーカ名:ISSI Inc.、型名:IS42S16320B-75
・シリアルインタフェース(Dsub-9 コネクタ)
・LED1
【注】 クロックモード 0(EXTAL 端子からの 13.33MHz のクロック入力)で使用時の動作周波数です。
3.
関連アプリケーションノート
本アプリケーションノートに関連するアプリケーションノートを以下に示します。併せて参照してくださ
い。
• RZ/A1Hグループ レジスタ定義ヘッダ・ファイル iodefine.h(R01AN1860JJ)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 5 of 71
初期設定例
RZ/A1Hグループ
4.
ハードウェア説明
4.1
ハードウェア構成例
図 4.1にブートモード 0 で CS0 および CS1 空間に NOR フラッシュメモリを、CS2 および CS3 空間に SDRAM
を接続する場合の接続例を示します。
RZ/A1H
NORフラッシュメモリ1
P6_15-P6_0 / D15-D0
P9_1-P9_0 & P8_15-P8_13 / A25-A21
P8_12-P8_8 / A20-A16
P8_7-P8_6 / A15-A14
P8_5-P8_0 / A13-A8
16
DQ15-DQ0
5
A24-A20
5
A19-A15
2
A14-A13
6
A12-A7
3.3V
P7_15-P7_9 / A7-A1
7
A6-A0
CE#
P7_0 / MD_BOOT2 / CS0#
OE#
P7_8 / RD#
RY/BY#
3.3V
P7_6 / WE0# / DQMLL
WE#
P3_7 / CS1#
WP#
P7_5 / RD/WR#
DQ15-DQ0
P7_2 / RAS#
A24-A20
RES#
P7_3 / CAS#
A19-A15
P7_4 / CKE
ブートモード0
MD_BOOT1
RES#
NORフラッシュメモリ2
P7_7 / WE1# / DQMLU
RES#
NC
RESET#
A14-A13
P5_8 / CS2#
A12-A7
3.3V
MD_BOOT0
P7_1 / CS3#
A6-A0
3.3V
CKIO
CE#
3.3V
OE#
RY/BY#
3.3V
WE#
RESET#
注:赤字は使用機能を示します
NC
RES#
WP#
SDRAM1
DQ15-DQ0
BA1-BA0
A12-A7
A6-A0
CLK
WE#
LDQM
UDQM
RAS#
CAS#
3.3V
CKE
CS#
SDRAM2
DQ15-DQ0
BA1-BA0
A12-A7
A6-A0
3.3V
CLK
WE#
3.3V
LDQM
3.3V
UDQM
3.3V
RAS#
CAS#
3.3V
CKE
CS#
【注】 1. #は負論理(またはアクティブロー)を示す記号です。
2. ブートモード 0 で、RZ/A1Hの A25~A21 をブート用メモリと接続する場合は、A25~A21 のアド
レス線に対して基板上でプルダウン処理を実施する必要があります。
図4.1
接続例
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 6 of 71
初期設定例
RZ/A1Hグループ
使用端子一覧
4.2
表 4.1に使用端子と機能を示します。
表4.1
使用端子と機能
端子名
A25~A1
D15~D0
CS0#
入出力
内容
出力
入出力
出力
NOR フラッシュメモリ、SDRAM へのアドレス信号出力
NOR フラッシュメモリ、SDRAM のデータ信号入出力
CS0 空間に接続された NOR フラッシュメモリへのデバイス選択信
号出力
CS1 空間に接続された NOR フラッシュメモリへのデバイス選択信
号出力
CS2 空間に接続された SDRAM へのデバイス選択信号出力
CS3 空間に接続された SDRAM へのデバイス選択信号出力
NOR フラッシュメモリへのリード制御信号出力
NOR フラッシュメモリへのライトイネーブル制御信号出力、および
SDRAM へのバイト選択(D7~D0)制御信号出力
SDRAM へのバイト選択(D15~D8)制御信号出力
SDRAM へのリード制御信号またはライト制御信号出力
SDRAM への CK イネーブル制御信号出力
SDRAM への CAS#制御信号出力
SDRAM への RAS#制御信号出力
SDRAM へのクロック出力
ブートモードの選択
MD_BOOT1:"L"、MD_BOOT0:"L"(ブートモード 0 に設定)
CS1#
出力
CS2#
CS3#
RD#
WE0#/DQMLL
出力
出力
出力
出力
DQMLU
RD/WR#
CKE
CAS#
RAS#
CKIO
MD_BOOT1
MD_BOOT0
P4_10
RxD2
TxD2
出力
出力
出力
出力
出力
出力
入力
入力
出力
入力
出力
LED の点灯および消灯
シリアル受信データ信号
シリアル送信データ信号
【注】 1. #は負論理(またはアクティブロー)を示す記号です。
2. BSC の制御信号端子は、PORT との兼用機能となっており、ブートモードにより初期状態が異な
ります。ブートモード 0 で CS0 空間に接続された NOR フラッシュメモリ(バス幅 16 ビット)か
らブートする場合、CS0 空間で使用する A20~A1、D15~D0、CS0#、RD#の端子機能は自動的に
制御信号端子の機能に設定されます。A25~A21、WE0#端子の制御信号端子は、初期状態が汎用
入力ポートの設定となっており、ブート時に NOR フラッシュメモリへの制御信号が不定となりま
す。A25~A21 端子を使用する場合は、パワーオンリセット時に NOR フラッシュメモリの H'0000
0000 番地(リセットベクタ)がアクセスできるように外付け抵抗でプルダウン処理する必要があ
ります。WE0#端子は、プルアップ処理を行ってください。CS0#、RD#端子は、プルアップ処理を
行うことを推奨します。
CS1~CS5 空間で使用する制御信号端子についても、信号のレベルが不定となることがないように、
接続するメモリの仕様にあわせて、プルアップまたはプルダウンの処理をすることを推奨します。
本サンプルコードでは、CS4 および CS5 空間は使用していません。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 7 of 71
初期設定例
RZ/A1Hグループ
ソフトウェア説明
5.
動作概要
5.1
リセット解除後に、例外処理ベクタテーブルのリセットベクタ(ブートモード 0 では H'0000 0000 番地)に
配置された分岐命令を実行します。リセットベクタには、リセットハンドラ処理への分岐命令を記述してい
ますので、リセットハンドラ処理に分岐します。
リセットハンドラ処理では、スタックポインタ、クロック周波数、MMU の設定を行い、ARM 統合開発環
境 DS-5 のコンパイラツールチェーンにより提供される C 標準ライブラリ関数__main に分岐します。
__main 関数では、スキャッタローディング機能を使用したセクション領域の初期化、ライブラリ関数の初
期化が行われ、ハードウェアの初期設定を行うための$Sub$$main 関数に分岐します。
サンプルコードでは、$Sub$$main 関数にて、STB、BSC、INTC、PORT などの周辺機能の初期設定を行い、
IRQ 割り込みおよび FIQ 割り込みを許可にしています。$Super$$main 関数をコールすることで、main 関数に
分岐します。
main 関数では、シリアルインタフェースで接続されたホスト PC 上のターミナルに文字列を出力し、OSTM
チャネル 0 をインターバルタイマモードに設定して、タイマを起動します。500ms の周期で OSTM チャネル
0 の割り込みを発生させ、GENMAI ボード上の LED を割り込み処理により 500ms ごとに点灯および消灯を繰
り返す処理を行います。
図 5.1にメイン処理が実行されるまでの初期設定のシーケンス図を示します。
リセット信号のアサート
初期設定例サンプルコードの処理
リセット例外処理ベクタの実行
DS-5 C標準ライブラリの処理
__main()
リセットを受け付け時、ブートモード0では、プログラム
カウンタの値がH'0000 0000番地を示し、このアドレスに配置
された分岐命令を実行します。
サンプルコードでは、reset_handlerに分岐します。
reset_handler
スキャッタローディング機能に
よるセクションの初期化
・RWセクションのコピー
(初期値ありデータ)
・ZIセクションのゼロクリア
(初期値なしデータ)
・その他のセクションの初期化
・アプリケーションスタック
およびヒープの設定
標準ライブラリ関数のコール
__rt_entry()
スタックポインタの設定
周辺機能の初期設定
Peripheral_BasicInit()
MMUの初期設定
init_TTB()
MMUの初期化を行い、MMUを有効に設定します。
標準ライブラリ関数のコール
__main()
DS-5標準ライブラリ関数__mainをコールします。
$Sub$$main()
__rt_entry()
ハードウェアの初期設定
・ライブラリ関数の初期化
・トップレベルオブジェクトの
コンストラクタのコール
(C++を使用する場合)
標準ライブラリの
ユーザ定義関数のコール
$Sub$$main()
・クロック周波数の設定
・CS0およびCS1空間でNORフラッシュメモリを使用するための
最適な設定
標準ライブラリ関数のコール
$Super$$main()
ハードウェアの初期設定を行います。
サンプルコードでは、STBにてモジュールスタンバイの解除、
BSCにてCS2およびCS3空間でSDRAMを使用するための設定、
L1キャッシュの有効化、INTCにて割り込みの初期設定などを
行っています。
DS-5標準ライブラリ関数$Super$$mainをコールします。
本関数からmain関数に分岐します。
main()
main関数の終了処理
サンプルコードのメイン処理
【注】 DS-5 の標準ライブラリの処理については、ARM コンパイラツールチェーンのドキュメントを参照し
てください。
図5.1
メイン処理が実行されるまでの初期設定のシーケンス図
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 8 of 71
初期設定例
RZ/A1Hグループ
5.2
5.2.1
サンプルコード実行時の周辺機能の設定およびメモリ配置
周辺機能の設定
表 5.1および表 5.2に、サンプルコード実行時の周辺機能の設定内容を示します。
表5.1
周辺機能の設定内容(1/2)
モジュール
設定内容
CPU クロック:PLL 回路の周波数に対して×1/1 倍に設定
画像処理クロック:PLL 回路の周波数に対して×2/3 倍に設定
クロックモード 0(PLL 周波数が入力クロックの 30 逓倍)の状態で、
入力クロックが 13.33MHz 時に以下の周波数となるように設定
・CPU クロック(Iφ) :400MHz
・画像処理クロック(Gφ):266.67MHz
・内部バスクロック(Bφ):133.33MHz
・周辺クロック 1(P1φ=CKIO):66.67MHz
・周辺クロック 0(P0φ):33.33MHz
CS0 および CS1 空間(NOR フラッシュメモリを接続)
・ライト-リード/ライト-ライトサイクル間:1 アイドルサイクル
・別空間リード-ライトサイクル間:アイドルサイクルなし
・同一空間リード-ライトサイクル間:アイドルサイクルなし
・別空間リード-リードサイクル間:アイドルサイクルなし
・同一空間リード-リードサイクル間:アイドルサイクルなし
・データバス幅:16 ビット
・アドレス、CSn#アサート→RD#、WEn#アサートまでの遅延:
1.5 サイクル
・アクセスウェイトサイクル: 6 サイクル
・外部ウェイト入力無視
・RD#、WEn#ネゲート→アドレス、CSn#ネゲートまでの遅延:
0.5 サイクル
CS2 および CS3 空間(SDRAM を接続)
・ライト-リード/ライト-ライトサイクル間:アイドルサイクルなし
・別空間リード-ライトサイクル間:アイドルサイクルなし
・同一空間リード-ライトサイクル間:アイドルサイクルなし
・別空間リード-リードサイクル間:アイドルサイクルなし
・同一空間リード-リードサイクル間:アイドルサイクルなし
・データバス幅:16 ビット
・プリチャージ完了待ちサイクル:1 サイクル
・ACTV コマンド→READ(A)/WRIT(A)コマンド間:
1 サイクル
・CAS レイテンシ:2 サイクル
・プリチャージ起動待ち:2 サイクル
・REF コマンド/セルフリフレッシュ解除→ACTV/REF/MRS コマ
ンド間:5 サイクル
・ロウアドレス:13 ビット、カラムアドレス:10 ビット
・オートリフレッシュ制御を有効とし、CKIOφ=66.67MHz の場合
に 8192 回のリフレッシュ間隔が 62.88ms となるように設定
CPG
BSC
【注】 1. #は負論理(またはアクティブロー)を示す記号です。
2. 表中の CSn#は CS0#および CS1#を、WEn#は WE0#~WE3#を表します。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 9 of 71
初期設定例
RZ/A1Hグループ
表5.2
周辺機能の設定内容(2/2)
モジュール
設定内容
保持用内蔵 RAM へのライト許可および周辺機能へのクロック供給
STBCR2~STBCR13 でクロックの供給および停止制御が可能なす
べての周辺機能のクロックを供給
PORT9、PORT8、PORT7、PORT5、PORT4、PORT3 の兼用端子
機能を設定
・P9_1:A25、P9_0:A24、
・P8_15:A23、P8_14:A22、P8_13:A21
・P7_6:WE0#/DQMLL#、
・P7_7:DQMLU#、P7_5:RD/WR#、P7_4:CKE、P7_3:CAS#、
P7_2:RAS#、P7_1:CS3#、
・P5_8:CS2#、P3_7:CS1#、
・P4_10:LED の点灯および消灯、
・P3_2:RxD2、P3_0:TxD2
チャネル 0 をインターバルタイマモードに設定
P0φ=33.33MHz の時に 500ms ごとに割り込み要求を発生するよう
に、タイマカウントを設定
INTC の初期設定および OSTM チャネル 0 割り込み(割り込み ID が
134)ハンドラの登録と実行
チャネル 2 を調歩同期式モードに設定
・データ長:8 ビット
・ストップビット長:1 ビット
・パリティ:なし
P1φ=66.67MHz の時に、クロックソースを分周なし、ビットレート
値に 17 を設定し、ビットレートが 115200bps となるように設定
誤差は 0.46%
STB
PORT
OSTM
INTC
SCIF
【注】 #は負論理(またはアクティブロー)を示す記号です。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 10 of 71
初期設定例
RZ/A1Hグループ
5.2.2
メモリマップ
図 5.2にRZ/A1Hグループのアドレス空間とGENMAI ボードのメモリマップを示します。
サンプルコードでは、ROM 領域を使用するコードおよびデータを CS0 空間に接続した NOR フラッシュメ
モリに配置し、RAM 領域を使用するコードおよびデータを大容量内蔵 RAM に配置するようにしています。
RZ/A1Hグループの
アドレス空間
GENMAIボード
メモリマップ
その他
(2550MB)
その他
(2550MB)
大容量内蔵RAM
(10MB)
SPIマルチI/Oバス
空間2 (64MB)
SPIマルチI/Oバス
空間1 (64MB)
大容量内蔵RAM
ミラー空間
SPIマルチI/Oバス
ミラー空間2
SPIマルチI/Oバス
ミラー空間1
CS5空間 (64MB)
CS4空間 (64MB)
CS5ミラー空間
CS4ミラー空間
CS3空間 (64MB)
CS3ミラー空間
CS2空間 (64MB)
CS2ミラー空間
CS1空間 (64MB)
CS1ミラー空間
CS0空間 (64MB)
CS0ミラー空間
その他
(502MB)
その他
(502MB)
大容量内蔵RAM
(10MB)
SPIマルチI/Oバス
空間2 (64MB)
SPIマルチI/Oバス
空間1 (64MB)
大容量内蔵RAM
(10MB)
シリアルフラッシュ
メモリ (64MB)
シリアルフラッシュ
メモリ (64MB)
CS5空間 (64MB)
CS4空間 (64MB)
ユーザ領域
CS3空間 (64MB)
SDRAM (64MB)
CS2空間 (64MB)
SDRAM (64MB)
H'FFFF FFFF
H'60A0 0000
H'6000 0000
H'5C00 0000
H'5800 0000
ミラー空間
H'5000 0000
H'4C00 0000
H'4800 0000
H'4400 0000
H'4000 0000
H'20A0 0000
H'2000 0000
H'1C00 0000
H'1800 0000
通常空間
H'1000 0000
H'0C00 0000
H'0800 0000
CS1空間 (64MB)
H'0400 0000
H'0000 0000
図5.2
CS0空間 (64MB)
NORフラッシュ
メモリ (64MB)
NORフラッシュ
メモリ (64MB)
メモリマップ
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 11 of 71
初期設定例
RZ/A1Hグループ
5.2.3
サンプルコードのセクション配置
サンプルコードでは、割り込み処理の高速化のため、例外処理ベクタテーブルと IRQ 割り込みハンドラを
大容量内蔵 RAM 上に配置して、これらの処理を大容量内蔵 RAM 上で実行するようにしています。例外処理
ベクタテーブルおよび IRQ 割り込みハンドラのプログラムコードの NOR フラッシュメモリ領域から大容量
内蔵 RAM 領域への転送処理、初期値なしデータセクションのゼロクリア処理、および初期値ありデータセ
クションの初期化処理は、スキャッタローディング機能を使用して行っています。スキャッタローディング
機能の詳細は、ARM より提供される「ARM コンパイラツールチェーン リンカの使用」の「イメージの構造
と生成」を参照してください。
表 5.3および表 5.4にサンプルコードで使用するセクションを示し、図 5.3にサンプルコードの初期状態のセ
クション配置(ロードビュー)と、スキャッタローディング機能を使用後のセクション配置(実行ビュー)
を示します。
表5.3
使用するセクション(1/2)
内容
領域の名前
例外処理ベクタテーブル
リセットハンドラ処理のプログラムコー
ド領域
この領域は以下のセクションから構成さ
れています
・INITCA9CACHE(L1 キャッシュ設定)
・INIT_TTB(MMU 設定)
・RESET_HANDLER(リセットハンドラ)
CODE_BASIC_SETUP 動作周波数とフラッシュメモリ最適化の
ためのプログラムコード領域
InRoot
この領域は C 標準ライブラリなどのルー
ト領域に配置するセクションから構成さ
れています
CODE_FPU_INIT
NEON および VFP 初期設定のプログラム
コード領域
この領域は以下のセクションから構成さ
れています
・CODE_FPU_INIT
・FPU_INIT
CODE_RESET
ハードウェア初期設定のプログラムコー
ド領域
この領域は以下のセクションから構成さ
れています
・CODE_RESET(スタートアップ処理)
・INIT_VBAR(ベクタベース設定)
CODE_IO_REGRW
IO レジスタのリード/ライト関数のプログ
ラムコード領域
CODE
デフォルトのプログラムコード領域
C ソースでセクション名を定義しない
Code タイプのセクションは、すべてこの
領域に配置されます
CONST
デフォルトの定数データ領域
C ソースでセクション名を定義しない RO
Data タイプのセクションは、すべてこの
領域に配置されます
VECTOR_TABLE
RESET_HANDLER
R01AN1864JJ0100
2014.04.25
Rev.1.00
タイプ
ロード領域
実行領域
Code
Code
FLASH
FLASH
FLASH
FLASH
Code
FLASH
FLASH
Code
および
RO Data
Code
FLASH
FLASH
FLASH
FLASH
Code
FLASH
FLASH
Code
FLASH
FLASH
Code
FLASH
FLASH
RO Data
FLASH
FLASH
Page 12 of 71
初期設定例
RZ/A1Hグループ
表5.4
使用するセクション(2/2)
領域の名前
VECTOR_MIRROR_
TABLE
CODE_HANDLER_
JMPTBL
CODE_HANDLER
DATA_HANDLER_
JMPTBL
ARM_LIB_STACK
IRQ_STACK
FIQ_STACK
SVC_STACK
ABT_STACK
TTB
ARM_LIB_HEAP
DATA
BSS
内容
例外処理ベクタテーブル
(大容量内蔵 RAM に転送して実行するた
めのセクション)
IRQ 割り込みハンドラのユーザ定義関数
のプログラムコード領域
IRQ 割り込みハンドラのプログラムコー
ド領域
この領域は以下のセクションから構成さ
れています
・CODE_HANDLER
・IRQ_FIQ_HANDLER
IRQ 割り込みハンドラのユーザ定義関数
の登録テーブルデータ領域
アプリケーションスタック領域
IRQ モードのスタック領域
FIQ モードのスタック領域
スーパバイザ(SVC)モードのスタック領
域
アボート(ABT)モードのスタック領域
MMU 変換テーブル領域
アプリケーションヒープ領域
デフォルトの初期値ありデータ領域
C ソースでセクション名を定義しない RW
Data タイプのセクションは、すべてこの
領域に配置されます
デフォルトの初期値なしデータ領域
C ソースでセクション名を定義しない ZI
Data タイプのセクションは、すべてこの
領域に配置されます
タイプ
ロード領域
実行領域
Code
FLASH
LRAM
Code
FLASH
LRAM
Code
FLASH
LRAM
RW Data
FLASH
LRAM
ZI Data
ZI Data
ZI Data
ZI Data
-
-
-
-
LRAM
LRAM
LRAM
LRAM
ZI Data
ZI Data
ZI Data
RW Data
-
-
-
FLASH
LRAM
LRAM
LRAM
LRAM
ZI Data
-
LRAM
【注】 1. 表中のロード領域および実行領域において、FLASH は NOR フラッシュメモリの領域を、LRAM は
大容量内蔵 RAM の領域を表します。
2. セクションの名前は基本的に領域と同じ名前にしていますが、RESET_HANDLER、InRoot、
CODE_FPU_INIT、CODE_RESET、CODE、CONST、CODE_HANDLER、DATA、BSS の各領域
は複数のセクションから構成されています。領域とセクションについては、ARM コンパイラツー
ルチェーンのマニュアルを参照してください。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 13 of 71
初期設定例
RZ/A1Hグループ
セクションの配置
(ロードビュー)
RZ/A1Hグループの
アドレス空間
H'FFFF FFFF
セクションの配置
(実行ビュー)
スキャッタローディング
実行後のメモリ配置
H'209F FFFF
ゼロでクリア
BSS
初期値ありデータ
の初期化
DATA
H'200B 8000
ARM_LIB_HEAP
H'2003 8000
スタックなど
領域の確保
H'2003 4000
H'2003 2000
H'2003 0000
H'2002 E000
H'2002 C000
TTB
ABT_STACK
SVC_STACK
FIQ_STAC
IRQ_STACK
ARM_LIB_STACK
H'2002 4000
初期値あり
データの
初期化
DATA_HANDLER_JMPTBL
CODE_HANDLER
H'2002 0100
CODE_HANDLER_JMPTBL
H'2002 0000
VECTOR_MIRROR_TABLE
H'2000 0000
H'03FF FFFF
H'4000 0000
DATA
DATA_HANDLER_JMPTBL
H'20A0 0000
H'2000 0000
CODE_HANDLER
大容量内蔵RAM
(10MB)
CODE_HANDLER_JMPTBL
CONST
H'1C00 0000
CODE
CODE_IO_REGRW
H'1800 0000
H'1000 0000
H'0C00 0000
H'0800 0000
図5.3
CS0空間 (64MB)
CODE
CODE_IO_REGRW
CODE_RESET
CODE_FPU_INIT
CODE_FPU_INIT
InRoot
InRoot
CODE_BASIC_SETUP
CODE_BASIC_SETUP
RESER_HANDLER
H'0400 0000
CONST
CODE_RESET
RESER_HANDLER
例外処理ベクタの
内蔵RAMへの転送
H'0000 0200
H'0000 0000
高速化が
必要な
プログラム
コードの
内蔵RAM
への転送
H'0000 0100
VECTOR_MIRROR_TABLE
H'0000 0000
VECTOR_TABLE
VECTOR_TABLE
セクション配置
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 14 of 71
初期設定例
RZ/A1Hグループ
5.2.4
MMU の設定
GENMAI ボードで使用するハードウェア資源のメモリマップにあわせて、H'0000 0000 番地から 1MB 単位
で 4GB の領域を MMU で管理するように設定しています(ttb_init.s ファイルで設定しています)。システム
にあわせてカスタマイズする場合は、最少単位を 1MB としてください。
表 5.5にサンプルコードのMMU の設定を示します。
表5.5
MMU の設定
定義名
内容
アドレス
M_SIZE_NOR
CS0、CS1 空間
(NOR フラッシュメモリ)
M_SIZE_SDRAM
CS2、CS3 空間
(SDRAM)
M_SIZE_CS45
CS4、CS5 空間
M_SIZE_SPI
SPI マルチ IO バス空間 1
および 2(シリアルフラッ
シュメモリ)
大容量内蔵 RAM 空間
H'0000 0000
~
H'07FF FFFF
H'0800 0000
~
H'0FFF FFFF
H'1000 0000
~
H'17FF FFFF
H'1800 0000
~
H'1FFF FFFF
H'2000 0000
~
H'209F FFFF
H'20A0 0000
~
H'3FFF FFFF
H'4000 0000
~
H'47FF FFFF
H'4800 0000
~
H'4FFF FFFF
H'5000 0000
~
H'57FF FFFF
H'5800 0000
~
H'5FFF FFFF
H'6000 0000
~
H'609F FFFF
H'60A0 0000
~
H'FFFF FFFF
M_SIZE_RAM
M_SIZE_IO_1
内蔵周辺モジュールおよび
予約エリア
M_SIZE_NOR_M
CS0、CS1 ミラー空間
M_SIZE_SDRAM_M
CS2、CS3 ミラー空間
M_SIZE_CS45_M
CS4、CS5 ミラー空間
M_SIZE_SPI_M
SPI マルチ IO バス
ミラー空間 1 および 2
M_SIZE_RAM_M
大容量内蔵 RAM ミラー空間
M_SIZE_IO_2
内蔵周辺モジュールおよび
予約エリア
R01AN1864JJ0100
2014.04.25
Rev.1.00
サイズ
メモリタイプ
128MB
L1 キャッシュ有効、
ノーマルメモリ
128MB
L1 キャッシュ有効、
ノーマルメモリ
128MB
ストロングリオーダメモリ
(L1 キャッシュ無効)
128MB
L1 キャッシュ有効、
ノーマルメモリ
10MB
L1 キャッシュ有効、
ノーマルメモリ
502MB
ストロングリオーダメモリ
(L1 キャッシュ無効)
128MB
L1 キャッシュ無効、
ノーマルメモリ
128MB
L1 キャッシュ無効、
ノーマルメモリ
128MB
ストロングリオーダメモリ
(L1 キャッシュ無効)
128MB
L1 キャッシュ無効、
ノーマルメモリ
10MB
L1 キャッシュ無効、
ノーマルメモリ
2550MB
ストロングリオーダメモリ
(L1 キャッシュ無効)
Page 15 of 71
初期設定例
RZ/A1Hグループ
5.2.5
例外処理ベクタテーブル
RZ/A1Hには 7 種類の例外処理(リセット、未定義命令、ソフトウェア割り込み、プリフェッチアボート、
データアボート、IRQ、FIQ)があり、ブートモード 0 の場合、リセット解除後に例外処理ベクタテーブルは
H'0000 0000 番地から 32 バイトの領域(H'0000 0000 番地~H'0000 001F 番地)に配置されます。例外処理ベ
クタテーブルには、各例外処理への分岐命令を記述します。
図 5.4に例外処理ベクタテーブルの記述例として、サンプルコードの例外処理ベクタテーブル内容を示しま
す。
vector_table
LDR pc, =reset_handler
LDR pc, =undefined_handler
LDR pc, =svc_handler
LDR pc, =prefetch_handler
LDR pc, =abort_handler
LDR pc, =reserved_handler
LDR pc, =irq_handler
LDR pc, =fiq_handler
図5.4
;
;
;
;
;
;
;
;
0x0000_0000
0x0000_0004
0x0000_0008
0x0000_000c
0x0000_0010
0x0000_0014
0x0000_0018
0x0000_001c
:
:
:
:
:
:
:
:
Reset exception
Undefined instructions exception
Software interrupts exceptions
Prefetch abort exception
Data abort exception
Reserved
IRQ exception
FIQ exception
例外処理ベクタテーブルの記述例
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 16 of 71
初期設定例
RZ/A1Hグループ
使用割り込み一覧
5.3
表 5.6にサンプルコードで使用する割り込みを示します。
表5.6
サンプルコードで使用する割り込み
割り込み要因(要因 ID)
優先度
OSTM0(134)
処理概要
500ms ごとに割り込みを発生
5
固定幅整数一覧
5.4
表 5.7にサンプルコードで使用する固定幅整数を示します。
表5.7
サンプルコードで使用する固定幅整数
シンボル
8 ビット文字
論理型。値は true(1), false(0)
高速な整数、符号あり、本サンプルコードでは 32 ビット整数。
8 ビット整数、符号あり(標準ライブラリにて定義)
16 ビット整数、符号あり(標準ライブラリにて定義)
32 ビット整数、符号あり(標準ライブラリにて定義)
64 ビット整数、符号あり(標準ライブラリにて定義)
8 ビット整数、符号なし(標準ライブラリにて定義)
16 ビット整数、符号なし(標準ライブラリにて定義)
32 ビット整数、符号なし(標準ライブラリにて定義)
64 ビット整数、符号なし(標準ライブラリにて定義)
32 ビット浮動小数
("__ARM_NEON__"を指定時、標準ライブラリにて定義)
64 ビット浮動小数(標準ライブラリにて定義)
("__ARM_NEON__"を指定時、標準ライブラリにて定義)
128 ビット浮動小数
char_t
bool_t
int_t
int8_t
int16_t
int32_t
int64_t
uint8_t
uint16_t
uint32_t
uint64_t
float32_t
float64_t
float128_t
R01AN1864JJ0100
2014.04.25
内容
Rev.1.00
Page 17 of 71
初期設定例
RZ/A1Hグループ
5.5
定数一覧
表 5.8にサンプルコードで使用する定数を示します。
表5.8
サンプルコードで使用する定数
定数名
設定値
DEVDRV_SUCCESS
DEVDRV_ERROR
DEVDRV_CH_0
~
DEVDRV_CH_15
BSC_AREA_CS0
BSC_AREA_CS1
BSC_AREA_CS2
BSC_AREA_CS3
BSC_AREA_CS4
BSC_AREA_CS5
INTC_ID_OSTM0TINT
INTC_ID_OSTM1TINT
(0)
(-1)
(0)
~
(15)
(0x01)
(0x02)
(0x04)
(0x08)
(0x10)
(0x20)
(134)
(135)
INTC_LEVEL_SENSITIVE
INTC_EDGE_TRIGGER
OSTM_MODE_INTERVAL
OSTM_MODE_COMPARE
(0)
(1)
(0)
(1)
SCIF_UART_MODE_W
SCIF_UART_MODE_R
SCIF_UART_MODE_RW
SCIF_CKS_DIVISION_1
SCIF_CKS_DIVISION_4
SCIF_CKS_DIVISION_16
SCIF_CKS_DIVISION_64
(1)
(2)
(3)
(0)
(1)
(2)
(3)
SDRAM_MODE_CS2
(*(volatile uint16_t *)
(0x3FFFD040))
(*(volatile uint16_t *)
(0x3FFFE040))
(33.333 * 1000)
SDRAM_MODE_CS3
P0_CLOCK_FREQUENCY_
kHz
MAX_CYCLE_msec
(0xFFFFFFFF /
P0_CLOCK_FREQU
ENCY_kHz)
(1)
(0)
MAIN_LED_ON
MAIN_LED_OFF
R01AN1864JJ0100
2014.04.25
Rev.1.00
内容
API 関数の正常終了
API 関数の終了
周辺 IO のチャネル(列挙型で定義)
DEVDRV_CH_0~DEVDRV_CH_15 を、0~15 の順
に定義しており、使用するチャネルを指定します
CS0 空間の定義
CS1 空間の定義
CS2 空間の定義
CS3 空間の定義
CS4 空間の定義
CS5 空間の定義
OSTM チャネル 0 の割り込み ID
OSTM チャネル 1 の割り込み ID
その他の割り込み ID(0~586 の ID)についても定
義していますので、"devdrv_intc.h"の内容を参照し
てください。
割り込みの検出モードがレベルセンス
割り込みの検出モードがエッジトリガ
OSTM の動作モードがインターバルタイマモード
OSTM の動作モードがフリーランニングコンペア
モード
SCIF を調歩同期式モードの送信で使用
SCIF を調歩同期式モードの受信で使用
SCIF を調歩同期式モードの送受信で使用
SCIF の内蔵ボーレートジェネレータの内部クロッ
クソース選択の定義
SCIF_CKS_DIVISION_1:P1φを選択
SCIF_CKS_DIVISION_4:P1φ/4 を選択
SCIF_CKS_DIVISION_16:P1φ/16 を選択
SCIF_CKS_DIVISION_64:P1φ/64 を選択
エリア 2 の SDRAM モードレジスタライト時のアク
セスアドレス
エリア 3 の SDRAM モードレジスタライト時のアク
セスアドレス
P0φの周波数の定義
OSTM の 1 カウントあたりの周波数
OSTM のタイマカウンタで生成可能な最大の周期
LED の点灯
LED の消灯
Page 18 of 71
初期設定例
RZ/A1Hグループ
5.6
変数一覧
表 5.9にstatic 型変数を示します。
表5.9
static 型変数
型
変数名
内容
使用関数
static void
(* intc_func_table[])
(uint32_t int_sense)
Userdef_INTC_RegistInt
Func
Userdef_INTC_Handler
Exe
static uint32_t
intc_icdicfrn_table[]
static uint32_t
main_led_flg
割り込みハンドラ登録テーブル
割り込み ID に対応する割り込み処理
関数を、Userdef_INTC_RegistIntFunc
関数を使用して登録するための関数
テーブルです。
INTC 割り込み発生時に、テーブルに
登録した割り込み ID に対応する関数
が、Userdef_INTC_HandlerExe により
コールされます。
割り込み検出モードの構成テーブル
各割り込み ID の割り込みの検出モー
ドを、割り込み構成レジスタ
ICDICFRn に設定するためのテーブル
です。
端子割り込み(ID が 416~586)につ
いては、R_INTC_SetConfiguration 関
数により、検出モードを変更すること
ができます。
OSTM0 割り込み通知フラグ
OSTM0 割り込みが発生するたびに、
最下位ビットを反転します。
MAIN_LED_ON のとき LED を点灯
MAIN_LED_OFF のとき LED を消灯
R01AN1864JJ0100
2014.04.25
Rev.1.00
R_INTC_Init
R_INTC_SetConfigurati
on
main
Sample_OSTM0_Interru
pt
Page 19 of 71
初期設定例
RZ/A1Hグループ
5.7
関数一覧
サンプルコードは、周辺機能を使用するためのインタフェース関数(API 関数)、ユーザシステムの用途
に合わせてユーザで準備が必要なユーザ定義関数(API 関数からコールされる関数)、サンプルコードを動
作させるために必要なサンプル関数から構成されています。
周辺 IO レジスタをビット単位でアクセスする場合は、サンプルコードでは API 関数の IO レジスタライト
関数または IO レジスタリード関数を使用しています。
表 5.10にサンプル関数を、表 5.11にAPI 関数を、表 5.12にユーザ定義関数を示します。
表5.10
サンプル関数
関数名
reset_handler
$Sub$$main
main
Sample_Main
Peripheral_BasicInit
CPG_Init
CS0_PORTInit
PORT_Init
STB_Init
irq_handler
INTC_Handler_Interrupt
LedInit
LedOn
LedOff
Sample_OSTM0_Interrupt
IoInitScif2
IoGetchar
IoPutchar
R01AN1864JJ0100
2014.04.25
Rev.1.00
概要
リセットハンドラ処理(アセンブラ関数)
周辺機能の初期設定($Super$$main をコールし main に分岐)
メイン処理
ターミナルから入力されたコマンドにより、周辺機能のサンプル
コードを起動
周辺機能の初期設定(動作周波数とフラッシュメモリアクセスの最
適化)
CPG の初期設定
CS0 および CS1 空間を使用するための PORT の兼用端子設定
PORT の兼用端子設定
STB の初期設定
IRQ ハンドラ処理(アセンブラ関数)
INTC 割り込みハンドラ処理
LED 制御用 PORT の初期設定
LED の点灯処理
LED の消灯処理
OSTM チャネル 0 割り込み処理
SCIF の初期設定(調歩同期式モードに設定)
シリアルインタフェースからの 1 文字受信処理
(ターミナルからの文字入力に使用)
シリアルインタフェースへの 1 文字送信処理
(ターミナルへの文字出力に使用)
Page 20 of 71
初期設定例
RZ/A1Hグループ
表5.11
API 関数
関数名
R_BSC_Init
R_INTC_Init
R_INTC_Enable
R_INTC_Disable
R_INTC_SetPriority
R_INTC_SetMaskLevel
R_INTC_GetMaskLevel
R_INTC_GetPendingStatus
R_INTC_SetConfiguration
R_INTC_RegistIntFunc
R_OSTM_Init
R_OSTM_Open
R_OSTM_Close
R_SCIF_UART_Init
RZA_IO_RegWrite_8
RZA_IO_RegWrite_16
RZA_IO_RegWrite_32
RZA_IO_RegRead_8
RZA_IO_RegRead_16
RZA_IO_RegRead_32
表5.12
概要
BSC の初期設定
INTC の初期設定
INTC の割り込みの許可
INTC の割り込みの禁止
INTC の割り込み優先レベルの設定
INTC の割り込みマスクレベルの設定
INTC の割り込みマスクレベルの取得
INTC の割り込み保留状態の取得
INTC の端子割り込み検出モードの設定
INTC の割り込みハンドラの登録
OSTM の初期設定
OSTM のカウント開始
OSTM のカウント停止
SCIF の調歩同期式モードの初期設定
IO レジスタライト関数(8 ビットアクセス可能な IO レジスタ用)
IO レジスタライト関数(16 ビットアクセス可能な IO レジスタ用)
IO レジスタライト関数(32 ビットアクセス可能な IO レジスタ用)
IO レジスタリード関数(8 ビットアクセス可能な IO レジスタ用)
IO レジスタリード関数(16 ビットアクセス可能な IO レジスタ用)
IO レジスタリード関数(32 ビットアクセス可能な IO レジスタ用)
ユーザ定義関数
関数名
Userdef_BSC_CS0Init
Userdef_BSC_CS1Init
Userdef_BSC_CS2Init
Userdef_BSC_CS3Init
Userdef_BSC_CS4Init
Userdef_BSC_CS5Init
Userdef_INTC_RegistIntFunc
Userdef_INTC_HandlerExe
Userdef_INTC_UndefId
Userdef_INTC_Dummy_Interrupt
Userdef_OSTM0_Init
Userdef_OSTM1_Init
Userdef_SCIF2_UART_Init
R01AN1864JJ0100
2014.04.25
Rev.1.00
概要
CS0 空間の BSC の初期設定
CS1 空間の BSC の初期設定
CS2 空間の BSC の初期設定
CS3 空間の BSC の初期設定
CS4 空間の BSC の初期設定
CS5 空間の BSC の初期設定
INTC 割り込みハンドラの登録
INTC 割り込み要因に対応したハンドラ処理
INTC 割り込みの非サポート割り込み ID 受け付け時の処理
INTC 割り込みハンドラが未登録の ID 受け付け時の処理
OSTM チャネル 0 の初期設定
OSTM チャネル 1 の初期設定
SCIF チャネル 2 の調歩同期式モードの初期設定
Page 21 of 71
初期設定例
RZ/A1Hグループ
5.8
関数仕様
サンプルコードの関数仕様を示します。
reset_handler
概 要
宣 言
説 明
引 数
リターン値
$Sub$$main
概 要
宣 言
説 明
引 数
リターン値
リセットハンドラ処理
reset_handler
FUNCTION {}
リセット解除後に実行されるアセンブラ関数です。スタックポインタやリセット解除
後に最低限必要な周辺機能の初期設定、MMU の初期設定を行い、main 関数を実行す
るために、標準ライブラリ関数__main をコールします。
なし
なし
周辺機能の初期設定
void $Sub$$main(void)
周辺機能の初期設定を行い、ライブラリ関数$Super$$main をコールすることで、
main 関数に分岐します。
サンプルコードでは、STB、PORT、INTC、L1 キャッシュの初期設定を行い、ベク
タベースアドレスを内蔵 RAM 領域に設定しています。また、IRQ および FIQ の割り
込みを、ライブラリ関数__enable_irq, __enable_fiq をコールして許可しています。
なし
なし
main
概
宣
説
要
言
明
引 数
リターン値
Sample_Main
概 要
宣 言
説 明
引 数
リターン値
R01AN1864JJ0100
2014.04.25
メイン処理
int_t main(void)
GENMAI ボードとシリアルインタフェースで接続されたホスト PC 上のターミナル
にサンプルコードの情報を表示し、ボード上で LED と接続された PORT の初期設定
を行います。
OSTM チャネル 0 の初期設定を行い、500ms ごとに OSTM チャネル 0 割り込みが発
生するようにタイマカウントを設定し起動します。
なし
0
サンプルコードのメイン処理
void Sample_Main(void)
GENMAI ボードとシリアルインタフェースで接続されたホスト PC 上のターミナル
から入力されたコマンドを解析し、RZ/A1Hの各周辺機能のサンプルコードを起動し
ます。
なし
なし
Rev.1.00
Page 22 of 71
初期設定例
RZ/A1Hグループ
Peripheral_BasicInit
概 要
宣 言
説 明
引 数
リターン値
注意事項
CPG_Init
概
宣
説
要
言
明
引 数
リターン値
注意事項
R01AN1864JJ0100
2014.04.25
周辺機能の初期設定(動作周波数とフラッシュメモリアクセスの最適化)
void Peripheral_BasicInit(void)
サンプル関数 CPG_Init、CS0_PORTInit、および API 関数 R_BSC_Init をコールして、
CPG の設定、保持用 RAM 領域のライト許可、および CS0、CS1 空間の PORT 設定
と BSC の設定を行います。
なし
なし
本関数をコールした時点では、RW データや ZI データのセクション領域の初期化を
行っていません。本関数および本関数からコールされるユーザ定義関数内で、RW
データや ZI データのセクション領域に配置される変数を使用しないでください。
CPG の初期設定
void CPG_Init(void)
CPG の初期設定を行います。
サンプルコードでは、クロックモードが 0 の状態で、内部クロック比が I:G:B:
P1:P0 = 30:20:10:5:5/2 となるように設定し、入力クロックが 13.33MHz 時に
以下の周波数となるように設定しています。
CPU クロック(Iφ):400MHz
画像処理クロック(Gφ):266.67MHz
内部バスクロック(Bφ):133.33MHz
周辺クロック 1(P1φ):66.67MHz
周辺クロック 0(P0φ):33.33MHz
また、保持用内蔵 RAM 領域(H'2000 0000~H'2001 FFFF)のライト許可の設定を
行っています。
なし
なし
本関数は、Peripheral_BasicInit 関数からコールされるため、RW データや ZI データ
のセクション領域の初期化を行っていません。本関数および本関数からコールされる
ユーザ定義関数内で、RW データや ZI データのセクション領域に配置される変数を
使用しないでください。
Rev.1.00
Page 23 of 71
初期設定例
RZ/A1Hグループ
CS0_PORTInit
概 要
宣 言
説 明
引 数
リターン値
注意事項
R_BSC_Init
概 要
宣 言
説 明
引
数
リターン値
注意事項
R01AN1864JJ0100
2014.04.25
CS0 および CS1 空間を使用するための PORT のマルチプレクス端子設定
void CS0_PORTInit(void)
CS0、CS1 空間使用するために、PORT のマルチプレクス端子の設定を行います。
サンプルコードでは、CS0 および CS1 空間で NOR フラッシュメモリを使用するた
めの PORT 設定を行っています。
なし
なし
本関数は、Peripheral_BasicInit 関数からコールされるため、RW データや ZI データ
のセクション領域の初期化を行っていません。本関数および本関数からコールされる
ユーザ定義関数内で、RW データや ZI データのセクション領域に配置される変数を
使用しないでください。
BSC の初期設定
void R_BSC_Init(utin8_t area)
BSC の初期設定を行います。
ユーザ定義関数 Userdef_BSC_CSnInit をコールして、BSC の各チャネルの設定を行
います(CSn は CS0~CS5 を表します)。
uint8_t area
初期設定を行う CS 空間の指定
BSC_AREA_CS0
CS0 空間の設定を行います
BSC_AREA_CS1
CS1 空間の設定を行います
BSC_AREA_CS2
CS2 空間の設定を行います
BSC_AREA_CS3
CS3 空間の設定を行います
BSC_AREA_CS4
CS4 空間の設定を行います
BSC_AREA_CS5
CS5 空間の設定を行います
なし
本関数は、Peripheral_BasicInit 関数からコールされるため、RW データや ZI データ
のセクション領域の初期化を行っていません。本関数および本関数からコールされる
ユーザ定義関数内で、RW データや ZI データのセクション領域に配置される変数を
使用しないでください。
Rev.1.00
Page 24 of 71
初期設定例
RZ/A1Hグループ
Userdef_BSC_CS0Init
概 要
CS0 空間の BSC の初期設定
void Userdef_BSC_CS0Init(void)
宣 言
説 明
R_BSC_Init 関数からコールされるユーザ定義関数です。CS0 空間の BSC を初期化
するための設定を行ってください。
サンプルコードでは、CS0 空間で NOR フラッシュメモリを使用するための設定を行
います。Spansion 社製 NOR フラッシュメモリ S29GL512S10TFI01 を CS0 空間に
16 ビットバス幅で接続するように、BSC を設定します。
なし
引 数
リターン値
なし
Userdef_BSC_CS1Init
概 要
CS1 空間の BSC の初期設定
void Userdef_BSC_CS1Init(void)
宣 言
説 明
R_BSC_Init 関数からコールされるユーザ定義関数です。CS1 空間の BSC を初期化
するための設定を行ってください。
サンプルコードでは、CS1 空間で NOR フラッシュメモリを使用するための設定を行
います。Spansion 社製 NOR フラッシュメモリ S29GL512S10TFI01 を CS1 空間に
16 ビットバス幅で接続するように、BSC を設定します。
なし
引 数
リターン値
なし
Userdef_BSC_CS2Init
概 要
CS2 空間の BSC の初期設定
void Userdef_BSC_CS2Init(void)
宣 言
説 明
R_BSC_Init 関数からコールされるユーザ定義関数です。CS2 空間の BSC を初期化
するための設定を行ってください。
サンプルコードでは、CS2 空間で SDRAM を使用するための設定を行います。ISSI
社製 IS42S16320B-75 を CS2 空間に 16 ビットバス幅で接続するように、BSC を設
定します。
なし
引 数
リターン値
なし
注意事項
エリア 2 とエリア 3 の両方で SDRAM を使用する場合は、CS3 空間の BSC の初期設
定を実施後に、CS2 空間の初期設定を行ってください。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 25 of 71
初期設定例
RZ/A1Hグループ
Userdef_BSC_CS3Init
概 要
CS3 空間の BSC の初期設定
void Userdef_BSC_CS3Init(void)
宣 言
説 明
R_BSC_Init 関数からコールされるユーザ定義関数です。CS3 空間の BSC を初期化
するための設定を行ってください。
サンプルコードでは、CS3 空間で SDRAM を使用するための設定を行います。ISSI
社製 IS42S16320B-75 を CS3 空間に 16 ビットバス幅で接続するように、BSC を設
定します。
なし
引 数
リターン値
なし
Userdef_BSC_CS4Init
概 要
CS4 空間の BSC の初期設定
void Userdef_BSC_CS4Init(void)
宣 言
説 明
R_BSC_Init 関数からコールされるユーザ定義関数です。CS4 空間の BSC を初期化
するための設定を行ってください。
なし
引 数
リターン値
なし
Userdef_BSC_CS5Init
概 要
CS5 空間の BSC の初期設定
void Userdef_BSC_CS5Init(void)
宣 言
説 明
R_BSC_Init 関数からコールされるユーザ定義関数です。CS5 空間の BSC を初期化
するための設定を行ってください。
なし
引 数
リターン値
なし
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 26 of 71
初期設定例
RZ/A1Hグループ
STB_Init
概
宣
説
要
言
明
引 数
リターン値
PORT_Init
概 要
宣 言
説 明
引 数
リターン値
R01AN1864JJ0100
2014.04.25
STB の初期設定
void STB_Init(void)
STB の初期設定を行います。
サンプルコードでは、STBCR2~STBCR13 の初期設定を行っています。
なし
なし
PORT のマルチプレクス端子設定
void PORT_Init(void)
PORT の初期設定を行います。
サンプルコードでは、CS2 および CS3 空間に SDRAM を接続するための PORT の初
期設定を行っています。
なし
なし
Rev.1.00
Page 27 of 71
初期設定例
RZ/A1Hグループ
R_INTC_Init
概 要
宣 言
説 明
引 数
リターン値
R_INTC_Enable
概 要
宣 言
説 明
引 数
リターン値
R_INTC_Disable
概 要
宣 言
説 明
引 数
リターン値
R01AN1864JJ0100
2014.04.25
INTC の初期設定
void R_INTC_Init(void)
INTC の初期設定を行います。
割り込み優先レベルが 0~30 の割り込みを受け付けるようにしています。
なし
なし
INTC の割り込みの許可
int32_t R_INTC_Enable(uint16_t int_id)
int_id で指定された ID の割り込みを許可します。
uint16_t int_id
:割り込み ID(0~586)
DEVDRV_SUCCESS :INTC の割り込み許可成功
DEVDRV_ERROR
:INTC の割り込み許可失敗
INTC の割り込みの禁止
int32_t R_INTC_Disable(uint16_t int_id)
int_id で指定された ID の割り込みを禁止します。
uint16_t int_id
:割り込み ID(0~586)
DEVDRV_SUCCESS :INTC の割り込み禁止成功
DEVDRV_ERROR
:INTC の割り込み禁止失敗
Rev.1.00
Page 28 of 71
初期設定例
RZ/A1Hグループ
R_INTC_SetPriority
概 要
宣 言
説 明
引
数
リターン値
INTC の割り込み優先レベルの設定
int32_t R_INTC_SetPriority(uint16_t int_id, uint8_t priority)
int_id で指定された ID の割り込み優先レベルを、priority で指定された優先レベルに
設定します。
uint16_t int_id
:割り込み ID(0~586)
uint8_t priority
:割り込み優先レベル(0~31)
DEVDRV_SUCCESS :INTC の割り込み優先レベル設定成功
DEVDRV_ERROR
:INTC の割り込み優先レベル設定失敗
R_INTC_SetMaskLevel
概 要
INTC の割り込みマスクレベルの設定
int32_t R_INTC_SetMaskLevel(uint8_t mask_level)
宣 言
説 明
mask_level で指定された割り込みマスクレベルを設定します。
uint8_t mask_level
引 数
:割り込みマスクレベル(0~31)
リターン値
DEVDRV_SUCCESS :INTC の割り込みマスクレベル設定成功
DEVDRV_ERROR
:INTC の割り込みマスクレベル設定失敗
R_INTC_GetMaskLevel
概 要
INTC の割り込みマスクレベルの取得
void R_INTC_GetMaskLevel(uint8_t *mask_level)
宣 言
説 明
割り込みマスクレベルの設定値を取得し、取得した値を mask_level に返します。
uint8_t *mask_level
引 数
:取得した割り込みマスクレベル値(0~31)
リターン値
なし
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 29 of 71
初期設定例
RZ/A1Hグループ
R_INTC_GetPendingStatus
概 要
INTC の割り込み保留状態の取得
int32_t R_INTC_GetPendingStatus(uint16_t int_id, uint32_t *icdicpr)
宣 言
説 明
int_id で指定された ID の割り込み保留状態を取得し、icdicpr に保留状態であれば"1"
を、保留状態でなければ"0"を返します。
uint16_t int_id
:割り込み ID(0~586)
引 数
uint32_t *icdicpr
:int_id で指定された割り込みの保留状態
1
割り込みが保留状態
0
割り込みが保留状態ではない
DEVDRV_SUCCESS :INTC の割り込み保留状態の取得成功
リターン値
DEVDRV_ERROR
:INTC の割り込み保留状態の取得失敗
R_INTC_SetConfiguration
概 要
INTC の端子割り込み検出モードの設定
int32_t R_INTC_SetConfiguration(uint16_t int_id, uint32_t int_sense)
宣 言
説 明
int_id で指定された ID の端子割り込みの検出モードを、int_sense で指定されたモー
ドで検出できるように設定します。
uint16_t int_id
:割り込み ID(416~586)
引 数
uint32_t int_sense
:端子割り込みの検出モード
INTC_LEVEL_SENSITIVE
レベルセンス
INTC_EDGE_TRIGGER
エッジトリガ
DEVDRV_SUCCESS :INTC の端子割り込み検出モード設定成功
リターン値
DEVDRV_ERROR
:INTC の端子割り込み検出モード設定失敗
R_INTC_RegistIntFunc
概 要
INTC 割り込みハンドラ関数の登録
int32_t R_INTC_RegistIntFunc(uint16_t int_id, void (* func) (uint32_t int_sense))
宣 言
説 明
func で指定された関数を、INTC 割り込みハンドラ関数テーブルの int_id で指定され
た要素に、ユーザ定義関数 Userdef_INTC_RegistIntFunc をコールして登録します。
uint16_t int_id
:割り込み ID(0~586)
引 数
void (* func) (uint32_t
:INTC 割り込みハンドラテーブルへの登録関数
int_sense)
リターン値
DEVDRV_SUCCESS :INTC の割り込みハンドラ関数の登録成功
DEVDRV_ERROR
:INTC の割り込みハンドラ関数の登録失敗
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 30 of 71
初期設定例
RZ/A1Hグループ
irq_handler
概 要
宣 言
説 明
引 数
リターン値
IRQ ハンドラ処理
irq_handler
IRQ 割り込み発生時に実行されるアセンブラ関数です。LR_irq, SPSR_irq および汎用
レジスタのスタックへの退避と INTC 割り込み発生要因の ID を取得した後、C 言語
で記述した INTC_Handler_interrupt 関数をコールし、
発生要因の ID に対応した INTC
割り込みハンドラの処理を行います。
INTC 割り込みハンドラ処理を行った後、汎用レジスタをスタックから復帰し、RFE
命令を実行して LR_irq, SPSR_irq をスタックから復帰し、IRQ 割り込み処理から割
り込み発生前の処理にリターンします。
割り込み ID が 1023 の場合は、割り込みハンドラ処理は行わず、スタックの退避お
よび復帰の処理のみを行い、割り込み発生前の処理にリターンします。
なし
なし
INTC_Handler_Interrupt
概 要
INTC 割り込みハンドラ処理
void INTC_Handler_Interrupt(uint32_t icciar)
宣 言
説 明
irq_handler からコールされる INTC 割り込みハンドラ処理です。icciar で指定された
INTC 割り込み発生要因の ID に対応したハンドラ処理を、Userdef_INTC_HandlerExe
関数をコールして実行します。IRQ の多重割り込みを許可しています。
uint32_t icciar
引 数
:割り込み ID(ICCIAR レジスタの値)
リターン値
なし
Userdef_INTC_RegistIntFunc
概 要
INTC 割り込みハンドラ関数の登録
void Userdef_INTC_RegistIntFunc(uint16_t int_id, void (* func) (uint32_t int_sense))
宣 言
説 明
R_INTC_RegistIntFunc からコールされるユーザ定義関数です。
func で指定された関数を、INTC 割り込みハンドラ関数テーブル intc_func_table[]の
int_id で指定された要素に登録するように処理を記述してください。
uint16_t int_id
:割り込み ID(0~586)
引 数
void (* func) (uint32_t
:INTC 割り込みハンドラテーブルへの登録関数
int_sense)
リターン値
なし
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 31 of 71
初期設定例
RZ/A1Hグループ
Userdef_INTC_HandlerExe
概 要
INTC 割り込み要因に対応したハンドラ処理
void Userdef_INTC_HandlerExe(uint16_t int_id, uint32_t int_sense)
宣 言
説 明
INTC_Handler_Interrupt からコールされるユーザ定義関数です。引数 int_id で指定さ
れた INTC 割り込み発生要因の ID に対応したハンドラ処理を実行するように記述し
てください。
サンプルコードでは、INTC 割り込みハンドラ関数テーブル intc_func_table[]の int_id
の要素に登録されている関数を実行します。intc_func_table[]への割り込みハンドラ
関数の登録は、Userdef_INTC_RegistIntFunc 関数にて実施してください。
intc_func_table[]に登録された割り込みハンドラ関数の処理において、引数 int_sense
がレベルセンスの場合は、「RZ/A1Hグループユーザーズマニュアル ハードウェア
編」に記載の割り込み処理のフローを参照して、必要な処理を行ってください。
uint16_t int_id
引 数
:割り込み ID(0~586)
uint32_t int_sense
:割り込みの検出モード
INTC_LEVEL_SENSITIVE
レベルセンス
INTC_EDGE_TRIGGER
エッジトリガ
なし
リターン値
Userdef_INTC_UndefId
概 要
INTC 割り込みの非サポート割り込み ID 受け付け時の処理
void Userdef_INTC_UndefId(uint16_t int_id)
宣 言
説 明
INTC_Handler_Interrupt からコールされるユーザ定義関数です。割り込み ID が 587
以上の割り込み ID の割り込みが受け付けられた場合に実行する処理を実装してくだ
さい。
サンプルコードでは、無限ループの処理をしています。
uint16_t int_id
:割り込み ID(587~1022)
引 数
リターン値
なし
Userdef_INTC_Dummy_Interrupt
概 要
INTC 割り込みハンドラが未登録の ID 受け付け時の処理
static void Userdef_INTC_Dummy_Interrupt(uint32_t int_sense)
宣 言
説 明
Userdef_INTC_HandlerExe からコールされるユーザ定義関数です。割り込み ID に対
するユーザ割り込みハンドラ関数が未登録の割り込み ID が受け付けられた場合に実
行する処理を実装してください。
サンプルコードでは、IRQ 割り込みを禁止にして、無限ループの処理をしています。
uint32_t int_sense
:割り込みの検出モード
引 数
INTC_LEVEL_SENSITIVE
レベルセンス
INTC_EDGE_TRIGGER
エッジトリガ
なし
リターン値
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 32 of 71
初期設定例
RZ/A1Hグループ
R_OSTM_Init
概 要
宣 言
説 明
引
数
リターン値
R_OSTM_Open
概 要
宣 言
説 明
引 数
リターン値
R_OSTM_Close
概 要
宣 言
説 明
引
数
リターン値
R01AN1864JJ0100
2014.04.25
OSTM の初期設定
int32_t R_OSTM_Init(uint32_t channel, uint32_t mode, uint32_t cycle)
引数 channel で指定された OSTM の初期設定を行います。
引数 cycle で指定されたタイマ周期からカウント値を設定します。
サンプルコードでは、ユーザ定義関数 Userdef_OSTMn_Init で初期設定を行っていま
す(n は 0 または 1)。
uint32_t channel
:OSTM のチャネル(0 または 1)
uint32_t mode
:OSTM の動作モード
OSTM_MODE_INTERVAL:インターバルタイマ
OSTM_MODE_COMPARE:フリーランニングコンペア
uint32_t cycle
:タイマ周期
DEVDRV_SUCCESS :OSTM の初期化成功
DEVDRV_ERROR
:OSTM の初期化失敗
OSTM のカウント開始
int32_t R_OSTM_Open(uint32_t channel)
引数 channel で指定された OSTM のタイマカウントを開始します。
unit32_t channel
:OSTM のチャネル(0 または 1)
DEVDRV_SUCCESS :OSTM のカウント開始成功
DEVDRV_ERROR
:OSTM のカウント開始失敗
OSTM のカウント停止
int32_t R_OSTM_Close(uint32_t channel, uint32_t *count)
引数 channel で指定された OSTM のタイマカウントを停止します。引数*count にタ
イマカウント停止時のカウント値を返します。
unit32_t channel
:OSTM のチャネル(0 または 1)
unit32_t *count
:タイマカウント停止時のカウント値
DEVDRV_SUCCESS :OSTM のカウント停止成功
DEVDRV_ERROR
:OSTM のカウント停止失敗
Rev.1.00
Page 33 of 71
初期設定例
RZ/A1Hグループ
Userdef_OSTM0_Init
概 要
OSTM チャネル 0 の初期設定
int32_t Userdef_OSTM0_Init(uint32_t mode, uint32_t cycle)
宣 言
説 明
ユーザ定義関数です。引数 mode で指定された動作モードで、引数 cycle で指定され
たタイマ周期から OSTM チャネル 0 のカウント値を初期設定するように処理を実現
してください。
サンプルコードでは、P0φが 33.33MHz であることを前提として、タイマカウント
値を設定しています。また、OSTM0 割り込みを使用するための初期設定を行ってい
ます。
uint32_t mode
引 数
:OSTM の動作モード
OSTM_MODE_INTERVAL:インターバルタイマ
OSTM_MODE_COMPARE:フリーランニングコンペア
uint32_t cycle
:タイマ周期
リターン値
DEVDRV_SUCCESS :OSTM の初期化成功
DEVDRV_ERROR
:OSTM の初期化失敗
Userdef_OSTM1_Init
概 要
OSTM チャネル 1 の初期設定
int32_t Userdef_OSTM1_Init(uint32_t mode, uint32_t cycle)
宣 言
説 明
ユーザ定義関数です。引数 mode で指定された動作モードで、引数 cycle で指定され
たタイマ周期から OSTM チャネル 1 のカウント値を初期設定するように処理を実現
してください。
uint32_t mode
引 数
:OSTM の動作モード
OSTM_MODE_INTERVAL:インターバルタイマ
OSTM_MODE_COMPARE:フリーランニングコンペア
uint32_t cycle
:タイマ周期
リターン値
DEVDRV_SUCCESS :OSTM の初期化成功
DEVDRV_ERROR
:OSTM の初期化失敗
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 34 of 71
初期設定例
RZ/A1Hグループ
Sample_OSTM0_Interrupt
概 要
OSTM チャネル 0 割り込み処理
void Sample_OSTM0_Interrupt(uint32_t int_sense)
宣 言
説 明
OSTM0 の割り込みが受け付けられたときに実行します。
サンプルコードでは、GENMAI ボード上の LED を 500ms ごとに点滅する処理を行っ
ています。
uint32_t int_sense
:割り込みの検出方法
引 数
INTC_LEVEL_SENSITIVE:レベルセンス
INTC_EDGE_TRIGGER:エッジ
なし
リターン値
LedInit
概 要
宣 言
説 明
引 数
リターン値
LED 制御用 PORT の初期設定
void LedInit(void)
GENMAI ボードの LED に接続された PORT の初期設定を行います。
なし
なし
LedOn
概 要
宣 言
説 明
引 数
リターン値
LED の点灯処理
void LedOn(void)
GENMAI ボードの LED を点灯します。
なし
なし
LedOff
概 要
宣 言
説 明
引 数
リターン値
R01AN1864JJ0100
2014.04.25
LED の消灯処理
void LedOff(void)
GENMAI ボードの LED を消灯します。
なし
なし
Rev.1.00
Page 35 of 71
初期設定例
RZ/A1Hグループ
IoInitScif2
概 要
宣 言
説 明
引 数
リターン値
IoGetchar
概 要
宣 言
説 明
引 数
リターン値
IoPutchar
概 要
宣 言
説 明
引 数
リターン値
R01AN1864JJ0100
2014.04.25
SCIF の初期設定
void IoInitScif2(void)
API 関数 R_SCIF_UART_Init をコールして、SCIF でシリアル通信が可能なように初
期設定を行います。
なし
なし
シリアルインタフェースからの 1 文字受信処理
int_t IoGetchar(void)
シリアルインタフェースから 1 文字受信し、受信した文字を引数 data に返します。
SCIF チャネル 2 より 1 バイトのデータを受信します。サンプルコードでは、ホスト
PC 上のターミナルから 1 文字受信し、上位関数 SioRead によって受信した文字を
ターミナルにエコーバックしています。
なし
int_t data
:シリアルインタフェースから受信した 1 文字
-1
:受信エラー
シリアルインタフェースへの 1 文字送信処理
void IoPutchar(int_t buffer)
シリアルインタフェースに引数 buffer で渡された文字を送信します。
SCIF チャネル 2 より 1 バイトのデータを送信します。サンプルコードでは、ホスト
PC 上のターミナルに 1 文字表示します。
int_t buffer
:シリアルインタフェースから送信する 1 文字
なし
Rev.1.00
Page 36 of 71
初期設定例
RZ/A1Hグループ
R_SCIF_UART_Init
概 要
宣 言
説
明
引
数
リターン値
R01AN1864JJ0100
2014.04.25
SCIF の調歩同期式モードの初期設定
int32_t R_SCIF_UART_Init(uint32_t channel, uint32_t mode, uint16_t cks,
uint8_t scbrr)
引数 channel で指定された SCIF を、引数 mode で指定された転送方向の調歩同期式
モードで初期設定を行います。シリアル通信の送受信は、ソフトウェアでのポーリン
グ処理により実現しています。
シリアル通信のボーレートは、引数 cks および引数 scbrr で指定します。引数 cks に
はシリアルモードレジスタ(SCMR)の CKS ビットに設定するクロックソースを、
引数 scbrr にはビットレートレジスタ(SCBRR)への設定値を指定します。
cks および scbrr に指定する値は、「RZ/A1Hグループユーザーズマニュアル ハード
ウェア編」のボーレートの計算式を参照して、設定値を決定してください。
サンプルコードでは、
ユーザ定義関数 Userdef_SCIF2_UART_Init をコールして、
SCIF
チャネル 2 の初期設定を行います。
uint32_t channel
:SCIF のチャネル(0~7)
uint32_t mode
:転送方向の設定
SCIF_UART_MODE_W
送信
SCIF_UART_MODE_R
受信
SCIF_UART_MODE_RW
送受信
uint16_t cks
:SCIF のクロックソースの選択
SCIF_CKS_DIVISION_1
P1φ/1 を選択
SCIF_CKS_DIVISION_4
P1φ/4 を選択
SCIF_CKS_DIVISION_16
P1φ/16 を選択
SCIF_CKS_DIVISION_64
P1φ/64 を選択
uint8_t scbrr
:SCBRR の設定値
なし
Rev.1.00
Page 37 of 71
初期設定例
RZ/A1Hグループ
Userdef_SCIF2_UART_Init
概 要
SCIF チャネル 2 の調歩同期式モードの初期設定
void Userdef_SCIF2_UART_Init(uint8_t mode, uint16_t cks, uint8_t scbrr)
宣 言
説 明
R_SCIF_UART_Init 関数からコールされるユーザ定義関数です。SCIF チャネル 2 を、
引数 mode で指定された転送方向の調歩同期式モードに設定し、
引数 cks を CKS ビッ
トに、引数 scbrr を SCBRR に設定するように記述してください。
uint32_t mode
:転送方向の設定
引 数
SCIF_UART_MODE_W
送信
SCIF_UART_MODE_R
受信
SCIF_UART_MODE_RW
送受信
uint16_t cks
:SCIF のクロックソースの選択
SCIF_CKS_DIVISION_1
P1φ/1 を選択
SCIF_CKS_DIVISION_4
P1φ/4 を選択
SCIF_CKS_DIVISION_16
P1φ/16 を選択
SCIF_CKS_DIVISION_64
P1φ/64 を選択
uint8_t scbrr
:SCBRR の設定値
リターン値
なし
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 38 of 71
初期設定例
RZ/A1Hグループ
RZA_IO_RegWrite_8
概 要
IO レジスタライト関数(8 ビットアクセス可能な IO レジスタ用)
void RZA_IO_RegWrite_8(volatile uint8_t * ioreg, uint8_t write_value,
宣 言
uint8_t shift, uint8_t mask)
説 明
8 ビットアクセス可能な周辺 IO レジスタへのライト処理を行います。
volatile uint8_t *ioreg
引 数
:ライトする IO レジスタ
iodefines 以下のディレクトリで定義された IO レジス
タを指定してください。
uint8_t write_value
:IO レジスタへのライト値
uint8_t shift
:IO レジスタの対象ビットへの左シフト値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をシフト値として
定義しています。定義された IO レジスタへのシフト値
を指定してください。
uint8_t mask
:IO レジスタの対象ビットのマスク値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をマスク値として
定義しています。定義された IO レジスタのマスク値を
指定してください。
リターン値
なし
注意事項
本関数を RAM 領域に転送して使用する場合、本関数の配置されたセクションが ROM
領域から RAM 領域へ転送が完了する前に、本関数をコールしないでください。
RZA_IO_RegWrite_16
概 要
IO レジスタライト関数(16 ビットアクセス可能な IO レジスタ用)
void RZA_IO_RegWrite_16(volatile uint16_t * ioreg, uint16_t write_value,
宣 言
uint16_t shift, uint16_t mask)
説 明
16 ビットアクセス可能な周辺 IO レジスタへのライト処理を行います。
volatile uint16_t *ioreg
引 数
:ライトする IO レジスタ
iodefines 以下のディレクトリで定義された IO レジス
タを指定してください。
uint16_t write_value
:IO レジスタへのライト値
uint16_t shift
:IO レジスタの対象ビットへの左シフト値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をシフト値として
定義しています。定義された IO レジスタへのシフト値
を指定してください。
uint16_t mask
:IO レジスタの対象ビットのマスク値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をマスク値として
定義しています。定義された IO レジスタのマスク値を
指定してください。
リターン値
なし
注意事項
本関数を RAM 領域に転送して使用する場合、本関数の配置されたセクションが ROM
領域から RAM 領域へ転送が完了する前に、本関数をコールしないでください。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 39 of 71
初期設定例
RZ/A1Hグループ
RZA_IO_RegWrite_32
概 要
IO レジスタライト関数(32 ビットアクセス可能な IO レジスタ用)
void RZA_IO_RegWrite_32(volatile uint32_t * ioreg, uint32_t write_value,
宣 言
uint32_t shift, uint32_t mask)
説 明
32 ビットアクセス可能な周辺 IO レジスタへのライト処理を行います。
volatile uint32_t *ioreg
引 数
:ライトする IO レジスタ
iodefines 以下のディレクトリで定義された IO レジス
タを指定してください。
uint32_t write_value
:IO レジスタへのライト値
uint32_t shift
:IO レジスタの対象ビットへの左シフト値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をシフト値として
定義しています。定義された IO レジスタへのシフト値
を指定してください。
uint32_t mask
:IO レジスタの対象ビットのマスク値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をマスク値として
定義しています。定義された IO レジスタのマスク値を
指定してください。
リターン値
なし
注意事項
本関数を RAM 領域に転送して使用する場合、本関数の配置されたセクションが ROM
領域から RAM 領域へ転送が完了する前に、本関数をコールしないでください。
RZA_IO_RegRead_8
概 要
宣 言
説 明
引 数
リターン値
注意事項
R01AN1864JJ0100
2014.04.25
IO レジスタリード関数(8 ビットアクセス可能な IO レジスタ用)
uint8_t RZA_IO_RegRead_8(volatile uint8_t * ioreg, uint8_t shift, uint8_t mask)
8 ビットアクセス可能な周辺 IO レジスタへのリード処理を行います。
volatile uint8_t *ioreg
:リードする IO レジスタ
iodefines 以下のディレクトリで定義された IO レジス
タを指定してください。
uint8_t shift
:IO レジスタの対象ビットへの左シフト値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をシフト値として
定義しています。定義された IO レジスタへのシフト値
を指定してください。
uint8_t mask
:IO レジスタの対象ビットのマスク値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をマスク値として
定義しています。定義された IO レジスタのマスク値を
指定してください。
指定した IO レジスタのリード値
本関数を RAM 領域に転送して使用する場合、本関数の配置されたセクションが ROM
領域から RAM 領域へ転送が完了する前に、本関数をコールしないでください。
Rev.1.00
Page 40 of 71
初期設定例
RZ/A1Hグループ
RZA_IO_RegRead_16
概 要
宣 言
説 明
引 数
リターン値
注意事項
RZA_IO_RegRead_32
概 要
宣 言
説 明
引 数
リターン値
注意事項
R01AN1864JJ0100
2014.04.25
IO レジスタリード関数(16 ビットアクセス可能な IO レジスタ用)
uint16_t RZA_IO_RegRead_16(volatile uint16_t * ioreg, uint16_t shift, uint16_t mask)
16 ビットアクセス可能な周辺 IO レジスタへのリード処理を行います。
volatile uint16_t *ioreg
:リードする IO レジスタ
iodefines 以下のディレクトリで定義された IO レジス
タを指定してください。
uint16_t shift
:IO レジスタの対象ビットへの左シフト値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をシフト値として
定義しています。定義された IO レジスタへのシフト値
を指定してください。
uint16_t mask
:IO レジスタの対象ビットのマスク値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をマスク値として
定義しています。定義された IO レジスタのマスク値を
指定してください。
指定した IO レジスタのリード値
本関数を RAM 領域に転送して使用する場合、本関数の配置されたセクションが ROM
領域から RAM 領域へ転送が完了する前に、本関数をコールしないでください。
IO レジスタリード関数(32 ビットアクセス可能な IO レジスタ用)
uint32_t RZA_IO_RegRead_32(volatile uint32_t * ioreg, uint32_t shift, uint32_t mask)
32 ビットアクセス可能な周辺 IO レジスタへのリード処理を行います。
volatile uint32_t *ioreg
:リードする IO レジスタ
iodefines 以下のディレクトリで定義された IO レジス
タを指定してください。
uint32_t shift
:IO レジスタの対象ビットへの左シフト値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をシフト値として
定義しています。定義された IO レジスタへのシフト値
を指定してください。
uint32_t mask
:IO レジスタの対象ビットのマスク値
iobitmasks 以下のディレクトリで、IO レジスタ内の
ビット位置にアクセスするための値をマスク値として
定義しています。定義された IO レジスタのマスク値を
指定してください。
指定した IO レジスタのリード値
本関数を RAM 領域に転送して使用する場合、本関数の配置されたセクションが ROM
領域から RAM 領域へ転送が完了する前に、本関数をコールしないでください。
Rev.1.00
Page 41 of 71
初期設定例
RZ/A1Hグループ
5.9
5.9.1
フローチャート
リセットハンドラ処理
図 5.5にリセットハンドラのフローチャートを示します。
reset_handler
スタックポインタの設定
周辺機能の初期設定
Peripheral_BasicInit()
レベル1キャッシュを無効に設定
MMUの初期設定
init_TTB()
ドメインアクセス制御レジスタ
(DACR)の設定
浮動小終点機能の初期設定
(NEON、VFP)
MMUの有効化
標準ライブラリ関数のコール
__main()
スーパバイザ(SVC)、IRQ、FIQ、アボート(ABT)、システ
ム(SYS)の各実行モードのスタックポインタの初期設定を行い
ます。
クロック周波数の設定やCS0およびCS1空間を使用するための設
定など、システムのスタートアップ処理として最低限必要な周辺
機能の設定を行います。
レベル1キャッシュを無効に設定します。
MMUの変換テーブルの初期化を行います。
すべてのドメインをクライアントモードに設定します。
NEONおよびVFPの初期設定を行います。
アドバンストSIMD拡張機能およびVFP拡張機能を有効に設定し
ます。
MMUを有効に設定します。
標準ライブラリ関数__mainをコールします。
セクションの初期化、ライブラリ関数の初期化などがライブラリ
の処理により行われた後、ライブラリ関数$Sub$$mainがコール
されます。
end
【注】 標準ライブラリ関数__main をコールすると、ライブラリ関数の内部でユーザ関数の$Sub$$main が
コールされます。
$Sub$$main からライブラリ関数$Super$$main をコールすることで、ライブラリ関数の内部で main
関数がコールされ、main 処理に分岐します。
図5.5
リセットハンドラ処理
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 42 of 71
初期設定例
RZ/A1Hグループ
5.9.2
周辺機能の初期設定($Sub$$main 関数)
図 5.6に周辺機能の初期設定($Sub$$main 関数)のフローチャートを示します。
$Sub$$main
STBの初期設定
STB_Init()
STBの初期設定を行います。
サンプルコードでは、STB2~STB12の設定を行い、クロックの
供給を行います。
PORTの初期設定
PORT_Init()
PORTの初期設定を行います。
サンプルコードでは、CS2およびCS3空間にSDRAMを使用する
ための初期設定を行います。
CS3空間のBSCの初期設定
R_BSC_Init()
CS2およびCS3空間を使用するために、BSCの初期設定を行いま
す。
サンプルコードでは、エリア2とエリア3にSDRAMを使用するた
めの初期設定を行います。エリア2およびエリア3の両方で
SDRAMを使用する場合は、CS3空間のBSCの初期設定を実施後
に、CS2空間の初期設定を行ってください。
CS2空間のBSCの初期設定
R_BSC_Init()
INTCの初期設定
R_INTC_Init()
図5.6
INTCの初期設定を行います。
レベル1キャッシュの初期設定
L1CacheInit()
レベル1キャッシュの設定を行い、命令キャッシュおよびデー
タキャッシュを有効にします。
ベクタベースアドレス
(VBAR)の初期設定
VbarInit()
ベクタベースアドレスの設定を行い、例外処理ベクタテーブ
ルを内蔵RAM上に配置します。H'2002 0000番地から32バイ
トの領域に例外処理ベクタテーブルを配置しています。
ライブラリ関数のコール
__enable_irq()
IRQ割り込みを許可します。
ライブラリ関数のコール
__enable_fiq()
FIQ割り込みを許可します。
ターミナル接続シリアル通信
SCIFチャネル2の初期設定
IoInitScif2()
SCIFチャネル2をUART通信でターミナルと接続するための初
期設定を行います。
P1φ=66.67MHzのときに、ボーレートが115200bpsとなるよ
うに設定しています。
標準ライブラリ関数のコール
$Super$$main()
標準ライブラリ関数$Super$$mainをコールします。
$Super$$mainからmain関数に分岐します。
周辺機能の初期設定($Sub$$main 関数)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 43 of 71
初期設定例
RZ/A1Hグループ
5.9.3
メイン処理
図 5.7にメイン処理のフローチャートを示します。
main
ターミナルへの出力
printf()
シリアルインタフェースで接続したホストPC上のターミナルに
サンプルコードのバージョン情報を出力します。
LED使用ポートの初期設定
Led_Init()
GENMAIボードのLEDに接続しているPORT(P4_10)の初期設
定を行います。
OSTM0割り込み通知フラグの
初期設定
OSTMチャネル0の割り込み通知フラグの初期設定を行います。
OSTM0の初期設定
R_OSTM_Init()
OSTMチャネル0の初期設定を行います。
サンプルコードでは、インターバルタイマモードで初期設定を行
っています。また、OSTMチャネル0の割り込みハンドラ関数を
登録し、OSTMチャネル0割り込みを有効に設定しています。
OSTM0のカウント開始
R_OSTM_Open()
OSTMチャネル0のカウントを開始します。
サンプルコードでは、500msごとにOSTM0割り込み要求が発
生するように、カウント値を設定しています。
周辺機能サンプルコードの
起動関数
Sample_Main()
シリアルで接続したターミナルから受信されたコマンドにし
たがって、各周辺機能のサンプルコードを実行します。
本サンプル関数では、ターミナルから受信した文字列のエコ
ーバックのみ行います。
return(0)
図5.7
メイン処理
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 44 of 71
初期設定例
RZ/A1Hグループ
5.9.4
周辺機能の初期設定関数(動作周波数とフラッシュメモリアクセスの最適化)
図 5.8に周辺機能の初期設定関数(動作周波数とフラッシュメモリアクセスの最適化)のフローチャートを
示します。
この関数では、CPU クロックおよび画像クロックなどの動作周波数の設定と、CS0 および CS1 空間に NOR
フラッシュメモリを使用するための設定を行っています。
Peripheral_BasicInit
CPGの初期設定
CPG_Init()
CPGの初期設定を行います。
PORTの初期設定
CS0_PORTInit()
PORTの初期設定を行います。
サンプルコードでは、CS0およびCS1空間でNORフラッシュ
メモリを使用するためのPORTの初期設定を行います。
CS0およびCS1空間の
BSCの初期設定
R_BSC_Init()
CS0およびCS1のそれぞれの空間に、NORフラッシュメモリ
を16ビットバス幅で使用するための設定を行います。
サンプルコードでは、Spansion社製S29GL512S10Tを使用す
るための設定を行います。
return
図5.8
周辺機能の初期設定関数(動作周波数とフラッシュメモリアクセスの最適化)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 45 of 71
初期設定例
RZ/A1Hグループ
5.9.5
CPG の初期設定関数
図 5.9にCPG の初期設定のフローチャートを示します。
CPG_Init
standby_mode_enビットの設定
PL310のPower Control Register ← H'0000 0001
standby_mode_enビット = 1
周波数を変更する際に、必ず本ビットを"1"に設定する必要があります。
周波数制御レジスタ
(FRQCR)の設定
FRQCRレジスタ ← H'1035
CKOENビット = B'01:ディープスタンバイモード時、ソフトウェアスタン
バイモード時およびソフトウェアスタンバイ解除時
の間、CKIO端子がローレベルに固定されるように
設定
IFCビット = B'00
:PLL回路の周波数に対してCPUクロック周波数の
分周率を×1/1倍に設定
周波数制御レジスタ2
(FRQCR2)の設定
FRQCR2レジスタ ← H'0001
GFCビット = B'01 :PLL回路の周波数に対して画像処理クロック周波数
の分周率を×2/3倍に設定
サンプルコードでは、クロックモードが0の状態で、入力クロックが
13.33MHz時に、以下の動作周波数となるようにしています。
CPUクロック(Iφ):400MHz
画像処理クロック(Gφ):266.67MHz
内部バスクロック(Bφ):133.33MHz
周辺クロック1(P1φ):66.67MHz
周辺クロック0(P0φ):33.33MHz
システムコントロールレジスタ3
(SYSCR3)の設定
システムコントロールレジスタ3
(SYSCR3)のダミーリード
SYSCR3レジスタ ← H'0F
RRAMWE3ビット = 1:保持用内蔵RAMのページ3へのライト有効
RRAMWE2ビット = 1:保持用内蔵RAMのページ2へのライト有効
RRAMWE1ビット = 1:保持用内蔵RAMのページ1へのライト有効
RRAMWE0ビット = 1:保持用内蔵RAMのページ0へのライト有効
SYSCR3レジスタへの設定を反映させるため、ダミーリードを行います。
return
図5.9
CPG の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 46 of 71
初期設定例
RZ/A1Hグループ
5.9.6
PORT の初期設定関数(CS0 および CS1 空間)
図 5.10にPORT の初期設定関数(CS0 および CS1 空間)のフローチャートを示します。
CS0_PORTInit
PORT9のマルチプレクス
端子機能の設定
ポートP9関連レジスタ
PIBC91ビット ← 0、PIBC90ビット ← 0
PBDC91ビット ← 0、PBDC90ビット ← 0
PM91ビット ← 1、PM90ビット ← 1
PMC91ビット ← 0、PMC90ビット ← 0
PIPC91ビット ← 0、PIPC90ビット ← 0
PBDC91ビット ← 0、PBDC90ビット ← 0
PFC91ビット ← 0、PFC90ビット ← 0
PFCE91ビット ← 0、PFCE90ビット ← 0
PFCAE91ビット ← 0、PFCAE90ビット ← 0
PIPC91ビット ← 1、PIPC90ビット ← 1
PMC91ビット ← 1、PMC90ビット ← 1
P9_1をA25、P9_0をA24の端子機能に設定
PORT8のマルチプレクス
端子機能の設定
ポートP8関連レジスタ
PIBC815ビット ← 0、PIBC814ビット ← 0、PIBC813ビット ← 0
PBDC815ビット ← 0、PBDC814ビット ← 0、PBDC813ビット ← 0
PM815ビット ← 1、PM814ビット ← 1、PM813ビット ← 1
PMC815ビット ← 0、PMC814ビット ← 0、PMC813ビット ← 0
PIPC815ビット ← 0、PIPC814ビット ← 0、PIPC813ビット ← 0
PBDC815ビット ← 0、PBDC814ビット ← 0、PBDC813ビット← 0
PFC815ビット ← 0、PFC814ビット ← 0、PFC813ビット ← 0
PFCE815ビット ← 0、PFCE814ビット ← 0、PFCE813ビット ← 0
PFCAE815ビット ← 0、PFCAE814ビット ← 0、PFCAE813ビット ← 0
PIPC815ビット ← 1、PIPC814ビット ← 1、PIPC813ビット ← 1
PMC815ビット ← 1、PMC814ビット ← 1、PMC813ビット ← 1
P8_15をA23、P8_14をA22、P8_13をA21の端子機能に設定
PORT7のマルチプレクス
端子機能の設定
ポートP7関連レジスタ
PIBC76ビット ← 0
PBDC76ビット ← 0
PM76ビット ← 1
PMC76ビット ← 0
PIPC76ビット ← 0
PBDC76ビット ← 0
PFC76ビット ← 0
PFCE76ビット ← 0
PFCAE76ビット ← 0
PIPC76ビット ← 1
PMC76ビット ← 1
P7_6をWE0#(/DQMLL)の端子機能に設定
PORT3のマルチプレクス
端子機能の設定
ポートP3関連レジスタ
PIBC37ビット ← 0
PBDC37ビット ← 0
PM37ビット ← 1
PMC37ビット ← 0
PIPC37ビット ← 0
PBDC37ビット ← 0
PFC37ビット ← 0
PFCE37ビット ← 1
PFCAE37ビット← 1
PIPC37ビット ← 1
PMC37ビット ← 1
P3_7をCS1#端子機能に設定
return
図5.10
CS0およびCS1空間にNORフラッシュメモリを接続するための兼用端子機能の設定を
行っています。
PORT の初期設定関数(CS0 および CS1 空間)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 47 of 71
初期設定例
RZ/A1Hグループ
5.9.7
BSC の初期設定関数
図 5.11にBSC の初期設定のフローチャートを示します。
CS0 および CSC1 空間に NOR フラッシュメモリを、CS2 および CS3 空間に SDRAM を使用するための設定
は、API 関数の R_BSC_Init を使用して行っています。
R_BSC_Init
引数areaがCS0でない
CS0空間の指定?
CS0空間のBCS初期設定
Usefdef_BSC_CS0Init()
ユーザ定義関数にてCS0空間のBSC設定を行います。
引数areaがCS1でない
CS1空間の指定?
CS1空間のBCS初期設定
Usefdef_BSC_CS1Init()
ユーザ定義関数にてCS1空間のBSC設定を行います。
引数areaがCS2でない
CS2空間の指定?
CS2空間のBCS初期設定
Usefdef_BSC_CS2Init()
ユーザ定義関数にてCS2空間のBSC設定を行います。
引数areaがCS3でない
CS3空間の指定?
CS3空間のBCS初期設定
Usefdef_BSC_CS3Init()
ユーザ定義関数にてCS3空間のBSC設定を行います。
引数areaがCS4でない
CS4空間の指定?
CS4空間のBCS初期設定
Usefdef_BSC_CS4Init()
ユーザ定義関数にてCS4空間のBSC設定を行います。
引数areaがCS5でない
CS5空間の指定?
CS5空間のBCS初期設定
Usefdef_BSC_CS5Init()
ユーザ定義関数にてCS5空間のBSC設定を行います。
return
図5.11
BSC の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 48 of 71
初期設定例
RZ/A1Hグループ
5.9.8
CS0 の初期設定関数
図 5.12にCS0 の初期設定のフローチャートを示します。サンプルコードでは、CS0 空間で NOR フラッシュ
メモリを使用するための設定を行っています。
Userdef_BSC_CS0Init
CS0空間バスコントロール
レジスタ(CS0BCR)の設定
CS0BCRレジスタ ← H'10000C00
IWWビット = B'001 :1アイドルサイクル挿入に設定
IWRWDビット = B'000:アイドルサイクルなしに設定
IWRWSビット = B'000:アイドルサイクルなしに設定
IWRRDビット = B'000:アイドルサイクルなしに設定
IWRRSビット = B'000:アイドルサイクルなしに設定
TYPEビット = B'000 :CS0空間に接続するメモリの種類を通常空間に設定
BSZビット = B'10
:データバス幅を16ビットに設定
CS0空間ウェイトコントロール
レジスタ(CS0WCR)の設定
CS0WCRレジスタ ← H'00000B40
SWビット = B'01
:CS0#アサート→RD#、WEn#アサートの遅延を
1.5サイクルに設定
WRビット = B'0110 :アクセスウェイトを6サイクルに設定
WMビット = 1
:外部ウェイト入力を無視に設定
HWビット = B'00
:RD#、WEn#ネゲート→アドレス、CS0#ネゲートの
遅延を0.5サイクルに設定
return
図5.12
5.9.9
CS0 の初期設定関数
CS1 の初期設定関数
図 5.13にCS1 の初期設定関数のフローチャートを示します。サンプルコードでは、CS1 空間で NOR フラッ
シュメモリを使用するための設定を行っています。
Userdef_BSC_CS1Init
CS1空間バスコントロール
レジスタ(CS1BCR)の設定
CS1BCRレジスタ ← H'10000C00
IWWビット = B'001 :1アイドルサイクル挿入に設定
IWRWDビット = B'000:アイドルサイクルなしに設定
IWRWSビット = B'000:アイドルサイクルなしに設定
IWRRDビット = B'000:アイドルサイクルなしに設定
IWRRSビット = B'000:アイドルサイクルなしに設定
TYPEビット = B'000 :CS1空間に接続するメモリの種類を通常空間に設定
BSZビット = B'10
:データバス幅を16ビットに設定
CS1空間ウェイトコントロール
レジスタ(CS1WCR)の設定
CS1WCRレジスタ ← H'00000B40
SWビット = B'01
:CS1#アサート→RD#、WEn#アサートの遅延を
1.5サイクルに設定
WRビット = B'0110 :アクセスウェイトを6サイクルに設定
WMビット = 1
:外部ウェイト入力を無視に設定
HWビット = B'00
:RD#、WEn#ネゲート→アドレス、CS1#ネゲートの
遅延を0.5サイクルに設定
return
図5.13
CS1 の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 49 of 71
初期設定例
RZ/A1Hグループ
5.9.10
CS2 の初期設定関数
図 5.14にCS2 の初期設定のフローチャートを示します。サンプルコードでは、CS2 空間で SDRAM を使用
するための設定を行っています。
エリア 2 とエリア 3 の両方で SDRAM を使用する場合は、CS3 空間の BSC の初期設定を実施後に、CS2 空
間の初期設定を行ってください。
Userdef_BSC_CS2Init
CS2空間バスコントロール
レジスタ(CS2BCR)の設定
CS2BCRレジスタ ← H'00004C00
IWWビット = B'000 :アイドルサイクルなしに設定
IWRWDビット = B'000:アイドルサイクルなしに設定
IWRWSビット = B'000:アイドルサイクルなしに設定
IWRRDビット = B'000:アイドルサイクルなしに設定
IWRRSビット = B'000:アイドルサイクルなしに設定
TYPEビット = B'100 :CS2空間に接続するメモリの種類をSDRAMに設定
BSZビット = B'10
:データバス幅を16ビットに設定
CS2空間ウェイトコントロール
レジスタ(CS2WCR)の設定
CS2WCRレジスタ ← H'00000480
A2CLビット = B'01 :エリア2のCASレーテンシを2サイクルに設定
エリア2のSDRAMのモード設定
H'3FFFD040番地 ← H'0000
エリア2のSDRAMのモードレジスタに書き込みが行われます。
return
図5.14
CS2 の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 50 of 71
初期設定例
RZ/A1Hグループ
5.9.11
CS3 の初期設定関数
図 5.15にCS3 の初期設定のフローチャートを示します。サンプルコードでは、CS3 空間で SDRAM を使用
するための設定を行っています。
Userdef_BSC_CS3Init
SDRAMクロック発振の安定待ち
クロック発振の安定待ち時間を、ソフトウェアループで生成しています。
サンプルコードでは、約200usの待ち時間を生成しています。
CS3空間バスコントロール
レジスタ(CS3BCR)の設定
CS3BCRレジスタ ← H'00004C00
IWWビット = B'000 :アイドルサイクルなしに設定
IWRWDビット = B'000:アイドルサイクルなしに設定
IWRWSビット = B'000:アイドルサイクルなしに設定
IWRRDビット = B'000:アイドルサイクルなしに設定
IWRRSビット = B'000:アイドルサイクルなしに設定
TYPEビット = B'100 :CS3空間に接続するメモリの種類をSDRAMに設定
:データバス幅を16ビットに設定
BSZビット = B'10
CS3空間ウェイトコントロール
レジスタ(CS3WCR)の設定
CS3WCRレジスタ ← H'00002492
WTRPビット = B'01 :プリチャージ完了待ちのサイクル数を1サイクル
に設定
WTRCDビット = B'01:ACTVコマンド→READ(A)/WRIT(A)コマンド間の
ウエィトを1サイクルに設定。
A3CLビット = B'01 :エリア3のCASレーテンシを2サイクルに設定
TRWLビット = B'10 :プリチャージ起動待ちのサイクル数を2サイクル
に設定
WTRCビット = B'10 :REFコマンド/セルフリフレッシュ解除
→ACTV/REF/MRSコマンド間のアイドルを
5サイクルに設定
SDRAMコントロールレジスタ
(SDCR)の設定
SDCRレジスタ ← H'00120812
A2ROWビット = B'10:エリア2のロウアドレスを13ビットに設定
A2COLビット = B'10 :エリア2のカラムアドレスを10ビットに設定
:リフレッシュ制御するに設定
RFSHビット = 1
RMODEビット = 0 :オートリフレッシュ制御するに設定
:オートプリチャージモードで使用に設定
BACTVビット = 0
A3ROWビット = B'10:エリア3のロウアドレスを13ビットに設定
A3COLビット = B'10 :エリア3のカラムアドレスを10ビットに設定
リフレッシュタイムコンスタント
レジスタ(RTCOR)の設定
リフレッシュタイマコントロール
/ステータスレジスタ
(RTCSR)の設定
エリア3のSDRAMのモード設定
RTCORレジスタ ← H'00000020(上位16ビットにH'A55Aを書き込み)
RTCSRレジスタ ← H'00000010(上位16ビットにH'A55Aを書き込み)
:CMFによる割り込み要求を禁止
CMIEビット = 0
CKSビット = B'010 :リフレッシュカウンタのクロックにCKIOφ/16
を選択
RRCビット = B'000 :リフレッシュを連続して行う回数を1回に設定
サンプルコードでは、CKIOφ=66.67MHz(tcyc=15.0ns)、Ref_Cyc=8192の
条件で動作させ、CKS=16、RTCOR=32と設定するため、リフレッシュサイ
クルは以下の間隔となります。
・リフレッシュカウンタの周期
:tcyc×CKS=239.9(ns)
・1回当たりのリフレッシュ間隔 :tcyc×CKS×RTCOR=7.68(us)
:tcyc×CKS×RTCOR×Ref_Cyc
・8192回のリフレッシュ間隔
=62.88(ms)
H'3FFFE040番地 ← H'0000
エリア3のSDRAMのモードレジスタに書き込みが行われます。
return
図5.15
CS3 の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 51 of 71
初期設定例
RZ/A1Hグループ
5.9.12
STB の初期設定関数
図 5.16にSTB の初期設定のフローチャートを示します。
STB_Init
スタンバイコントロールレジスタ
2~12(STBCR2~STBCR13)
の設定
以下の周辺機能にクロックを供給するように設定
IEバス、IrDA、LIN0、LIN1、MTU2、RSCAN2、PWM、
SCIF0、SCIF1、SCIF2、SCIF3、SCIF4、SCIF5、SCIF6、SCIF7、
SCIM0、SCIM1、SDG0、SDG1、SDG2、SDG3、OSTM0、OSTM1、
ADC、CEU、DISCOM0、DISCOM1、DRC0、DRC1、JCU、RTクロック、
DVDEC0、DVDEC1、ETHER、FLCTL、USB0、USB1、
IMR-LS20、IMR-LS21、IMR-LSD、MMCIF、MOST50、AVB、SCUX、
I2C0、I2C1、I2C2、I2C3、SPIBSC0、SPIBSC1、VDC50、VDC51、
RSPI0、RSPI1、RSPI2、RSPI3、RSPI4、CD-ROMDEC、RSPDIF、RGPVG、
SSIF0、SSIF1、SSIF2、SSIF3、SSIF4、SSIF5、
SDHI00、SDHI01、SDHI10、SDHI11、
PFV0、PFV1
return
図5.16
STB の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 52 of 71
初期設定例
RZ/A1Hグループ
5.9.13
PORT の初期設定関数
図 5.17にPORT の初期設定関数のフローチャートを示します。
PORT_Init
PORT7のマルチプレクス
端子機能の設定
ポートP7関連レジスタ
PIBC71ビット ← 0、PIBC72 ビット ← 0、PIBC73ビット ← 0、
PIBC74ビット ← 0、PIBC75 ビット ← 0、PIBC77ビット ← 0
PBDC71ビット ← 0、PBDC72 ビット ← 0、PBDC73ビット ← 0、
PBDC74ビット ← 0、PBDC75 ビット ← 0、PBDC77ビット ← 0
PM71ビット ← 1、PM72 ビット ← 1、PM73ビット ← 1、
PM74ビット ← 1、PM75 ビット ← 1、PM77ビット ← 1
PMC71ビット ← 0、PMC72 ビット ← 0、PMC73ビット ← 0、
PMC74ビット ← 0、PMC75 ビット ← 0、PMC77ビット ← 0
PIPC71ビット ← 0、PIPC72 ビット ← 0、PIPC73ビット ← 0、
PIPC74ビット ← 0、PIPC75 ビット ← 0、PIPC77ビット ← 0
PBDC71ビット ← 0、PBDC72 ビット ← 0、PBDC73ビット ← 0、
PBDC74ビット ← 0、PBDC75 ビット ← 0、PBDC77ビット ← 0
PFC71ビット ← 0、PFC72ビット ← 0、PFC73 ビット ← 0、
PFC74ビット ← 0、PFC75ビット ← 0、PFC77 ビット ← 0
PFCE71ビット ← 0、PFCE72 ビット ← 0、PFCE73 ビット ← 0、
PFCE74ビット ← 0、PFCE75 ビット ← 0、PFCE77 ビット ← 0
PFCAE71ビット ← 0、PFCAE72 ビット ← 0、PFCAE73 ビット ← 0、
PFCAE74 ビット ← 0、PFCAE75 ビット ← 0、PFCAE77 ビット ← 0
PIPC71ビット ← 1、PIPC72 ビット ← 1、PIPC73ビット ← 1、
PIPC74ビット ← 1、PIPC75 ビット ← 1、PIPC77ビット ← 1
PMC71ビット ← 1、PMC72 ビット ← 1、PMC73 ビット ← 1、
PMC74ビット ← 1、PMC75 ビット ← 1、PMC77 ビット ← 1
P7_1をCS3#、P7_2をRAS#、P7_3をCAS#、P7_4をCKE、P7_5をRD/WR#、
P7_7をDQMLUの端子機能に設定
(SDRAM関連端子のなかで、P7_6のWE0#/DQMLLの設定は、CS0_PORTInit関数で
行っているため、ここでは設定していません。)
PORT5のマルチプレクス
端子機能の設定
ポートP5関連レジスタ
PIBC58ビット ← 0
PBDC58ビット ← 0
PM58ビット ← 1
PMC58ビット ← 0
PIPC58ビット ← 0
PBDC58ビット ← 0
PFC58ビット ← 1
PFCE58ビット ← 0
PFCAE58ビット ← 1
PIPC58ビット ← 1
PMC58ビット ← 1
P5_8をCS2#端子機能に設定
CS2およびCS3空間にSDRAMを接続するためのマルチプレクス端子機能の設定を行
っています。
return
図5.17
PORT の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 53 of 71
初期設定例
RZ/A1Hグループ
5.9.14
INTC の初期設定関数
図 5.18にINTC の初期設定のフローチャートを示します。
R_INTC_Init
割り込みセキュリティレジスタ
(ICDISRn)の初期設定
ICDISR0~ICDISR18レジスタ ← H'0000 0000
すべての割り込み要因(587要因)のセキュリティレジスタ
の初期設定を行います。
すべての割り込み要因?
割り込み構成レジスタ
(ICDICFRn)の初期設定
すべての割り込み要因?
割り込み優先度レジスタ
(ICDIPRn)の初期設定
ICDICFR0~ICDICFR36レジスタ
すべての割り込み要因(587要因)の構成の初期設定を行
います。
ICDICFRnの設定値は、「RZ/A1Hグループユーザーズ
マニュアル ハードウェア編」に記載の値を設定して
います。
ICDIPR0~ICDIPR146レジスタ ← H'F8F8 F8F8
すべての割り込み要因(587要因)の割り込み優先度を
31(H'F8)に設定します。
すべての割り込み要因?
割り込みプロセッサターゲット
レジスタ(ICDIPTRn)の初期設定
ICDIPTR8~ICDIPTR146レジスタ ← H'0101 0101
割り込み要因8~586(579要因)のプロセッサターゲット
をCPUインタフェース0に設定します。
579の割り込み要因?
割り込みを無効に設定
ICDICER0~ICDICER18レジスタ ← H'FFFF FFFF
すべての割り込み要因(587要因)の割り込みを無効に設定
します。
すべての割り込み要因?
INTC割り込みマスクレベルの
初期設定
R_INTC_SetMaskLevel()
割り込み優先レベルが0~30の割り込みを受け付けるように、
割り込みマスクレベルを設定します。
2進小数点レジスタの初期設定
ICCBPRレジスタ ← H'0000 0002
グループ優先度フィールドが、ビット7~3となるように
設定します。
CPUインタフェース制御
レジスタ(ICCICR)の初期設定
ICCICRレジスタ ← H'0000 0003
CPUインタフェースへの割り込み信号を有効に設定し
ます。
分配器制御レジスタの初期設定
ICDDCRレジスタ ← H'0000 0001
GICの割り込み要求の受け付けの設定を行います。
return
図5.18
INTC の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 54 of 71
初期設定例
RZ/A1Hグループ
5.9.15
OSTM の初期設定関数
図 5.19にOSTM の初期設定関数のフローチャートを示します。
R_OSTM_Init
関数の引数エラーあり?
channel指定の不正 または mode指定の不正
return(DEVDRV_ERR)
channel = 1
チャネル0?
OSTMチャネル0の初期設定
Userdef_OSTM0_Init()
OSTMチャネル1の初期設定
Userdef_OSTM1_Init()
OSTMの初期設定を行います。
サンプルコードでは、Userdef_OSTM0_Init関数で
OSTMチャネル0のタイマの初期設定と、OSTMチャ
ネル0割り込みの初期設定を行っています。
Userdef_OSTM1_Init関数は使用していません。
return(DEVDRV_SUCCESS)
図5.19
OSTM の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 55 of 71
初期設定例
RZ/A1Hグループ
5.9.16
OSTM のカウント開始関数
図 5.20にOSTM のカウント開始関数のフローチャートを示します。
R_OSTM_Open
関数の引数エラーあり?
channel指定の不正
return(DEVDRV_ERR)
channel = 1
チャネル0?
OSTM1タイマカウント開始
(ローカル関数)
OSTM0タイマカウント開始
(ローカル関数)
引数channelで指定されたチャネルのOSTMのタイマ
カウント動作を開始します。
return(DEVDRV_SUCCESS)
図5.20
5.9.17
OSTM のカウント開始関数
OSTM のカウント停止関数
図 5.21にOSTM のカウント停止関数のフローチャートを示します。
R_OSTM_Close
関数の引数エラーあり?
channel指定の不正
return(DEVDRV_ERR)
channel = 1
チャネル0?
OSTM0タイマカウント停止
(ローカル関数)
OSTM1タイマカウント停止
(ローカル関数)
引数channelで指定されたチャネルのOSTMのタイマ
カウント動作を停止し、引数*countに停止時のカウ
ント値を返します。
return(DEVDRV_SUCCESS)
図5.21
OSTM のカウント停止関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 56 of 71
初期設定例
RZ/A1Hグループ
5.9.18
OSTM チャネル 0 の初期設定関数
図 5.22にOSTM チャネル 0 の初期設定関数のフローチャートを示します。OSTM チャネル 0 の割り込み関
数の INTC ハンドラへの登録や、割り込み優先レベルの設定および割り込みの許可は、API 関数を使用して
行っています。
Userdef_OSTM0_Init
OSTM0のモジュール
スタンバイを解除
STBCR5レジスタ
MSTP51ビット ← 0
OSTMチャネル0にクロックを供給
OSTM0のカウント停止
OSTM0CTLレジスタ ← H'01
OSTMチャネル0のカウントを停止
OSTM0の動作モードの設定
OSTM0CTLレジスタ
OSTM0MD1ビット ← mode
OSTM0MD0ビット ← 0
OSTMチャネル0を、modeで指定したカウンタの動作モー
ドに設定、カウント開始時の割り込みを禁止
サンプルコードでは、インターバルタイマモードで動作
します。
OSTM0カウント値の設定
OSTM0CMPレジスタ ← 16666500
OSTMチャネル0のカウント値を設定します。
サンプルコードは、OSTMチャネル0がダウンカウンタで
動作するようにしており、P0φ=33.33MHz時に引数cycleで
指定された周期ごとに割り込み要求が発生するように
カウンタの開始値を設定しています。
OSTM0割り込み
ハンドラの登録
R_INTC_RegistIntFunc()
OSTMチャネル0割り込みハンドラを登録します。
サンプルコードでは、GENMAIボード上のLEDを点滅するた
めのハンドラ関数Sample_OSTM0_Interruptを登録していま
す。
OSTM0割り込み優先
レベルの設定
R_INTC_SetPriority()
OSTMチャネル0割り込みの割り込み優先度を設定します。
サンプルコードでは、割り込み優先レベルを"5"に設定してい
ます。
OSTM0割り込みの許可
R_INTC_Enable()
OSTMチャネル0割り込みを許可します。
return(DEVDRV_SUCCESS)
図5.22
OSTM チャネル 0 の初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 57 of 71
初期設定例
RZ/A1Hグループ
5.9.19
OSTM チャネル 0 の割り込みハンドラ処理
図 5.23にOSTM チャネル 0 の割り込みハンドラ処理のフローチャートを示します。
Sample_OSTM0_Interrupt
OSTM0割り込み通知フラグの反転
通知フラグがセット?
OSTMチャネル0割り込みが発生するたびに、通知フラグを反
転します。
サンプルコードでは、500msごとに反転します。
通知フラグがクリア
LEDの点灯
LEdOn()
LEDの消灯
LEdOff()
return
図5.23
OSTM チャネル 0 の割り込みハンドラ処理
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 58 of 71
初期設定例
RZ/A1Hグループ
5.9.20
INTC 割り込みの許可関数
図 5.24にINTC 割り込みの許可のフローチャートを示します。
R_INTC_Enable
int_id ≧ 587
関数の引数エラーあり?
return(DEVDRV_ERR)
int_idで指定した割り込み要因の
割り込みを有効に設定
ICDISERnレジスタ
int_idで指定した割り込み要因の割り込みイネーブル
ビットを設定します。
return(DEVDRV_SUCCESS)
図5.24
5.9.21
INTC 割り込みの許可関数
INTC 割り込みの禁止関数
図 5.25にINTC 割り込みの禁止関数のフローチャートを示します。
R_INTC_Disable
関数の引数エラーあり?
int_id ≧ 587
return(DEVDRV_ERR)
int_idで指定した割り込み要因の
割り込みを無効に設定
ICDICERnレジスタ
int_idで指定した割り込み要因の割り込みクリアイネーブル
ビットを設定します。
return(DEVDRV_SUCCESS)
図5.25
INTC 割り込みの禁止関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 59 of 71
初期設定例
RZ/A1Hグループ
5.9.22
INTC 割り込み優先レベルの設定関数
図 5.26にINTC 割り込み優先レベルの設定関数のフローチャートを示します。
R_INTC_SetPriority
関数の引数エラーあり?
int_id ≧ 587 または priority ≧ 32
return(DEVDRV_ERR)
ICDIPRnレジスタ
int_idで指定した割り込み要因の割り込み優先レベルを
priorityで指定したレベルに設定します。
割り込み優先レベルを設定
return(DEVDRV_SUCCESS)
図5.26
5.9.23
INTC 割り込み優先レベルの設定関数
INTC 割り込みマスクレベルの設定関数
図 5.27にINTC 割り込みマスクレベルの設定関数のフローチャートを示します。
R_INTC_SetMaskLevel
関数の引数エラーあり?
mask_level ≧ 32
return(DEVDRV_ERR)
ICCPMRレジスタ
mask_levelで指定した割り込みマスクレベルを設定し
ます。
割り込みマスクレベルを設定
return(DEVDRV_SUCCESS)
図5.27
5.9.24
INTC 割り込みマスクレベルの設定関数
INTC 割り込みマスクレベルの取得関数
図 5.28にINTC 割り込みマスクレベルの取得関数のフローチャートを示します。
R_INTC_GetMaskLevel
割り込みマスクレベルを取得
ICCPMRレジスタ
ICCPMRからmask_levelに割り込みマスクレベルを取得
します。
return
図5.28
INTC 割り込みマスクレベルの取得関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 60 of 71
初期設定例
RZ/A1Hグループ
5.9.25
INTC の割り込み保留状態の取得関数
図 5.29にINTC の割り込み保留状態の取得関数のフローチャートを示します。
R_INTC_GetPendingStatus
関数の引数エラーあり?
int_id ≧ 587
return(DEVDRV_ERR)
int_idで指定した割り込み要因の
割り込み保留状態を取得
ICDICPRnレジスタ
int_idで指定した割り込み要因の割り込み保留状態を
icdicprに取得します。
icdicprには、ICDICPRnレジスタのリード値を最下位ビット
にシフトした値を取得します。
(1:割り込み保留状態、0:割り込み保留状態でない)
return(DEVDRV_SUCCESS)
図5.29
5.9.26
INTC の割り込み保留状態の取得関数
INTC の端子割り込み検出モードの設定関数
図 5.30にINTC の端子割り込み検出モードの設定関数のフローチャートを示します。
R_INTC_SetConfiguration
関数の引数エラーあり?
int_id < 416 かつ int_id ≧ 587 かつ int_sense指定の不正
return(DEVDRV_ERR)
int_idで指定した端子割り込みの
検出モードをint_senseで指定した
モードに設定
ICDICFRnレジスタ
int_idで指定した端子割り込みの検出モードをint_senseで
指定したモードに設定します。
検出モードは、端子割り込み(IDが416~587)のみ指定
可能です。
return(DEVDRV_SUCCESS)
図5.30
INTC の端子割り込み検出モードの設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 61 of 71
初期設定例
RZ/A1Hグループ
5.9.27
INTC 割り込みハンドラの登録関数
図 5.31にINTC 割り込みハンドラの登録関数のフローチャートを示します。
R_INTC_RegistIntFunc
関数の引数エラーあり?
int_id ≧ 587
return(DEVDRV_ERR)
割り込みハンドラ関数の登録
Userdef_INTC_RegistIntFunc()
funcで指定した関数を、int_idで指定した割り込みハンドラ関
数テーブル(intc_func_table[])に登録します。
return(DEVDRV_SUCCESS)
図5.31
5.9.28
INTC 割り込みハンドラの登録関数
INTC 割り込みハンドラテーブルへの登録関数
図 5.32にINTC 割り込みハンドラテーブルへの登録関数のフローチャートを示します。
Userdef_INTC_RegistIntFunc
割り込みハンドラ関数の登録
funcで指定した関数を、割り込みハンドラ関数テーブル
(intc_func_table[])のint_idで指定した要素に登録します。
return
図5.32
INTC 割り込みハンドラテーブルへの登録関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 62 of 71
初期設定例
RZ/A1Hグループ
5.9.29
IRQ ハンドラ処理
図 5.33にIRQ ハンドラ処理のフローチャートを示します。
irq_handler
LR_irqとSPSR_irqを
システムモードスタックに退避
システムモードへの切り替え
R0~R3, R12をシステムモードの
スタックに退避
IRQモードのLRおよびSPSRをシステムモードのスタックに退
避します。
CPUのプロセッサモードをシステムモードに切り替えます。
R0~R3, R12をシステムモードのスタックに退避します。
ICCHPIRレジスタのダミーリード
INTC割り込み発生要因のID取得
IDが1023以外?
図5.33
ICCIARレジスタから割り込み発生要因のIDをR0に取得します。
IDが1023(未定義の割り込み)
INTC割り込み発生要因のIDを
システムモードスタックへの退避
ICCIARレジスタから取得した割り込み要因のIDをシステムモ
ードのスタックに退避します。
スタックポインタの
アライメント調整
システムモードとユーザモードでスタックを共有しているた
め、INTC割り込みハンドラからの復帰時に、スタックが8バ
イトの境界となるようにアライメントの調整を行います。
アライメント調整値とLR_sysを
システムモードスタックに退避
アライメント調整したスタックポインタの値と、LR_sysをシ
ステムモードのスタックに退避します。
INTC割り込みハンドラの実行
INTC_Handler_Interrupt()
引数(R0)に割り込み要因のID(ICCIARのリード値)を設定
し、INTC割り込みハンドラをコールします。
アライメント調整値とLR_sysを
システムモードスタックから復帰
アライメント調整したスタックポインタの値と、LR_sysをシ
ステムモードのスタックから復帰します。
INTC割り込み発生要因を
システムモードスタックから復帰
INTC割り込み要因をシステムモードのスタックから復帰しま
す。
ICCEOIRへのINTC割り込み発生
要因のID書き込み
スタックに退避した割り込み発生要因のIDをICCEOIRに書き
込みます。
R0~R3, R12をシステムモードの
スタックから復帰
R0~R3, R12をシステムモードのスタックから復帰します。
return
システムモードのスタックからPCとCPSRを復帰し、例外処
理からリターンします。
IRQ ハンドラ処理
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 63 of 71
初期設定例
RZ/A1Hグループ
5.9.30
INTC 割り込みハンドラ処理
図 5.34にINTC 割り込みハンドラ処理のフローチャートを示します。
INTC_Handler_Interrupt
非サポートの割り込みID?
icciar < 587
icciar ≧ 587
割り込みIDが587以上の非サポートの割り込み
要因が受け付けられた時に、ユーザ定義関数
をコールしています。
サンプルコードでは、無限ループの処理をし
ています。
非サポート割り込み
受け付け時の処理関数
Userdef_INTC_UndefId()
IRQ多重割り込みの許可
__enable_irq()
IRQの割り込み許可ライブラリ関数をコールし、IRQ多重割り
込みを許可します。
割り込み検出方法の取得
ICDICFRnレジスタから受け付けられた割り込み要求が、レベ
ルセンス検出か、エッジ検出かの情報を取得します。
IRQ割り込みハンドラ関数の
実行
Userdef_INTC_HandlerExe()
発生したINTCの割り込み要因に対応したINTCハンドラ関数を
実行します。
ハンドラ関数のコール時に、取得した割り込み検出方法を引
数int_senseに渡します。
IRQ多重割り込みの禁止
__disable_irq()
IRQの割り込み禁止ライブラリ関数をコールし、IRQ多重割り
込みを禁止します。
return
図5.34
5.9.31
INTC 割り込みハンドラ処理
INTC 割り込み要因に対応したハンドラ処理
図 5.35にINTC 割り込み要因に対応したハンドラ処理のフローチャートを示します。
Userdef_INTC_HandlerExe
INTCハンドラ関数の実行
intc_func_table[int_id]()
int_idで指定した関数テーブル(intc_func_table[])に登録され
たINTCハンドラ関数を実行します。
ハンドラ関数のコール時に、割り込み検出方法(レベルセン
スまたはエッジセンス)を引数int_senseに渡します。
return
図5.35
INTC 割り込み要因に対応したハンドラ処理
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 64 of 71
初期設定例
RZ/A1Hグループ
5.9.32
SCIF の初期設定関数
図 5.36にSCIF の初期設定関数のフローチャートを示します。SCIF の調歩同期式モードでの初期設定は、
API 関数を使用しています。サンプルコードでは、シリアル通信の送信および受信は、割り込みを使用せず
に、ポーリング処理にて行っています。
IoInitScif2
SCIF調歩同期式モードの
初期設定
R_SCIF_UART_Init()
SCIFを調歩同期式モードで初期設定を行います。
ポートP3関連レジスタ
PIBC30ビット ← 0、PIBC32ビット ← 0
PBDC30ビット ← 0、PBDC32ビット ← 0
PM30ビット ← 1、PM32ビット ← 1
PMC30ビット ← 0、PMC32ビット ← 0
PIPC30ビット ← 0、PIPC32ビット ← 0
PORT3のマルチプレクス
端子機能の設定
PBDC30ビット ← 0、PBDC32ビット ← 1
PFC30ビット ← 1、PFC32ビット ← 1
PFCE30ビット ← 0、PFCE32ビット ← 1
PFCAE30ビット ← 1、PFCAE32 ビット ← 0
PIPC30ビット ← 1、PIPC32ビット ← 1
PMC30ビット ← 1、PMC32ビット ← 1
P3_0をTxD2、P3_2をRxD2の端子機能に設定
SCSCR_2レジスタ ← H'0030
TEビット ← 1
:送信許可
REビット ← 1
:受信許可
SCIFチャネル2のシリアル通信の
送受信を許可に設定
return
図5.36
5.9.33
SCIF の初期設定関数
SCIF の調歩同期式モードの初期設定関数
図 5.37にSCIF の調歩同期式モードの初期設定関数のフローチャートを示します。
R_SCIF_UART_Init
関数の引数エラーあり?
channel指定の不正、mode指定の不正、または cks指定の不正
return(DEVDRV_ERR)
チャネル2?
SCIFチャネル2の
調歩同期式モードの初期設定
Userdef_SCIF2_UART_Init()
channel != 2
SCIFチャネル2を調歩同期式モードで初期設定を行います。
return(DEVDRV_SUCCESS)
図5.37
SCIF の調歩同期式モードの初期設定関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 65 of 71
初期設定例
RZ/A1Hグループ
5.9.34
SCIF チャネル 2 の調歩同期式モードの初期設定関数
図 5.38および図 5.39に、SCIF チャネル 2 の調歩同期式モードの初期設定関数のフローチャートを示します。
Userdef_SCIF2_UART_Init
SCIFチャネル2のモジュール
スタンバイを解除
送受信を停止
転送モードが送信?
送信FIFOデータレジスタを
リセット
転送モードが受信?
受信FIFOデータレジスタを
リセット
STBCR4レジスタ
MSTP45ビット ← 0 :SCIFチャネル2にクロックを供給
SCSCR_2レジスタ ← H'0000
TEビット = 0
:送信を停止
REビット = 0
:受信を停止
modeの指定が送信ではない
SCFCR_2レジスタ
TFRSTビット ← 1
:送信FIFOデータレジスタをリセット
modeの指定が受信ではない
SCFCR_2レジスタ
RFRSTビット ← 1
:受信FIFOデータレジスタをリセット
SCIFチャネル2のER, BRK, DR
ビットのクリア
SCFSR_2レジスタ
ERビット = 0
:受信エラービットのクリア
BRKビット = 0
:ブレーク検出ビットのクリア
DRビット = 0
:受信データレディビットのクリア
各ビットを読み出し後に"0"を設定しクリアします。
SCIFチャネル2のORERビット
のクリア
SCLSR_2レジスタ
ORERビット ← 0
:オーバランエラービットのクリア
ORERビットを読み出し後に"0"を設定しクリアします。
シリアル通信の設定
ボーレートの設定
SCSMR_2レジスタ ← cks & H'0003
C/Aビット = 0
:調歩同期式モード
CHRビット = 0
:8ビットデータ長
PEビット = 0
:パリディビットの付加とチェックを禁止
STOPビット = 0
:1ストップビット長
CKSビット = cks
:引数cksで指定されたクロックソースを設定
SCSCR_2レジスタ
CKEビット ← B'00 :内部クロックを選択(SCK端子を入力端子に設定)
SCEMR_2レジスタ ← H'0000
BGDMビット = 0
:ボーレートジェネレータを倍速モードにしない
ABSCビット = 0
:ビットレートの16倍の周波数の基本クロックで動作
SCBRR_2レジスタ ← scbrr
引数scbrrで指定されたビットレートを設定
サンプルコードでは、P1φが66.67MHz時に115200bpsとなるように設定しています。
A
図5.38
SCIF チャネル 2 の調歩同期式モードの初期設定関数(1/2)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 66 of 71
初期設定例
RZ/A1Hグループ
A
転送モードが送受信?
modeの指定が送信のみ
modeの指定が送受信
転送モードが送信?
modeの指定が受信のみ
転送モードが受信?
送信FIFOデータ数トリガおよび
受信FIFOデータ数トリガの設定
送信FIFOデータ数トリガの設定
と受信FIFOのリセット
SCFCR_2レジスタ
RTRGビット
TTRGビット
TFRSTビット
RFRSTビット
シリアルポートの設定
受信FIFOデータ数トリガの設定
と送信FIFOのリセット
:受信モード時、受信FIFOデータ数トリガをB'00(1データ)に設定
:送信モード時、送信FIFOデータ数トリガをB'11(0データ)に設定
:送信モード時、送信FIFOデータレジスタのリセットを禁止
:受信モード時、受信FIFOデータレジスタのリセットを禁止
SCSPTR_2レジスタ
SPB2IOビット = 1 :TxD2端子にSPB2DTビットの値を出力
SPB2DTビット = 1 :入出力データをハイレベルに設定
マーク状態のTxD2端子を"H"出力に設定します。
return
図5.39
SCIF チャネル 2 の調歩同期式モードの初期設定関数(2/2)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 67 of 71
初期設定例
RZ/A1Hグループ
5.9.35
シリアルインタフェースからの 1 文字受信関数
図 5.40にシリアルインタフェースからの 1 文字受信関数のフローチャートを示します。サンプルコードで
は、ポーリング処理によりシリアルデータの受信を行い、標準入出力関数からコールされる低水準関数に受
信したデータを返すことで、ターミナルからの文字の受信処理を実現しています。
IoGetchar
SCFSR_2レジスタ
ER, BRK, FER, PERビットの読み出し
SCLSR_2レジスタ
ORERビットの読み出し
シリアル受信エラーのチェック
シリアル受信エラーあり?
ER, BRK, FER, PER, ORERビットのいずれかが"1"にセット
受信の停止とエラー処理
SCSCR_2レジスタ
REビット ← 0
SCFCR_2レジスタ
RFRSTビット ← 0
:受信の停止
:受信FIFOのリセット
("1"書き込み後に"0"を書き込み)
SCFSR_2レジスタ
ERビット ← 0
:受信エラーフラグのクリア
BRKビット ← 0
:ブレーク検出フラグのクリア
DRビット ← 0
:受信データレディフラグのクリア
SCLSR_2レジスタ
ORERビット ← 0
:オーバランエラーフラグのクリア
注:ER, BRK, DR, ORERビットを読み出し後、"0"に
クリアします。
SCSCR_2レジスタ
REビット ← 1
:受信の許可
return(-1)
受信データ待ち
(RDFビットが"1"?)
シリアルデータの受信
シリアルデータ受信の完了
data ← SCFRDR_2レジスタ
受信データを1バイト読み出し
SCFSR_2レジスタ
DRビット ← 0
RDFビット ← 0
:受信データレディフラグのクリア
:受信FIFOデータフルフラグのクリア
return(data)
図5.40
シリアルインタフェースからの 1 文字受信関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 68 of 71
初期設定例
RZ/A1Hグループ
5.9.36
シリアルインタフェースへの 1 文字送信関数
図 5.41にシリアルインタフェースへの 1 文字送信関数のフローチャートを示します。
サンプルコードでは、
標準入出力関数からコールされる低水準関数から渡された文字を、ポーリング処理によりシリアルデータと
して送信することで、ターミナルへの文字の送信処理を実現しています。
IoPutchar
送信データエンプティ待ち
(TDFEビットが"1"?)
シリアルデータの送信
送信フラグのクリア
SCFTDR_2レジスタ ← buffer
引数bufferの1バイトのデータをSCFTDRに書き込み
SCFSR_2レジスタ
TDFEビット = 0
:送信FIFOデータエンプティフラグのクリア
TENDビット = 0
:送信エンドフラグのクリア
TDFEおよびTENDビットを読み出し後、"0"にクリアします。
return
図5.41
シリアルインタフェースへの 1 文字送信関数
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 69 of 71
初期設定例
RZ/A1Hグループ
6.
サンプルコード
サンプルコードは、ルネサス エレクトロニクスホームページから入手してください。
7.
参考ドキュメント
ユーザーズマニュアル:ハードウェア
RZ/A1Hグループ ユーザーズマニュアル ハードウェア編
(最新版をルネサス エレクトロニクスホームページから入手してください。)
R7S72100 RTK772100BC00000BR(GENMAI)ユーザーズマニュアル
(最新版をルネサス エレクトロニクスホームページから入手してください。)
ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition Issue C
(最新版を ARM ホームページから入手してください。)
ARM Generic Interrupt Controller Architecture Specification Architecture version 1.0
(最新版を ARM ホームページから入手してください。)
テクニカルアップデート/テクニカルニュース
(最新の情報をルネサス エレクトロニクスホームページから入手してください。)
ユーザーズマニュアル:開発環境
ARM ソフトウェア開発ツール(ARM Compiler toolchain、ARM DS-5 等)に関しては、ARM ホームページ
から入手してください。
(最新版を ARM ホームページから入手してください。)
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 70 of 71
初期設定例
RZ/A1Hグループ
ホームページとサポート窓口
•
ルネサス エレクトロニクスホームページ
http://japan.renesas.com/
•
お問合せ先
http://japan.renesas.com/contact/
すべての商標および登録商標は,それぞれの所有者に帰属します。
R01AN1864JJ0100
2014.04.25
Rev.1.00
Page 71 of 71
改訂記録
Rev.
Rev.1.00
発行日
2014.04.25
ページ
-
改訂内容
ポイント
初版発行
A-1
製品ご使用上の注意事項
ここでは、マイコン製品全体に適用する「使用上の注意事項」について説明します。個別の使用上の注意
事項については、本ドキュメントおよびテクニカルアップデートを参照してください。
1.
未使用端子の処理
【注意】未使用端子は、本文の「未使用端子の処理」に従って処理してください。
CMOS製品の入力端子のインピーダンスは、一般に、ハイインピーダンスとなっています。未使用
端子を開放状態で動作させると、誘導現象により、LSI周辺のノイズが印加され、LSI内部で貫通電
流が流れたり、入力信号と認識されて誤動作を起こす恐れがあります。未使用端子は、本文「未使用
端子の処理」で説明する指示に従い処理してください。
2.
電源投入時の処置
【注意】電源投入時は,製品の状態は不定です。
電源投入時には、LSIの内部回路の状態は不確定であり、レジスタの設定や各端子の状態は不定で
す。
外部リセット端子でリセットする製品の場合、電源投入からリセットが有効になるまでの期間、端子
の状態は保証できません。
同様に、内蔵パワーオンリセット機能を使用してリセットする製品の場合、電源投入からリセットの
かかる一定電圧に達するまでの期間、端子の状態は保証できません。
3.
リザーブアドレス(予約領域)のアクセス禁止
【注意】リザーブアドレス(予約領域)のアクセスを禁止します。
アドレス領域には、将来の機能拡張用に割り付けられているリザーブアドレス(予約領域)がありま
す。これらのアドレスをアクセスしたときの動作については、保証できませんので、アクセスしない
ようにしてください。
4.
クロックについて
【注意】リセット時は、クロックが安定した後、リセットを解除してください。
プログラム実行中のクロック切り替え時は、切り替え先クロックが安定した後に切り替えてください。
リセット時、外部発振子(または外部発振回路)を用いたクロックで動作を開始するシステムでは、
クロックが十分安定した後、リセットを解除してください。また、プログラムの途中で外部発振子
(または外部発振回路)を用いたクロックに切り替える場合は、切り替え先のクロックが十分安定し
てから切り替えてください。
5.
製品間の相違について
【注意】型名の異なる製品に変更する場合は、製品型名ごとにシステム評価試験を実施してくださ
い。
同じグループのマイコンでも型名が違うと、内部ROM、レイアウトパターンの相違などにより、電
気的特性の範囲で、特性値、動作マージン、ノイズ耐量、ノイズ輻射量などが異なる場合がありま
す。型名が違う製品に変更する場合は、個々の製品ごとにシステム評価試験を実施してください。
ご注意書き
1. 本資料に記載された回路、ソフトウェアおよびこれらに関連する情報は、半導体製品の動作例、応用例を説明するものです。お客様の機器・システムの設計におい
て、回路、ソフトウェアおよびこれらに関連する情報を使用する場合には、お客様の責任において行ってください。これらの使用に起因して、お客様または第三
者に生じた損害に関し、当社は、一切その責任を負いません。
2. 本資料に記載されている情報は、正確を期すため慎重に作成したものですが、誤りがないことを保証するものではありません。万一、本資料に記載されている情報
の誤りに起因する損害がお客様に生じた場合においても、当社は、一切その責任を負いません。
3. 本資料に記載された製品デ-タ、図、表、プログラム、アルゴリズム、応用回路例等の情報の使用に起因して発生した第三者の特許権、著作権その他の知的財産権
に対する侵害に関し、当社は、何らの責任を負うものではありません。当社は、本資料に基づき当社または第三者の特許権、著作権その他の知的財産権を何ら許
諾するものではありません。
4. 当社製品を改造、改変、複製等しないでください。かかる改造、改変、複製等により生じた損害に関し、当社は、一切その責任を負いません。
5. 当社は、当社製品の品質水準を「標準水準」および「高品質水準」に分類しており、
各品質水準は、以下に示す用途に製品が使用されることを意図しております。
標準水準:
コンピュータ、OA機器、通信機器、計測機器、AV機器、
家電、工作機械、パーソナル機器、産業用ロボット等
高品質水準:輸送機器(自動車、電車、船舶等)、交通用信号機器、
防災・防犯装置、各種安全装置等
当社製品は、直接生命・身体に危害を及ぼす可能性のある機器・システム(生命維持装置、人体に埋め込み使用するもの等) 、もしくは多大な物的損害を発生さ
せるおそれのある機器・システム(原子力制御システム、軍事機器等)に使用されることを意図しておらず、使用することはできません。 たとえ、意図しない用
途に当社製品を使用したことによりお客様または第三者に損害が生じても、当社は一切その責任を負いません。 なお、ご不明点がある場合は、当社営業にお問い
合わせください。
6. 当社製品をご使用の際は、当社が指定する最大定格、動作電源電圧範囲、放熱特性、実装条件その他の保証範囲内でご使用ください。当社保証範囲を超えて当社製
品をご使用された場合の故障および事故につきましては、当社は、一切その責任を負いません。
7. 当社は、当社製品の品質および信頼性の向上に努めていますが、半導体製品はある確率で故障が発生したり、使用条件によっては誤動作したりする場合がありま
す。また、当社製品は耐放射線設計については行っておりません。当社製品の故障または誤動作が生じた場合も、人身事故、火災事故、社会的損害等を生じさせ
ないよう、お客様の責任において、冗長設計、延焼対策設計、誤動作防止設計等の安全設計およびエージング処理等、お客様の機器・システムとしての出荷保証
を行ってください。特に、マイコンソフトウェアは、単独での検証は困難なため、お客様の機器・システムとしての安全検証をお客様の責任で行ってください。
8. 当社製品の環境適合性等の詳細につきましては、製品個別に必ず当社営業窓口までお問合せください。ご使用に際しては、特定の物質の含有・使用を規制する
RoHS指令等、適用される環境関連法令を十分調査のうえ、かかる法令に適合するようご使用ください。お客様がかかる法令を遵守しないことにより生じた損害に
関して、当社は、一切その責任を負いません。
9. 本資料に記載されている当社製品および技術を国内外の法令および規則により製造・使用・販売を禁止されている機器・システムに使用することはできません。ま
た、当社製品および技術を大量破壊兵器の開発等の目的、軍事利用の目的その他軍事用途に使用しないでください。当社製品または技術を輸出する場合は、「外
国為替及び外国貿易法」その他輸出関連法令を遵守し、かかる法令の定めるところにより必要な手続を行ってください。
10. お客様の転売等により、本ご注意書き記載の諸条件に抵触して当社製品が使用され、その使用から損害が生じた場合、当社は何らの責任も負わず、お客様にてご負
担して頂きますのでご了承ください。
11. 本資料の全部または一部を当社の文書による事前の承諾を得ることなく転載または複製することを禁じます。
注1. 本資料において使用されている「当社」とは、ルネサス エレクトロニクス株式会社およびルネサス エレクトロニクス株式会社がその総株主の議決権の過半数
を直接または間接に保有する会社をいいます。
注2. 本資料において使用されている「当社製品」とは、注1において定義された当社の開発、製造製品をいいます。
http://www.renesas.com
■営業お問合せ窓口
※営業お問合せ窓口の住所は変更になることがあります。最新情報につきましては、弊社ホームページをご覧ください。
ルネサス エレクトロニクス株式会社 〒100-0004 千代田区大手町2-6-2 (日本ビル)
■技術的なお問合せおよび資料のご請求は下記へどうぞ。
総合お問合せ窓口:http://japan.renesas.com/contact/
© 2014 Renesas Electronics Corporation. All rights reserved.
Colophon 3.0