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

📄 dtc_func.c

📁 HID-Ukey底层源码实现(st72651芯片) windows上层驱动
💻 C
字号:
/**************** (c) 2001  STMicroelectronics **********************

PROJECT : ST7265 USB Mass Storage - SMC

VERSION :  V1.0 Beta2

CREATION DATE :  20/03/2001

AUTHOR : MICROCONTROLLER DIVISION / Rousset

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

MODIFICATIONS :

******************************************************************************/
#include "Map_7265.h"
#include "MConfig.h"
#include "MAL_Map.h"
#include "MAL.h"
#include "DTC_Func.h"

#pragma DATA_SEG DTC_RAM
extern unsigned char DTC_RAM[256];	// RAM DTC

#pragma DATA_SEG MAL_RAM
#pragma CODE_SEG DTC_FUNC

/*-----------------------------------------------------------------------------
ROUTINE NAME : DTC_Load_Code
INPUT/OUTPUT : None
DESCRIPTION  : DTC initialization
-----------------------------------------------------------------------------*/
#pragma NO_ENTRY
void tDTC_Load_Code()
{
	extern short _LEX;

	DTCCTRL |= DTC_LOAD;		// Start the ram load processes
	asm {
		clr		X
load_code:
		ld		A, ([_LEX.w],X)	// 7cy
		ld		(DTC_RAM,X), A		// 5cy
		inc		X					// 3cy
		jrne	load_code			// 3cy
	}

//	char count;
//	count = 0;
//	do {
//		DTC_RAM[count] = DTC_code[count];
//		count++;
//	} while (count);

	DTCCTRL &= (~DTC_LOAD);		// Stop the ram load processus
}

/*-----------------------------------------------------------------------------
ROUTINE NAME : DTC_Process
INPUT/OUTPUT : DTC_PC/None
DESCRIPTION  : None
-----------------------------------------------------------------------------*/
void DTC_Process(char DTC_PC)
{
	//extern void select(void);
	asm	{
		LD		DTCPC, A
		//CALL	select
		BSET	DTCCTRL, #1
		BRES	DTCCTRL, #1
		BSET	DTCCTRL, #0
	}
/*	The following lines are same as above assembly lines
	DTCPC    = DTC_PC;		// FCIPC <= DTC_PC_add

	SELECT();	// Chip select for the media

	DTCCTRL  |= DTC_INIT;	// Enable DTC PC Initialization
	DTCCTRL  &= (~DTC_INIT);// Disable DTC PC Initialization
	DTCCTRL  |= DTC_START;	// Initialize the load sequence
*/
}

/*-----------------------------------------------------------------------------
ROUTINE NAME : DTC_Wait_Stop
INPUT/OUTPUT : None
DESCRIPTION  : None
-----------------------------------------------------------------------------*/
#pragma NO_OVERLAP
unsigned char DTC_Wait_Stop()
{
	unsigned char DTC_Status;
//	unsigned char Time1, Time2;

	// This function should be called on shorter DTC functions
	// Sometime the DTC does not stop itself when it finished
	// We use the Timeout variable to count the time and
	// and return a success status when the time is up

	// This loop is about 100ms
	asm {
		LD		Y, #100
		CLR		X
loop:	LD		A, DTCSTATUS	// 3cy
		AND		A, #3			// 2cy
		LD		DTC_Status, A	// 4cy
		JRNE	time_up			// 3cy
		INC		X				// 3cy
		INC		X				// 3cy
		DEC		X				// 3cy
		JRNE	loop			// 3cy
								// 24cy in total
		DEC		Y
		JRNE	loop
time_up:
	}
//	for (Time1 = 100; Time1; Time1--)
//		for (Time2 = 255; Time2; Time2--) {
//			DTC_Status = DTCSTATUS & 0x03;
//			if (DTC_Status)
//				goto time_up;
//		}
//time_up:
	//DESELECT();				// Chip deselect

	DTCCTRL  &= ~DTC_START;	// Force DTC to stop
	return DTC_Status;
}

/*** (c) 1999   STMicroelectronics *************** END OF FILE *************/

⌨️ 快捷键说明

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