没有合适的资源?快使用搜索试试~ 我知道了~
首页S3C2440 VXWORKS移植笔记
S3C2440 VXWORKS移植笔记
4星 · 超过85%的资源 需积分: 12 44 下载量 43 浏览量
更新于2023-03-03
评论 1
收藏 484KB DOC 举报
2006年下半年,我们在自己设计的BCNG2440开发板上移植了VXWORKS。移植的过程参考了网络上一些BSP代码,与现有的代码不同的是,我们的BSP实现了内存的重映射,中断向量的重新分配;以及cache和MMU的开启。移植的目的是用于一个数据采集系统,ARM从FPGA读取解调数据,通过100M网络发送到服务器。经过测试,使用UDP发送速率达到了43Mbps,使用TCP发送速率为20Mbps。之前,我们在类似的项目中使用了MPC8260为CPU,当时TCP最高速率也只达到了20多Mbps,因此,我们认为在某些项目中使用ARM替代MPC8260是可行的。
资源详情
资源评论
资源推荐
S3C2440 VXWORKS 移植笔记
工作技术-嵌入式 2008-06-21 22:51 阅读 1297评论 15
字号: 大 中 小
2006 年下半年,我们在自己设计的 BCNG2440 开发板上移植了 VXWORKS。移植的过程参考了网络
上一些 BSP 代码,与现有的代码不同的是,我们的 BSP 实现了内存的重映射,中断向量的重新分配;以
及 cache 和 MMU 的开启。移植的目的是用于一个数据采集系统, ARM 从 FPGA 读取解调数据,通过
100M 网络发送到 服务器。经过测试 ,使用 UDP 发 送速率达到了 43Mbps,使用 TCP 发送速率 为
20Mbps。之前,我们在类似的项目中使用了 MPC8260 为 CPU,当时 TCP 最高速率也只达到了 20 多
Mbps,因此,我们认为在某些项目中使用 ARM 替代 MPC8260 是可行的。
移植的过程分为一下几个部分:
1)异常处理
2)中断
3)MMU
4)DM9000 网卡驱动
5)启动参数保存问题
6)CPU 设置
7)其他问题
异常处理问题
通常来讲,在嵌入式系统启动之初, 将从 地址处(或 处)开始执行代码,因此初始时将
映射在 (或 )地址处,当进行完必要的初始化并启动异常处理机制后,会将 映射到
(或 )地址处,而将 映射到其它地址。
这是因为发生异常时, 会跳转到 地址开始处执行异常向量表。由于 的访问速度远远高于
,因此将 映射到 地址后,可以减少异常处理的延迟时间还有其他好处,动态和灵活等。
地址重映射可通过不同的方式实现,例如 可通过重新为每个 分配地址空间来实现,
对于 ,可通过设置其独有的“”控制位来实现。
的体系结构规定在异常发生时,要从 地址开始处读取相应的处理指令,然而 的固定地
址空间管理方法在 ! 里会遇到问题。因为从硬件上讲, 的地址空间是不能重分配的,它
也不支持所谓的 功能,一旦硬件连线决定了其 基地址为 "#$, 地址上为
"#$,就无法再更改。因此必须采用其他办法来解决异常向量表的访问问题 。 ! 管理的
中异常向量表结构如下图:
对于 % 来说,不会使用到 ,访问地址 就是访问 ,因此需要将异常向量表建立在启
动 的开始处。
基本思想是在 &'!( 存储器的起始地址硬编码异常入口,仿 ) ! 建立异常向量表。异常发生时,经
&'!( 存储器入口,跳转到自定义函数,再跳转到 中异常入口,再调用 ) ! 提供的异常处理函数。
中断处理流程和中断向量表如下图示意。新异常向量表和原 ! 设计完全一样。
*
+,-./(下面是处理 +0 异常的例子,其它见源代码):
1+,-2
%/'3
%13
%14,
%1-/(
%15--
%1!)3
%1+0
%1&+0
*
11&6+6"+0$
1+02
!7!89!89:
!-3!8;9<=
*
'39>?18+0
'39@A
!-9@!89:A
'33!8;9<98/=
*
>?18+02
.'B1C1%D
*
EF/8-,!FE
:3,1C1%********
/,B./ 中定义:
:3,1C1%
!!>,./2
添加以下函数声明
),3!///-"),3$G
++5&6/-3G
++5&6/--/(-G
++5&6/-5--G
++5&6/-4,G
++5&6,--G
添加函数 !///-"$
),3!///-"),3$
<
***,-,G
***,H",-$I/-3G
F"")'-,',-F$"1C1%D$$H,G
,H",-$I/-4,G
F"")'-,',-F$"1C1%D$$H,G
,H",-$I/--/(-G
F"")'-,',-F$"1C1%D$$H,G
,H",-$I/-5--G
F"")'-,',-F$"1C1%D/$$H,G
,H",-$I,--G
F"")'-,',-F$"1C1%D$$H,G
-7G
=
在 !!J4+,-"$中调用 !///-"$
),3!!J4+,-"),3$
<
EF,!-''-(+0E,-78-!-/!8',--,B7-,FE
17/1+--/8',-H!!+--/8',-G
*
:,3+6>51+>
EF,,-,',!-(!,'3),/!FE
!!,'J4+,-"$GEF,,-,',!!,'3-!-7/-7FE
:3, EF+6>51+>FE
*
!///'+!-''"$G
!///-"$G
=
简单的描述上述代码的过程:当异常发生时,以 +0 异常为例, 指针首先跳转到 处,读取指令“%
1+0”,然后进入到1+0 函数,此函数作用是将 1C1%D 地址里面的值赋给 寄存
器(1C1%D 地址里面存放 ) ! 的 +0 处理函数 ,-- 的地址,这由 !///- 建
立),从而跳转到 ,- 函数处理 +0 异常。
1+0 函数比较复杂,其作用是将 1C1%D 地址里面的值赋给 寄存器,此段处理有一
定的技巧,先将当前寄存器的内容及 中的中断向量的地址入栈,再从堆栈中将中断向量地址装载到
,寄存器内容也从堆栈中恢复过来。
其实不经过堆栈直接将 中中断向量的地址装载到 应该也可以,但是有人在论坛中发贴说这样做
存在问题,我没有验证过,但是北理他们就是这样做的(但也通过 转了一次),除此之外我所见到的
所有 !/ 和 !/ 的 % 都是采用前面描述的做法。
*
对于 ) ! 映象,如果不采用 或者使用 但是进行平坦地址映射, 仍处于地址 ,因此
使用和 % 同样的方式处理异常向量即可,无需对代码做其他修改。但是如果通过 进行非
平坦地址映射(即 5 映射到地址 ,以加快异常处理速度, 映射到某一空闲地址处,如
),则需要在 5 起始地址处建立异常向量跳转表。
已经知道,在 ) ! 内存的 偏移处存在异常函数处理指针(由 !///-"$建立的),因此需
要在 5 起始地址处填写如下代码(反汇编后形式):
'38/9H/EF复位,此时无用,3K-/FE
'38/9H
'38/9H
'38/9H
'38/9H/
'38/9HEF保留,3K-/FE
'38/9H
'38/9HEF) ! 不使用 &+0,3K-/FE
获 取 上 面 汇 编 代 码 对 应 的 机 器 码
L9L9L9L9L9L9L9L ( 至于 为什 么 全 是
一样的数据,我也没搞很清除,估计应该是 '3 的实现机理决定的)。
将这 个 5 5 写入到 5 起始地址处即完成异常向量跳转表的创建;
在 !!>,./ 中添加函数
),3!///'+!-''"$
<
,-,G
'B //'@A H
<L9L9L9L9L9L9L9L=G
*
",HG,MG,DD$
<
F"")'-,'7!,B3'BF$">>11>>15D,F$$H//'@,AG
=
-7G
=
并在 !!J4+,-"$中调用 !///-"$
),3!!J4+,-"),3$
<
EF,!-''-(+0E,-78-!-/!8',--,B7-,FE
17/1+--/8',-H!!+--/8',-G
*
:,3+6>51+>
EF,,-,',!-(!,'3),/!FE
!!,'J4+,-"$GEF,,-,',!!,'3-!-7/-7FE
:3, EF+6>51+>FE
*
!///'+!-''"$G
!///-"$G
=
*
其他一些说明:
对于异常向量表的建立和处理,本应该由 ) ! 来完成,事实上,在 -,B./ 中的 7!+,"$函数中,
有 ,-/%!-"$和 //+,-"$函数调用,不过对于 体系的 来说,由于不存在 )/-!
B,!-,因此 ,-/%!- 实际上是一个空操作(分析汇编可看出就是一个 -7);而由于调用
//+,-"$函数时,处于 (异常函数处理指针)地址处的是 (此函数调用在 启用之前,
因此即使在 ) ! 映象中启用 并进行非平坦地址映射, 还是对应 ),因此尽管
//+,- 运行了,但是没起到实际作用,也就是没能在 5 偏移 处建立异常函数处理指针。
!///-"$ 和 中 写 入 的 异 常 向 量 编 码 ( 对 于 % 和 )4! 平 坦 地 址 映 射 ) 以 及
!///'+!-''"对于 )4! 非平坦地址映射$实际上起到了取代 //+,-"$的作用。
从 -,B./ 代码中可以看出,,-/%!-"$和 //+,-"$之后紧接着调用了 !!J4+,-"$,因此在
!!J4+,- 调用 !///- 和 !///'+!-''。
*
"更多关于异常向量的内容可参见“% 的 % 是如何调成的”以及 , 的“
C N 移植笔记”$。
中断
没有专门的中断控制器,对于中断的操作只能通过操作有限的几个寄存器实现。并且
由于不同厂家生产的不同型号的 处理器提供的中断寄存器是不一样的,因此 ) !
没有为 提供中断控制的库函数,这样一来,就需要在 % 里面自己编写中断控制程
序。
在我们的 % 里面,中断控制程序位于 !/+--'./,程序比较简单,主要是进行中断
寄存器的初始化以及实现并注册三个回调函数。但是由于中断控制实现的特殊性,有必要
说明编写 + 时要注意的问题,建议编写 + 时此节必看。
.关于中断 'E3,!'
对于 !/,'E3,!' 中断本质上就是对相应中断的掩码位进行操作(+6N 寄
存器),但是在应用程序中应该调用 ,-'"$和 ,-5,!'"$函数来实现,而不是直接操
作 +6N 寄存器。
这 是 因 为 调 用 ,-'"$ 和 ,-5,!'"$ 时 会 通 过 回 调 函 数 最 终 调 用 到
!/+->)''"$和 !/+->)'5,!'"$,从源代码中可以看见,存在一个全局变
量 !/+->)''3,它记录了当前打开和关闭的中断的情况,' 和 3,!' 操作
都是现对这个变量相应位赋值,然后将其赋给 +6N 寄存器。如果用写地址方式直接修
改 +6N 寄存器,那么下一次调用 ,-'"$或 ,-5,!'"$时会使直接修改的控制位会
到以前的情况,从而使得中断控制操作无效。
这个问题在我调试中断时遇到过,当时使用直接操作 +6N 寄存器的方式,发现外部中
断 +6OP 对应的比特位在使能后不久就被 3,!' 了,后来使用 5 跟踪执行汇编代码,
发现当执行 8,- 语句时,由于 8,- 向控制台打印信息会产生串口中断,在串口中断执行
过程中使得 +6OP 对应的比特位被 3,!' 掉,这才发现时直接操作 +6N 寄存器惹得
祸。
.带有子中断的中断操作
如串口中断等,存在发送中中断、接受中断和错误中断 个子中断。以串口中断为例,当
中断发生时,会先执行 !/+->)'/("$函数(不是很清楚这个过程,但是跟踪汇编
代码可以肯定这点),在 !/+->)'/( 里面首先将 中断的 个子中断全部
禁止掉(通过设置 +6%N 对应控制位),然后清除 65 和 +665 寄存器中相
应的比特位。接下来就进入到 +,在 + 里面,通过读取 %65 寄存器,判断当
前发生的是哪一个子中断,然后进行相应的处理并清除 %65 寄存器中相应的比特
位,最后设置 +6%N 寄存器打开需要的子中断。
从上面的流程可以看出,中断的禁止与重新打开实际上是对子中断掩码进行操作来完成的
并没有涉及到 +6N 的操作(,-'E,-5,!')。
对于其它带有子中断的中断类型,建议也按照这个方式进行处理,具体可以参考串口驱动
的相关代码。另外,由于目前不清楚其他带有子中断的中断类 型的具体情况,因此
!/+->)'/("$函数里只有串口中断处理的相关代码,其它的情况暂时留空,如果
需要编写相应的 +,切记完善 !/+->)'/("$函数。
.外部中断 +61P 和 +61
在 +6N、+665 和 65 寄存器里面,外部中断 +61P 和 +61 分别只对
应一个控制位,然后在 +6N、+665 再对具体是那一个外部中断进行处理。
与带有子中断的中断操作的中断操作类似,当某一外部中断产生时(以 +6 为例),先
执 行 !/+->)'/("$ 函数 , 在 !/+->)'/( 里 面首 先 将 +6N 中
+6~+6P 对应的控制位全部禁止掉,然后清除 65 和 +665 寄存器中相应的
比特位。接下来在 + 里面进行了需要的操作之后,清除 +665 寄存器相应比特位,
然后设置 +6N 以打开 +6 的中断。
目前的操作是针对 +61P 或 +61 中仅有一个外部中断发生的情况。以 +61P 为
剩余55页未读,继续阅读
lu56818786
- 粉丝: 0
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1