📄 exam(chiese).txt
字号:
DBR.bOEMName[2]='M';
DBR.bOEMName[3]='-';
DBR.bOEMName[4]='S';
DBR.bOEMName[5]='S';
DBR.bOEMName[6]='L';
DBR.bOEMName[7]=' ';
/* Byte Per Sector */
DBR.BPB_wBytesPerSec[0]=SECTOR_SIZE; // Low Byte
DBR.BPB_wBytesPerSec[1]=SECTOR_SIZE >> 8; // High Byte
/* Sector Per Cluster */
/* FAT Number */
DBR.BPB_bNumFATs=FATS;
/* Root Entry Files */
DBR.BPB_wRootEntry[0]=ROOT_ENTRY&0xff;
DBR.BPB_wRootEntry[1]=(ROOT_ENTRY>>8)&0xff;
/* Sector Per Cluster */
DBR.BPB_bSecPerClus=nbSectorPerCluster;
/* Reserved Sector Number */
DBR.BPB_wReservedSec[0]=RESERVED_SECTOR&0xff;
DBR.BPB_wReservedSec[1]=(RESERVED_SECTOR>>8)&0xff;
DBR.BPB_wRootEntry[0]=(ROOT_ENTRY&0xff);
DBR.BPB_wRootEntry[1]=(ROOT_ENTRY>>8)&0xff;
/* Total Sector (<32M User)*/
DBR.BPB_wTotalSec[0]=totalSector&0xff;
DBR.BPB_wTotalSec[1]=(totalSector>>8)&0xff;
/* Media */
DBR.BPB_bMedia=0xF8;
/* Sector Per FAT */
DBR.BPB_wSecPerFAT[0]=(SECTOR_PER_FAT) & 0xff;
DBR.BPB_wSecPerFAT[1]=((SECTOR_PER_FAT) >>8) & 0xff;
/* Sector Per Trk */
DBR.BPB_wSecPerTrk[0]=nbSector&0xff;
DBR.BPB_wSecPerTrk[1]=(nbSector>>8)&0xff;
/* Heads Number */
DBR.BPB_wHeads[0]= nbHead&0xff;
DBR.BPB_wHeads[1]= (nbHead>>8)&0xff;
/* Hidden Sector Number */
DBR.BPB_dHiddSec[0]=0x00; //Low Byte
DBR.BPB_dHiddSec[1]=0x00; //MidL Byte
DBR.BPB_dHiddSec[2]=0x00; //MidH Byte
DBR.BPB_dHiddSec[3]=0x00; //High Byte
/* Big Total Sector (>=32M Used) */
DBR.BPB_dBigTotalSec[0]=0x00;
DBR.BPB_dBigTotalSec[1]=0x00;
DBR.BPB_dBigTotalSec[2]=0x00;
DBR.BPB_dBigTotalSec[3]=0x00;
/* Drive Number */
DBR.bDrvNum=0x81;
/* Reserved1 */
DBR.bReserved1=0x00;
/* Boot Signa */
DBR.bBootSig=FAT_EXT_SIGN;
/* Volume ID */
DBR.bVolID[0]=0x00;
DBR.bVolID[1]=0x00;
DBR.bVolID[2]=0x00;
DBR.bVolID[3]=0x00;
/* Volume Lable */
DBR.bVolLab[0]='V';
DBR.bVolLab[1]='I';
DBR.bVolLab[2]='C';
DBR.bVolLab[3]='T';
DBR.bVolLab[4]='O';
DBR.bVolLab[5]='R';
DBR.bVolLab[6]='Y';
DBR.bVolLab[7]=' ';
DBR.bVolLab[8]='1';
DBR.bVolLab[9]='.';
DBR.bVolLab[10]='0';
/* File System Type */
DBR.FileSysType[0]='F';
DBR.FileSysType[1]='A';
DBR.FileSysType[2]='T';
DBR.FileSysType[3]='1';
DBR.FileSysType[4]='6';
DBR.FileSysType[5]=' ';
DBR.FileSysType[6]=' ';
DBR.FileSysType[7]=' ';
/* Execu Table Code */
for(i=0; i<448; i++)
DBR.ExecutableCode[i]=0x00;
/* Ending Flag (0x55AA) */
DBR.EndingFlag[0]=0x55;
DBR.EndingFlag[1]=0xaa;
// Add NandFlash Page Write Code
NF_PageProgram(DBR_START_LOCATE,&FATDW1.FAT_GU[0]);
/*
*** Creat FAT1 *** ::: Note: SectorPerFAT 4
*/ //FATDW1.FAT_GU[512]
FATDW1.FAT_GU[0]=0xf8;
FATDW1.FAT_GU[1]=0xff;
for(i=2; i<512; i++)
FATDW1.FAT_GU[i]=0x00;
NF_PageProgram(FAT1_START_LOCATE,(unsigned int )&FATDW1.FAT_GU);
for(j=1; j<4; j++)
{
for(i=0; i<512; i++)
FATDW1.FAT_GU[i]=0x00;
NF_PageProgram(FAT1_START_LOCATE+(j*512),(unsigned int )&FATDW1.FAT_GU);
}
/*
*** Creat FAT2 ***
*/
FATDW1.FAT_GU[0]=0xf8;
FATDW1.FAT_GU[1]=0xff;
for(i=2; i<512; i++)
FATDW1.FAT_GU[i]=0x00;
NF_PageProgram(FAT2_START_LOCATE,(unsigned int )&FATDW1.FAT_GU);
for(j=1; j<4; j++)
{
for(i=0; i<512; i++)
FATDW1.FAT_GU[i]=0x00;
NF_PageProgram(FAT2_START_LOCATE+(j*512),(unsigned int )&FATDW1.FAT_GU);
}
/*
*** Creat Boot Directory Entries
*/
//WriteNfPage;
for(j=0; j<42; j++)
{
for(i=0; i<512; i++)
FATDW1.FAT_GU[i]=0x00;
NF_PageProgram(ROOT_DIR_START_LOCATE+(j*512),(unsigned int )&FATDW1.FAT_GU);
}
}
void BlockRead()
{
unsigned int pBuf[528],i;
for(i=1; i<2; i++)
NF_PageRead((512*i)+MBR_START_LOCATE, pBuf);
}
#ifndef __FAT_h__
#define __FAT_h__
/*H**************************************************************************
* 文件名: filename.h
*----------------------------------------------------------------------------
* 版权 (c) 2004 TGE.
*----------------------------------------------------------------------------
* 释放: Spce061A
* 版本: 1.13
*----------------------------------------------------------------------------
* 目的:
*
*****************************************************************************/
/*_____ 包括 ________________________________________________________*/
/*_____ 宏 ________________________________________________________*/
#define SECTOR_PER_FAT (((totalSector/nbSectorPerCluster)*2)/SECTOR_SIZE)+1
#define SECTOR_SIZE 512
#define RESERVED_SECTOR 1
#define ROOT_ENTRY 352
#define DIR_SIZE 32
#define FATS 2
#define FAT_EXT_SIGN 0x29
/* MEMORY LOCATE DEFINE*/
#define MBR_START_LOCATE 0x00000000
#define DBR_START_LOCATE 0x00000200
#define FAT1_START_LOCATE 0x00000400
#define FAT2_START_LOCATE 0x00000C00
#define ROOT_DIR_START_LOCATE 0x00001400
#define DATA_START_LOCATE 0x00004000
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long int
/*_____ 定义 ________________________________________________________*/
typedef struct{
Uchar bootcode[446];
Uchar PT1[16];
Uchar PT2[16];
Uchar PT3[16];
Uchar PT4[16];
Uchar EndingFlag[2];
}MBR_Tag;
typedef struct{
Uchar bJmpBoot[3];
Uchar bOEMName[8];
Uint BPB_wBytesPerSec[2];
Uchar BPB_bSecPerClus;
Uint BPB_wReservedSec[2];
Uint BPB_bNumFATs;
Uint BPB_wRootEntry[2];
Uint BPB_wTotalSec[2]; //<32M User
Uint BPB_bMedia;
Uint BPB_wSecPerFAT[2];
Uint BPB_wSecPerTrk[2];
Uint BPB_wHeads[2];
Uint BPB_dHiddSec[4];
Uint BPB_dBigTotalSec[4];
Uint bDrvNum;
Uint bReserved1;
Uint bBootSig;
Uchar bVolID[4];
Uchar bVolLab[11];
Uchar FileSysType[8];
Uchar ExecutableCode[448];
Uchar EndingFlag[2];
}DBR_Tag;
typedef union _FATDW{
MBR_Tag FAT_MBR;
DBR_Tag FAT_DBR;
Uchar FAT_GU[512];
} FATDW;
/*_____ 声明 ________________________________________________________*/
void FormatFAT16(void);
void BlockRead();
#endif
/*
F_InitWriteNF();
NF_WP_CLOSE();
Addr32 = Addr32<<5 ; //(Sector -> Block) Address
Nf_wait_busy();
F_WriteCmdToNF(NF_READ_A_AREA_CMD);
F_WriteCmdToNF(NF_BLOCK_ERASE_CMD); /* Auto Block Erase Setup */
/*
UartSendData(Addr32&0xff);
UartSendData((Addr32>>8)&0xff);
F_WriteAddrToNF( Addr32 & 0xff ); /* 2nd address cycle */]
/*
F_WriteAddrToNF((Addr32>>8)&0xff); /* 3rd address cycle */
/*
F_WriteCmdToNF(NF_BLOCK_ERASE_CONFIRM_CMD); /* Erase command */
// Nf_wait_busy();
// F_WriteCmdToNF(NF_READ_STATUS_CMD ); /*Read Status */
// F_InitReadNF();
/*
if(F_ReadNF() & 0x01)
;//UartSendData('F');
else
;//UartSendData('S');
NF_WP_OPEN();
return (1); //Return Status */
/*
void Nf_write_open_B_area(address_sector, nb_byte)
{
F_WriteCmdToNF(NF_READ_B_AREA_CMD);
F_WriteCmdToNF(NF_SEQUENTIAL_DATA_INPUT_CMD);
F_WriteAddrToNF( nb_byte );
F_WriteAddrToNF( ((Byte*)&address_sector)[3] );
F_WriteAddrToNF( ((Byte*)&address_sector)[2] );
}
void Nf_write_open_A_area(address_sector, nb_byte)
{
F_WriteCmdToNF(NF_READ_A_AREA_CMD);
F_WriteCmdToNF(NF_SEQUENTIAL_DATA_INPUT_CMD);
F_WriteAddrToNF( nb_byte );
F_WriteAddrToNF( ((Byte*)&address_sector)[3] );
F_WriteAddrToNF( ((Byte*)&address_sector)[2] );
}
void Nf_write_open_C_area(address_sector, nb_byte)
F_WriteCmdToNF(NF_READ_C_AREA_CMD);
F_WriteCmdToNF(NF_SEQUENTIAL_DATA_INPUT_CMD);
F_WriteAddrToNF( nb_byte );
F_WriteAddrToNF( ((Byte*)&address_sector)[3] );
F_WriteAddrToNF( ((Byte*)&address_sector)[2] );
void Nf_read_open_B_area(address_sector, nb_byte)
{
F_WriteCmdToNF(NF_READ_B_AREA_CMD);
F_WriteAddrToNF( nb_byte );
F_WriteAddrToNF( ((Byte*)&address_sector)[3] );
F_WriteAddrToNF( ((Byte*)&address_sector)[2] );
Nf_wait_busy();
}
void Nf_read_open_C_area(address_sector, nb_byte)
{
F_WriteCmdToNF(NF_READ_C_AREA_CMD);
F_WriteAddrToNF ( nb_byte );
F_WriteAddrToNF ( ((Byte*)&address_sector)[3] );
F_WriteAddrToNF ( ((Byte*)&address_sector)[2] );
Nf_wait_busy();
}
void Nf_read_open_A_area(address_sector, nb_byte)
{
F_WriteCmdToNF(NF_READ_A_AREA_CMD);
F_WriteAddrToNF ( nb_byte );
F_WriteAddrToNF ( ((Byte*)&address_sector)[3] );
F_WriteAddrToNF ( ((Byte*)&address_sector)[2] );
Nf_wait_busy();
} // */
//====================================================================================//
// 文件名: ExterInt.asm
// 描 述: 该文件的程序主要用于处理PDIUSBD12中断
// 日 期: 2003/04/03
//====================================================================================//
#include "..\\d12\\D12CI.h"
#include "chap9.h"
#include "..\\spce061\\061reg.h"
#include "..\\usb\\TPBulk.h"
#include "..\\Uart\\Uart.h"
extern unsigned int *BOTXfer_pData; //global variable
extern unsigned int BOTXfer_wResidue;
extern unsigned long int LBA_Write;
extern unsigned long int g_RWaddress; //global read/write address
extern unsigned int *g_pRWaddr; //global Read/Write Addr Point
extern unsigned int g_RWBuf[512];
extern BIT_STATUS bFlags;
extern unsigned int BOTFSMstate;
extern CONTROL_TRANSFERS ControlData;
extern void F_Ep0_RxDone_Detail(void);
extern void F_Ep0_TxDone_Detail(void);
extern EPPFLAGS bEPPflags;
void F_USB_Isr(void);
void F_Ep0_TxDone(void);
void F_Ep0_RxDone(void);
void F_Ep1_TxDone(void);
void F_Ep1_RxDone(void);
void F_Main_TxDone(void);
void F_Main_RxDone(void);
void F_DMA_Eot(void);
unsigned int i_st;
unsigned int ep_last;
//=====================================================================
// 函数: F_USB_Isr
// 语法: void F_USB_Isr(void)
// 描述: PDIUSBD12中断的各个中断源的处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_USB_Isr(void)
{
do{
bEPPflags.bits.in_isr = 1;
i_st = F_D12_ReadInterruptRegister();
if(i_st != 0)
{
if(i_st & D12_INT_BUSRESET)
{
bEPPflags.bits.bus_reset = 1;
}
if(i_st & D12_INT_EOT)
{
F_DMA_Eot();
}
if(i_st & D12_INT_SUSPENDCHANGE)
{
bEPPflags.bits.suspend = 1;
}
if(i_st & D12_INT_ENDP0IN)
{
F_Ep0_RxDone();
}
if(i_st & D12_INT_ENDP0OUT)
{
F_Ep0_TxDone();
}
if(i_st & D12_INT_ENDP1IN)
{
F_Ep1_TxDone();
}
if(i_st & D12_INT_ENDP1OUT)
{
F_Ep1_RxDone();
}
if(i_st & D12_INT_ENDP2IN)
{
// F_MainRxHandler();
}
if(i_st & D12_INT_ENDP2OUT)
{
// F_MainTxHandler();
}
}
bEPPflags.bits.in_isr = 0;
}
while(!(*P_IOB_Data & 0x08));
}
//=====================================================================
// 函数: F_DMA_Eot
// 语法: void F_DMA_Eot(void)
// 描述: PDIUSBD12的DMA处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_DMA_Eot(void)
{
}
//=====================================================================
// 函数: F_Ep0_RxDone
// 语法: void F_Ep0_RxDone(void)
// 描述: 端点0,接收数据处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_Ep0_RxDone(void)
{
ep_last = F_D12_ReadLastTransactionStatus(0); // Clear interrupt flag
F_Ep0_RxDone_Detail();
}
//=====================================================================
// 函数: F_Ep0_TxDone
// 语法: void F_Ep0_TxDone(void)
// 描述: 端点0,发送数据处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_Ep0_TxDone(void)
{
F_D12_ReadLastTransactionStatus(1);
F_Ep0_TxDone_Detail();
}
//=====================================================================
// 函数: F_Ep1_TxDone
// 语法: void F_Ep1_TxDone(void)
// 描述: 端点1,发送数据处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_Ep1_TxDone(void)
{
bEPPflags.bits.Ep1_SendDataFlag=1;
F_D12_ReadLastTransactionStatus(3); //Clear interrupt flag
}
//=====================================================================
// 函数: F_Ep1_RxDone
// 语法: void F_Ep1_RxDone(void)
// 描述: 端点1,接收数据处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_Ep1_RxDone(void)
{
bEPPflags.bits.Ep1_ReceiveDataFlag=1;
F_D12_ReadLastTransactionStatus(2); // Clear interrupt flag
}
//=====================================================================
// 函数: F_Main_TxDone (Device -> Host)
// 语法: void F_Main_TxDone(void)
// 描述: 端点1,发送数据处理
// 参数: 无
// 返回: 无
//=====================================================================
void F_Main_TxDone(void)
{
unsigned int EP2Len;
bEPPflags.bits.Ep2_SendDataFlag=1;
// F_D12_ReadLastTransactionStatus(5); // Clear D12 interrupt flag
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_WriteEndpoint(5,BOTXfer_wResidue,BOTXfer_pData);//回送数据
EP2Len=F_D12_WriteEndpointAndClrD12Int(5,13,BOTXfer_pData);//回送数据
BOTXfer_pData += EP2Len;
BOTXfer_wResidue -= EP2Len;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -