DSP读写文件,可以直接使用C中的函数吗?
刚接触DSP才知道,DSP竟然可以读文件,应该也是可以用标准C的函数吧?有没有特别注意的地方呢?谢谢...
刚接触DSP才知道,DSP竟然可以读文件,应该也是可以用标准C的函数吧?有没有特别注意的地方呢?谢谢
展开
2个回答
展开全部
以下程序采用TMS320VC5416芯片,运行环境ccs2.0
这是主程序(c语言的)
#include "stdio.h"
/*#include "mmregs.h"*/
#define imr 0x0000
#define ifr 0x0001
#define tcr 0x0026
#define prd 0x0025
#define pmst 0x001d
ioport unsigned port8001;
interrupt void timer();
/*extern void initial();
extern void porta();
extern void portb();*/
int flag=0;
int i;
interrupt void timer()
{
*(int *)0x300=*(int *)0x300+1;
if(*(int *)0x300==0x3E8)
{
*(int *)0x300=0;
*(int *)0x302=*(int *)0x302+1;
if(flag==0)
{flag=1;
i = 0x5555;
port8001 = i;
}
else
{flag=0;
i = 0xaaaa;
port8001 = i;
}
}
return;
}
main()
{
*(int *)0x300=0;
*(int *)0x302=0;
*(int *)pmst=0x3f9f;
asm(" ssbx 1,11"); //禁止所有中断
*(int *)ifr=0xffff;
*(int *)imr=0x00;
*(int *)tcr=0x410;
*(int *)prd=0x4e1f;
*(int *)tcr=0x420;
*(int *)imr=0x08;
asm(" rsbx 1,11");
while(1)
}
这是个向量程序(汇编的):
.sect ".vectors"
.ref _c_int00 ; C entry point
.ref _timer ;time interrupt point
.align 0x80 ; must be aligned on page boundary
RESET: ; reset vector
BD _c_int00 ; branch to C entry point
STM #200,SP ; stack size of 200
nmi: RETE ; enable interrupts and return from one
NOP
NOP
NOP ;NMI~
; software interrupts
sint17 .space 4*16
sint18 .space 4*16
sint19 .space 4*16
sint20 .space 4*16
sint21 .space 4*16
sint22 .space 4*16
sint23 .space 4*16
sint24 .space 4*16
sint25 .space 4*16
sint26 .space 4*16
sint27 .space 4*16
sint28 .space 4*16
sint29 .space 4*16
sint30 .space 4*16
int0: RETE
NOP
NOP
NOP
int1: RETE
NOP
NOP
NOP
int2: RETE
NOP
NOP
NOP
tint: b _timer
NOP
NOP
rint0: RETE
NOP
NOP
NOP
xint0: RETE
NOP
NOP
NOP
rint1: RETE
NOP
NOP
NOP
xint1: RETE
NOP
NOP
NOP
int3: RETE
NOP
NOP
NOP
.end
以上两个是编出来的。
还有一些源文件需要添加,就可以运行了。程序是利用定时实现流水灯的。如果有需要完整的其他文件可以把邮箱留下。我到时发给你。
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
这是主程序(c语言的)
#include "stdio.h"
/*#include "mmregs.h"*/
#define imr 0x0000
#define ifr 0x0001
#define tcr 0x0026
#define prd 0x0025
#define pmst 0x001d
ioport unsigned port8001;
interrupt void timer();
/*extern void initial();
extern void porta();
extern void portb();*/
int flag=0;
int i;
interrupt void timer()
{
*(int *)0x300=*(int *)0x300+1;
if(*(int *)0x300==0x3E8)
{
*(int *)0x300=0;
*(int *)0x302=*(int *)0x302+1;
if(flag==0)
{flag=1;
i = 0x5555;
port8001 = i;
}
else
{flag=0;
i = 0xaaaa;
port8001 = i;
}
}
return;
}
main()
{
*(int *)0x300=0;
*(int *)0x302=0;
*(int *)pmst=0x3f9f;
asm(" ssbx 1,11"); //禁止所有中断
*(int *)ifr=0xffff;
*(int *)imr=0x00;
*(int *)tcr=0x410;
*(int *)prd=0x4e1f;
*(int *)tcr=0x420;
*(int *)imr=0x08;
asm(" rsbx 1,11");
while(1)
}
这是个向量程序(汇编的):
.sect ".vectors"
.ref _c_int00 ; C entry point
.ref _timer ;time interrupt point
.align 0x80 ; must be aligned on page boundary
RESET: ; reset vector
BD _c_int00 ; branch to C entry point
STM #200,SP ; stack size of 200
nmi: RETE ; enable interrupts and return from one
NOP
NOP
NOP ;NMI~
; software interrupts
sint17 .space 4*16
sint18 .space 4*16
sint19 .space 4*16
sint20 .space 4*16
sint21 .space 4*16
sint22 .space 4*16
sint23 .space 4*16
sint24 .space 4*16
sint25 .space 4*16
sint26 .space 4*16
sint27 .space 4*16
sint28 .space 4*16
sint29 .space 4*16
sint30 .space 4*16
int0: RETE
NOP
NOP
NOP
int1: RETE
NOP
NOP
NOP
int2: RETE
NOP
NOP
NOP
tint: b _timer
NOP
NOP
rint0: RETE
NOP
NOP
NOP
xint0: RETE
NOP
NOP
NOP
rint1: RETE
NOP
NOP
NOP
xint1: RETE
NOP
NOP
NOP
int3: RETE
NOP
NOP
NOP
.end
以上两个是编出来的。
还有一些源文件需要添加,就可以运行了。程序是利用定时实现流水灯的。如果有需要完整的其他文件可以把邮箱留下。我到时发给你。
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询