用clock函数是可行的,尤其是优化以后的代码很难确定PROFILE的位置。你看一下.asm的输出就知道了,clock没有这个问题。有一点要注意,clock函数如果直接在DSP上跑时间是不准的,必须用load6x命令在DOS或命令行状态下加载,这样结果就准的多。当然,调用函数本身的开销也是要考虑的。
以下是DSP所在板卡上的串口与对应的上位机串口进行信息交互的程序,仅仅是最基本的框架,具体还得根据你的通信内容以及串口响应方式(中断或查询)进行进一步修改和补充。感觉你是不是刚接触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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)