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

📄 main.c

📁 介绍DSP通过USB与主机的数据传送代码
💻 C
字号:
#include "usb1cfg.h"
#include "CH375INC.h"
#include "function.h"
#include<stdlib.h>
extern void Mem_transmit();
unsigned int LOG_INT_R=0xFF;
unsigned int LOG_transmit=0;
unsigned int buffer[4096];	

void init_usb()
{
	unsigned int i;
	WR_CMD_PORT(CMD_SET_USB_MODE);
	WR_DAT_PORT(2);
	for (i=200;i!=0;i--)  //等待20微秒
	{  
		if (RD_DAT_PORT()==CMD_RET_SUCCESS ) break;
	}
	if(i==0)
	{
		LOG_printf(&trace,"open_wrong!!");
		WR_CMD_PORT(CMD_RESET_ALL);
		Delay50ms();
		init_usb();
	}
	else
	{
	    LOG_printf(&trace,"open_right!!");
	}
	WR_CMD_PORT( CMD_UNLOCK_USB );
	C54_enableIMR(0x01);
}

	
void main()
{
	WR_CMD_PORT(CMD_RESET_ALL);
	Delay50ms();
	init_usb();
}


void usb_int0()
{
	WR_CMD_PORT(CMD_GET_STATUS);
	LOG_INT_R=RD_DAT_PORT();
	SWI_post(&SWI0);
}


void usb_transmit()
{
	unsigned int length=0;
	unsigned int i=0;
	unsigned int R_buffer[3];
	LOG_INT_R=(0xFF&LOG_INT_R);
	switch (LOG_INT_R) 
	{	
		case USB_INT_EP2_OUT:  // 批量端点下传成功
		{ 	
			
			WR_CMD_PORT( CMD_RD_USB_DATA );  
			length = RD_DAT_PORT( );
			if(length==3)
			{
				for ( i = 0; i < length; i ++ ) 
					R_buffer[i]=RD_DAT_PORT( );
				if((R_buffer[0]==0x21)&&(R_buffer[1]==0x22)&&(R_buffer[2]==0x23))
				{
					Mem_transmit();
					LOG_printf(&trace,"Transmit Begin!!");
					WR_CMD_PORT(CMD_WR_USB_DATA7);  //向USB端点2的发送缓冲区写入数据块 
					WR_DAT_PORT(64);// 首先写入后续数据长度,回传刚接收到的数据长度
					WR_DAT_PORT(1);
					WR_DAT_PORT(133);
					for (i=0; i<31; i++)
					{
						WR_DAT_PORT(buffer[i]&0xFF);
						WR_DAT_PORT((buffer[i]/256)&0x0F);
					}
					LOG_transmit=1;
				}
				else
				{
					LOG_printf(&trace,"Wrong_buffer!!,%d");
					LOG_INT_R=0xFF;
					break;
				}
			}
			else
			{
				LOG_printf(&trace,"Recievve Wrong!!");
				LOG_INT_R=0xFF;
				break;
			} 
			LOG_INT_R=0xFF;
			break; 
		}
		case USB_INT_EP2_IN: //批量数据发送成功
		{  
			WR_CMD_PORT(CMD_UNLOCK_USB);// 释放当前USB缓冲区
			
			if((LOG_transmit<=132)&&(LOG_transmit>0))
			{
				WR_CMD_PORT(CMD_WR_USB_DATA7);  //向USB端点2的发送缓冲区写入数据块
			 	if(LOG_transmit==132)
			 	{
					WR_DAT_PORT(10);
					length=10;
				}
				else
				{	
					WR_DAT_PORT(64);
					length=64;
				}
				WR_DAT_PORT(LOG_transmit+1);
				WR_DAT_PORT(133-LOG_transmit);
				for (i=0; i<31; i++)
				{
					WR_DAT_PORT(buffer[LOG_transmit*31+i]&0xFF);
					WR_DAT_PORT((buffer[LOG_transmit*31+i]/256)&0x0F);
				}
				LOG_transmit++;
				LOG_INT_R=0xFF;
				break;
			}
			else
			{
				LOG_printf(&trace,"Transmit Over!!,%d",LOG_transmit);
				LOG_transmit=0;
				LOG_INT_R=0xFF;
				break;
			}
			
			
		}
		default: // 其它中断,未用到,解锁后退出即可
		{  
			WR_CMD_PORT( CMD_UNLOCK_USB );  // 释放当前USB缓冲区
			LOG_printf(&trace,"Other!!,%d",LOG_INT_R);
			LOG_INT_R=0xFF; 
			break;
		}
	}
}
	

	
	
	

⌨️ 快捷键说明

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