📄 main.lst
字号:
C51 COMPILER V7.01 MAIN 02/17/2006 15:09:23 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE MODP2 DEBUG OBJECTEXTEND
stmt level source
1
2
3 #include "InsUsb.h"
4 #include <intrins.h>
5
6 #define _Debug_
7 //global structure variable
8 SYS_INFORMATION data sSysInformation;
9 //global array variable
10 unsigned char xdata mEp0OutBuffer[EP0_OUT_BUFFER_SIZE];
11 unsigned char data mEp0InBuffer[EP0_IN_BUFFER_SIZE];
12 unsigned char data mEp1OutBuffer[EP1_OUT_BUFFER_SIZE]; //store led status
13 unsigned char data mEp1InBuffer[EP1_IN_BUFFER_SIZE]; //store switch status
14 unsigned char xdata mRamBuffer[RAM_BUFFER_SIZE];
15 unsigned char xdata mSerialNumber[4];
16
17
18 void UsbBusReset(void);
19 extern void D12SetMode(unsigned char bConfiguration, unsigned char bClockkDivision);
20 extern void D12SetAddressEnable(unsigned char bAddress, unsigned char bEnable);
21 extern void D12SetEndpointStatus(unsigned char bEndpointIndex, unsigned char bStalled);
22 extern void D12WriteBuffer(unsigned char bEndpointIndex,unsigned char bLength, unsigned char * pBuffer);
23 extern void D12SetEndpointEnable(unsigned char bEndpointEnable);
24 extern void D12SetDMA(unsigned char bValue);
25 extern void D12SendResume(void);
26 extern void UsbIsr(void);
27 extern void UsbSetUpDeal(void);
28 extern void ControlOutDealWith(void);
29
30 //
31 //*************************************************************************
32 // Paremeter:
33 // In : None
34 // Out: None
35 // Function:
36 // On PDIUSBD12 Develop Board,the interrupt pin of PDIUSBD12 is connected
37 // to INT0 of P89C51RD2.When interrupt has happened,this function
38 // will call UsbIsr(),which will deal with USB interrupt
39
40 void UsbInterrupt(void) interrupt 0
41 {
42 1 #ifdef _INT_MODE_
43 1 UsbIsr(); //USB interrupt service routine
44 1 #endif
45 1 }
46
47 //
48 //*************************************************************************
49 // Paremeter:
50 // In : None
51 // Out: None
52 // Function:
53 // This interrupt is use to refresh LED and switch status
54 void Timer0Interrupt(void) interrupt 1
55 {
C51 COMPILER V7.01 MAIN 02/17/2006 15:09:23 PAGE 2
56 1 static unsigned char data bTimer0Tiems = 0x00;
57 1
58 1 if ((++bTimer0Tiems) >= 5) //5*65535*6*(1/18.432)=107ms
59 1 {
60 2 sSysInformation.bTimer0 = TRUE;
61 2 bTimer0Tiems = 0x00;
62 2 }
63 1
64 1 TH0 = 0x00;
65 1 TL0 = 0x00;
66 1
67 1 }
68
69 //
70 //*************************************************************************
71 // Paremeter:
72 // In : None
73 // Out: None
74 // Function:
75 // After system power on reset finished,this function will initialize
76 // system,include reset PDIUSBD12,initialize all variable,test innteral
77 // RAM of P89C51RD2,and set UART,set LED,Switch
78 void SysInitialize(void)
79 {
80 1
81 1 unsigned int data i;
82 1 unsigned char xdata * data pInnerRam = &MCU_INNER_RAM;
83 1
84 1 D12_RESET = 0; //reset PDIUSBD12
85 1 LED_ADDRESS = 0xFF; //all led will turn off
86 1
87 1 sSysInformation.bRamError = FALSE; //no error
88 1 sSysInformation.bTimer0 =FALSE; //bTimer0
89 1 sSysInformation.bBusReset = FALSE;
90 1 sSysInformation.bSuspendChange = FALSE;
91 1 sSysInformation.bInSuspend = FALSE;
92 1 sSysInformation.bRemoteWakeUpEnable = FALSE;
93 1 sSysInformation.bD12ConfigurationValue = 0x00;
94 1 sSysInformation.bSetup = FALSE;
95 1 sSysInformation.bUsbStatus = IDLE;
96 1
97 1 sSysInformation.sUsbSetUpDealwith.wRemaindLength = 0;
98 1 sSysInformation.sUsbSetUpDealwith.bControlOutDataComplete = TRUE;
99 1 sSysInformation.sUsbSetUpDealwith.bControOutCommandIsPending = FALSE;
100 1
101 1 sSysInformation.sRamControl.bRamCommand = RAM_COMMAND_LOOPBACK;
102 1 sSysInformation.sRamControl.bRamRwStatus = IDLE;
103 1 sSysInformation.sRamControl.iRamStartAddress = &mRamBuffer;
104 1 sSysInformation.sRamControl.iRamRwLength = 0;
105 1 sSysInformation.sRamControl.iRamRemaindLength = 0;
106 1
107 1 //check internal ram of P89C51RD2,it has a internal ram which size is 768 byte.
108 1 //first write 0x5a to all ram unit ,then read and compare,if error happened,
109 1 //set bRamError flag
110 1 for (i=0;i<768;i++)
111 1 {
112 2 *pInnerRam = 0x5A; //all inner ram is written to 0x5a
113 2 pInnerRam++;
114 2 }
115 1 pInnerRam = &MCU_INNER_RAM;
116 1 for (i=0;i<768;i++)
117 1 {
C51 COMPILER V7.01 MAIN 02/17/2006 15:09:23 PAGE 3
118 2 if (*pInnerRam != 0x5A) //read back from high address of inner ram
119 2 {
120 3 sSysInformation.bRamError = TRUE; //if not equal to 0x5a,error happened
121 3 break; //and exit from this cycle
122 3 }
123 2 pInnerRam++;
124 2
125 2 }
126 1 //second write 0xa5 to all ram unit ,then read and compare,if error happened,
127 1 //set bRamError flag
128 1 pInnerRam = &MCU_INNER_RAM;
129 1 if (sSysInformation.bRamError==FALSE)//test inner ram the second time,write 0xa5
130 1 {
131 2 for (i=0;i<768;i++)
132 2 {
133 3 *pInnerRam = 0xA5;
134 3 pInnerRam++;
135 3 }
136 2 pInnerRam = &MCU_INNER_RAM;
137 2 for (i=1;i<768;i++)
138 2 {
139 3 if (*pInnerRam != 0xA5)
140 3 {
141 4 sSysInformation.bRamError = TRUE;
142 4 break;
143 4 }
144 3 pInnerRam++;
145 3 }
146 2 }
147 1 //if no ram error found,initialize all ram unit to 0xFF
148 1 pInnerRam = &MCU_INNER_RAM;
149 1 for (i=0;i<768;i++)
150 1 {
151 2 *pInnerRam = 0xFF;
152 2 pInnerRam++;
153 2 }
154 1
155 1
156 1 //Timer1 set,used as UART baud rate generator
157 1
158 1 TMOD = 0x20;
159 1 SCON = 0x50;
160 1 PCON = 0x80;
161 1 TH1 = 0xFB; //OSC is 18.432MHz,MCU is 6 clock mode,then BaudRate will be 38400
162 1 TL1 = 0xFB;
163 1 TI=1;
164 1 TR1=1;
165 1
166 1 //INT0 set,interrupt source is PDIUSBD12
167 1 #ifdef _INT_MODE_
168 1 IT0 = 0; //low level trigle
169 1 EX0 = 1;
170 1 PX0 = 0;
171 1 #endif
172 1
173 1 //Timer0 set, used as switch and led refresh timing
174 1 TMOD &= 0XF0;
175 1 TMOD |= 0X1;
176 1 TL0 = 0X0;
177 1 TH0 = 0X0;
178 1 ET0 = 1;
179 1 TR0 = 1;
C51 COMPILER V7.01 MAIN 02/17/2006 15:09:23 PAGE 4
180 1 PT0 = 1;
181 1
182 1 D12_RESET = 1; //release PDIUSBD12 reset
183 1 }
184
185 //
186 //*************************************************************************
187 // Paremeter:
188 // In : None
189 // Out: None
190 // Function:
191 // This is main function of firmware.It is an infinate cycle and check
192 // sSysInformation,if any flag is set, call corresponding function to
193 // deal with it.
194 void main(void)
195 {
196 1 unsigned char data i;
197 1 unsigned int data j;
198 1
199 1
200 1 EA = 0; //MCU global interrupt is enabled
201 1
202 1 SysInitialize();
203 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -