/********************************************************** cmttest1.c 2002.05.26 RIKIYA SH2_7045F CMT0を使って1mS単位の時間稼ぎ関数wait()を作る。 main()関数では、PD16〜PD23BITを1秒ごとにカウントアップ。 /*********************************************************/ #include "sh7040s.h" void boot(void); void __main(void); int main(void); void sectionInit(void); void wait(unsigned short); /* __main(ダミー) *****************************************/ void __main(void){ } /*CPU初期化**********************************************/ void boot(void){ /* IOポート設定 */ PFC.PACRH.WORD = 0x0000; /* PA23〜16 */ PFC.PACRL1.WORD = 0x0000; /* PA15〜8 */ PFC.PACRL2.WORD = 0x0145; /* PA7,6,5,2 TXD0,RXD0 */ PFC.PBCR1.WORD = 0x0000; /* PB9,PB8 */ PFC.PBCR2.WORD = 0x0000; /* PB7〜PB0 */ PFC.PCCR.WORD = 0x0000; /* PC15〜PC0 */ PFC.PDCRH1.WORD = 0x0000; /* PD31〜PD24 */ PFC.PDCRH2.WORD = 0x0000; /* PD23〜PD16 */ PFC.PDCRL.WORD = 0x0000; /* PD15〜PD0 */ PFC.PECR1.WORD = 0x0000; /* PE15〜PE8 */ PFC.PECR2.WORD = 0x0000; /* PE7〜PE0 */ PFC.PAIORH.WORD = 0x00ff; /* [OUT]PA23〜16 [IN]-- */ PFC.PAIORL.WORD = 0xffff; /* [OUT]PA15〜0 [IN]-- */ PFC.PBIOR.WORD = 0x03ff; /* [OUT]PB7 〜0 [IN]-- */ PFC.PCIOR.WORD = 0xffff; /* [OUT]PC15〜0 [IN]-- */ PFC.PDIORH.WORD = 0x00ff; /* [OUT]PD23〜16 [IN]PD31〜24 */ PFC.PDIORL.WORD = 0xffff; /* [OUT]PD15〜0 [IN]-- */ PFC.PEIOR.WORD = 0xffff; /* [OUT]PE15〜0 [IN]-- */ CMT0.CMCSR.BIT.CKS = 0; /* CMT0 CLOCK/8 */ CMT0.CMCOR = 3579 ; /* 1mS/0.279uS = 3579 */ CMT.CMSTR.BIT.STR0 = 0; /* CMT0 STOP */ sectionInit(); /* メモリ初期化 */ main(); /* メイン関数呼び出し */ } /* メイン関数********************************************/ int main(void){ unsigned char i=0; for(;;){ i++; PD.DR.BYTE.HL = i; /* PD16〜23 カウントアップ */ wait(1000); /* 1000mS待つ */ } return 0; } /* CMT時間稼ぎ******************************************** 引数のmsecには、1/1000秒単位で待機時間を指定する。 unsigned short型、0xffff(65535)まで。 **********************************************************/ void wait(unsigned short msec){ unsigned short i; CMT.CMSTR.BIT.STR0 = 1; /* CMT0 START */ for(i=0;i