#include <7125.h> /*-------------PWM用定義---------------*/ #define cycle 65536-25*(2500) unsigned int pwm_flg = 1; unsigned int TGRE_1 = cycle+25*1000, TGRE_2 = cycle+25*1000, TGRF_1 = cycle+25*1000, TGRF_2 = cycle+25*1000; /*-------------------------------------*/ void Init(void)//初期化関数 { /*--------------ポートA-CR---------------*/ //ポートAの役割を設定 //共通項 000-汎用入出力 PFC.PACRL1.BIT.PA0MD = 0; //PA0: 001-RXD0入力 111-POE0入力 PFC.PACRL1.BIT.PA1MD = 0; //PA1: 001-TXD0出力 111-POE1入力 PFC.PACRL1.BIT.PA2MD = 0; //PA2: 001-SCK0入出力 011-IRQ0入力 PFC.PACRL1.BIT.PA3MD = 1; //PA3: 001-RXD1入力 111-IRQ1入力 PFC.PACRL2.BIT.PA4MD = 1; //PA4: 001-TXD1出力 111-IRQ2入力 PFC.PACRL2.BIT.PA5MD = 0; //PA5: 001-SCK1入出力 111-IRQ3入力 PFC.PACRL2.BIT.PA6MD = 0; //PA6: 001-TCKLA入力 PFC.PACRL2.BIT.PA7MD = 0; //PA7: 001-TCKLB入力 110-SCK2入出力 PFC.PACRL3.BIT.PA8MD = 0; //PA8: 001-TCLKC入力 110-RXD2入力 PFC.PACRL3.BIT.PA9MD = 0; //PA9: 001-TCLKD入力 110-TXD2出力 111-POE8入力 PFC.PACRL3.BIT.PA10MD = 0; //PA10: 110-RXD0入力 PFC.PACRL3.BIT.PA11MD = 0; //PA11: 010-ADTRG入力 110-TXD0出力 PFC.PACRL4.BIT.PA12MD = 0; //PA12: 110-SCK0入出力 PFC.PACRL4.BIT.PA13MD = 0; //PA13: 110-SCK1入出力 PFC.PACRL4.BIT.PA14MD = 0; //PA14: 110-RXD1入力 PFC.PACRL4.BIT.PA15MD = 0; //PA15: 110-TXD1出力 /*----------------------------------------*/ /*--------------ポートA-IOR---------------*/ //汎用入出力の場合、入力か出力かを決める 1→出力 0→入力 //初期値は0 汎用入出力として使っている場合のみコメントアウトしない //PFC.PAIORL.BIT.B0 = 1; //PFC.PAIORL.BIT.B1 = 1; //PFC.PAIORL.BIT.B2 = 1; //PFC.PAIORL.BIT.B3 = 1; //PFC.PAIORL.BIT.B4 = 1; //PFC.PAIORL.BIT.B5 = 1; //PFC.PAIORL.BIT.B6 = 1; //PFC.PAIORL.BIT.B7 = 1; //PFC.PAIORL.BIT.B8 = 1; //PWM用ポート PFC.PAIORL.BIT.B9 = 1; //MTU25.TGRU PFC.PAIORL.BIT.B10 = 1; //MTU25.TGRV PFC.PAIORL.BIT.B11 = 1; //MTU25.TGRW PFC.PAIORL.BIT.B12 = 1; //TGRE_1 PFC.PAIORL.BIT.B13 = 1; //TGRE_2 PFC.PAIORL.BIT.B14 = 1; //TGRF_1 PFC.PAIORL.BIT.B15 = 1; //TGRF_2 /*----------------------------------------*/ /*--------------ポートB-CR---------------*/ PFC.PBCRL1.BIT.PB1MD = 0;//PB1: 011-TIC5W入力 PFC.PBCRL1.BIT.PB2MD = 0;//PB2: 001-IRQ0入力 010-POE0入力 PFC.PBCRL1.BIT.PB3MD = 0;//PB3: 001-IRQ1入力 010-POE1入力 011-TIC5V入力 PFC.PBCRL2.BIT.PB5MD = 0;//PB5: 001-IRQ3入力 011-TIC5U入力 PFC.PBCRH1.BIT.PB16MD = 0;//PB16: 001-POE3入力 /*---------------------------------------*/ /*--------------ポートB-IOR---------------*/ //ポートBの役割を決定 //共通 0-汎用入出力 //PFC.PBIORL.BIT.B1 = 1; //PFC.PBIORL.BIT.B2 = 0; //PFC.PBIORL.BIT.B3 = 1; //PFC.PBIORL.BIT.B5 = 1; //PFC.PBIORH.BIT.B16 = 0; /*----------------------------------------*/ /*--------------ポートE-PFC---------------*/ //ポートEの役割を決定 //共通 0-汎用入出力 PFC.PECRL1.BIT.PE0MD = 1;// 01-TIOC0A入出力 PFC.PECRL1.BIT.PE1MD = 1;//001-TIOC0B入出力 110-RXD0入力 PFC.PECRL1.BIT.PE2MD = 1;//001-TIOC0C入出力 110-TXD0出力 PFC.PECRL1.BIT.PE3MD = 1;//001-TIOC0D入出力 110-SCK0入出力 PFC.PECRL2.BIT.PE4MD = 1;//001-TIOC1A入出力 110-RXD1入力 PFC.PECRL2.BIT.PE5MD = 1;//001-TIOC1B入出力 110-TXD1出力 PFC.PECRL2.BIT.PE6MD = 1;//001-TIOC2A入出力 110-SCK1入出力 PFC.PECRL2.BIT.PE7MD = 1;//001-TIOC2B入出力 110-RXD1入力 PFC.PECRL3.BIT.PE8MD = 1;//001-TIOC3A入出力 PFC.PECRL3.BIT.PE9MD = 1;//001-TIOC3B入出力 PFC.PECRL3.BIT.PE10MD = 1;//001-TIOC3C入出力 PFC.PECRL3.BIT.PE11MD = 1;//001-TIOC3D入出力 PFC.PECRL4.BIT.PE12MD = 1;//001-TIOC4A入出力 PFC.PECRL4.BIT.PE13MD = 1;// 01-TIOC4B入出力 10-MRES入力 PFC.PECRL4.BIT.PE14MD = 1;//001-TIOC4C入出力 PFC.PECRL4.BIT.PE15MD = 1;//001-TIOC4D入出力 011-IRQOUT出力 /*----------------------------------------*/ /*--------------ポートE-IOR---------------*/ //汎用入出力とPWMの場合、入力か出力かを決める 1→出力 0→入力 //初期値は0 汎用入出力として使っている場合のみコメントアウトしない PFC.PEIORL.BIT.B0 = 1; PFC.PEIORL.BIT.B1 = 1; PFC.PEIORL.BIT.B2 = 1; PFC.PEIORL.BIT.B3 = 1; PFC.PEIORL.BIT.B4 = 1; PFC.PEIORL.BIT.B5 = 1; PFC.PEIORL.BIT.B6 = 1; PFC.PEIORL.BIT.B7 = 1; PFC.PEIORL.BIT.B8 = 1; PFC.PEIORL.BIT.B9 = 1; PFC.PEIORL.BIT.B10 = 1; PFC.PEIORL.BIT.B11 = 1; PFC.PEIORL.BIT.B12 = 1; PFC.PEIORL.BIT.B13 = 1; PFC.PEIORL.BIT.B14 = 1; PFC.PEIORL.BIT.B15 = 1; /*----------------------------------------*/ STB.CR4.BIT._MTU2 = 0; //MTU2スタンバイ解除 /*------------------PWM0------------------*/ MTU2.TSTR.BIT.CST0 = 0; //MTU20カウンタ停止 MTU20.TIER.BIT.TCIEV = 1; //オーバーフロー,TGRE,TGRF割り込み許可 MTU20.TIER2.BIT.TGIEE = 1; //TGREとのコンペマッチで割り込み許可 MTU20.TIER2.BIT.TGIEF = 1; //TGRFとのコンペマッチで割り込み許可 MTU20.TCR.BIT.TPSC = 0; //25Mhzで動作 MTU20.TIOR.BIT.IOA = 5; //初期値1コンペアマッチで0 MTU20.TIOR.BIT.IOB = 5; //初期値1コンペアマッチで0 MTU20.TIOR.BIT.IOC = 5; //初期値1コンペアマッチで0 MTU20.TIOR.BIT.IOD = 5; //初期値1コンペアマッチで0 MTU20.TCNT = cycle; //周期時間経過でオーバーフローするように MTU20.TGRA = cycle+25*1000; //ON時間1.0ms MTU20.TGRB = cycle+25*1000; //ON時間1.0ms MTU20.TGRC = cycle+25*1000; //ON時間1.0ms MTU20.TGRD = cycle+25*1000; //ON時間1.0ms MTU20.TGRE = cycle+25*1000; //ON時間1.0ms MTU20.TGRF = cycle+25*1000; //ON時間1.0ms INTC.IPRD.BIT._MTU20C = 13; /*----------------------------------------*/ /*------------------PWM1------------------*/ MTU2.TSTR.BIT.CST1 = 0; //MTU21カウンタ停止 MTU21.TCR.BIT.TPSC = 0; //25Mhzで動作 MTU21.TIOR.BIT.IOA = 5; //初期値1コンペアマッチで0 MTU21.TIOR.BIT.IOB = 5; //初期値1コンペアマッチで0 MTU21.TCNT = cycle; //便宜上のPWM0とのカウンタ値統一 MTU21.TGRA = cycle+25*1000; //ON時間1.0ms MTU21.TGRB = cycle+25*1000; //ON時間1.0ms /*----------------------------------------*/ /*------------------PWM2------------------*/ MTU2.TSTR.BIT.CST2 = 0; //MTU22カウンタ停止 MTU22.TCR.BIT.TPSC = 0; //25Mhzで動作 MTU22.TIOR.BIT.IOA = 5; //初期値1コンペアマッチで0 MTU22.TIOR.BIT.IOB = 5; //初期値1コンペアマッチで0 MTU22.TCNT = cycle; //便宜上のPWM0とのカウンタ値統一 MTU22.TGRA = cycle+25*1000; //ON時間1.0ms MTU22.TGRB = cycle+25*1000; //ON時間1.0ms /*----------------------------------------*/ /*------------------PWM3------------------*/ MTU2.TSTR.BIT.CST3 = 0; //MTU23カウンタ停止 MTU23.TCR.BIT.TPSC = 0; //25Mhzで動作 MTU23.TIOR.BIT.IOA = 5; //初期値1コンペアマッチで0 MTU2.TOER.BIT.OE3B = 1; //FTIOC3BのMTU2出力許可 0-禁止 1-許可 MTU23.TIOR.BIT.IOB = 5; //初期値1コンペアマッチで0 MTU23.TIOR.BIT.IOC = 5; //初期値1コンペアマッチで0 MTU2.TOER.BIT.OE3D = 1; //FTIOC3DのMTU2出力許可 0-禁止 1-許可 MTU23.TIOR.BIT.IOD = 5; //初期値1コンペアマッチで0 MTU23.TCNT = cycle; //便宜上のPWM0とのカウンタ値統一 MTU23.TGRA = cycle+25*1000; //ON時間1.0ms MTU23.TGRB = cycle+25*1000; //ON時間1.0ms MTU23.TGRC = cycle+25*1000; //ON時間1.0ms MTU23.TGRD = cycle+25*1000; //ON時間1.0ms /*----------------------------------------*/ /*------------------PWM4------------------*/ MTU2.TSTR.BIT.CST4 = 0; //MTU24カウンタ停止 MTU24.TCR.BIT.TPSC = 0; //25Mhzで動作 MTU2.TOER.BIT.OE4A = 1; //FTIOC4AのMTU2出力許可 0-禁止 1-許可 MTU24.TIOR.BIT.IOA = 5; //初期値1コンペアマッチで0 MTU2.TOER.BIT.OE4B = 1; //FTIOC4BのMTU2出力許可 0-禁止 1-許可 MTU24.TIOR.BIT.IOB = 5; //初期値1コンペアマッチで0 MTU2.TOER.BIT.OE4C = 1; //FTIOC4CのMTU2出力許可 0-禁止 1-許可 MTU24.TIOR.BIT.IOC = 5; //初期値1コンペアマッチで0 MTU2.TOER.BIT.OE4D = 1; //FTIOC4DのMTU2出力許可 0-禁止 1-許可 MTU24.TIOR.BIT.IOD = 5; //初期値1コンペアマッチで0 MTU24.TCNT = cycle; //便宜上のPWM0とのカウンタ値統一 MTU24.TGRA = cycle+25*1000; //ON時間1.0ms MTU24.TGRB = cycle+25*1000; //ON時間1.0ms MTU24.TGRD = cycle+25*1000; //ON時間1.0ms MTU24.TGRC = cycle+25*1000; //ON時間1.0ms /*----------------------------------------*/ /*------------------PWM5------------------*/ MTU25.TSTR.BYTE = 0; //MTU25全カウンタ停止 MTU25.TCRU.BIT.TPSC = 0; //25Mhzで動作 MTU25.TIORU.BIT.IOC = 0; //コンペアマッチ動作 MTU25.TCNTU = cycle; //便宜上のPWM0とのカウンタ値統一 MTU25.TIER.BIT.TGIEU = 1; //TGRU割り込み許可 MTU25.TCRV.BIT.TPSC = 0; //25Mhzで動作 MTU25.TIORV.BIT.IOC = 0; //コンペアマッチ動作 MTU25.TCNTV = cycle; //便宜上のPWM0とのカウンタ値統一 MTU25.TIER.BIT.TGIEV = 1; //TGRV割り込み許可 MTU25.TCRW.BIT.TPSC = 0; //25Mhzで動作 MTU25.TIORW.BIT.IOC = 0; //コンペアマッチ動作 MTU25.TCNTW = cycle; //便宜上のPWM0とのカウンタ値統一 MTU25.TIER.BIT.TGIEW = 1; //TGRW割り込み許可 MTU25.TGRU = cycle+25*1000; //ON時間1.0ms MTU25.TGRV = cycle+25*1000; //ON時間1.0ms MTU25.TGRW = cycle+25*1000; //ON時間1.0ms INTC.IPRF.BIT._MTU25 = 13; /*----------------------------------------*/ MTU25.TSTR.BYTE = 0x07; //MTU25全カウンタスタート MTU2.TSTR.BYTE = 0xc7; SetSRReg(0);//すべての割り込みを実行可能に } void int_tci2v0(void) { MTU2.TSTR.BYTE = 0; //MTU2全カウンタ停止 MTU25.TSTR.BYTE = 0; //MTU25全カウンタ停止 //周期時間後にオーバーフローするようカウンタの値を設定 + カウンタの値を統一 MTU20.TCNT = cycle; // MTU21.TCNT = cycle; // MTU22.TCNT = cycle; // MTU23.TCNT = cycle; // MTU24.TCNT = cycle; // MTU25.TCNTU = cycle; // MTU25.TCNTV = cycle; // MTU25.TCNTW = cycle; // if(pwm_flg == 0) { MTU20.TGRE = TGRE_2; MTU20.TGRF = TGRF_2; PA.DRL.BYTE.H |= 0xae;//PA15,13,11〜9をhighに pwm_flg = 1; } else { MTU20.TGRE = TGRE_1; MTU20.TGRF = TGRF_1; PA.DRL.BYTE.H |= 0x5e;//PA14,12,11〜9をhighに pwm_flg = 0; } MTU20.TIOR.WORD = 0x5555; //IOB,A,D,C = 5 初期値1、コンペアマッチで0 MTU21.TIOR.BYTE = 0x55; //IOB,A = 5 初期値1、コンペアマッチで0 MTU22.TIOR.BYTE = 0x55; //IOB,A = 5 初期値1、コンペアマッチで0 MTU23.TIOR.WORD = 0x5555; //IOB,A,D,C = 5 初期値1、コンペアマッチで0 MTU24.TIOR.WORD = 0x5555; //IOB,A,D,C = 5 初期値1、コンペアマッチで0 MTU25.TSTR.BYTE = 0x07; //MTU25全カウンタスタート MTU2.TSTR.BYTE = 0xc7; //MTU20カウンタスタート MTU20.TSR.BIT.TCFV = 0; //フラグ回収 } void int_tgi2u5(void) { PA.DRL.BIT.B9 = 0; MTU25.TSR.BIT.CMFU = 0; //フラグ回収 } void int_tgi2v5(void) { PA.DRL.BIT.B10 = 0; MTU25.TSR.BIT.CMFV = 0; //フラグ回収 } void int_tgi2w5(void) { PA.DRL.BIT.B11 = 0; MTU25.TSR.BIT.CMFW = 0; //フラグ回収 } void int_tci2e0(void) { PA.DRL.BYTE.H &= 0xcf; //PA12,13をlowに MTU20.TSR2.BIT.TGFE = 0; //フラグ回収 } void int_tci2f0(void) { PA.DRL.BYTE.H &= 0x3f; //PA14,15をlowに MTU20.TSR2.BIT.TGFF = 0; //フラグ回収 } int main(void) { Init();//初期化 while(1); }