TI的员工你们好,我现在开发cc2541时遇到这样的难题:
我想通过芯片捕获来自HS0038接收到的红外信号,于是采用了两种方式:
1. 沿用我以前在其他芯片的红外学习代码(使用外部中断方式),发现程序在外部中断函数内,对信号引脚电平进行查询时,读取引脚电平似乎存在延时?因为我单步调试时,程序可以读取到引脚的电平,从而执行相应的代码,但是程序全速运行时,程序没法进入引脚低电平的的代码,初步分析是因为读取引脚电平的时候,错过了相应电平的时间?从而导致了程序的失效(读取io电平存在延时?还是其他原因呢?),代码的实现如下:
if(P0_4) //high pulse
{
while(P0_4)
{
do something..
.
.
}
}
else //low pulse
{
while(P0_4 == 0)
{
do something…
}
}
2. 查阅了cc2541的数据手册,数据手册中提到可使用timer1的 ch2进行红外捕获,于是我就对定时器的输入捕获模式选定进行分析,发现如果单独使用一个通道进行捕获的话,单边沿触发(上升沿或下降沿)的话会出现有一个电平(高电平或低电平)的脉宽无法测量,若使用任意波形捕获,即上升沿和下降沿捕获模式,但由于接收到的红外信号是以下降沿触发为信号开始,持续的高电平为信号的结束,也就是使用任意波形捕获的话,最后一个信号的下降沿脉宽将无法获取?请问我分析错了吗?对cc2541的任意波形不是很了解,还请指导:)
请问你们是否有cc2541的红外学习hal库或者有类似芯片的红外学习代码不?我之前查看了论坛的关于cc2530的红外代码(应用手册AN091及其相应代码),发现似乎没有关于红外学习的代码(是否我看得太仓促,没有注意到,烦请指正?)?
临时想法:若使用定时器的单通道输入捕获的方式,要想捕获到上下电平的脉宽,可以通过先设置捕获为下降沿触发,在获取低电平脉宽后快速使定时器切换到上升沿触发,然后捕获到高电平脉宽后,又快速切换到下降沿触发,如此反复,最后使用超时对信号的结束进行判断。那么问题是cc2541的定时器是否支持这种捕获模式的快速切换呢?是否会存在很大的切换延时?
文字比较多,信息量也挺大的,希望以技术支持完善和资源丰富著称的ti以及可爱的员工们能给提点建议,助我解决这个让我苦恼的问题,谢谢:)
da qin zheng sheng:
可以使用使用两个硬件引脚测量,一个上升,一个下降模式。
user4803295:
回复 da qin zheng sheng:
是两个引脚的都用外部中断的方式来记录上升和下降沿的吗?我方法1提到的就是使用引脚的外部中断,然后检测引脚的电平来记录上升沿和下降沿的脉宽,但是在外部中断下检测中断引脚的电平好像有点问题,达不到预期效果?
Viki Shi:
看下这边的讨论帖: e2e.ti.com/…/384500 提供的资料可能对你有用
user4803295:
回复 Viki Shi:
谢谢你的回答,但是这个资料我是看过了,似乎是没有关于红外学习的代码的,仅仅说明了timer1的ch0和ch1以及timer3如何通过DMA实现红外发送,难道我漏看了吗?烦请指正: )
Viki Shi:
回复 user4803295:
关于CC2541的红外资料只有AN091,暂无代码或硬件驱动提供