智能车制作

标题: mpc5604 [打印本页]

作者: 汪、小小猪    时间: 2012-12-16 21:06
标题: mpc5604
各位大神,你们是怎么入门mpc5604的?有木有一些源程序可以分享一下
作者: 汪、小小猪    时间: 2012-12-18 20:29

作者: modalism    时间: 2013-1-30 15:09
QQ:103931388,欢迎交流
#include "MPC5604B_M27V.h"  /* Use proper include file */
//#include "CommType.h"   /* 自定义的各种类型 */
#include "CarSpeed_1.h"
#include "Freq_2.h"
uint16_t Freq_1;
uint16_t Freq_2;
unsigned char FreqCount_1 = 0;
unsigned char FreqCount_2 = 0;
uint16_t Freq_1_Buffer[Freq_Filter_Count_1];
uint16_t Freq_2_Buffer[Freq_Filter_Count_2];
void eMIOS1_CH1617_SAI_ISR(void)
{  
static  uint16_t BeforeCCP_1,BeforeCCP_2;
   uint16_t CCP_1,CCP_2;
   uint16_t TempData1,TempData2;
  
if(EMIOS_1.CH[17].CSR.B.FLAG == 1 || EMIOS_1.CH[17].CSR.B.OVR == 1)
{
  CCP_1 = EMIOS_1.CH[17].CADR.B.CADR;
   
    if(CCP_1 > BeforeCCP_1)//在定时器溢出时的数不管
    {   
     TempData1 = 62500 / (CCP_1 - BeforeCCP_1);//64M 256分频为250K
  
   if(TempData1 > 9)//10Hz以上的频率需要滤波
   {
    if(FreqCount_1 < Freq_Filter_Count_1)
    {
     Freq_1_Buffer[FreqCount_1] = TempData1;//频率先装入缓冲数组
     FreqCount_1++;  //车速度缓冲次数++
    }                                
   }
   else Freq_1 = TempData1; //10Hz以下的频率,直接用了,不用滤波
    }
   
    BeforeCCP_1 = CCP_1;
   
    EMIOS_1.CH[17].CSR.B.FLAG = 1;//清捕捉发生标志
    //EMIOS_1.CH[17].CSR.B.OVR = 1;//清捕捉发生标志
    //EMIOS_1.CH[17].CSR.B.OVFL = 1;//清捕捉发生标志
}

if(EMIOS_1.CH[16].CSR.B.FLAG == 1 || EMIOS_1.CH[16].CSR.B.OVR == 1)
{
  CCP_2 = EMIOS_1.CH[16].CADR.B.CADR;
   
    if(CCP_2 > BeforeCCP_2)//在定时器溢出时的数不管
    {   
     TempData2 = 62500 / (CCP_2 - BeforeCCP_2);//64M 256分频为250K
  
   if(TempData2 > 9)//10Hz以上的频率需要滤波
   {
    if(FreqCount_2 < Freq_Filter_Count_2)
    {
     Freq_2_Buffer[FreqCount_2] = TempData2;//频率先装入缓冲数组
     FreqCount_2++;  //车速度缓冲次数++
    }                                
   }
   else Freq_2 = TempData2; //10Hz以下的频率,直接用了,不用滤波
    }
   
    BeforeCCP_2 = CCP_2;
   
    EMIOS_1.CH[16].CSR.B.FLAG = 1;//清捕捉发生标志
    //EMIOS_1.CH[16].CSR.B.OVR = 1;//清捕捉发生标志
    //EMIOS_1.CH[16].CSR.B.OVFL = 1;//清捕捉发生标志
}
}
//---------------------------------------------初始化工作--------------------------------------------
void init_SAI_Irq15(void) {
  INTC.PSR[165].R = 15;  /* Software interrupt 4 IRQ priority = 2 */
}
void initEMIOS_SAI(void)
{
   EMIOS_1.MCR.B.GPRE= 0xFF;   /* Divide 64 MHz sysclk by 63+1 = 64 for 1MHz eMIOS clk*/
   EMIOS_1.MCR.B.GPREN = 1; /* Enable eMIOS clock */
   EMIOS_1.MCR.B.GTBE = 1;   /* Enable global time base */
   EMIOS_1.MCR.B.FRZ = 0;    /* Enable stopping channels when in debug mode */

//----------------eMIOS_CH16----------------
EMIOS_1.CH[16].CCR.B.UCPEN = 1;  //Prescaler enabled
EMIOS_1.CH[16].CCR.B.UCPRE = 3;  //标准通道内部时钟预分频比:8
EMIOS_1.CH[16].CCR.B.FEN = 1;  //
EMIOS_1.CH[16].CCR.B.EDSEL = 0; //
EMIOS_1.CH[16].CCR.B.DMA = 0; //
   EMIOS_1.CH[16].CCR.B.BSL = 0x03; //使用内部计数器
   EMIOS_1.CH[16].CCR.B.EDPOL = 1; /* 上升沿 Polarity-leading edge sets output/trailing clears*/
   EMIOS_1.CH[16].CCR.B.MODE = 0x02; //模式:单次信号捕捉
SIU.PCR[103].B.IBE = 1;  //将该引脚置为输入模式

//----------------eMIOS_CH17----------------
EMIOS_1.CH[17].CCR.B.UCPEN = 1;  //Prescaler enabled
EMIOS_1.CH[17].CCR.B.UCPRE = 3;  //标准通道内部时钟预分频比:8
EMIOS_1.CH[17].CCR.B.FEN = 1;  //
EMIOS_1.CH[17].CCR.B.EDSEL = 0; //
EMIOS_1.CH[17].CCR.B.DMA = 0; //
   EMIOS_1.CH[17].CCR.B.BSL = 0x01; //使用内部计数器
   EMIOS_1.CH[17].CCR.B.EDPOL = 1; /* 上升沿 Polarity-leading edge sets output/trailing clears*/
   EMIOS_1.CH[17].CCR.B.MODE = 0x02; //模式:单次信号捕捉            
   SIU.PCR[104].B.IBE = 1;  //将该引脚置为输入模式
   //SIU.PCR[104].B.SME = 1;  //将该引脚置为输入模式
}
//---------------------------------------------初始化工作--------------------------------------------





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2