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