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

📄 d12ci.c

📁 飞利浦的usb开发程序
💻 C
字号:
   //*************************************************************************   //   //                  P H I L I P S   P R O P R I E T A R Y   //   //           COPYRIGHT (c)   1997 BY PHILIPS SINGAPORE.   //                     --  ALL RIGHTS RESERVED  --   //   // File Name:    D12CI.C   // Author:       Wenkai Du   // Created:      8 Jun 98   // Modified:   // Revision:     2.2   //   //*************************************************************************   //   // 98/11/27      I/O mode Main endpoints read/write update (WK)   // 98/12/2       Added D12_ReadMainEndpoint (WK)   //*************************************************************************#include <sysdef.h>#include "d12ci.h"#include "d12hal.h"#if !PC_SIM#pragma codeseg(BANK23)#endifunsigned char ENDPT_INT;unsigned char OTHER_INT;unsigned char DBUFFER[DBUFFER_SIZE];void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable){    outportb(D12_COMMAND, 0xD0);    if(bEnable)	{        bAddress |= 0x80;	}    outportb(D12_DATA, bAddress);}void D12_SetEndpointEnable(unsigned char bEnable){    outportb(D12_COMMAND, 0xD8);    if(bEnable)	{        outportb(D12_DATA, 1);	}    else	{        outportb(D12_DATA, 0);	}}void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv){    outportb(D12_COMMAND, 0xF3);    outportb(D12_DATA, bConfig);    outportb(D12_DATA, bClkDiv);}void D12_SetDMA(unsigned char bMode){	outportb(D12_COMMAND, 0xFB);    outportb(D12_DATA, bMode);}unsigned short D12_ReadInterruptRegister(void){    unsigned char b1;    unsigned int j;    outportb(D12_COMMAND, 0xF4);    b1 = inportb(D12_DATA);    j = inportb(D12_DATA);    j <<= 8;    j += b1;    return j;}/* Read Interrupt Register Function *//* Write to pre-determined Registers */void UpdateIntReg(void){    outportb(D12_COMMAND, 0xF4); //Read Interrupt Command    ENDPT_INT = inportb(D12_DATA);// Interrupt Register Byte1    OTHER_INT = inportb(D12_DATA); // Interrupt Register Byte2}unsigned char D12_SelectEndpoint(unsigned char bEndp){    unsigned char c;    outportb(D12_COMMAND, bEndp);    c = inportb(D12_DATA);    return c;}unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp){    outportb(D12_COMMAND, 0x40 + bEndp);    return inportb(D12_DATA);}unsigned char D12_ReadEndpointStatus(unsigned char bEndp){    unsigned char c;    outportb(D12_COMMAND, 0x80 + bEndp);    c = inportb(D12_DATA);    return c;}void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled){    outportb(D12_COMMAND, 0x40 + bEndp);    outportb(D12_DATA, bStalled);}void D12_SendResume(void){    outportb(D12_COMMAND, 0xF6);}unsigned short D12_ReadCurrentFrameNumber(void){    unsigned short i,j;    outportb(D12_COMMAND, 0xF5);    i= inportb(D12_DATA);    j = inportb(D12_DATA);    i += (j<<8);    return i;}unsigned short D12_ReadChipID(void){    unsigned short i,j;    outportb(D12_COMMAND, 0xFD);    i=inportb(D12_DATA);    j=inportb(D12_DATA);    i += (j<<8);    return i;}unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char * buf, unsigned char len){    unsigned char i, j;    outportb(D12_COMMAND, endp);    if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {        return 0;    }    outportb(D12_COMMAND, 0xF0);    j = inportb(D12_DATA);    j = inportb(D12_DATA);    if(j > len)        j = len;    for(i=0; i<j; i++)        *(buf+i) = inportb(D12_DATA);    outportb(D12_COMMAND, 0xF2);    return j;}// D12_ReadMainEndpoint() added by V2.2 to support double-buffering.// Caller should assume maxium 128 bytes of returned data.unsigned char D12_ReadMainEndpoint(unsigned char * buf){    unsigned char i, j, k = 0, bDblBuf = 1;    outportb(D12_COMMAND, 0x84);    if( (inportb(D12_DATA) & 0x60) == 0x60)        bDblBuf = 2;    while(bDblBuf) {        outportb(D12_COMMAND, 4);        if((inportb(D12_DATA) & D12_FULLEMPTY) == 0)            break;        outportb(D12_COMMAND, 0xF0);        j = inportb(D12_DATA);        j = inportb(D12_DATA);        for(i=0; i<j; i++)            *(buf+i+k) = inportb(D12_DATA);        k += j;        outportb(D12_COMMAND, 0xF2);        bDblBuf --;    }    return k;}unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char * buf, unsigned char len){    unsigned char i;    outportb(D12_COMMAND, endp); //   inportb(D12_DATA);    outportb(D12_COMMAND, 0xF0);    outportb(D12_DATA, 0);    outportb(D12_DATA, len);    for(i=0; i<len; i++)        outportb(D12_DATA, *(buf+i));    outportb(D12_COMMAND, 0xFA);    return len;}void D12_AcknowledgeEndpoint(unsigned char endp){    outportb(D12_COMMAND, endp);    outportb(D12_COMMAND, 0xF1);    if(endp == 0)        outportb(D12_COMMAND, 0xF2);}void D12_SendZeroPacket(unsigned char endp){	DBUFFER[0] = 0;	D12_WriteEndpoint(D12_ENDPOINT0_IN, DBUFFER, 0);}

⌨️ 快捷键说明

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