チュートリアル
1.出力ポートのレジスタ設定の調査
汎用ポートを使用する接続では、テストポイント情報を出力する際にポートのHI/LOW制御が必要になります。
出力ポートのレジスタのアドレスを調査していただき、使用するポートを出力ポートに設定します。
2.サンプルドライバのカスタマイズ
ダウンロードいただいたドライバファイルは、ターゲット環境に合わせて、下記の内容を変更します。
2-1.ヘッダファイルのInclude
下記の変更内容のコントロール等に必要なヘッダファイルをIncludeしてください。
※”Common.h”は、弊社のサンプル環境における制御ポートのdefineや制御APIなどが定義されているヘッダファイルです。削除するか、コメントアウトしてお使いください。
/*==================================================================*/
/* Desc: Header for FROM Control */
/*==================================================================*/
#include "Common.h"
2-2._TP_BusPortInit関数を記述する
_TP_BusPortInit関数は、初めてTPの出力が行われる際に使用するポートレジスタの設定・初期化を行う関数です。
SPI接続では、CS,CLKとDAT0を設定します。
ターゲット側の初期化処理で定義される場合は空関数で構いません。
なお、CS,CLKに割り当てられたポートは、初期値が必ずHI出力になるように設定してください。
初期値がLOW出力の場合は、初期化した際にDT10上で、不要なデータとして検出されることがあります。
サンプル環境での記述例のため、実際のターゲット環境において不要となるコードは削除してください。
ポート制御の際、制御にAPIが必要な場合は、
下記例の”GPIOPinWrite( GPIO_PORTD_BASE, GPIO_PIN_3, GPIO_PIN_3);”のように変更します。
直接レジスタの変更が可能な場合は、上記例のコメントのように”PA.DIR = 0x3f;”のように変更します。
/*==================================================================*/
/* Func: _TP_BusPortInit */
/* Desc: Please describe the code to initializes ports. */
/*==================================================================*/
static void _TP_BusPortInit(void)
{
/* ex)
PA.DIR = 0x3f;
PD.DIR = 0x3f;
PA.word = 0x3f;
PD.word = 0x3f;
*/
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOA );
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOD );
GPIOPinTypeGPIOOutput( GPIO_PORTD_BASE, GPIO_PIN_2 ); /* CLK */
GPIOPinTypeGPIOOutput( GPIO_PORTD_BASE, GPIO_PIN_3 ); /* CS */
GPIOPinTypeGPIOInput( GPIO_PORTD_BASE, GPIO_PIN_6 ); /* DOUT */
GPIOPinTypeGPIOOutput( GPIO_PORTA_BASE, GPIO_PIN_2 ); /* DAT0 */
GPIOPinWrite( GPIO_PORTD_BASE, GPIO_PIN_2, GPIO_PIN_2);
GPIOPinWrite( GPIO_PORTD_BASE, GPIO_PIN_3, GPIO_PIN_3);
GPIOPinWrite( GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_PIN_2 );
}
2-3.portReverseCLK/portSetCLK関数の修正
portSetCLK関数はデータ出力の際にCLKのHI/LOWを変更する関数です。
引数datの値が0であれば、LOW。それ以外の場合は、HIになるように処理を変更します。
/*==================================================================*/
/* Func: portSetCLK */
/* Desc: Please describe the code to set the value to CLK Port. */
/*==================================================================*/
DT_INLINE void portSetCLK( DT_UINT dat)
{
/* ex)
PA.bit.b0 = dat?1:0;
*/
GPIOPinWrite( GPIO_PORTD_BASE, GPIO_PIN_2, dat?0xff:0x00 );
}
2-4.portSetCS関数の変更
portSetCS関数はデータ出力の際にCSのHI/LOWを変更する関数です。
引数datの値が0であれば、LOW。それ以外の場合は、HIになるように処理を変更します。
/*==================================================================*/
/* Func: portSetCS */
/* Desc: Please describe the code to set the value to CS Port. */
/*==================================================================*/
DT_INLINE void portSetCS(DT_UINT dat)
{
/* ex)
PA.bit.b1 = dat?1:0;
*/
GPIOPinWrite( GPIO_PORTD_BASE, GPIO_PIN_3, dat?0xff:0x00 );
}
2-5.portSetData関数の変更
portSetDATA関数はデータ出力の際にDATA端子のHI/LOWを変更する関数です。
引数datの値が0であれば、LOW。それ以外の場合は、HIになるように処理を変更します。
/*==================================================================*/
/* Func: portSetDATA */
/* Desc: Please describe the code to set the value to DATA Port. */
/*==================================================================*/
DT_INLINE void portSetDATA(DT_UINT dat)
{
/* ex)
PA.bit.b2 = dat?1:0;
*/
GPIOPinWrite( GPIO_PORTA_BASE, GPIO_PIN_2, dat?0xff:0x00 );
}
2-6.enterCritical/exitCritical関数の変更
enterCritical/exitCritical関数はそれぞれ割り込み禁止、解除を行う関数です。
未設定の場合、データ取得が正常に行えない場合がありますので、必ず設定します。
/*==================================================================*/
/* Func: enterCritical */
/* Desc: Please describe the code to enter Critical Section. */
/*==================================================================*/
DT_INLINE void enterCritical(void)
{
// ex) DI();
//
taskENTER_CRITICAL();
}/*==================================================================*/
/* Func: exitCritical */
/* Desc: Please describe the code to exit Critical Section. */
/*==================================================================*/
DT_INLINE void exitCritical(void)
{
// ex) EI();
//
taskEXIT_CRITICAL();
}
3.各種Include,defineの設定
3-1.ターゲット環境での符号なし32bitの型名指定
通常は変更不要です。符号無し32bitの型名を記載します。
もしこちらの項目を変更した場合は、DT10アプリ側の設定も変更する必要があります。
/*==================================================================*/
/* Macro: DT_UINT */
/* Desc: Please change Test Point argument type for DT10 Project setting. */
/*==================================================================*/
#define DT_UINT unsigned int
3-2.関数のInline化
ターゲット環境で関数のInline化が可能な場合は、ここで定義します。
オーバヘッドの削減の為、各関数をinline化します。
不必要な場合はコメントアウトして、”#define DT_INLINE static”を有効にします。
/*==================================================================*/
/* Macro: DT_INLINE */
/* Desc: Please use "static" instead of "inline" if "inline" cannot be used. */
/*==================================================================*/
#define DT_INLINE inline
/*#define DT_INLINE _inline /* for Windows */
/*#define DT_INLINE static /* when "inline" cannot be used */
3-3.出力時のループ処理変更オプション
SPI接続の出力時に行われているループ処理を使用しない処理に変更するオプションです。
16bit以下のマイコンや低クロックのCPUの場合にオーバヘッドが軽減されることあります。
/*==================================================================*/
/* Macro: DT_USE_LOOP */
/* Desc: Please change the value 0 or 1. If 1 is set, loop is used. */
/*==================================================================*/
#define DT_USE_LOOP 1
4.ターゲットのコンパイル
お使いの開発環境に、カスタマイズしたドライバファイルを追加します。
コンパイルしていただき、問題なくターゲットが動作するかを確認します。