感觉你是不是刚接触DSP,友情提示你一下:在CCS开发环境下,一个完整的DSP工程包括.c文件(主程序main,外设配置文件,内部中断初始化配置等),.h文件(头文件),lib文件(静态库文件),CMD文件(内存地址空间分配文件)。以上缺一不可,不明白的可以分别问问百度。
希望对你有所帮助。
#include "DSP28_Device.h"
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 = 0i <100i++)
{
Sci_VarRx[i] = 0
}
i = 0
j = 0
Send_Flag = 0
#if SCIA_INT
/*设置中断服务程序入口地址*/
EALLOW// This is needed to write to EALLOW protected registers
PieVectTable.TXAINT = &SCITXINTA_ISR
PieVectTable.RXAINT = &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))
{
SciaRegs.SCITXBUF = Sci_VarRx[i]
Send_Flag = 0
i++
if(i == j)
{
i = 0
j = 0
}
}
#if !SCIA_INT
if(SciaRx_Ready() == 1)
{
Sci_VarRx[j] = SciaRegs.SCIRXBUF.all
Send_Flag = 1
j++
if(j == 100)
{
j = 0
}
}
#endif
}
}
问题一:移动数指令就有好几种:MOV MOVZ MOVL MOVW都是数据移动指令,但不同指令移动的存储区不同,片上存储单元、外存flash
这个可以参考51单片机的类型指令从侧面了解(有前两个),最根本的解决办法还是找该DSP的芯片架构说明,和所支持的指令集合(这是最基本的开发参考资料,没有这个,可以叫你导师下课了)
问题二:跳转指令 BF LB
同上,参考芯片手册
问题三:移位指令 SPM SFR LSL
同上
问题四:乘指令 MPYA MPYXU IMPYL
同上
问题五:地址指令 @ * #
同上
以上是我不太清楚他们之间的区别,对 *** 作数的作用不是很确定,只能根据程序
猜
还有几个语句
问题六:MOVLXAR6, *+XAR7[AR0] 语句*+XAR7[AR0]是什么意思?
问题七:MOV*XAR5++, #BLDCPWM_100Output 语句 *XAR5++ 是什么意思?
问题八:程序中经常有这类语句 SUBACC, @_velocityLPRef<<16
但是velocityLPRef被定义为externint 是16的变量,如果左移16位岂不是变为0
,那相减 *** 作还有何意义?
问题九:程序中常用的寄存器 DP PC 代表什么含义
MOVW DP,#ETCLR1>>6
MOV @ETCLR1,#0x01
MOVW DP,#PIEACK>>6
MOV @PIEACK,#PIEACK_GROUP3
想这段程序署名为Interrupt management 这里的DP就不懂了
问题十:还有跳转判断条件不清楚 如以下两句
BFDirUP?, NTC
BFm_positiveRltDn?, GT
NTC和GT代表什么意思,另外这两句中"?"什么意思
本来时想一个一个地回答你的,但发现这都是开发手册可以了解的内容,你找该芯片型号的开发文档,一般是“芯片结构”,“芯片指令系统”
基本上是类似的,2808没有事件管理器。之前是在实验箱上用的2812,
后来做系统,考虑到价格问题,就选了2806,用了一周时间吧,把2812的程序转到了2806上。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)