Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
init.c
Package: USB_2.0.rar [view]
Upload User: ids068
Upload Date: 2013-04-04
Package Size: 639k
Code Size: 13k
Category:
USB develop
Development Platform:
C/C++
- /****************************************Copyright (c)**************************************************
- ** 广州周立功单片机发展有限公司
- ** 研 究 所
- ** http://www.zlgmcu.com
- **--------------当前版本修订------------------------------------------------------------------------------
- ** 修改人: 刘英斌
- ** 日 期:2003-03-13
- ** 描 述:ISP1581 V1.0
- **------------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- #include "standard.h"
- #include "Kernel.h"
- #include "D14.h"
- //***********************************************************************
- //* *
- //* External Variable Definition *
- //* *
- //***********************************************************************
- extern void Start_mSEC_Timer(Data);
- extern void Start_SEC_Timer(Data);
- extern KERNEL Kernel_Flag;
- extern USB_INT_FLAG USB_Int_Flag;
- extern USB_DEVICE USB_Device;
- extern UI Temp,PIO_Count;
- extern UC Device_Config_Value;
- extern UC idata Endpt_FIFO[MAX_BUF];
- extern void DMA_Init(void);
- extern ULI bytecount;
- extern UC Address_Count;
- extern UC xdata Address[20];
- //***********************************************************************
- //* *
- //* Prototype Routine Definition *
- //* *
- //***********************************************************************
- void Init_D14_SFR(void);
- void Init_Endpoint(void);
- void Init_Main(void);
- void Init_8051(void);
- void Init_D14(void);
- //***********************************************************************
- //* *
- //* Variable Definition *
- //* *
- //***********************************************************************
- TIMER Timer;
- DATA_SWAP idata Data_Swap;
- DMA_INT_FLAG DMA_Int_Flag;
- UI count;
- UC Device_Config_Value;
- UC Type;
- UI idata Init_Count;
- volatile D14_CNTRL_REG xdata D14_Cntrl_Reg _at_ 0x7000;
- D14_CNTRL_REG xdata *D14_Cntrl_Ptr = &D14_Cntrl_Reg;
- //***********************************************************************
- //* *
- //* Routine : Init_Main *
- //* Input : None *
- //* Output : None *
- //* Function : To initialize the D14 and the 8051 *
- //* *
- //***********************************************************************
- void Init_Main(void)
- {
- AUXR = 0x02;
- CKCON = 0x01;
- //disable ISP1581 chip select
- ISP1581_CS = 1; //关1581片选
- bytecount = 0;
- PIO_Count = 64;
- Type = 0;
- USB_Device.BITS.DMA_Test_Mode = PIO_Test;
- //初始化8051
- Init_8051();
- ISP1581_CS = 0; //片选ISP1581
- D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 0;
- //检查是否连接了ISP1581
- do
- {
- //reset ISP1581
- ISP1581_RESET = 0;
- Start_mSEC_Timer(100);
- ISP1581_RESET = 1;
- Start_mSEC_Timer(100);
- //读取接口器件是否ISP1581
- if(D14_Cntrl_Ptr->D14_CHIP_ID_MBYTE == 0x81 && D14_Cntrl_Ptr->D14_CHIP_ID_MSB == 0x15)
- break;
- }while(1);
- //初始化标志寄存器
- USB_Int_Flag.VALUE = 0;//USB中断标志寄存器
- DMA_Int_Flag.VALUE = 0;//DMA中断标志寄存器
- Kernel_Flag.VALUE = 0;//ISP1581状态标志寄存器
- //设置为设备默认状态
- Kernel_Flag.BITS.HS_FS_State = FULL_SPEED;//设置为全速状态
- HS_FS_LED = FULL_SPEED_LED;
- //初始化ISP1581
- Init_D14();
- }
- //***********************************************************************
- //* *
- //* Routine : Init 8051 *
- //* Input : 8051 Special Function Register *
- //* Output : None *
- //* Function : To initialize 8051 *
- //* *
- //***********************************************************************
- void Init_8051(void)
- {
- //定义定时器方式
- TMOD = 0x01;
- //初始化定时器时间
- Timer.mSEC_Scale = 2000;
- Timer.Hundred_mSEC_Scale = 20000;
- //reset timer control
- TCON = 0;
- //disable all interrupt
- EA = 0;
- //disable UART interrupt
- //disable timer 1 overflow interrupt
- //disable external interrupt 1
- //enable timer 0 overflow interrupt
- //enable external interrupt 0
- IE = 0x02;
- //reset interrupt priority
- IP = 0;
- PT1 = 1;
- PT0 = 1;
- // EX0 = 1; //开ISP1581中断
- //enable all interrupt
- EA = 1;
- //disable all power mode control
- //enable half/doble baud rate
- PCON = 0x40;
- }
- //***********************************************************************
- //* *
- //* Routine : Init D14 *
- //* Input : ISP1581 SFR *
- //* Output : None *
- //* Function : To initialize ISP1581 *
- //* *
- //***********************************************************************
- void Init_D14(void)
- {
- //初始化ISP1581寄存器
- Init_D14_SFR();
- //初始化ISP1581端点
- Init_Endpoint();
- //初始化ISP1581工作标志寄存器
- USB_Device.BITS.State = USB_Default;
- Device_Config_Value = 0;
- USB_Device.BITS.Alter_Interface = 0;
- USB_Device.BITS.Big_Endian = On;
- Kernel_Flag.BITS.Tx_Done = 0;
- EX0 = 1; //开ISP1581中断
- }
- //***********************************************************************
- //* *
- //* Routine : Init D14 SFR *
- //* Input : ISP1581 SFR *
- //* Output : None *
- //* Function : To initialize ISP1581 *
- //* *
- //***********************************************************************
- void Init_D14_SFR(void)
- {
- //enable Global Interrupt enable
- //enable soft connect and other feature
- //enable wakeup on chip select
- //disable soft connect
- //设置模式:时钟始终有效,全局中断使能,片选唤醒
- D14_Cntrl_Reg.D14_MODE.VALUE |= 0x8C;
- //set all interrupt source to mode 1
- //设置全部中断为模式1,电平触发,低电平有效
- D14_Cntrl_Reg.D14_INT_CONFIG.VALUE = 0x54;
- //设置中断使能寄存器
- //注释: D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x790D0000;先发送高字节
- //0x14(xdata)=0x79
- //0x15(xdata)=0x0D
- //0x16(xdata)=00
- //0x17(xdata0=00
- //使用端点0和端点2
- D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x39fd0000;
- }
- //***********************************************************************
- //* *
- //* Routine : Init Endpoint *
- //* Input : ISP1581 FIFO *
- //* Output : None *
- //* Function : To initialize ISP1581 endpoint FIFO *
- //* *
- //***********************************************************************
- void Init_Endpoint(void)
- {
- //设置全速端点
- if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
- {
- //设置全速端点FIFO大小
- //Interrupt Out MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000; //FIFO=64bytes
- //Interrupt In MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Bulk Out MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Bulk In MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Iso Out MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Iso In MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //设置全速端点类型
- //Interrupt In Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;//设置为中断,使用双缓冲,禁止FIFO,禁止无空包
- //Interrupt Out Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;//设置为中断,使用双缓冲,禁止FIFO,禁止无空包
- //Bulk Out Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;//设置为批量,使用双缓冲,禁止FIFO,禁止无空包
- //Bulk In Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;//设置为批量,使用双缓冲,禁止FIFO,禁止无空包
- //Iso Out Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;//设置为同步,使用双缓冲,禁止FIFO,禁止无空包
- //Iso In Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;//设置为同步,使用双缓冲,禁止FIFO,禁止无空包
- //端点使能
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- }
- //设置高速端点
- if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
- {
- //设置全速端点FIFO大小
- //Interrupt Out MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Interrupt In MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Bulk Out MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x0002;//FIFO=64bytes
- //Bulk In MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x0002;//FIFO=64bytes
- //Iso Out MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //Iso In MaxPacketSize Endpoint
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- //设置高速端点类型
- //Interrupt In Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;
- //Interrupt Out Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;
- //Bulk Out Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;
- //Bulk In Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;
- //Iso Out Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;
- //Iso In Endpoint Type
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;
- //端点使能
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- //enable FIFO
- D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- }
- //设置默认地址有效
- D14_Cntrl_Reg.D14_ADDRESS.VALUE = 0x80;
- }