📄 exam(chiese).txt
字号:
if(BOTXfer_wResidue==0x00)
BOTFSMstate=USBFSM4BOT_IDLE;
}// BOTFWM_CSW */
}
//=====================================================================
// 函数: F_Main_RxDone (Host -> Device)
// 语法: void F_Main_RxDone(void)
// 描述: 端点2,接收数据处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_Main_RxDone(void)
{
unsigned int EP2Len;
// F_D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
if( BOTFSM_IDLE) //BOTFSM_IDLE = BOTFSMstate^0
{
TPBulk_CBWHandler(); // Goto BOTFSMstate_CBWProc
} // if BOT in IDLE
while(BOTFSM_DataOut) //BOTFSM_DataOut = BOTFSMstate^3
{
F_InitWriteD12();
F_WriteCmdToD12(0x04); //Select EP BulkOut
F_InitReadD12();
if(!(F_ReadD12() & 0x01)) // if fifo is empty
continue;
EP2Len=F_D12_ReadEndpointAndClrD12Int(4, 64,BOTXfer_pData);
/* if(EP2Len == 0x1f)
{
if(TPBulksup_IsCBWValid())
RBC_Handler();
}
*/
BOTXfer_pData += EP2Len;
BOTXfer_wResidue -= EP2Len;
// UartSendData(0x55);
// UartSendData(BOTXfer_wResidue>>8);
// UartSendData(BOTXfer_wResidue);
/*
if(BOTXfer_wResidue <=0x40)
{
UartSendData(0x66);
for(EP2Len=0; EP2Len<512; EP2Len++)
UartSendData(g_RWBuf[EP2Len]);
UartSendData(0x77);
}
*/
if(BOTXfer_wResidue == 0)
{
// After Add NF and RamRom handler
if(BOTXfer_atNF)
//NF_PageProgram(0x0000,LBA_Write,g_RWBuf);
UartSendData("0x38");
TPBulk_CSWHandler(); // Goto BOTFSMstate_CSWProc
}
}//BOTFSM_DATAOUT
if (BOTFSM_DataIn)//BOTFSM_DataIn = BOTFSMstate^2
{
if(BOTXfer_wResidue>64)
{
EP2Len=F_D12_WriteEndpointAndClrD12Int(5,64,BOTXfer_pData);//回送数据
BOTXfer_pData+=EP2Len;
BOTXfer_wResidue-=EP2Len;
}
else
{
EP2Len=F_D12_WriteEndpointAndClrD12Int(5,BOTXfer_wResidue,BOTXfer_pData);//回送数据
BOTXfer_pData+=EP2Len;
BOTXfer_wResidue-=EP2Len;
if(BOTXfer_wResidue==0)
TPBulk_CSWHandler();
}
}//BOTFSM_DataIn
if(BOTFSM_CSW) //BOTFSM_CSW = BOTFSMstate^5
{
EP2Len=F_D12_WriteEndpointAndClrD12Int(5,13,BOTXfer_pData);//回送数据
BOTXfer_wResidue=0x00;
BOTFSMstate=USBFSM4BOT_IDLE ;
}// BOTFWM_CSW */
}
/*
For Mass Storage
*/
void F_MainRxHandler()
{
unsigned int EP2Len;
/*** C B W ***/
if ( BOTFSM_IDLE) //BOTFSM_IDLE = BOTFSMstate^0
{
TPBulk_CBWHandler(); // Goto BOTFSMstate_CBWProc
} // if BOT in IDLE
/*** Data Out Stage ***/
while (BOTFSM_DataOut) //BOTFSM_DataOut = BOTFSMstate^3
{
F_InitWriteD12();
F_WriteCmdToD12(0x04); //Select EP BulkOut
F_InitReadD12();
if(!(F_ReadD12() & 0x01)) // if fifo is empty
break;
EP2Len=F_D12_ReadEndpointAndClrD12Int(4, 64,BOTXfer_pData);
BOTXfer_pData += EP2Len;
BOTXfer_wResidue -= EP2Len;
if(BOTXfer_wResidue == 0)
{
// After Add NF and RamRom handler
if(BOTXfer_atNF)
//NF_PageProgram(0x0000,LBA_Write,g_RWBuf);
UartSendData("0x38");
TPBulk_CSWHandler(); // Goto BOTFSMstate_CSWProc
}
}//DATAOUT END
}
void F_MainTxHandler()
{
unsigned int EP2Len;
/*** Data In Stage ***/
while (BOTFSM_DataIn)//BOTFSM_DataIn = BOTFSMstate^2
{
F_InitWriteD12();
F_WriteCmdToD12(0x05); //Select EP BulkOut
F_InitReadD12();
if(!(F_ReadD12() & 0x01)) // if fifo is empty
{
if(BOTXfer_wResidue>64)
{
EP2Len=F_D12_WriteEndpoint(5,64,BOTXfer_pData);//回送数据
BOTXfer_pData+=EP2Len;
BOTXfer_wResidue-=EP2Len;
}
else
{
EP2Len=F_D12_WriteEndpoint(5,BOTXfer_wResidue,BOTXfer_pData);//回送数据
BOTXfer_pData+=EP2Len;
BOTXfer_wResidue-=EP2Len;
// 数据接收完毕,处理CSW
if(BOTXfer_wResidue==0)
TPBulk_CSWHandler();
}
}
}//DataIn END
/*** CSW Stage ***/
if (BOTFSM_CSW) //BOTFSM_CSW = BOTFSMstate^5
{
F_InitWriteD12();
F_WriteCmdToD12(0x05); //Select EP BulkOut
F_InitReadD12();
if(!(F_ReadD12() & 0x01)) // if fifo is empty
{
EP2Len=F_D12_WriteEndpoint(5,13,BOTXfer_pData);//回送数据
BOTXfer_wResidue=0x00;
BOTFSMstate=USBFSM4BOT_IDLE;
}
}// CSW END*/
F_D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
}
// Init Write D12
r1=[P_IOA_Dir];
r1|=0xff00;
[P_IOA_Dir]=r1;
r1=[P_IOA_Attrib];
r1|=0xff00; //DB7(A.15)~DB0(A.8),D12_WE(A.7),D12_RE(A.6)->OutputPort
[P_IOA_Attrib]=r1;
r1=[P_IOA_Buffer];
r1|=0x00c0;
[P_IOA_Buffer]=r1; //RE=1 WE=1
r1=[P_IOB_Buffer];
r1|=0x0090;
r1&=0xffdf; //D12_CE=0 NF_CE=1 LCD_CE=1
[P_IOB_Buffer]=r1;
// Write CMD(04) To D12
r1=[P_IOA_Buffer];
r1|=0x0402; //D12_DC=1(Select Command)
r1&=0x04ff;
[P_IOA_Buffer]=r1; // Send Data
r1&=0xffbf; //WE AT PA.6
[P_IOA_Buffer]=r1; //D12_WE=0
r1|=0x0040; //WE AT PA.6
[P_IOA_Buffer]=r1; //D12_WE=1
// Init Read D12
r1=[P_IOA_Dir];
r1&=0x00ff;
[P_IOA_Dir]=r1;
r1=[P_IOA_Attrib];
r1&=0x00ff;
[P_IOA_Attrib]=r1;
r1=[P_IOA_Buffer];
r1|=0x00c0;
[P_IOA_Buffer]=r1; //RE=1 WE=1
r1=[P_IOB_Buffer];
r1|=0x0090;
r1&=0xffdf; //D12_CE=0 NF_CE=1 LCD_CE=1
[P_IOB_Buffer]=r1;
// Read D12
r1=[P_IOA_Buffer];
r1&=0xff7d; //WE AT PA.7
[P_IOA_Buffer]=r1; //D12_RE=0
r2 = [P_IOA_Data]; // Get data
r1=[P_IOA_Buffer];
r1|=0x0080; //RE AT PA.7
[P_IOA_Buffer]=r1; //D12_RE=1
//===================================================================================================
// 函 数: F_DMA_NFtoD12()
// 语 法: void F_DMA_NFtoD12(unsigned int nbsector)
// 描 述: 向NandFlash写数据地址
// 参 数: Address
// 返回值: 无
//===================================================================================================
_F_DMA_NFtoD12: .proc
push bp to [sp];
bp=sp+1;
push r1,r5 to [sp]
r5=[bp+3]; //Get nbSector of the Transfer Data
F_DMA_NFtoD12SecRep:
r4=8; //nbPage
F_DMA_NFtoD12PageRep:
// CS D12
// r2 &= 0x0100;
// jz F_DMA_NFtoD12PageNext
// goto F_DMA_NFtoD12PageRep
F_DMA_NFtoD12PageNext:
// Wait D12 is Empty
call _WaitD12Empty
call _InitwD12
r3=64; //nbByte
// CS D12 & NF
r1=[P_IOB_Buffer];
r1|=0x0090;
r1&=0xffcf; //D12_CE=0 NF_CE=0 LCD_CE=1
[P_IOB_Buffer]=r1;
r1=[P_IOA_Data];
F_DMA_NFtoD12ByteRep:
// --\_
r1&=0xffbd;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
[P_IOA_Data]=r1;
// _/--
r1|=0x0040;
[P_IOA_Data]=r1;
r3-=1;
jnz F_DMA_NFtoD12ByteRep
call _ClearD12Int
r4-=1;
jz F_DMA_NFtoD12PageOver
goto F_DMA_NFtoD12PageRep
F_DMA_NFtoD12PageOver:
r5-=1;
jz F_DMA_NFtoD12SecOver
goto F_DMA_NFtoD12SecRep
F_DMA_NFtoD12SecOver:
pop r1,r5 from [sp] ;
pop bp from [sp] ;
retf
.endp
// Function:
// void F_DMA_NFtoD12_64B(void)
_F_DMA_NFtoD12_64B: .proc
push r1,r4 to [sp]
r1=[P_IOA_Dir];
r1&=0x00ff;
[P_IOA_Dir]=r1;
r1=[P_IOA_Attrib];
r1&=0x00ff;
[P_IOA_Attrib]=r1;
r1=[P_IOA_Data];
r1|=0xffc0;
[P_IOA_Data]=r1; //RE=1 WE=1
// CS D12 & NF
r1=[P_IOB_Buffer];
r1|=0x0090;
r1&=0xffcf; //D12_CE=0 NF_CE=0 LCD_CE=1
[P_IOB_Buffer]=r1;
r3=8;
r1=[P_IOA_Data];
r2=0x00bd;
r4=0x0040;
F_DMA_NFtoD12_64B_Rep:
// < --- BYTE 0 --- >
// --\_
// r1&=r2;
r1&=0x00bd;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
// r1|=r4;
r1|=0x0040;
[P_IOA_Data]=r1;
// < --- BYTE 1 --- >
// --\_
// r1&=r2;
r1&=0x00bd;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
// r1|=r4;
r1|=0x0040;
[P_IOA_Data]=r1;
// < --- BYTE 2 --- >
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// < --- BYTE 3 --- >
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// < --- BYTE 4 --- >
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// < --- BYTE 5 --- >
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// < --- BYTE 6 --- >
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// < --- BYTE 7 --- >
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
r3-=1;
jz F_DMA_NFtoD12_64B_Exit
goto F_DMA_NFtoD12_64B_Rep
F_DMA_NFtoD12_64B_Exit:
pop r1,r4 from [sp]
retf
.endp
// Function
// void F_DMA_D12toNF_64B(void)
_F_DMA_D12toNF_64B: .proc
push r1,r3 to [sp]
r1=[P_IOA_Dir];
r1&=0x00ff;
[P_IOA_Dir]=r1;
r1=[P_IOA_Attrib];
r1&=0x00ff;
[P_IOA_Attrib]=r1;
r1=[P_IOA_Data];
r1|=0xffc0;
[P_IOA_Data]=r1; //RE=1 WE=1
// CS D12 & NF
r1=[P_IOB_Buffer];
r1|=0x0090;
r1&=0xffcf; //D12_CE=0 NF_CE=0 LCD_CE=1
[P_IOB_Buffer]=r1;
r3=8;
r2=0x007d;
r4=0x0080;
r1=[P_IOA_Data];
F_DMA_D12toNF_64B_Rep:
// <-- BYTE0 -->
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// <-- BYTE1 -->
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// <-- BYTE2 -->
// --\_
r1&=r2;
[P_IOA_Data]=r1;
// --<Data>--
r1=[P_IOA_Data];
// _/--
r1|=r4;
[P_IOA_Data]=r1;
// <-- BYTE3 -->
// --\_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -