这是主程序(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 0x80must be aligned on page boundary
RESET: reset vector
BD _c_int00 branch to C entry point
STM #200,SP stack size of 200
nmi:RETEenable 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
你好!呼呼,我以前编写过adi公司的DSP 21160烧录程序,但没有接触过你说的这块DSP,但是我想你应该先查一下这块片子的附带软件,一般它的软件调试环境安装之后,是会随着主程序提供一些源码和例程教你使用的。
写入flash的程序很简单,就是一个写指令循环就可以了。使用DMA方式写入,还是单个字写入?flash那一端,具体只需要掌握它的读写端口指令,然后注意一下指令周期的长短,(DSP读写指令周期和flash的读写周期,要注意,否则不匹配会写入数据不稳定)这些在flash的datasheet里边都有。
如果还有不明白的,我可以提供一些源码给您看。但不是你说的那个flash,而是SST公司的flash片子,我想你要是读懂了,不同的片子, *** 作应该是差不多的。我的email : lucideye@gmail.com
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)