PXA270的嵌入式软硬件设计及应用领域(行业PDA,工控主板,HMI)

 0     引言

  随着嵌入式系统的发展,产品功能与功耗越来越成为系统设计所要考虑的重要方面。仅仅实现了丰富的功能而电量消耗大的产品并不能满足人们的需求。基于Intel XScale架构的PXA270处理器,集成了存储单元控制器、时钟和电源控制器、DMA控制器、LCD控制器、AC97控制器、I2S控制器、快速红外线通信 (FIR)控制器等外围控制器,可以实现丰富的外围接口功能。其低电源运行模式以及动态电源管理技术可以有效的降低电源的功耗。基于这些优点,使得PXA270广泛的应用于智能手机、PDAWeb记事本、远程通信、医疗器械等领域。

  1  PXA270处理器简介

  PXA270Intel公司开发的基于XScale架构的处理器,内核采用ARMv5TE,外围控制器众多。内置了Intel的无线MMX技术,能够显著的提升多媒体性能,此外PXA270也包含了IntelSpeedStep技术,能够根据需要动态调节CPU的性能,真正实现了低功耗,高性能。同其他XScale处理器一样,支持多种嵌入式操作系统,如LinuxWindowsWinCENucleusPalm OSVxWorksJava等。

  2  系统硬件组成

  整个系统以PXA270处理器为核心,以音频输入输出接口,红外接口,10/100M自适应以太网口,触摸屏接口等为外围接口,通过宽温高亮度LCD实现视频输出。系统框图如图1所示。

  2.1  Intel XScale PXA270处理器的系统存储器接口

  Intel XSclae PXA270处理器集成了存储单元控制器,其外部的存储总线接口支持:SDRAMFLASHROMSRAMPC卡等。

  2.1.1 SDRAM电路的设计

  SDRAM选用HynixHY57V561620C,其组织形式为4 Banks x 4M x 16Bit,单片容量

 

1 系统硬件组成框图

  为32MB,采用3.3±0.3V单电源供电,封装形式为标准54引脚TSOP-II,属于16位的数据总线宽度,选用两片并联的方式,使SDRAM的总线宽度达到32位。两片SDRAM32条数据线分别连到PXA270的高16位地址和低16位地址上。HY57V561620C的时钟频率分了100MHz~166MHz四个档,这里选用133MHz这一档的芯片。

  2.1.2 FLASH电路的设计

  嵌入式应用程序一般直接存在板子上的Flash芯片中,根据应用的不同可选用不同容量和速度的芯片,在这里选用的是Intel的同步FLASH 28F256L18目前一般选用28F256P30),单片容量为32MB,采用1.8V 单电源供电,封装形式为标准79脚的VF BGA,选用两片并联的方式,使FLASH的总线宽度达到32位。两片FLASH32条数据线分别连到PXA270的高16位地址和低16位地址上。

  2.2  系统电源设计

  系统采用TPS65020PXA270供电(也可以采用分立DCDC),此解决方案除了高效率之外还可以提供业界最佳的瞬态响应,且不会影响静态电源电流和效率,是便携设备处理器电源的理想解决方案。

  2.2.1 TPS65020芯片简介

  TPS65020是德州仪器推出的一款电源转换芯片,该器件可以满足基于XScale的多媒体设备的电源需要。TPS65020电源管理单元集成了高性能模拟构建块,可帮助由单节锂离子(Li-ion)电池供电的应用支持多种电压。该器件带有三个具备集成FET的同步降压DC/DC转换器、三个线性稳压器(LDO)以及一个I2C通信接口,可实现全面的可编程性与内核电压的动态缩放。

  2.2.2 TPS65020供电原理

  TPS65020包含的三个同步降压转换器在大负载电流时,一般运行在1.5MHZ固定频率的脉宽调制。在轻负载电流时,转换器自动进入电源省电模式,并运行在脉冲频率调制。VDCDC1转换器能传送1.2A的输出电流,VDCDC2转换器能传送1A的电流,VDCDC3转换器能传送800mA的电流。三个转换器的输出电压是由DEFDCDC1DEFDCDC2DEFDCDC3三个管脚分别来设置。本设计中将DEFDCDC1,DEFDCDC2,DEFDCDC3一并连接到VCC上,所以,VDCDC1,VDCDC2,VDCDC3的电压分别为3.3V2.5V,和1.55V

LDO1默认设置电压是1.3VLDO2默认设置电压是1.1V。它们分别为PXA270处理器的VCC-PLLVCC-SRAM管脚提供电压。

  2.3  系统音频输入输出设计

  UCB1400现一般用WM9712WM9713WM9715,UCB1400音质要差些)是飞利浦半导体公司推出的专为液晶显示器手持设备开发的混合信号音频解码/编码芯片。在一个芯片上集成了音频解码/编码功能、一个触屏控制器和功率管理接口,UCB1400与英特尔音频解码/编码器97 (AC'97) 元件规格2.1版本完全兼容,可与众多嵌入式处理器的AC-Link主机控制器通信,如英特尔基于XScale微结构的各系列处理器。

  本系统采用PHILIPS公司生产的编/解码芯片UCB1400PXA270通过AC-LINK连接,输出的信号通过芯片LM4800放大,再通过耳机实现音频输出设计。

  2.4  系统10/100M自适应网口设计

  采用SMSC公司的LAN91C111现一般选用LAN91C113DM9000)自适应以太网控制器芯片与PXA270通过控制总线,地址总线,和数据总线相连。

本文来自www.embedexpert.com转载请标明出处http://www.embedexpert.com/article//2010/0810/pxa270design.html

  LAN91C111是专为嵌入式系统设计的,其外围相对比较简单,它与PXA270以及电磁耦合变压器 TG110-S050N2 RJ-45接口构成嵌入式以太网,实现10/100M自适应网口设计。

  2.5  系统触摸屏设计

  采用PHILIPS公司生产的UCB1400芯片与PXA270AC97控制器连接,即可实现触摸屏功能。

  基于ARM核的 Intel XScale微体系结构的处理器 PXA270中的AC97控制器与UCB1400通讯,可以实现触摸屏上笔触点数据的采集。PXA270UCB1400寄存器的地址进行了映射,这样可以通过PXA270的地址直接访问 UCB1400的寄存器,读取存在其中的笔触点的各类数据值,整个实现过程简单、方便。

