Kobayashi Akihiro / ActiveCaster

Dependents:   ActiveCaster_ ActiveCaster_2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers phaseCounterPeach.cpp Source File

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