lpc2138捕获应用实践

由于要在电子显示屏上增加遥控功能,所以涉及到红外遥控的解码问题,红外接收采用的是TFM 5380,红外接收头输出脚接10k电阻上拉到+5V,用100P电容接到GND。用示波器观察输出信号,效果很好基本上红外编码能够吻合了。红外接收头的输出接到LPC2318的22脚,即P0.2/CAP0.0,此脚可用作定时器0的捕获输入,这样看来硬件估计是没有什么问题的啦。

程序开始将该端口选择为捕获输入,即
PINSEL0 = (PINSEL0 & ~(0×20)) | 0×20;

接着对设置定时器0中断
IRQEnable();
VICIntSelect = 0×00000000;
VICVectCntl0 = 0×20 | 0×04;
VICVectAddr0 = (uint32)Timer0_CapInt;
VICIntEnable = 1 << 4;

随后对定时器0进行初始化,
T0PR = 99; //对Fpclk 100分频
T0CCR = 0×05; //上升沿触发,允许中断
T0TC = 0; //定时器0清零
T0TCR = 1; //启用定时器0

这样对其进行初始化应该不会有任何问题的。在中断响应程序中根据T0TC的值来判断同步位和code中的0,1。同时对T0TC进行清零并清除中断标志。

进入调试状态后在中断响应程序内设置断点,发现程序跑起来后不断地产生中断,此时并未用遥控器进行操作。回头检查程序并未发现什么问题,又将例程拿来看看做了一下比较,除了所有的定时器和端口不一样外并无什么不同,因此排除程序的问题。再来看看硬件吧,将示波器接到LPC2318的22脚观察波形也没有看到任何边沿的跳变。问题出来了,貌似软件和硬件都没有问题啊,什么原因呢?通过不停的捣腾最后发现是多接了一个上拉电阻的原因,原来是CAP0.0脚上接了两个上拉电阻其中有一个是原先用作I2C时加的上拉,原本是想采用外部中断来接红外的,后来I2C没有上,觉得还用用捕获来做红外方便些,因此弄根线飞了过来。拿烙铁把电阻弄下来后定时器0的捕获中断便正常了,呵呵。

Post a Comment

Your email is never published nor shared. Required fields are marked *

*

*

Type your comment out: