📄 dspdemo.c
字号:
#include <Reg52.h>
#include <absacc.h>
#include "stdio.h"
#include "intrins.h"
#include "ctype.h"
#define uint unsigned int
#define uchar unsigned char
/*定义寄存器端口地址*/
#define HPICL XBYTE[0xe000]
#define HPICH XBYTE[0xe100]
#define WR_HPIL0_D XBYTE[0xe200]
#define WR_HPIH0_D XBYTE[0xe300]
#define WR_HPIL_A XBYTE[0xe400]
#define WR_HPIH_A XBYTE[0xe500]
#define WR_HPIL1_D XBYTE[0xe600]
#define WR_HPIH1_D XBYTE[0xe700]
#define RD_HPIL0_D XBYTE[0xeA00]
#define RD_HPIH0_D XBYTE[0xeB00]
#define RD_HPIL1_D XBYTE[0xeE00]
#define RD_HPIH1_D XBYTE[0xeF00]
sbit NRST =P1^2;
sbit SDIN =P3^5;
sbit SCLK =P3^4;
sbit LED =P1^0;
void delay(uint wu)
{
for(wu;wu>0;wu--);
}
void led_light()
{
delay(30000);
LED=~LED;
delay(30000);
LED=~LED;
delay(30000);
LED=~LED;
delay(30000);
LED=~LED;
}
void init_serial()
{
SCON=0x50;
PCON=0x80;
TMOD=TMOD&0x0F;
TMOD=TMOD|0x20;
//TL1=0xF7,TH1=0xF7;//9600bps , 16.934MHz
TL1=0xF5,TH1=0xF5;//4800bps , 10MHz
TR1=1;
TI=1;
ES=1;
}
uchar getkey()
{
uchar c;
while(!RI);
RI=0;
c = SBUF;
while(!TI);
TI=0;
SBUF='s';
return c;
}
void sendkey(uchar c)
{
while(!TI);
TI=0;
SBUF=c;
}
void Nrst()
{
NRST=0;
delay(100);
NRST=1;
delay(100);
}
void readhpi()
{
while(!TI);
TI=0;
SBUF=P0;
}
void readram()
{
int addr = getkey()*256+getkey();
HPICL=0x08;
HPICH=0x08;
WR_HPIL_A=addr/256;
WR_HPIH_A=addr%256;
sendkey(RD_HPIL0_D);
sendkey(RD_HPIH0_D);
}
void wr_dspcode()
{
uint addr;
uchar i,len;
uchar dspptr[50][2];
HPICL=0x08; //clear HPIint,least is first
HPICH=0x08;
while(1)
{
len=getkey();
if(len==0) break;
addr=getkey()*256+getkey();
for(i=0;i<len/2;i++)
{
dspptr[i][0]=getkey();
dspptr[i][1]=getkey();
}
addr--;
again:
WR_HPIL_A=addr/256;
WR_HPIH_A=addr%256;
for(i=0;i<len/2;i++)
{
WR_HPIL0_D=dspptr[i][0];
WR_HPIH0_D=dspptr[i][1];
}
addr++;
WR_HPIL_A=addr/256;
WR_HPIH_A=addr%256;
for(i=0;i<len/2;i++)
{
if(RD_HPIL0_D!=dspptr[i][0]) goto again; //不相等,再写
if(RD_HPIH0_D!=dspptr[i][1]) goto again;
}
}// end while
WR_HPIL_A=0x00;
WR_HPIH_A=0x7f;
WR_HPIL1_D=0x00; //THE START ADDRESS OF RUN
WR_HPIH1_D=0x80;
sendkey('o');
}
void main()
{
uchar c;
LED=0;
led_light();
init_serial();
while(1)
{
c = getkey();
switch(c)
{
case 'c' : sendkey('o');
break;
case 'r' : Nrst();
sendkey('r');
break;
case 'w' : Nrst();
wr_dspcode();
break;
case 'i' : readhpi();
break;
case 'a' : readram();
break;
case 'l' : led_light();
break;
case 'h' : sendkey('h');
break;
default : break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -