亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stm32f_usb.c

?? STM32F RFID通訊源代碼(支持雙向發送接收)
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2006
 *
 *    File name   : STM32F_usb.c
 *    Description : usb module (HAL)
 *
 *    History :
 *    1. Date        : July 28, 2006
 *       Author      : Stanimir Bonev
 *       Description : Create
 *    2. Date        : November 20, 2006
 *       Author      : Stanimir Bonev
 *       Description : Modify
 *      Fix problems with double buffered EPs
 *    3. Date        : APril 30, 2007
 *       Author      : Stanimir Bonev
 *       Description : Modify
 *      Adapt for STM32F
 *
 *    $Revision: 1.2.2.4 $
 **************************************************************************/

#define HAL_USB_GLOBAL
#include "STM32F_usb.h"

#pragma segment="USB_PACKET_MEMORY"

#pragma location="USB_PACKET_MEMORY"
__root __no_init Int32U USB_PacketMemory[256];

pPacketMemUse_t pPacketMemUse;

PacketMemUse_t PacketMemBuff[EP_MAX_SLOTS*2];

EpInfo_t EpInfo[ENP_MAX_NUMB];

Int32U DlyCnt;

UserFunc_t UsbUserFun [UsbLastEvent] =
{
  // Ep 0 Out
  NULL,
  // Ep 0 In
  NULL,
  // Ep 1 Out
  NULL,
  // Ep 1 In
  NULL,
  // Ep 2 Out
  NULL,
  // Ep 2 Int
  NULL,
  // Ep 3 Out
  NULL,
  // Ep 3 In
  NULL,
  // Ep 4 Out
  NULL,
  // Ep 4 In
  NULL,
  // Ep 5 Out
  NULL,
  // Ep 5 In
  NULL,
  // Ep 6 Out
  NULL,
  // Ep 6 In
  NULL,
  // Ep 7 Out
  NULL,
  // Ep 7 In
  NULL,
  // Ep 8 Out
  NULL,
  // Ep 8 In
  NULL,
  // Ep 9 Out
  NULL,
  // Ep 9 In
  NULL,
  // Ep 10 Out
  NULL,
  // Ep 10 In
  NULL,
  // Ep 11 Out
  NULL,
  // Ep 11 In
  NULL,
  // Ep 12 Out
  NULL,
  // Ep 12 In
  NULL,
  // Ep 13 Out
  NULL,
  // Ep 13 In
  NULL,
  // Ep 14 Out
  NULL,
  // Ep 14 In
  NULL,
  // Ep 15 Out
  NULL,
  // Ep 15 In
  NULL,
  // UsbClassEp0OutPacket
  NULL,
  // UsbVendorEp0OutPacket
  NULL,
  // UsbUserSofEvent
  NULL,
  // UsbUserClass
  NULL,
  // UsbUserVendor
  NULL,
  // UsbUserGetDescriptor
  NULL,
  // UsbUserConfigure
  NULL,
  // UsbUserReset
  NULL,
  // UsbUserConnect
  NULL,
  // UsbUserSuspend
  NULL,
  // UsbUserEpStall
  NULL,
  // UsbUserEpUnStall
  NULL,
};

UsbEpCtrl_t UsbEp0Ctrl;

UsbSetupPacket_t UsbEp0SetupPacket;

#pragma data_alignment=4
Int8U EpCtrlDataBuf[Ep0MaxSize];

UsbDevCtrl_t UsbDevCtrl = {{UsbDevStatusUnknow,UsbDevStatusNoSuspend},0,0,0,0};

CommUserFpnt_t UsbCoreT9Fun;

#include "usb_common.c"

/*************************************************************************
 * Function Name: EpCtrlSet_EA
 * Parameters: volatile pInt32U pReg, Int32U Data
 *
 * Return: none
 *
 * Description: Set EP Addr
 *
 *************************************************************************/
void EpCtrlSet_EA(volatile pInt32U pReg, Int32U Data)
{
  Data &= 0xF;
  Data |= *pReg & 0x0700 ;
  Data |= USB_CTRL_CLEAR_ONLY_MASK;
  *pReg = Data;
}

/*************************************************************************
 * Function Name: EpCtrlGet_EA
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int16U
 *
 * Description: Get EP Addr
 *
 *************************************************************************/
inline
Int16U EpCtrlGet_EA(volatile pInt32U pReg)
{
  return(*pReg & 0x0F);
}

/*************************************************************************
 * Function Name: EpCtrlSet_STAT_TX
 * Parameters: volatile pInt32U pReg, EpState_t Data
 *
 * Return: none
 *
 * Description: Set EP IN State
 *
 *************************************************************************/
void EpCtrlSet_STAT_TX (volatile pInt32U pReg, EpState_t Data)
{
Int32U State;
  // The EP can change state between read and write
  // operations from VALID to NAK and result of
  // set operation will be invalid!
  if(EpCtrlGet_STAT_TX(pReg) != (Int32U)Data)
  {
    State = Data;
    State <<= 4;
    State ^= *pReg;
    State |= USB_CTRL_CLEAR_ONLY_MASK;
    State &= ~0x7040;  // Clear the toggle bits without STAT_TX (4,5)
    *pReg = State;
  }
  else
  {
    return;
  }
  if(EpCtrlGet_STAT_TX(pReg) != (Int32U)Data)
  {
    State = Data;
    State <<= 4;
    State ^= *pReg;
    State |= USB_CTRL_CLEAR_ONLY_MASK;
    State &= ~0x7040;  // Clear the toggle bits without STAT_TX (4,5)
    *pReg = State;
  }
}

/*************************************************************************
 * Function Name: EpCtrlGet_STAT_TX
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP IN Status
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_STAT_TX (volatile pInt32U pReg)
{
Int32U Data = *pReg;
  return((Data & (0x3UL << 4)) >> 4);
}

/*************************************************************************
 * Function Name: EpCtrlSet_DTOG_TX
 * Parameters: volatile pInt32U pReg, Int32U Data
 *
 * Return: none
 *
 * Description: Set EP DTOG_TX bit (IN)
 *
 *************************************************************************/
void EpCtrlSet_DTOG_TX(volatile pInt32U pReg, Int32U Data)
{
  Data  = Data?(*pReg ^ (1UL<<6)):*pReg;
  Data &= ~0x7030;   // Clear the toggle bits without DTOG_TX (6)
  Data |= USB_CTRL_CLEAR_ONLY_MASK;
  *pReg = Data;
}

/*************************************************************************
 * Function Name: EpCtrlToggle_DTOG_TX
 * Parameters: volatile pInt32U pReg
 *
 * Return: none
 *
 * Description: Toggle EP DTOG_TX bit (IN)
 *
 *************************************************************************/
void EpCtrlToggle_DTOG_TX(volatile pInt32U pReg)
{
Int32U Data = *pReg | (1UL << 6);
  Data &= ~0x7030;   // Clear the toggle bits without DTOG_TX (6)
  Data |= USB_CTRL_CLEAR_ONLY_MASK;
  *pReg = Data;
}

/*************************************************************************
 * Function Name: EpCtrlGet_DTOG_TX
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP DTOG_TX bit (IN)
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_DTOG_TX(volatile pInt32U pReg)
{
  return(((*pReg & (1UL<<6))?1:0));
}

/*************************************************************************
 * Function Name: EpCtrlClr_CTR_TX
 * Parameters: volatile pInt32U pReg
 *
 * Return: none
 *
 * Description: Clear EP CTR_TX bit (IN)
 *
 *************************************************************************/
void EpCtrlClr_CTR_TX(volatile pInt32U pReg)
{
Int32U Data = *pReg;
  Data &= ~(USB_CTRL_TOGGLE_MASK | 1UL << 7);
  Data |= 1UL <<15;   // Set RX_CTR
  *pReg = Data;
}

/*************************************************************************
 * Function Name: EpCtrlGet_CTR_TX
 * Parameters: volatile pInt32U pReg
 *
 * Return: UserFunc_t
 *
 * Description: Get EP CTR_TX bit (IN)
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_CTR_TX(volatile pInt32U pReg)
{
  return(((*pReg & (0x1UL << 7))?1:0));
}

/*************************************************************************
 * Function Name: EpCtrlSet_EP_KIND
 * Parameters: volatile pInt32U pReg, Int32U Data
 *
 * Return: none
 *
 * Description: Set EP KIND bit
 *
 *************************************************************************/
void EpCtrlSet_EP_KIND (volatile pInt32U pReg, Int32U Data)
{
  Data  = Data ? (1UL << 8):0;
  Data |= *pReg & ~(USB_CTRL_TOGGLE_MASK | (1UL << 8));
  Data |= USB_CTRL_CLEAR_ONLY_MASK;
  *pReg = Data;
}

/*************************************************************************
 * Function Name: EpCtrlGet_EP_KIND
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP KIND bit
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_EP_KIND(volatile pInt32U pReg)
{
  return(*pReg & (0x1UL << 8)?1:0);
}

/*************************************************************************
 * Function Name: EpCtrlSet_EP_TYPE
 * Parameters: volatile pInt32U pReg, EpType_t Data
 *
 * Return: none
 *
 * Description: Set EP type
 *
 *************************************************************************/
void EpCtrlSet_EP_TYPE(volatile pInt32U pReg, EpType_t Data)
{
Int32U Type;
  Type = Data;
  Type <<= 9;
  Type  |= *pReg & ~(USB_CTRL_TOGGLE_MASK | (0x3UL << 9));
  Type  |= USB_CTRL_CLEAR_ONLY_MASK;
  *pReg = Type;
}

/*************************************************************************
 * Function Name: EpCtrlGet_EP_TYPE
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP type
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_EP_TYPE(volatile pInt32U pReg)
{
Int32U Data = *pReg;
  Data &= (3UL<<9);
  return(Data >> 9);
}

/*************************************************************************
 * Function Name: EpCtrlGet_SETUP
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP SETUP bit
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_SETUP(volatile pInt32U pReg)
{
Int32U Data = *pReg & (0x1UL << 11);
  return(Data?1:0);
}

/*************************************************************************
 * Function Name: EpCtrlSet_STAT_RX
 * Parameters: volatile pInt32U pReg, EpState_t Data
 *
 * Return: none
 *
 * Description: Set EP STAT_RX (OUT)
 *
 *************************************************************************/
void EpCtrlSet_STAT_RX (volatile pInt32U pReg, EpState_t Data)
{
Int32U State;
  // The EP can change state between read and write
  // operations from VALID to NAK and result of
  // set operation will be invalid!
  if(EpCtrlGet_STAT_RX(pReg) != (Int32U)Data)
  {
    State = Data;
    State <<= 12;
    State  ^= *pReg;
    State  |= USB_CTRL_CLEAR_ONLY_MASK;
    State  &= ~0x4070;  // Clear the toggle bits without STAT_RX (12,13)
    *pReg  = State;
  }
  else
  {
    return;
  }
  if(EpCtrlGet_STAT_RX(pReg) != (Int32U)Data)
  {
    State = Data;
    State <<= 12;
    State  ^= *pReg;
    State  |= USB_CTRL_CLEAR_ONLY_MASK;
    State  &= ~0x4070;  // Clear the toggle bits without STAT_RX (12,13)
    *pReg  = State;
  }
}

/*************************************************************************
 * Function Name: EpCtrlGet_STAT_RX
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP STAT_RX (OUT)
 *
 *************************************************************************/
