5851S软件阅读.docx
《5851S软件阅读.docx》由会员分享,可在线阅读,更多相关《5851S软件阅读.docx(18页珍藏版)》请在冰豆网上搜索。
![5851S软件阅读.docx](https://file1.bdocx.com/fileroot1/2022-12/7/4007085d-42e5-42b5-b086-5b6e20c93372/4007085d-42e5-42b5-b086-5b6e20c933721.gif)
5851S软件阅读
一、按键部分(采用AD采样读按键)
1.硬件电路图
KEY_P为正极,KEY_N为负极,他们之间串联了很多电阻,在2个电阻间连接一个按键,按键的另一端连着KEY_SENSE.这样根据KEY_SENSE读取到的电压值不同来区分按下的是哪个键。
(一般从负极开始,最靠近负极的那个按键为第一个,以此类推)
2.软件分析
按键定义(在Target.def)
按键编码(在Target_config.c)
读取电压值,根据电压值不同按顺序编码为从第一个到多少个
按键设置(在Tgt_board_cfg.h)
设置自己需要的按键,什么功能的按键需要设置为第几个
3.按键设置
首先,如果能直接从电路图看出哪个键是对应第几个就可以直接设置按键。
我是先烧写一个芯片对应的系统软件(这个只需要在上电状态下能开机,就是按住电源键程序能往下跑),这样程序跑完按键读取之后就会打印你按下按键对应编码为第几个,这样就可以设置电源按键了。
下面了解不用程序打印只看电路图就可以知道对应按键值的方法(要对下面软件较熟悉)。
原理图是给出的,你只要在软件上设置最大按键值、最小按键值和按键数(这些都是软件设置的,实际测得的值会有实测标志说明)。
根据软件的算法就可以算出电路图上哪个键对应软件分配的第几个键。
先用最大键值减去最小键值,按键数减一,再两者相除求得平均键值(step)。
然后用实测电压减去最小按键值再除以平均键值,得到的值加上0.5后取整就是对应软件的第几个按键(0开始计算)。
按键打印信息
按键设置编码号(Tgt_board_cfg.h,powerkey对应0,下面四行为1-8、9-16、17-24、25-32)
按键检测(Dm_key.c,上为电源键,下为其他键)
附加1:
PWR_EN(上电使能)
它的作用是取代电源键(即按下电源键芯片能上电,不按电源键把上电使能引脚置1芯片也能上电)。
先把它设置为对应的引脚,再让此引脚开机置1.
设置(Tgt_board_cfg.h)
功能初始化(Gpio_edrv.c)
附加2:
按键按下抬起、长按、重复按、超长按、双击、多击按键事件
首先按键按下,按住标志设为0,设置当前按键值,发送按键按下事件。
在按键按下处理的末尾设置定时器,过了一段时间(长按事件时间)进入按键超时处理函数。
先判断按住标志:
为0设置按键标志为1,并发送长按按键事件;不为0则表示按住时间超过一段时间(长按事件时间),则进入重复按键事件,每隔一小段时间发送一次重复按键事件;如果超长按键标志为0则一直累加时间,如果达到超长按键事件时间则进入超长按键事件,超长按键标志设为1,发送超长按键事件。
接下来是按键抬起处理。
如果是按键抬起或当前按键值不为0则进入按键抬起事件。
进入多少次击按键处理:
如果双击按键值不等于当前按键值,设置当前按键为双击按键值,如果双击定时器不为0则关掉,重新设置定时器,记按键击数为1;如果双击定时器不为0则关闭,重新设置定时器,按键击数加1;否则关闭按键定时器,发送按键抬起事件
双击定时器超时处理。
关闭双击定时器,如果按键击数为2则处理发送双击按键事件;如果按键击数为3则处理三击按键事件;如果按键按住标志为0则处理单击按键事件。
设置双击键值为0,把按键击数清0.
总结(首先你需要多少个按键在电路上就至少要连接那么多按键,不过因为按键越多电压值相差越小所以按键尽量不要太多;然后在软件上读取电压值,根据电压值的不同依次编个号;最后你需要把哪个键设为什么功能的,你把对应设为第几个键)
下面为按键间的电阻值设计:
Step=(Vmax-Vmin)/(count-1)
Value=(V实-Vmin)/step=V实/step-1
①看图设参
UV=1.85Vmax=UV/R总*RmaxVmax=UV/R总*Rmax
②有参改图
Step=0.185V实/step=N+则V实=N+*Step
V实=UV*R实/R总=0.185N+则10R实=R总N+
即R实=R总/10*N+(R实要是R总/10的整数倍)
二、指示灯
首先是在资源编辑器里编辑指示灯的显示状态,它会自动存入resource列表文件,编译过程中会把resource文件变成res二进制文件编译到目标文件里。
1.指示灯主函数(参数一为选的灯,参数二为循环模式)
先判断一下选的指示灯模式是否为当前模式和是否为空,然后获取选的指示灯的数据(即下面灯右边对应的那些字母和数字),检测循环模式,设置现运行模式为当前模式,关定时器。
2.下面是获取当前指示灯数据的函数,接下来用它重新获取指示灯数据并把前面检测的一些数据加入进去
3.下面是灯状态超时函数(管理灯的亮灭与延时),在最后用它控制灯的亮灭和延时(根据前面检测的一串数据,读取到字母就控制对应灯的亮灭,读取到1-9数字就用作延时)
三、功放
1.PA_EN
下面是它的原理图(功放使能——升压,提升功放的输入电压)
功放使能设置(设置对应的引脚)
功放使能开机就打开,即开机把功放使能引脚置1.
2.Shutdown
它的作用就是让功放待机(即让功放的电流很小,省电)
首先设置它对应的引脚,使能值(开/关),有效值(高有效/低有效)
然后初始化功能,进行控制(开机就打开,什么时候置它有效)
设置它的有效值(即对应引脚置1/0)
3.Mute
它的作用是关闭功放的声音
设置它对应的引脚,使能值,有效值
功能初始化
功能设置
4.linein
Linein设置。
设置对应的引脚,插入的有效值(高有效/无效)
功能初始化,设置中断,设置功能引脚寄存器
Linein插入检测
插入Linein事件处理
5.lineout
插入耳机则从耳机播放,功放关闭(有些客户需求功放不关闭)
下面是耳机功能引脚设置,有效值设置,默认值设定。
这里检测脚输入为低,低有效。
初始化功能,开启中断,设置功能引脚寄存器,耳机插入检测
处理耳机插入功能,处理中断和中断延时
6.天线
四、扩展IO功能
1.NFC
当有手机靠近NFC线圈,端口2输出高使下图下面的三极管导通,则向上输出低让上面三极管导通,这样就给了NFC检测引脚一个高电平。
下面就开始处理NFC功能。
先初始化功能
.nfcDetectGpio=HAL_GPIO_7,这是功能引脚,设置了就表示有并开启了NFC功能。
.nfcPlugHigh=TRUE,有效值,这里高有效,就是检测到功能引脚为高有效。
有些电路给检测脚一个低电平,这时就要设为低有效。
.nfcPlugin=FALSE,这是功能默认值,即没这功能时(功能引脚没设置为无时)的判断。
nfcCfg.direction=HAL_GPIO_DIRECTION_INPUT;设置输入输出,外面给的,需要芯片检测的就为输入,芯片设置的,给向外部的就为输出。
nfcCfg.irqHandler=gpio_NfcDetectHandler;中断处理,给出这里中断处理的函数名。
nfcCfg.irqMask.rising=TRUE;上升沿中断有效,一有上升沿就结束中断计时处理中断。
nfcCfg.irqMask.falling=FALSE;下降沿中断无效
nfcCfg.irqMask.debounce=TRUE;波动有效,使瞬间的波动锁住为上升沿
nfcCfg.irqMask.level=FALSE;平衡无效,跳动有效,一般人为插拔或靠近都为跳动的
hal_GpioOpen(g_gpio_config->nfcDetectGpio,&nfcCfg);设置对应功能引脚寄存器
下面处理NFC功能,处理中断
2.OTG
五、充电(输出输入功率)
1.充电
六、基本功能
1.蓝牙
2.音乐播放
3.T卡播放
4.通话
5.收音机
6.USB
7.日历
8.
七、UART、I2C、SPI、HCI
显示屏