📄 u_main.c
字号:
* FW_ReqValues
* fs_max_interface FS
* hs_max_interface HS
* fs_config_attr FS Config Descriptor bmAttributes
* hs_config_attr HS Config Descriptor bmAttributes
* fs_max_altsetting FS Alternate Setting
* hs_max_altsetting HS Alternate Setting
*
*****************************************************************************/
void InitWorkArea(void)
{
int i;
DWORD j;
WORD *sram_addr, temp;
/* */
DIRECT_B(main_int_stat) = 0x00; /* main_int_stat */
DIRECT_B(sie_int_stat) = 0x00; /* sie_int_stat */
DIRECT_B(epr_int_stat) = 0x00; /* epr_int_stat */
DIRECT_B(dma_int_stat) = 0x00; /* dma_int_stat */
DIRECT_B(fifo_int_stat) = 0x00; /* fifo_int_stat */
DIRECT_B(ep0_int_stat) = 0x00; /* ep0_int_stat */
DIRECT_B(epa_int_stat) = 0x00; /* epa_int_stat */
DIRECT_B(epb_int_stat) = 0x00; /* epb_int_stat */
DIRECT_B(epc_int_stat) = 0x00; /* epc_int_stat */
/* Timer */
timer0_cnt = timer1_cnt = 0x00;
cmd_status = 0x00;
DIRECT_B(device_flag) = 0x00;
wk_lba = wk_cnt = 0x00;
wk_ptr = 0x00;
/* */
control_state = CTRL_IDLE;
bulk_in_state = BULK_IN_IDLE;
bulk_out_state = BULK_OUT_IDLE;
int_in_state = INT_IN_IDLE;
device_state = DEV_WAIT_RCV_CMD;
/* */
protocol_phase = COMMAND_PHASE;
DiagRegErrorCount = 0;
DiagFIFOErrorCount = 0;
#ifdef DEBUG_PRINT
/* */
USBResetCount = 0;
EP0INErrorCount = 0;
EP0OUTErrorCount = 0;
INErrorCount = 0;
OUTErrorCount = 0;
/* RS232C */
rs232c_flag.rs232c_rx = 0;
for (i = 0;i < 64;i++) {
sci_rxdata[i] = 0x00;
sci_txdata[i] = 0x00;
}
sci_rxoffset = 0;
sci_txoffset = 0;
sci_rxbusy = 0;
sci_rxerror = 0;
sci_txbusy = 0;
rs232c_dumpaddr = 0;
rs232c_dumpline = 0;
sci_msgon = 1;
#endif
/* USB */
InitUSBWorkArea();
/* Device */
InitDeviceWorkArea();
}
/*****************************************************************************
*
* :
* :
* :
* : main_int_stat Main
* sie_int_stat SIE
* epn_int_stat EPn
* ep0_int_stat EP0
*
*****************************************************************************/
void InterruptProc(void)
{
volatile unsigned char temp;
/* */
DIRECT_B(main_int_stat_sv) = rMainIntStat;
DIRECT_B(main_int_stat) |= DIRECT_B(main_int_stat_sv);
if(main_int_stat_sv.SIE_IntStat){
/* SIE */
/* SIE */
DIRECT_B(sie_int_stat_sv) = rSIE_IntStat;
#ifdef DIS_AUTONEGO
if(sie_int_stat_sv.DetectJ){
rSIE_IntEnb_BP.EnDetectJ = 0; /* DetectJ */
rUSB_Control_BP.StartDetectJ = 0; /* J */
rUSB_Control_BP.DisBusDetect = 0; /* ResetSuspend */
}
#endif /* DIS_AUTONEGO */
if(sie_int_stat_sv.NonJ){
rSIE_IntEnb_BP.EnNonJ = 0; /* NonJ */
}
#ifdef DIS_AUTONEGO
if(sie_int_stat_sv.DetectRESET) {
rUSB_Control_BP.DisBusDetect = 1; /* -> */
}
#endif /* DIS_AUTONEGO */
DIRECT_B(sie_int_stat) |= DIRECT_B(sie_int_stat_sv);
rSIE_IntStat = DIRECT_B(sie_int_stat_sv);
}
if(main_int_stat_sv.EPrIntStat){
/* EPr */
DIRECT_B(epr_int_stat_sv) = rEPrIntStat; /* EPx */
rEPrIntStat = DIRECT_B(epr_int_stat_sv);
DIRECT_B(epr_int_stat) |= DIRECT_B(epr_int_stat_sv);
if(epr_int_stat_sv.EPaIntStat){
/* EPa */
/* EPa */
DIRECT_B(epa_int_stat_sv) = rEPaIntStat;
rEPaIntStat = DIRECT_B(epa_int_stat_sv);
DIRECT_B(epa_int_stat) |= DIRECT_B(epa_int_stat_sv);
}
if(epr_int_stat_sv.EPbIntStat){
/* EPb */
/* EPb */
DIRECT_B(epb_int_stat_sv) = rEPbIntStat;
rEPbIntStat = DIRECT_B(epb_int_stat_sv);
DIRECT_B(epb_int_stat) |= DIRECT_B(epb_int_stat_sv);
}
if(epr_int_stat_sv.EPcIntStat){
/* EPc */
/* EPc */
DIRECT_B(epc_int_stat_sv) = rEPcIntStat;
rEPcIntStat = DIRECT_B(epc_int_stat_sv);
DIRECT_B(epc_int_stat) |= DIRECT_B(epc_int_stat_sv);
}
}
if( main_int_stat_sv.DMA_IntStat ){
DIRECT_B(dma_int_stat_sv) = rDMA_IntStat; /* DMA */
rDMA_IntStat = DIRECT_B(dma_int_stat_sv);
DIRECT_B(dma_int_stat) |= DIRECT_B(dma_int_stat_sv);
}
if( main_int_stat_sv.FIFO_IntStat ){
DIRECT_B(fifo_int_stat_sv) = rFIFO_IntStat; /* FIFO */
rFIFO_IntStat = DIRECT_B(fifo_int_stat_sv);
DIRECT_B(fifo_int_stat) |= DIRECT_B(fifo_int_stat_sv);
}
if( main_int_stat_sv.EP0IntStat ){
/* EP0 */
/* EP0 */
DIRECT_B(ep0_int_stat_sv) = rEP0IntStat;
DIRECT_B(ep0_int_stat) |= DIRECT_B(ep0_int_stat_sv);
rEP0IntStat = DIRECT_B(ep0_int_stat_sv);
}
rMainIntStat = DIRECT_B(main_int_stat_sv) & 0xFE; /* */
// pINT_FP47_FCT_FAD = 0x10; /* FP6 Clear */
pINT_FP815 = 0x40 ; // FP14 interrupt request flag clear
}
/*****************************************************************************
*
* : Timer0
* :
* :
* : timer0_cnt Timer0
*
*****************************************************************************/
void WaitTMIntProc(void)
{
timer0_cnt++;
*(volatile unsigned char*)REG_TM8_3_IFLAG |= 0x08; /* 8-bit timer 3 clr intflg */
}
#ifdef DEBUG_PRINT
/*****************************************************************************
*
* : RS232C
* :
* :
* :
*
*****************************************************************************/
void SCIRxCmp(void)
{
BYTE temp;
int i;
pINT_FSIF = 0x02; /* */
if ((pSIF0_STATUS & 0x1C) == 0x00) { /* */
sci_rxbusy = 1; /* */
temp = pSIF0_RXD;
if (temp == '\r') temp = '\n';
if (sci_rxoffset < 62 && sci_rxdata[sci_rxoffset] != '\n') {
if (temp == '\n') {
sci_rxdata[sci_rxoffset] = '\n';
sci_rxdata[sci_rxoffset + 1] = '\0';
} else if (temp == '\b') {
if (sci_rxoffset > 0) {
sci_rxoffset--;
sci_rxdata[sci_rxoffset] = '\0';
sci_txdata[0] = '\b';
sci_txdata[1] = ' ';
sci_txdata[2] = '\b';
sci_txdata[3] = '\0';
o_rs232c();
}
} else {
sci_rxdata[sci_rxoffset] = temp;
sci_rxoffset++;
sci_rxdata[sci_rxoffset] = '\0';
sci_txdata[0] = temp;
sci_txdata[1] = '\0';
o_rs232c();
}
} else {
sci_rxdata[sci_rxoffset] = '\n';
sci_rxdata[sci_rxoffset + 1] = '\0';
}
} else {
pINT_FSIF = 0x01; /* */
sci_rxbusy = 0; /* */
temp = pSIF0_RXD; /* */
/* */
sci_rxoffset = 0;
sci_rxdata[sci_rxoffset] = '\0';
bSIF0_STATUS_FER0 = 0; /* */
bSIF0_STATUS_PER0 = 0; /* */
bSIF0_STATUS_OER0 = 0; /* */
sci_rxerror = 1;
rs232c_flag.rs232c_rx = 1; /* ">" */
}
if (sci_rxdata[sci_rxoffset] == '\n' && rs232c_flag.rs232c_rx == 0) {
sci_rxdata[sci_rxoffset] = '\0';
rs232c_flag.rs232c_rx = 1;
}
}
/*****************************************************************************
*
* : RS232C
* :
* :
* :
*
*****************************************************************************/
void SCIRxErr(void)
{
BYTE temp;
pINT_FSIF = 0x01; /* */
sci_rxbusy = 0; /* */
temp = pSIF0_RXD; /* */
/* */
sci_rxoffset = 0;
sci_rxdata[sci_rxoffset] = '\0';
bSIF0_STATUS_FER0 = 0; /* */
bSIF0_STATUS_PER0 = 0; /* */
bSIF0_STATUS_OER0 = 0; /* */
sci_rxerror = 1;
rs232c_flag.rs232c_rx = 1; /* ">" */
}
/*****************************************************************************
*
* : RS232C
* :
* :
* : sci_txdata
* : sci_txoffset
*
*****************************************************************************/
void SCITxCmp(void)
{
BYTE temp;
pINT_FSIF = 0x04; /* */
if (bSIF0_STATUS_TDBE0 == 1) {
/* Tx Buffer Empty */
if (sci_txdata[sci_txoffset] != '\0') {
pSIF0_TXD = sci_txdata[sci_txoffset];
sci_txoffset++;
} else {
sci_txbusy = 0;
if (bSIF0_STATUS_TEND0 == 0) {
/* */
bSIF0_CTL_TXEN0 = 0; /* */
}
}
}
}
#else /* DEBUG_PRINT */
/*****************************************************************************
*
* : RS232C
* :
* :
* :
*
*****************************************************************************/
void SCIRxCmp(void)
{
; /* */
}
/*****************************************************************************
*
* : RS232C
* :
* :
* :
*
*****************************************************************************/
void SCIRxErr(void)
{
; /* */
}
/*****************************************************************************
*
* : RS232C
* :
* :
* : sci_txdata
* : sci_txoffset
*
*****************************************************************************/
void SCITxCmp(void)
{
; /* */
}
/*****************************************************************************
*
* : RS232C
* :
* :
* : sci_txbusy
*
*****************************************************************************/
void SCITxEnd(void)
{
; /* */
}
#endif /* DEBUG_PRINT */
/*****************************************************************************
*
* :
* :
* :
* :
*
*****************************************************************************/
void NoInt(void)
{
; /* */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -