ucos操作系统在ARM上的移植

合集下载

实操性最强:uCOS-II移植到STM32上的详细步骤;

实操性最强:uCOS-II移植到STM32上的详细步骤;

前言:说点废话,网上有很多关于uCOS-ii移植的文章,好多都是千篇一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。

这方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下来,也给大家做做参考。

首先,简单总结一下移植的大概过程:(1)去uC/OS-ii官网下载你要移植芯片CPU的相关案例,不一定完全对应,那就找相应系列吧。

(2)编程环境一般有两种,分别是IAR和MDK,这个根据你自己的编程环境进行下载。

(3)本案例需要将uC/OS-II 移植到STM32F103ZET6上,而我使用的编程环境是MDK,很遗憾,官网上提供的案例是基于IAR的,所以要基于IAR的案例进行更改。

(4)使用MDK创建一个无操作系统的最简单程序,确保这个程序能够使用,这样做的目的是为了一步步的排查错误,假如无操作系统时,都有错误,移植过程中也肯定会有编译错误,那么在排查错误的时候也就增加了难度,不会写物操作系统的简单程序怎么办。

那就不要往下看了。

(5)移植的最大的改动主要有两部分,一个是一些头文件的增减,另外一个就是向量表中PendSV_Handler和SysTick_Handler的修改。

这里我要吐槽一下,网上说了一大堆关于什么OS_CPU.H的更改还有各种函数的的分析,这都是扯淡。

这些根本就不用移植者去修改,官网提供的案例都已经提供了,除非你选择移植的CPU是比较偏的,那么这些东西需要移植者自己去编写。

好了,下面就开始详细的记录怎么去移植。

一、创建一个无操作系统的简单裸板系统1.创建源文件工程文件夹,如下图所示:其中文件夹“CMSIS”为内核的接口,包含的文件如下图文件夹STM32_StdPeriph为固件驱动文件夹,这个把STM32的固件全都添加进去即可。

文件夹User为其他文件,如下图所示:文件夹Output和List主要是放那些编译产生的乱七八糟的文件,为了使工程代码更加简洁。

ucosiii移植原理

ucosiii移植原理

ucosiii移植原理
uCOSIII(MicroC/OS-III)是一款开源的实时操作系统(RTOS),适用于各种嵌入式系统和实时应用。

uCOSIII的移植原理主要包括以下几个方面:
1. 硬件抽象层(HAL):首先,需要针对特定硬件平台(如STM32、ARM、AVR等)编写硬件抽象层代码。

硬件抽象层的作用是将硬件平台的特性和接口抽象成统一的、易于操作的接口,以便于上层应用程序和实时操作系统进行调用。

2. 移植uCOSIII内核:将uCOSIII内核代码移植到目标硬件平台,主要包括以下几个步骤:
a. 配置uCOSIII内核:根据目标硬件平台的特性,配置uCOSIII内核的参数,如内存大小、任务数量等。

b. 修改内核代码:根据目标硬件平台的实际情况,修改内核代码,以适应不同硬件平台的需求。

这可能包括:修改内存管理代码、时钟管理代码、中断处理代码等。

c. 编写初始化代码:编写初始化代码,用于在系统启动时初始化
内核及其相关组件。

3. 移植uCOSIII的应用实例:根据项目需求,编写基于uCOSIII的应用实例。

这可能包括:编写驱动程序、编写通信协议、编写应用程序等。

4. 集成测试:将编写好的硬件抽象层、内核及应用实例集成到一起,进行系统测试和调试,确保整个系统的稳定性和可靠性。

5. 优化与调试:根据实际运行情况,对系统进行优化和调试,以提高系统的性能和资源利用率。

总之,uCOSIII的移植原理主要包括硬件抽象层的编写、uCOSIII内核的移植、应用实例的编写、集成测试以及优化与调试。

通过这些步骤,可以将uCOSIII成功移植到不同的硬件平台,并应用于各种实时系统。

