📄 d12driver.lst
字号:
C51 COMPILER V7.06 D12DRIVER 09/15/2008 18:19:57 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE D12DRIVER
OBJECT MODULE PLACED IN D12Driver.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE D12Driver.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //应用层
2
3 #include <reg52.h>
4 #include "D12Config.h"
5 #include "D12CI.h"
6 #include "D12HAL.h"
7 #include "Chap_9.h"
8 #include "Descriptor.h"
9 #include "D12Driver.h"
10
11 INT8U idata GenEpBuf[EP1_PACKET_SIZE];
12 INT8U idata EpBuf[EP2_PACKET_SIZE];
13
14
15 INT8U Init_D12(void)
16 {
17 1 bEPPflags.value = 0; //初始化USB事件标志变量
18 1
19 1 Init_D12Port(); //初始化PDIUSBD12与51单片机连接的端口
20 1 Rst_D12();
21 1 reconnect_USB();
22 1
23 1 /*if (D12_ReadChipID()!=0x1012) //读取芯片ID号,如果不为1012H
24 1 return 1; //则复位失败*/
25 1 return 0; //初始化成功
26 1 }
27
28 //USB事件处理函数
29 void usbserve(void)
30 {
31 1 if (bEPPflags.bits.setup_packet)
32 1 {
33 2 DISABLE();
34 2 bEPPflags.bits.setup_packet = 0;
35 2 control_handler(); //调用请求处理子程序
36 2 ENABLE();
37 2 }
38 1
39 1 if (bEPPflags.bits.bus_reset)
40 1 {
41 2 DISABLE();
42 2 bEPPflags.bits.bus_reset = 0;
43 2 ENABLE();
44 2 d12_busreset();
45 2 }
46 1
47 1 if (bEPPflags.bits.suspend)
48 1 {
49 2 DISABLE();
50 2 bEPPflags.bits.suspend= 0;
51 2 ENABLE();
52 2 d12_suspend();
53 2 }
54 1
55 1 if (bEPPflags.bits.timer)
C51 COMPILER V7.06 D12DRIVER 09/15/2008 18:19:57 PAGE 2
56 1 {
57 2 DISABLE();
58 2 bEPPflags.bits.timer= 0;
59 2 ENABLE();
60 2 if(bEPPflags.bits.configuration)
61 2 check_key_LED(); //设备已配置,调用按键和LED处理程序
62 2 }
63 1 }
64
65
66 void d12_busreset(void)
67 {
68 1 //此次未用到
69 1 }
70
71
72 void dma_eot(void)
73 {
74 1 //此次未用到
75 1 }
76
77 void d12_suspend(void)
78 {
79 1 //为测试方便禁止挂起
80 1 }
81
82 void ep1_txdone(void)
83 {
84 1 D12_ReadLastTransactionStatus(3); //清中断标志位
85 1 }
86
87 void ep1_rxdone(void)
88 {
89 1 INT8U len;
90 1
91 1 D12_ReadLastTransactionStatus(2);
92 1 len = D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf);//读取缓冲区中的数据
93 1 if(len != 0)
94 1 bEPPflags.bits.ep1_rxdone = 1; //标志接收到数据
95 1 }
96
97 void ep2_txdone(void)
98 {
99 1 D12_ReadLastTransactionStatus(5);
100 1 }
101
102 void ep2_rxdone(void)
103 {
104 1 INT8U len;
105 1
106 1 D12_ReadLastTransactionStatus(4);
107 1 len = D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf);
108 1 if (len != 0)
109 1 bEPPflags.bits.ep2_rxdone = 1;
110 1 }
111 //D12中断服务程序
112 void Usb_Exception(void) interrupt 0
113 {
114 1 INT16U i_st;
115 1
116 1 DISABLE(); //进入D12中断服务程序时关中断
117 1
C51 COMPILER V7.06 D12DRIVER 09/15/2008 18:19:57 PAGE 3
118 1 bEPPflags.bits.in_isr = 1;
119 1 i_st = D12_ReadInterruptRegister(); //读取PDIUSBD12中断寄存器值
120 1 if(i_st != 0)
121 1 {
122 2 if(i_st & D12_INT_BUSRESET)
123 2 bEPPflags.bits.bus_reset = 1;
124 2 if(i_st & D12_INT_EOT)
125 2 dma_eot();
126 2 if(i_st & D12_INT_SUSPENDCHANGE)
127 2 bEPPflags.bits.suspend = 1;
128 2 if(i_st & D12_INT_ENDP0IN)
129 2 ep0_txdone();
130 2 if(i_st & D12_INT_ENDP0OUT)
131 2 ep0_rxdone();
132 2 if(i_st & D12_INT_ENDP1IN)
133 2 ep1_txdone();
134 2 if(i_st & D12_INT_ENDP1OUT)
135 2 ep1_rxdone();
136 2 if(i_st & D12_INT_ENDP2IN)
137 2 ep2_txdone();
138 2 if(i_st & D12_INT_ENDP2OUT)
139 2 ep2_rxdone();
140 2 }
141 1 bEPPflags.bits.in_isr = 0;
142 1
143 1 ENABLE(); //退出D12中断服务程序时开中断
144 1 }
145
146
147
148
149 void disconnect_USB(void)
150 {
151 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
152 1 } //SoftConnect 断开
153
154
155 void connect_USB(void)
156 {
157 1 D12_SetDMA(0x00);
158 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
159 1 } //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
160
161
162 void reconnect_USB(void)
163 {
164 1 INT16U clk_cnt;
165 1 MCU_LED0=0;
166 1 MCU_LED1=0;
167 1 MCU_D12SUSPD=0;
168 1 D12_SetAddressEnable(0,1);
169 1 D12_SetEndpointEnable(1);
170 1 disconnect_USB();
171 1 for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++);
172 1 connect_USB();
173 1 MCU_LED0=1;
174 1 MCU_LED1=1;
175 1
176 1 }
177
178
179 void check_key_LED(void)
C51 COMPILER V7.06 D12DRIVER 09/15/2008 18:19:57 PAGE 4
180 {
181 1 static INT8 c,last_key= 0xf;
182 1 c=MCU_SWM0& MCU_SWM1;
183 1 c&= 0x0f;
184 1 if(c!=last_key)
185 1 D12_WriteEndpoint(3,1,&c);
186 1 last_key= c;
187 1 if(bEPPflags.bits.ep1_rxdone)
188 1 {
189 2 DISABLE();
190 2 bEPPflags.bits.ep1_rxdone=0;
191 2 ENABLE();
192 2 MCU_LED0= !(GenEpBuf[3]&0x1);
193 2 MCU_LED1= !(GenEpBuf[3]&0x2);
194 2 }
195 1 }
196
197
198 INT16U Get_D12_FirmwareVer(void)
199 {
200 1 return 0x0500;
201 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 418 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 2
IDATA SIZE = 80 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -