695N开发调试总结

1,关于PWM输出

pwm分定时器pwm输出与电机口mcpwm

①定时器pwm输出默认硬件口与映射方法

定时器资源:

系统定时器总共有4个,timer0~timer3,其中timer1被用来做系统定时,不能再使用。用户可用timer0,timer2以及timer3,而其中timer0又被用来做遥控的capture,给用户留着的是timer2 timer3,而如果用户使用了hdmi功能会发现,其他timer2,timer3一个被用来做cec的捕捉,一个被用来定时了。timer的功能比较强大,使用不仅消化系统资源增加功耗,有大材小用之嫌,而且timer映射outputchannel有风险,如非必要建议不要用timer来做pwm输出的。

如若timer没有被占用,直接照着寄存器配置pwm输出。

配置了timer,并且是timer默认的硬件IO口输出。单单设置了timer还不够,gpio.h中有枚举

从上到下分为CH0,CH1,CH2 总共3组channel,这是OUTPUTCHANNEL,每一个timer pwm都需要对应一个outputchannel,设置函数为:

以上使用timer2的话:

使用OUTPUTCHANNEL2通道,对应PORT就是默认的timer2 pwm硬件输出口。

为何使用channel2而不是channel0?

先看问题:

  调试过程中我们发现打印串口是任意选择的,怎么做到的?

映射!

因为channel0被串口打印映射使用了,这里使用channel0当然可以但是串口打印就不能使用了,打印打开的话会发现都是打印乱码。当然这里选择channel1也是可以的。MCPWM映射的原理是用一个需要映射的IO口去绑定另外一个已经有波形输出的硬件IO口从而让需要映射的IO口输出同样的波形。

把timer2的pwm输出映射到了outputchannel2上,至此,gpio_output_channle(PORT, CH2_T2_PWM_OUT);中PORT设置的IO就有pwm输出了。但是发现不仅仅映射的IO口有波形输出,原来的timer硬件io口

如果设置成了输出模式,也会有波形输出。

    总之:如果硬件IO口被CPU控制并且设置成输出模式,那么timer pwm对应的硬件IO和映射的IO都会有波形输出。

②电机pwm输出默认硬件口与映射方法

电机默认的mcpwm输出口直接按sdk配置设置即可输出,这里主要总结mcpwm映射输出方法的实现

mcpwm的映射跟timer一样也只有CH0~CH2总共三组可以映射,就是说只可以映射3个IO,映射到IO的前提是本身已经有pwm波形输出,本身的硬件IO也会输出pwm波形。用到mcpwm映射的地方是芯片本身封装没有绑定出来的mcpwm口通过映射的方法实现pwm。例如6951C已经有mcpwm0~mcpwm5总共6组mcpwm,再用他来映射就没有意义了,mcpwm映射主要用在32脚或者更少脚封装的ic上实现Pwm功能。

 

一个使用mcpwm映射的例子是:

在6956c上,没有mcpwmch2的硬件pwm channel,因此可以用映射的方法把mcpwm的channel2映射到任意GPIO口上。

以上总而言之,硬件pwm对应的口和映射的口都会输出pwm波形,这是mcpwm映射和timer pwm映射的不同以及最要注意的地方。

 

2,BLE

SDK提供了好几个Ble的demo,一般用data trans的demo做app开发,至于其他的BLE技术细节实在太多不是只言片语就可以描述完的,不再这里赘述。

3,串口

串口申请直接通过指针调用申请接口即可。

4,关于软件定时器原理

定时器无非是常见的硬件timer,以及软件定时器,这里总结的是sdk提供的sys_timer_add等这些软件定时器的实现方法和用法。

 

实现原理是定义一个链表,链表数据中包含了该定时器的ID,超时服务程序,注册定时器时候的系统绝对时间点以及超时时间的绝对时间点等信息,在硬件定时器中断或者主任务中查询该链表中每一个节点的定时器状态,若定时时间到,则执行超时服务程序。

sys_timer_add系统定时器是在操作系统基础上封装的定时器。优先级比较低,无非做到高精度的精确定时,比如fm.c里面fm自动搜台使用的就是该定时器,当使用另外一个优先级更高的定时器sys_hi_timer_add定时1ms不断的刷屏或者其他查询操作的时候会导致fm收台时不断被中断,导致收台效果变差。

在timer.h中各个定时器函数用法:

以sys_timer为例,

sys_timer_add,增加轮询定时器,返回一个u16类型的定时器ID,每次定时时间到之后执行超时服务程序。

sys_timer_del  删除已有的定时器,参数是调用sys_timer_add时返回的定时器ID

sys_timeout_add 增加单次触发定时器,超时服务程序只执行一次后Kill掉

sys_timeout_del  同sys_timer_del

sys_timer_re_run 重新开始计时

sys_timer_set_user_data 传入超时服务程序所需要的参数

 

你可能感兴趣的:(蓝牙音频)