类似的问题我也遇到过,总是进入非法中断。反复查也查不到问题,关键无从下手, 没办法,只能屏蔽掉绝大部分中断,发现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串口通讯程序,最好是已经测试通过,可以直接使用的。在线等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)