⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 飞思卡尔智能车程序
💻 C
字号:
#include<hidef.h>
#include "derivative.h"      /* derivative-specific definitions */
#include"init.h"
#define PITTIME  200//设定为1ms定时


 void PLL_Init(void) 
{
   CPMUPROT = 0x26;            //保护时钟配置寄存器
   CPMUCLKS_PSTP = 0;          //禁用PLL
   CPMUCLKS_PLLSEL = 1;        //选择PLL作为系统时钟源
   CPMUOSC_OSCE = 1;           //外部晶振使能
   CPMUSYNR = 0x07;            //fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)               
   CPMUREFDIV = 0x07;          //16M:07,0F;32M:07,07;64M:07,03
   CPMUPOSTDIV = 0x00;         // PLL CLOCK = VCO CLOCK / (POSTDIV + 1) 
   _asm(nop);
   _asm(nop);
   CPMUPLL=0x10;               //锁相环调频启用,用以减少噪音
   
   while(CPMUFLG_LOCK == 0);          //等待PLL稳定          
   CPMUPROT = 0x00;            //关闭保护时钟
   CPMUCLKS_PLLSEL = 1;        //使能PLL
 }
 

/*//---------------------锁相环初始化-------------------//
void PLL_init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{
  DisableInterrupts;
  CLKSEL=0x00;             //不用锁相环
  PLLCTL_PLLON=1;          //开启PLL
  REFDV=0x07;              //PLLCLK=2*OSCCLK*[(1+SYNR)/(1+REFDV]
  SYNR=0x07;            
  while(!(CRGFLG_LOCK==1));//直到LOCK=1,when PLL is ready,退出循环
  CLKSEL_PLLSEL=1;         //选定锁相环时钟
}*/  


/*void AD_init(void) 
{  
  //8ch   
  ATDCTL1=0x00;   //7:1-外部触发,65:00-8位精度,4:放电,3210:ch
  ATDCTL2=0x40;   //禁止外部触发, 中断禁止    
  ATDCTL3=0x80;   //右对齐无符号,每次转换8个序列, No FIFO, Freeze模式下继续转    
  ATDCTL4=0x01;   //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
  ATDCTL5=0x30;   //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
  ATDDIEN=0x00;   //禁止数字输入 
}*/ 
  
void AD_init(void)
{
  ATDCTL1=0x40;  //12位分辨率,0~255
  ATDCTL2=0x60; //正常工作模式,标志位快速清零
  ATDCTL3=0xF8; //AD转换结果右对齐,转换序列长度15
  ATDCTL4=0x07; //采样时间四个周期,PRS=7,f(atdclk)=f(bus)/(2*(PRS+1))
  ATDCTL5=0x30; //允许特殊通道转换,多通道采样
  ATDDIEN=0x00; // 禁止数字输入缓冲
  }

 void PIT_Init()
{
 
  CPMUAPICTL_APIFE =0;//在设定值之前需要清零;
  CPMUAPICTL_APICLK=1;  //0:使用Autonomous Clock 1:使用BUs CLOCK,这里使用BUS CLK           
  CPMUAPIR=7999; 
  //CPMUACLKTR=0xFC;    
  // fACLK is trimmed to 10KHz,如果使用的是Auto Clock 则要设置此寄存器 为0xfc CPMUAPIR=29999;           
   //使用BUS  CLK , Period = 2*(APIR[15:0] + 1) *(1/16 000 000HZ)此处定时1ms
  //若使用AUTO CLK ,0.2(x+1)=y ms 如定时10ms 值为49
  CPMUAPICTL_APIE =1;     //使能中断申请
  CPMUAPICTL_APIF=1;      // 中断标志位清零
  CPMUAPICTL_APIFE =1;//在设定值之前需要清零; 

}

/*void PIT_Init(void)//定时中断初始化函数 50MS定时中断设置
{
  PITCFLMT_PITE=0;      //定时中断通道0关
  PITCE_PCE0=1;         //定时器通道0使能
  PITMUX=0x00;          //定时器通道0使用微定时器基准0
  PITMTLD0=0xFF;        //8位定时器初值设定 16MHzBusClock下 1ms中断
  PITLD0=0x0040;        //16位定时器初值设定 定时周期=(PITMTLD0+1)*(PITLD0+1)/fbus
  PITINTE_PINTE0=1;     //定时器中断通道0中断使能
  PITCFLMT_PITE=1;      //定时器通道0使能
}*/



void PWM_Init(void)
{     
  //PTTRR=0x80; 
  PWME=0x00;            //关闭通道
  PWMPRCLK=0x00;        //时钟源为总线时钟
  PWMCLK=0xAA;          //SA、SB作为PWM的时钟
  PWMSCLA=1;            //Clock SA=Clock A /(2*PWMSCLA)= 16M/2=8M
  PWMSCLB=1;            //Clock SB=Clock B /(2*PWMSCLB)= 16M/2=8M
  PWMPOL=0xAA;          //通道对外输出波形先高电平 后低电平

  PWMCAE=0x00;          //左对齐输出  PWMx周期=通道时钟周期*PWMPERx=8Khz
  PWMCTL_CON01=1;       //通道串联输出打开
  PWMCTL_CON23=1; 
  PWMCTL_CON45=1; 
  PWMCTL_CON67=1; 
  
  PWMDTY01=0;            //占空比为0%的波形 当CAEx=0时 
  PWMPER01=1000;         //当PPOL=1时 占空比=(PWMDTYx/ PWMPERx)*100%
  PWMDTY23=0;                
  PWMPER23=1000;                
  PWMDTY45=0;
  PWMPER45=1000;
  PWMDTY67=0;
  PWMPER67=1000;

  PWMCNT0=0x00;         //0通道计数器清0
  PWMCNT1=0x00;         //1通道计数器清0
  PWMCNT2=0x00;         //2通道计数器清0
  PWMCNT3=0x00;         //3通道计数器清0
  PWMCNT4=0x00;
  PWMCNT5=0x00;
  PWMCNT6=0x00;
  PWMCNT7=0x00;
  
  PWME_PWME1=1;         //0通道使能,0通道为输出通道
  PWME_PWME3=1;         //1通道使能
  PWME_PWME5=1;         //2通道使能
  PWME_PWME7=1;         //3通道使能

    
}

//        脉冲累加器初始化 (PT7口)
void initPACN(void) 
{
  PACTL=0x50;// 上升沿有效
  PACNT=0;

} 

void system_init(void) {
  PLL_Init();
  AD_init();
  PWM_Init();
  PIT_Init();
  initPACN();
  DDRC=0xff;
  PORTC=0x00;
  DDRD=0x00;
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -