DSP学习笔记Word文档格式.docx

上传人:b****7 文档编号:22237123 上传时间:2023-02-03 格式:DOCX 页数:10 大小:26.51KB
下载 相关 举报
DSP学习笔记Word文档格式.docx_第1页
第1页 / 共10页
DSP学习笔记Word文档格式.docx_第2页
第2页 / 共10页
DSP学习笔记Word文档格式.docx_第3页
第3页 / 共10页
DSP学习笔记Word文档格式.docx_第4页
第4页 / 共10页
DSP学习笔记Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DSP学习笔记Word文档格式.docx

《DSP学习笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP学习笔记Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

DSP学习笔记Word文档格式.docx

中断优先级4

INT5 

PMA 

中断优先级5

INT6 

PMC 

中断优先级6

RESERVED 

PME 

模拟量输入中断(保留)

SW_INT8 

PM10 

用户定义软件中断

…………………………

SW_INT31 

PM3E 

用户定义软件中断

中断子向量入口定义pvecs

“.pvecs” 

定义子向量段

PVECTORS 

保留0000h 

保留0001h

保留0026h

T1PINT_ISR 

T1PINT中断

保留0028h

保留0041h

(主程序略)

中断程序

GISR2:

优先级INT2中断入口

保护现场

LDP 

#0E0H

LACC 

PIVR,1 

读piv左移

ADD 

#PVECTORS 

加piv

BACC 

跳到gisr

T1PINT_ISR:

通用定时器1中断入口

LDP 

#DP_EVA 

SPLK 

#0,T1CNT

GISR2_RET:

中断返回

恢复现场

CLRC 

INTM 

开总中断

假中断程序

PHANTOM 

KICK_DOG 

复位看门狗

RET

END

四.中断的C语言实现方法

方法1:

通过软件识别标志实现可屏蔽中断

.vectors"

PM2中断优先级1

PHANTOM 

_capint 

定义捕捉中断

SW_INT31 

用户定义软件中断

注意,汇编语言中有C语言的变量时,要在变量前加”_”

捕捉中断服务程序

void 

interrupt 

capint()

{

int 

flag;

flag=*EVBIFRC&

0X01;

//判断是否是CAP4中断

if(flag!

=0x01)

{

asm("

clrc 

INTM"

);

//返回前开中断

return;

//如果不是CAP4中断,则直接返回

}

load();

//如果是CAP4中断,则装载捕捉值

*EVBIFRC=*EVBIFRC|0x01;

//写"

1"

清除CAP4中断标志

//返回前开中断

//中断返回

}

int 

load()

result[k]=*CAP4FIFO;

//读取捕捉值,存于相应的数组 

k++;

方法2:

通过外围中断向量寄存器piv实现

VoidinterruptGISR4()

switch(*PIVR)

