📄 mainloop.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 + -