应用系统设计(东北大学嵌入式课件)_第1页
应用系统设计(东北大学嵌入式课件)_第2页
应用系统设计(东北大学嵌入式课件)_第3页
应用系统设计(东北大学嵌入式课件)_第4页
应用系统设计(东北大学嵌入式课件)_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARM 应用(yngyng)系统设计应用(yngyng)实例佘黎煌东北大学信息科学(xn x k xu)与工程学院电子信息工程研究所共七十八页应用(yngyng)实例LCD显示控制UCOS简介(jin ji)应用案例共七十八页LCD显示(xinsh)控制LCD上的点的如何表示及控制(kngzh)?LCD的缓冲区(Framebuffer)是如何设置的?如何在LCD上显示一张图片?共七十八页实现(shxin)显示(xinsh)480 x480的图像, 24BPPFIFO1SADDR = 0 x3000000FIFO1COLCNT = 0 x1E0FIFO1ROWCNT = 0 x1E0FIFO1R

2、EALCOLCNT = 0 x1E0在480 x480屏上显示240 x240 的图像, 24BPPFIFO1SADDR = 0 x3001C3E0(0 x30000000+4*(480*60+120)FIFO1COLCNT = 0 xF0FIFO1ROWCNT = 0 xF0FIFOSRIDE = 0 x3C0 (240*4)FIFO1REALCOLCNT = 0 xF0配置帧缓冲区与FIFO的起始地址和步幅 480 pixels480 pixels120 pixels60 pixels240 pixels240 pixels共七十八页缓冲区中的数据分布LCD显示(xinsh)缓冲数据格式:

3、3210000HP1P2004HP3P4008HP5P616BPP共七十八页配置(pizh)范例(RGB)9602238359LCDTCON1= 0 x0013AD66LCDTCON3= 0 x002050013212402共七十八页TFT LCD显示(xinsh)控制W90P710 实验教学系统使用的是AUO 3.0 TFT A030DL01(960 240,8 位数据总线)数字式TFT 液晶屏,它需要(xyo)在内存中开辟出一片缓冲区,将要显示的数据先存放到缓冲区中,即存在SDRAM 中,一般按照一维数组的形式进行存储然后把存储数据的SDRAM 的地址送给FIFO,再送给颜色生成器,进而实

4、现在屏幕上的显示共七十八页TFT LCD显示(xinsh)控制共七十八页LCD 控制器原理(yunl)LCD 控制器模块(m kui)图 LCD预处理程序 LCD颜色发生器LCD定时发生器LCD 预处理程序 : 管理两个16个字深度的FIFO。处理由CPU控制的LCD寄存器。产生LCD屏的定时( HSYNC, VSYNC, VDEN,VCLK )信号。生成TFT或STN LCD屏上显示的RGB数据。根据由LCD寄存器定义好的帧率控制和高频振动模式进行高频振动控制。决定输出TFT或是STN类型数据。共七十八页共七十八页设置(shzh)复用功能REG_GPIO_CFG6 = 0 x555555;共

5、七十八页LCD的控制(kngzh)寄存器LCD控制器LCD中断控制器LCD预处理 LCD FIFO控制颜色生成器 LCD后加工 LCD定时发生器 LCD SRAM装入自检 通过LCD控制器设置系统(xtng)LCD的信息通过LCD FIFO控制设置系统缓冲区的信息通过LCD定时发生器设置系统的刷新时序共七十八页LCD的控制(kngzh)寄存器LCD控制器LCDCONLCD控制器的控制寄存器Read/Write读/写000hLCD FIFO控制FIFOCON LCD先进先出控制寄存器读/写020hFIFOSTATUSLCD FIFOs状态只读024hFIFO1PRMLCD FIFO1参数读/写0

6、28hFIFO2PRMLCD FIFO2参数读/写02ChFIFO1SADDRLCD FIFO1传送起始地址寄存器读/写030hFIFO2SADDRLCD FIFO2传送起始地址寄存器读/写034hFIFO1DREQCNTFIFO1数据请求传送计数寄存器读/写038hFIFO2DREQCNTFIFO2数据请求传送计数寄存器读/写03ChFIFO1CURADRFIFO1当前访问地址只读040hFIFO2CURADRFIFO2当前访问地址只读044hFIFO1RELACOLCNTFIFO1 真实列计数寄存器读/写048hFIFO2RELACOLCNTFIFO2 真实列计数寄存器读/写04Ch共七十

7、八页REG_LCD_LCDCON = 0 x30c05;/tft 16bpp共七十八页缓冲(hunchng)传送的方式REG_LCD_FIFO1PRM = 0 xa;共七十八页设定(sh dn)缓冲区的地址,REG_LCD_F1SADDR = (U32) Buffer;共七十八页请求传送计数(j sh)寄存器(大小)REG_LCD_F1DREQCNT = (Size.width 16 ) + Size.height;共七十八页实际(shj)传送的行点数REG_LCD_FIFO1RELACOLCNT = (Size.width);共七十八页LCD的控制(kngzh)寄存器LCD定时发生器LCDT

8、CON1LCD定时控制寄存器1读/写0B0hLCDTCON2LCD定时控制寄存器2读/写0B4hLCDTCON3LCD定时控制寄存器3读/写0B8hLCDTCON4LCD定时控制寄存器4读/写0BChLCDTCON5LCD定时控制寄存器5读/写0C0hLCDTCON6LCD定时控制寄存器6只读0C4h REG_LCD_LCDTCON1 = 0 x3b166; REG_LCD_LCDTCON2 = 0 x3bf00f1;REG_LCD_LCDTCON3 = 0 x105401;REG_LCD_LCDTCON4 = 0 x20101;REG_LCD_LCDTCON5 = 0 xe;共七十八页LCD

9、功能(gngnng)的实现1.设置LCD控制寄存器,配制为TFT LCD,16bpp2.设置LCD缓冲区寄存器,配制为480*240像素(xin s)3.设置显示的缓冲区,4.自动刷新显示共七十八页LCD显示(xinsh)主函数int main(void)LCD_IMAGE_T LCD_Size;LCD_LOCATION_T LCD_Location;LCD_Size.width = 480;LCD_Size.height = 240;LCD_Location.StartX = 0;LCD_Location.StartY = 0;LCD_Location.EndX = 960;LCD_Loca

10、tion.EndY = 240;LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(image_NEU);LCDDisplayOn();while(1)return 0;共七十八页void LCDInit(void)REG_GPIO_CFG6 = 0 x555555;REG_LCD_LCDCON = 0 x30c05;/设置为16bpp,TFT LCD控制REG_LCD_FIFO1PRM = 0 xa;/设置FIFO长度为16字,每次传输1字REG_LCD_F1DREQCNT = 0 x1e000f0;/设置屏大小为480*24

11、0REG_LCD_FIFO1RELACOLCNT = 0 x1e0;/设置实际(shj)显示的宽度/LCD CLK/以下为刷新的时序设置REG_LCD_LCDTCON1 = 0 x3b166; REG_LCD_LCDTCON2 = 0 x3bf00f1;REG_LCD_LCDTCON3 = 0 x105401;REG_LCD_LCDTCON4 = 0 x20101;REG_LCD_LCDTCON5 = 0 xe;共七十八页显示设置(shzh),位置,大小void LCDShow(LCD_IMAGE_T Size, LCD_LOCATION_T Location)/设置宽度和高度的像素 REG_

12、LCD_F1DREQCNT = (Size.width 1);/设置显示起始的位置REG_LCD_DISPWINS = (Location.StartY 16) + Location.StartX; /设置显示结束的位置REG_LCD_DISPWINE = (Location.EndY 16) + Location.EndX;共七十八页显示数据的地址(dzh)设置void LCDFIFOBufferSet(PUINT8 Buffer)/设置显示(xinsh)缓冲区的指针REG_LCD_F1SADDR = (U32) Buffer;共七十八页将需要(xyo)的显示的数据定义为数组unsigned

13、 char image_NEU230400 =0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X

14、FF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,LCDFIFOBufferSet(image_NEU);共七十八页显示(xinsh)一张图片提取图片的16bpp点阵数据,形成数组将该数组的首地址(dzh)设置为缓冲的基地址(dzh)共七十八页共七十八页共七十八页共七十八页共七十八页共七十八页共七十八页共七十八页将数组做为显示(xinsh)缓冲区LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(gImage_1);共七十八页C/OS简介(jin ji)C/OS特点C/OS提供(tgng)的系

15、统服务C/OS的文件组织C/OS的多任务编程共七十八页前后台系统1.3 嵌入式操作系统基本概念中断(zhngdun)ISR任务ISR非占先操作系统任务A任务B任务CISR占先操作系统任务A任务B任务C共七十八页C/OS简介(jin ji)1、C/OSMicro Controller O S,微控制器操作系统2、 C/OS简介美国人Jean Labrosse 1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动(zdng)提款机等 1998年C/OS-II,目前的版本C/OS -II V2.61,2.722000年,得到美国航空管理局(FAA)的认

16、证,可以用于飞行器中网站www.ucos-II.com()共七十八页公开源代码可移植性(Portable) 绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经(y jing)压到最低限度,使得 C/OS-II便于移植到其他微处理器上。 C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器 、数字信号处理器(DSP)上运行。可固化(ROMable) C/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化), C/OS-II可以嵌入到用户的产品中成为产品的一

17、部分。可裁剪(Scalable) 可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。C/OS的性能(xngnng)特点(一)共七十八页占先式(Preemptive)多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈 每个任务有自己单独的栈, C/OS-I

18、I允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求(xqi)。系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性C/OS的性能(xngnng)特点(二)共七十八页C/OS-II图籍(tj)描述了C/OS-II内部的工作(gngzu)原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版ChineseKoreanEnglishISBN 1-

19、57820-103-9美国CMP BOOK ISBN 7-81077-290-2北京航空航天大学出版社ISBN 89-951540-5-5共七十八页C/OS-II的各种商业(shngy)应用全世界有数百种产品在应用(yngyng):Avionics(航空电子设备)MedicalCell phonesRouters and switchesHigh-end audio equipmentWashing machines and dryersUPS (Uninterruptible Power Supplies)Industrial controllersGPS Navigation System

20、sMicrowave RadiosInstrumentationPoint-of-sale terminals更多共七十八页C/OS-II提供(tgng)的系统服务信号量带互斥机制的信号量减少优先级倒置的问题事件标志消息信箱(xnxing)消息队列内存管理时钟管理任务管理共七十八页C/GUI and C/FSC/GUI嵌入式的用户界面用ANSI C书写支持任何8, 16, 32-bits CPU彩色(cis),灰度等级或黑白显示代码尺寸小C/FS嵌入式的文件系统用ANSI C书写支持任何8, 16, 32-bits CPU支持SMC, MMC, SD, CF, IDE, Flash, RAM其

21、他介质共七十八页C/OS-II的文件(wnjin)结构共七十八页C/OS II中的任务(rn wu)C/OS II 2.5版本(bnbn)支持64个任务,每个任务一个特定的优先级。数字越小,优先级越高系统总是运行进入就绪态优先级最高的任务任务优先级号就是任务编号(ID).优先级号也被一些内核功能函数调用。如OsTaskChangePrio( )及OsTaskDel( ).系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO-0即:建议不使用上述最高4个和最低4个优

22、先级,用户任务仍可达56个共七十八页任务(rn wu)状态在任一给定的时刻,任务的状态一定是以下五种状态之一:睡眠态(task dormant)就绪态(task ready)运行态(task running)等待状态(task waiting)中断(zhngdun)服务态(ISR running)共七十八页睡眠(shumin)态(task dormant)指任务驻留在程序空间(ROM或RAM),还没有(mi yu)交给系统来管理的状态任务交给系统通过调用以下函数之一来实现: OSTaskCreate()OSTaskCreateExt()告知系统:任务的起始地址任务建立时,用户给任务赋予的优先级

23、任务要使用的栈空间大小等共七十八页就绪(jix)态(task ready)任务一旦(ydn)创建就进入就绪态,准备运行任务的创建可以是在多任务开始之前,也可以动态地由一个运行着的任务创建若刚创建任务的优先级高于创建它的任务的优先级,它将立即获得cpu的使用权任务可通过OSTaskDel()返回睡眠态;或调用该函数让另一个任务进入睡眠态共七十八页运行(ynxng)态(task running)就绪(jix)的任务只有当所有优先级高于它的任务都转为等待状态,或被删除后,才能进入运行态任何时刻只有一个任务处于运行态调用OSStart()可以启动多任务。该函数只能在启动时调用一次OSStart()运行

