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

📄 d12ci.i

📁 基于D12的USB固件驱动
💻 I
字号:
#line 1 "d12ci.c"
#line 1 "C:/icc/include/macros.h"






























#line 35 "C:/icc/include/macros.h"














void _StackCheck(void);
void _StackOverflowed(char);




#line 2 "d12ci.c"

extern EPPFLAGS bEPPflags;

void outportCommand(unsigned char Data);
void outportData(unsigned char Data);
unsigned char inportData(void);


#line 14 "d12ci.c"


#line 25 "d12ci.c"
void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0xD0);

    if (bEnable)
    {

	    bAddress |= 0x80;

        outportData(bAddress);

        if (bEPPflags.bits.in_isr == 0)
        {

 asm("sei");
	    }
    }
}


#line 60 "d12ci.c"
void D12_SetEndpointEnable(unsigned char bEnable)
{
    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0xD8);


    if (bEnable)
    {
        outportData(1);
    }
    else
    {
        outportData(0);
    }

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }
}


#line 97 "d12ci.c"
void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0xF3);

    outportData(bConfig);

    outportData(bClkDiv);

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }
}


#line 139 "d12ci.c"



#line 151 "d12ci.c"
unsigned short D12_ReadInterruptRegister(void)
{
    unsigned char b1;
    unsigned int  j;

    outportCommand(0xF4);

    b1 = inportData();

    j = inportData();

    j = (unsigned char)j << 8;
    j += b1;

    return j;
}


#line 178 "d12ci.c"
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
    unsigned char c;

    if(bEPPflags.bits.in_isr==0)
    {

 asm("cli");
    }

    outportCommand(bEndp);

    c = inportData();

    if(bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }

    return c;
}


#line 212 "d12ci.c"
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
    outportCommand(0x40 + bEndp);

    return inportData();
}


#line 229 "d12ci.c"
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
    unsigned char c;

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0x80 + bEndp);

    c = inportData();

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }

    return c;
}


#line 262 "d12ci.c"
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
{
    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0x40+bEndp);

    outportData(bStalled);

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }
}


#line 291 "d12ci.c"
void D12_SendResume(void)
{
    outportCommand(0xF6);
}


#line 306 "d12ci.c"
unsigned short D12_ReadCurrentFrameNumber(void)
{
    unsigned short i = 0, j = 0;

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0xF5);

    i = inportData();
    j = inportData();
    i += (j << 8);

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }

    return i;

}


#line 342 "d12ci.c"
unsigned short D12_ReadChipID(void)
{
    unsigned short i,j;

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(0xFD);

    i=inportData();

    j=inportData();

    i += (j << 8);

    if (bEPPflags.bits.in_isr==0)
    {

 asm("sei");
    }

    return i;
}


#line 379 "d12ci.c"
unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char *buf)
{
    unsigned char i, j;

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(endp);

    if ((inportData() & D12_FULLEMPTY) == 0)
    {
        return 0;
    }

    outportCommand(0x80 + endp);

    i = inportData();

    i = i & 0x60;

    if (endp == 2)
    {
        if (i == 0x60)
        {
	        bEPPflags.bits.ep1buf_full=1;
	    }
        else
        {
	        bEPPflags.bits.ep1buf_full=0;
	    }
    }
    if (endp == 4)
    {
        if (i == 0x60)
        {
	        bEPPflags.bits.ep2buf_full = 1;
	    }
        else
        {
	        bEPPflags.bits.ep2buf_full = 0;
	    }
    }

    outportCommand(0xF0);

    j = inportData();

    j = inportData();

    if (j > len)
    {
        j = len;
    }
    for (i = 0;i < j;i++)
    {
        *(buf + i) = inportData();
    }

    outportCommand(0xF2);

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("sei");
    }

    return j;
}



#line 462 "d12ci.c"
unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char *buf)
{
    unsigned char i;

    if (bEPPflags.bits.in_isr == 0)
    {

 asm("cli");
    }

    outportCommand(endp);

    inportData();

    outportCommand(0xF0);

    outportData(0);

    outportData(len);

    for (i = 0; i < len; i++)
    {
        outportData(* (buf + i));
    }

    outportCommand(0xFA);

    if(bEPPflags.bits.in_isr==0)
    {

 asm("sei");
    }

    return len;
}



#line 509 "d12ci.c"
void D12_AcknowledgeEndpoint(unsigned char endp)
{
   outportCommand(endp);

   outportCommand(0xF1);

   if (endp == 0)
   {
       outportCommand(0xF2);
   }
}

⌨️ 快捷键说明

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