注册会员
- 积分
- 53
- 威望
- 37
- 贡献
- 12
- 兑换币
- 12
- 注册时间
- 2013-1-24
- 在线时间
- 3 小时
- 毕业学校
- 骗子工业学校
|
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; //将该引脚置为输入模式
}
//---------------------------------------------初始化工作--------------------------------------------
|
|