0.04sec で満了するので、250回して1secタイマー作ってみました。
でもこれだと、満了した時すぐに次のタイマーが開始されるので、
if(T_TISRA.BIT.IMF == 0x01) 文の判定タイミングとずれが生じてしまう。
オシロスコープを使って、そのズレの検証を行ってた。
- そーす
int main(void)
{
serial_init(SERIAL_DEFAULT_DEVICE);
puts("-----------------Led1 and 2 is Light start!!\n");
/* p4ddr(P46 and P47) output setting 0x0c = 1100 0000 */
/* p4dr (P46 and P47) output 0x0c = 1100 0000 */
P4DDR.BYTE = 0;
P4DDR.BIT.B6 = ENABLE;
P4DDR.BIT.B7 = ENABLE;
P4DR.BYTE = DISABLE;
P4DR.BIT.B6 = LED_ON;
P4DR.BIT.B7 = LED_OFF;
/**
* カウンター
*/
int T_16TCR0_COUNTER = 0;
int secCount = 0;
/**
* カウントクロック設定 φ/8
*/
T_16TCR0.BIT.TPSC = 0x03;
//T_16TCR1.BIT.TPSC = 0x03;
/**
* カウンタクリア要因の選択
*/
T_16TCR0.BIT.CCLR = 0x01; // GRA
//T_16TCR1.BIT.CCLR = 0x01; // GRA
/**
* アウトプットコンペアレジスタの選択
*/
T_TIOR0.BIT.IOA = 0x02; // GRA コンペアマッチ 1出力
//T_TIOR1.BIT.IOA = 0x02; // GRA コンペアマッチ 1出力
/**
* IMF フラグ割込 要求許可
T_TISRA.BIT.IMIE = 0x01; //割込 要求許可
T_TISRB.BIT.IMIE = 0x01; //割込 要求許可
*/
/**
* 周期設定
*/
T_GRA0_H.BYTE = 0x27; // 10000
T_GRA0_L.BYTE = 0x10;
//T_GRA1_H.BYTE = 0x00; // 250
//T_GRA1_H.BYTE = 0xFA;
/**
* TIMER START
*/
T_TSTR.BYTE = 0x01; // 16TCNT0 Start
while(1)
{
puts("T_16TCNT0:");
putxval(T_16TCNT0_H.BYTE,2);
putxval(T_16TCNT0_L.BYTE,2);
puts("\n");
if(T_TISRA.BIT.IMF == 0x01)
{
T_16TCR0_COUNTER++;
puts("T_16TCR0_COUNTER:");
putxval(T_16TCR0_COUNTER,3);
puts("\n");
if(T_16TCR0_COUNTER >= 25)
{
P4DR.BIT.B6 =~ P4DR.BIT.B6;
P4DR.BIT.B7 =~ P4DR.BIT.B7;
T_16TCR0_COUNTER = 0;
secCount++;
puts("----------------secCount:");
putxval(secCount,3);
puts("\n");
if(secCount > 10)
{
break;
}
}
}
}
return 0;
}
- オシロスコープ計測
右上のdx:が1.018secになっている。交差0.98%なのでこれくらいならOKかな。
次は、タイマー割り込みをCPUに割り込みを行い、
割り込みハンドラを使ってオシロスコープで計測してみる。
交差はもっと正確なのか?
- GitHub
sto@sto-PC ~/src
$ git commit -m "LED 1sec Lighting"
[master a66b547] LED 1sec Lighting
2 files changed, 247 insertions(+), 73 deletions(-)
rewrite 02-1/bootload/main.c (81%)
sto@sto-PC ~/src
$ git push origin master:master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 1.97 KiB | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/satoshishimizu/mae_h8_3069f.git
4f11c2d..a66b547 master -> master
H8 タイマー制御(OSなし)の事をブログ更新してみた~
http://t.co/8EhA7xs3L6
— sto_121 (@sto1211) 2015, 8月 31