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

📄 mainloop.c

📁 usbhost 开发码
💻 C
字号:
//////MAINLOOP.C
#include "common.h"
#include "mainloop.h"
#include "d12ci.h"
#include "disp.h"
#include "isr.h"
#include "chap_9.h"
#include "protodma.h"

EPPFLAGS bEPPflags;

uchar GenEpBuf[EP1_PACKET_SIZE];
uchar EpBuf[EP2_PACKET_SIZE];
IO_REQUEST idata ioRequest;
unsigned char ioSize, ioCount;
unsigned long ClockTicks = 0;
uchar xdata MainEpBuf[256];

void init_timer0(void)
{
	TMOD &= 0xF0;
	TMOD |= 0x1;
	TL0 = 0x0;
	TH0 = 0x0;
	ET0 = 1;
	TR0 = 1;
	PT0 = 1;
	EA = 1;
}
void init_special_interrupts(void)
{
	IT0 = 0;
	EX0 = 1;
	PX0 = 0; 
}
void init_port()
{
	P0 = 0xff;
	P1 = 0xff;
	P2 = 0xff;
	P3 = 0xff;
//	MCU_D12CS = 0x0;
	D12SUSPD = 0;
}
void disconnect_USB(void)
{
	D12_SetMode(D12_NOLAZYCLOCK,D12_SETTOONE|D12_CLOCK_12M);
}
void connect_USB(void)
{
	DISABLE;
	bEPPflags.value = 0;
	ENABLE;
	D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT,D12_SETTOONE|D12_CLOCK_12M);
}
void reconnect_USB(void)
{
	unsigned long clk_cnt;
	MCU_LED0 = 0;
	MCU_LED1 = 0;
	D12SUSPD = 0;
	disconnect_USB();
	for(clk_cnt = 0;clk_cnt<10000;clk_cnt++);
	connect_USB();
	MCU_LED0 = 1;
	MCU_LED1 = 1;
}

void check_key_LED(void)
{
	static unsigned char c, last_key = 0xf;
	uchar cc[8]={0,0,0,0,0,0,0,0};
	c = MCU_SWM0 & MCU_SWM1;
	c &= 0x0f;
	if (c != last_key) {
//		D12_WriteEndpoint(3, 1, &c);
		if(c == 0)
			cc[2] = 5;/*相当于‘b按下’*/
		else
			cc[2] = 0;
		D12_WriteEndpoint(3, 8, cc);
	}
	last_key = c;
	if(bEPPflags.bits.ep1_rxdone) {
		DISABLE;
		bEPPflags.bits.ep1_rxdone = 0;
		ENABLE;
		MCU_LED0 = !(GenEpBuf[3] & 0x1);
		MCU_LED1 = !(GenEpBuf[3] & 0x2);
	}
}

main()
{
//	uchar key,i;
	initcom();
	initlcd();
		D12_ReadInterruptRegister();
		D12_ReadInterruptRegister();
		D12_ReadInterruptRegister();
		D12_ReadInterruptRegister();
		D12_ReadInterruptRegister();
		D12_ReadLastTransactionStatus(0);
		D12_ReadLastTransactionStatus(1);
		D12_ReadLastTransactionStatus(2);
	  	D12_ReadLastTransactionStatus(3);
		D12_ReadLastTransactionStatus(4);
		D12_ReadLastTransactionStatus(5);

//	bEPPflags.bits.bus_reset = 1;
	init_port();
	init_timer0();
	init_special_interrupts();
//	MCU_D12CS = 1;
//	MCU_D12CS = 0;                                
	bEPPflags.value = 0;
	reconnect_USB();
	initlcd();
	dispinfo(1,"Test!");


	while(1)
	{
	if(bEPPflags.bits.timer)
		{
			//dispinfo(1,"timer");
			DISABLE;
			bEPPflags.bits.timer = 0;
			ENABLE;
			if(bEPPflags.bits.configuration)
				check_key_LED();
		}
		if(bEPPflags.bits.bus_reset)
		{
			//dispinfo(1,"   bus_reset");
			DISABLE;
			bEPPflags.bits.bus_reset = 0;
			ENABLE;
		//	D12SUSPD = 1;
		}
		if(bEPPflags.bits.suspend)
		{
			//dispinfo(1,"   suspend");
			DISABLE;
			bEPPflags.bits.suspend = 0;
			ENABLE;
			if(D12SUSPD == 1)
			{
				D12SUSPD = 0;
				P0 = 0xff;
				P1 = 0xff;
				P2 = 0xff;
				P3 = 0xff;
			//	D12SUSPD = 1;
			//	PCON |= 0x02;
			//	while(1);
			}
		}
//		bEPPflags.bits.setup_packet=1;
		if(bEPPflags.bits.setup_packet)
		{
//			dispinfo(1,"   Setup packet");
			DISABLE;
			bEPPflags.bits.setup_packet = 0;
			ENABLE;
			control_handler();
			//D12SUSPD = 1;
		}
	}
}
timer_isr() interrupt 1
{
	DISABLE;
	bEPPflags.bits.timer = 1;
	ENABLE;
//	inportb(12);
}
usb_isr() interrupt 0
{
	DISABLE;
	fn_usb_isr();
	ENABLE;
}

⌨️ 快捷键说明

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