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

📄 usbd12_a.c

📁 USB便携多道系统单片机固件程序.单片机固件程序采用CodeWarrior Development Studio for HC(S)08 Microcontrollers集成开发环境开发
💻 C
字号:
//===================================================================//
//     Project Name : MOTOROLA-PDIUSBD12 USB-MCS CARD
//      Module Name : Master Firmware Program
//     Product Type : License
//      OS/Dev Tool : CodeWarrior Development Studio for HC(S)08 Microcontrollers
//  Original Author : Ming Zeng
//     Organization : Tsinghua University , DEP 
//    Original Date : Feb, 20, 2003
//             Addr : Tsinghua University, Beijing City
//              TEL : 
//            EMail : ming@zming.net
//          Website : http://www.zming.net
//		  Copyright : Copyright ZMing.net, 2003
//         Comments : 
//                    
//			
//===================================================================//

#include "HAL.H"
#include "COMMON.H"
#include "USBD12.H"
#include "VDOR.H"

extern COMMONFLAGS bCOMMONFlags;
extern unsigned char  GenBuf[GENBUF_LENGH];
extern unsigned char nFlashPhase;
extern CODE_DATA CodeData;

void USBD12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, 0xD0);
	if(bEnable)
		bAddress |= 0x80;
	outportb(IC_D12_DATA, bAddress);
	
	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;
}

void USBD12_SetEndpointEnable(unsigned char bEnable)
{
	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, 0xD8);
	if(bEnable)
		outportb(IC_D12_DATA, 1);
	else
		outportb(IC_D12_DATA, 0);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;
}

void USBD12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, 0xF3);
	outportb(IC_D12_DATA, bConfig);
	outportb(IC_D12_DATA, bClkDiv);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;
}

void USBD12_SetDMA(unsigned char bMode)
{
	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, 0xFB);
	outportb(IC_D12_DATA, bMode);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;
}

unsigned short USBD12_ReadInterruptRegister(void)
{
	unsigned char b1;
	unsigned int j;

	outportb(IC_D12_COMMAND, 0xF4);
	b1 = inportb(IC_D12_DATA);
	j = inportb(IC_D12_DATA);

	j <<= 8;
	j += b1;

	return j;
}

unsigned char USBD12_SelectEndpoint(unsigned char bEndp)
{
	unsigned char c;

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, bEndp);
	c = inportb(IC_D12_DATA);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;

	return c;
}

unsigned char USBD12_ReadLastTransactionStatus(unsigned char bEndp)
{
	unsigned char nVal;

	outportb(IC_D12_COMMAND, 0x40 + bEndp);
	nVal = inportb(IC_D12_DATA);
	
	return nVal;
}


void USBD12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
{
	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, 0x40 + bEndp);
	outportb(IC_D12_DATA, bStalled);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;
}

unsigned char USBD12_ReadEndpoint(unsigned char endp, unsigned char * buf, unsigned char len)
{
	unsigned char i, j, k = 0;

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, endp);
	if((inportb(IC_D12_DATA) & USBD12_FULLEMPTY) == 0) 
	{
		if(bCOMMONFlags.bits.bIN_ISR == 0)
			EnableInterrupts;
		return 0;
	}

	outportb(IC_D12_COMMAND, 0xF0);
	j = inportb(IC_D12_DATA);
	j = inportb(IC_D12_DATA);

	if(j > len)
		j = len;

	for(i=0; i<j; i++)
		*(buf+i) = inportb(IC_D12_DATA);

	outportb(IC_D12_COMMAND, 0xF2);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;

	return j;
}

unsigned char USBD12_ReadEndpointStatus(unsigned char bEndp)
{
	unsigned char c;

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		DisableInterrupts;

	outportb(IC_D12_COMMAND, 0x80 + bEndp);
	c = inportb(IC_D12_DATA);

	if(bCOMMONFlags.bits.bIN_ISR == 0)
		EnableInterrupts;

	return c;
}

⌨️ 快捷键说明

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