24、用户初始化代码中已经建立的、进入就绪态的优先级最高的任务共七十八页等待(dngdi)状态(task waiting)正在运行(ynxng)的任务可以通过下面的调用进入等待状态。延迟时间到,立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任务执行。OSTimeDly()OSTimeDlyHMSM()等待时间过去后,系统服务(内部)函数OSTimeTick()使延迟了的任务进入就绪态用户无需在应用程序代码中调用这个函数共七十八页等待(dngdi)状态(续)正在运行的任务可能需要通过调用函数等待某一事件发生。如果(rgu)该事件并未发生,任务就进入等待状态OSFlagPend();OSMut

25、exPend()OSSemPend();OSMboxPend()当事件发生或等待超时,被挂起的任务就进入就绪态共七十八页中断(zhngdun)服务态(ISR running)正在执行的任务是可以(ky)被中断的,除非该任务将中断关闭,或系统将中断关闭。被中断的任务便进入了中断服务态响应中断后,正在运行的任务被挂起,中断服务子程序控制了CPU的使用权共七十八页中断(zhngdun)服务态(ISR running)中断服务子程序可能会报告一个或多个(du )事件的发生,而使一个或多个(du )任务进入就绪态上述情况下,从中断服务子程序返回之前,C/OS II 要判定:被中断的任务是否还是就绪态任务

26、中优先级最高的如果中断服务子程序使另一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则,原来被中断了的任务将继续运行。共七十八页任务(rn wu)状态当所有(suyu)的任务都在等待时间发生或等待延迟时间结束时,C/OS II 执行被称为空闲任务(Idle Task)的内部函数,即:OSTaskIdle()共七十八页任务(rn wu)状态任务(rn wu)的CPU使用权被剥夺中断恢复任务共七十八页编程示例(shl)1.创建3个任务(rn wu),2.主任务每隔1.5秒运行一次3.子任务1每隔1秒运行一次4.子任务2每隔2秒运行一次共七十八页编程示例(shl)

27、#define STACKSIZE 4096OS_STK SYS_Task_StackSTACKSIZE= 0, ; #define SYS_Task_Prio11void SYS_Task(void *Id);OS_STK Task1_StackSTACKSIZE=0, ; void Task1(void *Id);#define Task1_Prio 12OS_STK Task2_StackSTACKSIZE= 0, ; void Task2(void *Id); #define Task2_Prio 13OSTaskCreate(SYS_Task, (void *)0, (OS_STK

28、*)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);共七十八页主函数(hnsh),初始化,创建主任务void APP_vMain(void) init_710evb();CONSOL_Printf(start run app!n);OSInit();OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);OSStart(); 共七十八页主任务(rn wu)创建两个子任务(rn wu)void SYS_Task(void *Id) OSTas

29、kCreate(Task2, (void *)0, (OS_STK *)&Task2_StackSTACKSIZE-1, Task2_Prio);OSTaskCreate(Task1, (void *)0, (OS_STK *)&Task1_StackSTACKSIZE-1, Task1_Prio);for (;)CONSOL_Printf(Main_task is running.n);OSTimeDly(150);共七十八页子任务(rn wu)设计void Task1(void *Id) for(;)CONSOL_Printf(tTask1 is runningn);OSTimeDly(1

30、00);void Task2(void *Id)for (;)CONSOL_Printf(ttTask2 is runningn);OSTimeDly(200);共七十八页共七十八页应用(yngyng)案例国家税控收款机数码相框远程(yunchng)监控系RFID 读写器共七十八页国家(guji)税控收款机国家税控收款机的标准已经颁布。国家为了更好地控制税收,减少偷税漏税,必然会采取强制措施推广税控收款机的使用。因此,税控收款机的市场(shchng)是非常巨大的。共七十八页国家(guji)税控收款机共七十八页国家(guji)税控收款机共七十八页数码(shm)相框随着数码相机和具有高像素拍照手机的普及,除了用计算机硬盘、可移动存储设备来保存及重播照片以外,很少有人会考虑用原始的冲印照片的方法来保存这些照片,浪费金钱不说,传统(chuntng)的相册和相框也无法保存如此

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论