搜索

[工具下载] 如何使用timer中capture設定在pulse的Rising edge或是Failing edg

[复制链接]
304|5
 楼主 | 2021-4-6 11:29 | 显示全部楼层 |阅读模式
如何使用"CRL0" & "CFL0"這兩個register讀取出的timer counter數值, 判斷是否為"start", logic "0" or logic "1"
是否是從"CFL0"每次讀取數值間的差值去做判斷???
但是目前程式run出來的數值,感覺跟紅外線的protocal的時間間隔對不太起來
以下是由紅外線遙控器按Button ”1”所得到的訊息 :
L=0us
PWM Capture start
H=22966us
L=2118us
H=65356us
L=63848us
H=44034us
L=39550us
是否是從每個Falling edge擷取到的counter值去做判斷 ???

Clock source : 32 MHz
if ((u32CapIntFlag & PWM_RISING_LATCH_INT_FLAG) && token == 0) {
        cap_rising_time = PWM_GET_CAPTURE_RISING_DATA(PWM0, 2);
                          printf("L=%dus\n", cap_rising_time);
        cap_index++;
                        //  printf("Lindex=%d\n", cap_index);
        token = 1;
    }

    if ((u32CapIntFlag & PWM_FALLING_LATCH_INT_FLAG) && token == 1) {
        cap_falling_time = PWM_GET_CAPTURE_FALLING_DATA(PWM0, 2);
                          printf("H=%dus\n", cap_falling_time);
        cap_index++;
                         // printf("Hindex=%d\n", cap_index);
        token = 0;
    }

使用特权

评论回复
| 2021-4-6 13:56 | 显示全部楼层
不要打印在长度收到的当下,拿个buffer跟counter,收资料後等够久的时间,才在main loop中打印收到的资料。

使用特权

评论回复
| 2021-4-6 14:51 | 显示全部楼层
PWM0引脚的上跳变,Timer的值会锁存到 CRL0。PWM0有下跳变时,Timer的值会锁存到CFL0, 这样就得到了引脚跳变的时刻了,也就可以知道信号高电时间,和低电平时间了。
怎么由这个时间求得逻辑0还是逻辑1,这个要对照不同的协议,做逻辑上的判断了。

使用特权

评论回复
| 2021-4-6 20:54 | 显示全部楼层
二楼说的很对,因为print会耗用更多时间。

使用特权

评论回复
| 2021-4-6 23:46 | 显示全部楼层
一般板子都会有专门的寄存器来设定这个的吧

使用特权

评论回复
| 2021-4-6 23:55 | 显示全部楼层
多谢远楼上的几位大佬 学习了

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表