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

📄 usb_func.c

📁 这是一个ARM7的程序
💻 C
字号:
/******************** (C) COPYRIGHT 2005 STMicroelectronics ********************
* File Name          : usb_func.c
* Author             : MCD Application Team
* Date First Issued  : 
* Description        : 
*       
********************************************************************************
* History:
* 08/26/2005         : First Version
*******************************************************************************/
#include "usb_func.h"
#include "USB_lib.h"
#include "USB_conf.h"
#include "USB_prop.h"
#include "USB_pwr.h"
#include "usb_func.h"


#define UP    1
#define DOWN  2
#define LEFT  3
#define RIGHT 4
#define NO_KEY  5

#define USR_TO_PMA 0
#define PMA_TO_USR 1


/*******************************************************************************
* Function Name : gInit
* Description   : Hardware initialisation
* Input         : None
* Output        : None
* Return value  : None
*******************************************************************************/
void gInit(void)
{
  wInterrupt_Mask = IMR_MSK;

} /* gInit */

/*
BYTE Keys_Read(void)
{
  if (GPIO_BitRead(GPIO0,10)) return LEFT;
  if (GPIO_BitRead(GPIO0,13)) return RIGHT;
  if (GPIO_BitRead(GPIO1,14)) return UP;
  if (GPIO_BitRead(GPIO0,8)) return DOWN; 
} */

BYTE Keys_Read(void)
{
  if (GPIO_BitRead(GPIO1,9)==0) return UP;
  if (GPIO_BitRead(GPIO1,10)==0) return DOWN;
  if (GPIO_BitRead(GPIO1,14)==0) return LEFT;
  if (GPIO_BitRead(GPIO1,15)==0) return RIGHT; 
  else return NO_KEY;
} 

/*******************************************************************************
* Function Name : CopyBuffer
* Description   : Transfers a packet of data from/to PMA to/from user memory
* Input 1       : iTrDirection: USR_TO_PMA or PMA_TO_USR
* Input 2       : EpNum: endpoint number
* Input 3       : Usr_buffer: a pointer to user memory
* Input 4       : Nbytes: number of bytes to transfer
* Output        : None
* Return value  : None
*******************************************************************************/
void CopyBuffer(int iTrDirection, BYTE EpNum, BYTE *Usr_buffer, int Nbytes)
{
  DWORD *pTxBuff;
  WORD wTra;
  BYTE *pbTra;
  int i;

  if (iTrDirection == USR_TO_PMA)
  {
    pTxBuff = (DWORD *)(PMAAddr + (BYTE *)(GetEPTxAddr(EpNum)*2));
   	for(i = 0; i < Nbytes;)
   	{
	   	pbTra = (BYTE *)&wTra;
   		*pbTra++ = *Usr_buffer++;
   		i++;
   		if (i < Nbytes) /* check for ODD transfers */
	   		*pbTra = *Usr_buffer++;
	   	else
	   		*pbTra = 0;
   		*pTxBuff++ = wTra;
	   	i++;
	}
  }

} 

void Mouse_Send(BYTE Keys)
{
  BYTE Mouse_Buffer[3] = {0,0,0};
  char X = 0, Y = 0;

  switch (Keys)
  {
	case LEFT:

	  X -= 5;
	  break;
	case RIGHT:
	  X += 5;
	  break;
	case UP:
	  Y -= 5;
	  break;
	case DOWN:
	  Y += 5;
	  break;
	default:
	  return;
  }

  /* prepare buffer to send */
  Mouse_Buffer[1] = X;
  Mouse_Buffer[2] = Y;
  CopyBuffer(USR_TO_PMA, INT_ENDP, Mouse_Buffer, 3);

  /* enable endpoint for transmission */
  SetEPTxAddr(INT_ENDP, ENDP1_TXADDR);
  SetEPTxCount(INT_ENDP, 4);
  SetEPTxValid(INT_ENDP);

} 


⌨️ 快捷键说明

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