/************************************* pwmtest2.c 2002.06.09 RIKIYA SH2_7045F PWM MODE 2による12相PWM出力 TIOC0A,0B,0C,0D TIOC1A,1B TIOC2A,2B TIOC3A,3C TIOC4A,4C /*************************************/ #include "sh7040s.h" void boot(void); void __main(void); int main(void); void sectionInit(void); /* __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 = 0x5555; /* TIOC4D,4C,4B,4A,3D,3C,3B,3A */ PFC.PECR2.WORD = 0x5555; /* TIOC2B,2A,1B,1A,0D,0C,0B,0A */ 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]-- */ /* タイマシンクロ設定 */ MTU.TSYR.BYTE = 0x47; /* TCNT0〜3 同期クリア*/ /* MTU0 TIOC0A PWM MODE 2 設定 */ MTU0.TCR.BYTE = 0x63; /* TCNT SYNC CLEAR,CLOCK/64 */ MTU0.TGRA = 807; /* パルス幅2.23uS x 807 = 1.8mS */ MTU0.TGRB = 671; /* パルス幅2.23uS x 671 = 1.5mS */ MTU0.TIOR.BYTE.H = 0x55; /* 初期 1 , TGR0B → 0 , TGR0A → 0 */ MTU0.TMDR.BYTE = 0xC3; /* PWM MODE2 */ /* MTU0 TIOC0C PWM MODE 2 設定 */ MTU0.TGRC = 898; /* パルス幅2.23uS x 898 = 2.0mS */ MTU0.TGRD = 807; /* パルス幅2.23uS x 807 = 1.8mS */ MTU0.TIOR.BYTE.L = 0x55; /* 初期 1 , TGR0D → 0 , TGR0C → 0 */ /* MTU1 TIOC1A PWM MODE 2 設定 */ MTU1.TCR.BYTE = 0x63; /* TCNT SYNC CLEAR,CLOCK/64 */ MTU1.TGRA = 537; /* パルス幅2.23uS x 537 = 1.2mS */ MTU1.TGRB = 671; /* パルス幅2.23uS x 671 = 1.5mS */ MTU1.TIOR.BYTE = 0x55; /* 初期 1 , TGR1B → 0 , TGR1A → 0 */ MTU1.TMDR.BYTE = 0xC3; /* PWM MODE2 */ /* MTU2 TIOC2A PWM MODE 2 設定 */ MTU2.TCR.BYTE = 0x63; /* TCNT SYNC CLEAR,CLOCK/64 */ MTU2.TGRA = 807; /* パルス幅2.23uS x 807 = 1.8mS */ MTU2.TGRB = 895; /* パルス幅2.23uS x 895 = 2.0mS */ MTU2.TIOR.BYTE = 0x55; /* 初期 1 , TGR2B → 0 , TGR2A → 0 */ MTU2.TMDR.BYTE = 0xC3; /* PWM MODE2 */ /* MTU3 TIOC3A PWM MODE 1 設定 */ MTU3.TCR.BYTE = 0x23; /* TGR3A TCNT CLEAR,CLOCK/64 */ MTU3.TGRA = 8948; /* 周期2.23uS x 8948 = 20mS */ MTU3.TGRB = 671; /* パルス幅2.23uS x 671 = 1.5mS */ MTU3.TIOR.BYTE.H = 0x56; /* TGR3B → 0 , TGR3A → 1 */ MTU3.TMDR.BYTE = 0xC2; /* PWM MODE1 */ /* MTU3 TIOC3C PWM MODE 1 設定 */ MTU3.TGRC = 8948; /* 周期2.23uS x 8948 = 20mS */ MTU3.TGRD = 807; /* パルス幅2.23uS x 807 = 1.8mS */ MTU3.TIOR.BYTE.L = 0x56; /* TGR3D → 0 , TGR3C → 1 */ /* MTU4 TIOC4A PWM MODE 1 設定 */ MTU4.TCR.BYTE = 0x23; /* TIOC4A TCNT CLEAR,CLOCK/64 */ MTU4.TGRA = 8948; /* 周期2.23uS x 8948 = 20mS */ MTU4.TGRB = 671; /* パルス幅2.23uS x 671 = 1.5mS */ PWM.TOER.BIT.OE4A = 1; /* TIOC4A OUTPUT ENABLE */ MTU4.TIOR.BYTE.H = 0x56; /* TGR4B → 0 , TGR4A → 1 */ MTU4.TMDR.BYTE = 0xC2; /* PWM MODE1 */ /* MTU4 TIOC4C PWM MODE 1 設定 */ MTU4.TGRC = 8948; /* 周期2.23uS x 8948 = 20mS */ MTU4.TGRD = 807; /* パルス幅2.23uS x 807 = 1.8mS */ PWM.TOER.BIT.OE4C = 1; /* TIOC4C OUTPUT ENABLE */ MTU4.TIOR.BYTE.L = 0x56; /* TGR4D → 0 , TGR4C → 1 */ /* TCNT0,1,2,3,4 START */ MTU.TSTR.BIT.CST0 = 1; /* TCNT0 START */ MTU.TSTR.BIT.CST1 = 1; /* TCNT1 START */ MTU.TSTR.BIT.CST2 = 1; /* TCNT2 START */ MTU.TSTR.BIT.CST3 = 1; /* TCNT3 START */ MTU.TSTR.BIT.CST4 = 1; /* TCNT4 START */ sectionInit(); /* メモリ初期化 */ main(); /* メイン関数呼び出し */ } /* MAIN関数 ************************/ int main(void){ while(1){ /* とりあえず何もしない */ } return 0; } /************************************/ /* セクション初期化 */ /************************************/ extern char etext, sdata, edata, bss_start, end; void sectionInit(void){ char *src; char *dst; /* 初期化データ領域 */ src = &etext; dst = &sdata; while (dst < &edata) { *dst++ = *src++; } /* 未初期化データ領域 */ for ( dst = &bss_start; dst < &end; dst++ ) { *dst = 0; } }