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

📄 main.c

📁 DSP控制1362做从设备
💻 C
字号:
#include "dc_struct.h"
#include "function.h"
#include "reg_bit.h"
#include "dev_reg.h"
#include "packet.h"

#include <stdio.h>
/* dsp5410 */
extern unsigned int  *pmem=0;
extern unsigned char StdConfigDescAll[TOTALLENGTH/2];
#define IMR   *(pmem+0x0000)
#define IFR   *(pmem+0x0001)
#define PRD0  *(pmem+0x0025)  /* timer0 period register */
#define TCR0  *(pmem+0x0026)  /* timer0 control register */
#define PMST  *(pmem+0x001D)
#define SWCR  *(pmem+0x002B)
#define SWWSR *(pmem+0x0028)
#define BSCR  *(pmem+0x0029)
#define CLKMD *(pmem+0x0058)
#define PMST_VAL        0x00A0  //interupt vectors from ox80  
#define SWWSR_VAL       0x7fff  
#define SWCR_VAL        0x0001  
#define BSCR_VAL        0x8802
#define CLKMD_VAL		0x9807

unsigned char checksum=0;
int k,j=0,counter=0,addr_flag=0,flag1=0,flag2=0;
unsigned long int_ifr=0;
extern long int_flag;
extern unsigned char addr_1362;
int data[1]={0x5555};
int data1[1];
void dsp_init()
{	
	CLKMD=0;
	while((CLKMD&1)==1);
	CLKMD=0x37ef;
	while((CLKMD&1)==0);/**/			//MULTIPLY (4+1),CLK IS 100m
	PMST&=0X00fF;			 				//INTERRUPT VECTOR IS REMAPPED TO 0X0080
	PMST|=0X0080|0X0020/**/|0X0040|0X0008/**/;		//SET OVLY=1 ,MP/MC=1,DROM=1.RAM IS IN DATA AND PROGRAM SPACE
//	SWWSR =0X7738;
	SWWSR=0Xf737;
//	PMST&=~0X0008;
//	PMST|=0X0020;
} 

void dspInt_init()
{
   asm(" ssbx intm");
 //  PMST=0x3FA0;
//   SWWSR=0x7fff;
//   SWCR=0x0000;
//   IMR&=0x0004;
//   IMR=IMR|0x0004;//enable int2
	IMR=0X0004;
 	IFR=IFR;
//   printf("test1\n");
   asm(" rsbx intm");
 //  printf("test2");
}


void main()
{
	unsigned short tempvalue,temp,i=1;
	unsigned long templong=0x15235647;

	asm(" ssbx intm");
//	asm(" ssbx xf");
	asm(" rsbx xf");
	dsp_init();
//	ReadChipId();

//	InitPLL();
	Isp1362_init();
//	dsp_init();
	i = read_ID();
	printf("The flash ID is: 0x%4x \n",i);

/*	erase_flash();
	delay(1000);
	for(i=0;i<0x8000;i++)
{//	flash_page_prog(0x80000+i,(int *)&data,1);
	flash_page_read(0x80000+i,(int *)data1,1);
}
*/	
	struct_init((unsigned char*)BUFF_ADDR);
	dspInt_init();

	softconnect(0);
	delay(5000);
	softconnect(1);

	unlock();
	while(1)
	{
/*		if(InfoFlags.bits.ep1_rxflag==1)
		{
			ep1_rxdone();
			InfoFlags.bits.ep1_rxflag=0;
		}
		if(InfoFlags.bits.ep2_rxdone==1)
		{
			ep2_txdone();
			InfoFlags.bits.ep2_rxdone=0;
		}
	*/
#ifdef 0		
		if ((InfoFlags.bits.bus_reset)&&(k==0))
		{	InfoFlags.bits.bus_reset=0;
			k=1;
			printf("device is connect to a host,bus reset\n");

		}
		if (InfoFlags.bits.resume)
		{
			InfoFlags.bits.resume=0;
			printf("bus suspend resume\n");
			if (!InfoFlags.bits.busstatus) //if bus state is awake,continue,else abort.
			{
				unlock();
			}
		}
		if ((InfoFlags.bits.suspend)&&(k==0))
		{
			InfoFlags.bits.suspend=0;k=1;
	//		printf("bus suspend\n");
		/*	if (InfoFlags.bits.busstatus)*/ //if bus state is suspend,process next,else abort.
		/*	if((int_flag&0x80)!=0)//
			{
			//	usb_wake=0;
				//clear CLKRUN
				tempvalue=read_reg16(Com16_DcHardConfig_R);
				tempvalue&=~CLKRUN;
				write_reg16(Com16_DcHardConfig_W,tempvalue);	
				
				//write gosup 1 followed 0 to active suspend mode
				tempvalue=read_reg8(Com8_DcModeConfig_R);
				tempvalue|=GOSUSP;
				write_reg8(Com8_DcModeConfig_W,tempvalue);
				tempvalue&=~GOSUSP;
				write_reg8(Com8_DcModeConfig_W,tempvalue);
				
		//		usb_wake=0x0004;
				delay(5000);
				
			}*/
				
		}
				
	/*	if (InfoFlags.bits.setup_packet)
		{	
			InfoFlags.bits.setup_packet=0;
			protocol_process();
		}*/
		if ((InfoFlags.bits.busstatus)&&(k==0))
			{printf("bus status is suspend\n");k=1;
			InfoFlags.bits.busstatus=0;}
		/*	if (InfoFlags.bits.busstatus==0&&(k==0))
			{printf("bus status is awake\n");k=1;}
			if ((InfoFlags.bits.psof)&&(k==0))
			{printf("psof interrupt\n");
			InfoFlags.bits.psof=0;k=1;}
	*/		
#endif
//	for(;;);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -