作るって言っても人様のコードをもらって来ただけだ。
1 2 3 4 5 6 7 8 9 |
#define SYS_CLK_FREQ 8000000 void delay_m(unsigned int msec){ //volatile unsigned int start = _CP0_GET_COUNT(); unsigned int start = _CP0_GET_COUNT(); while( _CP0_GET_COUNT() - start < ( msec * SYS_CLK_FREQ / 2 / 1000 ) ) Nop(); return; } |
_CP0_GET_COUNT() はコア・タイマーの値を返すらしい。
差を調べてある値になるまで待つというコードになっている。
msecにはミリ秒単位の待ち時間を渡す。
volatile で宣言しないと、という記述を見かけたが、問題無いようだ。
なんか、後で見たら、いろんな種類のPICについてそれぞれdelayの話題を書いてる。
Tweet