2.6  系统红外接口设计

  PXA270的标准UART口集成有符合IrDA 1.0协议的红外编、解码器,将其与安捷伦SIR标准型红外收发器HSDL-3600连接便可组成串口红外通信系统。

  2.7  系统视频输出设计

  PXA270内部集成了功能较强的LCD控制器,、驱动器及輸入輸出缓冲。支持STNTFT显示,支持单色或几种彩色像素格式,支持单或双扫描面板显示,支持每象素点18位、19位、24位和25位(bpp)。推荐的最大显示分辨率是800x600。可编程决定插入等待状态是在行首或者行末,可在52MHz25.4KHz范围内编程显示每象素点的时钟频率,也可编程设置帧时钟、行时钟和使能信号的极性。当LCD功能不使能时,所有的输入输出管脚都可做为普通的I/O口来使用。

  本系统通过宽温高亮度LCD实现视频输出,把液晶屏的数据线与CPU的相应引脚相连即可。采用北京技博科技有限公司生产的6.4寸宽温高亮液晶显示器(嵌入式)。分辨率:VGA640×480),亮度:1200nits,工作温度-40—70

  3  软件实现

  PXA270支持多种嵌入式操作系统,如LinuxPalm OSWindows CE等。其中Windows CE是一个全新开发的模块化的图形用户界面。支持多任务操作,支持多种 CPU,拥有良好通信能力。是一款高性能、高效率的实时操作系统。

  Windows CE.net的开发主要包括两个重要的方面,一个是内核定制,一个是应用程序的开发,Microsoft 公司提供了Microsoft Windows CE Platform Builder作为嵌入式操作系统定制的集成开发环境。Platform Builder集成开发环境(IDE)提供了所有进行设计、创建、编译、测试和调试Windows CE.net操作系统平台的工具。它运行在桌面Windows下,本系统所用的CPUPXA270,选择Platform Builder 5.0来开发。先通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和调试。也可以用Platform Builder来进行驱动程序开发和应用程序项目的开发等。Windows CE.net操作系统的开发步骤如下图3所示。

 

  图2 Windows CE.net操作系统的开发步骤

  4  结论

   基于Intel XScale PXA270处理器与宽温高亮度LCD技术相结合的嵌入式系统,运行速度快,性能稳定,功能扩展方便,功耗低。

  本文创新点:1.采用宽温高亮度LCD实现嵌入式系统的视频输出,可以广泛应用于工业自动控制、航空、航海等领域以及超低温等恶劣环境。2.系统采用TITPS65020电源管理芯片为处理器供电,完全解决了PXA270的供电问题,是嵌入式处理器电源的理想解决方案之一。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pxa270_LED,驱动,测试程序 #include <stdio.h> #include <fcntl.h> #define MOTOR_Forward 0x1 #define MOTOR_Reverse 0x2 #define MOTOR_SetSpeed 0x3 #define MOTOR_GetSpeed 0x4 #define MOTOR_STOP 0x5 #define DEC_Forward 0x6 #define DEC_Reverse 0x7 #define stmotor_dev "/dev/xsb_edr_step" int main_menu(void){ int key; printf("\n\n"); printf("********** MOTOR test menu **********\n"); printf("* 1. MOTOR Forward *\n"); printf("* 2. MOTOR Reverse *\n"); printf("* 3. MOTOR Set Speed *\n"); printf("* 4. MOTOR Get Speed *\n"); printf("* 5. MOTOR STOP *\n"); printf("* 6. DEC Forward *\n"); printf("* 7. DEC Reverse *\n"); //printf("* 8. *\n"); //printf("* 9. *\n"); printf("* 0. Exit Program *\n"); printf("********************************\n"); printf("\n\n"); printf("select the command number : "); scanf("%d",&key); return key; } void wait_for(int count) { int i,j; for(i=0; i<count; i++) for(j=0; j<1000; j++); } main(int ac, char *av[]){ int key, dev; int speed=600; int i=0; int count; int j=5; dev = open(stmotor_dev, O_RDWR ); if ( dev < 0) { fprintf(stderr, "cannot open ST_MOTOR (%d)", dev); exit(2); } /* while((key = main_menu()) != 0){ switch(key){ case 1: printf("\t MOTOR Forward \n"); ioctl(dev, MOTOR_Forward, 0); break; case 2: printf("\t MOTOR Reverse \n"); ioctl(dev, MOTOR_Reverse, 0); break; case 3: printf("\t MOTOR Speed Up \n"); ioctl(dev, MOTOR_SetSpeed, 0); break; case 4: printf("\t MOTOR Speed Down \n"); ioctl(dev, MOTOR_GetSpeed, 0); break; case 5: printf("\t MOTOR Stop \n"); ioctl(dev, MOTOR_STOP, 0); break; case 6: printf("\t DEC Forward \n"); ioctl(dev, DEC_Forward, 0); break; case 7: printf("\t DEC Reverse \n"); ioctl(dev, DEC_Reverse, 0); break; default: printf("\t Unknow command... \n"); //close(dev); printf("Close program\n"); exit(2); break; } } */ while(1) { count=100; for(; count>0; count--) ioctl(dev, MOTOR_Forward, speed); wait_for(100); count=100; for(; count>0; count--) ioctl(dev, MOTOR_Reverse, speed); ioctl(dev, DEC_Reverse, speed); wait_for(150); count=100; for(; count>0; count--) ioctl(dev, MOTOR_Reverse, speed); wait_for(100); count=100; for(; count>0; count--); ioctl(dev, DEC_Forward, speed); wait_for(150); i++; speed += 10*i; if (speed>1600) {speed=800; i=0;} } ioctl(dev,5,0); } /* EOF */

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值