BF533

2024-07-22

BF533(精选4篇)

BF533 篇1

0 引 言

ITU-T G.723.1是国际电信联盟制定的5.3 Kb/s和6.3 Kb/s双速率语音多媒体通信编解码协议, 该协议广泛应用于多媒体通信、蜂窝移动通信和IP网络电话等领域[1]。该编码协议主要用的场合是嵌入式环境, 由于G.723.1编解码算法复杂度较高, 嵌入式处理器的处理能力相对较差, 且由于功耗和成本的原因, 对G.723.1编解码程序的算法优化就十分必要了。现有文献大部分都是针对G.723.1的算法进行优化, 而针对硬件进行优化的设计却很少。这里针对硬件给出整个系统架构以及移植后硬件和系统的优化方案[2]。

1 G.723.1标准以及BF533特点简述

G.723.1标准在编码端的输入数据是经过8 kHz采样的16位线性PCM语音信号, 帧长为30 ms (240个采样点) 。通过对原始语音进行分析得到相关参数, 并编码传送。在解码端, 用这些参数构造激励信号和合成滤波器, 将激励信号通过合成滤波器可以得到重建的语音信号, 具体的编解码算法请参考ITU-T G.723.1标准[3]。

BF533处理器是Blackfin系列产品, 专为满足当今嵌入式音视频通信应用的计算要求和低功耗条件而设计。主要优点包括动态电源管理, 高度并行的计算单元, 分层结构的内存, 集成更多的外围设备等[4]。

2 BF533 DMA工作机制

本文实现的音频编解码器和BF533的处理器的接口电路如图1所示。音频编解码芯片是AD1836, 包括2通道立体声输入和3通道立体声输出, 使用SPORT0口与处理器相连, SPI口与BF533配置。本文采用SPORT口的I2S模式传输机制。数据发送和接收采用DMA自动缓存模式, 中断由DMA触发产生, 即SPORT的DMA控制器控制DMA发送, 处理器可以独立运行, 直到整个数据块发送完成或接收完成, 触发中断产生[5]。

本实验在DMA的设置上采用了二维自动缓冲DMA中断驱动方式, 这样可以把DMA的缓冲器分成两部分, 在每一个缓冲器完成传输时, 触发中断产生。这样就建立了一个简单的乒乓缓存机制, 在以后的数据采集中起关键作用。下面是二维DMA的设置代码[6]:

3 BF533的语音流程设计

实时实现语言信号编解码的最基本要求是编解码一帧语言信号的时间要少于采集一帧语音信号的时间, 因为只有这样才能在下一帧采集的语音信号到来之前处理完本帧语音信号, 避免语音信号的丢失, 从而实现语音的实时处理。

基于以上基本要求, 设计程序流程如图2所示。在DMA采集第二帧语音的同时, 处理器处理第一帧语音并进行输出, 由第三部分BF533 DMA工作机制可知, DMA的数据传输可以独立于内核而自动完成, 它不会进行周期挪用, 完全无需占用处理器内核周期, 内核只需在每次DMA传送完毕时, 通知中断响应, 将缓冲区数据读入内存, 内核则可以继续执行编解码任务。

4 语音编解码优化

G.723.1是一种低速率的双速率语音编码, 由于其帧长为30 ms, 所以G.723.1的算法在内核处理时间必须小于这个值, 才能不丢失采样数据。由于G.723.1编码器实现的高复杂度, DSP处理器资源有限, 其实际的处理时间会远远超过这个值。因此, 必须对整个系统包括算法和硬件进行优化, 以便使处理时间控制在30 ms以内。

4.1 算法优化

算法优化主要是指循环的优化、常数的优化以及码本搜索方法的优化。其中, 循环的优化是指尽量减少循环体内指令的执行次数。一般情况下应尽最大可能把指令移出到循环体外部, 如一些赋常数值的指令;嵌套的多层循环时, 将循环次数较少的作为外循环, 循环次数较多的放在内部;有时也要为了减少循环次数而增加循环内部指令数。关于一些常数的优化是指编码过程中用到很多的数组都可以事先计算好并存在一个表内, 需要的时候再进行索引, 如计算LSP系数时的cos函数、共振峰听觉加权滤波器系数等[7]。有些常系数的乘法可以用移位来代替或者近似, 如计算LPC系数是用左移15位近似 (180×180=32 400) , 谐波噪声定形模块中的0.369用0.375作近似值 (因为0.375可以表示为1/4+1/8) 等。码本搜索方法的优化指的是在高码率激励的码本搜索中, 规定了同一子帧内部脉冲的出现位置或者全是奇数位或者全是偶数位, 所以在码本搜索的循环体把搜索步长定为2, 使循环次数减半。在量化增益因子Gmax时, 由于量化表中数据呈递增规律, 一旦找到了与Gmax最接近的值, 则停止再搜索, 这样可以明显减少每次量化时的循环次数。

4.2 针对硬件的优化

由于常规的算法优化后, 系统仍达不到实时要求, 必须进一步进行针对硬件的优化[8]。包括使用寄存器代替局部变量, 使用硬件循环代替软件循环, 利用数据总线宽度, 使用并行指令和向量指令等[9]。

使用寄存器代替局部变量是指C程序的局部变量, 很多情况下都是中间结果, 对于中间结果的保存用寄存器, 就不需要访问内存, 这就省掉很多访问内存的时间, 加快编译速度。使用硬件循环代替软件循环是指BF533内部有八级流水线CPU周期, 而软件循环的动态预测错误, 会导致7个CPU周期浪费。使用硬件循环代替软件循环, DSP会根据循环器的值自动执行循环体和退出循环, 保证流水线畅通。利用数据总线宽度是指BF533的外部数据总线宽度为32位, 可以一次存取4个字节。在数据批量处理时, 使用一次存取4个字节, 可以大大提高执行速度。使用并行指令和向量指令是指并行指令和向量指令可以充分利用DSP内部硬件资源的重复性, 减少指令执行次数和提高指令执行效率。

5 结 语

该实验是在Visual DSP++5.0环境下, 基于BF533开发板所做的语音嵌入开发[10]。在Visual DSP++5.0环境下, 将音频的输入/输出直接接入模拟信号。程序在移植并优化完成后, 输入的模拟信号经过AD1836采样、G.723.1编码解码后, 再由AD1836输出, 最后可以听到比较好的语音质量。这个实验只是在单板上实现, 没有经过网络传输, 因此在网络中的实时实现有待进一步研究。

摘要:实验实现了数字可视对讲系统的音频设计。采用美国模拟器件公司 (ADI) Blackfin系列处理器BF533平台, 给出了G.723.1语音编解码器的系统设计方案及移植关键技术。不但对C语言程序算法上进行了优化, 还针对BF533硬件特性提出并实现了更有效的优化策略, 如寄存器代替局部变量, 使用硬件循环代替软件循环等, 实时实现了ITU-T的G.723.1双码率编解码器算法。实验结果表明, G.723.1语音编解码器能够完全在BF533开发板上实时实现。

关键词:G.723.1,BF533,语音编解码,优化

参考文献

[1]姚天任.数字语音处理[M].武汉:华中科技大学出版社, 2003.

[2]陶洪, 余艳梅.G.723.1语音编码算法的研究与实现[J].四川大学学报:自然科学版, 2003 (1) :63-68.

[3]ITU-T G.723.1-Dual Rate Speech Coder for MultimediaCommunications Transmitting at 5.3&6.3 kbit/s, 1996.

[4]陈峰.Blackfin系列DSP原理与系统设计[M].北京:电子工业出版社, 2004.

[5]Analog Devices Int.ADSP-BF533 Blackfin ProfessorHardware Referenc[Z].Revision 2.0, 2004.

[6]Blackfin Processor Instruction Set Reference[Z].Revision2.0, 2003.

[7]乔光云, 石翠仙, 吕晓立.G.723.1语音编解码优化方案[J].电子测量技术, 2007, 30 (7) :125-127.

[8]王家庆, 吴并臻.G.723.1语音编解码器的DSP实时实现[J].中国数据通信, 2005 (1) :51-59.

[9]Si S M.Real-time Implementation of G.723.1 Speech Co-der Uses TI TMS320C51 Chip[R].Project report, Instituteof Microelectronics, Singapore, 2004.

[10]Visual DSP++5.0 Product Release Bulletin[Z].Revision3.0, 2007.

BF533 篇2

1 系统整体方案

基于BF533的家庭安全系统设计方案, 主要由4部分组成, 分别为热释电红外检测、CMOS图像采集、GSM报警和图像存储。系统结构框图, 如图1所示。热释电红外检测模块与BF533的PF口相连, 对室内空间进行检测, 一旦检测到非法入侵, 立即向DSP发送中断请求, 将处于睡眠状态的DSP唤醒工作。GSM短信报警模块与UART接口相连, DSP通过UART口可以控制GSM模块使其发送报警信息。CMOS摄像头连接在PPI接口, PPI口以DMA方式将视频数据搬移到SDRAM中, 供DSP进行压缩, 存储设备SD卡通过SPI接口与DSP连接, 用于保存压缩后的视频码流数据。

2 系统硬件设计

2.1 热释电红外检测电路

热释电红外检测模块采用BISS0001型热释电红外控制专用芯片完成。当有人在热释电红外传感器的有效检测区域内活动时, 传感器将接收到人体发出的红外信号, 并将其转变成微弱的脉冲电压信号, 此电压信号经BISS0001内部电路放大、鉴幅处理及定时控制后, 从输出引脚输出高电平, 该高电平连接到DSP的PF口, 作为DSP的中断请求信号, 唤醒DSP进入工作状态。

2.2 CMOS图像采集电路

本系统采用Pixelplus公司的PO3030K图像传感器完成图像采集功能, PO3030K输出30万像素图像, 支持多种输出模式和输出数据格式, 此处采用QVGA输出模式和YUV4:2:2输出数据格式。PO3030K与BF533的PPI口相连接, 连接方式, 如图2所示, PO3030K产生HREF, VSYNC, PCLK这3种同步信号, 分别为行同步输出信号、场同步输出信号和输出像素时钟。Y[7:0]为PO3030K输出的图像数据信号。BF533使用GPIO的PF0和PF1模拟I2C总线协议, 从而实现对PO3030K内部寄存器的读写操作。

2.3 GSM报警电路

GSM报警电路采用西门子公司的TC35模块完成, TC35模块通过MAX 232串口接口芯片与DSP的UART口相连接。TC35模块还提供了SIM卡接口, 插入注册后的SIM卡, 便能够接入GSM通信网完成短信报警功能。

2.4 图像存储电路

本系统采用SD卡存储压缩编码后的视频数据, SD卡有两种工作模式:SDIO模式和SPI模式[2]。由于BF533支持SPI接口, 故采用SPI模式。BF533的SPI接口数据传输速率最快可达到系统时钟的1/4, 按系统时钟为118.8 MHz进行计算, SPI的最高数据率可达到29.7 MB/s。考虑到视频流数据量较大, 采用双缓冲机制进行存储, 能够满足系统要求。SD卡接口电路, 如图3所示。

3 系统软件设计

系统软件可分为视频采集及压缩程序、GSM短信报警程序和图像存储程序3部分, 软件流程图, 如图4所示。

3.1 视频采集及压缩程序

DSP通过I2C接口完成对PO3030K图像传感器的初始化, 并设置相应的寄存器完成对工作模式、数据输出格式、分辨率、亮度和色度等的设置。PO3030K与DSP的PPI口相连, 输出图像数据以DMA方式传输到SDRAM中存储, 本系统采用乒乓缓冲区的方法传输数据, 在内存中开辟两个缓冲区, 使用两个头尾相连的描述符链表控制PPI DMA一次传输数据到两个缓冲区中。DMA每采集完一行图像数据之后就产生一次中断, 在中断服务程序中使用存储器DMA将数据搬移到片外SDRAM, 等待DSP对其进行MPEG-4压缩处理。视频采集流程图, 如图5所示。

DSP对视频数据进行压缩编码时采用MPEG-4标准, 由于CMOS图像采集模块输出YUV4:2:2图像, 而编码模型的输入为YUV4:2:0图像[3], 故需要对采集到的图像进行色度重采样。DCT和IDCT是编码过程中被频繁调用的两个函数, 故采用汇编语言实现且使用Chen的快速算法, 此外根据BF533的硬件和编译系统的特点, 运用各种方法对MPEG-4编码程序代码进行大量的优化工作, 利用循环缓冲技术和DSP提供的各种像素操作指令和向量操作指令对PADDING算法、运动矢量预测、SAD最小搜索算法和半像素内插等需要反复执行的过程进行汇编优化, 充分发挥BF533的并行处理能力。在内存分配方面, 在SDRAM中开辟了4个帧缓冲器, 分别用于保存当前编码帧、当前参考帧、下一编码帧和下一参考帧数据。DSP的片内RAM容量较小, 但是访问速度较快, 而MPEG-4的最小编码单元是宏块, 所以可以将宏块从片外SDRAM转移到片内RAM中进行处理, 处理结束后再存到SDRAM中。另外为了加快数据块搬移速度, 充分利用BF533强大的DMA能力完成数据传输操作, 同时将CPU频繁访问的程序和数据放在片上缓存中, 并充分利用乒乓缓冲结构, 提高编码效率。

MPEG-4编码流程, 如图6所示[4]。

3.2 GSM短信报警程序

在红外探测器检测到有人入侵时, DSP将立即向户主发送短信报警信息, 以便用户采取措施。BF533通过UART口发送AT指令, 实现对TC35模块的控制, 发送“AT+CMGF=1”设置短信发送模式为文本模式, 发送“AT+CREG?”查询网络注册情况, 发送“AT+CMGS=13572472507”再加上短信内容[5], 即可以实现向目标手机发送报警信息的目的。由于采用文本发送模式, 故不能发送中文文字, 本系统选择发送英文字符“Danger”。

3.3 图像存储程序

压缩后的视频流数据将以文件的形式写入SD卡中。在进行写卡操作前, 先要对SD卡初始化, 设置其为SPI工作模式。SD卡的寻址方式是按字节寻址的, 为加快速度, 将其设置为扇区寻址, 每个扇区512 bit, 写一个扇区的函数部分程序段如下:

unsigned char SD_write_sector (ulong sector, uchar *buff)

{

start_addr=sector*512;//一个扇区512 bit

write_command_SD (SD_write_block, start_addr) ;//发写命令

for (i=0;i<512;i++) SPI_transfer_byte (*buff++) ;

}

其中, sector为要写的扇区号, buff指向需要保存的数据流, SPI_transfer_byte为通过SPI口向SD卡传输1 bit的函数, SD_write_block为SD卡写命令的编码。

4 结束语

本系统依托目前覆盖率较高的GSM公共网络, 利用现有的无线通信业务和短消息服务业务, 实现了远程报警功能, 且不受地域和时间的限制, 并采用CMOS摄像头采集现场图像, 提高了警情处理的效率。经测试证明, 该系统稳定、可靠, 报警准确、及时, 图像采集的帧率为15 f·s-1, 单帧图像的分辨率为320×240, 能够满足用户需求。

摘要:介绍了基于ADSP-BF533家庭安全系统设计方案, 详细阐述了该系统的总体架构及各个模块的硬件电路和软件实现。本系统主要应用于家庭安全防盗领域, 综合利用红外探测、GSM无线通信以及MPEG-4视频压缩技术, 实现了家庭范围内的红外探测非法入侵、GSM短信报警和现场图像采集和存储等功能。

关键词:家庭安全,MPEG-4,视频压缩,BF533,GSM

参考文献

[1]陈峰.Blackfin系列DSP原理与系统设计[M].北京:电子工业出版社, 2004.

[2]张洪涛, 莫文承, 李兵兵.基于SPI协议的SD卡读写机制与实现方法[J].电子元器件应用, 2008, 10 (3) :42-43.

[3]钟玉琢.基于对象的多媒体数据压缩编码国际标准——MPEG-4及其检验模型[M].北京:科学出版社, 2000.

[4]姚爱琴, 张东宁, 单永利.基于ADSP-BF533的视频监测系统设计[J].中北大学学报, 2007, 28 (1) :38-41.

BF533 篇3

在电力系统中,对电压、电流、谐波等系统参数进行快速准确的计算分析、决策、控制是电力部门保障电网运行质量的重要手段,通过对电力能源质量的检测分析,并采取相应的措施,对有效地提高电网质量、减少电能污染、降低系统损耗,都具有积极意义。

采用传统F F F算法进行谐波分析时会产生频谱泄漏和栅栏效应,影响谐波分析准确性。利用加窗插值修正算法可以明显提高基于F F T分析的谐波参数计算结果的准确性,减小频谱泄漏和栅栏效应引起的误差。为此,本文设计采用了基于Hanning窗+基2-FFT的谐波分析算法分析电力谐波,很好解决电力系统中电网参数快速、准确的检测、分析、处理等问题。

2 系统结构总体设计

本系统信号处理器采用AD公司的高速数字信号处理芯片ADSP-BF533[1],配合大容量的存储器设计及16位高速、低功耗、6通道同步高精度的采样芯片AD73360进行设计。在硬件设计上充分考虑软硬件功能上的安全性和可扩展性。

电力谐波分析系统总体方案设计框图如图1所示,电网的三相电压、电流分别经过电压互感器(PT)、电流互感器(CT)与交流取样电路进行信号调理,再经6通道同步A/D转换器AD73360完成三相电压、电流信号实时、同步采样。为了减少在信号处理过程中频谱泄漏对谐波分析[2]的影响,提高谐波分析的精确度。系统采用基于Hanning窗+基2-FFT算法对电流、电压波形数据进行频谱分析,分离出基波分量及2~21次谐波分量,利用其高速处理能力完成电参量测量、谐波分析等任务。

3 典型硬件电路

3.1 电源预处理电路

为了更大程度的提高系统的稳定性和抗干扰性,在三相电压的输入端对电网电压进行预处理。图2为电源预处理电路。

浪涌信号非常容易通过电源线进入系统内部。为了防止这一干扰,可在电源输入端并接一个20D681K压敏电阻R,电阻值的大小可以根据压敏电阻的特性选择;为防止供电电网电压内带有高频干扰源对系统的同步振荡电路及数据采集等电路产生影响,在电源中并联电容器C,电容器可以通低频阻高频;在每相上串接共模电感L,防止系统共模信号的干扰。

3.2 交流取样电路

交流电压、电流的采样是整个装置的核心之一。它的取样精度直接影响到电能计算的精度。交流电流和交流电压的采样电路分别如下图3、图4。

在电流采样电路中,IA1和IA2是电流互感器二次侧的电流输入信号,通过电流互感器CT03-5/5得检测电流再由2 6Ω的高精度的电阻转换成电压信号,作为交流电流的采样信号。电流互感器的精度是0.1级。

在电压采样电路中,Uα和Un是电压互感器的输入信号,也是电网电压信号。其中的SMBJ5.0 CA起稳压和去尖脉冲的作用。电压互感器的精度也是0.1级。

4 系统软件设计

4.1 采样点数确定

在进行电力谐波分析时,合适的采样点数是谐波分析结果准确性的重要保证。电力谐波分析系统要求快速、准确的计算电网基波和2~21次谐波值,并进行实时处理分析。而基2-F F T算法通常取采样点数为2的N次方,根据AD73360的转换速度以及ADSP-BF533的数据处理速度,设计时取N=10,即采样频率为8KHz,采样点数为2N=1024。

4.2 数据的抽取

在实际测量分析中,信号的工作频率会一直在额定频率附近波动。用FFT进行谐波测量时,首先对信号进行采样,然后建立数据窗口,获取一组FFT分析的数据,经过FFT变换,得到谐波结果。在以上过程中,为避免引起混叠,必须满足采样定律[3]。

其中:fs为抽样频率,fm为信号最高频率

其次采样频率必须与信号频率同步,且必须采集满足FFT需要的数据点数。也就是说,当数据窗为k倍(k为整数)的信号周期T0,采样频率1sT(sT为采样周期),数据窗内采样次数N(N为整数),三者满足K T0=N Ts时,采样频率才与信号频率同步。否则,就会产生频谱泄漏和栅栏效应[4],影响谐波测量准确度。

在系统中采用基-2的1024点FFT算法,即8个信号周期,每一个信号周期需要采集1 2 8个数据。把AD73360的采样速率置为8K/ s,DSP从信号上升期过零点开始接收数据,到下一个信号上升期过零点停止接收数据。设接收n个采样数据,则128个数据的抽取方法为:第k、n/128+k、2n/1 2 8+k、…、127n/128+k个采样数据(k取1到n/1 2 8之间的整数,每个数据都取整数),取k=1,就可在n个采样数据之中均匀抽取128个数据,满足了采样频率和信号频率同步。从中可以看出,采样频率越高,n越大,数据抽取越均匀。从而实现采样频率和信号频率同步。

4.3 基2-FFT算法分析

采用传统FFF算法进行谐波分析时会产生频谱泄漏和栅栏效应,影响谐波分析准确性。采用加窗插值修正算法可以明显提高基于FFT分析的谐波参数计算结果的准确性,减小频谱泄漏和栅栏效应引起的误差。为此,本文设计采用了基于Hanning窗+基2-FFT的谐波分析算法。

4.3.1 Hanning窗特性

H a n n i n g窗[5]又称为升余弦窗,根据F F T理论,Hanning窗的频谱函数为

式(2)中右边的三部分之和,使旁瓣互相抵消,能量更集中在主瓣。有效的减小了信号分析的频谱泄漏和栅栏效应,提高了谐波分析的精确度。

4.3.2 基2-FFT算法原理

设输入时域信号为序列x(n)的长度为N,且满足N=2M,其中M为正整数。实际的序列可能不满足此条件,可以人为的在序列的尾部加入若干零值点达到这一要求。将长为N=2M的序列x(n)n=0,1,...,N-1按n的奇偶分解为两个N2点的子序列:

其转换后的频域信号为X(k),则离散傅立叶变换DFF为:

则有:

故上式可以写成

但由式(5)计算得到的只是X(k)的前一半结果,所以应用W Nnk具有对称和周期性,故有X(k)的后一半的结果为:

综合式子(5)和(6)可得X(k)前后两部分的值为:

式(7)即是基2时域抽取法FFT的结果,它是把长度为N的序列一分为二,将N点DFT表示成为两个N2点DFT的线性组合。然后再把N2点DFT一分为二,表示为两个N4点的DFT。如此重复下去,直至分解成两点DFF的运算,两点DFT实际上只是加减运算。这就是基2时域抽取FFT算法的基本原理[6]。

5 优化的基2-FFT算法实现

5.1 2N点实数运算转换为N点的复数运算

一般来说,要处理的信号大多是时间的实序列,而FFT算法都把实部和虚部一起算,无形中增加了数据的存储空间和运算量,仔细考察一个2N点的实序列。

1)把一个2N点的实序列的奇偶项按逆序存放在一个N点复序列的实虚部里。

2)对N点复序列进行FFT变换。

3)把变换得到的实虚部结果再转换成2N点实序列的F F T变换结果。

这个改进令总运算量减少了差不多一半,而且循环次数的减少还改善了因DSP的字长引起的计算累计误差。

5.2 旋转因子表优化

当N较大时,如本系统设计时N取1024(1K),因子表包括了余弦值表和正弦值表,每张表都要占用1K空间,共占2K数据地址空间。由于还需留有输入序列的运算空间及系统其他的处理单元,在有限的DSP储存资源里2K的空间显得相当大。又因sin x和cos x的值具有连续性和对称性,且第一象限内的sin x和cos x值互余。而传统的因子表把一个周期内的sin x和cos x的值全部存储,产生大量的冗余项。本算法对此进行了改进,只存储第一个象限的cos x的值,利用三角中象限角符号的原理,对提取的因子值进行符号修正,从而得到正确的因子值。

此改进算法的实质是:在不改变FFT算法的时间复杂度情况下,利用两个蝶形运算[7,8]的宏完成只有一个象限因子表下的FFT变换,从而减少了数据的存储空间。算法在时间和空间的改进效果及减小误差上的效果都很明显。

事实上,优化的算法DSP汇编程序已经编好,优化程序流程图如图5,并在电力谐波分析系统中运行良好,有效地保证了该系统的实时性,从而证明了该算法的优越性。

6 结束语

本文利用高性能数据信号处理器DSP-BF531进行数据处理,速度快、实时好。采用高精度模数转换器AD73360进行A/D采样,有效地减少了由于采样时间不同而产生的相位误差。利用数据抽取、加窗、优化FFT算法等方法,以提高谐波分析系统的总体性能、准确性和快速性。系统投运后取得了良好的运行效果,通过对用户的用电负荷状态进行分析、比较,有效地掌握用户用电行为,在谐波分析及用电管理上发挥重要作用,从而为企业电能损耗管理带来科学参考信息,有力推动电网中电能质量实时监测的发展。

参考文献

[1]陈峰.Blackfin系列DSP原理与系统设计[M].北京:电子工业出版社,2004.

[2]赵卫东,董国兴.一种基于DSP的电力谐波测量方法[J].电工技术杂志,2004(9):76-78.

[3]郑君里,应启珩,杨为理.信号与系统[M].北京:高等教育出版社,2000.

[4]李益华,林文南,李茂军.电力系统谐波检测的FFT加窗插值算法和小波分析方法的比较[J].电力科学与技术学报,2007,22(2):39-42.

[5]王平,丁力.加窗插值FFT的电网谐波分析算法研究[J].江苏电机工程,2008,27(2):46-49.

[6]王艳芬,王刚,张晓光等.数字信号处理原及实现[M].北京:清华大学出版社,2008.

[7]曹小秋,赵焕军.ADIBlackfin系列DSP处理实实验指导书[M].北京:电子工业出版社,2008.

BF533 篇4

1 μClinux简介

μClinux从Linux 2.0/2.4内核派生而来,沿袭主流Linux的绝大部分特性。它是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元(MMU)的处理器。由于μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux。虽然它的体积很小,但μClinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API等。

μClinux的主要特点如下:

(1) 内存管理

这部分是μClinux与传统Linux区别最大的地方。对于μC1inux来说,其设计针对没有MMU的处理器,即μC1inux不能使用处理器的虚拟内存管理技术,μClinux仍然采用存储器的分页管理。系统在启动时把实际存储器进行分页,在加载应用程序时程序分页加载,但是由于没有MMU管理,因此实际上μClinux采用实存储器管理策略。这一点影响了系统工作的很多方面。

(2) μClinux的内核加载方式

μClinux的内核有2种可选的运行方式:可以在FLASH上直接运行,也可以加载到内存中运行。由于RAM的存取速率要比FLASH高,因此后者可以减少内存需要,运行速度也更快。

(3) μClinux的文件系统

μClinux系统采用romfs文件系统。这种文件系统相对于一般的ext2文件系统要求更少的空间。这是由于内核支持romfs文件系统比支持ext2文件系统需要更少的代码,而且romfs文件系统相对简单建立文件系统超级块(superblock)需要的存储空间更少。

