チュートリアル
非同期バス接続 / 非同期バス接続(関数コール)
この項目では、非同期バス接続方法の手順を解説しております。
本手順では、通常のテストポイント情報を取得するまでに変更が必要な個所について御説明いたします。
実際導入を行う際には、お客様の環境に合わせてDT10の導入を行ってください。
1.出力ポートのレジスタ設定の調査
■非同期バス接続出力フォーマット
非同期バス接続は、NORフラッシュとCPU間のバスを利用し、テストポイント通過時に
外部に出力された信号(通過情報)を取得します。
ハードウェアの取り付け方法については、弊社「アタッチメント取り付けガイド」をご参照ください。
事前に接続先のフラッシュROMの先頭アドレスをご調査ください。
また、対象のフラッシュROMでキャッシュをご使用の場合は、キャッシュ領域内のメモリ空間では
正常なデータ取得が行えませんので、非キャッシュ領域の先頭アドレスをご調査ください。
カーネル・ユーザランド両方からデータを出力する場合は非同期バス接続(関数コール)をご選択ください。
2.サンプルドライバの構成
Driver_DT10
-dt10_tpdrv.c … ユーザーランド側の出力用ドライバ。
-dt10_tpdrv.h … dt10_tp構造体の定義
Driver_async
-dt_async_drv.c … カーネル側の出力用のデバイスドライバ
-dt10_tpdrv.h … dt10_tp構造体の定義
3-1.NORFlashのベースアドレス、サイズの定義
ダウンロードいただいたファイルについて、下記の内容をターゲット環境に合わせてご変更ください。
3-1.NORFlashのベースアドレス、サイズの定義
/*==============================================================================*/
/* Desc: Please set beginning address and size in the virtual memory space. */
/*==============================================================================*/
#define
#define
3-2. async_write関数の定義
/*==============================================================================*/
/* Func: async_write */
/* Desc: Test Point Output Function */
/*==============================================================================*/
static void async_write(dt10_tp tp)
{
unsigned char *p;
int i;
if (cookie == NULL) {
cookie = ioremap(FLASH_ADDR, FLASH_SIZE);
}
for( i = 0; i < tp.count; i++ )
{
p = (unsigned char *)cookie;
p += tp.addr[i];
outw( tp.data[i], (unsigned int)p );
/* *(unsigned short *)p = (unsigned short)tp.data[i]; */
}
}
Flashへの書き込み処理を行う関数です。サンプルではoutwを使用しております。
ターゲットに合わせてご変更ください。
3-2. async_write関数の定義
/*==============================================================================*/
/* Func: async_write */
/* Desc: Test Point Output Function */
/*==============================================================================*/
static void async_write(dt10_tp tp)
{
unsigned char *p;
int i;
if (cookie == NULL) {
cookie = ioremap(FLASH_ADDR, FLASH_SIZE);
}
for( i = 0; i < tp.count; i++ )
{
p = (unsigned char *)cookie;
p += tp.addr[i];
outw( tp.data[i], (unsigned int)p );
/* *(unsigned short *)p = (unsigned short)tp.data[i]; */
}
}
4.ユーザーランド用ドライバのカスタマイズ
ユーザーランド層のドライバについては基本的にカスタマイズは必要ございません。
ターゲットのMakefileに入れていただき、Make対象としてください。
5.カーネル、ユーザランドのコンパイル
お使いの開発環境にご変更いただいたドライバファイルを追加します。
Makefileに追加していただくなどして、コンパイルできるかご確認ください。