完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
2个回答
|
|
本系统利用BF533的PPI接口采集数字图像,利用芯片的EBIU总线,扩展SDRAM和网络芯片。BF533工作在600MHz频率,单个芯片即可完成对运动目标跟踪和网络传输等功能。基于BF533的嵌入式系统的外围电路主要可分为三个部分:图像采集部分,网络传输部分,存储器部分。系统硬件框图如图1:
图1 系统硬件框图 图像采集电路部分采用了TI公司的TVP5150A型视频解码芯片,它将NTSC/PAL/SECAM制式的视频信号转换成8bits的ITU-656格式,并按照YCbCr格式以4:2:2的比例转化成数字信号,支持两路模拟输入,解码芯片通过I2C串行接口编程。 网络传输部分采用LAN91C111芯片。这是SMSC公司为嵌入式应用系统推出的第三代快速以太网控制器。本系统中,LAN91C111被当作了是异步存储空间,利用AMS3把它映射在BF533的0x20300000地址空间。这样就可以通过DMA操作实现对 LAN91C111内部存储空间读写操作,提高了传输效率并使复杂的网络数据传输过程简单化。 存储器部分BF533的存储结构是统一的4GB寻址空间。同步存储器、异步存储器、外设存储空间和片内存储器全部统一映射在4GB的空间。BF533的EBIU接口中有专门的SDRAM控制单元SDC,可以和SDRAM无缝连接。BF533支持的SDRAM地址是从 0x00000000到0x08000000的空间,最大128MB。本系统中使用MICRON公司的MT48LC系列SDRAM,存储空间32MB,用于存储图像处理中的中间结果。另外,BF533支持四块连续的异步存储空间,每块空间大小为1MB,地址从0x20000000到0x20400000,由相应的AMS0-AMS3引脚选择使能。本系统使用的是ST公司的M29W系列FLASH,大小1MB。由AMS0片选使能,映射在BF533的第一块异步存储空间。 |
|
|
|
2 ucos-ii的移植
ucos-ii是一种具有可剥夺实时内核的实时操作系统,而且是免费公开源代码、结构小巧。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。最小内核可编译至2KB,适合小型控制系统。与CPU 硬件相关的部分用汇编语言编写,其他绝大部分代码采用C语言编写。ucos-ii在硬件平台上的移植主要分为两大步骤:ucos-ii中与处理器相关的程序的修改、应用程序的添加。 2.1 ucos-ii与嵌入式监控系统的软硬件架构 所有的嵌入式操作系统都是与CPU密切相关的,做移植前需要熟悉被移植CPU平台的硬件架构和ucos-ii的运行原理,图2是ucos-ii与本嵌入式监控系统的软硬件架构。 图2 系统架构图 2.2 基于BF533的ucos-ii的移植 移植ucos-ii需要理解处理器及C编译器的威廉希尔官方网站 细节。处理器和编译器满足了ucos-ii的要求,并且已经有了必要工具。移植工作通常包括以下几个内容: A 用#define设置一个常量的值(OS_CPU.H); B 声明10个数据类型(OS_CPU.H); C 用#define声明三个宏(OS_CPU.H); D 用C语言编写六个简单的函数(OS_CPU_C.C); E 编写四个汇编语言函数(OS_CPU_A.ASM); 针对不同的CPU平台,移植ucos-ii的过程也会有稍许不同。在本系统中,移植过程大致分为两大部分:1)修改部分文件使ucos-ii与 DSP能够实现良好的接口(主要指ucos-ii对DSP硬件架构的支持);2)添加针对嵌入式监控系统硬件平台的初始化及驱动代码。 2.2.1 针对BF533的ucos-ii的代码修改 由于BF533是基于MSA(微信号架构)的16位定点DSP,为了能与ucos-ii数据处理单位统一,需要在OS_CPU.H文件中设置BF533的数据单元长度。部分宏定义代码如下: typedef bool BOOLEAN; typedef signed char INT8S; typedef signed short int INT16S; typedef signed int INT32S; 另外在OS_CPU.H文件中还需设置几个堆栈的参数如堆栈的增长方向、堆栈的操作单位等。BF533支持的是自顶向下的堆栈增长方式,即堆栈空间从高地址向低地址增长。单次堆栈操作单位是INT32U。最后在OS_CPU.H还要对三个函数进行宏定义:屏蔽所有中断,恢复所有中断,进行任务切换。这三个函数在ucos-ii中十分重要,前两个是为了保证一些重要函数或任务运行中的数据不会被改变(即通常所说的代码临界段),第三个是用于ucos-ii的任务切换,在ucos-ii中要求任务的切换就好象是刚发生过一次中断一样。在本系统中首先假设申请切换的任务已经把相关的寄存器变量等参数保存,并将堆栈指针指向了优先级高的任务。这样任务切换函数就只需要完成中断返回操作。 开发软件采用VisualDSP++,它的编译器支持在C语言中嵌入汇编,因此我们把这个宏定义直接写成了一条软件中断指令:raise 14。这样一旦系统进行任务切换,实际上引起了一个中断操作,在 OS_CPU_A.ASM文件中我们在此中断操作中完成任务切换前的保存寄存器等工作,最后是一条中断返回指令:RTS。这样优先级更高的任务运行时就会好像刚从中断返回一样。 在文件OS_CPU_A.ASM中还需要编写几个汇编函数来实现ucos-ii的时钟节拍、正常任务切换、中断级任务切换、初始化任务堆栈等功能。 在ucos-ii中,我们可以把时钟节拍TICKS比做是它的心脏节拍。TICKS为系统提供了一个时间基准并为各个任务提供了时间等待等服务。本系统使用BF533的核心定时器来完成系统时钟节拍的功能。系统TICKS设定的是100mS。以下是部分初始化核心定时器的汇编代码: _CoreTimerInit: p1.H = ( TCNTL >>16 ); //设置时间控制寄存器 p1.L = ( TCNTL &0xFFFF ); r3 = 1; [ p1 ] = r3; p1.H = ( TCOUNT >>16 ); //装载计数值 |
|
|
|
只有小组成员才能发言,加入小组>>
798 浏览 0 评论
1155 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1086浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 10:02 , Processed in 1.145397 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号