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

📄 drv_usb_hwif.c

📁 sparc硬件平台上的usb驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************* Copyright (C), 2007, DTK Computer.     File name: drv_usb_init.h     Author: MMI Group    Version: 1.0    Date: 2008.04.30     Description: usb module for hardware interface    Others:      Function List:     History:          <author>    <time>    <version >    <desc>          Bosco Lee  08/30/04  1.0 build     this moudle *************************************************/#include "drv_usb_hwif.h"voidENABLE (){    return;}voidDISABLE (){    return;}voidset_register_bit (D_UINT8 reg, D_UINT8 value){    D_UINT8 *preg;    preg = registers + reg;    *preg = (*preg) | value;    return;}D_UINT8get_register_bit (D_UINT8 reg, D_UINT8 value){    D_UINT8 *preg;    preg = registers + reg;    return (*preg) & value;}D_UINT8get_register (D_UINT8 reg){    return *(registers + reg);}D_UINT8set_register (D_UINT8 reg, D_UINT8 value){    D_UINT8 *preg;    preg = registers + reg;    *preg = value;}/************************************************************** 函数名称: outportb()** 功能描述: 向USB写入数据** 输   入: INT8U Addr:	命令地址或数据地址			 INT8U Data:    命令字节** 输   出: 无************************************************************/voidoutportb (D_UINT8 Addr, D_UINT8 Data){    Addr = Data;//      ADDR_BUS = Addr;//      DATA_BUS = Data;//      P2 = 0x3;       //MCU_STROBE = 1;       MCU_WE = 1;    //while(MCU_ACK == 0);//      P2 = 0;         //MCU_STROBE = 0;       MCU_WE = 0;}/************************************************************** 函数名称: inportb()** 功能描述: 读入数据** 输   入: INT8U Addr:	数据地址** 输   出: 读到的数据*************************************************************/D_UINT8inportb (D_UINT8 Addr){    D_UINT8 i;//      ADDR_BUS = Addr;//      MCU_STROBE = 1;    //while(MCU_ACK == 0);//      i = DATA_BUS;//      MCU_STROBE = 0;    i = Addr;    return i;}/*****************************************			与CPU 无关, 与 USB相关的函数*****************************************//************************************************************** 函数名称: void Rst_USB(void)** 功能描述:初始化USB** 输   入: 无** 输   出: 无************************************************************/voidRst_USB (void){    D_UINT8 i;    /*for(i = 0; i < 0xf; i++);             //软件延时       outportb(SLAVE_CONTROL_REG,1);       outportb(SLAVE_CONTROL_REG,0);       for(i=0;i<0xf;i++);       outportb(SC_CONTROL_REG,1);       outportb(SC_INTERRUPT_MASK_REG,0x21);       for (i = 0;i < 0xf;i++);       outportb(ENDPOINT_CONTROL_REG, ENDPOINT_ENABLE_BIT|ENDPOINT_READY_BIT);       //outportb(ENDPOINT_CONTROL_REG, ENDPOINT_ENABLE_BIT);       //outportb(ENDPOINT_CONTROL_REG, ENDPOINT_READY_BIT);       outportb(ENDPOINT_CONTROL_REG+ep_cmd_offset, 0x11);//ep1       outportb(ENDPOINT_CONTROL_REG+ep_cmd_offset*2, 0x23);//ep2       //outportb(ENDPOINT_CONTROL_REG+ep_cmd_offset*2, 0x21); */    for (i = 0; i < 0xf; i++);	//软件延时    set_register (SLAVE_CONTROL_REG, 1);    set_register (SLAVE_CONTROL_REG, 0);    for (i = 0; i < 0xf; i++);    set_register (SC_CONTROL_REG, 1);    set_register (SC_INTERRUPT_MASK_REG, 0x21);    for (i = 0; i < 0xf; i++);    set_register (ENDPOINT_CONTROL_REG,		  ENDPOINT_ENABLE_BIT | ENDPOINT_READY_BIT);    //outportb(ENDPOINT_CONTROL_REG, ENDPOINT_ENABLE_BIT);    //outportb(ENDPOINT_CONTROL_REG, ENDPOINT_READY_BIT);    set_register (ENDPOINT_CONTROL_REG + ep_cmd_offset, 0x11);	//ep1    set_register (ENDPOINT_CONTROL_REG + ep_cmd_offset * 2, 0x23);	//ep2    //outportb(ENDPOINT_CONTROL_REG+ep_cmd_offset*2, 0x21);}/************************************************************** 函数名称: USB_SetAddress()** 功能描述: 设置地址/使能** 输   入: D_UINT8 bAddress:  地址	        D_UINT8 bEnable :  0 --- 禁止	     		     		  1 --- 使能** 输   出: 无************************************************************/voidUSB_SetAddress (D_UINT8 bAddress){    if (bEPPflags.bits.in_isr == 0)	DISABLE ();    set_register (SC_ADDRESS, bAddress);	//输出设置值    if (bEPPflags.bits.in_isr == 0)	ENABLE ();}/************************************************************** 函数名称: USB_SetEndpointEnable()** 功能描述: 设置端点使能** 输   入: D_UINT8 bEnable :  0 --- 禁止	     		     		  1 --- 允许** 输   出: 无************************************************************/voidUSB_SetEndpointEnable (D_UINT8 bEnable){    D_UINT8 i;    if (bEPPflags.bits.in_isr == 0)	DISABLE ();    for (i = 1; i < MAX_ENDPOINTS; i++)      {	  //      outportb(ENDPOINT_CONTROL_REG+ep_cmd_offset*i, bEnable);                //设置端点允许	  set_register_bit (ENDPOINT_CONTROL_REG + ep_cmd_offset * i,			    bEnable);      }    if (bEPPflags.bits.in_isr == 0)	ENABLE ();}/************************************************************** 函数名称: void USB_SetMode()** 功能描述: 模式设置** 输   入: D_UINT8 bConfig:  配置字节信息	     	 D_UINT8 bClkDiv:  分频系数** 输   出: 无************************************************************/#if USB_SetMode_ENvoidUSB_SetMode (D_UINT8 bConfig, D_UINT8 bClkDiv){    if (bEPPflags.bits.in_isr == 0)	DISABLE ();/*	outportb(USB_COMMAND, 0xF3);		//输出设置模式指令	outportb(USB_DATA, bConfig);		//输出配置字节信息	outportb(USB_DATA, bClkDiv);		//输出时钟分频因数字节*/    if (bEPPflags.bits.in_isr == 0)	ENABLE ();}#endif /*  *//************************************************************** 函数名称: void USB_SetDMA()** 功能描述: 设置DMA工作方式设置** 输   入: D_UINT8 bMode: 	设置值** 输   出: 无************************************************************/#if 0voidUSB_SetDMA (D_UINT8 bMode){    if (bEPPflags.bits.in_isr == 0)	DISABLE ();/*	outportb(USB_COMMAND, 0xFB);	//设置DMA工作方命令	outportb(USB_DATA, bMode);		//输出设置值*/    if (bEPPflags.bits.in_isr == 0)	ENABLE ();}#endif /*  */D_UINT8USB_ReadNumRegister (){    //return inportb (SC_ENDPOINT_NUM_REG);	D_UINT8 *preg;    D_UINT8 i;	for(i=0;i<3;i++)	{		preg = registers + ENDPOINT_CONTROL_REG+i*ep_cmd_offset;    	if(~(*preg)&0x02)		{				return i;		}	}				}#if 0D_UINT8USB_ReadControlRegister (D_UINT8 bEndp){    return inportb (ENDPOINT_CONTROL_REG + bEndp * ep_cmd_offset);}#endif /*  *//************************************************************** 函数名称: USB_ReadInterruptRegister()** 功能描述: 读取中断寄存器值** 输   入: 无** 输   出: 中断寄存器值************************************************************/D_UINT8USB_ReadInterruptRegister (void){//      return inportb(SC_INTERRUPT_STATUS_REG);    return *(registers + SC_INTERRUPT_STATUS_REG);}

⌨️ 快捷键说明

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