(4) μClinux的应用程序库

μClinux小型化的另一个做法是重写应用程序库。相对于越来越大且越来越全的库glibc μClibc对libc做了精简。

(5) 可执行文件格式

μClinux系统使用flat可执行文件格式。另外,μClinux还提供通用的Linux API支持完整的TCP/IP协议堆栈和大量其他的网络协议,支持包括NFSext2 ROMfs等多种文件系统。

2 建立μClinux开发环境

嵌入式系统的开发与一般的应用开发最大的差别在于,前者需要建立特殊的硬件环境,而后者一般基于特定的操作系统或分布式平台。后者的平台已经对硬件或网络媒质做了抽象,从而不需要由系统开发者来完成这些工作。而在嵌入式系统开发中,这也由开发者完成。

嵌入式系统开发环境一般分成主机端(HOST)和目标板(TARGET)两个部分。主机端是开发平台,用于运行开发过程中的各种工具(如Linux操作系统和ADI提供的集成开发环境Visual DSP++等);目标板是运行和测试平台,是嵌入式系统的最终驻留环境。在主机端和目标板之间需要通过某种方式进行通信,如使用RS 232串口或网口。通信的目的在于发送控制指令和传输数据,同时获得反馈信息。图1是系统移植工作的硬件环境。

目标板的硬件平台如图1所示:

主机端的PC使用COM1和BF533的UART相连接,通过串口完成对目标板的必要控制功能。本文设计的ADSP-BF533目标板上配备有1块SMSC LAN91C111以太网卡芯片和主机端建立原始(raw)IP连接,使用链路层地址完成大批量数据的传送。

在硬件环境建立之后,就需要创建软件开发环境。软件环境主要是指Blackfin体系结构的交叉编译环境。建立交叉编译环境首先要有交叉开发工具。交叉编译工具是指一组运行在某一种处理器上,却可以编译出另一种处理器上执行的指令的工具。它由一套用于编译、汇编和链接内核及应用程序的组件组成,通过编译可以使μClinux内核和应用程序在目标设备上运行。

编译μClinux一般使用GNU开发套件作为交叉编译器工具链,它包括一系列的开发和调试工具。在官方网站http://blackfin.μClinux.org上提供了Blackfin系列处理器内核的交叉编译工具。下载后按照说明解压到Linux系统的相应文件夹里,并设置系统环境变量,使这些交叉编译工具所在的目录为全局环境变量。至此就建立好了μClinux的软件开发环境。

3 利用U-Boot引导内核

U-Boot(Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。也是是嵌入式Linux系统常用的Boot Loader之一。其完成的功能是初始化硬件设备、改变处理器运行模式、重组中断向量和建立内存空间映射图,从而将系统的软硬件带到一个合适的状态或者用户定制的特定状态,以便为最终加载操作系统内核准备好正确的环境。

U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持种引导方式;具有功能强大且成熟、稳定等诸多优点,故本文采用U-Boot引导μClinux内核。U-Boot严重依赖于底层硬件,不同的CPU或嵌入式板极设备需要不同的U-Boot,不过因为本文的重点是μClinux的移植,所以这里不再详述U-Boot的具体实现过程。

当系统上电后,U-Boot从地址OxO开始执行,将存储器映射重新配置,如图1所示,并会执行μClinux的固化内核。

U-Boot可以使用ADI的仿真软件Visual DSP++通过仿真器或JTAG口下载到目标板上。

4 μClinux内核的编译和移植

作为操作系统的核心,μClinux内核负责管理系统的进程、内存、设备驱动程序、文件系统和网络系统,决定着系统的各种性能。μClinux内核采用模块化的组织结构,通过增减内核模块的方式来增减系统的功能。

4.1 内核配置

虽然μClinux的内核代码大部分独立于处理器和其体系结构,但是最底层的代码还是基于特定系统的。虽然各个系统存在相同之处,但是它们的中断处理上下文、内存映射的维护、任务上下文和初始化过程是独特的。这些例行程序放置在μClinux代码树的arch/目录下。这里需要根据自己的硬件平台来配置内核代码。配置过程如下:

可以从官方网站http://blackfin.μClinux.org处下载μClinux-list的内核源代码。运行解压命令:将tar -xvf μClinux-dist.tar.gz解压完毕后,就会生成/μClinux-dist目录,加入该目录后按如下顺序编译内核:

(1) make menuconfig;进入菜单方式配置指令;

(2) 选择所使用的平台类型和所使用的库

本文设计的目标板选择:AnalogDevices/BF533-EZKIT和μC-libc库。在配置栏中,选择Load an Alternate Configuration File,按确认,退出配置栏;

(3) make dep;寻找依存关系;

(4) make clean;清除以前构造内核时生成的所有目标文件、模块文件和一些临时文件;

(5) make lib_only;编译库文件;

(6) make user_only;编译用户应用程序文件;

(7) make romfs;生成romfs文件系统;

(8) make image;生成镜像文件然后通过Jtag口输入到目标板;

(9) make;通过各个目录的makefile文件进行,会在各目录下生成一大堆目标文件。

在上述步骤完成后,就完成了对μClinux源码的编译工作。最后会在/μClinux-dist/images目录下看到3个内核文件:linux.dxe,linux.bin和zImage.bin。如果编译不成功,需要根据编译过程的提示信息找到错误并重新编译,直到成功为止。

4.2 修改配置内核代码

直接由源代码编译生成的内核映像文件一般不会启动成功,需要根据自己的目标板进行配置。需要修改系统启动初始化文件crt0_ram.s,sysinit.c和ram.ld。

在crt0_ram.s中需要根据自己的目标板修改基地址、存储器大小和起始地址。在sysinit.c中需要修改片选设置,分别对FLASH和SDRAM进行片选设置。在ram.ld中修改内核连接加载地址。做完上面的修改,重新编译生成linux.dxe等文件。

4.3 μClinux内核的下载与执行

μClinux 内核有2种可选的运行方式:一种是在FLASH上直接运行;另一种是加载到内存中运行,系统启动时从FLASH中读取压缩的内核代码(存储器空间有限,所以一般需要压缩内核代码)到内存中解压,然后开始执行,这种方法比第一种的速度更快(RAM的存取速度比FLASH的快)。所以选取第二种方法。

编译好的内核文件可以由Visual DSP++开发装置,通过网口或串口把linux.dxe下载到目标板的FLASH中,从设定的入口地址(一般为0x1000)执行即可启动内核。

启动μClinux就可以在超级终端看到μClinux的欢迎信息和简单的shell提示符,界面如图3所示。

5 在μClinux下添加应用程序

为了方便,μClinux用户层的应用程序代码都放在/μClinux-dist/user/目录下,否则要自己重新定义很多宏,而且容易出错。具体实现过程如下:

(1) 在工作目录的user目录下创建应用程序的文件夹user/app然后编写应用程序,编写方法和普通的应用程序一样;

(2) 在文件/user/Makefile里添加如下一句以便把用户的应用加入到μClinux系统的编译列表中;

dir_MYM(CONFIG_USER_MYAPP)+=app

(3) 在/config/config.in里加入如下语句:

mainmenu_option next_comment

comment"My New Application"

bool‘myapp'CONFIG_USER_MYAPP

endmenu

这样在编译时会多1个配置选项,当选择这一选项时,字符串“CONFIG USER MYAPP”就会定义为“Y,参考上一个步骤,dir Y+=app,应用会被编译入内核

(4) 为便于内核配置在/config/config.help中加入有关该应用的帮助说明;

(5) 回到/μClinux-dist目录,执行make编译μClinux系统内核和这里的应用程序。

6 结 语

对于嵌入式系统开发人员来说,要将嵌入式操作系统应用到嵌入式系统中,首先要做的工作是根据不同的硬件平台移植操作系统,掌握移植的方法非常重要。

本文所述的移植方法已经成功应用于多个项目的开发。所述的移植虽然是针对Blackfin处理器芯片ADSP-BF533,但重点阐述的是移植的思路和方法。对将μClinux移植到其他处理器为核心的硬件平台也有借鉴作用。

本文从如何将嵌入式操作系统μClinux与特定硬件相结合出发,分析移植μClinux到ADSP-BF533的过程。作者将自己成功移植所修改的部分做了详细的分析。有利于应用μClinux的人员快速理解,移植μClinux到特定的硬件平台上去。

参考文献

[1]李岩,荣盘.基于S3C44B0嵌入式μClinux系统原理及应用[M].北京:清华大学出版社,2005.

[2]杨瑞亚,肖璋.嵌入式μClinux内核启动过程分析与设计[J].微计算机信息,2005,21(8z):32-33.

[3]陈峰.Blackfin系列DSP原理与系统设计[M].北京:电子工业出版社,2004.

[4]杨锐,赵剡.ARM系统设计及USB主机扩展方案[J].微计算机信息,2005,21(3):72-73.

【BF533】推荐阅读:

上一篇:人文关爱下一篇:课堂教学契机的把握

本站热搜

    相关推荐