init.LST
资源名称:USB_2.0.rar [点击查看]
上传用户:ids068
上传日期:2013-04-04
资源大小:639k
文件大小:27k
源码类别:
USB编程
开发平台:
C/C++
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 1
- C51 COMPILER V7.06, COMPILATION OF MODULE INIT
- OBJECT MODULE PLACED IN init.OBJ
- COMPILER INVOKED BY: C:KEILC51BINC51.EXE init.c OPTIMIZE(2,SPEED) BROWSE DEBUG OBJECTEXTEND
- stmt level source
- 1 /****************************************Copyright (c)**************************************************
- 2 ** 广州周立功单片机发展有限公司
- 3 ** 研 究 所
- 4 ** http://www.zlgmcu.com
- 5 **--------------当前版本修订------------------------------------------------------------------------------
- 6 ** 修改人: 刘英斌
- 7 ** 日 期:2003-03-13
- 8 ** 描 述:ISP1581 V1.0
- 9 **------------------------------------------------------------------------------------------------------
- 10 ********************************************************************************************************/
- 11
- 12 #include "standard.h"
- 13 #include "Kernel.h"
- 14 #include "D14.h"
- 15
- 16 //***********************************************************************
- 17 //* *
- 18 //* External Variable Definition *
- 19 //* *
- 20 //***********************************************************************
- 21
- 22 extern void Start_mSEC_Timer(Data);
- 23 extern void Start_SEC_Timer(Data);
- 24 extern KERNEL Kernel_Flag;
- 25 extern USB_INT_FLAG USB_Int_Flag;
- 26 extern USB_DEVICE USB_Device;
- 27 extern UI Temp,PIO_Count;
- 28 extern UC Device_Config_Value;
- 29 extern UC idata Endpt_FIFO[MAX_BUF];
- 30 extern void DMA_Init(void);
- 31 extern ULI bytecount;
- 32 extern UC Address_Count;
- 33 extern UC xdata Address[20];
- 34
- 35 //***********************************************************************
- 36 //* *
- 37 //* Prototype Routine Definition *
- 38 //* *
- 39 //***********************************************************************
- 40
- 41 void Init_D14_SFR(void);
- 42 void Init_Endpoint(void);
- 43
- 44 void Init_Main(void);
- 45 void Init_8051(void);
- 46 void Init_D14(void);
- 47
- 48 //***********************************************************************
- 49 //* *
- 50 //* Variable Definition *
- 51 //* *
- 52 //***********************************************************************
- 53
- 54 TIMER Timer;
- 55 DATA_SWAP idata Data_Swap;
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 2
- 56 DMA_INT_FLAG DMA_Int_Flag;
- 57
- 58 UI count;
- 59 UC Device_Config_Value;
- 60 UC Type;
- 61
- 62 UI idata Init_Count;
- 63
- 64 volatile D14_CNTRL_REG xdata D14_Cntrl_Reg _at_ 0x7000;
- 65
- 66 D14_CNTRL_REG xdata *D14_Cntrl_Ptr = &D14_Cntrl_Reg;
- 67
- 68
- 69 //***********************************************************************
- 70 //* *
- 71 //* Routine : Init_Main *
- 72 //* Input : None *
- 73 //* Output : None *
- 74 //* Function : To initialize the D14 and the 8051 *
- 75 //* *
- 76 //***********************************************************************
- 77
- 78 void Init_Main(void)
- 79 {
- 80 1
- 81 1 AUXR = 0x02;
- 82 1 CKCON = 0x01;
- 83 1
- 84 1
- 85 1 //disable ISP1581 chip select
- 86 1 ISP1581_CS = 1; //关1581片选
- 87 1 bytecount = 0;
- 88 1 PIO_Count = 64;
- 89 1
- 90 1 Type = 0;
- 91 1 USB_Device.BITS.DMA_Test_Mode = PIO_Test;
- 92 1
- 93 1 //初始化8051
- 94 1 Init_8051();
- 95 1
- 96 1 ISP1581_CS = 0; //片选ISP1581
- 97 1
- 98 1 D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 0;
- 99 1
- 100 1 //检查是否连接了ISP1581
- 101 1 do
- 102 1 {
- 103 2 //reset ISP1581
- 104 2 ISP1581_RESET = 0;
- 105 2 Start_mSEC_Timer(100);
- 106 2 ISP1581_RESET = 1;
- 107 2 Start_mSEC_Timer(100);
- 108 2
- 109 2 //读取接口器件是否ISP1581
- 110 2 if(D14_Cntrl_Ptr->D14_CHIP_ID_MBYTE == 0x81 && D14_Cntrl_Ptr->D14_CHIP_ID_MSB == 0x15)
- 111 2 break;
- 112 2 }while(1);
- 113 1
- 114 1 //初始化标志寄存器
- 115 1 USB_Int_Flag.VALUE = 0;//USB中断标志寄存器
- 116 1 DMA_Int_Flag.VALUE = 0;//DMA中断标志寄存器
- 117 1 Kernel_Flag.VALUE = 0;//ISP1581状态标志寄存器
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 3
- 118 1
- 119 1 //设置为设备默认状态
- 120 1 Kernel_Flag.BITS.HS_FS_State = FULL_SPEED;//设置为全速状态
- 121 1 HS_FS_LED = FULL_SPEED_LED;
- 122 1
- 123 1 //初始化ISP1581
- 124 1 Init_D14();
- 125 1 }
- 126
- 127
- 128
- 129
- 130 //***********************************************************************
- 131 //* *
- 132 //* Routine : Init 8051 *
- 133 //* Input : 8051 Special Function Register *
- 134 //* Output : None *
- 135 //* Function : To initialize 8051 *
- 136 //* *
- 137 //***********************************************************************
- 138
- 139 void Init_8051(void)
- 140 {
- 141 1
- 142 1 //定义定时器方式
- 143 1 TMOD = 0x01;
- 144 1
- 145 1 //初始化定时器时间
- 146 1 Timer.mSEC_Scale = 2000;
- 147 1 Timer.Hundred_mSEC_Scale = 20000;
- 148 1
- 149 1 //reset timer control
- 150 1 TCON = 0;
- 151 1
- 152 1 //disable all interrupt
- 153 1 EA = 0;
- 154 1
- 155 1 //disable UART interrupt
- 156 1 //disable timer 1 overflow interrupt
- 157 1 //disable external interrupt 1
- 158 1 //enable timer 0 overflow interrupt
- 159 1 //enable external interrupt 0
- 160 1 IE = 0x02;
- 161 1
- 162 1 //reset interrupt priority
- 163 1 IP = 0;
- 164 1 PT1 = 1;
- 165 1 PT0 = 1;
- 166 1 // EX0 = 1; //开ISP1581中断
- 167 1 //enable all interrupt
- 168 1 EA = 1;
- 169 1
- 170 1
- 171 1 //disable all power mode control
- 172 1 //enable half/doble baud rate
- 173 1 PCON = 0x40;
- 174 1 }
- 175
- 176 //***********************************************************************
- 177 //* *
- 178 //* Routine : Init D14 *
- 179 //* Input : ISP1581 SFR *
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 4
- 180 //* Output : None *
- 181 //* Function : To initialize ISP1581 *
- 182 //* *
- 183 //***********************************************************************
- 184
- 185 void Init_D14(void)
- 186 {
- 187 1
- 188 1 //初始化ISP1581寄存器
- 189 1 Init_D14_SFR();
- 190 1
- 191 1 //初始化ISP1581端点
- 192 1 Init_Endpoint();
- 193 1
- 194 1 //初始化ISP1581工作标志寄存器
- 195 1 USB_Device.BITS.State = USB_Default;
- 196 1 Device_Config_Value = 0;
- 197 1 USB_Device.BITS.Alter_Interface = 0;
- 198 1 USB_Device.BITS.Big_Endian = On;
- 199 1 Kernel_Flag.BITS.Tx_Done = 0;
- 200 1 EX0 = 1; //开ISP1581中断
- 201 1
- 202 1 }
- 203
- 204 //***********************************************************************
- 205 //* *
- 206 //* Routine : Init D14 SFR *
- 207 //* Input : ISP1581 SFR *
- 208 //* Output : None *
- 209 //* Function : To initialize ISP1581 *
- 210 //* *
- 211 //***********************************************************************
- 212
- 213 void Init_D14_SFR(void)
- 214 {
- 215 1 //enable Global Interrupt enable
- 216 1 //enable soft connect and other feature
- 217 1 //enable wakeup on chip select
- 218 1 //disable soft connect
- 219 1 //设置模式:时钟始终有效,全局中断使能,片选唤醒
- 220 1 D14_Cntrl_Reg.D14_MODE.VALUE |= 0x8C;
- 221 1
- 222 1 //set all interrupt source to mode 1
- 223 1 //设置全部中断为模式1,电平触发,低电平有效
- 224 1 D14_Cntrl_Reg.D14_INT_CONFIG.VALUE = 0x54;
- 225 1
- 226 1 //设置中断使能寄存器
- 227 1 //注释: D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x790D0000;先发送高字节
- 228 1 //0x14(xdata)=0x79
- 229 1 //0x15(xdata)=0x0D
- 230 1 //0x16(xdata)=00
- 231 1 //0x17(xdata0=00
- 232 1 //使用端点0和端点2
- 233 1 D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x39fd0000;
- 234 1
- 235 1 }
- 236
- 237
- 238 //***********************************************************************
- 239 //* *
- 240 //* Routine : Init Endpoint *
- 241 //* Input : ISP1581 FIFO *
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 5
- 242 //* Output : None *
- 243 //* Function : To initialize ISP1581 endpoint FIFO *
- 244 //* *
- 245 //***********************************************************************
- 246
- 247 void Init_Endpoint(void)
- 248 {
- 249 1 //设置全速端点
- 250 1 if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
- 251 1 {
- 252 2 //设置全速端点FIFO大小
- 253 2
- 254 2 //Interrupt Out MaxPacketSize Endpoint
- 255 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- 256 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000; //FIFO=64bytes
- 257 2
- 258 2 //Interrupt In MaxPacketSize Endpoint
- 259 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- 260 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 261 2
- 262 2 //Bulk Out MaxPacketSize Endpoint
- 263 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- 264 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 265 2
- 266 2
- 267 2 //Bulk In MaxPacketSize Endpoint
- 268 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- 269 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 270 2
- 271 2
- 272 2 //Iso Out MaxPacketSize Endpoint
- 273 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- 274 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 275 2
- 276 2 //Iso In MaxPacketSize Endpoint
- 277 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- 278 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 279 2
- 280 2 //设置全速端点类型
- 281 2
- 282 2 //Interrupt In Endpoint Type
- 283 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- 284 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;//设置为中断,使用双缓冲,禁止FIFO,禁止无空包
- 285 2
- 286 2
- 287 2 //Interrupt Out Endpoint Type
- 288 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- 289 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;//设置为中断,使用双缓冲,禁止FIFO,禁止无空包
- 290 2
- 291 2
- 292 2 //Bulk Out Endpoint Type
- 293 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- 294 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;//设置为批量,使用双缓冲,禁止FIFO,禁止无空包
- 295 2
- 296 2
- 297 2 //Bulk In Endpoint Type
- 298 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- 299 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;//设置为批量,使用双缓冲,禁止FIFO,禁止无空包
- 300 2
- 301 2
- 302 2 //Iso Out Endpoint Type
- 303 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 6
- 304 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;//设置为同步,使用双缓冲,禁止FIFO,禁止无空包
- 305 2
- 306 2
- 307 2 //Iso In Endpoint Type
- 308 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- 309 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;//设置为同步,使用双缓冲,禁止FIFO,禁止无空包
- 310 2
- 311 2 //端点使能
- 312 2
- 313 2 //enable FIFO
- 314 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- 315 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 316 2
- 317 2 //enable FIFO
- 318 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- 319 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 320 2
- 321 2 //enable FIFO
- 322 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- 323 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 324 2
- 325 2 //enable FIFO
- 326 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- 327 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 328 2
- 329 2 //enable FIFO
- 330 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- 331 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 332 2
- 333 2 //enable FIFO
- 334 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- 335 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 336 2
- 337 2 }
- 338 1
- 339 1 //设置高速端点
- 340 1 if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
- 341 1 {
- 342 2 //设置全速端点FIFO大小
- 343 2
- 344 2 //Interrupt Out MaxPacketSize Endpoint
- 345 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- 346 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 347 2
- 348 2 //Interrupt In MaxPacketSize Endpoint
- 349 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- 350 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 351 2
- 352 2 //Bulk Out MaxPacketSize Endpoint
- 353 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- 354 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x0002;//FIFO=64bytes
- 355 2
- 356 2 //Bulk In MaxPacketSize Endpoint
- 357 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- 358 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x0002;//FIFO=64bytes
- 359 2
- 360 2
- 361 2 //Iso Out MaxPacketSize Endpoint
- 362 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- 363 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 364 2
- 365 2 //Iso In MaxPacketSize Endpoint
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 7
- 366 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- 367 2 D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
- 368 2
- 369 2 //设置高速端点类型
- 370 2
- 371 2 //Interrupt In Endpoint Type
- 372 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- 373 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;
- 374 2
- 375 2
- 376 2 //Interrupt Out Endpoint Type
- 377 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- 378 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;
- 379 2
- 380 2
- 381 2 //Bulk Out Endpoint Type
- 382 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- 383 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;
- 384 2
- 385 2
- 386 2 //Bulk In Endpoint Type
- 387 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- 388 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;
- 389 2
- 390 2
- 391 2 //Iso Out Endpoint Type
- 392 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- 393 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;
- 394 2
- 395 2
- 396 2 //Iso In Endpoint Type
- 397 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- 398 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;
- 399 2
- 400 2 //端点使能
- 401 2
- 402 2 //enable FIFO
- 403 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
- 404 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 405 2
- 406 2 //enable FIFO
- 407 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
- 408 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 409 2
- 410 2 //enable FIFO
- 411 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
- 412 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 413 2
- 414 2 //enable FIFO
- 415 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
- 416 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 417 2
- 418 2 //enable FIFO
- 419 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
- 420 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 421 2
- 422 2 //enable FIFO
- 423 2 D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
- 424 2 D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
- 425 2
- 426 2 }
- 427 1
- C51 COMPILER V7.06 INIT 07/02/2003 10:27:48 PAGE 8
- 428 1 //设置默认地址有效
- 429 1 D14_Cntrl_Reg.D14_ADDRESS.VALUE = 0x80;
- 430 1 }
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- MODULE INFORMATION: STATIC OVERLAYABLE
- CODE SIZE = 976 ----
- CONSTANT SIZE = ---- ----
- XDATA SIZE = ---- ----
- PDATA SIZE = ---- ----
- DATA SIZE = 12 ----
- IDATA SIZE = 4 ----
- BIT SIZE = ---- ----
- END OF MODULE INFORMATION.
- C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)