📄 drv_usb_hwif.c
字号:
/************************************************* 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 + -