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

📄 d12ci.c

📁 msp430下的飞利浦公司的PDIUDBD12的USB设备编程。
💻 C
字号:
#include "mainloop.h"
#include "epphal.h"
#include "d12ci.h"

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 int D12_ReadInterruptRegister(void)
{
  unsigned char tmp;
  unsigned int  IntReg; 
  outportb(D12_COMMAND, 0XF4);
  tmp = inportb(D12_DATA);
  IntReg = (unsigned int)inportb(D12_DATA);
  IntReg <<= 8;
  IntReg |= tmp;
  
  return IntReg;
}

unsigned int D12_ReadChipID(void)
{
  unsigned char tmp;
  unsigned int  ID; 
  outportb(D12_COMMAND, 0XFD);
  tmp = inportb(D12_DATA);
  ID = (unsigned int)inportb(D12_DATA);
  ID <<= 8;
  ID += tmp;
  
  return ID;
}


unsigned char D12_SelectEndpoint(unsigned char bEndp)
{  
  outportb(D12_COMMAND, bEndp);
  return inportb(D12_DATA);
    
}

unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
  outportb(D12_COMMAND, 0X40 | bEndp);
  return inportb(D12_DATA);
}

unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
  outportb(D12_COMMAND, 0X80 | bEndp);
  return inportb(D12_DATA);
}

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 int  r;
  outportb(D12_COMMAND, 0XF5);
  r = inportb(D12_DATA);
  r <<= 8;
  r |=  inportb(D12_DATA);
  return r;  
}

unsigned char D12_ReadEndpoint(unsigned char endp, 
                               unsigned char len,
                               unsigned char * buf)
{
  unsigned char i,j;
  outportb(D12_COMMAND, endp);                  //Select Endpoint
  if((inportb(D12_DATA) & D12_FULLEMPTY) == 0)  //Get Buffer Status:empty or full
    return 0; 
  outportb(D12_COMMAND, 0X80 | endp);           //Get Endpoint Status
  i = inportb(D12_DATA);
  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;
  }
  outportb(D12_COMMAND, 0XF0);                  //Read Endpoint
  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);                  //Clear Buffer
  return j;
}
                               
unsigned char D12_WriteEndpoint(unsigned char endp, 
                                unsigned char len, 
                                unsigned char * buf)
{
  unsigned char i;
  outportb(D12_COMMAND, endp);                  //Select Endpoint
  inportb(D12_DATA); 
  outportb(D12_COMMAND, 0XF0);                  //Write Endpoint
  outportb(D12_DATA, 0);
  outportb(D12_DATA, len);
  for(i = 0; i < len; i++)
    outportb(D12_DATA, *(buf + i));
  outportb(D12_COMMAND, 0XFA);                  //Enable Buffer
  return len;
}          
                      
void D12_AcknowledgeEndpoint(unsigned char endp)
{
  outportb(D12_COMMAND, endp);                  //Select Endpoint
  outportb(D12_COMMAND, 0XF1);                  //set ACK
  if(endp == 0)
    outportb(D12_COMMAND, 0XF2);                //Clear Buffer
}

⌨️ 快捷键说明

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