inline

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产麻豆免费人成网站| 国产盗摄一区二区三区| 亚洲一区二区偷拍精品| 欧美国产日本视频| 香蕉乱码成人久久天堂爱免费| 六月婷婷色综合| 91麻豆免费在线观看| 欧美成人a视频| 亚洲一二三区不卡| 国产jizzjizz一区二区| 日韩三级中文字幕| 一区二区日韩av| 不卡一区二区在线| 精品少妇一区二区三区在线视频| 亚洲国产中文字幕| 日本韩国欧美三级| 中文字幕一区二区三区在线不卡| 精品一区在线看| 欧美一区二区三区免费大片| 亚洲一区二区三区视频在线播放| 成人在线视频一区二区| 久久女同精品一区二区| 日本特黄久久久高潮| 欧美日韩一卡二卡| 亚洲精品伦理在线| 91美女视频网站| 亚洲美女免费在线| jlzzjlzz欧美大全| 亚洲国产精品v| 成人av集中营| 国产精品三级视频| 国产精品一区二区在线观看网站| 日韩欧美一区中文| 激情综合色综合久久| 欧美精品一区二区三区在线播放| 日韩高清中文字幕一区| 91精品国产综合久久久久久久| 亚洲精品福利视频网站| 色88888久久久久久影院野外 | 日韩美女视频19| 岛国一区二区三区| 国产精品不卡在线| 欧美伊人久久大香线蕉综合69 | 成人免费高清在线| 国产精品久久久久影院老司| 成人综合在线观看| 亚洲人123区| 欧美日韩一区二区不卡| 日本不卡不码高清免费观看| 日韩欧美一级片| 国产高清成人在线| 成人免费在线观看入口| 欧美性感一类影片在线播放| 性做久久久久久久免费看| 日韩欧美一区二区三区在线| 韩国av一区二区三区四区| 国产精品美女久久久久久久 | 在线中文字幕一区二区| 午夜精品福利在线| 欧美va亚洲va香蕉在线| 粉嫩久久99精品久久久久久夜| 国产精品素人一区二区| 欧美日韩在线直播| 国产精品影视网| 中文字幕在线不卡视频| 欧美日韩精品一区二区天天拍小说 | 欧美丰满少妇xxxbbb| 极品少妇xxxx精品少妇偷拍| 国产精品护士白丝一区av| 欧美三级电影网站| 加勒比av一区二区| 亚洲人成精品久久久久| 精品少妇一区二区三区在线播放 | 国产·精品毛片| 亚洲国产成人tv| 欧美极品美女视频| 91精品国产福利在线观看 | 国产日韩欧美精品综合| 欧美日韩高清不卡| 成人av在线一区二区| 麻豆精品新av中文字幕| 日韩美女精品在线| 2020国产成人综合网| 欧美性大战xxxxx久久久| 国产成人丝袜美腿| 免费看精品久久片| 一个色妞综合视频在线观看| 久久久久国产免费免费| 欧美一区二区三区免费在线看 | 国产精品伦一区二区三级视频| 3d成人动漫网站| 91美女在线看| av色综合久久天堂av综合| 精品写真视频在线观看| 亚洲国产精品久久久久秋霞影院| 国产精品欧美久久久久无广告 | 日韩午夜电影在线观看| 91免费在线看| av资源网一区| 国产精品18久久久久久久网站| 视频在线观看91| 一区二区三区中文字幕电影| 国产精品三级久久久久三级| 久久久久久影视| 欧美精品在线观看播放| 色欧美片视频在线观看| jlzzjlzz亚洲日本少妇| 国产精品性做久久久久久| 国产在线观看免费一区| 成人免费视频app| 国产综合久久久久久鬼色| 日韩 欧美一区二区三区| 亚洲午夜久久久久久久久电影院| 自拍偷拍亚洲激情| 最新热久久免费视频| 欧美激情一区二区三区蜜桃视频| 精品国产麻豆免费人成网站| 精品日韩一区二区三区| 日韩三级av在线播放| 日韩一区二区免费在线电影| 欧美一区二区三区播放老司机| 欧美日高清视频| 欧美日韩三级在线| 6080日韩午夜伦伦午夜伦| 在线播放亚洲一区| 日韩一区二区精品| 日韩精品自拍偷拍| 久久久久久久久久久久电影| 久久久国产精品不卡| 中文字幕精品一区二区三区精品| 久久久精品一品道一区| 国产精品久久毛片av大全日韩| 亚洲视频一区二区免费在线观看| 亚洲免费观看高清| 亚洲超碰精品一区二区| 蜜臀av性久久久久av蜜臀妖精| 麻豆91免费看| 国产精品1区2区3区在线观看| 成人国产精品免费网站| www.欧美精品一二区| 在线观看av一区| 日韩午夜电影av| 国产精品灌醉下药二区| 亚洲综合一区二区| 极品瑜伽女神91| 99久久精品免费看国产 | av电影在线不卡| 欧美日韩精品综合在线| 亚洲精品一区二区三区四区高清| 国产视频一区在线观看| 一区二区三区精品在线| 麻豆国产精品一区二区三区| 成人激情视频网站| 欧美日韩成人在线| 欧美激情在线观看视频免费| 亚洲第一成年网| 国产成人99久久亚洲综合精品| 91浏览器在线视频| 精品国产不卡一区二区三区| 亚洲欧美另类小说| 国内精品伊人久久久久av一坑| 91丨porny丨蝌蚪视频| 日韩欧美国产午夜精品| 亚洲精品视频一区| 国产专区综合网| 欧美日韩国产乱码电影| 国产精品成人午夜| 狠狠色丁香久久婷婷综合丁香| 91色.com| 国产亚洲精品中文字幕| 日韩国产欧美在线播放| 97久久人人超碰| 久久免费电影网| 日韩福利视频网| 在线一区二区观看| 国产精品久久久久婷婷二区次| 久久电影国产免费久久电影| 在线观看一区日韩| 亚洲欧洲日产国码二区| 国产麻豆视频一区二区| 正在播放亚洲一区| 亚洲国产色一区| 97精品国产露脸对白| 久久久精品综合| 青青国产91久久久久久| 欧美午夜电影一区| 亚洲天堂精品在线观看| 成人精品视频一区二区三区| 日韩精品中午字幕| 蜜桃传媒麻豆第一区在线观看| 欧美亚洲综合另类| 一区二区三区中文字幕在线观看| 成人精品电影在线观看| 国产精品午夜在线| 成人免费高清在线| 亚洲欧洲av色图| 91在线国产福利| 自拍av一区二区三区| 色综合天天在线| 亚洲视频一区在线观看|