智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4209|回复: 8
打印 上一主题 下一主题

mcf 52259的输出比较很奇怪

[复制链接]

12

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
991
威望
669
贡献
176
兑换币
69
注册时间
2011-7-20
在线时间
74 小时
跳转到指定楼层
1#
发表于 2012-5-17 22:52:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10贡献
刚刚上手MCF52259 在调输出比较的时候很奇怪啊
我使用默认的总线频率 应该是80M,然后GPT的时钟64分频,

下面贴出GPT的初始程序,和主程序,
当主程序执行到while(1)的时候 GPT的计数器就会有溢出了,想不通 为什么计数器会走的这么快啊 从0x0000 到0xffff 需要60MS多啊,难道执行一条语句需要这么久的时间?   求高手指导,还有 rec++; 这条语句居然是不能设置断点了,我狂晕啊!!!

void GPTPA_Init(void)
{
       MCF_GPIO_PTAPAR |=    //GPT3 USD FOR GPT
       MCF_GPIO_PTAPAR_ICOC0_ICOC0 //GPT0 USD FOR ICOC  OC
       |MCF_GPIO_PTAPAR_ICOC1_ICOC1; //GPT1 USD FOR ICOC  OC

       MCF_GPT_GPTSCR1 &= (~MCF_GPT_GPTSCR1_GPTEN); //禁止GPT

       MCF_GPT_GPTSCR2 |= MCF_GPT_GPTSCR2_PR(6)  //设置GPT时钟
       |MCF_GPT_GPTSCR2_TOI;   //enable counter overflow interupt


      MCF_GPT_GPTFLG1 &= ~(MCF_GPT_GPTFLG1_CF0  //CLEAR ALL FLAG
         |MCF_GPT_GPTFLG1_CF1
         |MCF_GPT_GPTFLG1_CF2
         |MCF_GPT_GPTFLG1_CF3  
         );
         
       MCF_GPT_GPTFLG2 &= ~MCF_GPT_GPTFLG2_TOF;
         
      MCF_GPT_GPTIOS |= MCF_GPT_GPTIOS_IOS0   //configure  GPT0 GPT1 for OC
      |MCF_GPT_GPTIOS_IOS1;         

      MCF_GPT_GPTDDR |= MCF_GPT_GPTDDR_DDRT0      //configure DDR xxxx xx11
       |MCF_GPT_GPTDDR_DDRT1;

     MCF_GPT_GPTC0 = 0x00ff;       //configure GPTCO  GOTC1
     MCF_GPT_GPTC1 = 0xfff0;

      MCF_GPT_GPTCTL1 |= MCF_GPT_GPTCTL1_OUTPUT0_TOGGLE    //configure toggle
       |MCF_GPT_GPTCTL1_OUTPUT1_TOGGLE;

     
     MCF_GPT_GPTTOV |= MCF_GPT_GPTTOV_TOV0     //toggle when counter overflow
      |MCF_GPT_GPTTOV_TOV1;
      
    MCF_GPT_GPTIE |= MCF_GPT_GPTIE_CI0    //enable interupe channel 0and 1
     |MCF_GPT_GPTIE_CI1;
     
MCF_INTC0_IMRL &= ~MCF_INTC_IMRL_MASKALL;       //
MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK44;    //GPT  C0F
MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK45; //GPT  C1F
MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK41; //GPT  TOV

MCF_INTC0_ICR44 = MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(2);  //设置中断优先级别
MCF_INTC0_ICR45 = MCF_INTC_ICR_IP(5)+MCF_INTC_ICR_IL(2);  //设置中断优先级别
MCF_INTC0_ICR41 = MCF_INTC_ICR_IP(4)+MCF_INTC_ICR_IL(2);  //设置中断优先级别     

}




int main(void)
{
uint8 Delay_time;
// char Reciver[10];
uint8 rec = 0;
MCF_GPIO_PTIPAR=0x00;       //均为普通IO口
    MCF_GPIO_DDRTI=0xff;
    MCF_GPIO_PORTTI=0xf0;
    MCF_GPIO_PTJPAR=0x00;       //均为普通IO口
    MCF_GPIO_DDRTJ=0xff;
    MCF_GPIO_PORTTJ=0xf0;
uart0_init(9600);
PIT1_Init();
GPTPA_Init();
EnableInterrupts;
// MCF_PIT1_PCSR |= MCF_PIT_PCSR_EN;
MCF_GPT_GPTSCR1 |= MCF_GPT_GPTSCR1_GPTEN; // ENABLE GPT
rec++;

// printf("uart0 has recieved a char! it is %c\n",rec);
while(1)
{
;
}
}

12

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
991
威望
669
贡献
176
兑换币
69
注册时间
2011-7-20
在线时间
74 小时
2#
 楼主| 发表于 2012-5-18 12:09:18 | 只看该作者
顶啊
回复

使用道具 举报

12

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
991
威望
669
贡献
176
兑换币
69
注册时间
2011-7-20
在线时间
74 小时
3#
 楼主| 发表于 2012-5-18 12:09:30 | 只看该作者
再顶
回复

使用道具 举报

12

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
991
威望
669
贡献
176
兑换币
69
注册时间
2011-7-20
在线时间
74 小时
4#
 楼主| 发表于 2012-5-18 17:40:40 | 只看该作者
目前个人认为在程序停在了断点处 但GPT的计数器一直在走,所以导致了这样的情况
回复

使用道具 举报

0

主题

2

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
威望
299
贡献
105
兑换币
0
注册时间
2012-2-18
在线时间
25 小时
毕业学校
吉林大学
5#
发表于 2012-6-16 21:34:12 | 只看该作者
请问下我设置了系统时钟80M,然后选好了PIT分频系数,然后定时中断,但时间和计算的不一样,怎么回事,求大神帮助!!!
回复

使用道具 举报

5

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
521
QQ
威望
345
贡献
128
兑换币
22
注册时间
2011-10-28
在线时间
24 小时
6#
发表于 2012-7-9 11:24:27 | 只看该作者
我也是52259,能不能加我QQ524260681   交流一下,共同进步!
回复

使用道具 举报

34

主题

1589

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6271

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

威望
3267
贡献
1194
兑换币
2035
注册时间
2012-11-28
在线时间
905 小时
7#
发表于 2012-12-5 11:42:24 | 只看该作者
呵呵!!
回复

使用道具 举报

12

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
991
威望
669
贡献
176
兑换币
69
注册时间
2011-7-20
在线时间
74 小时
8#
 楼主| 发表于 2013-1-21 12:43:06 | 只看该作者
schb0012 发表于 2012-6-16 21:34
请问下我设置了系统时钟80M,然后选好了PIT分频系数,然后定时中断,但时间和计算的不一样,怎么回事,求大 ...

建议不要debug调中断 我觉得有时候你debug停止了 但可能时钟还在走
回复

使用道具 举报

12

主题

295

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2284
QQ
威望
1598
贡献
534
兑换币
201
注册时间
2012-4-7
在线时间
76 小时
9#
发表于 2013-2-12 21:25:12 | 只看该作者
MCF_GPIO_PTAPAR |=    //GPT3 USD FOR GPT
       MCF_GPIO_PTAPAR_ICOC0_ICOC0 //GPT0 USD FOR ICOC  OC
       |MCF_GPIO_PTAPAR_ICOC1_ICOC1; //GPT1 USD FOR ICOC  OC





  MCF_GPT_GPTFLG1 &= ~(MCF_GPT_GPTFLG1_CF0  //CLEAR ALL FLAG
         |MCF_GPT_GPTFLG1_CF1
         |MCF_GPT_GPTFLG1_CF2
         |MCF_GPT_GPTFLG1_CF3  
         );
我看到写法上有些区别下面这个我是从左到右先或完,相当于1111,然后取反再与等于设置 MCF_GPT_GPTFLG1 =0000
而第一段我就搞不懂顺序了,能讲讲吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 21:59 , Processed in 0.206696 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表