{case0x0036:

f(x) 

//f(x)为中断处理程序

break;

default:

break;

*EVBIFRC=*EVBIFRC|0X01;

asm(“clrc 

INTM”)

Ruturn;

DSP学习笔记

(2)EV模块

学习心得

1不用管内部硬件结构,即不管事件管理器的功能是如何通过硬件实现的,会用即可

2有些工作过程是cpu自动完成的,编程时可不用管

3分别学习每一个部分功能(GP,比较,捕捉,QEP),最后再归纳一下各个部分的联系

4EVA,EVB功能完全相同,仅仅是对其定义的寄存器有A,B之分

一、GP(定时器模块)

功能:

1定时,定时时间到时产生中断

2通过TxPWM引脚输出PWM波(EVA:

x=1,2;

EVB:

x=3,4)

相关寄存器(略)

定时器的计数操作模式(指TxCNT的增减方式)

1停止/保持模式,GP停止操作并保持当前状态

2连续增计数

3定向增减计数

4连续增减模式

定时器的比较操作

注:

比较操作可输出PWM波

1非对称波形的输出

2对称波形的输出

二、COMPARE(比较模块)

240xA的比较模块是从240发展来的。

240有单比较和全比较模式,而240x仅保留了全比较模式。

个人感觉称为PWM模块更合适,因为它的作用就是输出PWM波

单比较指输出不同宽度、周期的矩形脉冲

EVA的比较模块可以输出6路PWM波

EVB的比较模块可以输出6路PWM波

可加入死区,防止同一桥臂上两开关管短路

心得:

因为比较模块也是有GP提供时钟, 

所以可以把它当成定时器的TxCNT来计数,TxPR提供周期,但是由比较模块的CMPRx代替TxCMPR做比较寄存器,且由ACTRA(对EVA)设置比较方式,比定时器的比较输出优点是可由DBCONA来进行死区控制,最后别忘了比较模块是由比较控制寄存器COMCONA来统一控制。

1非对称PWM波形

2对称PWM波形

三、CAPTURE(捕捉模块)

对外部引脚输入的脉冲进行捕捉检测(上升沿,下降沿或两个边沿),从而可以测量输入方波的周期,频率,占空比或非周期信号额脉冲宽度。

EVA可检测三路输入(CAP1,2,3)

EVB可检测三路输入(CAP4,5,6)

注意:

捕获单元是由GP提供时钟

FIFO中存放的是TxCNT的值,要在中断时及时读出以免下一个值覆盖

四、QEP(正交编码脉冲模块)

QEP:

指两个频率变化且正交(相位相差90度)的脉冲,由电机轴上的光电编码器产生。

通过检测两个脉冲序列中的哪一列先到可以判断出电机旋转方向,通过检测脉冲数和脉冲频率可以检测电机旋转的角位置和转速。

QEP并不是一个单独的电路模块,而是以上模块功能的集合。

工作:

由捕捉模块对两个脉冲进行检测,把CAPCONA的CAPQEPN设为11就把捕捉模块设成了QEP模式,其实就是指捕捉模块的时钟源来自两个引脚CAP1,2(对EVA)而不是GP。

DSP学习笔记(3)实验

对DSP有了基本了解之后,就应当通过做实验调程序加深对DSP的理解。

千万不要想着我把DSP书全部看明白之后再去做实验,因为只是看书是永远看不懂的。

我用的是瑞泰教学试验箱,感觉里面的试验设计的还可以,虽然很多程序都有瑕疵。

其它公司的试验箱我没用过,不过应该都差不多吧。

没试验箱的话买块最小系统板加一个仿真器也可以做试验。

下面第一个是瑞泰试验箱的试验指导书,第二个是各个试验的例程。

ICETEK-LF2407-A-EDU使用说明书v3.rar

ICETEK-LF2407-EDULab.rar

我再把调试过程中的问题和心得在这里转发一下,开头有“?

”的是对此有疑问但是还没有解决的问题,问题解决后我就把“?

?

”删掉了。

其中应该有很多不足之处,还请大家指正。

实验1:

rts2407.lib文件有什么内容和作用,是如何编写的,每个程序的库文件都不一样吗:

库文件,TI编写的,内有可以被直接调用的函数

.cmd文件中Page0和Page1里都有SARAM段,即段名可重复,Page1里的SARAM段是8000H开始的外部数据存储器。

看懂.map文件中各程序及变量在DSP中的存储方式,再结合反汇编窗口研究!

.map文件中 

.text段包含的00001051 

0000002e 

rts2407.lib:

boot.obj(.text) 

什么作用?

0000107f 

00000050 

:

exit.obj(.text)

.cinit 

000010cf 

00000011 

0000000a 

VOLUME.obj(.cinit) 

VOLUME文件中什么量?

000010d9 

00000006 

exit.obj(.cinit) 

rts2407.lib什么量?

000010df 

00000001 

--HOLE--[fill=0000] 

什么量?

.bss 

00008000 

000000f2 

UNINITIALIZED

000000d0 

VOLUME.obj(.bss)

000080d0 

00000000 

boot.obj(.bss)

00000022 

exit.obj(.bss)

.stack 

000080f2 

00000400 

boot.obj(.stack)

.sysmem 

.reg240x 

00007000 

00000532 

boot.obj(.reg240x)

c程序作用是读取inp_buffer[BUF_SIZE]内容,乘以因子volume后放入out_buffer[BUF_SIZE]

read_signals函数原本用于读取A/D的数据并放到DSP缓冲区中,但由于此实验不涉及A/D,所以利用Probe断点模拟填入A/D数据

实验2:

将.asm中开始的.globle改成.def之后,发现效果一样

实验3:

.cmd文件中PAGE1定义了DATA 

origin=8000h,length= 

8000h

.blk3 

{}>

DATA 

PAGE1 

为外部扩展数据存储器,只有外扩RAM时可用。

实验4:

汇编语言,当某行有标号时,该行左起不能有空格,否则编译出错

编译选项的LINK中可以选择上电时程序的起始地址

.asm中加入.sect"

bstart 

上电跳到start处

在.map中可以看到bstart占了两个单元

c编译器的实现形式为:

-10/3=-3,10/-3=-3,-10%3=-1,10%-3=1,但是一般不用C实现,因为开销太大

汇编语言有BGEZ指令、ZAC指令和LAC指令且通过了编译:

这些指令属于增强指令,见《24系列指令编程工具》P247

将变量加入到watchwindows时不能识别,显示identifiernotfound:

×

×

在编译选择的Assembly中选-as后即可

在Compiler属性页上单击,在开关栏处输入“–g”;

按“确定”保存,是不是和在GenerateDebug中选fullsymboldebug一样

此选项作用:

使能符号调试

-as作用:

保存标识符和符号

实验5:

第一个实验没有创建*.PJT项目,我自己创建了一个,但是文档里已经有asm和cmd文件了,加上就可以了。

头文件自动把中断向量定义好了,0x40个。

其定义方式为.sect 

此时.map映射为.vectors 

vectors 

00000040 

将vectors.h中.sect 

改为.sect"

后.map变为

.vectors 

LFDIPS.obj(.vectors)

如果改为.sect 

呢?

头文件240x.h中定义了宏,如SBIT0 

.macro 

DMA,MASK 

ClearbitMacro

LACC 

DMA

AND 

#(0FFFFh-MASK)

SACL 

.endm 

其中SBIT1和SBIT0是带参数的宏,其它的是不带参数的宏。

其使用是不是和内联函数inline一样?

见《24系列指令编程工具》P274

实验中只用到了RAM的三个存储单元,但是在单步调试时其它相邻的单元内容也在变

在使用IN/OUT指令时DSP自动使IS变低从而访问I/O空间?

是的

MP/MC为1时DSP自动使PS变低从而访问外部存储器?

如何使DSP访问外部RAM呢?

当地址大于8000H时,DS自动变低从而访问外部RAM 

实验6.CMD文件开始为直接编写的编译命令。

这些命令都是可以在工程中配置的。

c语言头文件2407c.h与实验5中汇编语言头文件240x.h的差别,一个是unsignedint*SCSR1= 

(unsignedint*)0x7018,

一个是SCSR1 

.set7018h

-stack200 

栈定为200字 

-heap;

200堆定为200字 

-lrts2xx.lib 

连接系统库文件rts2xx.lib

在工中没程有.lib库文件,但是在.cmd文件加入了rts2xx.lib,因此项目就加入了库文件,但是加的是什么地方的库文件:

是 

\c2000\cgtools\lib 

里面的文件。

实验箱控制模块上指示灯J5在什么地方:

指导书写错了,不是J5

实验7:

PRCT在PAGE0的0040H-0044H之间为密码段,全部填入1,有什么作用吗:

1等于不加密。

?

vector.h中最后的GISR1-6和最后的PHANTOM是干什么用的?

但是如果去掉后编译将出错

.C主程序asm("

clrcINTM"

);

/*开中断*/后为什么不加一个无限循环指令:

应该加一个。

中断程序执行完后回到什么地方:

到库函数中的一个名为abort的函数执行

对程序做修改后加入无限循环while

(1){},程序执行良好

主程序开始的FOR循环需要执行很长时间,不知道是起什么作用的延时?

改为i<

0x0001缩短执行时间,且不影响程序执行

voidinterruptgptime1(void)加interrupt关键字是声明中断函数,必须无输入参数及返回值,优点是保护所有的内核寄存器 

后面加(void)是增强程序的健壮,显式声明函数无参数

实验8:

ADC的最小转换时间:

40MHZ时为375ns(S/H+转换),30MHZ时为500ns。

设置I/O端口指示灯时为什么用ioportunsignedcharport000c;

用ioportunsignedintport000c;

不行吗:

可以。

主程序开始注释上说/*关中断*/,但是并没有关中断的语CNT句asm("

setcINTM"

是否要加上:

不用,进入主程序后INTM为0

为什么要打开所有外设*SCSR1=0x81fe;

只打开ADC和EVA不行吗如*SCSR1=0x8184;

说明书中程序写错,应为pResult2=RESULT1;

ADCTRL1中的ACQPS3-0根据什么来设置采样时间?

调整它与调整采样周期有什么联系和区别吗?

ADC工作模式为连续转换模式(CONTRUN=1),即转换序列自动重新开始,此模式必须保证在下一个转换序列开始前读取寄存器值。

定时器1的周期中断并不使能ADC,只是设置标志位来保存RESULT值。

当周期中断发生时寄存器值还没读出时转换序列又重新开始了:

是的。

*GPTCONA=0x0100;

(周期中断使能ADC):

此语句写错了,应该为*GPTCONA=0x0000;

定时器中断子程序voidinterruptgptime1(void)中的switch语句用不用加上defaultbreak;

以增强程序鲁棒性(健壮性):

启动转换(socseq1=1),SEQ采用中断模式1(Mode=01,立即中断)能否在一条语句中(*ADCTRL2=0x2400;

)使用:

指导书作业中为什么要用定时器中断启动ADC,读取RESULTn中数据后

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1