新闻中心

EEPW首页>嵌入式系统>设计应用> 智能家居系统数字显示终端设计方案

智能家居系统数字显示终端设计方案

作者: 时间:2013-08-06 来源:网络 收藏

2的实现

处理器选用.是一款基于ARM Cortex-M3 内核的处理器, 集成了USB2.0 功能, 包括USB 主机、USB 从机和USBOTG, 拥有512 KB 的Flash 和64 KB 的SRAM.无线模块选用的是ZICM2410P0-1 模块。显示模块选用DMT32240T035_01WN 模块。数据存储模块选用4 GB 的Flash 存储器, 也可升级为16 GB 的存储空间。因处理器已集成OTG 功能, 所以由处理器和USB 收发器芯片ISP1302 共同组成数据传输结论。

  导航键具有上下左右导航和选择键。电源部分选用可通过USB 接口充电的蓄电池(5 V~500 mA), 电池容量最小为600 mA/h, 全功能模式供电24 h,休眠模式供电240 h.的软件部分是由μCOS-II 实现。

  2.1 数字显示终端的硬件实现

  数字显示终端(见图2) 由6 部分组成, 其中主要是无线模块和数据传输接口的实现。

  1) 无线模块的实现。无线模块是基于ZiGBee技术的, 该技术是一种在900 MHz 及2.4 GHz 频段, 近距离、低复杂度、低功耗、低数据速率、低成本的双向无线通信技术。它由ZICM2410P0-1 芯片和外围电路组成(包括上电复位电路和工作指示电路)。

  ZICM2410 芯片包括多个通用I/O 引脚、定时器、UART 和SPI 等, 而且还有硬件语音编解码器,独有的IIS/SPI/UART 音频输入输出接口, 扩展出500 KB/s 或1 MB/s 的无线传输速率, 通过PCB 走线构成天线, 103 dB 的射频链路预算, 1.5 V 时RX灵敏度为-97 dB/m, 1.5 V 时射频TX 功率为+6 dB/m.在外围电路的设计中, 通过ZICM2410 的UART与处理器连接, 为了保证程序的稳定性和射频性能, 采用了复位芯片CAT809E, 无线模块采用F 型天线拓扑结构, 支持全向辐射模式。为了保证天线的性能发挥, 数字显示终端的主板上要有足够多的接地面, 并且不要在模块的天线下方布线,确保PCB 走线和其他元件远离天线。

  2) 数据传输接口的实现。数据传输接口的电路主要是由处理器芯片LPC1758 和USB 收发器芯片ISP1302 组成, 接口插头选用Mini-A 插头。处理器LPC1758 集成了USB2.0 功能, 支持OT 模式, 数据传输接口电路。

  LPC1758在设计USB OTG接口电路, 需要外接1个USB收发器ISP1302,LPC1758和ISP1302通过I2C总线连接通信,LPC1758内部的收发器负责控制USB信号切换, 而ISP1302 负责实现OTG 功能。此时,LPC1758内部的收发器在VP/VM模式下工作。

  3) 其他部分的硬件实现。数字显示终端其他部分还包括显示模块、数据存储模块、电源部分和用户导航键。DMT32240T035_01WN 显示模块集成的功能非常齐全, 它通过RS232 直接和处理器LPC1758 连接, 但在电源的处理上要确保最终接到显示模块上的电压不低于5 V.数据存储模块选用KFW4G16Q2M-DEB6 NAND FLASH.用户导航键采用普通薄膜式按键。电源部分选型比较重要, 作为数字显示终端的能量来源, 不仅要满足显示模块的电压5~6 V, 电流不低于130 mA, 而且能接受USB接口充电, 电池容量不低于600 mA/h.

  2.2 数字显示终端的软件实现

  数字显示终端的操作系统选用μCOS-II 实时操作系统。它是一种简单高效、源代码公开的实时嵌入式操作系统, 具有良好的扩展性和可移植性, 被广泛应用到各种嵌入式处理器上。

  μC/OSII 的核心源代码不用修改, 移植中需要修改的是涉及处理器的OS_CPU_C.C, OS_CPU_A.

  ASM, OS_CPU.H 三个文件。

  1) OS_CPU.H 文件包含μC/OSII 所需要的常量、宏和自定义类型等。

  OS_CPU.H 定义的数据类型。在这次移植中μC/OSII 重新定义了数据类型。

  typedef unsigned char BOOLEAN;

  typedef unsigned char INT8U;

  typedef signed char INT8S;

  typedef unsigned short INT16U;

  typedef signed short INT16S;

  typedef unsigned int INT32U;

  typedef signed int INT32S;

  typedef float FP32;

  typedef double FP64;

  typedef unsigned int OS_STK;

  typedef unsigned int OS_CPU_SR.

  不同处理器的堆栈增长方向是不一样的,LPC1758 的堆栈是从高地址往低地址增长的,OS_STK_GROWTH设为1, 程序为:

  #define OS_STK_GROWTH 1.

  2) OS_CPU_C.C文件。在OS_CPU_C.C定义的C函数中,OSTaskStkInit()函数与处理器相关,所以移植代码需要修改该函数。其程序为(初始化任务时调用此函数初始化任务使用的堆栈)。

  OS_STK * OSTaskStkInit (void (*task) (void

  *p_arg),void *p_arg,OS_STK *ptos,INT16U opt)

  {

  OS_STK *stk;

  (void) opt; //防止编译警告

  stk=ptos; //装载栈顶指针, 即堆栈数组最后的地址模拟中断发生的堆栈情况

  *(stk)=(INT32U)0x01000000L; //xPSR

  *(stk)=(INT32U)task; //PC, 任务入口

  *(stk)=(INT32U)0xFFFFFFFEL; //R14(LR)

  *(stk)=(INT32U)0x12121212L; //R12

  *(stk)=(INT32U)0x03030303L; //R3

  *(stk)=(INT32U)0x02020202L; //R2

  *(stk)=(INT32U)0x01010101L; //R1

  * (stk) =(INT32U)p_arg; //R0, 输入参数p_arg 模拟任务进程, 保存其他寄存器到堆栈

  *(stk)=(INT32U)0x11111111L; //R11

  *(stk)=(INT32U)0x10101010L; //R10

  *(stk)=(INT32U)0x09090909L; //R9

  *(stk)=(INT32U)0x08080808L; //R8

  *(stk)=(INT32U)0x07070707L; //R7

  *(stk)=(INT32U)0x06060606L; //R6

  *(stk)=(INT32U)0x05050505L; //R5

  *(stk)=(INT32U)0x04040404L; /R4

  return(stk);

  }



评论


相关推荐

技术专区

关闭