智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4308|回复: 17
打印 上一主题 下一主题

野火库 LPT计数 有点问题一直突破不了

  [复制链接]

22

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1646

优秀会员奖章活跃会员奖章

威望
810
贡献
544
兑换币
306
注册时间
2011-12-25
在线时间
146 小时
跳转到指定楼层
1#
发表于 2013-4-1 14:26:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,用野火的库进行函数操作,在测速时选用了野火例程上的那种方法:
lptmr_counter_init(LPT0_ALT2,INT_COUNT,2,LPT_Rising);                                            //初始化脉冲计数器,用LPT0_ALT2,即PTC5输入,
      //每隔INT_COUNT产生中断,延时2个时钟滤波,上升沿触发

我的INT_COUNT设定为10,在LPT中断中对jishu++,
然后再在PIT中断里读取jishu,并清零
定时时间设定的是5ms,读取结果还算准确,后来细想这种方法有点不妥,相当于每十个脉冲就要进一次LPT中断,这样会不会很耗费资源,既然LPT能计算出我要比较的那个INT_COUNT,那么可不可以让LPT直接计数,然后再在PIT中断中读取清零呢,今天细看了一下相关内容,没有找到很好的方法,在野火库里找到了这些:
#define LPTMR0_CSR                               LPTMR_CSR_REG(LPTMR0_BASE_PTR)
#define LPTMR0_PSR                               LPTMR_PSR_REG(LPTMR0_BASE_PTR)
#define LPTMR0_CMR                               LPTMR_CMR_REG(LPTMR0_BASE_PTR)
#define LPTMR0_CNR                               LPTMR_CNR_REG(LPTMR0_BASE_PTR)

#define LPTMR0_BASE_PTR                          ((LPTMR_MemMapPtr)0x40040000u)
我以为是K60将采集的脉冲数放到了内部地址0x40040000u中了,用J-link调试时发现确实有变化,却不稳定,看不太明白,我应该怎么将这个数读出呢。
之后在论坛里看到有人发了官方例程,他是将 a_cur=LPTMR0_CNR;  这样读出来的是不是脉冲数呢,求解各位指点小菜一下。

68

主题

718

帖子

0

精华

跨届大侠

火云邪神

Rank: 10Rank: 10Rank: 10

积分
6644

论坛元老奖章

QQ
威望
3359
贡献
2001
兑换币
765
注册时间
2011-8-24
在线时间
642 小时
2#
发表于 2013-4-1 15:35:48 | 只看该作者
当然是啊,但是为了安全INT_COUNT设为60000就会比较稳妥,因为定时时间很短,测速用嘛。所以永远也不会进入LTP中断,也没必要进,反正你计数也不会超过65535,我的16ms 512线编码器最快才返回1000多的数值,
回复 支持 反对

使用道具 举报

6

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1210
威望
599
贡献
333
兑换币
298
注册时间
2013-1-11
在线时间
139 小时
毕业学校
东华大学
3#
发表于 2013-4-1 19:30:56 | 只看该作者
☆_。寒泉..+ 发表于 2013-4-1 15:35
当然是啊,但是为了安全INT_COUNT设为60000就会比较稳妥,因为定时时间很短,测速用嘛。所以永远也不会进入 ...

那我想问一下 那个PIT0_IRQHandler中断里该怎么写啊  是不是 关定时器中断 计数  开定时器中断啊  就是那个关中断 和开中断是什么啊 怎么写啊 可以发个底层看看么 纠结了~~ 拜谢
回复 支持 反对

使用道具 举报

22

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1646

优秀会员奖章活跃会员奖章

威望
810
贡献
544
兑换币
306
注册时间
2011-12-25
在线时间
146 小时
4#
 楼主| 发表于 2013-4-1 20:12:05 | 只看该作者
☆_。寒泉..+ 发表于 2013-4-1 15:35
当然是啊,但是为了安全INT_COUNT设为60000就会比较稳妥,因为定时时间很短,测速用嘛。所以永远也不会进入 ...

我也是这么想的,但是我在PIT中断中应该怎么把这个数读出来呢,换句话说,这个数存在哪了呢,我一直很困惑,邪神哥,帮我分析一下好吧
回复 支持 反对

使用道具 举报

68

主题

718

帖子

0

精华

跨届大侠

火云邪神

Rank: 10Rank: 10Rank: 10

积分
6644

论坛元老奖章

QQ
威望
3359
贡献
2001
兑换币
765
注册时间
2011-8-24
在线时间
642 小时
5#
发表于 2013-4-2 13:43:29 | 只看该作者
LPTMR0_CNR直接读,然后清零
回复 支持 反对

使用道具 举报

68

主题

718

帖子

0

精华

跨届大侠

火云邪神

Rank: 10Rank: 10Rank: 10

积分
6644

论坛元老奖章

QQ
威望
3359
贡献
2001
兑换币
765
注册时间
2011-8-24
在线时间
642 小时
6#
发表于 2013-4-2 13:46:22 | 只看该作者
Y__man 发表于 2013-4-1 19:30
那我想问一下 那个PIT0_IRQHandler中断里该怎么写啊  是不是 关定时器中断 计数  开定时器中断啊  就是那 ...

你可以看看野火的教程啊,上面写的很清楚,开关中断是enable_irq(x);x是中断向量号-16
回复 支持 反对

使用道具 举报

6

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1210
威望
599
贡献
333
兑换币
298
注册时间
2013-1-11
在线时间
139 小时
毕业学校
东华大学
7#
发表于 2013-4-2 23:15:21 | 只看该作者
☆_。寒泉..+ 发表于 2013-4-2 13:46
你可以看看野火的教程啊,上面写的很清楚,开关中断是enable_irq(x);x是中断向量号-16

那 PIT0的中断向量号是-16?  我看X 貌似都是正数啊
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
8#
发表于 2013-4-3 08:14:43 | 只看该作者
Y__man 发表于 2013-4-2 23:15
那 PIT0的中断向量号是-16?  我看X 貌似都是正数啊

PIT0的中断向量号 -16
PIT0 的中断向量号是 84 ,即 84 - 16

回复 支持 反对

使用道具 举报

6

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1210
威望
599
贡献
333
兑换币
298
注册时间
2013-1-11
在线时间
139 小时
毕业学校
东华大学
9#
发表于 2013-4-3 20:43:21 | 只看该作者
野火 发表于 2013-4-3 08:14
PIT0的中断向量号 -16
PIT0 的中断向量号是 84 ,即 84 - 16

谢谢火哥 支持火哥
回复 支持 反对

使用道具 举报

14

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
647
威望
393
贡献
154
兑换币
178
注册时间
2012-9-26
在线时间
50 小时
毕业学校
县一中
10#
发表于 2013-4-7 17:06:04 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 21:34 , Processed in 0.056524 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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