⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspdemo.c

📁 EADSP5402DEMO的所有资料
💻 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 + -