📄 init.lst
字号:
C51 COMPILER V7.50 INIT 10/30/2007 16:17:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE INIT
OBJECT MODULE PLACED IN init.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE init.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************Copyright (c)**************************************************
2
3 ** 文 件 名: init.c
4 ** 最后修改日期: 2006年10月19日
5 ** 描 述: USB驱动程序软件包: D14 设备端驱动程序 初始化程序
6 ** 版 本: V1.0
7 **********************************************************************************************************
-/
8
9
10 #include "standard.h"
11 #include "Kernel.h"
12 #include "D14.h"
13
14 //外部函数
15 extern void Start_mSEC_Timer(Data);
16 extern void Start_SEC_Timer(Data);
17 extern KERNEL Kernel_Flag;
18 extern USB_INT_FLAG USB_Int_Flag;
19 extern USB_DEVICE USB_Device;
20 extern UI Temp,PIO_Count;
21 extern UC Device_Config_Value;
22 extern UC idata Endpt_FIFO[MAX_BUF];
23 extern void DMA_Init(void);
24 extern ULI bytecount;
25 extern UC Address_Count;
26 extern UC xdata Address[20];
27
28 //内部函数
29 void Init_D14_SFR(void);
30 void Init_Endpoint(void);
31
32 void Init_Main(void);
33 void Init_8051(void);
34 void Init_D14(void);
35
36 //变量定义
37 TIMER Timer;
38 DATA_SWAP idata Data_Swap;
39 DMA_INT_FLAG DMA_Int_Flag;
40
41 UI count;
42 UC Device_Config_Value;
43 UC Type;
44
45 UI idata Init_Count;
46
47 volatile D14_CNTRL_REG xdata D14_Cntrl_Reg _at_ 0x0000;
48
49 D14_CNTRL_REG xdata *D14_Cntrl_Ptr = &D14_Cntrl_Reg;
50
51
52 //////////////////////////////////////////////////////////
53
54
C51 COMPILER V7.50 INIT 10/30/2007 16:17:28 PAGE 2
55
56 //初始化主函数
57 void Init_Main(void)
58 {
59 1
60 1 ISP1581_CS = 1; //关1581片选
61 1 bytecount = 0;
62 1 PIO_Count = 64;
63 1
64 1 Type = 0;
65 1 USB_Device.BITS.DMA_Test_Mode = PIO_Test;
66 1
67 1 //初始化8051
68 1 Init_8051();
69 1
70 1 ISP1581_CS = 0; //片选ISP1581
71 1
72 1 D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 0;
73 1 LED=1;
74 1
75 1 //检查是否连接了ISP1581
76 1 do
77 1 {
78 2 //复位 ISP1581
79 2 ISP1581_RESET = 0;
80 2 Start_mSEC_Timer(100);
81 2 ISP1581_RESET = 1;
82 2 Start_mSEC_Timer(100);
83 2
84 2 //读取接口器件是否ISP1581
85 2 if(D14_Cntrl_Ptr->D14_CHIP_ID_MBYTE == 0x81 && D14_Cntrl_Ptr->D14_CHIP_ID_MSB == 0x15)
86 2 break;
87 2 }while(1);
88 1 LED=0;
89 1
90 1 //初始化标志寄存器
91 1 USB_Int_Flag.VALUE = 0;//USB中断标志寄存器
92 1 DMA_Int_Flag.VALUE = 0;//DMA中断标志寄存器
93 1 Kernel_Flag.VALUE = 0;//ISP1581状态标志寄存器
94 1
95 1 //设置为设备默认状态
96 1 Kernel_Flag.BITS.HS_FS_State = FULL_SPEED;//设置为全速状态
97 1 HS_FS_LED = FULL_SPEED_LED;
98 1
99 1 //初始化ISP1581
100 1 Init_D14();
101 1 }
102
103
104
105 //初始化8051
106 void Init_8051(void)
107 {
108 1
109 1 //定义定时器方式-定时器0方式1
110 1 TMOD = 0x01;
111 1 AUXR|=0x03;
112 1 //初始化定时器时间
113 1 Timer.mSEC_Scale = 4000;
114 1 Timer.Hundred_mSEC_Scale = 40000;
115 1
116 1
C51 COMPILER V7.50 INIT 10/30/2007 16:17:28 PAGE 3
117 1 //开定时器中断
118 1 ET0=1;
119 1 PT0 = 1; //定时器高优先级
120 1
121 1 EA = 1;//开总中断
122 1 }
123
124
125 //D14初始化函数
126 void Init_D14(void)
127 {
128 1 //初始化ISP1581寄存器
129 1 Init_D14_SFR();
130 1
131 1 //初始化ISP1581端点
132 1 Init_Endpoint();
133 1
134 1 //初始化ISP1581工作标志寄存器
135 1 USB_Device.BITS.State = USB_Default;
136 1 Device_Config_Value = 0;
137 1 USB_Device.BITS.Alter_Interface = 0;
138 1 USB_Device.BITS.Big_Endian = On;
139 1 Kernel_Flag.BITS.Tx_Done = 0;
140 1 EX0 = 1; //开ISP1581中断
141 1 }
142
143
144 //D14寄存器初始化
145 void Init_D14_SFR(void)
146 {
147 1 //设置模式:时钟始终有效,全局中断使能,片选唤醒
148 1 D14_Cntrl_Reg.D14_MODE.VALUE |= 0x8C;
149 1
150 1 //设置全部中断为模式1,电平触发,低电平有效
151 1 D14_Cntrl_Reg.D14_INT_CONFIG.VALUE = 0x54;
152 1
153 1 //设置中断使能寄存器
154 1 //注释: D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x39fd0000;先发送高字节
155 1 //0x14(xdata)=0x39
156 1 //0x15(xdata)=0xfd
157 1 //0x16(xdata)=00
158 1 //0x17(xdata)=00
159 1 //使用端点0和端点1、端点2
160 1 D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x39fd0000;
161 1 }
162
163
164
165 //初始化D14各端点
166 void Init_Endpoint(void)
167 {
168 1 //设置全速端点
169 1 if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
170 1 {
171 2 //设置全速端点FIFO大小
172 2
173 2 //Interrupt Out MaxPacketSize Endpoint
174 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
175 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000; //FIFO=64bytes
176 2
177 2 //Interrupt In MaxPacketSize Endpoint
178 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -