📄 usbd12_a.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 + -