版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM 应用系统设计应用实例佘黎煌东北大学信息科学与工程学院电子信息工程研究所应用实例nLCD显示控制nUCOS简介n应用案例LCD显示控制nLCD上的点的如何表示及控制?nLCD的缓冲区(Framebuffer)是如何设置的?n如何在LCD上显示一张图片?实现显示480 x480的图像, 24BPPFIFO1SADDR = 0 x3000000FIFO1COLCNT = 0 x1E0FIFO1ROWCNT = 0 x1E0FIFO1REALCOLCNT = 0 x1E0在480 x480屏上显示240 x240 的图像, 24BPPFIFO1SADDR = 0 x3001C3E0(0 x30
2、000000+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显示缓冲数据格式:3210000HP1P2004HP3P4008HP5P616BPP配置范例(RGB)9602238359LCDTCON1= 0 x0013AD66LCDTCON3= 0 x002050
3、013212402TFT LCD显示控制nW90P710 实验教学系统使用的是AUO 3.0 TFT A030DL01(960 240,8 位数据总线)数字式TFT 液晶屏,n它需要在内存中开辟出一片缓冲区,将要显示的数据先存放到缓冲区中,即存在SDRAM 中,一般按照一维数组的形式进行存储然后把存储数据的SDRAM 的地址送给FIFO,再送给颜色生成器,进而实现在屏幕上的显示TFT LCD显示控制LCD 控制器原理LCD 控制器模块图控制器模块图 LCD预处理程序预处理程序 LCD颜色发生器颜色发生器LCD定时发生器定时发生器LCD 预处理程序预处理程序 : 管理两个管理两个16个字深度的个
4、字深度的FIFO。处理由处理由CPU控制的控制的LCD寄存器。寄存器。产生产生LCD屏的定时屏的定时( HSYNC, VSYNC, VDEN,VCLK )信号。)信号。生成生成TFT或或STN LCD屏上显示的屏上显示的RGB数据。数据。根据由根据由LCD寄存器定义好的帧率控制和高频寄存器定义好的帧率控制和高频振动模式进行高频振动控制。振动模式进行高频振动控制。决定输出决定输出TFT或是或是STN类型数据。类型数据。设置复用功能nREG_GPIO_CFG6 = 0 x555555;LCD的控制寄存器 LCD控制器控制器 LCD中断控制器中断控制器 LCD预处理预处理 LCD FIFO控制控制n
5、颜色生成器颜色生成器 nLCD后加工后加工 nLCD定时发生器定时发生器 nLCD SRAM装入自检装入自检 通过LCD控制器设置系统控制器设置系统LCD的信息的信息通过通过LCD FIFO控制设置系统缓冲区的信息控制设置系统缓冲区的信息通过通过LCD定时发生器设置系统的刷新时序定时发生器设置系统的刷新时序LCD的控制寄存器LCDLCD控制器控制器LCDCONLCDCONLCDLCD控制器的控制寄存器控制器的控制寄存器Read/WriteRead/Write读读/ /写写000h000hLCD FIFOLCD FIFO控制控制FIFOCON LCD先进先出控制寄存器读/写020hFIFOSTA
6、TUSLCD FIFOs状态只读024hFIFO1PRMFIFO1PRMLCD FIFO1LCD FIFO1参数参数读读/ /写写028h028hFIFO2PRMLCD FIFO2参数读/写02ChFIFO1SADDRFIFO1SADDRLCD FIFO1LCD FIFO1传送起始地址寄存器传送起始地址寄存器读读/ /写写030h030hFIFO2SADDRLCD FIFO2传送起始地址寄存器读/写034hFIFO1DREQCNTFIFO1DREQCNTFIFO1FIFO1数据请求传送计数寄存器数据请求传送计数寄存器读读/ /写写038h038hFIFO2DREQCNTFIFO2数据请求传送计
7、数寄存器读/写03ChFIFO1CURADRFIFO1当前访问地址只读040hFIFO2CURADRFIFO2当前访问地址只读044hFIFO1RELACOLCNTFIFO1RELACOLCNTFIFO1 FIFO1 真实列计数寄存器真实列计数寄存器读读/ /写写048h048hFIFO2RELACOLCNTFIFO2 真实列计数寄存器读/写04ChnREG_LCD_LCDCON = 0 x30c05;/tft 16bpp缓冲传送的方式nREG_LCD_FIFO1PRM = 0 xa;设定缓冲区的地址,nREG_LCD_F1SADDR = (U32) Buffer;请求传送计数寄存器(大小)请
8、求传送计数寄存器(大小)nREG_LCD_F1DREQCNT = (Size.width 16 ) + Size.height;实际传送的行点数nREG_LCD_FIFO1RELACOLCNT = (Size.width);LCD的控制寄存器LCDLCD定时发生器定时发生器LCDTCON1LCD定时控制寄存器1读/写0B0hLCDTCON2LCD定时控制寄存器2读/写0B4hLCDTCON3LCD定时控制寄存器3读/写0B8hLCDTCON4LCD定时控制寄存器4读/写0BChLCDTCON5LCD定时控制寄存器5读/写0C0hLCDTCON6LCD定时控制寄存器6只读0C4hn REG_LC
9、D_LCDTCON1 = 0 x3b166; nREG_LCD_LCDTCON2 = 0 x3bf00f1;nREG_LCD_LCDTCON3 = 0 x105401;nREG_LCD_LCDTCON4 = 0 x20101;nREG_LCD_LCDTCON5 = 0 xe;LCD功能的实现n1.设置LCD控制寄存器,配制为TFT LCD,16bppn2.设置LCD缓冲区寄存器,配制为480*240像素n3.设置显示的缓冲区,n4.自动刷新显示LCD显示主函数nint main(void)nnLCD_IMAGE_T LCD_Size;nLCD_LOCATION_T LCD_Location;n
10、LCD_Size.width = 480;nLCD_Size.height = 240;nLCD_Location.StartX = 0;nLCD_Location.StartY = 0;nLCD_Location.EndX = 960;nLCD_Location.EndY = 240;nLCDInit();nLCDShow(LCD_Size, LCD_Location);nLCDFIFOBufferSet(image_NEU);nLCDDisplayOn();nwhile(1)nnnreturn 0;nnvoid LCDInit(void)nnREG_GPIO_CFG6 = 0 x55555
11、5;nnREG_LCD_LCDCON = 0 x30c05;/设置为16bpp,TFT LCD控制nREG_LCD_FIFO1PRM = 0 xa;/设置FIFO长度为16字,每次传输1字nnREG_LCD_F1DREQCNT = 0 x1e000f0;/设置屏大小为480*240nREG_LCD_FIFO1RELACOLCNT = 0 x1e0;/设置实际显示的宽度n/LCD CLKn/以下为刷新的时序设置nREG_LCD_LCDTCON1 = 0 x3b166; nREG_LCD_LCDTCON2 = 0 x3bf00f1;nREG_LCD_LCDTCON3 = 0 x105401;nRE
12、G_LCD_LCDTCON4 = 0 x20101;nREG_LCD_LCDTCON5 = 0 xe;n显示设置,位置,大小nvoid LCDShow(LCD_IMAGE_T Size, LCD_LOCATION_T Location)nn/设置宽度和高度的像素n REG_LCD_F1DREQCNT = (Size.width 1);n/设置显示起始的位置nREG_LCD_DISPWINS = (Location.StartY 16) + Location.StartX;n /设置显示结束的位置nREG_LCD_DISPWINE = (Location.EndY 16) + Location.
13、EndX;n显示数据的地址设置nvoid LCDFIFOBufferSet(PUINT8 Buffer)nn/设置显示缓冲区的指针nREG_LCD_F1SADDR = (U32) Buffer;n将需要的显示的数据定义为数组nunsigned char image_NEU230400 =n0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,n0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF
14、,0XFF,n0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,n0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,LCDFIFOBufferSet(image_NEU);显示一张图片n提取图片的16bpp点阵数据,形成数组n将该数组的首地址设置为缓冲的基地址将数组做为显示缓冲区LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOB
15、ufferSet(gImage_1); C/OSC/OS简介简介n C/OSC/OS特点特点n C/OSC/OS提供的系统服务提供的系统服务n C/OSC/OS的文件组织的文件组织n C/OSC/OS的多任务编程的多任务编程前后台系统1.3 嵌入式操作系统n基本概念中断ISR任务ISR非占先操作系统任务A任务B任务CISR占先操作系统任务A任务B任务C C/OSC/OS简介简介1 1、 C/OSC/OSMicro Controller O SMicro Controller O S,微控制器操作系统微控制器操作系统2、 C/OS简介简介n美国人Jean Labrosse 1992年完成n应用面
16、覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等 n1998年C/OS-II,目前的版本C/OS -II V2.61,2.72n2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中n网站www.ucos-II.com()u公开源代码u可移植性(Portable) 绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得 C/OS-II便于移植到其他微处理器上。 C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器 、数字信号处理器
17、(DSP)上运行。u可固化(ROMable) C/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化), C/OS-II可以嵌入到用户的产品中成为产品的一部分。u可裁剪(Scalable) 可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。 C/OSC/OS的性能特点(一)的性能特点(一)u占先式(Preemptive)u多任务 C/OS-I
18、I可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务u可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性。u任务栈 每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。u系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。u中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。u稳定性与可靠性 C/OSC/OS的性能特点(二)的性能特点(二
19、)C/OS-II图籍n描述了C/OS-II内部的工作原理n随书的CD中包含了源代码n工业界最清晰的源代码n除英文版外,有中文和韩文版ChineseKoreanEnglishISBN 1-57820-103-9美国CMP BOOK ISBN 7-81077-290-2北京航空航天大学出版社ISBN 89-951540-5-5C/OS-IIC/OS-II的各种商业应用的各种商业应用n全世界有数百种产品在应用全世界有数百种产品在应用: :nAvionics(航空电子设备)(航空电子设备)nMedicalnCell phonesnRouters and switchesnHigh-end audio
20、equipmentnWashing machines and dryersnUPS (Uninterruptible Power Supplies)nIndustrial controllersnGPS Navigation SystemsnMicrowave RadiosnInstrumentationnPoint-of-sale terminalsn更多C/OS-IIC/OS-II提供的系统服务提供的系统服务n信号量n带互斥机制的信号量n减少优先级倒置的问题n事件标志n消息信箱n消息队列n内存管理n时钟管理n任务管理C/GUI and C/FSnC/GUIC/GUIn嵌入式的用户界面n用A
21、NSI C书写n支持任何8, 16, 32-bits CPUn彩色,灰度等级或黑白显示n代码尺寸小nC/FSC/FSn嵌入式的文件系统n用ANSI C书写n支持任何8, 16, 32-bits CPUn支持SMC, MMC, SD, CF, IDE, Flash, RAM其他介质 C/OSC/OS-II-II的文件结构的文件结构 C/OSC/OS II II中的任务中的任务n C/OSC/OS II 2.5 II 2.5版本支持版本支持6464个任务,每个任务一个特定的优先级。个任务,每个任务一个特定的优先级。数字越小,优先级越高数字越小,优先级越高n系统总是运行进入就绪态优先级最高的任务系统
22、总是运行进入就绪态优先级最高的任务n任务优先级号就是任务编号(任务优先级号就是任务编号(IDID). .优先级号也被一些内核功能优先级号也被一些内核功能函数调用。如函数调用。如OsTaskChangePrio( )OsTaskChangePrio( )及及OsTaskDel( ).OsTaskDel( ).n系统占用了系统占用了8 8个任务个任务,保留优先级为,保留优先级为0 0、1 1、2 2、3 3、OS_LOWEST_PRIO-3OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1OS_LOWEST_PR
23、IO-1、 OS_LOWEST_PRIO-0OS_LOWEST_PRIO-0n即:建议不使用上述最高即:建议不使用上述最高4 4个和最低个和最低4 4个优先级,用户任务仍可达个优先级,用户任务仍可达5656个个任务状态任务状态n在任一给定的时刻,任务的状态一定是在任一给定的时刻,任务的状态一定是以下五种状态之一:以下五种状态之一:n睡眠态(睡眠态(task dormanttask dormant)n就绪态(就绪态(task readytask ready)n运行态(运行态(task runningtask running)n等待状态(等待状态(task waitingtask waiting)
24、n中断服务态(中断服务态(ISR running)ISR running)睡眠态(睡眠态(task dormanttask dormant)n指任务驻留在程序空间(指任务驻留在程序空间(ROMROM或或RAMRAM),还没有),还没有交给系统来管理的状态交给系统来管理的状态n任务交给系统通过调用以下函数之一来实现:任务交给系统通过调用以下函数之一来实现: nOSTaskCreateOSTaskCreate()()nOSTaskCreateExtOSTaskCreateExt()()n告知系统:告知系统:n任务的起始地址任务的起始地址n任务建立时,用户给任务赋予的优先级任务建立时,用户给任务赋予
25、的优先级n任务要使用的栈空间大小等任务要使用的栈空间大小等就绪态(就绪态(task readytask ready)n任务一旦创建就进入就绪态,准备运行任务一旦创建就进入就绪态,准备运行n任务的创建可以是在多任务开始之前,也可以任务的创建可以是在多任务开始之前,也可以动态地由一个运行着的任务创建动态地由一个运行着的任务创建n若刚创建任务的优先级高于创建它的任务的优若刚创建任务的优先级高于创建它的任务的优先级,它将立即获得先级,它将立即获得cpucpu的使用权的使用权n任务可通过任务可通过OSTaskDelOSTaskDel()返回睡眠态;或调()返回睡眠态;或调用该函数让另一个任务进入睡眠态用
26、该函数让另一个任务进入睡眠态运行态(运行态(task runningtask running)n就绪的任务只有当所有优先级高于它的任务都转为等就绪的任务只有当所有优先级高于它的任务都转为等待状态,或被删除后,才能进入运行态待状态,或被删除后,才能进入运行态n任何时刻只有一个任务处于运行态任何时刻只有一个任务处于运行态n调用调用OSStartOSStart()可以启动多任务。该函数只能在启动()可以启动多任务。该函数只能在启动时调用一次时调用一次nOSStartOSStart()运行用户初始化代码中已经建立的、进入()运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务就绪态的优先级最高
27、的任务等待状态(等待状态(task waitingtask waiting)n正在运行的任务可以通过下面的调用进入等待状态。延迟时间到,正在运行的任务可以通过下面的调用进入等待状态。延迟时间到,立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任务执行。务执行。nOSTimeDlyOSTimeDly()()nOSTimeDlyHMSMOSTimeDlyHMSM()()n等待时间过去后,系统服务(内部)函数等待时间过去后,系统服务(内部)函数OSTimeTickOSTimeTick()使延迟了()使延迟了的任务进入就绪态的任务进入就
28、绪态n用户无需在应用程序代码中调用这个函数用户无需在应用程序代码中调用这个函数等待状态(续)等待状态(续)n正在运行的任务可能需要通过调用函数等待某正在运行的任务可能需要通过调用函数等待某一事件发生。如果该事件并未发生,任务就进一事件发生。如果该事件并未发生,任务就进入等待状态入等待状态nOSFlagPendOSFlagPend();();OSMutexPendOSMutexPend()()nOSSemPendOSSemPend();();OSMboxPendOSMboxPend()()n当事件发生或等待超时,被挂起的任务就进入当事件发生或等待超时,被挂起的任务就进入就绪态就绪态中断服务态(中
29、断服务态(ISR running)ISR running)n正在执行的任务是可以被中断的正在执行的任务是可以被中断的,除非该,除非该任务将中断关闭,或系统将中断关闭。被任务将中断关闭,或系统将中断关闭。被中断的任务便进入了中断服务态中断的任务便进入了中断服务态n响应中断后,正在运行的任务被挂起,中响应中断后,正在运行的任务被挂起,中断服务子程序控制了断服务子程序控制了CPUCPU的使用权的使用权中断服务态(中断服务态(ISR running)ISR running)n中断服务子程序可能会报告一个或多个事件的发生,中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态而使一个
30、或多个任务进入就绪态n上述情况下,从中断服务子程序返回之前,上述情况下,从中断服务子程序返回之前, C/OSC/OS IIII 要判定:要判定:n被中断的任务是否还是就绪态任务中优先级最高的被中断的任务是否还是就绪态任务中优先级最高的n如果中断服务子程序使另一个优先级更高的任务进入了如果中断服务子程序使另一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则,原来被中断了的任务将继续运行。以运行;否则,原来被中断了的任务将继续运行。任务状态任务状态n当所有的任务都在等待时间发生或等待延迟时间结束时,C/OS II
31、执行被称为空闲任务(Idle Task)的内部函数,即:OSTaskIdle()任务状态任务的任务的CPU使用权使用权被剥夺被剥夺中断中断恢复恢复任务任务编程示例n1.创建3个任务,n2.主任务每隔1.5秒运行一次n3.子任务1每隔1秒运行一次n4.子任务2每隔2秒运行一次编程示例n#define STACKSIZE 4096nOS_STK SYS_Task_StackSTACKSIZE= 0, ; n#define SYS_Task_Prio11nvoid SYS_Task(void *Id);nOS_STK Task1_StackSTACKSIZE=0, ; nvoid Task1(voi
32、d *Id);n#define Task1_Prio 12nOS_STK Task2_StackSTACKSIZE= 0, ; nvoid Task2(void *Id); n#define Task2_Prio 13nOSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);主函数,初始化,创建主任务nvoid APP_vMain(void)nn init_710evb();nCONSOL_Printf(start run app!n);nOSInit();nOSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);nOSStart(); n主任务创建两个子任务nvoid SYS_Task(void *Id)n nOSTaskCreate(Task2, (void *)0, (OS_STK *)&Task2_StackSTACKSIZE-1, Task2_Prio);nOSTaskCr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025 学年成都市小学五年级语文期中基础巩固模拟卷及答案
- 2024-2025 学年成都市小学五年级地理期中模拟试卷及答案
- 高中语文必修上册同步练习 含答案3.1百合花
- 高中语文必修上册同步练习 含答案-第三单元 短歌行 归园田居(其一)
- 2025年智能制造专业试题及答案
- 2025年餐饮考试试题及答案
- 2025国考六盘水市海关监管岗位申论必刷题及答案
- 2025年下半年吉林长白山广播电视台招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林长春工程学院“绿色通道”招聘6人(8号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省长春市九台区事业单位专项招聘高校毕业生10人(2号)易考易错模拟试题(共500题)试卷后附参考答案
- 华为ICT大赛中国区(实践赛)-昇腾AI赛道往年考试真题(附答案)
- 2025年国家工作人员学法用法考试题(附答案)
- 人防防化施工方案
- 2025年南陵县县属国有企业公开招聘工作人员55人笔试考试参考试题及答案解析
- 2025年农商银行面试题目及答案
- 普通高中化学课程标准(2025年版)
- 陕西省2025年中考物理真题(AB合卷)附答案
- 2025年党员干部党规党纪知识竞赛测试题及答案(完整版)
- 股票代持协议书5篇
- 诺丁山(Notting-Hill)1999-中英对照-台词本-双栏单词标注
- 2025年无人机驾驶员(五级)理论考试题及答案
评论
0/150
提交评论