智能车制作
标题:
使用MCF52259芯片做编码器测速遇到问题!请大家指点
[打印本页]
作者:
mcc435400
时间:
2014-3-4 20:49
标题:
使用MCF52259芯片做编码器测速遇到问题!请大家指点
请大家看如下代码!GPT.c
#include "GPT.h"
#include "MCF52259.h"
uint16 maichong_1;
extern pulse_speed1;
//extern i;
void PIT0_init(void)
{
MCF_PIT_PCSR(0)=MCF_PIT_PCSR_RLD
|MCF_PIT_PCSR_PIF
|MCF_PIT_PCSR_PIE
|MCF_PIT_PCSR_OVW
|MCF_PIT_PCSR_PRE(9);//at 80MHz
//(15-610Hz)(14-1220Hz)(13-4882Hz)
//(12-9765Hz)(11-19531Hz)(10-39062Hz)(9-78125Hz)
//|MCF_PIT_PCSR_DBG
//|MCF_PIT_PCSR_DOZE
MCF_PIT_PMR(0)=(uint16)(100*78125/1000);
MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
MCF_INTC0_IMRH&=~MCF_INTC_IMRH_INT_MASK55;//PIT0
MCF_INTC0_ICR55=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(2);//PIT0
MCF_PIT_PCSR(0)|=MCF_PIT_PCSR_EN;
}
///-------------------------------------------------------------------------*
//函数名: GPTPA_Init *
//功 能: 初始化脉冲累加器,下降沿累加 *
//参 数: 无 *
//返 回: 无 *
//说 明: 初始化结束后,定时器计数是禁止的,脉冲累加器中断是禁止的 *
//-------------------------------------------------------------------------*
void GPTPA_Init(void)
{
//1.配置TA.3引脚为GPT功能
MCF_GPIO_PTAPAR |= 0x40;
//2.禁止GPT
DisableGPT();
//3.设置GPT时钟
MCF_GPT_GPTSCR2 |= MCF_GPT_GPTSCR2_PR(6); //频率80000000/2*2^6=625000HZ
//4.设置GPT通道3功能为脉冲累加功能,下降沿累加,关闭脉冲累加中断
MCF_GPT_GPTPACTL = 0x00;
//5.设置脉冲累加中断级别并清屏蔽位
MCF_INTC0_ICR(42) = MCF_INTC_ICR_IL(2)
| MCF_INTC_ICR_IP(3);
MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK42;
MCF_INTC0_IMRL &= ~MCF_INTC_IMRL_MASKALL;
//6.清脉冲累加输入标志
MCF_GPT_GPTPAFLG |= MCF_GPT_GPTPAFLG_PAIF;
//7.清脉冲累加计数器
MCF_GPT_GPTPACNT = 0x0000;
//8.清GPT计数器
MCF_GPT_GPTCNT = 0x0000;
MCF_GPT_GPTPACTL = 0x43;
}
__declspec(interrupt:0) void PIT0_handler(void)//interrupt source 55
{
DisableInterrupts;
MCF_PIT_PCSR(0) |= MCF_PIT_PCSR_PIF;
maichong_1=MCF_GPT_GPTPACNT;
pulse_speed1=(uint16)maichong_1;
MCF_GPT_GPTPACNT=0;
maichong_1=0;
EnableInterrupts;
/*
if(++i%2)
{
MCF_GPIO_PORTTC=0x00;
}
else
MCF_GPIO_PORTTC=0xFF;
*/
}
以上是小弟的测速方法,定时器PIT0确定时间产生中断,然后将所设定时间内的脉冲技术值用5110显示,调试了好久搜没有结果,倘若单独检测PIT0模块,能够进入中断,以上if(++i%2)
{
MCF_GPIO_PORTTC=0x00;
}
else
MCF_GPIO_PORTTC=0xFF;
就是小弟的调试代码,TC0口能够输出矩形波,外设led也能闪亮,所以小弟怀疑是GPT脉冲累加出错,请大家帮忙看一下是哪里出错!小弟在这里表示感激。
作者:
huozhenkun
时间:
2014-4-8 22:05
__declspec(interrupt:0) void PIT0_handler(void)//interrupt source 55这是个中断函数么,52259的中断都有那些那,中断函数如何定义的,对于不同的触发中断是怎么样进入中断函数的。。。
作者:
absentyk
时间:
2014-6-11 23:45
请问你的问题解决没?我也遇到类似问题,求帮助
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2