中级会员
- 积分
- 400
- 威望
- 258
- 贡献
- 86
- 兑换币
- 0
- 注册时间
- 2012-3-1
- 在线时间
- 28 小时
- 毕业学校
- shaoyang
|
我用的芯片是dp512,不知道怎么搞的,一开始设置的PACB能用,T0能正确计数,不知道怎么搞的,什么参数都没改,昨天T0又不计数了。我的代码如下,请高手指点一下看看是什么情况?
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define LEDCPU PORTK_BIT4
#define LEDCPU_dir DDRK_BIT4
#define BUS_CLOCK 32000000 //总线频率
#define OSC_CLOCK 16000000 //晶振频率
unsigned int data1,data2;
unsigned int pulsenum;
unsigned int i;
/*************************************************************/
/* 初始化锁相环 */
/*************************************************************/
void INIT_PLL(void)
{
CRGINT = 0; //关中断
CLKSEL_PLLSEL = 0; //在未初始化PLL前不使用PLL的输出作为CPU时钟
#if(BUS_CLOCK == 40000000)
SYNR = 4;
#elif(BUS_CLOCK == 32000000)
SYNR = 3;
#elif(BUS_CLOCK == 24000000)
SYNR = 2;
#endif
REFDV = 1; //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
PLLCTL_PLLON = 1; //开PLL
PLLCTL_AUTO = 1; //选取自动模式
while (CRGFLG_LOCK == 0); //等待PLL锁定频率
CLKSEL_PLLSEL = 1; //选择系统时钟由PLL产生
}
/************************************************************/
/* 初始化ECT模块 */
/************************************************************/
void initialize_ect(void){
TSCR1_TFFCA = 1; // 定时器标志位快速清除
TSCR1_TEN = 1; // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
TIOS = 0xf0; //指定所有通道为输出比较方式
TCTL1 = 0x00; // 后四个通道设置为定时器与输出引脚断开
TCTL2 = 0x00; // 前四个通道设置为定时器与输出引脚断开
DLYCT = 0x00; // 延迟控制功能禁止
ICOVW = 0x00; // 对应的寄存器允许被覆盖; NOVWx = 1, 对应的寄存器不允许覆盖
ICSYS = 0x00; // 禁止IC及PAC的保持寄存器
TIE = 0x00; // 禁止所有通道定时中断
TSCR2 = 0x07; // 预分频系数pr2-pr0:111,,时钟周期为4us,
TFLG1 = 0xff; // 清除各IC/OC中断标志位
TFLG2 = 0xff; // 清除自由定时器中断标志位
}
/*************************************************************/
/* 初始化累加器 */
/*************************************************************/
void INIT_PAI(void)
{
PBCTL = 0x40; //始能B脉冲累加器
TCTL4=0X02; //捕捉下降沿
PACN10=0x00;
}
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void) {
DisableInterrupts;
INIT_PLL();
INIT_PAI();
initialize_ect();
LEDCPU_dir = 1;
EnableInterrupts;
LEDCPU = 0;
TFLG1_C0F = 1;
TC0 = TCNT+62500; //时间间隔为0.25s
for(;;)
{
for(i=0;i<4;i++) //延时1秒
{
while(TFLG1_C0F == 0);
TFLG1_C0F = 1;
TC0 = TCNT+62500;
}
data1 = data2;
data2 = PACN10;
pulsenum = data2-data1; //计算1秒钟采集的上升沿的数量
}
}
|
|