本帖最后由 北方 于 2019-7-10 13:55 编辑
精简手机系统设计
1、概述
精简手机系统设计是基于8051单片机沁恒CH549L和安可信A9G数据通讯模块开放的精简手机。
2、实现的功能
能够实现精简通讯和实时位置追踪功能。
3、实现的逻辑和原理
3.1 采用CH549和安可信A9G数据通讯模块通过UART口进行数据通讯和连接,连接采用的是标准的AT命令。
在CH549的开发中,使用了touchKey,ADC, GPIO,UART等多个资源,经过选择和调试,项目能够完整运行。其中CH549提供了UART0,UART1,UART2和UART3均测试,其中UART2和ouchkey的ADC有冲突,UART1在touchkey init中也有冲突,需要调整。
开发板连接如下图
本项目选择了UART0,可以在一个端口同时被板载USB-ttl转换,从desktop上也可以获取at通讯的信号,如下图
3.2 项目初步调试的代码如下,大部分是touchkey范例的参照。
#include ".\Public\CH549.H"
#include ".\Public\DEBUG.H"
#include ".\TouchKey\TouchKey.H"
#pragma NOAREGS
UINT16 PowerValue[16];
volatile UINT16 Press_Flag = 0;
UINT8C CPW_Table[16] = { 30,30,30,30, 30,30,30,30,
30,30,30,30, 30,30,30,30,
};
UINT16 ABS(UINT16 a,UINT16 b)
{
if(a>b)
{
return (a-b);
}
else
{
return (b-a);
}
}
void LED_Port_Init(void)
{
P2 |= (0xF<<2); //默认熄灭
P2_MOD_OC &= ~(0xF<<2);
P2_DIR_PU |= (0xF<<2);
}
void LED_Control(UINT8 LEDx,UINT8 status)
{
if(LEDx>3)
{
return;
}
if(status) //点亮
{
P2 &= ~(1<<(2+LEDx));
}
else //熄灭
{
P2 |= (1<<(2+LEDx));
}
}
//主函数
void main()
{
UINT8 ch;
UINT16 value;
UINT16 err; //触摸模拟变化差值
CfgFsys( ); //CH549时钟选择配置
mDelaymS(20);
mInitSTDIO( ); //串口0初始化
printf("TouchKey demo start ...\n");
LED_Port_Init();
TouchKey_Init();
Press_Flag = 0;
for(ch = 8; ch!=12; ch++)
{
PowerValue[ch] = TouchKeySelect( ch,CPW_Table[ch] );
printf("%d ",PowerValue[ch] );
}
printf("\n");
while(1)
{
/* 按键检测 */
for(ch = 8; ch!=12; ch++)
{
value = TouchKeySelect( ch,CPW_Table[ch] );
err = ABS(PowerValue[ch],value);
if( err > DOWM_THRESHOLD_VALUE )
{
if((Press_Flag & (1<<ch)) == 0)
{
printf("ch %d pressed,value:%d\n",(UINT16)ch, value);
/* 点灯处理 */
LED_Control(ch-8,1);
}
Press_Flag |= (1<<ch);
}
else if( err < UP_THRESHOLD_VALUE )
{
if(Press_Flag & (1<<ch))
{
Press_Flag &= ~(1<<ch);
printf("ch %d up,value:%d\n",(UINT16)ch, value);
LED_Control(ch-8,0);
}
}
}
}
}
其中,这里对于GPIO的访问是直接调用ch549.h中对于sbit P2的定义访问寄存器的方法,效率很高。
3.3 预留三维运动传感器的连接接口继续开发。
4. 补充说明
4.1 开发工具,推荐的开发需要keil C51,这样可以按照手册的方法添加芯片库。用开源SDCC也可以,不过只能使用标准MCS51的外设,不推荐。
4.2 程序下载比上一次的CH554评测增加了一个板载开关ON/OFF,非常方便,避免了反复插拔USB线的可能,同时USB下载速度有了明显提高,这样从keil直接下载也没有很大区别了。这个WCHISPtools可以开放接口,作为第三方程序在keil中直接调用,进一步提高效率。
4.3 实时操作系统,采用FREERTOS需要8k左右的内存,更重要的是data数据区只有256字节,在运行中受限更明显,不宜采用。RTX tiny小于1k可以使用,不过调试使用需要更熟悉时钟,不如用轮询的polling方式更简单直接。自己直接算时钟周期,其实也效果不错。
4.4 引用范例的head文件要仔细对代码,尤其是复用的引脚和中断的配置,需要列表后使用,避免冲突。
4.5 安可信的A9G资料在参见https://wiki.ai-thinker.com/gprs/a9g/boards,CH549L的芯片原理连接如下图。
引脚配置使用时需要对照使用。
5、小结
本设计可以实现一个便携手机的功能。这个设计过程中,
- 完整测试了多个适合8051的实时操作系统如RTX tiny, FreeRTOS,经测试均不适合本项目,也就没有采用。
- 在多个端口的同时使用中,多次发生重复定义和接口重复的过程,加深了对CH549L的了解。
此内容由EEWORLD论坛网友北方原创,如需转载或用于商业用途需征得作者同意并注明出处
|