⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mx31_habtools.c

📁 Nand Flash (SAMSUNG_K9K1G08U0B) boot loader for i.Mx31 (freescale).
💻 C
📖 第 1 页 / 共 2 页
字号:
/*==================================================================================================                                                                                   Module Name:  MX31_HABTools.c    General Description: This file defines functions for the Flash library that using the HABToolkit in i.MX31.====================================================================================================                               Freescale Confidential Proprietary                               		MMO - Asia Application                       Copyright (c) 2004, 2005 Freescale Inc. All Rights ReservedRevision History:                            Modification     VersionAuthor                          Date          Number     Description of Changes-------------------------   ------------    ----------   -------------------------------------------Stella Lau					 8.27.2004  	ver	0.0		 **TBA** for HAB checking need to be addedReferences : [TORTOLA] "Tortola IC specification" Version 1.1             [ARC USB] "ARC USB-HS OTG High-Speed USB On-The-Go Controller Core" Version 4.0.1====================================================================================================                                        INCLUDE FILES==================================================================================================*///#define DEBUG_PRINT#include "MX31_HABTools.h"//################################################################################################// FUNCTION PROTOTYPEvoid ClearDQH(void);void dQHSetup(U32 dQHBase, U8 ZLT, U16 MPS, U8 ios, U32 NextLinkPtr, U8 Terminate, U16 TotalBytes, U8 ioc, U8 Status, U32 BuffPtr0, U16 CurrentOffset, U32 BuffPtr1, U32 BuffPtr2, U32 BuffPtr3, U32 BuffPtr4);void dTDSetup(U32 dTDBase, U32 dTDNextLinkPtr, U8 Terminate, U16 TotalBytes, U8 ioc, U8 Status,U32 BufferPtr0, U16 CurrentOffset, U32 BufferPtr1, U32 BufferPtr2, U32 BufferPtr3, U32 BufferPtr4);void EnableEP1OUT(void);void EP1OutCommandSetup(void);void EP1OutRxData(U32 Address, U32 Offset, U32 ByteCount);void EnableEP2IN(void);void CommandAck(U32 ack, U8 channel);void EP2INTxData(U32 BufPtrAddress, U32 TotalBytes);int HandleCommand(int status, int count, U8 channel);unsigned char MX31_GetCharFromFIFO (void);void MX31_PutCharInFIFO (unsigned char c);// Global VariableU8 	_gSetupData[8];U8  _gCommand[16];U8  _gDevState;U32 CSFAddress = 0;U32 HWConfigAddress = 0;U32 ExecuteAddress = 0;U8 _gSerialNum00 = 0;U8 _gSerialNum01 = 0;U8 _gSerialNum02 = 0;U8 _gSerialNum03 = 0;U8 _gTxcr_Interface = 0;/*==================================================================================================FUNCTION: ClearDQHDESCRIPTION:    	This function is used to Clear the DQH before initiateARGUMENTS PASSED:	None	  RETURN VALUE:	None		IMPORTANT NOTES:	None		==================================================================================================*/void ClearDQH(void){	U8 i = 0;	VP_U32 EP_QUEUE_HEADPtr;		EP_QUEUE_HEADPtr = (VP_U32)((VP_U32)dQHBASE);	// Clear the dQH Memory	for ( i = 0; i < (64*6)/4 ; i++)	{		*EP_QUEUE_HEADPtr = 0;		EP_QUEUE_HEADPtr++;	}}/*==================================================================================================FUNCTION: dQHSetupDESCRIPTION:    	This function is used to setup the dQH	 ------------------------	|	EP2 IN	(64 bytes)	 |			|				 		 |	 ------------------------	dQH5	|	EP2 OUT	(64 bytes)	 |		| 					 	 |	 ------------------------	dQH4	|	EP1 IN	(64 bytes)	 |	| 				 		 |	 ------------------------	dQH3	|	EP1 OUT	(64 bytes)	 |	| 				 		 |	 ------------------------ 	dQH2	|	EP0 IN	(64 bytes)	 |	| 				 		 |	 ------------------------	dQH1	|	EP0 OUT	(64 bytes)	 |	| 				 		 |	 ------------------------	dQH0ARGUMENTS PASSED:	U32 dQHBase - Base Address of the dQH	U8 	ZLT - zero lengh packet termination (enable - ZLT_ENABLE; disable - ZLT_DISABLE)	U16 MPS - Max packet length	U8 	ios - interrupt on Setup	U32 NextLinkPtr - Next Link Pointer, 	U8 	Terminate - Terminate - TERMINATE; not Terminate - NOT_TERMINATE	U16 TotalBytes - Total Bytes to be transfered in this dQH	U8 	ioc - interrupt on complete, set - IOC_SET, not set - IOC_NOTSET	U8 	Status - Status 	U32 BuffPtr0 - Buffer Pointer page 0	U16 CurrentOffset - current offset	U32 BuffPtr1 - Buffer Pointer page 1	U32 BuffPtr2 - Buffer Pointer page 1	U32 BuffPtr3 - Buffer Pointer page 1	U32 BuffPtr4 - Buffer Pointer page 1	  RETURN VALUE:	None		IMPORTANT NOTES:	None		==================================================================================================*/void dQHSetup(U32 dQHBase, U8 ZLT, U16 MPS, U8 ios, U32 NextLinkPtr, U8 Terminate, U16 TotalBytes, U8 ioc, U8 Status, U32 BuffPtr0, U16 CurrentOffset, U32 BuffPtr1, U32 BuffPtr2, U32 BuffPtr3, U32 BuffPtr4){	volatile struct s_dQH_SETUP* dQH_word = (volatile struct s_dQH_SETUP*) dQHBase;	//======	// 0x0	//======	//Bit31:30 Mult; Bit29 zlt; Bit26:16 MPS; Bit15 ios	dQH_word->dQH_WORD0 = (((U32)ZLT << 29)|((U32)MPS <<16) | ((U32)ios <<15));	//======	// 0x4	//======	// Current dTD Pointer => for hw use, not modified by DCD software	dQH_word->dQH_WORD1 = 0x0;		//======	// 0x8	//======	// Next dTD Pointer 	dQH_word->dQH_WORD2 = ((NextLinkPtr & 0xFFFFFFE0) | Terminate);		//======	// 0xC	//======	// Bit30:16 TotalBytes; Bit15 ioc; Bit11:10 MultO; Bit7:0 Status		dQH_word->dQH_WORD3 = ((((U32)TotalBytes & 0x7FFF)  << 16) | ((U32)ioc <<15) | (Status));		//======	// 0x10	//======	// Bit31:12 Buffer Pointer (Page 0)	dQH_word->dQH_WORD4 = ((BuffPtr0 & 0xFFFFF000) | (CurrentOffset & 0xFFF));	//======	// 0x14	//======	// Bit31:12 Buffer Pointer (Page 1)	dQH_word->dQH_WORD5 = (BuffPtr1 & 0xFFFFF000);		//======	// 0x18	//======	// Bit31:12 Buffer Pointer (Page 2)	dQH_word->dQH_WORD6 = (BuffPtr2 & 0xFFFFF000);		//======	// 0x1C	//======	// Bit31:12 Buffer Pointer (Page 3)	dQH_word->dQH_WORD7 = (BuffPtr3 & 0xFFFFF000);		//======	// 0x20	//======	// Bit31:12 Buffer Pointer (Page 4)	dQH_word->dQH_WORD8 = (BuffPtr4 & 0xFFFFF000);	//======	// 0x24	//======	// Reserved	dQH_word->dQH_WORD9 = 0;		//======	// 0x28	//======	// Setup Buffer 0	dQH_word->dQH_WORD10 = 0;		//======	// 0x2C	//======	// Setup Buffer 1	dQH_word->dQH_WORD11 = 0;}/*==================================================================================================FUNCTION: dTDSetupDESCRIPTION:    	This function is used to setup the dTDARGUMENTS PASSED:	U32 dTDBase - Base Address of the dTD	U32 NextLinkPtr - Next Link Pointer, 	U8 	Terminate - Terminate - TERMINATE; not Terminate - NOT_TERMINATE	U16 TotalBytes - Total Bytes to be transfered in this dQH	U8 	ioc - interrupt on complete, set - IOC_SET, not set - IOC_NOTSET	U8 	Status - Status 	U32 BuffPtr0 - Buffer Pointer page 0	U16 CurrentOffset - current offset	U32 BuffPtr1 - Buffer Pointer page 1	U32 BuffPtr2 - Buffer Pointer page 1	U32 BuffPtr3 - Buffer Pointer page 1	U32 BuffPtr4 - Buffer Pointer page 1	  RETURN VALUE:	None		IMPORTANT NOTES:	None		==================================================================================================*/void dTDSetup(U32 dTDBase, U32 dTDNextLinkPtr, U8 Terminate, U16 TotalBytes, U8 ioc, U8 Status,U32 BufferPtr0, U16 CurrentOffset, U32 BufferPtr1, U32 BufferPtr2, U32 BufferPtr3, U32 BufferPtr4){	volatile struct s_dTD_SETUP* dTD_word = (volatile struct s_dTD_SETUP*) dTDBase;		// Bit31:5 Next Link Pointer ; Bit0 Terminate	dTD_word->dTD_WORD0 = ((dTDNextLinkPtr & 0xFFFFFFE0) | Terminate);		// Bit30:16 TotalBytes, Bit15 ioc, Bit7:0 status	dTD_word->dTD_WORD1 = ((((U32)TotalBytes & 0x7FFF) << 16)| ((U32)ioc <<15) | (Status));		// Bit31:12 Buffer Pointer Page 0 ; Bit11:0 Current Offset	dTD_word->dTD_WORD2 = ((BufferPtr0 & 0xFFFFF000) | (CurrentOffset & 0xFFF));		// Bit31:12 Buffer Pointer Page 1 ; Bit10:0 Frame Number	dTD_word->dTD_WORD3 = (BufferPtr1 & 0xFFFFF000);	// Bit31:12 Buffer Pointer Page 2 ;	dTD_word->dTD_WORD4 = (BufferPtr2 & 0xFFFFF000);	// Bit31:12 Buffer Pointer Page 3 ; 	dTD_word->dTD_WORD5 = (BufferPtr3 & 0xFFFFF000);	// Bit31:12 Buffer Pointer Page 4 ; 	dTD_word->dTD_WORD6 = (BufferPtr4 & 0xFFFFF000);}/*==================================================================================================FUNCTION: EnableEP1OUTDESCRIPTION:    	This function Enable the EP1 as OUT ARGUMENTS PASSED:	None  RETURN VALUE:	None	IMPORTANT NOTES:	None==================================================================================================*/void EnableEP1OUT(void){	U32 TotalBytes = 0x10;		// EP1 OUT command = 16 bytes	dQHSetup(dQH2_EP1OUT, ZLT_DISABLE, MPS_64, IOS_SET, dTD0_EP1OUT, TERMINATE, 	TotalBytes, IOC_SET, NO_STATUS, BUFPTR_P0_EP1OUT,(BUFPTR_P0_EP1OUT & 0xFFF),0,0,0,0);		// Endpoint 1 : MPS = 64, OUT (Rx endpoint)	*(P_U32)USB_OTG_ENDPTCTRL1 = 0x00080048;	// Enable EP1 OUT	*(P_U32)USB_OTG_ENDPTCTRL1 |= EP1OUT_ENABLE;}/*==================================================================================================FUNCTION: EP1OutCommandSetup

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -