freescale sample code main.docx
- 文档编号:486557
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:24
- 大小:19.94KB
freescale sample code main.docx
《freescale sample code main.docx》由会员分享,可在线阅读,更多相关《freescale sample code main.docx(24页珍藏版)》请在冰点文库上搜索。
freescalesamplecodemain
/*freescalesamplecode*/
#include
#include
#include"derivative.h"/*includeperipheraldeclarations*/
/*thismacroattempttoenablewatchdogmodule*/
/*COP模块看门狗是一个递减计数器,减到0时产生一个复位中断,
可用于帮助程序从跑飞中恢复*/
#ifdefined(COP_CTRL)/*cop_ctrl是MC56F84789的COP模块的控制寄存器*/
#defineEnableWatchdog\
COP_CTRL|=(0x2);
#elifdefined(COPCTL)/*COPCTL是其他芯片的cop模块的控制寄存器*/
#defineEnableWatchdog\
COPCTL|=(0x2);
#else
#defineEnableWatchdog\
printf("nowatchdogenableprocedure\n");
#endif//#defineEnableWatchdog
/*thismacroattempttodisablewatchdogmodule*/
#ifdefined(COP_CTRL)
#defineDisableWatchdog\
COP_CTRL&=~(0x2);
#elifdefined(COPCTL)
#defineDisableWatchdog\
COPCTL&=~(0x2);
#else
#defineDisableWatchdog\
printf("nowatchdogdisableprocedure\n");
#endif//#defineDisableWatchdog
#defineSIZE10
#defineFORCE_COMMAND1
#definePWMMSAK0
#definePWMSOFTWARECTRL0
#definePWM_ADC_TRIG0
#definePWMRELOAD0
#definePWMSWAP1
//prototypes
//thecodeisdevelopedunderCW10.2andtowerboardTWR-84xx,whereMC56F84789isembeded
//TheexampledemonstratehowtodevelopcodeforPWMofMC56F84xx
//1)howtooutputcenter-alignmentcomplementarywaveform
//2)
//ForMC56F84789,thePWMAsignalsaremultiplexedwithGPIOEport.
//PWMA_0A:
GPIOE1pin69
//PWMA_0B:
GPIOE0pin68
//PWMA_1A:
GPIOE3,pin75
//PWMA_1B:
GPIOE2,pin74
//PWMA_2A:
GPIOE5,XB_IN3,pin83
//PWMA_2B:
GPIOE4,XB_IN2,pin82
//PWMA_3A:
GPIOE7,XN_IN5,PWMB_2A,pin85
//PWMA_3B:
GPIOE6,XB_IN4,PWMB_2B,pin84
//PWMA_2X:
GPIOG10,PWMB_2X,PWMA_2X,XB_IN8,SS2_B
//ForMC56F84789,thePWMBsignalsaremultiplexedwithGPIOEport.
//PWMB_0A:
GPIOG3,XB_OUT5,pin71
//PWMB_0B:
GPIOG2,XB_OUT4,pin70
//PWMB_1A:
GPIOG1,XB_OUT7,pin79
//PWMB_1B:
GPIOG0,XB_OUT6,pin78
//PWMB_2A:
GPIOE9,PWMA_FAULT0,pin73
//PWMB_2B:
GPIOE8,PWMA_FAULT1,pin72
//PWMB_3A:
GPIOG5,PWMA_FAULT3,pin81
//PWMB_3B:
GPIOG4,PWMA_FAULT3,pin80
//TheLED12isconnectedtoGPIOF6pin
//GPIOF6:
TB2:
PWMA_3X:
PWMB_3X:
XB_IN2,pin94
voidPWMA_init(void);
voidGPIOEG_init();
voidCLOCK_init(void);
voidPWM_ISR_SETTING();
voidPWM_RELOAD_ISR(void);
voidtestCrossBarFun(void);
voidtestGPIO_F6(void);
unsignedintchangeFlag;
externvoidADC_Configuration();
voidADC_ISR(void);
voidADCInit(void);
voidPWM_Trigger_ADC();
voidIRQ0Init(void);
voidIRQ0ISR(void);
voidPIT0ISR(void);
voidpit(void);
voidFORCE_ENABLE(void);
voidtestPWMFunction(void);
voiddelay(void);
voidPWMX_Function(void);
voidPWMSwapFunction(void);
voidPWM_ReloadErrorISR_SETTING(void);
voidPWM_RELOAD_Error_ISR(void);
unsignedintsample[8];
unsignedintflag=0;
intmain(void)
{
CLOCK_init();
testGPIO_F6();
//testCrossBarFun();
PWMA_init();
GPIOEG_init();
#ifPWMRELOAD
PWM_ISR_SETTING();
PWM_ReloadErrorISR_SETTING();
#endif
#ifPWM_ADC_TRIG
ADCInit();
PWM_Trigger_ADC();
#endif
PWMA_MCTRL|=0x0100;//enablethePWMmodule
PWMA_MCTRL|=0x0200;//enablethePWMmodule
PWMA_MCTRL|=0x0400;//enablethePWMmodule
PWMA_MCTRL|=0x0800;//enablethePWMmodule
//testhardwarebuttononthetowerboard
IRQ0Init();
pit();
//setSM0SEL23tobe01inbinarysothatPWMA_0Apinbecomesoftwarecontrolled
#ifPWMSWAP
PWMSwapFunction();
#endif
PWMX_Function();
#ifFORCE_COMMAND
FORCE_ENABLE();
#endif
//GPIOF_IAR|=0x80;//softwaretriggerinterruptasatest
asm(bfclr#300,sr);//enableinterrupt
//PWM_ISR_SETTING();//disablePWMrelload
//PWM_Trigger_ADC();
//ADC_Configuration();
//ISR_ENABLE;
for(;;)
{
asm(nop);
}
return(0);
}
voidPWMA_init(void)
{
//SM0initialization
PWMA_SM0INIT=0xF000;
PWMA_SM0VAL0=0x0000;
PWMA_SM0VAL1=0x1000;//themodulois256
PWMA_SM0VAL2=0xF800;//75%dutycycle
PWMA_SM0VAL3=0x800;
PWMA_SM0VAL4=0xFC00;//25%dutycycle
PWMA_SM0VAL5=0x300;
PWMA_SM0CTRL2=0x0000;//complementarymodeforPWM0AandPWM0B,IPbusclock
PWMA_SM0CTRL=0x3400;//4PWMopportunity,PWMclock=Fclk
PWMA_SM0OCTRL=0x0000;//PWMdoesnotinverter,PWMforcedtologic0infaultstate
PWMA_SM0TCTRL=0x0000;
PWMA_SM0INTEN=0x0000;//disableallinterrupt
PWMA_SM0DISMAP0=0x0000;//Disablefaultmask
PWMA_SM0DISMAP1=0x0000;//Disablefaultmask
PWMA_SM0DTCNT0=0x0000;//deadtimeissetto0
PWMA_SM0DTCNT1=0x0000;
PWMA_SM0CTRL|=0x04;
//SM1moduleinitialization
PWMA_SM1INIT=0xF000;
PWMA_SM1VAL0=0xFC00;
PWMA_SM1VAL1=0x300;//themodulois256
PWMA_SM1VAL2=0xFC00;//75%dutycycle
PWMA_SM1VAL3=0x300;
PWMA_SM1VAL4=0xFC00;//25%dutycycle
PWMA_SM1VAL5=0x300;
PWMA_SM1CTRL2=0x2200;//independentmode,IPbusclock,theINIT_SELshouldbe10,whichmeans
//thattheSM0synchronizethwSM1,PWMX_INITissetasatest
PWMA_SM1CTRL=0x3400;//4PWMopportunity,PWMclock=Fclk
PWMA_SM1OCTRL=0x0000;//PWMdoesnotinverter,PWMforcedtologic0
PWMA_SM1TCTRL=0x0000;
PWMA_SM1INTEN=0x0000;
PWMA_SM1DISMAP0=0x0000;//Disablefaultmask
PWMA_SM1DISMAP1=0x0000;//Disablefaultmask
PWMA_SM1DTCNT0=0x0000;//deadtimeissetto0
PWMA_SM1DTCNT1=0x0000;
PWMA_SM1CAPTCTRLX|=0x40;//PWMA1_Xoutput
PWMA_OUTEN|=0x0FF0;//enablePWMoutput
//PWMA_FCTRL)=0xF000;//faultlogicsetting
PWMA_SM1CTRL|=0x04;
//testPWM2_Xoutputsignal
//whentheSM2moduleofPWMAissynchronizedbySM0syncsignal,thePWM1_X/PWM2_X/PWM3_Xcanoutputarbitary
//waveformwithoutanyrestrictionbecauseofPWMA_SMxVAL1register,onlyPWMA_SM0VAL1registerisusedtocontrolthe
//PWMAfrequency
PWMA_SM2INIT=0xF000;
PWMA_SM2VAL0=0xF800;
PWMA_SM2VAL1=0x800;//themodulois256
PWMA_SM2VAL2=0xF800;//75%dutycycle
PWMA_SM2VAL3=0x800;
PWMA_SM2VAL4=0xFC00;//25%dutycycle
PWMA_SM2VAL5=0x300;
PWMA_SM2CTRL2=0x2200;//independentmode,IPbusclock,theINIT_SELshouldbe10,whichmeans
//thattheSM0synchronizetheSM2module
PWMA_SM2CTRL=0x3400;//4PWMopportunity,PWMclock=Fclk
PWMA_SM2OCTRL=0x0000;//PWMdoesnotinverter,PWMforcedtologic0
PWMA_SM2TCTRL=0x0000;
PWMA_SM2INTEN=0x0000;
PWMA_SM2DISMAP0=0x0000;//Disablefaultmask
PWMA_SM2DISMAP1=0x0000;//Disablefaultmask
PWMA_SM2DTCNT0=0x0000;//deadtimeissetto0
PWMA_SM2DTCNT1=0x0000;
PWMA_SM2CTRL|=0x04;
//PWMAglobalregistersetting
PWMA_OUTEN|=0x0FF0;//enablePWMoutput
PWMA_MASK=0x0000;//disablePWMmask
PWMA_SWCOUT=0x0000;//determinedeadtimelogic
//PWMA_FCTRL)=0xF000;//faultlogicsetting
PWMA_MCTRL|=0x0007;//mustusetheinstruction,otherwise,thecounterwilldisorder,IPOLiscleared,PWM23manipulatethedutycycle
return;
}
voidFORCE_ENABLE(void)
{
PWMA_SM0CTRL2|=0x80;//FORCEenableisset
PWMA_SM0CTRL2&=0xFFC7;
//setPWMA_SM0inindependentmode
PWMA_SM0CTRL2|=0x2000;//setPWMinindependentmode
PWMA_DTSRCSEL|=0x0A;
}
voidGPIOEG_init()
{
//GPIOEportaremultiplexedwithPWMA
GPIOE_PER|=0x00FF;//EnablePWM0A&PWM0BoutputfromGPIOE0andE1.
SIM_GPSEL=0x00;
//GPIOE8~9andGPIOG0~0~5aremultiplexedwithPWMBmodule
GPIOG_PER|=0x003F;//EnablePWM1A&PWM1BoutputfromGPIOE3andE4.
GPIOE_PER|=0x0300;
SIM_GPSGL&=0xF000;
SIM_GPSEH=0x00;
//letPWMA_2Xsignaloutput
GPIOG_PER|=0x400;
SIM_GPSGH|=0x10;
SIM_GPSGH&=0xDF;//setG10bitstobe01inbinary.
//letPWMAA_1Xsignaloutput
GPIOG_PER|=0x200;
SIM_GPSGH|=0x04;
SIM_GPSGH&=0xF7;//setG9bitstobe01inbinary.
return;
}
voidCLOCK_init(void)
{
SIM_PCE3|=0x00FF;//enablePWMAandPWMBallchannels
SIM_PCE0|=0xFF7F;//enableallTimerandGPIOA/B/C/D/E/G/F
SIM_PCE2|=0x180;//enableSARADCclockandCyclicADCclock
return;
}
voidPWM_ISR_SETTING()
{
//interruptprioritysetting
INTC_IPR9|=0xC00;//setPWMASM0reloadinterruptsourcepriority
//enablethePWM_SM0reloadinterrupt
#if1
PWMA_SM0INTEN|=0x1000;
#else
PWMA_SM0INTEN&=0xEFFF;//disablePWMreloadinterruptofSM0
#endif
return;
}
voidPWM_ReloadErrorISR_SETTING(void)
{
//vectornumberofPWMAreloaderrorinterrupt
//0x95
INTC_IPR8|=0xC00;
PWMA_SM0INTEN|=0x2000;
}
#pragmainterrupton
voidPWM_RELOAD_Error_ISR(void)
{
PWMA_SM0STS|=0x2000;//cleartheREFbit
asm(nop);
}
//testPWM2_Xoutputsignal
//whentheSM2moduleofPWMAissynchronizedbySM0syncsignal,thePWM1_X/PWM2_X/PWM3_Xcanoutputarbitrary
//waveformwithoutanyrestrictionbecauseofPWMA_SMxVAL1register,onlyPWMA_SM0VAL1registerisusedtocontrolthe
//PWMAfrequency
//Pinmultiplexer:
GPIOG9/PWMB_1X/PWMA_1X/TA3/XB_OUT11
voidPWMX_Function(void)
{
//setthattheSM0synctosynchronizeallPWMAmoduleSM0/SM1/SM2/SM3
//configurePWMA1_XpinasPWMpinsinGPIOEG_init()function
//settingthePWMA_1xdutycycle
PWMA_SM1VAL0=0xFC00;
PWMA_SM1VAL1=0x300;//themodulois256
while(PWMA_MCTRL&0x0002){}
//PWMA_MCTRL|=0x0030;//cleartheLDOKbits
PWMA_MCTRL|=0x0002;
PWMA_OUTEN|=0x02;//enablePWMA_1Xsignal
}
//thisfunctionisusedtocontrolPWMtoswapthePWMpins
//whenBLDCmotorworksinbipolarmode,thePWMshouldbesetupascomplementarymode,inthemode,
//thePWMswapfunctionisnecessary
//usercanselectinvertedPWMoutputtoswapthePWMsignal
//whentheFORECEcommandisexecuted,thePWMA_3AandPWMA_3Bsignalsareswaped
voidPWMSwapFunction(void)
{
//intheexample,PWMASM3moduleissetupincomplementarymode
//whentheFORECEcommandisexecuted
PWMA_SM3INIT=0xF000;
PWMA_SM3VAL0=0xF800;//becauseSM3moduleissynchronizedwithSM0,thevalue0/value1isunnecessary
PWMA_SM3VAL1=0x800;//themodulois256
PWMA_SM3VAL2=0xF800;//75%dutycycle
PWMA_SM3VAL3=0x800;
PWMA_SM3VAL4=0xFC00;//25%dutycycle
PWMA_SM3VAL5=0x300;
PWMA_SM3CTRL2=0x0200;//complementarymode,IPbusclock,theINIT_SELshouldbe10,wh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- freescale sample code main
![提示](https://static.bingdoc.com/images/bang_tan.gif)