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

📄 mainloop.c

📁 这是我编一个DSP的USP的程序 调试通过
💻 C
字号:

#include "tms320c54xx.h"                /* special function register declarations   */

#include "epphal.h"
#include "d12ci.h"
#include "mainloop.h"
#include "USBD12.h"
#include "chap_9.h"
#include "protodma.h"
#include "cmd.h"

/*
*************************************************************************
  Public static data
*************************************************************************
*/
extern EPPFLAGS bEPPflags;

extern unsigned char  GenEpBuf[];
extern IO_REQUEST  ioRequest;

extern unsigned char ioSize, ioCount;
extern unsigned char  EpBuf[];

extern CONTROL_XFER ControlData;
extern BOOL bNoRAM;

extern char  receive_key;

extern unsigned char  MCUuartReceiveBuffer[];
//测试数据


unsigned char  test_flag=1;
unsigned char  port1[6]={0x45,0x01,0x02,12,0x04,0x0d};
unsigned char  port2[23]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8};
unsigned char  example[23]={0x55,0x66,0x2,0x0,0x06,0x55,0x53,0x42,0x20,0xd7,0xd3,0xbf,0xa8,0xd1,0xdd,0xca,0xbe,0x00,0x00,0x00,0x00,0x88,0x99};
unsigned char  clear[23]={0x55,0x66,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x99};

void delay(int period)
{
	int i,j;
	for (i=0;i<period;i++)
	{
		for (j=0;j<period;j++);
 	}				
}




void init_dsp(void)
{
/*
pllx10();      
asm(" ssbx INTM");//关中断
//asm(" stm #7000h,SWWSR");//外部I/O有7个等待周期
*swwsr=0x7000;//工作在不用等待
*pmst=0x3fe4;
*/
initdsp();

MCUuartInit();

*ifr=0xffff;	//开中断1,2与T
*imr=0x000e;
// config the DSP ,st0,st1,
 
}

void init_timer()
{
  *tcr=0x0010;
  *prd=0x9000;
  *tcr=0x0020;
  
  asm(" rsbx INTM");//开中断

}


//收到数据的处理处理子程序
void data_solution(void)
{
		//add your own codes
	if(bEPPflags.bits.ep2_rxdone) {	//端点2有数据
		DISABLE;
		bEPPflags.bits.ep2_rxdone = 0;
		ENABLE;
		D12_WriteEndpoint(5, ep2_len, EpBuf);//发送端点2数据
		
		MCUUartPrintf1(EpBuf,ep2_len);
	}


	
	if(bEPPflags.bits.ep1_rxdone) {		//端点1有数据
		DISABLE;
		bEPPflags.bits.ep1_rxdone = 0;
		ENABLE;
		D12_WriteEndpoint(3, ep1_len, GenEpBuf);	//发送端点1数据
		
	}
	if(receive_key==1)
	{
		DISABLE;
		bEPPflags.bits.ep1_rxdone = 0;
		ENABLE;					  
	  D12_WriteEndpoint(3, 6, &MCUuartReceiveBuffer[0]);	//发送端点1数据
	  receive_key=0;
		
	}
}



void clear_flags()
{
bEPPflags.bits.timer=0;
bEPPflags.bits.bus_reset=0;
bEPPflags.bits.configuration=0;
bEPPflags.bits.control_state=0;
bEPPflags.bits.suspend=0;
bEPPflags.bits.setup_packet=0;
bEPPflags.bits.remote_wakeup=0;
bEPPflags.bits.in_isr=0;
bEPPflags.bits.verbose=0;
bEPPflags.bits.ep1_rxdone=0;
bEPPflags.bits.ep2_rxdone=0;
bEPPflags.bits.setup_dma=0;
bEPPflags.bits.dma_state=0;
bEPPflags.bits.power_down=0;

}


///////////////////////////////////////////////
    //MAIN函数//
//////////////////////////////////////////////
void main(void)
{

	init_dsp();
 	int2_set();
	init_timer();
 	D12_ReadChipID();
	//DMA设置
	D12_SetDMA(0x0);//设置中断

	clear_flags();
	reconnect_USB();//重新连接USB

//发送一些数据到LCD

	/* Main program loop */
	asm(" trap 12h");
	//MCUUartPrintf1(example,23);
	delay(2000);
    MCUUartPrintf1(clear,23);//触发单片机程序
    MCUUartPrintf1(clear,23);

    MCUUartPrintf1(example,23);	
	while(1)
	{

		 // inter_data=D12_ReadInterruptRegister();
		if (bEPPflags.bits.timer)
		{
			DISABLE;//定时器溢出,
			bEPPflags.bits.timer = 0;
			ENABLE;
			if(bEPPflags.bits.configuration)//设备未配置返回
				{
				data_solution();//发送几个数据
				if(test_flag==1)
				    	{				//测试用
					
					//	D12_WriteEndpoint(3, 6, &port1[0]);//发送端点1数据
						D12_WriteEndpoint(5, 8, &port2[0]);//发送端点2数据
						
						test_flag=0;
						}
				}
		}
	

		if (bEPPflags.bits.bus_reset) 
		{//设备复位处理
			DISABLE;
			bEPPflags.bits.bus_reset = 0;
			ENABLE;
			// Release D12's SUSPEND pin after bus reset
			// Enable 74HCT123 pulse generation before disconnect
			// D12SUSPD = 1;
		} // if bus reset

/*		if (bEPPflags.bits.suspend) {//挂起改变处理
			DISABLE;
			bEPPflags.bits.suspend= 0;
			ENABLE;

			if(D12SUSPD&0x0001 == 1) 
			
			
			{
			//挂起处理,让DSP处于IDLE状态,等待RESET信号的到来
				D12SUSPD = 0;
			//需要初始化的动作	
				D12_SetDMA(0xC3); //设置中断模式
				D12SUSPD = 1;
			//进入IDLE状态的语句	
				while (1);
			}
		} // if suspend change

*/	
	if (bEPPflags.bits.setup_packet)
		{
		//Setup包处理
			DISABLE;
			bEPPflags.bits.setup_packet = 0;
			ENABLE;
			control_handler();//调用请求处理子程序
		//	D12SUSPD = 1;
		} // if setup_packet


	} // Main Loop
}

⌨️ 快捷键说明

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