📄 pdiusbd12.lst
字号:
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PDIUSBD12
OBJECT MODULE PLACED IN PDIUSBD12.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE PDIUSBD12.c BROWSE DEFINE(__DEBUG__) DEBUG OBJECTEXTEND
line level source
1 /*===============================================================================//
2 //== 文 件 名:PDIUSBD12.c
3 //== author :gnsusn
4 //== 说 明:对PDIUSBD12芯片的操作
5 //== 修改日志:2008.8.13 创建文件
6 //==
7 //===============================================================================*/
8 #include "PDIUSBD12.h"
9 #include "USB.h"
10 #include "functions.h"
11
12 //***************************************************************************************
13 //=======================================================================================
14 #define D12_COMMAND_ADD (*(unsigned char volatile xdata*)0x6001)
15 #define D12_DATA_ADD (*(unsigned char volatile xdata*)0x6000)
16
17 extern unsigned char usb_transmit_buf[8]; //== 用于给USB发送数据的缓冲区,在USB.c中定义
18 extern EPPFLAGS bEPPflags; //== 程序运行状态标志,在USB.c中定义
19 extern CONTROL_DATA_BUFF Control_Data; //== setup 包,在USB.c中定义
20
21 D12_INTERRUPT_REGISTER D12_interrupt_register; //== D12中断寄存器的标志
22 D12_LAST_STATUS D12_last_status; //== 端点的最后处理状态
23
24 /****************************** PDIUSBD12硬件提取层 ******************************/
25 //===============================================================================//
26 //== 函 数 名:write_D12_command
27 //== 功 能:向D12写入一个字节的命令
28 //== 说 明:
29 //== 时 间:2008.8.13 创建函数
30 //== 入口参数:D12_command:向D12写入的命令
31 //== 返 回 值:0
32 //===============================================================================//
33 unsigned char write_D12_command(unsigned char D12_command)
34 {
35 1 D12_COMMAND_ADD = D12_command;
36 1 return 0;
37 1 }
38
39 //===============================================================================//
40 //== 函 数 名:write_a_D12_data
41 //== 功 能:向D12写入一个字节的命令
42 //== 说 明:
43 //== 时 间:2008.8.13 创建函数
44 //== 入口参数:D12_data:向D12写入的数据
45 //== 返 回 值:0
46 //===============================================================================//
47 unsigned char write_a_D12_data(unsigned char D12_data)
48 {
49 1 D12_DATA_ADD = D12_data;
50 1 return 0;
51 1 }
52
53 //===============================================================================//
54 //== 函 数 名:read_a_usb_data
55 //== 功 能:从D12读出一个字节
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 2
56 //== 说 明:
57 //== 时 间:2008.8.13 创建函数
58 //== 入口参数:无
59 //== 返 回 值:ret:从D12读出的数据
60 //===============================================================================//
61 unsigned char read_a_D12_data(void)
62 {
63 1 unsigned char ret;
64 1
65 1 ret = D12_DATA_ADD;
66 1 return ret;
67 1 }
68
69 /**************************** PDIUSBD12硬件提取层结束 ****************************/
70
71
72 /****************************** PDIUSBD12硬件命令层 ******************************/
73 //===============================================================================//
74 //== 函 数 名:set_usb_addr
75 //== 功 能:设置D12的地址
76 //== 说 明:开机后单片机设置D12的地址,并使能这个地址,这个地址默认为0
77 //== :设置地址使能写入一个字节
78 //== :D7:置1使能该功能
79 //== :D6~D0:写入的字节即为地址
80 //== 时 间:2008.8.13 创建函数
81 //== 入口参数:无
82 //== 返 回 值:0
83 //===============================================================================//
84 unsigned char set_usb_addr(unsigned char addr)
85 {
86 1 #ifdef __DEBUG__
87 1 Print_Msg("Runing set_usb_addr()!\r\n");
88 1 #endif
89 1
90 1 write_D12_command(Set_Address);
91 1 write_a_D12_data(Address_Enable|addr); //== Address_Enable:0x80 使能这个地址
92 1
93 1 #ifdef __DEBUG__
94 1 Print_Msg(" 设置地址.....................!\r\n");
95 1 Print_Msg(" 地址为:");
96 1 Print_Long(addr);
97 1 Print_Msg("!\r\n");
98 1 #endif
99 1
100 1 return 0;
101 1 }
102
103 //===============================================================================//
104 //== 函 数 名:set_endpoint_enable
105 //== 功 能:使能端点0
106 //== 说 明:通过设置设置地址(设备地址)/使能命令后才可使能(端点0)普通/同步端点
107 //== 时 间:2008.8.13 创建函数
108 //== 入口参数:无
109 //== 返 回 值:0
110 //===============================================================================//
111 unsigned char set_endpoint_enable(void)
112 {
113 1 #ifdef __DEBUG__
114 1 Print_Msg("Runing set_endpoint_enable()!\r\n");
115 1 #endif
116 1 #ifdef __DEBUG__
117 1 Print_Msg(" 使能端点0!\r\n");
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 3
118 1 #endif
119 1
120 1 write_D12_command(Set_Endpoint_Enable);
121 1 write_a_D12_data(0x01); //== 值1 表示普通/同步端点使能
122 1 return 0;
123 1 }
124
125 //===============================================================================//
126 //== 函 数 名:set_endpoint_disable
127 //== 功 能:禁止端点0
128 //== 说 明:通过设置设置地址(设备地址)/使能命令后才可使能(端点0)普通/同步端点
129 //== 时 间:2008.8.13 创建函数
130 //== 入口参数:无
131 //== 返 回 值:0
132 //===============================================================================//
133 unsigned char set_endpoint_disable(void)
134 {
135 1 #ifdef __DEBUG__
136 1 Print_Msg("Runing set_endpoint_disable()!\r\n");
137 1 #endif
138 1 #ifdef __DEBUG__
139 1 Print_Msg(" 禁止端点0!\r\n");
140 1 #endif
141 1 write_D12_command(Set_Endpoint_Enable);
142 1 write_a_D12_data(0x00); //== 值1 表示普通/同步端点使能
143 1 return 0;
144 1 }
145 //===============================================================================//
146 //== 函 数 名:read_interrupt_register
147 //== 功 能:从D12读出中断状态寄存器
148 //== 说 明:
149 //== 时 间:2008.8.13 创建函数
150 //== 入口参数:无
151 //== 返 回 值:0
152 //===============================================================================//
153 unsigned char read_interrupt_register(void)
154 {
155 1 #ifdef __DEBUG__
156 1 Print_Msg("Runing read_interrupt_register()!\r\n");
157 1 #endif
158 1
159 1 write_D12_command(Read_Interrupt_Register);
160 1 D12_interrupt_register.Register[0] = read_a_D12_data();
161 1 D12_interrupt_register.Register[1] = read_a_D12_data();
162 1
163 1 #ifdef __DEBUG__
164 1 Print_Msg(" 中断寄存器数据是:");
165 1 Print_Hex(D12_interrupt_register.Register, 2);
166 1 Print_Msg("\r\n");
167 1 #endif
168 1 return 0;
169 1 }
170
171 //===============================================================================//
172 //== 函 数 名:select_endpoint
173 //== 功 能:选择端点
174 //== 说 明:
175 //== 时 间:2008.8.13 创建函数
176 //== 入口参数:endp:端点索引号(0-5)
177 //== 返 回 值:bit0--1表示缓冲区满,0表示缓冲区空
178 // bit1--1表示端点处于停止状态,0表示运行
179 //===============================================================================//
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 4
180 unsigned char select_endpoint(unsigned char endp)
181 {
182 1 unsigned char ret;
183 1 #ifdef __DEBUG__ //== 打印调试信息
184 1 Print_Msg("Runing select_endpoint()!\r\n");
185 1 #endif
186 1
187 1 write_D12_command(Select_EndPoint+endp);
188 1 ret = read_a_D12_data();
189 1
190 1 #ifdef __DEBUG__
191 1 Print_Msg(" 选择了端点:");
192 1 Print_Long(endp);
193 1 Print_Msg(" 端点状态:");
194 1 Print_Hex(&ret, 1);
195 1 Print_Msg("!\r\n");
196 1 #endif
197 1
198 1 return ret;
199 1 }
200
201 //===============================================================================//
202 //== 函 数 名:read_last_status
203 //== 功 能:读取端点最后处理状态,命令为0x40+endp
204 //== 说 明:该命令同时复位中断寄存器中的相应位,并将状态清零,表示已读取。
205 //== 时 间:2008.8.13 创建函数
206 //== 入口参数:endp:端点索引号(0-5)
207 //== 返 回 值:端点最后处理状态寄存器
208 //===============================================================================//
209 unsigned char read_last_status(unsigned char endp)
210 {
211 1 unsigned char ret;
212 1 #ifdef __DEBUG__ //== 打印调试信息
213 1 Print_Msg("Runing read_last_status()!\r\n");
214 1 #endif
215 1
216 1 write_D12_command(Read_Last_Status+endp);
217 1 ret = read_a_D12_data();
218 1
219 1 #ifdef __DEBUG__
220 1 Print_Msg(" 读取端点 ");
221 1 Print_Long(endp);
222 1 Print_Msg(" 最后处理状态状态,");
223 1 Print_Msg(" 端点状态是:");
224 1 Print_Hex(&ret, 1);
225 1 Print_Msg("!\r\n");
226 1 #endif
227 1
228 1 return ret;
229 1 }
230
231 //===============================================================================//
232 //== 函 数 名:set_endpoint_status
233 //== 功 能:设置端点状态,停止或运行端点,命令为0x40+endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -