第6章 TMS320C54x程序设计与应用_第1页
第6章 TMS320C54x程序设计与应用_第2页
第6章 TMS320C54x程序设计与应用_第3页
第6章 TMS320C54x程序设计与应用_第4页
第6章 TMS320C54x程序设计与应用_第5页
已阅读5页,还剩143页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 dsp中数据表示方法中数据表示方法算数运算算数运算浮点数运算浮点数运算宏定义和调用宏定义和调用数据传递数据传递6.1.1数的表示方法数的表示方法整数和小数整数和小数 一个一个16位的二进制数既可以表示一个整数,也可位的二进制数既可以表示一个整数,也可以表示一个小数。以表示一个小数。当它表示一个整数时,其最低位(当它表示一个整数时,其最低位(d0)的权为)的权为20,d1的权为的权为21,次高位(,次高位(d14)的权为的权为214。 当需要表示小数时,小数点的位置始终在最高当需要表示小数时,小数点的位置始终在最高位后,最高位(位后,最高位(d15)表示符号位。)表示符号位。次高位(次高位(d

2、14)的权为的权为2-1,然后是,然后是2-2,最低位,最低位(d0)的权为的权为2-15。4000h表示小数表示小数0.5,1000h是小数是小数2-3 = 0.125,0001h则表示则表示16位定点位定点dsp能表示的最小的小数能表示的最小的小数(有符号)(有符号) 2-15 = 0.000030517578125。6.1.1数的表示方法数的表示方法整数和小数整数和小数 在在dsp中,一个中,一个16进制的数可以表示不同的十进制数,或进制的数可以表示不同的十进制数,或者是整数,或者是小数(如果表示小数,必定小于者是整数,或者是小数(如果表示小数,必定小于1),但),但仅仅是在做整数乘除或

3、小数乘除时,系统对它们的处理才是仅仅是在做整数乘除或小数乘除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。有所区别的,而在加减运算时,系统都当成整数来处理。 在在c54x中,将一个小数用中,将一个小数用16位定点格式来表示的方法是位定点格式来表示的方法是用用215 (32768)乘以该小数,将结果的整数部分转换成十六进乘以该小数,将结果的整数部分转换成十六进制即可以。制即可以。6.1.1数的表示方法数的表示方法整数和小数整数和小数如:如:0.5: *32768=16384: 4000h -0.5: 绝对值绝对值*32768=16384: 4000h: 取反加取反加1

4、: c000h在汇编语言中,不能直接写入十进制小数。比如要定义一个系数在汇编语言中,不能直接写入十进制小数。比如要定义一个系数0.707,可以写成:可以写成: .word 32768*707/1000 如果表示一个有符号数时,最高位(如果表示一个有符号数时,最高位(d15)为符)为符号位,号位,0表示正数,表示正数,1表示负数。表示负数。 例如,例如,7fffh表示最大的正数表示最大的正数32767(十进制),(十进制),而而ffffh表示最大的负数表示最大的负数-1(负数用二进制的补(负数用二进制的补码方式显示)。码方式显示)。6.1.1数的表示方法数的表示方法正数和负数正数和负数alu (

5、adder)multiplier(17x17)(rpt+sub)6.1.2算数运算算数运算定点加法定点加法ld temp1,a add temp2,a stla,temp3v没有特意考虑没有特意考虑temp1和和temp2是整数还是小数是整数还是小数temp3=temp1+temp2;变量;变量temp1装入累加器装入累加器a;变量;变量temp2与累加器与累加器a相加,结相加,结果放入果放入a;结果(低;结果(低16位)存入变量位)存入变量temp3中。中。6.1.2算数运算算数运算定点减法定点减法 stm #temp1,ar3;变量;变量temp1的地址装入的地址装入 ar3寄存器寄存器s

6、tm #temp2,ar2;变量;变量temp2的地址装入的地址装入 ar2寄存器寄存器sub *ar2, *ar3,b ;变量;变量temp2和和temp1都左移都左移 16位,然后相减,结果放入位,然后相减,结果放入 累加器累加器b中(高中(高16位)位)sth b,temp3 ;相减的结果(累加器;相减的结果(累加器b的高的高 16位)存入变量位)存入变量temp3。6.1.2算数运算算数运算定点整数乘法定点整数乘法 c54x提供了大量的乘法运算指令,提供了大量的乘法运算指令,其结果都是其结果都是32位。位。mpyu是一条专用于无符号数乘法运算的是一条专用于无符号数乘法运算的指令,而其它

7、的乘法指令都是有符号数的指令,而其它的乘法指令都是有符号数的乘法乘法6.1.2算数运算算数运算定点整数乘法定点整数乘法rsbx frct ;清;清frct标志,准备整数乘法标志,准备整数乘法ld temp1,t ;变量;变量temp1装入装入t寄存器寄存器mpy temp2,a ;temp2*temp1,结,结 果放入累加器果放入累加器a(32位)位)stha,temp3 ;结果的高;结果的高16位存入位存入temp3stla,temp4 ;结果的低;结果的低16位存入位存入temp46.1.2算数运算算数运算定点小数乘法定点小数乘法v 由于两个小数相乘,其结果的小数点的由于两个小数相乘,其结

8、果的小数点的位置在次高的后面,所以必须左移一位,位置在次高的后面,所以必须左移一位,才能得到正确的结果。才能得到正确的结果。 v c54x中提供了一个状态位中提供了一个状态位frct,将其,将其设置为设置为1时,系统自动将乘积结果左移一时,系统自动将乘积结果左移一位。位。6.1.2算数运算算数运算定点小数乘法定点小数乘法ssbx frct ;frct=1,准备小数乘法,准备小数乘法ld temp1,16,a;temp1装入装入a的高的高16 位位mpya temp2 ;temp2乘乘a的高的高16位,结位,结 果果 在累加器在累加器b中中sthb,temp3 ;将乘积的高;将乘积的高16位存位

9、存temp36.1.2算数运算算数运算定点小数乘法定点小数乘法例例temp1=0ccdh(十进制的(十进制的0.1)temp2=599ah(十进制的(十进制的0.7) 两数相乘后两数相乘后b累加器的内容为累加器的内容为08f5f0a4h(十(十进制的进制的0.07000549323857) 如果仅保存结果的高如果仅保存结果的高16位位08f5h(十进制的(十进制的0.06997680664063)6.1.2算数运算算数运算除法运算除法运算6.1.2 算数运算算数运算除法运算除法运算6.1.2 算数运算算数运算除法运算除法运算与整数除法不同之处:与整数除法不同之处:分子加载在分子加载在acc高高

10、16位位n位小数只需位小数只需n-1次减法计算次减法计算6.1.2 算数运算算数运算除法运算除法运算6.1.2 算数运算算数运算除法运算除法运算6.1.3 浮点运算程序浮点运算程序6.1.3 浮点运算程序浮点运算程序6.1.3 浮点运算程序浮点运算程序6.1.3 浮点运算程序浮点运算程序6.1.3 浮点运算程序浮点运算程序6.1.3 浮点运算程序浮点运算程序6.1.3 浮点运算程序浮点运算程序数据存储器数据存储器被乘数被乘数乘数乘数被乘数的指数被乘数的指数被乘数的尾数被乘数的尾数乘数的指数乘数的指数乘数的尾数乘数的尾数乘积的指数乘积的指数乘积的尾数乘积的尾数乘积乘积暂存单元暂存单元a1a2b1

11、c1b2c2epmpprodtemp6.1.3 浮点运算程序浮点运算程序数据存储器数据存储器a1被乘数被乘数a2乘数乘数b1 被乘数的指数被乘数的指数c1 被乘数的尾数被乘数的尾数b2乘数的指数乘数的指数c2乘数的尾数乘数的尾数ep乘积的指数乘积的指数mp乘积的尾数乘积的尾数prod乘积乘积temp暂存单元暂存单元0.4-0.9; ;设堆栈指针设堆栈指针; ;将将a1a1和和a2a2送入送入ramram8ccd; ;将将a1a1转换为浮点数转换为浮点数; ;将将a1a1送入送入ahah3333agagahahalal003333 0000; ;求求a1a1的指数的指数t t0001; ;将将a

12、1a1的指数送的指数送b1b10001; ;求求a1a1的尾数的尾数即即a a左移左移1 1位位006666 0000; ;将将a1a1的尾数送的尾数送c1c16666; ;将将a2a2转换为浮点数转换为浮点数; ;将将a2a2送入送入ahah00 8ccd 0000; ;求求a2a2的指数的指数0000; ;将将a2a2的指数送的指数送b2b20000; ;求求a2a2的尾数的尾数; ;将将a2a2的尾数送的尾数送c2c28ccd; ;调浮点乘法子程序调浮点乘法子程序数据存储器数据存储器a13333a28ccdb10001c16666b20000c28ccdep乘积的指数乘积的指数mp乘积的

13、尾数乘积的尾数prod乘积乘积temp暂存单元暂存单元agagahahalal00 8ccd 0000t t0000; ;完成指数相加完成指数相加; ;取取b1b1送入送入a a000000 0001; ;b1+b2b1+b2送入送入a a000000 0001; ;乘积指数送乘积指数送epep0001; ;完成尾数相乘完成尾数相乘; ;取取a1a1的尾数的尾数6666; ;求尾数的乘积求尾数的乘积即:乘积尾数即:乘积尾数=c1=c1c2c2c1c2=-0.72; ;求尾数乘积的指数求尾数乘积的指数0000; ;指数存入指数存入temptemp0000; ;求乘积的尾数求乘积的尾数ffa3d7

14、 xxxx; ;存乘积的尾数存乘积的尾数a3d7; ;修正乘积指数修正乘积指数; ;取尾数乘积的指数取尾数乘积的指数000000 0000;(ep)+(temp)a;(ep)+(temp)a000000 0001; ;保存乘积指数保存乘积指数0001数据存储器数据存储器a13333a28ccdb10001c16666b20000c28ccdep0001mpa3d7prod乘积乘积temp0001agagahahalal000000 0001t t0000; ;浮点乘积转换为定点数浮点乘积转换为定点数; ;乘积指数反号乘积指数反号ffffff fffe; ;暂存暂存a afffe; ;取乘积指数

15、取乘积指数fffe; ;将将(mp)ah(mp)ahff3ad7 0000; ;将将a a按按t t移位,得定点数移位,得定点数ffd1ec 0000; ;保存定点乘积保存定点乘积d1ec; ;子程序返回子程序返回6.1.4 宏定义与调用宏定义与调用add3 .macro p1,p2,p3,addrp;三数相加宏定义三数相加宏定义 ;addrp = p1 + p2 + p3ld p1,aadd p2,aadd p3,astl a,addrp.endmadd3 dat0,dat1,dat2,dat3 ;三数相加操作三数相加操作;dat3 = dat0 + dat1 + dat2定义宏:定义宏:调

16、用宏调用宏6.1.5 数据传递数据传递阅读:阅读:p343 数据存储器和程序存储器实验说明数据存储器和程序存储器实验说明分析:分析:p350 数据存储器和程序存储器实验源程序数据存储器和程序存储器实验源程序要求:要求:结合附录指令集,掌握基本数据传递指令和寻址方式的结合附录指令集,掌握基本数据传递指令和寻址方式的 使用。使用。6.2 dsp 在信号发生器上的应用在信号发生器上的应用 信号发生器是通信、电子技术应用领域最常见的设备。目信号发生器是通信、电子技术应用领域最常见的设备。目前很多信号可由前很多信号可由dds(direct digital synthesis )来产生,主要采用)来产生,

17、主要采用查表法。此种方法适用于精度要求不是很高的场合,如果精度查表法。此种方法适用于精度要求不是很高的场合,如果精度要求较高则查表量就会很大,相应的存储容量也要求很大。另要求较高则查表量就会很大,相应的存储容量也要求很大。另一种产生信号的方法是通过计算获得信号的相关数据一种产生信号的方法是通过计算获得信号的相关数据。 常见的波形信号有:方波、正弦波等。方波信号容易实现,常见的波形信号有:方波、正弦波等。方波信号容易实现,如定时中断。如定时中断。 正弦波信号可用相应的算法实现正弦波信号可用相应的算法实现6.2 dsp 在信号发生器上的应用在信号发生器上的应用正弦波算法介绍:正弦波算法介绍:利用正

18、弦函数的对称性和周期性,可以不用计算利用正弦函数的对称性和周期性,可以不用计算360度的所度的所有角度值,只要计算有角度值,只要计算045度的度的sinx和和cosx的值的值(精度为(精度为0.5度)度) ,再利用,再利用sin2x=2sinx*cosx,求出,求出090度的值度的值(精度为(精度为1度)度) ,然后,然后通过复制可获得通过复制可获得0360度的度的sinx。可将获得的。可将获得的sinx值放入一个表中,重复的向值放入一个表中,重复的向da输出,通过输出,通过da即可得到相应即可得到相应的正弦波形,改变输出的延时可得到频率不同的正弦波,选的正弦波形,改变输出的延时可得到频率不同

19、的正弦波,选取不同的系数乘以取不同的系数乘以sinx值可改变正弦波的幅值,改变值可改变正弦波的幅值,改变sinx输输出表的输出顺序可改变波形的相位。出表的输出顺序可改变波形的相位。6.2 dsp 在信号发生器上的应用在信号发生器上的应用正弦波算法介绍:正弦波算法介绍:sinx和和cosx的计算:的计算:泰勒级数展开法(取前五项)泰勒级数展开法(取前五项))871(651(431(21!8!6!4!21cos)981(761(541(321(!9!7!5!3sin2222864222229753xxxxxxxxxxxxxxxxxx6.2 dsp 在信号发生器上的应用在信号发生器上的应用正弦函数正

20、弦函数sinx程序实现:程序实现:开辟存储单元:开辟存储单元:7fffh dsp能表示的能表示的最大的小数;最大的小数;32767/3276816.2 dsp 在信号发生器上的应用在信号发生器上的应用正弦函数正弦函数sinx程序实现:程序实现:关键指令:关键指令:(1)并行存储和装载指令:)并行存储和装载指令:st src, ymem ;hi(src)ymem |ld xmem, dst ; xmemhi(dst)(2)乘减指令:)乘减指令:masr xmem,ymem,src, dst ; (src- xmem*ymem)dst,xmemt6.2 dsp 在信号发生器上的应用在信号发生器上的

21、应用余弦函数余弦函数cosx程序实现:程序实现:只要改变只要改变table单元的值即可单元的值即可6.2 dsp 在信号发生器上的应用在信号发生器上的应用计算计算0359度的正弦值算法,度的正弦值算法,精度为精度为1度:度:sin0sin90sin91sin179sin180sin3596.2 dsp 在信号发生器上的应用在信号发生器上的应用计算计算0359度的正弦值程序实现:度的正弦值程序实现:需开辟的存储区:需开辟的存储区:sin_x: .usect sin_x , 360关键指令:关键指令:(1)循环寻址:)循环寻址:stm #lk, bk 寻址地址由寻址地址由*arx+0%提供提供 ;

22、循环长度放入;循环长度放入bk ;arx指向寻址单元,每寻址一次用指向寻址单元,每寻址一次用arx+ar0的内容做下次寻址的内容做下次寻址 stm #sin_x , ar6 stm #1 , ar0stm #360 , bkportw * ar6+0% , pa0例如:例如:6.2 dsp 在信号发生器上的应用在信号发生器上的应用计算计算0359度的正弦值程序实现:度的正弦值程序实现:关键指令:关键指令:(1)循环寻址:)循环寻址:stm #lk, bk 寻址地址由寻址地址由*arx+0%提供提供 ;循环次数放入;循环次数放入bk ;arx指向寻址单元,每寻址一次用指向寻址单元,每寻址一次用a

23、rx+ar0的内容做下次寻址的内容做下次寻址 stm #sin_x , ar6 stm #1 , ar0stm #360 , bkportw * ar6+0% , pa0例如:例如:6.3 dsp 中断应用中断应用一、一、dsp中断系统:中断系统:1、不可屏蔽硬件中断:、不可屏蔽硬件中断:reset、nmi2、软件中断(不可屏蔽):、软件中断(不可屏蔽):reset, intr, trap(单片支持(单片支持30条软件中断)条软件中断)3、可屏蔽硬件中断、可屏蔽硬件中断(1)片外中断:)片外中断:int0int3:四级片外中断四级片外中断(2)片内外设中断:)片内外设中断:rint0、xint

24、0:片内串口片内串口0收、发中断收、发中断rint1、xint1:片内串口片内串口1收、发中断收、发中断tint0、tint1:片内定时器片内定时器0、1的定时中断的定时中断hpint:主机接口中断主机接口中断brint0brint1:mcbsp接收中断接收中断bxint0bxint1:mcbsp发送中断发送中断dmac0dmac5:6通道通道dma中断中断使用中断前要掌握中断优先使用中断前要掌握中断优先级,并根据优先级编写中断级,并根据优先级编写中断向量表。向量表。中断优先级中断优先级:p109二、编写中断向量表程序二、编写中断向量表程序 从中断优先级表中可以从中断优先级表中可以看出,每级中

25、断在向量表看出,每级中断在向量表中占有中占有4 4个字的空间;所以个字的空间;所以在编写中断向量表时要注在编写中断向量表时要注意意中断级别顺序中断级别顺序的同时,的同时,也要注意各级中断在也要注意各级中断在向量向量表中的地址表中的地址。6.3 dsp 中断应用中断应用memory page 0:vec : origin = 1000h, length = 0ffh prog: origin = 1100h, length = 8000h page 1: data: origin = 080h, length = 0807fhsections .text prog page 0 .int_tab

26、le vec page 0 .stack data page 1._tablevector:rs b _c_int00 nop nopnmi b _ret nop nopsint17 b _ret nop nopsint18 b _ret nop nopsint19 b _ret nop nopsint20 b _ret nop nop sint21 b _ret nop nopsint22 b _ret nop nopsint23 b _ret nop nopsint24 b _ret nop nopsint25 b _ret nop nopsint26 b _ret nop

27、 nopsint27 . b _ret nop nop sint28 b _ret nop nopsint29 b _ret nop nopsint30 b _ret nop nopint0 b _ret nop nopint1 b _ret nop nopint2 b _ret nop noptint0 b _tin nop nopbrint0 b _ret nop nopbxint0 b _ret nop noptrint1 b _ret nop nopdmac1 b _ret nop nopint3 b _ret nop nophpint b _ret nop nopq26 b _ret

28、 nop nopq27 b _ret nop nopdmac4 b _ret nop nopdmac5 b _ret nop nopb: 无条件转移指令(无条件转移指令(2w)nop: 空指令(空指令(1w)二、编写中断向量表程序二、编写中断向量表程序 对于系统中不用的中断可用对于系统中不用的中断可用0填充;填充; .space 伪指令:伪指令:格式:格式:.space n*m*16功能:功能:紧接着上条指令开始,填充紧接着上条指令开始,填充n*m*16位位06.3 dsp 中断应用中断应用例如:例如:b loop1.space 1*16; 在在b指令后保留一个字的空间,该空间用指令后保留一个

29、字的空间,该空间用0填充填充二、编写中断向量表程序二、编写中断向量表程序 对于系统中不用的中断可用对于系统中不用的中断可用0填充;填充;6.3 dsp 中断应用中断应用 .sect “.vectors”rst: b _c_int00 nop nop .space 17*4*16int2: b _onkey nop nop .space 13*4*16该中断向量表中只有两个中断;该中断向量表中只有两个中断;其余未使用中断填其余未使用中断填0处理处理三、中断相关寄存器三、中断相关寄存器 系统中与中断相关的寄存器和控制位有三:系统中与中断相关的寄存器和控制位有三:中断标志寄存器中断标志寄存器ifr

30、p1076.3 dsp 中断应用中断应用三、中断相关寄存器三、中断相关寄存器 系统中与中断相关的寄存器和控制位有三:系统中与中断相关的寄存器和控制位有三:中断屏蔽寄存器中断屏蔽寄存器imr p1076.3 dsp 中断应用中断应用三、中断相关寄存器三、中断相关寄存器 系统中与中断相关的寄存器和控制位有三:系统中与中断相关的寄存器和控制位有三:中断方式位中断方式位intm (st1 .11)6.3 dsp 中断应用中断应用使能中断步骤:使能中断步骤:(1)intm=1;关全局中断,为初始化各寄存器做准备;关全局中断,为初始化各寄存器做准备(2)ifr对应位对应位=1;清除上次未完成中断;清除上次

31、未完成中断(3)imr对应位对应位=1;打开对应中断;打开对应中断(4)intm=1;开全局中断,等待中断到来;开全局中断,等待中断到来四、中断应用举例四、中断应用举例: 硬件中断实验(硬件中断实验(p346)6.3 dsp 中断应用中断应用 通过通过cpld扫描的按键产生一个硬件中断,扫描的按键产生一个硬件中断,dsp读取键盘扫读取键盘扫描码,并将该扫描码转换为描码,并将该扫描码转换为led的显示码送的显示码送led显示。显示。 系统共有系统共有6片片led,每片,每片led的显示码有段码和位码组成。的显示码有段码和位码组成。 如:如:将将0显示在各位(右显示在各位(右1)led上上:显示码

32、为:显示码为:3f01h其中:其中:高高8位为段码位为段码,低低8位为位码位为位码led显示模块地址:显示模块地址:b000h故:只要将故:只要将3f01h送送b000h,即可在各位显示,即可在各位显示0四、中断应用举例四、中断应用举例: 硬件中断实验(硬件中断实验(p346)6.3 dsp 中断应用中断应用 键盘扫描入口地址键盘扫描入口地址为:为:a008h,系统使用,系统使用int2作为键盘中断;作为键盘中断;故:当故:当int2中断到来后,系统从中断到来后,系统从a008h处读取键值,经换码后,处读取键值,经换码后,变为显示码,送变为显示码,送b000h显示即可。显示即可。四、中断应用举

33、例四、中断应用举例: 硬件中断实验(硬件中断实验(p346)6.3 dsp 中断应用中断应用五、程序设计五、程序设计(p358)cmd文件文件6.3 dsp 中断应用中断应用memorypage 0:vecs:origin = 0 xff80,length = 0 x80prog:origin = 0 x2000,length = 0 x2000page 1:data:origin = 0 x4000,length = 0 x1000dram:origin = 0 x5000,length = 0 x1000stack:origin = 0 x6000,length = 0 x1000sect

34、ions.vectors:vecs page 0.text:prog page 0.data:data page 1.bss:dram page 1.stack:stack page 1五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用 .title ex6.global _c_int00.mmregskey_addr.set0a008hd_led_addr.set0b000hkey_code1.set60hkey_code2.set61h .data .word 00h,3f06h,0605h,5b04h,4f03h,6602h,6d01h,7d06h,070

35、5h,7f04h .word 6f03h07702h,07c01h,3906h,5e05h,07904h,07103h,8002h ;bcd code 0 1 2 3 4 5 6 7 8 9 a b c d e f . 五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用 .sect “.vectors”rst: b _c_int00 nop nop .space 17*4*16int2: b _onkey nop nop .space 13*4*16五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用convert .macrora

36、wdatastm #4000h, ar3 ;ar3指向指向data表首表首andm #001fh, rawdata ; rawdata中的键码高中的键码高10位清位清0ld rawdata, aadd ar3, a ;ar3指向具体的显示码指向具体的显示码stl a, ar3nopnopld *ar3, a ;将该显示码取入将该显示码取入accstl a, rawdata ;显示码送回显示码送回rawdatanopnopnopnop.endm五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用.text_c_int00:ld #0h,dpstm #3000h, s

37、pssbx intm ;关中断关中断ssbx xf ;xf接一发光二极管,表示上电成功接一发光二极管,表示上电成功stm #07fffh, swwsr ;cpu与所有存储区域通信插入与所有存储区域通信插入7个等待周期个等待周期st #0000h, key_code2 ;键码初始化键码初始化0stm #0ffffh, ifr ;清除所有未完中断清除所有未完中断orm #0004h, imr ;使能使能int2中断中断rsbx intm ;开中断开中断五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用susp:portw key_code2, d_led_addr;

38、显示到数码管显示到数码管 rpt #0ffffh nop nop b susp ;等待中断等待中断五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用_onkey: noprpt #0ffffhnopnoprpt #0ffffhnopnoprpt #0ffffhnopnoprpt #0ffffhnopnopportr key_addr, key_code2 ;读取按键读取按键convert key_code2 ;将按键码转换成显示码将按键码转换成显示码五、程序设计五、程序设计(p358)asm文件文件6.3 dsp 中断应用中断应用exit rpt #0ffffh

39、nopnoprpt #0ffffhnopnoprpt #0ffffhnopnopstm #0ffffh,ifrrete6.4 dsp 串口通信设计串口通信设计1.异步串行通信设计异步串行通信设计2.同步串行通信设计同步串行通信设计 在实际的数字信号处理器在实际的数字信号处理器(dsp)系统中,经常要求系统中,经常要求dsp芯芯片与片与pc的串口连接,实现必要的数据采集与交换。但是在的串口连接,实现必要的数据采集与交换。但是在大多数型号的大多数型号的dsp芯片中,并没有集成通用异步接收发送设芯片中,并没有集成通用异步接收发送设备备(uart)接口,所以涉及到接口,所以涉及到dsp与与pc机的串行

40、通信时,总机的串行通信时,总是通过对是通过对mcbsp或通用或通用io口进行软件模拟,来实现收发数口进行软件模拟,来实现收发数据。但是,这种方法需要对通信协议有深刻的了解,软件据。但是,这种方法需要对通信协议有深刻的了解,软件编程很麻烦。并且在实际系统中编程很麻烦。并且在实际系统中dsp的的mcbsp和和io经常要经常要被其它工作占用,所以可考虑采用扩展被其它工作占用,所以可考虑采用扩展uart( tl16c550 )的方法来实现的方法来实现dsp-pc的异步串行通信。的异步串行通信。 通过通过dsp对对tl16c550(并变串)的访问,使(并变串)的访问,使8位数据以串行位数据以串行方式与方

41、式与pc机进行数据交换。该实验所需的硬件主要是机进行数据交换。该实验所需的硬件主要是dsp、tl16c550、max232接口芯片。接口芯片。实现过程:实现过程: st16c550是是exar公公司推出通用异步收发器司推出通用异步收发器(uart)电路,能够提供电路,能够提供数据的串数据的串/并、并并、并/串转换串转换功能。其中,串行数据流功能。其中,串行数据流的同步功能是通过在传输的同步功能是通过在传输数据中加入数据中加入起始位起始位和和结束结束位位组成的数据字节来实现组成的数据字节来实现的,通过在数据字节中附的,通过在数据字节中附加加奇偶校验位奇偶校验位确保数据的确保数据的完整性。接收方检

42、验奇偶完整性。接收方检验奇偶校验位,确定是否出现传校验位,确定是否出现传输错误。输错误。主要引脚:主要引脚: (1)a0a2: 片内寄存器的选择信号片内寄存器的选择信号;(2)d0 d7: 双向双向8位数据线位数据线;(3)cs0 ,cs1 ,cs2: 输入片选信号,输入片选信号,当当cs0 ,cs1为高电平,为高电平,cs2为低电平时,为低电平时, tl16c550被选中被选中;(4)ads: 地址选通信号,该信号有效时,可将地址选通信号,该信号有效时,可将cs0 ,cs1 ,cs2及及a0 ,a1 ,a2锁存在锁存在 tl16c550内部内部;(5)wr1 ,wr2 ,rd1 ,rd2:

43、读写输入信号读写输入信号;(6)xin,xout: 外部时钟端,可接晶振或外部时钟信号外部时钟端,可接晶振或外部时钟信号;(7)mr: 复位信号,当复位信号,当mr高电平时清零大多数寄存器高电平时清零大多数寄存器;(8)intrpt: 中断请求信号,为高电平时,通知中断请求信号,为高电平时,通知cpu有中断需要服务。有中断需要服务。(9)sout,sin: 串行串行发送、接收引脚。发送、接收引脚。(10)rts: 请求发送信号,低电平有效,发送端请求发送数据。请求发送信号,低电平有效,发送端请求发送数据。 (11)cts: 允许发送信号,低电平有效,接收端允许发送端的发送请求。允许发送信号,低

44、电平有效,接收端允许发送端的发送请求。 内部寄存器:内部寄存器: n1. max232芯片简介芯片简介 max232芯片是芯片是maxim公司生产的、包含两路接收器公司生产的、包含两路接收器和驱动器的和驱动器的ic芯片,适用于各种芯片,适用于各种eia-232c和和v.28v.24的的通信接口。通信接口。max232芯片内部有一个电源电压变换器,可芯片内部有一个电源电压变换器,可以把输入的以把输入的+5v电源电压变换成为电源电压变换成为rs-232c输出电平所需的输出电平所需的+10v电压。所以,采用此芯片接口的串行通信系统只需单电压。所以,采用此芯片接口的串行通信系统只需单一的一的+5v电源

45、就可以了。对于没有电源就可以了。对于没有+12v电源的场合,其适电源的场合,其适应性更强。加之其价格适中,硬件接口简单,所以被广泛应性更强。加之其价格适中,硬件接口简单,所以被广泛采用。采用。iosirb:io访问控制引脚,为低时表示访问访问控制引脚,为低时表示访问io设备;设备;r/w:读写控制引脚,为高表示读,为低表示写。:读写控制引脚,为高表示读,为低表示写。iosirb和和r/w都为低:选通都为低:选通urat的的wr1;iosirb为低为低, r/w为高:选通为高:选通urat的的rd1 利用利用dsp的多通道缓冲串口(的多通道缓冲串口(mcbsp)与串行)与串行adc/dac连接,

46、实现模拟量输入输出通道设计。连接,实现模拟量输入输出通道设计。 本设计仅针对本设计仅针对ad/da与与dsp的连接给予说明和介绍,对于的连接给予说明和介绍,对于通道中的传感器、信号调理、信号保持和滤波等环节暂不考通道中的传感器、信号调理、信号保持和滤波等环节暂不考虑。虑。 dsp利用同步串口接收利用同步串口接收ad数据(中断方式),并将该数数据(中断方式),并将该数据存放到指定据存放到指定ram; dsp利用同步串口向利用同步串口向da发送接收到的数据(中断方式)。发送接收到的数据(中断方式)。涉及器件:涉及器件:(1)dsp片内多通道缓冲串口(片内多通道缓冲串口(mcbsp)(2)tlc32

47、0ad50(集成(集成a/d、d/a)一、一、 mcbsp基础基础 mcbsp设计是基于标准串口扩展而来的。设计是基于标准串口扩展而来的。 mcbsp主要特点:主要特点: 1:全速双工通信:全速双工通信 。 2:双缓存发送和三缓存接收数据寄存器,以支持:双缓存发送和三缓存接收数据寄存器,以支持连续传送连续传送。 3:直接与多媒体数字信号编解码器的工业标准接口,以及有:直接与多媒体数字信号编解码器的工业标准接口,以及有模拟接口和与串行模拟接口和与串行adc/dac的接口。的接口。mcbsp的内部结构的内部结构来到的数据通过来到的数据通过dr进入进入端口,到达接收移位寄存端口,到达接收移位寄存器(

48、器(rsr);在这里被组);在这里被组合成一个字,传输到接收合成一个字,传输到接收缓冲寄存器(缓冲寄存器(rbr)中;)中;接着又传输到数据接收寄接着又传输到数据接收寄存器(存器(drr)中;最后触)中;最后触发发cpu中断信号或中断信号或dma控制信号让控制信号让dsp通过数据通过数据总线将数据取走。总线将数据取走。要发送的数据由数据总线要发送的数据由数据总线送入发送寄存器(送入发送寄存器(dxr)中;然后送入发送移位寄中;然后送入发送移位寄存器(存器(xsr)中;最后由)中;最后由dx串行输出。串行输出。当当dxr为空时触发为空时触发cpu中断信号或中断信号或dma控制信控制信号,开始新一

49、轮发送。号,开始新一轮发送。mcbsp的寄存器结构的寄存器结构nmcbsp强大的功能是通过对多种寄存器的设置来实现的。强大的功能是通过对多种寄存器的设置来实现的。与与mcbsp相关的寄存器有:相关的寄存器有:n串口控制寄存器(串口控制寄存器(spcr1,2)n管脚控制寄存器(管脚控制寄存器(pcr)n接收控制寄存器(接收控制寄存器(rcr1,2)n发送控制寄存器(发送控制寄存器(xcr1,2)n采样率发生器寄存器(采样率发生器寄存器(srgr1,2)n多通道控制寄存器(多通道控制寄存器(mcr1,2)n接收通道使能寄存器(接收通道使能寄存器(rcera,b)n发送通道使能寄存器(发送通道使能寄

50、存器(xcera,b)等等,这些都是存储器映射寄存器。等等,这些都是存储器映射寄存器。mcbsp的寄存器访问的寄存器访问nmcbsp的控制设置通过对寄存器读写来完成,这些寄存器的控制设置通过对寄存器读写来完成,这些寄存器控制工作模式或指示串口的状态信息。访问某个指定的寄存控制工作模式或指示串口的状态信息。访问某个指定的寄存器时,器时,首先首先要将相应的控制寄存器的子地址写入子地址控制要将相应的控制寄存器的子地址写入子地址控制器器spsa,spsa驱动复接器,使之与子数据控制寄存器驱动复接器,使之与子数据控制寄存器spsd相连。接入相应子地址寄存器所在的实际物理存储位相连。接入相应子地址寄存器所

51、在的实际物理存储位置,置,然后然后可可向向spsd写入数据,数据送入前面子地址寄存器写入数据,数据送入前面子地址寄存器所指定的内嵌数据存储器所指定的内嵌数据存储器,或者,或者从从spsd读取数,也接入所读取数,也接入所制定的内嵌数据存储器制定的内嵌数据存储器。 stm spcr1,spsa ;spcr1被收入子地址寄存器被收入子地址寄存器 stm #20h, spsd ;加载子数据寄存器,完成对加载子数据寄存器,完成对 ; spcr1的初始化的初始化rpt #5 ;进行下一个寄存器初始化之前等待进行下一个寄存器初始化之前等待 nop stm spcr2,mcbsp0_spsa ; spcr2地

52、址地址子地址寄存器子地址寄存器ldm spsd, a ;取子数据寄存器,读取子数据寄存器,读spcr2rpt #5nopmcbsp的寄存器访问的寄存器访问 54dsp内部有两个可编程的多通道缓冲串口,分别为内部有两个可编程的多通道缓冲串口,分别为mcbsp0和和mcbsp0,使用某个串口前要对该串口初始化。,使用某个串口前要对该串口初始化。(1)使串口复位:)使串口复位:spcr1中的中的rrst(接收器复位)(接收器复位)=0 spcr2中的中的xrst(发送器复位)(发送器复位)=frst(帧同步复位)(帧同步复位) =grst(采样频率复位采样频率复位)=0(2)按自己要求设置其它相关寄

53、存器(串口仍保持复位状态)按自己要求设置其它相关寄存器(串口仍保持复位状态)(3)使)使spcr2中的中的grst(采样频率复位采样频率复位)=1(4)等待不少于两个周期,使能)等待不少于两个周期,使能mcbsp相关中断相关中断(5)取消第一步中的复位值,开始数据传输。)取消第一步中的复位值,开始数据传输。mcbsp的初始化的初始化wr_sub_reg.macro val, addr;写写mcbsp控制寄存器控制寄存器stm addr,spsanopstm val,spsdnop.endm wait .macro stm #0008h, ar0 ;ar0alrpt *ar0nop.endm m

54、cbsp的初始化的初始化 ld #0, dp ssbx intm ;关中断关中断ssbx sxm ;禁止符号位扩展禁止符号位扩展wr_sub_reg #0000h,spcr1 ;rrst(接收器复位)(接收器复位)=0wr_sub_reg #0200h,spcr2 ;xrst(发送器复位)(发送器复位)=frst(帧同步复位)(帧同步复位) ;=grst(采样频率复位采样频率复位)=0wr_sub_reg #000ch,pcr ;帧同步脉冲取上升沿帧同步脉冲取上升沿wr_sub_reg #0000h,spcr1wr_sub_reg #0000h,spcr2 ;保持复位状态保持复位状态wr_su

55、b_reg #0040h,rcr1 ;16 bitswr_sub_reg #0004h,rcr2 ;ignore fs after the firstwr_sub_reg #0040h,xcr1 ;16 bitswr_sub_reg #0004h,xcr2 ;ignore fs after the firstld 100,awaitmcbsp的初始化的初始化 andm #0ff3fh, 54h ;set interrupts to come from serial ports not dma ;by clearing bits 6 and 7 in dmprecstm #0,rdxrwr_su

56、b_reg #0001h,spcr1 ;启动启动mcbsp串口串口wr_sub_reg #0201h,spcr2ld 100,awaitaic_initstm #0h,imr ;打开打开mcbsp中断中断orm #0c00h,imrstm #0ffffh,ifr mcbsp的初始化的初始化二、二、 tlc320ad50引脚连接引脚连接二、二、 tlc320ad50通信方式通信方式有两种通信方式:一次通行方式和二次通信方式。有两种通信方式:一次通行方式和二次通信方式。一次通信一次通信:用于数据传递,:用于数据传递,16bit都作为数据位都作为数据位二次通信二次通信:可用于对:可用于对tlc320

57、ad50进行寄存器设置,进行寄存器设置, 先将先将01h tlc320ad50,设置成二次通信;,设置成二次通信; 再将控制字再将控制字 tlc320ad50,设置控制寄存器,设置控制寄存器二、二、 tlc320ad50初始化初始化 tlc320ad50 正常工作前,必须对它进行正确的初正常工作前,必须对它进行正确的初始化。初始化的操作主要是配置始化。初始化的操作主要是配置tlc320ad50的的4个控制个控制寄存器寄存器cr1cr4。控制寄存器的读写是通过二次通信来。控制寄存器的读写是通过二次通信来实现的。实现的。 在二次通信中,在二次通信中,d0d7为写入控制寄存器的控制字或为写入控制寄存

58、器的控制字或是从寄存器读出的数据,是从寄存器读出的数据,d8d12决定选择哪个寄存器,决定选择哪个寄存器,d13位决定是读还是写。位决定是读还是写。二、二、 tlc320ad50初始化初始化二、二、 tlc320ad50rd_sub_reg.macro addr,acc ;读读mcbsp控制寄存器控制寄存器stm #:addr:,spsa ;取控制寄存器地址取控制寄存器地址spsanopldm spsd,acc ;控制寄存器内容控制寄存器内容accnopnopnop.endmwaittrx .macro ;等待串口发送结束等待串口发送结束waitr? rd_sub_reg spcr2,a ;s

59、pcr2a and #11, a bc waitr?, aeq ;spcr2的的d1 ?= 0,xrdy=0:发送未完成:发送未完成 .endmprogreg .macro progword;ad50初始化初始化 stm #01h,rdxr ;第一次通信:第一次通信:01had50,准备二次通信,准备二次通信 waittrx stm #:progword:,rdxr ;二次通信:控制字二次通信:控制字ad50控制寄存器控制寄存器 waittrx .endm 二、二、 tlc320ad50 progreg 0000001100000001b ;初始化;初始化cr3,通知控制器系统中有一个从器件,

60、通知控制器系统中有一个从器件 progreg 0000010000010000b ;初始化初始化cr4,模拟输入输出增益,模拟输入输出增益=0db;采样频率;采样频率fsmclk/128 初始化初始化6.5 基于基于dsp的简单控制系统设计的简单控制系统设计 dsp是加强版的是加强版的mcu,在,在dsp上也能实上也能实现现gpp或或mcu的控制功能,本节课以的控制功能,本节课以“步进步进电机控制系统电机控制系统”为例,简单阐述一个控制系为例,简单阐述一个控制系统的开发过程。统的开发过程。一、分析控制对象一、分析控制对象步进电机控制技术步进电机控制技术 步进电机:是一种将电脉冲信号转换为角位移

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论