通过dsp给ram写进程序,如何判断我的程序写到正确的位置

通过dsp给ram写进程序,如何判断我的程序写到正确的位置,第1张

类似的问题我也遇到过,总是进入非法中断。反复查也查不到问题,关键无从下手, 没办法,只能屏蔽掉绝大部分中断,发现CPU_Timer0中断进不去,再后来就查出是 cmd文件配置的问题。 嵌入式程序的调试比PC程序麻烦,根据你说的也很难判断是什么问题,只能告诉你一个思路: 把能屏蔽掉的代码都注释掉,直到不再出问题。然后一点一点再往上加, 看加到哪一部开始出问题。如果全屏蔽了还有问题,那么最可疑的就是cmd了。

线性缓冲区实现FIR滤波器

程序清单:

title “FIR1ASM”

mmregs

def start

x usect “x”,8

PA0 set 0

PA1 set 1

data

COEF: word 132768/10

word 232768/10

word -432768/10

word 332768/10

word -432768/10

word 232768/10

word 132768/10

text

start: SSBX FRCT

STM #x+7,AR2

STM #6,AR0

LD #x+1,DP

PORTR PA1,@x+1

FIR1: RPTZ A,#6

MACD AR2-,COEF,A

STH A,AR2

PORTW AR2+,PA0

BD FIR1

PORTR PA1,AR2+0

end

用循环缓冲区实现FIR滤波器

程序清单:

title “FIR2ASM”

mmregs

def start

bss y,1

xn usect “xn”,7

b0 usect “b0”,7

PA0 set 0

PA1 set 1

data

table: word 132768/10

word 232768/10

word 332768/10

word 432768/10

word 532768/10

word 632768/10

word 732768/10

text

start: SSBX FRCT

STM #b0,AR1

RPT #6

MVPD table,AR1+

STM #xn+6,AR2

STM #b0+6,AR3

STM #7,BK

STM #-1,AR0

LD #xn,DP

PORTR PA1,@xn

FIR2: RPTZ A,#6

MAC AR2+0%,AR3+0%,A

STH A,@y

PORTW @y,PA0

BD FIR2

PORTR PA1,AR2+0%

end

链接命令文件

FIR2obj

vectorsobj

-o FIR2out

-m FIR2map

-e start

MEMORY

{

PAGE0:

EPROM:org=0E000h,

len=1000h

VECS: org=0FF80h,

len=0080h

PAGE1:

SPRAM:org=0060h,

len=0020h

DARAM:org=0080h,

len=1380h

}

SECTIONS

{

text:>EPROM PAGE 0

data:>EPROM PAGE 0

bss :>SPRAM PAGE 1

xn:align(8){}>DARAM PAGE 1

b0:align(8){}>DARAM PAGE 1

vections:VECS PAGE 0

}

xiexie

以下是DSP所在板卡上的串口与对应的上位机串口进行信息交互的程序,仅仅是最基本的框架,具体还得根据你的通信内容以及串口响应方式(中断或查询)进行进一步修改和补充。

感觉你是不是刚接触DSP,友情提示你一下:在CCS开发环境下,一个完整的DSP工程包括c文件(主程序main,外设配置文件,内部中断初始化配置等),h文件(头文件),lib文件(静态库文件),CMD文件(内存地址空间分配文件)。以上缺一不可,不明白的可以分别问问百度。

希望对你有所帮助。

#include "DSP28_Deviceh"

unsigned int Sci_VarRx[100];

unsigned int i,j;

unsigned int Send_Flag;

void main(void)

{

/初始化系统/

InitSysCtrl();

/关中断/

DINT;

IER = 0x0000;

IFR = 0x0000;

/初始化PIE中断/

InitPieCtrl();

/初始化PIE中断矢量表/

InitPieVectTable();

/初始化SCIA寄存器/

InitSci();

for(i = 0; i < 100; i++)

{

Sci_VarRx[i] = 0;

}

i = 0;

j = 0;

Send_Flag = 0;

#if SCIA_INT

/设置中断服务程序入口地址/

EALLOW; // This is needed to write to EALLOW protected registers

PieVectTableTXAINT = &SCITXINTA_ISR;

PieVectTableRXAINT = &SCIRXINTA_ISR;

EDIS; // This is needed to disable write to EALLOW protected registers

/开中断/

IER |= M_INT9;

#endif

EINT; // Enable Global interrupt INTM

ERTM; // Enable Global realtime interrupt DBGM

for(;;)

{

if((SciaTx_Ready() == 1) && (Send_Flag == 1))

{

SciaRegsSCITXBUF = Sci_VarRx[i];

Send_Flag = 0;

i++;

if(i == j)

{

i = 0;

j = 0;

}

}

#if !SCIA_INT

if(SciaRx_Ready() == 1)

{

Sci_VarRx[j] = SciaRegsSCIRXBUFall;

Send_Flag = 1;

j++;

if(j == 100)

{

j = 0;

}

}

#endif

}

}

答案:

1、CCS33是一个开发环境,不能够跑程序,程序弄好了要在芯片里面运行才能够有效果,如果不是直接下载,想在线调试(可以说在线硬件仿真),需要XDS100或者XDS510仿真器(更高级的XDS560 PLUS等等),一根JTAG连接线连接至DSP+一根USB连接线连接至PC;

2、开发Hello world 这个如果需要跑 *** 作系统,还是需要很多学习的,但如果裸机加一个液晶也是可以做出hello world的,即通过SPI接口连接一块12864液晶,通过发送指令发送数据就能达到,看你的需求。

over

MP是微处理器模式;MC是微计算机模式,如果楼主是在线烧写的话,应该是选MP模式(接低),如果是Bootloader模式的话,应该选MC模式(接高),楼主这么样应该没问题,是不是烧写文件格式转化得不对呀?应该转化成芯片能够接受的格式,然后再烧写。楼主可以把问题描述更具体一些,方便做判断。

以上就是关于通过dsp给ram写进程序,如何判断我的程序写到正确的位置全部的内容,包括:通过dsp给ram写进程序,如何判断我的程序写到正确的位置、DSP实现FIR数字滤波器,用汇编语言如何编写程序、求大神帮忙编写一个DSP2808串口通讯程序,最好是已经测试通过,可以直接使用的。在线等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10136814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存