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

下载本文档

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

文档简介

ARM应用系统设计

应用实例佘黎煌东北大学信息科学与工程学院电子信息工程研究所应用实例LCD显示控制UCOS简介应用案例LCD显示控制LCD上的点的如何表示及控制?LCD的缓冲区(Framebuffer)是如何设置的?如何在LCD上显示一张图片?实现显示480x480的图像,24BPPFIFO1SADDR=0x3000000FIFO1COLCNT=0x1E0FIFO1ROWCNT=0x1E0FIFO1REALCOLCNT=0x1E0在480x480屏上显示240x240的图像,24BPPFIFO1SADDR=0x3001C3E0(0x30000000+4*(480*60+120)FIFO1COLCNT=0xF0FIFO1ROWCNT=0xF0FIFOSRIDE=0x3C0(240*4)FIFO1REALCOLCNT=0xF0配置帧缓冲区与FIFO的起始地址和步幅

480pixels480pixels120pixels60pixels240pixels240pixels缓冲区中的数据分布LCD显示缓冲数据格式:3210000HP1P2004HP3P4008HP5P6…16BPP配置范例(RGB)9602238359LCDTCON1=0x0013AD66LCDTCON3=0x002050013212402TFTLCD显示控制W90P710实验教学系统使用的是AUO3.0"TFTA030DL01(960×240,8位数据总线)数字式TFT液晶屏,它需要在内存中开辟出一片缓冲区,将要显示的数据先存放到缓冲区中,即存在SDRAM中,一般按照一维数组的形式进行存储然后把存储数据的SDRAM的地址送给FIFO,再送给颜色生成器,进而实现在屏幕上的显示TFTLCD显示控制LCD控制器原理LCD控制器模块图

LCD预处理程序

LCD颜色发生器LCD定时发生器LCD预处理程序

:管理两个16个字深度的FIFO。处理由CPU控制的LCD寄存器。产生LCD屏的定时(

HSYNC,VSYNC,VDEN,VCLK)信号。生成TFT或STNLCD屏上显示的RGB数据。根据由LCD寄存器定义好的帧率控制和高频振动模式进行高频振动控制。决定输出TFT或是STN类型数据。设置复用功能REG_GPIO_CFG6=0x555555;LCD的控制寄存器LCD控制器LCD中断控制器LCD预处理LCDFIFO控制颜色生成器LCD后加工LCD定时发生器LCDSRAM装入自检

通过LCD控制器设置系统LCD的信息通过LCDFIFO控制设置系统缓冲区的信息通过LCD定时发生器设置系统的刷新时序LCD的控制寄存器LCD控制器LCDCONLCD控制器的控制寄存器Read/Write读/写000hLCDFIFO控制FIFOCONLCD先进先出控制寄存器读/写020hFIFOSTATUSLCDFIFOs状态只读024hFIFO1PRMLCDFIFO1参数读/写028hFIFO2PRMLCDFIFO2参数读/写02ChFIFO1SADDRLCDFIFO1传送起始地址寄存器读/写030hFIFO2SADDRLCDFIFO2传送起始地址寄存器读/写034hFIFO1DREQCNTFIFO1数据请求传送计数寄存器读/写038hFIFO2DREQCNTFIFO2数据请求传送计数寄存器读/写03ChFIFO1CURADRFIFO1当前访问地址只读040hFIFO2CURADRFIFO2当前访问地址只读044hFIFO1RELACOLCNTFIFO1真实列计数寄存器读/写048hFIFO2RELACOLCNTFIFO2真实列计数寄存器读/写04ChREG_LCD_LCDCON=0x30c05;//tft16bpp缓冲传送的方式REG_LCD_FIFO1PRM=0xa;设定缓冲区的地址,REG_LCD_F1SADDR=(U32)Buffer;请求传送计数寄存器(大小)REG_LCD_F1DREQCNT=(Size.width<<16)+Size.height;实际传送的行点数REG_LCD_FIFO1RELACOLCNT=(Size.width);LCD的控制寄存器LCD定时发生器

LCDTCON1LCD定时控制寄存器1读/写0B0hLCDTCON2LCD定时控制寄存器2读/写0B4hLCDTCON3LCD定时控制寄存器3读/写0B8hLCDTCON4LCD定时控制寄存器4读/写0BChLCDTCON5LCD定时控制寄存器5读/写0C0hLCDTCON6LCD定时控制寄存器6只读0C4h

REG_LCD_LCDTCON1=0x3b166; REG_LCD_LCDTCON2=0x3bf00f1; REG_LCD_LCDTCON3=0x105401; REG_LCD_LCDTCON4=0x20101; REG_LCD_LCDTCON5=0xe;LCD功能的实现1.设置LCD控制寄存器,配制为TFTLCD,16bpp2.设置LCD缓冲区寄存器,配制为480*240像素3.设置显示的缓冲区,4.自动刷新显示LCD显示主函数intmain(void){ LCD_IMAGE_TLCD_Size; LCD_LOCATION_TLCD_Location; LCD_Size.width=480; LCD_Size.height=240; LCD_Location.StartX=0; LCD_Location.StartY=0; LCD_Location.EndX=960; LCD_Location.EndY=240;

LCDInit(); LCDShow(LCD_Size,LCD_Location); LCDFIFOBufferSet(image_NEU);

LCDDisplayOn(); while(1) { } return0;}voidLCDInit(void){ REG_GPIO_CFG6=0x555555;

REG_LCD_LCDCON=0x30c05;//设置为16bpp,TFTLCD控制 REG_LCD_FIFO1PRM=0xa;//设置FIFO长度为16字,每次传输1字

REG_LCD_F1DREQCNT=0x1e000f0;//设置屏大小为480*240 REG_LCD_FIFO1RELACOLCNT=0x1e0;//设置实际显示的宽度 //LCDCLK//以下为刷新的时序设置 REG_LCD_LCDTCON1=0x3b166; REG_LCD_LCDTCON2=0x3bf00f1; REG_LCD_LCDTCON3=0x105401; REG_LCD_LCDTCON4=0x20101; REG_LCD_LCDTCON5=0xe;}显示设置,位置,大小voidLCDShow(LCD_IMAGE_TSize,LCD_LOCATION_TLocation){ //设置宽度和高度的像素REG_LCD_F1DREQCNT=(Size.width<<15)+Size.height; //设置实际显示的宽度REG_LCD_FIFO1RELACOLCNT=(Size.width>>1); //设置显示起始的位置 REG_LCD_DISPWINS=(Location.StartY<<16)+Location.StartX;//设置显示结束的位置 REG_LCD_DISPWINE=(Location.EndY<<16)+Location.EndX;}显示数据的地址设置voidLCDFIFOBufferSet(PUINT8Buffer){//设置显示缓冲区的指针 REG_LCD_F1SADDR=(U32)Buffer;}将需要的显示的数据定义为数组unsignedcharimage_NEU[230400]={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,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,LCDFIFOBufferSet(image_NEU);显示一张图片提取图片的16bpp点阵数据,形成数组将该数组的首地址设置为缓冲的基地址将数组做为显示缓冲区 LCDInit(); LCDShow(LCD_Size,LCD_Location);

LCDFIFOBufferSet(gImage_1);

C/OS简介C/OS特点C/OS提供的系统服务C/OS的文件组织C/OS的多任务编程前后台系统1.3嵌入式操作系统基本概念——中断ISR任务ISR非占先操作系统任务A任务B任务CISR占先操作系统任务A任务B任务CC/OS简介

1、C/OS——MicroControllerOS,微控制器操作系统2、C/OS简介美国人JeanLabrosse1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998年C/OS-II,目前的版本C/OS-IIV2.61,2.722000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站www.ucos-II.com()公开源代码可移植性(Portable)

绝大部分

C/OS-II的源码是用移植性很强的ANSIC写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得

C/OS-II便于移植到其他微处理器上。

C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。可固化(ROMable)

C/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化),

C/OS-II可以嵌入到用户的产品中成为产品的一部分。可裁剪(Scalable)

可以只使用

C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个

C/OS-II调用,而另一个产品则使用了几乎所有

C/OS-II的功能,这样可以减少产品中的

C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。C/OS的性能特点(一)占先式(Preemptive)多任务

C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务可确定性

全部

C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈

每个任务有自己单独的栈,

C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统服务

C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理

中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性C/OS的性能特点(二)µC/OS-II图籍描述了µC/OS-II内部的工作原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版ChineseKoreanEnglishISBN1-57820-103-9美国CMPBOOKISBN7-81077-290-2北京航空航天大学出版社ISBN89-951540-5-5µC/OS-II的各种商业应用全世界有数百种产品在应用:Avionics(航空电子设备)MedicalCellphonesRoutersandswitchesHigh-endaudioequipmentWashingmachinesanddryersUPS(UninterruptiblePowerSupplies)IndustrialcontrollersGPSNavigationSystemsMicrowaveRadiosInstrumentationPoint-of-saleterminals更多µC/OS-II提供的系统服务信号量带互斥机制的信号量减少优先级倒置的问题事件标志消息信箱消息队列内存管理时钟管理任务管理µC/GUIandµC/FSµC/GUI嵌入式的用户界面用ANSIC书写支持任何8,16,32-bitsCPU彩色,灰度等级或黑白显示代码尺寸小µC/FS嵌入式的文件系统用ANSIC书写支持任何8,16,32-bitsCPU支持SMC,MMC,SD,CF,IDE,Flash,RAM其他介质C/OS-II的文件结构C/OS–II中的任务C/OS–II2.5版本支持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个优先级,用户任务仍可达56个任务状态在任一给定的时刻,任务的状态一定是以下五种状态之一:睡眠态(taskdormant)就绪态(taskready)运行态(taskrunning)等待状态(taskwaiting)中断服务态(ISRrunning)睡眠态(taskdormant)指任务驻留在程序空间(ROM或RAM),还没有交给系统来管理的状态任务交给系统通过调用以下函数之一来实现:OSTaskCreate()OSTaskCreateExt()告知系统:任务的起始地址任务建立时,用户给任务赋予的优先级任务要使用的栈空间大小等就绪态(taskready)任务一旦创建就进入就绪态,准备运行任务的创建可以是在多任务开始之前,也可以动态地由一个运行着的任务创建若刚创建任务的优先级高于创建它的任务的优先级,它将立即获得cpu的使用权任务可通过OSTaskDel()返回睡眠态;或调用该函数让另一个任务进入睡眠态运行态(taskrunning)就绪的任务只有当所有优先级高于它的任务都转为等待状态,或被删除后,才能进入运行态任何时刻只有一个任务处于运行态调用OSStart()可以启动多任务。该函数只能在启动时调用一次OSStart()运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务等待状态(taskwaiting)正在运行的任务可以通过下面的调用进入等待状态。延迟时间到,立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任务执行。OSTimeDly()OSTimeDlyHMSM()等待时间过去后,系统服务(内部)函数OSTimeTick()使延迟了的任务进入就绪态用户无需在应用程序代码中调用这个函数等待状态(续)正在运行的任务可能需要通过调用函数等待某一事件发生。如果该事件并未发生,任务就进入等待状态OSFlagPend();OSMutexPend()OSSemPend();OSMboxPend()当事件发生或等待超时,被挂起的任务就进入就绪态中断服务态(ISRrunning)正在执行的任务是可以被中断的,除非该任务将中断关闭,或系统将中断关闭。被中断的任务便进入了中断服务态响应中断后,正在运行的任务被挂起,中断服务子程序控制了CPU的使用权中断服务态(ISRrunning)中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态上述情况下,从中断服务子程序返回之前,C/OS–II

要判定:被中断的任务是否还是就绪态任务中优先级最高的如果中断服务子程序使另一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则,原来被中断了的任务将继续运行。任务状态当所有的任务都在等待时间发生或等待延迟时间结束时,C/OS–II执行被称为空闲任务(IdleTask)的内部函数,即:OSTaskIdle()任务状态任务的CPU使用权被剥夺中断恢复任务编程示例1.创建3个任务,2.主任务每隔1.5秒运行一次3.子任务1每隔1秒运行一次4.子任务2每隔2秒运行一次编程示例#defineSTACKSIZE4096OS_STKSYS_Task_Stack[STACKSIZE]={0,};#defineSYS_Task_Prio 11voidSYS_Task(void*Id);OS_STKTask1_Stack[STACKSIZE]={0,};voidTask1(void*Id);#defineTask1_Prio12OS_STKTask2_Stack[STACKSIZE]={0,};voidTask2(void*Id);#defineTask2_Prio13OSTaskCreate(SYS_Task,(void*)0,(OS_STK*)&SYS_Task_Stack[STACKSIZE-1],SYS_Task_Prio);主函数,初始化,创建主任务voidAPP_vMain(void){init_710evb(); CONSOL_Printf("startrunapp!\n"); OSInit(); OSTaskCreate(SYS_Task,(void*)0,(OS_STK*)&SYS_Task_Stack[STACKSIZE-1],SYS_Task_Prio); OSStart(); }主任务创建两个子任务voidSYS_Task(void*Id){ OSTaskCreate(Task2,(void*)0,(OS_STK*)&Task2_Stack[STACKSIZE-1],Task2_Prio); OSTaskCreate(Task1,(void*)0,(OS_STK*)&Task1_Stack[STACKSIZE-1],Task1_Prio); for(;;) { CONSOL_Printf("Main_taskisrunning.\n"); OSTimeDly(150); }}子任务设计voidTask1(void*Id){

温馨提示

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

评论

0/150

提交评论