init.c
上传用户:ids068
上传日期:2013-04-04
资源大小:639k
文件大小:13k
- /****************************************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;
- }