Ⅰ 嵌入式系统自学
嵌入式系统软件工程 方法实用技术及应用,免费下载
链接:https://pan..com/s/10No3IypKyLg01bV4T9b22w
《嵌入式系统软件工程:基础知识、方法和应用》系统地阐述嵌入式系统软件工程所涉及的过程、方法、内容,以及在典型工业领域中的应用。全书内容分为两大部分:第一部分介绍嵌入式系统软件工程方法论,主要包括嵌入式软件的开发过程(需求工程、软件和系统体系结构、编程和测试等内容),开发和测试中所采用的标准,与安全性相关的软件系统的准入,以及嵌入式软件所涉及的法律问题:第二部分介绍嵌入式系统软件在汽车领域、轨道交通领域、航天领域、医疗器械、工业自动化、通信系统中的应用,在每个应用领域重点介绍具体应用领域的一些特定需求、技术和限制条件,以及它们对于嵌入式系统软件开发过程的影响。
Ⅱ 帮忙求解DSP中 CMD文件含义
1命令文件的组成
命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写。MEMORY,用来配置目标存储器,SECTIONS用来指定段的存放位置。结合下面的典型DOS环境的命令文件link.cmd来做一下说明:
file.obj //子目标文件名1
file2.obj //子目标文件名2
file3.obj //子目标文件名3
- o prog.out //连接器操作指令,用来指定输出文件
- m prog.m //用来指定MAP文件
MEMORY
{ 略 }
SECTIONS
{ 略 }
otherlink.cmd
本命令文件link.cmd要调用的otherlink.cmd等其他命令文件,则文件的名字要放到本命令文件最后一行,因为放开头的话,链接器是不会从被调用的其他命令文件中返回到本命令文件。
2 MEMORY伪指令
MEMORY用来建立目标存储器的模型,SECTIONS指令就可以根据这个模型来安排各个段的位置,MEMORY指令可以定义目标系统的各种类型的存储器,及容量。MEMORY的语法如下:
MEMORY
{
PAGE 0 : name1[(attr)] : origin = constant,length = constant
name1n[(attr)] : origin = constant,length = constant
PAGE 1 : name2[(attr)] : origin = constant,length = constant
name2n[(attr)] : origin = constant,length = constant
PAGE n : namen[(attr)] : origin = constant,length = constant
namenn[(attr)] : origin = constant,length = constant
}
PAGE关键词对独立的存储空间进行标记,页号n的最大值为255,实际应用中一般分为两页,PAGE 0程序存储器和PAGE 1数据存储器。
name存储区间的名字,不超过8个字符,不同的PAGE上可以出现相同的名字(最好不用,免的搞混),一个PAGE内不许有相同的name。
attr的属性标识,为R表示可读;W可写X表示区间可以装入可执行代码;I表示存储器可以进行初始话,什么属性代码也不写,表示存储区间具有上述的四种属性,基本上我们都选择这种写法。
origin:略。
length:略。
下面是我经常用的2407的简单写法大家参考,程序从0x060是要避开加密位,不从0x0044开始更可靠一点,此例中的同名的页可以只写第一个,其后省略,但写上至少安全一点:
MEMORY
{
PAGE 0: VECS: origin = 0x0000, length 0x40
PAGE 0: PROG: origin = 0x0060, length 0x6000
PAGE 1: B0 : origin = 0x200, length 0x100
PAGE 1: B1 : origin = 0x300, length 0x100
PAGE 1: DATA: origin = 0x0860, length 0x0780
}
3 SECTIONS伪指令
SECTIONS指令的语法如下:
SECTIONS
{
.text: {所有.text输入段名} load=加载地址 run =运行地址
.data: {所有.data输入段名} load=加载地址 run =运行地址
.bss: {所有.bss输入段名} load=加载地址 run =运行地址
.other: {所有.other输入段名} load=加载地址 run =运行地址
}
SECTIONS必须用大写字母,其后的大括号里是输出段的说明性语句,每一个输出段的说明都是从段名开始,段名之后是如何对输入段进行组织和给段分配存储器的参数说明:
以.text段的属性语句为例,“{所有.text输入段名}”这段内容用来说明连接器输出段的.text段由哪些子目标文件的段组成,举例如下
SECTIONS
{
.text:{ file1.obj(.text) file2(.text) file3(.text,cinit)}略
}
指明输出段.text要链接file1.obj的.text和 file2的.text 还有file3的.text和.cinit。在CCS的SECTIONS里通常只写一个中间没有内容的“{ }”就表示所有的目标文件的相应段
接下来说明“load=加载地址 run =运行地址”链接器为每个输出段都在目标存储器里分配两个地址:一个是加载地址,一个是运行地址。通常情况下两个地址是相同的,可以认为输出段只有一个地址,这时就可以不加“run =运行地址”这条语句了;但有时需要将两个地址分开,比如将程序加载到FLASH,然后放到RAM中高速运行,这就用到了运行地址和加载地址的分别配置了,如下例所示:
.const :{略} load = PROG run = 0x0800
常量加载在程序存储区,配置为在RAM里调用。
“load=加载地址”的几种写法需要说明一下,首先“load”关键字可以省略,“=”可以写成“>”, “加载地址”可以是:地址值、存储区间的名字、PAGE关键词等,所以大家见到“.text:{ } > 0x0080”这样的语句可千万不要奇怪。“run =运行地址”中的
Ⅲ TMS320F2407A的详细资料
TMS320F2407A是一款高速,高性能,低成本的微处理器,其内部集成了众多数控系统所需的外扩设备,可以实现SPI,SCI,PWM, A/D等功能。其内部的两个事件管理器模块EVA和EVB,各包含了两个16位通用定时器及8个16位的脉宽调制(PWM)通道,可应用于电机控制及其他逆变器控制领域。美中不足的是,该系列DSP内部没有D/A功能,该功能通常须外接数模转换芯片来实现,这不仅增加了系统的成本,也使系统设计复杂化。本文提出了一种使用F2407A内部的PWM信号,经滤波处理后实现D/A功能的方法。实验结果表明,其转换精度可以达到10位以上专用D/A芯片的精度,且该方法设计简单,有较好的实用价值。
1 D/A实现原理
在F2407A型DSP中,通过软件编程可以很方便地对PWM信号实现周期和占空比的控制。PWM信号是一组幅值为3.3V的方波,可以通过傅里叶变换,使其分成直流和交流两部分,如图1所示,其中ud(t)是输出的PWM信号,Uo是PWM信号中的直流成分,ua(t)是信号中的交流成分。
图1 PWM信号分解原理图
将ud(t)用傅里叶级数表示,即
ud(t)=Uo+ansin2nπft+bncos2nπft (1)
其中:
an=ud(t)sin2nπftdt (2)
bn=ud(t)cos2nπftdt (3)
Uo=ud(t)dt (4)
式中:f,T分别是PWM信号频率和周期。
设PWM波形具有偶函数特性,即ud(t)=ud(-t),则式(1)中an=0,
bn={sin(nπD)-sin[2nπ]} (5)
式中:n=1,2,3……;
D是PWM的占空比。
则直流电压为
Uo=3.3D(V) (6)
从理论上分析,改变占空比就可以使直流输出电压Uo在0~3.3V范围内变化。输出的谐波频率是PWM频率的倍数,一般可以通过低通滤波器滤除。PWM频率越高,滤波效果越好。
2 D/A精度分析
F2407A的工作频率为40MHz,内部寄存器长度为16位字长。PWM信号通过定时器计数的方式在周期中断中获得,因此,不可避免存在一个计数步长的量化误差。这个误差会产生一个纹波叠加在输出直流电压上,因此,应尽量减少。通常当PWM的频率为f时,DSP工作频率为fc时,这个量化误差电压值为
=3.3×(V)(7)
例如,当f=20kHz,=1.65mV,其分辨率为1/2000,接近11位D/A芯片的分辨率。
可见,当PWM频率越低,DSP产生定时中断所需的计数值越大,其量化误差的影响越小。但是,考虑到输出低通滤波器的特性,当PWM频率降低时,产生的谐波频率也随之降低,则对于带宽和截止频率一定的滤波器来说,就会有更多的低次谐波通过滤波器,这部分谐波叠加在直流量上同样会产生误差电压。因此,本文 D/A转换的误差主要来源于这两个方面,由于两个误差具有相互制约性,必须通过折中的方法选取一个合适的PWM载波频率。表1(通过Matlab仿真)是选用不同的PWM频率和不同阶数的滤波器时的性能比较。仿真时采用截止频率为2kHz的巴特沃兹滤波器。图2是当PWM信号频率为20kHz时,经不同阶数滤波器后直流电压的纹波比较,图中从上到下依次是二阶、三阶、四阶的滤波效果。图3是PWM信号频率为40kHz时,滤波后直流电压的纹波,图中从上到下依次为二阶、三阶、四阶的滤波效果。
图2 f=20kHz时不同阶数滤波器时的输出纹波
图3 f=40kHz时不同阶数滤波器时的输出纹波
表1 不同阶数滤波特性的比较 滤波器 f/kHz 纹波幅值/V D/A位数
二阶 20 0.04 6.4
二阶 40 0.004 9.7
三阶 20 0.0044 9.6
三阶 40 0.0005 12.7
四阶 20 0.0004 13.0
四阶 40 0.00005 16.0
3 模拟滤波器的设计
滤波器按不同的频域或时域特性要求,可分为巴特沃兹(Butterworth)型,契比雪夫(Chebyshev)型,贝赛尔(Bessel)型,椭圆型等标准型。相同的电路,通过选取不同的R和C参数可以实现不同的类型。其中,巴特沃兹型滤波器具有最平坦的通带幅频特性;契比雪夫型特点是通带内增益有波动,但这种滤波器的通带边界下降快;贝赛尔型通带边界下降较为缓慢,其相频特性接近线性;椭圆型的滤波特性很好,但模拟电路复杂,元件选择较为困难,实现难度大,故不常采用。本设计要求通带尽量平坦,而且过渡带和截止带衰减尽量快,因此,只考虑巴特沃兹型。
模拟二阶、三阶电路结构如图4所示。对于图4(a)所 示 的 二 阶 电 路 , 其 传 递 函 数 为
H(s)= ( 8)
对 于 图 4(b)所 示 的 三 阶 电 路 , 其 传 递 函 数 为
H(s)= ( 9)
式 中 :a0=R1R2R4C1C2C3;
a1=[R4C2C3(R1+R2)R1R2C1C2];
a2=[R4C3+C2(R1+R2)]。
具 体 参 数 计 算 如 下 。
(a) 二阶电路图 (b) 三阶电路图
图4 巴特沃兹型滤波电路
3.1 两阶电路参数计算
巴特沃兹二阶滤波器的一般表达式为
H(s)=
式中:p=s/ωc;
b1=ωc2R1R2C1C2=1;
b0=ωc(R1C2+R2C2)=。
取ωc=2πf=4000π时,可得R1=0.68kΩ,R2=10kΩ,C1=0.1μF,C2=0.01μF。实际截止频率为1930Hz。
3.2 三阶电路参数计算
三阶巴特沃兹滤波器的一般表达式为
H(s)=
式中:b2=ωc3R1R2R4C1C2C3=1;
b1=ωc2[R4C2C3(R1+R2)+R1R2C1C2]=2;
b0=ωc[R4C3+C2(R1+R2)]=2。
取ωc=2πf=4000π,可得R1=1.2kΩ,R2=10kΩ,R4=0.4kΩ,C1=0.1μF,C2=0.01μF,C3=0.1μF,实际截止频率为1989Hz。
4 实验结果
图5是采用40kHz频率时的滤波效果,CH1所示的是经二阶模拟滤波器后的直流电压,CH2所示的是经三阶模拟滤波器后的直流电压,滤波器的具体参数选用同上文,PWM的占空比为0.5。
图5 不同阶滤波效果的比较(1V/div,20μs/div)
图5中CH1的波形中有较大的纹波毛刺叠加在直流分量上,其输出平均值在1.6V左右,转换精度不高。CH2的波形和CH1相比,纹波分量减小很明显,输出波形的平均值在1.65V左右,理论分析该波形转换分辩率可以达到12.7左右,已经接近或达到一般D/A芯片的分辨率要求,因此,有较好的应用价值。
5 结语
通过外接滤波电路,DSP输出的PWM信号可以完成D/A功能的扩展,且合理选择输出PWM的频率和滤波器的阶数,可以使转换的分辨率达到12位以上,且外设滤波电路较为简单,因此,具有一定的应用价值.
Ⅳ DSP TMS320F28335如何去学,怎么去用主要是它的工作原理怎么去掌握
28335跟2812差不多啊,就是外设多一些,是浮点DSP,引脚都是一样的内部存储器也变化了,先学内核,外设用到什么再去学,这方面的中文资料较少,只有上TI网站下载技术文档,文档编号:sprufbob,sprs439d.还有很多外设的文档资料,都是PDF格式,还有一个很文档很重要:sprc530.这个文档中定义了该DSP中所有寄存器,他不像平常C语言用宏定义的形式,而是用得结构体,共同体,位定义,你看了就知道了。还有就是TI网上还有许多外设应用的例子。你可以在板子上试验。我也刚学一年,理解不深,希望对你有帮助!