Ucos移植方法一(详细篇)

Ucos移植方法一(详细篇)

Ucos移植方法一(详细篇)首先要有正确的硬件电路,包括:1.用9针串口线将PC机和9200底版连接好,注意串口线要插在标号为“P1”的串口上;2.插好9200核心板,“J2”插在靠近C18这边;3.其它跳线配置为:J13,J16要插好,JP1插在靠近C14这边,J12插在靠近C22这边;上电后超级终端的现象为:提醒:在测试状态下,上图中内核默认自动运行时间是3S,所以您要在板启动后按一下任意键,防止进入自动运行状态。

在Uboot>后输入:load 20000000后按回车现象如下:点击右键选择要下载的bin文件,过程如下图(文件目录:AT91RM9200-uCos/MainFun/basic.bin)然后点击“发送”,发送过程如下图发送完后入下图所示,在Uboot >后输入“go 20000000”后按回车,运行过程如下图这就是在超级终端上显示的效果,要说明的是,上图中红色框里的数字是连续输出的,直到关闭电源后就不连续输出。

而且在停止运行后一定要先复位在接着运行...................Ucos移植方法二其实上面是将源程序编译后的bin文件直接下载到RAM中运行的,现在利用JTAG/ICE来进行仿真,必备的条件如下:1.9针串口插在底版上标号为“P1”的串口插座上,25针并口线一头插在PC机并口,另一头插在JTAG/ICE转换器上,JTAG/ICE转换器的排线一头插在底版上标号为“J22”20Pins槽上,另一头插在JTAG/ICE转换器的的右边即靠近SN74HC244 10脚这边;2.将底版上标号为“J23”的跳线跳到靠近J5这边;3.核心板上标号“J2”的跳线跳到靠近“C18”的这边;4.底版上其它跳线配置为:J13,J16要插好,JP1插在靠近C14这边,J12插在靠近C22这边;5.9V电源线(最好用我公司提供的专用产品)插在标号为“JACK1”的DC插座上。

当您上电后ARM9调试代理软件9200超级终端的显示内容和电路板上的现象如下图所示的话就说明连接正确:⑴.底版核心板的现象为:电源指示灯(D8)核心板指示灯(LED1)亮着,网口指示灯(D5~D7)同时闪烁一下;⑵.ARM9调试代理软件9200超级终端的显示内容:利用ARM Developer Suite V 1.2软件将源程序汇编和编译(会生成一个bin 文件),如下图 文件目录为:AT91RM9200-uCos /MainFun / basic.mcp同时在超级终端里显示的内容如下图:这就是在超级终端上显示的效果,要说明的是,上图中红色框里的数字是连续输出的,直到关闭电源后就不连续输出。

手把手教你移植uCOS-III到STM32

手把手教你移植uCOS-III到STM32

手把手教你移植uCOS-III到STM32作者:谭建裕时间:2015年8月27日1、建立工程文件夹1.1在uCOS-III中添加如下文件夹1.2在Libraries文件夹中放入STM32的库,这点不必多说了。

1.3在USER文件夹中放入2、复制文件2.1将Micrium(uCOS-IIIV3.03)\Software\uCOS-III\Cfg\Template里的os_app_hooks.c;os_app_hooks.h;os_cfg.h;os_cfg_app.h复制到Cfg文件夹。

2.2将Micrium(uCOS-IIIV3.03)\Software\uCOS-III\Ports\ARM-Cortex-M3\Generic\IAR里的os_cpu.h;os_cpu_a.s;os_cpu_c.c文件复制到Ports文件夹中。

2.3将Micrium(uCOS-IIIV3.03)\Software\uCOS-III\Source里面的所有文件复制到Source文件夹中。

2.4将Micrium(uCOS-IIIV3.03)\Software\uC-CPU里面的cpu_core.c;cpu_core.h;cpu_def.h复制到uC-CPU文件夹中。

2.5将Micrium(uCOS-IIIV3.03)\Software\uC-CPU\ARM-Cortex-M3\IAR文件夹中的cpu.h;cpu_a.s;cpu_c.c复制到uC-CPU文件夹中。

2.6将Micrium(uCOS-IIIV3.03)\Software\uC-CPU\Cfg\Template里的cpu_cfg.h复制到uC-CPU文件夹中。

2.7将Micrium(uCOS-IIIV3.03)\Software\uC-LIB里面的lib_ascii.c;lib_ascii.h;lib_def.h;lib_def.h;lib_math.c;lib_math.h;lib_mem.c;lib_mem.h;lib_str.c;lib_str.h复制到uC-LIB文件夹中。

北航ARM9实验报告:实验3uCOS-II实验

北航ARM9实验报告:实验3uCOS-II实验

北航ARM9实验报告:实验3uCOS-II实验北航 ARM9 实验报告:实验 3uCOSII 实验一、实验目的本次实验的主要目的是深入了解和掌握 uCOSII 实时操作系统在ARM9 平台上的移植和应用。

通过实际操作,熟悉 uCOSII 的任务管理、内存管理、中断处理等核心机制,提高对实时操作系统的理解和应用能力,为后续的嵌入式系统开发打下坚实的基础。

二、实验环境1、硬件环境:ARM9 开发板、PC 机。

2、软件环境:Keil MDK 集成开发环境、uCOSII 源代码。

三、实验原理uCOSII 是一个可裁剪、可剥夺型的多任务实时内核,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

其基本原理包括任务管理、任务调度、时间管理、内存管理和中断管理等。

任务管理:uCOSII 中的任务是一个独立的执行流,每个任务都有自己的堆栈空间和任务控制块(TCB)。

任务可以处于就绪、运行、等待、挂起等状态。

任务调度:采用基于优先级的抢占式调度算法,始终让优先级最高的就绪任务运行。

时间管理:通过系统时钟节拍来实现任务的延时和定时功能。

内存管理:提供了简单的内存分区管理和内存块管理机制。

中断管理:支持中断嵌套,在中断服务程序中可以进行任务切换。

四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM9 芯片型号,并配置相关的编译选项。

2、导入 uCOSII 源代码将 uCOSII 的源代码导入到工程中,并对相关的文件进行配置,如设置任务堆栈大小、系统时钟节拍频率等。

3、编写任务函数根据实验要求,编写多个任务函数,每个任务实现不同的功能。

4、创建任务在主函数中使用 uCOSII 提供的 API 函数创建任务,并设置任务的优先级。

5、启动操作系统调用 uCOSII 的启动函数,使操作系统开始运行,进行任务调度。

6、调试与测试通过单步调试、查看变量值和输出信息等方式,对系统的运行情况进行调试和测试,确保任务的执行符合预期。

uCOS-Ⅱ在ARM7上的移植

uCOS-Ⅱ在ARM7上的移植
33寄 存 器 组 织 -
A M微处理器共有 3 R 7个 3 2位 的寄 存 器 ,其 中 3 个 为 通 用 1 寄 存 器 。 为 状 态 寄存 器 。但 是 这 些 寄 存 器 不 能 被 同时 访 问 , 6个 具 体 哪 些 寄 存 器 是 可 编程 访 问 的 . 决 于 微 处 理 器 的工 作 状 态及 具 取 体 的运 行 模 式 。但 在 任 何 时候 , 用 寄 存 器 R1~ 0 程 序 计 数 器 通 4R 、 P 一 个 或 两 个 状 态 寄 存 器都 是 可访 问 的 。 1 示 为 A M 状 态 C、 表 所 R 下 , 模式 可访 问 的寄 存 器 。 各
摘要 : 本文 介 绍 了 C - I oS I 的概 况 和 A M 体 系结 构 中 与移 植 工作 相 关 的一 些概 念 , 在 此基 础 上 分析 了基 于 A M 的移 植 工作 。 R 并 R 关 键 词 : oS I 嵌入 式 实 时操 作 系统  ̄ RM ; 植 C — I A . 移
(u y n a e o e e u y n 1 0 , hn ) L o agTec r C l g , o a g4 0 1 ia h s l L 7 C
Ab t c : i s a e r sn s r f eo COS I sr t a Th p rp ee t a p o l f p i —I ARM r h tcu e a d s me o e i e s s cae 山 t n p a t a d o h ai o ac i t r n o f h a s it d wi r s ln s n n t eb s f e t d ao a . s
2 u OS I概 述 C —I
19 92年 , 美 国人 Ja . Lbos enJ a rs e编 写 了 实 时 多 任 务 内 核 C S C S I是 基 于 C S的 , 者 的 内核 一 样 , 是 C S I 0 , 0 —I 0 二 只 0 —I 提供 了更 多 的 功 能 。经 过 1 0多 年 的 发展 , 0 C S已经 被 移 植 到 包 括 x 6 A M、o eP M P 8 、 R Pw rC、 IS等 4 0多种 处 理 器 架 构 上 。移 植 上 的 处理 器 还 在 不 断 增 加 。自 19 92年 以来 已经 有 数 百个 商业 应 用 。 另 外 ,0 0年 7月 , 0 —I 一 个 航 空 项 目中 得 到 了 美 国 联 邦 航 20 C S I在 空 管 理局 的认 证 , 该认 证 表 明 C S I具 有 足够 的安 全 性 和稳 定 0 —I

在PROTEUS中使用ARM处理器及UCOS-II移植理解

在PROTEUS中使用ARM处理器及UCOS-II移植理解

嵌入式系统课程论文在PROTEUS中使用ARM处理器及uC/OS-II移植理解Rein Lee一.嵌入式系统概述通过本次嵌入式系统课程的学习,我了解了嵌入式系统的概念。

所谓嵌入式系统,是指用于执行独立功能的专用计算机系统,它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件,和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实时诸如实时控制、监视、管理、移动计算、数据处理等各种自动化处理任务。

嵌入式系统以应用为中心,以微电子技术、控制技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可裁减,以满足系统对功能、成本、体积和功耗等要求。

1.1 嵌入式系统的硬件特征嵌入式系统的硬件必须根据具体的应用任务,以功耗、成本、体积、可靠性、处理能力等为指标来选择。

嵌入式系统的核心是系统软件和应用软件。

由于存储空间有限,因而要求软件代码紧凑、可靠,大多对实时性有严格的要求。

早期的嵌入式系统设计方法,通常是采用“硬件优先”原则。

在粗略估计软件任务需求的情况下,首先进行硬件设计与实现。

然后在此硬件平台上,再进行软件设计。

因为很难充分利用硬件软件资源,取得最佳性能的效果。

同时,一旦在测试时发现问题,需求对设计进行修改时,整个设计流程将重新进行,对成本和设计周期的影响很大。

这种传统的设计方法只能改善硬件/软件各自的性能,在有限的设计空间不可能对系统做出较好的性能综合优化,在很大程度上依赖于设计者的经验和反复实验。

随着电子系统功能的日益强大和微型化,系统设计涉及的问题越来越多,难度也越来越大。

硬件和软件也不再是截然分开的两个概念。

因而出现了软硬件协同的设计方法。

在系统目标要求下,协同设计软硬件体系结构,以最大限度地挖掘系统软硬件能力,得到高性能低代价的优化设计方案。

1.2 嵌入式操作系统目前流行的嵌入式操作系统可以分为两类:一类是从运行在个人电脑上的操作系统向下移植到嵌入式系统中,形成的嵌入式系统,如微软公司的Windows CE,SUN公司的Java操作系统,嵌入式Linux等。

基于ARM7内核的UCoS—Ⅱ移植研究

基于ARM7内核的UCoS—Ⅱ移植研究
学 出 版社 。 0 . 2 4 0
登录的部署 , 企业业务系统更加安全 、 快捷 、 方便 。 ③增加灵活性 。 提供后期 的关键业务单 点登录集成 , 新业务系统 的单点登 录集成建议方案 和实施方 案服务 ,
3 亲密接触 A PN TM] 京: S .E [ . 北 清华 大学 出版社,0 2 20 . 保证企业 的信息化建设可持续 的发展 。并 且提供包括快 []杜亮 .
tp d f sg e n I y e e in d it NT3 S 2 ; 配置代码 主要包括 O — F . I C U E . 它们 主要用 SC GH、 L D SH, N 于剪裁和设置操作系统。以上文件名为 U O —I C S I 的默认 2 任 务与 函数 调 用 的封 装 . 2
关键 词 : 入 式 ; 作 系统 移 植 ; OS 嵌 操 UC
中 图分 类 号 : P 1 T36
文 献标 识 码 : A
文 章 编 号 :06 83 (02 0— 08 0 10 — 9 7 2 1) 5 0 6 — 1
由于基 于 A M R 7内核 的各 种 芯 片之 间有 着 很 大 的差 调用 O S r i R y 运行优先级最高的任务 。 Stt g dO aH h 第三 , 移植 异, 这些差异主要表现在存储 系统不 同 、 内外设不 同、 OS C UH。 O — P — . 片 P . 在 S C U CC文件 中, 需要编写 以下 1 个 0 中断源不同等 。这就造成 了嵌入式操作 系统移植的不可 c函数 ,名称分别为 O T sS li 、s ak r t 0k 、 Sakt n 0 0 T sce e o( k t aH ) 避免性 ,而嵌入式操作 系统移植 效果 的优劣直接影 响着 0S ak 1 0 (、 T sS Hok)0 T s IlH o (、 T sDe k)0S ak w o ( S akde 0k) Ho 、
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

UC/OS-II 嵌入式系统在ARM 上的移植UC/OS-II 操作系统是一款完全公开的源代码,它非常精简,整个操作系统的代码只有几千行,是专门针对于嵌入式开发而产生的一款代码。

它有几个特点,分别是可移植性(Portable )、可固化(ROMable )、可裁剪(Scalable )、多任务、可确定性、任务栈、系统服务、中断管理、稳定性可靠性。

UC/OS-II 主要就是一个内核,由ANSIC 语言编写而成。

负责任务管理和任务调度,没有文件系统和界面系统。

它的代码是公开的,系统的实时性强、移植性好、可多任务。

UC/OS-II 作为基于优先级的抢占式多任务的实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步和内存管理的功能。

它使得任务的独立性,不相互干涉,非常的准时和高效,且易于设计和扩展。

UO/OS-II 共有16个内核文件,11个与CPU 类型无关,就是说可以直接使用不需要修改。

还有3个内核文件与CPU 有关系,要根据需要作出相应的改动。

剩下的两个内核文件和具体的应用有关。

如图所示UC/OS-II 的16个内核文件的层次。

μC/OS -II 内核文件软件 硬件多任务操作的核心是系统调度器,利用TCB来管理任务调度功能。

它的主要功能是保存任务的当前态、优先级、等待事件、代码起始地址、初始堆栈指针等。

程序的设计关键就是确定划分多任务的问题,以及任务优先级和任务通信。

优先级的意思是每个任务都是无限循环的,有运行态度、就绪态、休眠态、挂起态和中断五种状态。

当有高一级优先级的任务就绪后,低优先级立即停止运行,转为挂起态或就绪态。

这就是可剥夺型的内核。

当中断一个高优先级任务,中断时挂起,中断结束后任务继续运行,并立即剥夺低优先级的任务。

对于这种可剥夺型内核,CPU的使用时可以确定的,可优化任务级响应。

在很多单片机或ARM板上很容易就可以移植UC/OS-II。

当然本次设计使用的TQ2440,也可以完美的移植它。

移植程序在网上都可以找得到,所以设计中就不做解释了。

本次设计实现的是串口协议和网口协议组合成的一个数据网关。

其主要的流程图如下所示:如图所示可以很清楚的看出内核操作系统对于整个系统的控制过程,下面我们要介绍一下UC/OS-II里面的一些程序。

用户应用程序任务定义代码如下:void MyTask( void *pdata) //开始定义用户任务{for(;;){...}}void main(){TargetInit(); //完成初始化目标开发板。

OSInit (); //完成初始化UCOS-II。

OSTimeSet(0); //完成初始化系统时基。

OSTaskCreate (MainTask,(void *)0, &MainTaskStk[MainTaskStkLengh - 1], MainTaskPrio); //开始创建系统初始任务。

OSStart (); //整个任务开始。

return 0;}void Task0(void *pdata) //主任务建立:taks0 和task1{#if OS_CRITICAL_METHOD == 3 /* 分配CPU状态寄存器*/ OS_CPU_SR cpu_sr;#endifOS_ENTER_CRITICAL();Timer0Init(); //初始化报时信号ISRInit(); //初始化中断优先级OS_EXIT_CRITICAL();OSPrintfInit(); //用户任务给串口DM9000_init();OSStatInit();while(1){OSPrintf("\nEnter Main Task\n");//测试Dm9000//打印DM9000寄存器OSTimeDly(OS_TICKS_PER_SEC);}}需要注意的是,μC/OS-II的应用程序要使用空闲任务OSTaskldle(),而它是不可删除的系统文件。

下面开始对应用程序进行移植了。

本次设计是在ARM开发板上实现串口、网口数据转换的的功能。

在TQ2440上有串口和网口。

通信过程简单的描述就是PC串口发送数据给ARM板,ARM接到串口数据后,从网口再传给PC。

相反也是同样的道理,由网口发送数据,有ARM 控制由串口发回数据。

首先是TCP/IP协议的移植。

在编写移植程序前,有必要解释一下基本的协议栈作用和意义。

`就常见的网络通信方式一般来说有两种:1、UART-RS232,此时只需要pc上有串口调试助手即可。

2、TCP/IP,这时候和普通pc与pc通信一样可以用socket套接字编程也可用别人写好的软件侦听。

而现在我们要实现的是串口控制单片机与PC机的通信,在这里用PC来代替以太网。

接下来还要介绍一下以太网接口。

以太网技术如今已经相当的成熟了,其相应的网络产品价格低廉、技术完善。

而数据总线如今越来越难以满足人们日益提升的需要,这时以太网控制网络技术得到了快速的发展,并形成了现场总线的新标准。

加上国内大部分局域网是以太网,给予以太网实现现场总线有了雄厚的物质基础。

以太网的接口就是以太网同信的基础,是通信介质通信的中间处理部件,实现报文的发送与接收功能,位于TCP/IP协议栈的数据链路层。

每一个以太网接口(有时候也叫网卡),在连通后就可以随时的发送和接收网络上的数据,执行EEE802.3标准。

TCP/IP对应的ISO结构如图所示:TCP/IP协议栈而单片机与计算机的TCP/IP协议的实现也有很大的不同,原本在计算机里编写的程序可以不考虑代码的大小和效率,但在嵌入式开发板上都要考虑到这些问题。

在操作系统、内存分配、指针、参数传递、协议支持以及硬件接口的设计方面有些不同。

首先就是操系统,嵌入式的特点之一就是简洁高效,有很强的专业功能。

相对而言计算机上的操作系统的侧重点就是兼容性,所以资源要求全面支持,所以很复杂。

其次就是内存上的分配,计算机像windows系统它的内存分配是动态的,而在单片机上却不能同样如此,应为RAM的容量所限,所以其中存放以太网的数据包是固态的。

由于ARM相对于单片机的能力而言有了很大的提升,所以可以突破单片机的一些约束。

如下图所示,TCP/IP协议栈中的内容,从上往下分别对应应用层、传输层、网络层和网络接口层。

TCP/IP协议栈在本次设计中采用Lwip协议栈来实现ARM与以太网的连接。

完成移植后,需要介绍一下以太网的初始化过程和数据收发过程。

LWIP的初始化要在UC/OS-II之后,在其它任务创建之前。

因为LWIP要对以太网协议栈初始化以及新线程的建立,LWIP初始化如图所示。

(3)以太网初始化流程LWIP程序可以实现很多功能,在本设计中没有实现他的全部功能。

而简单的PING通需要DM9000来实现。

以太网的接收是通过中断方式,如果有数据进入以太网中断函数。

其主要任务就是读取和分析数据包。

如果数据有效则在Tcpip_input()函数把数据发送出去,并在LWIP初始化创建的线程中就可以得到此消息。

然后通过ip_input()函数进入传输层后,再把把数据传到应用层。

具体流程如下图所示:以太网数据接收流程以太网数据发送流程为什么要选择DM9000网络驱动器呢?如今嵌入式中大量使用10/100M的以太网卡,实际上并不实用。

因为它不能既满足快速传输速率又满足成本控制。

这时,DM9000作为一种综合低成本的单一快速以太网控制芯片就有了很高的实用价值。

它具有通用的接口,设计简单,可满足不同系统的软件驱动。

DM9000程序的体系结构可以分为网络协议接口、设备接口层、功能层及媒介层。

下面是DM9000的部分驱动程序的编写。

定义DM9000:#include "config.h"#define DM_ADD (*((volatile unsigned short *) 0x20000300))#define DM_CMD (*((volatile unsigned short *) 0x20000304))#define Printf OSPrintfuint8 Buffer[1000]; //定义了一个1000字节的接收发送缓冲区uint8 host_mac_addr[6]= { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; //主机的MAC地址uint8 mac_addr[6] = { 0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f }; //开发板{ 0a,1b,2c,3d,4e,5f },这实际上是一个软地址,在本设计中不需要特指。

uint8 ip_addr[4] = { 192, 168, 1, 6};uint8 host_ip_addr[4] = { 192, 168, 1, 100 };uint16 packet_len; //接收、发送数据包的长度,单位为字节uint8 arpsendbuf[60]={0xff,0xff,0xff,0xff,0xff,0xff, //以太网目标地址0x0a,0x1b,0x2c,0x3d,0x4e,0x5f, //以太网源地址0x08,0x06, //帧类型: ARP帧0x00,0x01, //硬件类型:以太网0x08,0x00, //协议类型:IP协议0x06, //硬件地址长度:6字节0x04, //协议地址长度:4字节0x00,0x00, //操作:ARP请求0x0a,0x1b,0x2c,0x3d,0x4e,0x5f, //发送端硬件地址192, 168, 1, 6, //发送端协议地址0x00,0x00,0x00,0x00,0x00,0x00, //接收端硬件地址192, 168, 1, 100 //接收端协议地址};#define DM9KS_ID 0x90000A46#define DM9KS_VID_L 0x28#define DM9KS_VID_H 0x29#define DM9KS_PID_L 0x2A#define DM9KS_PID_H 0x2B#define DM9KS_BASE_ADDR_ETH0 0x20000000//nGCS4#define DM9KS_Index (*((volatile unsigned short *)(DM9KS_BASE_ADDR_ETH0 + 0x300)))#define DM9KS_Data (*((volatile unsigned short *)(DM9KS_BASE_ADDR_ETH0 + 0x304)))接下是来对DM9000进行初始化的程序部分:void DM9000_init(void){uint32 i;//Test_DM9000AE();IOSetInit(); //设置中断EINIT7//初始化设置步骤: 1dm9000_reg_write(DM9000_GPCR, 0x01); //设置GPCR(1EH) bit[0]=1,使DM9000的GPIO3为输出。

相关文档
最新文档