RX62NのタイマMTUを使いusオーダーで時間待ちするプログラムです。割り込みを使用しないバージョンです。
- #include "iodefine.h"
- #define PCLK 48 //PCLK = 48MHz
- unsigned int usecCount;
- /*
- * タイマの初期化
- * 使用タイマ MTU10
- * 割込みは使用しないフラグは使用する。
- */
- void initTimer(void)
- {
- MSTP(MTU10) = 0;
- MTU10.TCR.BIT.TPSC = 0x02; // PCLK/16でカウント
- MTU10.TCNT = 0; //フリーランカウンタ
- usecCount = PCLK*1000000L/1000000L/16L; //1usecのカウント値
- }
- /*
- * タイマスタート
- */
- void startMTU(void)
- {
- MTU10.TCNT = 0;
- MTUB.TSTR.BIT.CST4 = 1; /* Start MTU2_8 */
- }
- /*
- * タイマストップ
- */
- void stopMTU(void)
- {
- MTUB.TSTR.BIT.CST4 = 0; /* Stop MTU2_8 */
- }
- /*
- * usecオーダーでの時間待ち
- */
- void delay_us(unsigned int us)
- {
- unsigned int waitCount;
- waitCount = us * usecCount; //カウンタの値がいくつになれば指定した時間が来たか
- //16bitなのでオーバーフローに注意
- startMTU();
- while(MTU10.TCNT <waitCount);
- stopMTU();
- }
- /*
- * msecオーダーでの時間待ち
- */
- void delay_ms(unsigned int ms)
- {
- unsigned int i;
- for(i=0;i<ms;i++) {
- delay_us(1000);
- }
- }