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

📄 usb_user_api.c

📁 利用FREESCALE的MCU 内嵌USB接口--usb设备开发设计方案调试软件
💻 C
字号:
/**
  Copyright (c) 2007 Freescale Semiconductor
  Freescale Confidential Proprietary
  \file     	USB_User_API.c
  \brief    	Functions for the USB API
  \author   	Freescale Semiconductor
  \author     Jose Ruiz
  \author   	Guadalajara Applications Laboratory RTAC Americas
  \version    0.3
  \date     	17/October/2007
  \warning    (If needed)

  * History:
  
  30/July/2007      Start of bridge coding
  15/October/2007   Modifications for new version of bridges
  17/October/2007   Macros added and funcion names changed
  06/December/2007  Added variables to easily know the                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
*/

#include "USB_User_API.h"

/* Global Variables */
UINT8 gu8DataOUTready=0;

/* User Buffers */
UINT8 EP1_Buffer[UEP1_SIZE];
UINT8 EP2_Buffer[UEP2_SIZE];
UINT8 EP3_Buffer[UEP3_SIZE];
UINT8 EP4_Buffer[UEP4_SIZE];

/* User Out buffer recieved data size */
UINT8 EP1_OUT_SIZE;
UINT8 EP2_OUT_SIZE;
UINT8 EP3_OUT_SIZE;
UINT8 EP4_OUT_SIZE;

/* Shared Buffers (SIE & Core) */
UINT8 EP1_BDT_Buffer[UEP1_SIZE] @0x1880;
UINT8 EP2_BDT_Buffer[UEP2_SIZE] @0x1890;
UINT8 EP3_BDT_Buffer[UEP3_SIZE] @0x18A0;
UINT8 EP4_BDT_Buffer[UEP4_SIZE] @0x18C0;



//////////////////////////////////////////////////////////////
void Endpoint_Init(void)
{   
    // EndPoint 1 Configuration
    EPCTL1 = EP_OUT|HSHK_EN;                
    EP1_Set.Cnt = UEP1_SIZE; 
    EP1_Set.Addr =  0x08;
    EP1_Set.Stat._byte = _SIE|_DATA0|_DTS; 
    
    // EndPoint 2 Configuration
    EPCTL2 = EP_IN|HSHK_EN;   
    EP2_Set.Addr =  0x0C;
    EP2_Set.Stat._byte = _CPU|_DATA1;
    
    // EndPoint 3 Configuration
    EPCTL3 = EP_OUT|HSHK_EN;              
    EP3_Set.Cnt = UEP3_SIZE;   
    EP3_Set.Addr =  0x10;
    EP3_Set.Stat._byte = _SIE|_DATA0|_DTS;
    
    // EndPoint 4 Configuration
    EPCTL4 = EP_IN|HSHK_EN;                
    EP4_Set.Addr =  0x18;
    EP4_Set.Stat._byte = _CPU|_DATA1;
}

//////////////////////////////////////////////////////////////
UINT8 CheckEndPointOUT(UINT8 u8Endp) 
{
    if(gu8DataOUTready & (1<<u8Endp))
    {
        gu8DataOUTready&= ~(1<<u8Endp);   // Clear EndPoint Flag
        return(1);
    } 
    else
        return(0);
}

/////////////////////////////////////////////////////////////
void EndPoint_IN(UINT8 u8Endp,UINT8 u8EPSize)
{
    BUFF_DSC   *pu8BDT;
    UINT8 *pu8UserBuffer;
    UINT8 *pu8SIEBuffer;
    UINT8 u8Counter;
    
    switch(u8Endp) 
    {
      case 1:
        pu8BDT=&EP1_Set;
        pu8UserBuffer=&EP1_Buffer[0];
        pu8SIEBuffer=&EP1_BDT_Buffer[0];
        break;  

      case 2:
        pu8BDT=&EP2_Set;
        pu8UserBuffer=&EP2_Buffer[0];
        pu8SIEBuffer=&EP2_BDT_Buffer[0];
        break;  
        
      case 3:
        pu8BDT=&EP3_Set;
        pu8UserBuffer=&EP3_Buffer[0];
        pu8SIEBuffer=&EP3_BDT_Buffer[0];
        break;
        
      case 4:
        pu8BDT=&EP4_Set;
        pu8UserBuffer=&EP4_Buffer[0];
        pu8SIEBuffer=&EP4_BDT_Buffer[0];
        break;

    }
      
    /* Copy buffer to USB RAM */
    for (u8Counter = 0; u8Counter < u8EPSize; u8Counter++)
   	         *pu8SIEBuffer++ = *pu8UserBuffer++;
    
    /* Set Packet Size and activate EP */
    pu8BDT->Cnt = u8EPSize;
    USB_Buf_Rdy(pu8BDT);
}

//////////////////////////////////////////////////////////////
void EndPoint_OUT(UINT8 u8Endp)
{
    BUFF_DSC   *pu8BDT;
    UINT8 *pu8UserBuffer;
    UINT8 *pu8SIEBuffer;
    UINT8 u8Counter;
    
    switch(u8Endp) 
    {
      case 1:
        pu8BDT=&EP1_Set;
        pu8UserBuffer=&EP1_Buffer[0];
        pu8SIEBuffer=&EP1_BDT_Buffer[0];
        EP1_OUT_SIZE=pu8BDT->Cnt;
        break;

      case 2:
        pu8BDT=&EP2_Set;
        pu8UserBuffer=&EP2_Buffer[0];
        pu8SIEBuffer=&EP2_BDT_Buffer[0];
        EP2_OUT_SIZE=pu8BDT->Cnt;
        break;
        
      case 3:
        pu8BDT=&EP3_Set;
        pu8UserBuffer=&EP3_Buffer[0];
        pu8SIEBuffer=&EP3_BDT_Buffer[0];
        EP3_OUT_SIZE=pu8BDT->Cnt;
        break;
        
      case 4:
        pu8BDT=&EP4_Set;
        pu8UserBuffer=&EP4_Buffer[0];
        pu8SIEBuffer=&EP4_BDT_Buffer[0];
        EP4_OUT_SIZE=pu8BDT->Cnt;
        break;
     }
    
    if(!pu8BDT->Stat.McuCtlBit.OWN)
    {
        /* Copy buffer to User RAM */
        for (u8Counter = 0; u8Counter < pu8BDT->Cnt; u8Counter++)
   	        *pu8UserBuffer++ = *pu8SIEBuffer++;

        USB_Buf_Rdy(pu8BDT);
        gu8DataOUTready|= (1<<u8Endp);
    }
}

⌨️ 快捷键说明

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