Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: ActiveCaster_ ActiveCaster_2
phaseCounterPeach.cpp
00001 #include "phaseCounterPeach.h" 00002 00003 PhaseCounter::PhaseCounter(int xch) 00004 { 00005 g_ch = xch; 00006 ch_available = false; 00007 pre_rawcount = ENC_INIT_VAL; 00008 encount = 0; 00009 } 00010 00011 int PhaseCounter::getCount(){ 00012 unsigned short int rawcount; 00013 int diff; 00014 00015 if(ch_available){ 00016 switch(g_ch){ 00017 case 1: 00018 rawcount = MTU2.TCNT_1; 00019 break; 00020 case 2: 00021 rawcount = MTU2.TCNT_2; 00022 break; 00023 default: 00024 rawcount = 0; 00025 break; 00026 } 00027 00028 diff = (int)rawcount - (int)pre_rawcount; // 差分を計算 00029 if(diff > ENC_INIT_VAL){ // マイナス方向にゼロ点回ったとき 00030 diff = -(int)pre_rawcount - (0xFFFF - (int)rawcount); 00031 }else if(diff < -ENC_INIT_VAL){ // プラス方向にゼロ点回ったとき 00032 diff = (int)rawcount + (0xFFFF - (int)pre_rawcount); 00033 } 00034 // 差分をインクリメントする 00035 encount += diff; 00036 pre_rawcount = rawcount; 00037 return encount; 00038 } 00039 00040 return 0; 00041 } 00042 00043 void PhaseCounter::setCount(int ch, int num){ 00044 00045 } 00046 00047 00048 void PhaseCounter::init(){ 00049 CPG.STBCR3 &= ~0x08; //マルチファンクションタイマパルスユニット2へクロックを供給(これをしていないとレジスタを書き換えられない) 00050 /***************ピンの設定***************/ 00051 if(g_ch == 1){ 00052 /***** ポートの初期化 *****/ 00053 GPIO.PIBC1 &= ~0x0401; // ポート入力バッファ制御レジスタ 入力バッファ禁止 00054 GPIO.PBDC1 &= ~0x0401; // ポート双方向制御レジスタ 双方向モードを禁止 00055 GPIO.PM1 |= 0x0401; // ポートモードレジスタ 入力モード 00056 GPIO.PMC1 &= ~0x0401; // ポートモード制御レジスタ ポートモード 00057 GPIO.PIPC1 &= ~0x0401; // ポート IP 制御レジスタ 入出力はPMn.PMnmビットによって制御されます 00058 00059 /***** 入力機能のポート設定 *****/ 00060 GPIO.PBDC1 &= ~0x0401; // ポート双方向制御レジスタ 双方向モードを禁止 00061 00062 /***** ポート設定 *****/ 00063 GPIO.PFC1 |= 0x0400; 00064 GPIO.PFCE1 |= 0x0401; 00065 //GPIO.PFCAE1 &= !0xC03; 00066 00067 GPIO.PIPC1 |= 0x0401; // ポート IP 制御レジスタ 入出力はPMn.PMnmビットによって制御されます 00068 GPIO.PMC1 |= 0x0401; // ポートモード制御レジスタ ポートモード 00069 }else if(g_ch == 2){ 00070 /***** ポートの初期化 *****/ 00071 GPIO.PIBC1 &= ~0x0802; // ポート入力バッファ制御レジスタ 入力バッファ禁止 00072 GPIO.PBDC1 &= ~0x0802; // ポート双方向制御レジスタ 双方向モードを禁止 00073 GPIO.PM1 |= 0x0802; // ポートモードレジスタ 入力モード 00074 GPIO.PMC1 &= ~0x0802; // ポートモード制御レジスタ ポートモード 00075 GPIO.PIPC1 &= ~0x0802; // ポート IP 制御レジスタ 入出力はPMn.PMnmビットによって制御されます 00076 00077 /***** 入力機能のポート設定 *****/ 00078 GPIO.PBDC1 &= ~0x0802; // ポート双方向制御レジスタ 双方向モードを禁止 00079 00080 /***** ポート設定 *****/ 00081 GPIO.PFC1 |= 0x0800; 00082 GPIO.PFCE1 |= 0x0802; 00083 //GPIO.PFCAE1 &= !0xC03; 00084 00085 GPIO.PIPC1 |= 0x0802; // ポート IP 制御レジスタ 入出力はPMn.PMnmビットによって制御されます 00086 GPIO.PMC1 |= 0x0802; // ポートモード制御レジスタ ポートモード 00087 } 00088 00089 /***************MTU1 (MTCLKA, MTCLKB)の設定***************/ 00090 if(g_ch == 1){ 00091 MTU2.TSTR &= ~0x02; //MTU1.TCNTのカウント停止 00092 MTU2.TCR_1 = 0; //よくわからないけど,ここはゼロにしておけばOK? 00093 MTU2.TMDR_1 |= 0x04; //位相計数モード1 4逓倍のカウント読み取り 00094 MTU2.TCNT_1 = ENC_INIT_VAL; //カウントを初期化 00095 MTU2.TIOR_1 |= 0xAA; //両エッジでインプットキャプチャ 00096 MTU2.TSTR |= 0x02; //MTU1.TCNTのカウント開始 00097 00098 ch_available = true; 00099 } 00100 00101 /***************MTU2 (MTCLKC, MTCLKD)の設定***************/ 00102 if(g_ch == 2){ 00103 MTU2.TSTR &= ~0x04; //MTU1.TCNTのカウント停止 00104 MTU2.TCR_2 = 0; //よくわからないけど,ここはゼロにしておけばOK? 00105 MTU2.TMDR_2 |= 0x04; //位相計数モード1 4逓倍のカウント読み取り 00106 MTU2.TCNT_2 = ENC_INIT_VAL; //カウントを初期化 00107 MTU2.TIOR_2 |= 0xAA; //両エッジでインプットキャプチャ 00108 MTU2.TSTR |= 0x04; //MTU2.TCNTのカウント開始 00109 00110 ch_available = true; 00111 } 00112 } 00113
Generated on Tue Aug 30 2022 15:49:49 by
1.7.2