usb_asm.c

来自「TI 5402程序源码」· C语言 代码 · 共 188 行

C
188
字号
#include "constant.h"
#include "c5402Reg.h"


extern void c54init(void);

unsigned char usbbuf[1024],usbbufUP[1024];

unsigned int flag_usb = 0;
unsigned int usbcmd=0;

int led_timer	;
unsigned int led_map	;

unsigned int m_class	;		

unsigned int end_flg	;
unsigned int run_flg	;

void userinit(void);

void Delayms(unsigned int T)
{
	unsigned int j;
	unsigned int n;
	for(n = 0; n < T; n++)
	{
		for(j = 0; j < 3000; j++);
	 	{
			asm("	nop");
		}
	}		
}

void main(void)
{	
	//unsigned int flag=0,j=0,i=0;	
	
	c54init();
	userinit();
	while(1)
	{
	
	}
}

#pragma FUNC_EXT_CALLED(ISR_usb);
interrupt void ISR_usb(void)	// INT_01调用
{
	unsigned int flag=0,j=0;
	
	flag_usb = 1;
	
	for(j=0;j<512;j++)
	{
		usbbuf[j] = 0;	//接收缓冲区清零
	}
	
	usbcmd = USB_COMMAND &0x03; //接收命令类型
	
	
	for(j=0;j<512;j++)
	{
		do
		{
			flag = USB_STATUS1;	
			flag = flag&0x02;	//取出第2位,判断
		}while(flag == 0);
		
		usbbuf[j] = USB_DATA1;				
	}
	
	//以上完成数据接收:512字节		
	
	usbbuf[0] = 25;		//回发数据有效长度
		
	if(usbcmd == 0)
	{		
		for(j=0;j<512;j++)
		{
			do
			{	
				flag = USB_STATUS3;			
				flag = flag&0x01;	//取出第1位,判断						
			}while(flag == 0);	
				
			asm("	nop");
			asm("	nop");
			
			USB_DATA3= usbbuf[j];				
		}
	}
	
	else if(usbcmd == 1)
	{		
		for(j=1;j<26;j++)
		{
		usbbuf[j]=usbbuf[j]+ 1;	
		}
		
		for(j=0;j<512;j++)
		{
			do
			{	
				flag = USB_STATUS3 ;			
				flag = flag&0x01;							
			}while(flag == 0);	
					
			USB_DATA3= usbbuf[j];				
		}	
	}
	
	
	else if(usbcmd == 2)
	{
	
		for(j=1;j<26;j++)
		{
		usbbuf[j]=usbbuf[j]- 1;	
		}
		
		for(j=0;j<512;j++)
		{
			do
			{
				flag = USB_STATUS3 ;			
				flag = flag&0x01;	
				asm("	nop");
				asm("	nop");					
			}while(flag == 0);	
				
			USB_DATA3= usbbuf[j];				
		}	
	}
	
	
	else if(usbcmd == 3)
	{
	
		for(j=1;j<26;j++)
		{
		usbbuf[j]=usbbuf[j]+ 5;	
		}
		
		for(j=0;j<512;j++)
		{
			do
			{
				flag = USB_STATUS3 ;			
				flag = flag&0x01;	
				asm("	nop");
				asm("	nop");					
			}while(flag == 0);	
				
			USB_DATA3= usbbuf[j];				
		}	
	}		
				

    flag_usb = 0;
}



#pragma FUNC_EXT_CALLED(ISR_timer0);
interrupt void ISR_timer0(void)	// timer0 INT 
{
	led_timer ++;
	if(led_timer == 0)
	{
		ST1 = ST1^0x2000;
		led_map = led_map ^ 0x03;
		LED_ADDER = led_map;	
		//led_timer = -3906;
		led_timer = -3900;
	}
}	

void userinit(void)
{
	led_timer = -390;
	m_class = 0;
	end_flg = 0;
	run_flg = 0;	
	led_map = 1;
	LED_ADDER = led_map;
}	

⌨️ 快捷键说明

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