本文采用SoPC内嵌32位的软核处理器Nios,实现了一个UART串行口和以太网接口的转换器(以下简称转换器),并基于Microtronix公司针对Nios处理器移植的μClinux开发了应用程序。
1 基于SoPC的嵌入式硬件平台构建
不同于基于处理器或控制器及SoC的嵌入式系统,基于SoPC的嵌入式系统具有可配置的特点,不会包括任何专用外设,而是可根据需要灵活地在一片FPGA中构造外设接 口。
基于SoPC的嵌入式系统主要由1片核心芯片SoPC和片外器件,以及一些相关的接口设备组成。本文所要实现的转换器采用Altera公司的 Cyclone芯片及外围电路组成,其中外围电路包括2片512 KB的SRAM、l片8MB的Flash、UART电子转换器和1片以太网控制器 LAN91C111。
SoPC芯片内嵌软核处理器Nios。在SoPC芯片中,除了CPU外,可配片上ROM、内部定时器、UART串行口、SRAM、Flash接口等系统部件。这些部件均以可编程逻辑部件的形式实现,芯片内部部件结构图如图3所示。CPU和所有部件通过Avalon总线连接在一起。
SoPC芯片内系统模块和Avalon总线模块均由SoPC Builder工具自动生成,利用Qualtus II集成开发环境可实现芯片内的逻辑设计及其引脚定义。经编译生成后缀为.sof的硬件映像文件,通过ByteBlasterII线缆下载到目标板的Cyclone芯片中,或将.sof文件转换成.flash文件,下载到目标板的Flash中。这样就完成了转换器的硬件设计。
2 基于μClinux的SoPC应用程序开发
应用程序的开发可在硬件平台上直接进行,但需了解所有硬件部件的细节,并编写相应的驱动子程序,其软件设计难度及工作量大,且可移植性差。基于嵌入式操作系统的应用程序,其所有的硬件细节均对用户屏蔽。对硬件进行直接控制的底层驱动程序均封装在操作系统内,通过设备驱动程序接口来完成,用户只需在高层通过操作系统所提供的系统调用进行编程。μClinux是针对控制领域的嵌入式Linux操作系统,适合如Nios处理器等不具备内存管理单元(MMU) 的微处理器/微控制器。基于操作系统进行开发,需将操作系统加载到硬件平台中,μClinux可以以部件的形式集成到SoPC系统中。
2.1 加载μClinux系统的步骤
将μClinux加载到SoPC目标板上时需提供一个交叉编译环境,硬件要求具有一个串口的PC工作站、基于Nios处理器的SoPC目标板和 ByteBlasterMV线缆等。软件需求WindowsNTv4.0、Windows2000或WindowsXP、Altera Nios开发包 NDK 3.0中所提供的Nios GNUPro工具、Ahera Nios开发包所提供的cygwin安装,以及Quartus II可编程逻辑开发工具V2.2等。
2.1.1 创建和装载内核映像
创建和装载μClinux映像文件在Linux DeveloperBash环境下进行,首先需按下列步骤配置和构建内核。
[Linux Developer]…μClinux/:cd linux
[Linux Developer]…linux/:make xconfig
[Linux Developer]…linux/:make clean
[Linux Developer]…1inux/:make dep
[Linux Developer]…linux/:make
[Linux Developer]…μClinux/:make linux.flash
生成的linux.flash文件即为μClinux内核映像。当SoPC目标板加电,片内ROM中的GERMS监控程序运行后,在 [Linux Developer]…μClinux/:下键入nios-runlinux.flash,即下载linux.flash文件到目标板上,完成内核映像的加载。
2.1.2创建和装载根文件系统
除了装载内核外,还需装载根文件系统。μClinux采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少空间。
在主机上Linux的target目录表示在μClinux下的根(root)目录。当前的脚本和工具可将target目录转换成映像文件(romdisk.flash),按如下步骤创建:
[Linux Developer]…μClinux/:make clean_target
[Linux Developer]…μClinux/:make romfs
然后键入以下命令:
[Linux Developer]…μClinux/:nios-run romdisk.flash
即将romdisk.flash文件下载到目标板上,完成μClinux的根文件系统的加载。
2.1.3 加载应用程序
用户应用程序可通过target目录加载到根文件系统中,可根据需要重建romdisk映像。应用程序在userland目录下,编译生成运行文件后拷贝到target目录树中,并根据target目录的内容创建romdisk.flash文件。新建 一个应用程序,首先打开一个 LinuxDeveloperBash窗,在userland目录中创建一个目录app,应用程序源文件存放在此目录中,然后在 userland/app/中建立一个makefile文件。
Makefile内容如下所示,其中appfile为应用程序名。
STACKSlZE=8192
include../../Rules.mak
all:appfile.relocbflt
SOURCES=appfile.c
install:
$(ROMFSINST)appfile.reloebfh
$(ROMFSDIR)/bin/appfile$(EXECSUFFIX)
clean:
rm-f *.[iods]core appfile appfile.*elf appfile.*bflt
运行make对应用程序进行编译并修改userland/.eonfig和/userland/Makefile文件。在userland/. config文件中,增加一行CONFIG_MY_APP=y,在userland/Makefile文件中,增加dir_$ (CONFIG_MY_APP)+=app,进入userland子目录,运行make,即可将应用程序安装到userland/bin中,并根据 userland/.config文件中相应变量的指示将应用程序二进制拷贝到target目录中。
最后,键入以下命令重新构建romdisk映像文件(romdisk.flash),并下载到目标板上。
[Linux Developer]…uClinux/:make clean_target
[Linux Developer]…uClinux/:make romfs
[Linux Developer]…uClinux/:nios-run romdisk.flash
2.1.4 运行μClinux
完成μClinux内核及文件系统的装载后,即可运行μClinux。键入g800000(800000为启动代码地址,在SoPC Builder 中设置),μClinux自动完成初始化过程,用户输入登录用户名nios,密码μClinux,出现μClinux的提示符#,表示已进入 μClinux运行环境。
2.2 转换器应用程序的实现
转换器应用系统主要完成网络接口和串行接口间的数据传输。μClinux操作系统中提供了网络驱动程序和串口驱动程序,并提供了多线程的支持。
转换器应用系统中的串口收发数据和网络口收发数据是异步进行的,可分别作为一个任务来对待,任务间是并发的,因此可采用多线程程序设计技术来实现多任务间的并发执行。
在此应用系统中有4个任务,分别创建4个线程:网络接收线程、网络发送线程、串口接收线程和串口发送线程。这4个线程可并发执行.因网络速度与串口速度存在着差异,需设置相应的缓冲区来对收发数据进行缓冲。在此应用系统中设置两个环形缓冲区,如图4所示,其中nctrv_uartsd_buf用于接收网络数据,供存储从网络口接收的数据,然后串口从此缓冲区中取出数据发送。另一缓冲区uartrv_netsd_bur用于接收串口数据,然后网络口取出此缓冲区中数据发送出去。
线程间需实现相互通信和同步,共用缓冲区既要互斥执行又要同步执行,其操作遵循生产者和消费者模型。线程间的互斥操作采用互斥锁(mu-tex)来实现。线程间的同步通过设置两个指针来实现,一个是读指针,另一个是写指针,写指针指向队头,初始化为0,读指针指向队尾,初始化为BUFSIZE-1。当写数据时,比较读写指针是否相等,相同则写线程阻塞;不相等,则写入数据,然后将写指针加1。当读数据时,读指针加1,然后比较读写指针是否相等,相等则读线程阻塞;不相等,则读出数据。
网络发送线程和串口接收线程间共用环形缓冲区uartrv_netsd_buf。串口发送线程和网络接收线程共用环形缓冲区netrv_uartsd_buf。两线程间的关系和处理类似网络发送线程和串口接收线程。
3 系统测试
完成转换器的软硬件设计后,连接系统进行转换器数据的传输测试。在PC机A上运行串口收发程序,而在PC机B上运行以太网收发程序,经测试后数据传输无误。
上一篇:跳频与扩频:无线机器对机器接口
下一篇:嵌入式Linux操作系统的驱动程序开发要点
推荐阅读最新更新时间:2024-05-13 18:38
- 热门资源推荐
- 热门放大器推荐
- 电力工程设计手册 02 火力发电厂热机通用部分设计
- 电力工程设计手册 05 火力发电厂烟气治理设计
- 电力工程设计手册 09 火力发电厂电气二次设计
- 电力工程设计手册 13 火力发电厂水工设计
An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.
If you are the system administrator of this resource then you should check the error log for details.
Faithfully yours, OpenResty.
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况