📄 u_main.c
字号:
/******************************************************************************
* File name : main.c
* Module name : main module
* Author : Hiromichi.Kondo
*-----------------------------------------------------------------------------
* $Id: main.c,v 1.6 2003/05/26 02:34:45 9551619 Exp $
*****************************************************************************/
/*--- Include ---------------------------------------------------------------*/
#include "u_value.h"
#include "u_macro.h"
#include "u_c33cpu.h"
#include "u_regNikka.h"
#include "u_com_fp.h"
#include "u_usb_fp.h"
#include "u_ram_data.h"
#include "u_rom_data.h"
#include "u_dev_fp.h"
#include "usbfw_if.h"
/*--- Function Prototype ---------------------------------------------------*/
void PowerOnProc_i(void);
static void InitTargetIC(void);
static int Diagnostic(int loop);
static void SetReplyDescriptorData(void);
void InitWorkArea(void);
void InterruptProc(void);
void WaitTMIntProc(void);
void SCIRxCMP(void);
void SCIRxErr(void);
void SCITxCMP(void);
void SCITxEnd(void);
/*--- External Function Prototype ------------------------------------------*/
extern void InitUSBWorkArea(void);
/* Global Variable */
S_rMainIntStat main_int_stat_sv; /* Main */
S_rSIE_IntStat sie_int_stat_sv; /* SIE */
S_rEPrIntStat epr_int_stat_sv; /* EPr */
S_rDMA_IntStat dma_int_stat_sv; /* DMA */
S_rFIFO_IntStat fifo_int_stat_sv; /* FIFO */
S_rEP0IntStat ep0_int_stat_sv; /* EP0 */
S_rEPaIntStat epa_int_stat_sv; /* EPa */
S_rEPbIntStat epb_int_stat_sv; /* EPb */
S_rEPcIntStat epc_int_stat_sv; /* EPc */
/*****************************************************************************
*
* : PowerOn
* :
* :
* : special_flag
*
*****************************************************************************/
void PowerOnProc_i(void)
{
ControlLED(ALL_TURN_ON); /* LED */
InitIFData();
InitWorkArea();
InitTargetIC();
ControlLED(ALL_TURN_OFF); /* LED */
special_flag.Attach = 1 ; /* Attach */
}
/*****************************************************************************
*
* : IC
* :
* :
* :
*
*****************************************************************************/
void InitTargetIC(void)
{
/* */
if (Diagnostic(0) == FALSE_U) {
/* */
panic(2);
}
/* */
rEP0IntStat = 0xFF;
rEPaIntStat = 0xFF;
rEPbIntStat = 0xFF;
rEPcIntStat = 0xFF;
rEPrIntStat = 0xFF;
rDMA_IntStat = 0xFF;
rFIFO_IntStat = 0xFF;
rSIE_IntStat = 0xFF;
rMainIntStat = 0xFF;
/* */
rMainIntEnb_BP.EnSIE_IntStat = 1;
rMainIntEnb_BP.EnEPrIntStat = 1;
rMainIntEnb_BP.EnDMA_IntStat = 1;
rMainIntEnb_BP.EnFIFO_IntStat = 1;
rMainIntEnb_BP.EnEP0IntStat = 1;
rSIE_IntEnb_BP.EnVBUS_Changed = 1;
rSIE_IntEnb_BP.EnSetAddressCmp = 1;
rEPrIntEnb_BP.EnEPaIntStat = 1;
rEPrIntEnb_BP.EnEPbIntStat = 1;
rEPrIntEnb_BP.EnEPcIntStat = 1;
rFIFO_IntEnb_BP.EnFIFO_IN_Cmp = 1;
rFIFO_IntEnb_BP.EnFIFO_OUT_Cmp = 1;
rFIFO_IntEnb_BP.EnDescriptorCmp = 1;
/* USB Configuration */
rUSB_Control = 0x00; /* */
rXcvrControl = 0x01; /* */
rUSB_Test = 0x00; /* */
/* Bus Configuration */
// rDMA_Config_0_BP.PDREQ_Level = 1; /* Active-Low */
rDMA_Config_0_BP.PDREQ_Level = 0; /* Active-High */
rDMA_Config_0_BP.PDACK_Level = 1; /* Active-Low */
rDMA_Config_0_BP.PDRDWR_Level = 1; /* Active-Low */
rDMA_Config_0_BP.ActivePort = 1;
rDMA_Config_1_BP.SingleWord = 1;
rDMA_Config_1_BP.CountMode = 1; /* CountMode */
SetReplyDescriptorData();
/* FIFO */
#ifdef BULKONLY
rEPaStartAdrs_H = 0x02; /* EPa = 0x200-0x27F(128Byte) */
rEPaStartAdrs_L = 0x00;
rEPbStartAdrs_H = 0x02; /* EPb = 0x280-0x2FF(128Byte) */
rEPbStartAdrs_L = 0x80;
rEPcStartAdrs_H = 0x03; /* EPc = 0x300-0x300(0Byte) */
rEPcStartAdrs_L = 0x00;
rEPdStartAdrs_H = 0x03; /* EPd = 0x300-0x300(0Byte) */
rEPdStartAdrs_L = 0x00;
rEPeStartAdrs_H = 0x03; /* EPe = 0x300-0x300(0Byte) */
rEPeStartAdrs_L = 0x00;
rEPfStartAdrs_H = 0x03; /* EPf = 0x300-0x300(0Byte) */
rEPfStartAdrs_L = 0x00;
rEPgStartAdrs_H = 0x03; /* EPg = 0x300-0x300(0Byte) */
rEPgStartAdrs_L = 0x00;
rEPhStartAdrs_H = 0x03; /* EPh = 0x300-0x300(0Byte) */
rEPhStartAdrs_L = 0x00;
#else /* BULKONLY */
rEPaStartAdrs_H = 0x02; /* EPa = 0x200-0x27F(128Byte) */
rEPaStartAdrs_L = 0x00;
rEPbStartAdrs_H = 0x02; /* EPb = 0x280-0x2FF(128Byte) */
rEPbStartAdrs_L = 0x80;
rEPcStartAdrs_H = 0x03; /* EPc = 0x300-0x37F(128Byte) */
rEPcStartAdrs_L = 0x00;
rEPdStartAdrs_H = 0x03; /* EPd = 0x380-0x380(0Byte) */
rEPdStartAdrs_L = 0x80;
rEPeStartAdrs_H = 0x03; /* EPe = 0x380-0x380(0Byte) */
rEPeStartAdrs_L = 0x80;
rEPfStartAdrs_H = 0x03; /* EPf = 0x380-0x380(0Byte) */
rEPfStartAdrs_L = 0x80;
rEPgStartAdrs_H = 0x03; /* EPg = 0x380-0x380(0Byte) */
rEPgStartAdrs_L = 0x80;
rEPhStartAdrs_H = 0x03; /* EPh = 0x380-0x380(0Byte) */
rEPhStartAdrs_L = 0x80;
#endif /* BULKONLY */
}
/*****************************************************************************
*
* :
* :
* : 0: -1:
* : DiagRegErrorCount
* DiagFIFOErrorCount FIFO
*
*****************************************************************************/
int Diagnostic(int loop)
{
BYTE temp;
DWORD cnt;
WORD fifo_remain;
int RegErr,FIFOErr;
// for debug Endo
// return TRUE;
// for debug Endo
do{
rEPnControl_BP.AllFIFO_Clr = 1; /* All FIFO Clear */
/* DMA Stop */
rDMA_Control_BP.DMA_Stop = 1;
while(rDMA_Control_BP.DMA_Running == 1);
RegErr = 1;
FIFOErr = 1;
/* */
do{
/* */
rEPaIntEnb = 0x7F; if( rEPaIntEnb != 0x7F ) break;
rEPaIntEnb = 0x55; if( rEPaIntEnb != 0x55 ) break;
rEPaIntEnb = 0x2A; if( rEPaIntEnb != 0x2A ) break;
rEPaIntEnb = 0x00; if( rEPaIntEnb != 0x00 ) break;
rUSB_Address = 0x7F; if( rUSB_Address != 0x7F ) break;
rUSB_Address = 0x55; if( rUSB_Address != 0x55 ) break;
rUSB_Address = 0x2A; if( rUSB_Address != 0x2A ) break;
rUSB_Address = 0x00; if( rUSB_Address != 0x00 ) break;
rDMA_Count_HH = 0xFF; if( rDMA_Count_HH != 0xFF ) break;
rDMA_Count_HH = 0x55; if( rDMA_Count_HH != 0x55 ) break;
rDMA_Count_HH = 0xAA; if( rDMA_Count_HH != 0xAA ) break;
rDMA_Count_HH = 0x00; if( rDMA_Count_HH != 0x00 ) break;
rDMA_Latency = 0x0F; if( rDMA_Latency != 0x0F ) break;
rDMA_Latency = 0x05; if( rDMA_Latency != 0x05 ) break;
rDMA_Latency = 0x0A; if( rDMA_Latency != 0x0A ) break;
rDMA_Latency = 0x00; if( rDMA_Latency != 0x00 ) break;
rEPaMaxSize_L = 0xFF; if( rEPaMaxSize_L != 0xFF ) break;
rEPaMaxSize_L = 0x55; if( rEPaMaxSize_L != 0x55 ) break;
rEPaMaxSize_L = 0xAA; if( rEPaMaxSize_L != 0xAA ) break;
rEPaMaxSize_L = 0x00; if( rEPaMaxSize_L != 0x00 ) break;
RegErr = 0;
/* FIFO */
rEP0MaxSize = 0x08; /* EP0 MaxPacketSize = 8Byte */
rEPnControl_BP.AllFIFO_Clr = 1; /* All FIFO Clear */
rCPU_JoinRd = 0x00;
rCPU_JoinWr = 0x00;
rEnEPnFIFO_Access_BP.EnEPnFIFO_Wr = 1;
rEPnFIFOforCPU = 0x00;
rEPnFIFOforCPU = 0xFF;
rEPnFIFOforCPU = 0x55;
rEPnFIFOforCPU = 0xAA;
rEnEPnFIFO_Access_BP.EnEPnFIFO_Wr = 0;
fifo_remain = MKWORD( rEPnRdRemain_H,rEPnRdRemain_L );
if( fifo_remain != 0x04 ) break;
#if 0 /* 03/07/01 Endo :L11 */
temp = rEPnFIFOforCPU; //
#endif /* 03/07/01 Endo :L11 */
fifo_remain = MKWORD( rEPnRdRemain_H,rEPnRdRemain_L );
if( fifo_remain != 0x04 ) break;
rEnEPnFIFO_Access_BP.EnEPnFIFO_Rd = 1;
if( rEPnFIFOforCPU != 0x00 ) break;
if( rEPnFIFOforCPU != 0xFF ) break;
if( rEPnFIFOforCPU != 0x55 ) break;
if( rEPnFIFOforCPU != 0xAA ) break;
rEnEPnFIFO_Access_BP.EnEPnFIFO_Rd = 0;
fifo_remain = MKWORD( rEPnRdRemain_H,rEPnRdRemain_L );
if( fifo_remain != 0x00 ) break;
FIFOErr = 0;
} while (0);
if (RegErr) {
DiagRegErrorCount++;
}
if (FIFOErr) {
DiagFIFOErrorCount++;
}
} while (loop);
if( RegErr == 0 && FIFOErr == 0 ){
return TRUE_U;
}else{
return FALSE_U;
}
}
/*****************************************************************************
*
* : Descriptor
* :
* :
* : desc_addr_fs_device FSDevice Descriptor
* desc_addr_hs_device HSDevice Descriptor
* desc_addr_fs_config FSConfiguration Descriptor
* desc_addr_hs_config HSConfiguration Descriptor
* desc_addr_string[] String Descriptor
*
*****************************************************************************/
void SetReplyDescriptorData(void)
{
BYTE *temp_ptr, num_alt_set;
WORD i, j, k, l, len;
ConfigDesc *p_c_desc;
InterfaceDesc *p_i_desc;
rDescAdrs_H = 0x00; /* Descriptor */
rDescAdrs_L = 0x40; /* */
/* FSDevice Descriptor */
desc_addr_fs_device = MKWORD( rDescAdrs_H,rDescAdrs_L );
/* FSDevice Descriptor */
temp_ptr = (BYTE *)&fs_device_desc;
for( i=0; i<fs_device_desc.bLength; i++){
rDescDoor = temp_ptr[i];
}
/* FSConfiguration Descriptor */
desc_addr_fs_config = MKWORD( rDescAdrs_H,rDescAdrs_L );
p_c_desc = &fs_config_desc;
p_i_desc = &fs_interface_desc[0];
num_alt_set = NUM_FS_ALT_SET; /* FS */
len = p_c_desc->bLength; /* */
/* Configuration Descriptor */
temp_ptr = (BYTE *)p_c_desc;
for( j=0; j<len; j++ ){
rDescDoor = temp_ptr[j];
}
for( j=0; ; j++ ){
len = p_i_desc->bLength; /* */
/* Interface Descriptor */
temp_ptr = (BYTE *)&p_i_desc[j];
for( k=0; k<len; k++ ){
rDescDoor = temp_ptr[k];
}
for( k=0; k<p_i_desc[j].bNumEndpoints; k++ ){
len = p_i_desc[j].p_e_desc[k].bLength;
temp_ptr = (BYTE *)&(p_i_desc[j].p_e_desc[k]);
for( l=0; l<len; l++ ){
rDescDoor = temp_ptr[l];
}
}
if( j >= num_alt_set ){
break;
}
}
for( i=0; i<NUM_STRING; i++ ){
/* String Descriptor */
desc_addr_string[i] = MKWORD( rDescAdrs_H, rDescAdrs_L );
/* String Descriptor */
temp_ptr = (BYTE *)string_table[i];
len = temp_ptr[0];
for( j=0; j<len; j++ ){
rDescDoor = temp_ptr[j];
}
}
}
/*****************************************************************************
*
* :
* :
* :
* : main_int_stat Main
* sie_int_stat SIE
* epn_int_stat EPn
* ep0_int_stat EP0
* timer0_cnt Timer0
* timer1_cnt timer1
* control_state Control
* fw_flag
* i2c_buf ROM
* usb_wk_buffer USB
* usb_wk_data USB
* dev_desc_info
* fs_config_info FS
* hs_config_info HS
* string_info
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -