开关机实现方式介绍
硬开关机
硬开关机意思是芯片一供电就开机,断电就是关机。常见的有DC直流电源直插开机,拔掉关机;拨动开关等。
这种开关机方式就较为简单了,不需要做太多处理,主要在代码中把以下函数注销即可:
把这个函数注销以后,则芯片上电就直接开机了,不做电压的其他判断。
软开关机
软开关机就是说芯片一直供电,关机状态下实际上是进入了休眠模式,开机就是把芯片从休眠模式中唤醒,注意只有PR口可以唤醒芯片,所以如果使用的芯片型号没有PR口,就做不了这种软关机方式,需要用双向二极管加MOS管的方式来实现按键开关机。常用的软开关机引脚是PR2口。
把这个函数取消注销,然后定位到函数实体中看(check_power_on_voltage):
这个函数较长,我们只看关键部分。
POWER_KEY_INIT();是初始化开机引脚,下面的判断是开机计数 ,如果按键按下了,时间持续到设定的时长,就开机,按到一般松开了或者没计数到设定市场都不开机。
右键选择POWER_KEY_INIT();,定义到开机按键的宏定义处可以修改开机引脚:
那么关机改怎么做呢?
打开按键宏定义
把以下位置的GPIO按键宏定义置1:
这样我们就选择了使用GPIO按键了。
按键引脚修改
这里我们定义了IO_KEY_ONLY_ONE,所以只有一个按键,引脚使用的是PR2引脚,如果想用多个按键,则注销IO_KEY_ONLY_ONE这个宏定义,然后参照下面额#else后面的KEY_INIT()去增加自己的按键引脚定义。
然后打开IO按键的C文件:
可以看到当KEY0按下时,键值返回0,这个0对应到按键列表里面的0,如下:
意思是当KEY0按下是,执行MSG_BT_PP这个消息,这个消息就是控制手机的音乐播放暂停的功能。另外按键还可以分为长按、按住、长按抬起的功能:
这里做的功能是长按关机,至于关机长按时间的设置在如下位置:
根据项目需求,改成符合项目的值即可。
在692X的SDK中,各个模式(U盘,AUX,FM,蓝牙)的按键消息是分开的,都需要单独配置,跟上面以蓝牙按键为例的配置是一样的: