void set() //各種機能初期設定 { PORTD.DDR.BYTE = 0x06; PORTA.DDR.BYTE = 0x1f; PORT7.DDR.BYTE = 0x70; PORT8.DDR.BYTE = 0x07; PORT9.DDR.BYTE = 0x0f; PORTE.DDR.BYTE = 0x00; PORT1.DDR.BYTE = 0x03; SYSTEM.SCKCR.BIT.PCK=1; //モジュールクロックの変更 12M Hz を4逓倍 SYSTEM.SCKCR.BIT.ICK=0; //システムクロックの変更 12M Hz を8逓倍 init_sci1(); MSTP_CMT0=0; //CMT モジュールスタンバイ解除 CMT0.CMCR.BIT.CMIE = 1; //CMTの割り込み許可 CMT0.CMCR.BIT.CKS = 0; //φ/8 = 6 MHz CMT0.CMCOR = 6000; //1ms周期で割り込み ICU.IER[0x03].BIT.IEN4=1; //割り込み要求許可 ICU.IPR[0x04].BIT.IPR=10; //割り込み優先レベル変更 CMT.CMSTR0.BIT.STR0 = 1; //CMTカウントスタート MSTP_CMT1=0; //CMT モジュールスタンバイ解除 CMT1.CMCR.BIT.CMIE = 1; //CMTの割り込み許可 CMT1.CMCR.BIT.CKS = 0; //φ/8 = 6 MHz CMT1.CMCOR = 3000; //1ms周期で割り込み ICU.IER[0x03].BIT.IEN5=1; //割り込み要求許可 ICU.IPR[0x05].BIT.IPR=15; //割り込み優先レベル変更 CMT.CMSTR0.BIT.STR1 = 1; //CMTカウントスタート MSTP_AD0=0; //10bitAD変換 モジュールストップ状態の解除 AD0.ADCSR.BIT.ADST = 0; // AD変換停止 AD0.ADCR.BIT.MODE = 0; // AD変換モード選択 シングルモード AD0.ADCSR.BIT.ADIE = 0; // 割込み禁止 AD0.ADCR.BIT.CKS = 0; // 周辺動作クロック φ/8 AD0.ADDPR.BIT.DPPRC = 0; //10bitで変換 AD0.ADDPR.BIT.DPSEL = 1; //MSB詰め SYSTEM.MSTPCRA.BIT.MSTPA9=0; MTU.TSTRA.BIT.CST0=0; //カウント停止 MTU0.TCR.BIT.CCLR=2; MTU0.TCR.BIT.TPSC=0; //PWM周期を96kHzに設定 MTU0.TMDR.BIT.MD=3; MTU0.TIORH.BIT.IOA=5; MTU0.TIORL.BIT.IOC=5; MTU0.TGRB=1000; MTU0.TGRA=0; //コンペアマッチの値を0に設定 MTU0.TGRC=0; MTU.TSTRA.BIT.CST0=1; //カウントスタート PORT3.ICR.BYTE = 0x0f; MTU.TSTRA.BIT.CST1=0; //カウント停止 MTU.TSTRA.BIT.CST2=0; MTU1.TMDR.BIT.MD=4; //位相計数モードに設定 MTU2.TMDR.BIT.MD=4; MTU.TSTRA.BIT.CST1=1; //カウント開始 MTU.TSTRA.BIT.CST2=1; }
//************************************************************************* //* *************************系统初始化************************ * //************************************************************************* void vInitialize(void) { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IO口初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> vIOPortInit(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> vTimerInit(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<光电编码器初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> encoderInit(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<官方初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> init_sci1( 0x00, 79 ); /* Initialization of SCI1 */ set_ccr( 0x00 ); /* Entire interrupt permission */ //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<输出初始化信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>> printf("\nInitialize is successful!"); }
void main( void ) { int i, j; unsigned int u; char c; /* マイコン機能の初期化 */ init(); /* 初期化 */ initI2CEeprom( &P6DDR, &P6DR, 0x90, 6, 5); /* EEP-ROM初期設定 */ init_sci1( 0x00, 79 ); /* SCI1初期化 */ set_ccr( 0x00 ); /* 全体割り込み許可 */ /* マイコンカーの状態初期化 */ speed_r( 0, 0 ); speed_f( 0, 0 ); servoPwmOut( 0 ); while( 1 ) { switch( pattern ) { case 0: /* メニュー */ printf( "\n\n" ); printf( "Motor Drive PCB TypeS Test Program Ver1.00\n" ); printf( "\n" ); printf( "1 : LEDのテスト\n" ); printf( "2 : スイッチのテスト\n" ); printf( "3 : CN8の入力テスト\n" ); printf( "4 : ブザーのテスト\n" ); printf( "5 : エンコーダのテスト\n" ); printf( "6 : EEP-ROMのテスト\n" ); printf( "7 : ボリュームのテスト\n" ); printf( "8 : アナログセンサ基板のテスト\n" ); printf( "9 : モータのテスト\n" ); printf( "\n" ); printf( "1-9の数字を入力してください " ); pattern = 1; break; case 1: if( get_sci(&c) ) { if( c >= '1' && c <= '9' ) { printf( "%c\n\n" , c ); cnt1 = 0; pattern = (c - 0x30) * 10 + 1; } } break; case 11: /* LEDのテスト */ printf( "現在LED2〜5を順番に点灯中です。" ); printf( "終わったらどれかキーを押してください。\n" ); pattern = 12; break; case 12: led_out( 1 << (cnt1 / 500) ); if( cnt1 >= 2000 ) cnt1 = 0; if( get_sci(&c) == 1 ) { led_out( 0 ); pattern = 0; } break; case 21: /* スイッチのテスト */ printf( "現在スイッチの値を表示中です。" ); printf( "終わったらどれかキーを押してください。\n" ); pattern = 22; break; case 22: if( get_sci(&c) == 1 ) { pattern = 0; break; } if( cnt1 >= 200 ) { cnt1 = 0; printf( "ディップSW(SW3)の値 : %02x ", dipsw_get2() ); printf( "プッシュSW(SW2)の値 : %1x\r", pushsw_get() ); } break; case 31: /* CN8の入力テスト */ printf( "CN8に入力されている値を表示中です。" ); printf( "終わったらどれかキーを押してください。\n" ); pattern = 32; break; case 32: if( get_sci(&c) == 1 ) { pattern = 0; break; } if( cnt1 >= 200 ) { cnt1 = 0; printf( "CN8の入力値 : %1x\r", cn8_get() ); } break; case 41: /* ブザーのテスト */ printf( "ブザーをテストします。" ); printf( "終わったらどれかキーを押してください。\n" ); pattern = 42; break; case 42: if( get_sci(&c) == 1 ) { pattern = 0; beep_out( 0 ); break; } if( cnt1 <= 1000 ) { beep_out( 1 ); } else if( cnt1 <= 2000 ) { beep_out( 0 ); } else { cnt1 = 0; } break; case 51: /* エンコーダのテスト */ printf( "エンコーダの入力パルス数を表示します。" ); printf( "終わったらどれかキーを押してください。\n" ); lEncoderTotal = 0; pattern = 52; break; case 52: if( get_sci(&c) == 1 ) { pattern = 0; break; } if( cnt1 >= 200 ) { cnt1 = 0; printf( "エンコーダのパルス値 : %8ld\r", lEncoderTotal ); } break; case 61: /* EEP-ROMのテスト */ printf( "EEP-ROMが正常に書き込めるかチェックします。" ); printf( "チェック中はキー入力を受け付けません。" ); printf( "チェックしますか?(Y or N) " ); pattern = 62; break; case 62: if( get_sci(&c) == 1 ) { switch( c ) { case 'Y': case 'y': printf( "y\n" ); pattern = 63; break; case 'N': case 'n': printf( "n\n" ); pattern = 0; break; } } break; case 63: for( u=0; u<0x8000 ; u++ ) { if( u % 0x80 == 0 ) { printf( "%3ld%%チェック完了...\r", (long)u * 100 / 0x8000 ); } writeI2CEeprom( u, 0xaa ); while( !checkI2CEeprom() ); if( (unsigned char)readI2CEeprom( u ) != 0xaa ) { break; } writeI2CEeprom( u, 0x55 ); while( !checkI2CEeprom() ); if( (unsigned char)readI2CEeprom( u ) != 0x55 ) { break; } writeI2CEeprom( u, 0x00 ); while( !checkI2CEeprom() ); if( (unsigned char)readI2CEeprom( u ) != 0x00 ) { break; } } printf( "\n" ); if( u == 0x8000 ) { printf( "EEP-ROMは正常でした。\n" ); } else { printf( "EEP-ROMに異常がありました。" ); printf( "半田不良など確認してください。\n" ); } pattern = 64; break; case 64: printf( "どれかキーを押してください。" ); while( get_sci(&c) ); pattern = 65; break; case 65: if( get_sci(&c) == 1 ) { pattern = 0; break; } break; case 71: /* ボリュームのテスト */ printf( "ボリューム電圧を表示中です。" ); printf( "終わったらどれかキーを押してください。\n" ); pattern = 72; break; case 72: if( get_sci(&c) == 1 ) { pattern = 0; break; } if( cnt1 >= 200 ) { cnt1 = 0; i = AD_DRB >> 6; j = (long)500 * i / 1023; printf( "ボリュームの電圧 : %4d (%01d.%02dV)\r", i, j/100, j%100 ); } break; case 81: /* アナログセンサ基板のテスト */ printf( "アナログセンサ基板の値を表示中です。" ); printf( "終わったらどれかキーを押してください。\n" ); pattern = 82; break; case 82: if( get_sci(&c) == 1 ) { pattern = 0; break; } if( cnt1 >= 200 ) { cnt1 = 0; printf( "Left=%4d , Right=%4d , " "Digital=%1x , Center=%1d , Bar=%1d\r", AD_DRD>>6, AD_DRC>>6, sensor_inp(), center_inp(), startbar_get() ); } break; case 91: /* モータのテスト */ printf( "モータのテストをします。\n" ); printf( "1 : 左後ろモータ\n" ); printf( "2 : 右後ろモータ\n" ); printf( "3 : サーボモータ\n" ); printf( "4 : 左前モータ\n" ); printf( "5 : 右前モータ\n" ); printf( "0 : 終了\n" ); printf( "\n" ); printf( "0-5の数字を入力してください " ); pattern = 92; break; case 92: if( get_sci(&c) ) { if( c == '0' ) { pattern = 0; break; } else if( c >= '1' && c <= '5' ) { printf( "%c\n\n" , c ); cnt1 = 0; pattern = (c - 0x31) * 10 + 101; } } break; case 101: printf( "左後ろモータをテストします。\n" ); printf( "スペースキーを押して動作を変えます。" ); printf( "0キーで終了です。\n" ); cnt1 = 0; i = 0; j = 1; pattern = 102; break; case 102: if( get_sci(&c) ) { if( c == '0' ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); pattern = 91; break; } else if( c == ' ' ) { cnt1 = 0; i++; if( i >= 5 ) i = 0; } } switch( i ) { case 0: if( i != j ) { printf( "停止中 \r" ); j = i; } speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); break; case 1: if( i != j ) { printf( "正転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( 50, 0 ); motor_mode_r( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 2: if( i != j ) { printf( "逆転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( -50, 0 ); motor_mode_r( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 3: if( i != j ) { printf( "正転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( 50, 0 ); motor_mode_r( FREE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( FREE , BRAKE ); } else { cnt1 = 0; } break; case 4: if( i != j ) { printf( "逆転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( -50, 0 ); motor_mode_r( FREE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( FREE , BRAKE ); } else { cnt1 = 0; } break; } break; case 111: printf( "右後ろモータをテストします。\n" ); printf( "スペースキーを押して動作を変えます。" ); printf( "0キーで終了です。\n" ); cnt1 = 0; i = 0; j = 1; pattern = 112; break; case 112: if( get_sci(&c) ) { if( c == '0' ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); pattern = 91; break; } else if( c == ' ' ) { cnt1 = 0; i++; if( i >= 5 ) i = 0; } } switch( i ) { case 0: if( i != j ) { printf( "停止中 \r" ); j = i; } speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); break; case 1: if( i != j ) { printf( "正転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( 0, 50 ); motor_mode_r( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 2: if( i != j ) { printf( "逆転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( 0, -50 ); motor_mode_r( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 3: if( i != j ) { printf( "正転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( 0, 50 ); motor_mode_r( BRAKE , FREE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , FREE ); } else { cnt1 = 0; } break; case 4: if( i != j ) { printf( "逆転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_r( 0, -50 ); motor_mode_r( BRAKE , FREE ); } else if( cnt1 <= 2000 ) { speed2_r( 0, 0 ); motor_mode_r( BRAKE , FREE ); } else { cnt1 = 0; } break; } break; case 121: printf( "サーボモータをテストします。\n" ); printf( "スペースキーを押して動作を変えます。" ); printf( "0キーで終了です。\n" ); cnt1 = 0; i = 0; j = 1; pattern = 122; break; case 122: if( get_sci(&c) ) { if( c == '0' ) { servoPwmOut( 0 ); motor_mode_s( BRAKE ); pattern = 91; break; } else if( c == ' ' ) { cnt1 = 0; i++; if( i >= 5 ) i = 0; } } switch( i ) { case 0: if( i != j ) { printf( "停止中 \r" ); j = i; } servoPwmOut( 0 ); motor_mode_s( BRAKE ); break; case 1: if( i != j ) { printf( "正転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { servoPwmOut( 50 ); motor_mode_s( BRAKE ); } else if( cnt1 <= 2000 ) { servoPwmOut( 0 ); motor_mode_s( BRAKE ); } else { cnt1 = 0; } break; case 2: if( i != j ) { printf( "逆転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { servoPwmOut( -50 ); motor_mode_s( BRAKE ); } else if( cnt1 <= 2000 ) { servoPwmOut( 0 ); motor_mode_s( BRAKE ); } else { cnt1 = 0; } break; case 3: if( i != j ) { printf( "正転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { servoPwmOut( 50 ); motor_mode_s( FREE ); } else if( cnt1 <= 2000 ) { servoPwmOut( 0 ); motor_mode_s( FREE ); } else { cnt1 = 0; } break; case 4: if( i != j ) { printf( "逆転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { servoPwmOut( -50 ); motor_mode_s( FREE ); } else if( cnt1 <= 2000 ) { servoPwmOut( 0 ); motor_mode_s( FREE ); } else { cnt1 = 0; } break; } break; case 131: printf( "左前モータをテストします。\n" ); printf( "スペースキーを押して動作を変えます。" ); printf( "0キーで終了です。\n" ); cnt1 = 0; i = 0; j = 1; pattern = 132; break; case 132: if( get_sci(&c) ) { if( c == '0' ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); pattern = 91; break; } else if( c == ' ' ) { cnt1 = 0; i++; if( i >= 5 ) i = 0; } } switch( i ) { case 0: if( i != j ) { printf( "停止中 \r" ); j = i; } speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); break; case 1: if( i != j ) { printf( "正転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( 50, 0 ); motor_mode_f( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 2: if( i != j ) { printf( "逆転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( -50, 0 ); motor_mode_f( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 3: if( i != j ) { printf( "正転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( 50, 0 ); motor_mode_f( FREE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( FREE , BRAKE ); } else { cnt1 = 0; } break; case 4: if( i != j ) { printf( "逆転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( -50, 0 ); motor_mode_f( FREE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( FREE , BRAKE ); } else { cnt1 = 0; } break; } break; case 141: printf( "右後ろモータをテストします。\n" ); printf( "スペースキーを押して動作を変えます。" ); printf( "0キーで終了です。\n" ); cnt1 = 0; i = 0; j = 1; pattern = 142; break; case 142: if( get_sci(&c) ) { if( c == '0' ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); pattern = 91; break; } else if( c == ' ' ) { cnt1 = 0; i++; if( i >= 5 ) i = 0; } } switch( i ) { case 0: if( i != j ) { printf( "停止中 \r" ); j = i; } speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); break; case 1: if( i != j ) { printf( "正転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( 0, 50 ); motor_mode_f( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 2: if( i != j ) { printf( "逆転50%% <-> ブレーキ動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( 0, -50 ); motor_mode_f( BRAKE , BRAKE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , BRAKE ); } else { cnt1 = 0; } break; case 3: if( i != j ) { printf( "正転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( 0, 50 ); motor_mode_f( BRAKE , FREE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , FREE ); } else { cnt1 = 0; } break; case 4: if( i != j ) { printf( "逆転50%% <-> フリー 動作中\r" ); j = i; } if( cnt1 <= 1000 ) { speed2_f( 0, -50 ); motor_mode_f( BRAKE , FREE ); } else if( cnt1 <= 2000 ) { speed2_f( 0, 0 ); motor_mode_f( BRAKE , FREE ); } else { cnt1 = 0; } break; } break; default: break; }
void set() //各種機能初期設定 { PORTD.DDR.BYTE = 0x06; PORTA.DDR.BYTE = 0x1f; PORTB.DDR.BYTE = 0x80; PORT7.DDR.BYTE = 0x70; PORT8.DDR.BYTE = 0x07; PORT9.DDR.BYTE = 0x0f; PORTE.DDR.BYTE = 0x00; PORT1.DDR.BYTE = 0x03; SYSTEM.SCKCR.BIT.PCK=1; //モジュールクロックの変更 12M Hz を4逓倍 SYSTEM.SCKCR.BIT.ICK=0; //システムクロックの変更 12M Hz を8逓倍 init_sci1(); MSTP_CMT0=0; //CMT モジュールスタンバイ解除 CMT0.CMCR.BIT.CMIE = 1; //CMTの割り込み許可 CMT0.CMCR.BIT.CKS = 0; //φ/8 = 6 MHz CMT0.CMCOR = 4000; //0.5ms周期で割り込み ICU.IER[0x03].BIT.IEN4=1; //割り込み要求許可 ICU.IPR[0x04].BIT.IPR=10; //割り込み優先レベル変更 CMT.CMSTR0.BIT.STR0 = 1; //CMTカウントスタート MSTP_AD0=0; //10bitAD変換 モジュールストップ状態の解除 AD0.ADCSR.BIT.ADST = 0; // AD変換停止 AD0.ADCR.BIT.MODE = 0; // AD変換モード選択 シングルモード AD0.ADCSR.BIT.ADIE = 0; // 割込み禁止 AD0.ADCR.BIT.CKS = 0; // 周辺動作クロック φ/8 AD0.ADDPR.BIT.DPPRC = 0; //10bitで変換 AD0.ADDPR.BIT.DPSEL = 1; //MSB詰め SYSTEM.MSTPCRA.BIT.MSTPA16=0; //12ビットA/D変換モジュールユニット1の使用を許可 SYSTEM.MSTPCRA.BIT.MSTPA17=0; //12ビットA/D変換モジュールユニット0の使用を許可 SYSTEM.MSTPCRA.BIT.MSTPA24=0; //12ビットA/D変換モジュールユニット制御部の使用を許可 S12AD0.ADCSR.BIT.ADST=0; //A/D変換停止 S12AD1.ADCSR.BIT.ADST=0; //A/D変換停止 S12AD0.ADCER.BIT.SHBYP=1; //サンプル&ホールド回路を使用しない S12AD1.ADCER.BIT.SHBYP=1; //サンプル&ホールド回路を使用しない S12AD0.ADANS.BIT.CH=2; //AN002をA/D変換 S12AD1.ADANS.BIT.CH=3; //AN103をA/D変換 S12AD0.ADCSR.BIT.CKS=3; //変換クロックを96MHzに設定 S12AD1.ADCSR.BIT.CKS=3; //変換クロックを96MHzに設定 S12AD0.ADCSR.BIT.ADCS=0; //シングルモード S12AD1.ADCSR.BIT.ADCS=0; //シングルモード S12AD1.ADCSR.BIT.ADST=1; //A/D変換開始 while(S12AD1.ADCSR.BIT.ADST==1);//A/D変換が終わるまで待つ SYSTEM.MSTPCRA.BIT.MSTPA9=0; MTU.TSTRA.BIT.CST0=0; //カウント停止 MTU0.TCR.BIT.CCLR=2; MTU0.TCR.BIT.TPSC=0; //PWM周期を96kHzに設定 MTU0.TMDR.BIT.MD=3; MTU0.TIORH.BIT.IOA=5; MTU0.TIORL.BIT.IOC=5; MTU0.TGRB=1500; MTU0.TGRA=0; //コンペアマッチの値を0に設定 MTU0.TGRC=0; MTU.TSTRA.BIT.CST0=1; //カウントスタート PORT3.ICR.BYTE = 0x0f; MTU.TSTRA.BIT.CST1=0; //カウント停止 MTU.TSTRA.BIT.CST2=0; MTU1.TMDR.BIT.MD=4; //位相計数モードに設定 MTU2.TMDR.BIT.MD=4; MTU.TSTRA.BIT.CST1=1; //カウント開始 MTU.TSTRA.BIT.CST2=1; fld_init_fcu_ram(); (void)fld_init_pclk_notification(15); //マップ用 (void)fld_init_pclk_notification(14); //ログ用 (void)fld_init_pclk_notification(13); //ログ用 (void)fld_init_pclk_notification(12); //ログ用 (void)fld_init_pclk_notification(11); //ログ用 (void)fld_init_pclk_notification(0); //パラメータ用 (void)fld_init_pclk_notification(1); //パラメータ用 (void)fld_init_pclk_notification(2); //パラメータ用 (void)fld_init_pclk_notification(3); //パラメータ用 (void)fld_init_pclk_notification(4); //パラメータ用 (void)fld_init_pclk_notification(5); //パラメータ用 (void)fld_init_pclk_notification(6); //センサ値保持用 }