📄 ch375.lst
字号:
1 .file "CH375.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __tmp_reg__ = 0
6 __zero_reg__ = 1
7 .global __do_copy_data
8 .global __do_clear_bss
10 .text
11 .Ltext0:
73 .global CH375_DelayNms
75 CH375_DelayNms:
1:CH375\CH375.c **** /*****************************************************/
2:CH375\CH375.c **** /* File name : CH375.c */
3:CH375\CH375.c **** /* Description : Code for CH375 usb host , use internal firmware */
4:CH375\CH375.c **** /* Platform : AVRStudio4.13 + WinAVR20070525 for AVR */
5:CH375\CH375.c **** /* Author : Michael Zhang - 章其波 */
6:CH375\CH375.c **** /* Email : sudazqb@163.com */
7:CH375\CH375.c **** /* MSN : zhangqibo_1985@hotmail.com */
8:CH375\CH375.c **** /* Date : 2007-10-21 */
9:CH375\CH375.c **** /* NOT FOR COMMERCIAL USE, ALL RIGHT RESERVED! */
10:CH375\CH375.c **** /*****************************************************/
11:CH375\CH375.c **** /* Change Log: */
12:CH375\CH375.c **** /* 20071021: original version (from old version) */
13:CH375\CH375.c **** /*****************************************************/
14:CH375\CH375.c ****
15:CH375\CH375.c ****
16:CH375\CH375.c ****
17:CH375\CH375.c **** #include"ch375.h"
18:CH375\CH375.c **** #include<util/delay.h>
19:CH375\CH375.c ****
20:CH375\CH375.c **** /*
21:CH375\CH375.c **** #define CH375_WR_H CH375_WR_PORT |= 1<<CH375_WR_BIT
22:CH375\CH375.c **** #define CH375_WR_L CH375_WR_PORT &= ~(1<<CH375_WR_BIT)
23:CH375\CH375.c ****
24:CH375\CH375.c **** #define CH375_RD_H CH375_WR_PORT |= 1<<CH375_RD_BIT
25:CH375\CH375.c **** #define CH375_RD_L CH375_RD_PORT &= ~(1<<CH375_RD_BIT)
26:CH375\CH375.c ****
27:CH375\CH375.c **** #define CH375_A0_H CH375_A0_PORT |= 1<<CH375_A0_BIT
28:CH375\CH375.c **** #define CH375_A0_L CH375_A0_PORT &= ~(1<<CH375_A0_BIT)
29:CH375\CH375.c ****
30:CH375\CH375.c **** #define CH375_CS_H CH375_CS_PORT |= 1<<CH375_CS_BIT
31:CH375\CH375.c **** #define CH375_CS_L CH375_CS_PORT &= ~(1<<CH375_CS_BIT)
32:CH375\CH375.c ****
33:CH375\CH375.c **** #define CH375_INT_ACTIVE (CH375_INT_PIN &= 1<<CH375_INT_BIT) == 0
34:CH375\CH375.c ****
35:CH375\CH375.c **** #define CH375_TO_MCU CH375_DDR = 0x00
36:CH375\CH375.c **** #define MCU_TO_CH375 CH375_DDR = 0xff
37:CH375\CH375.c ****
38:CH375\CH375.c **** #define CH375_DAT_OUT CH375_PIN
39:CH375\CH375.c **** #define CH375_DAT_IN CH375_PORT
40:CH375\CH375.c **** */
41:CH375\CH375.c ****
42:CH375\CH375.c ****
43:CH375\CH375.c ****
44:CH375\CH375.c **** void CH375_DelayNms(uint16 n)//不精确
45:CH375\CH375.c **** {
76 rologue end (size=0) */
77 movw r18,r24
78 rjmp .L2
79 .L3:
80 .LBB40:
81 0000 9C01 .LBB41:
82 0002 00C0 .LBB42:
83 .LBB43:
85 .Ltext1:
87 .LM1:
88 ldi r24,lo8(2000)
89 ldi r25,hi8(2000)
1:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch
3:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** All rights reserved.
4:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
5:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without
6:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met:
7:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
8:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright
9:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer.
10:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
11:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright
12:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in
13:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the
14:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** distribution.
15:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
16:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of
17:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived
18:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** from this software without specific prior written permission.
19:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
20:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */
31:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
32:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */
33:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
34:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
35:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
36:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
37:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #include <inttypes.h>
38:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
39:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \file */
40:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
41:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** \code
42:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #include <util/delay_basic.h>
43:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** \endcode
44:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
45:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops
46:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to
47:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are
48:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle
49:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can
50:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the
51:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** functions described here do not disable interrupts.
52:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
53:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is
54:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for
55:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is
56:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the
57:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared
58:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** to the overall delay time.
59:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
60:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms.
61:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
62:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
63:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
64:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
65:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
66:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
67:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #endif
68:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
69:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
70:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
71:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256
72:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed
73:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not
74:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter
75:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** register.
76:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
77:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
78:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** can be achieved.
79:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
80:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** void
81:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
82:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** {
83:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** __asm__ volatile (
84:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** "1: dec %0" "\n\t"
85:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** "brne 1b"
86:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** : "=r" (__count)
87:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** : "0" (__count)
88:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** );
89:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** }
90:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
91:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
92:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
93:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
94:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** iterations are possible. (The value 65536 would have to be
95:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** passed as 0.) The loop executes four CPU cycles per iteration,
96:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** not including the overhead the compiler requires to setup the
97:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** counter register pair.
98:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
99:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
100:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** milliseconds can be achieved.
101:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
102:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** void
103:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** _delay_loop_2(uint16_t __count)
104:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** {
105:d:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** __asm__ volatile (
90 sbiw r24,1
91 brne 1b
92 0004 80ED /* #NOAPP */
93 0006 97E0 .L2:
94 .LBE43:
95 0008 0197 .LBE42:
96 000a 01F4 .LBE41:
97 .LBE40:
99 .Ltext2:
101 .LM2:
102 subi r18,lo8(-(-1))
103 sbci r19,hi8(-(-1))
104 ldi r24,hi8(-1)
46:CH375\CH375.c **** while(n--) _delay_ms(1);
105 )
106 cpc r19,r24
107 000c 2150 brne .L3
108 000e 3040 /* epilogue: frame size=0 */
109 0010 8FEF ret
110 0012 2F3F /* epilogue end (size=1) */
111 0014 3807 /* function CH375_DelayNms size 15 (14) */
116 .Lscope1:
119 .global CH375_WriteCMD
121 CH375_WriteCMD:
123 .LM3:
124 .LFBB2:
125 /* prologue: frame size=0 */
126 /* prologue end (size=0) */
47:CH375\CH375.c **** }
48:CH375\CH375.c ****
49:CH375\CH375.c ****
50:CH375\CH375.c **** //CH375写命令
51:CH375\CH375.c **** void CH375_WriteCMD(uint8 _CMD)
52:CH375\CH375.c **** {
127 LFBB2
128 .LM4:
129 ldi r25,lo8(-1)
130 out 49-0x20,r25
53:CH375\CH375.c **** //CH375_CS_L(); //使能芯片
54:CH375\CH375.c **** MCU_TO_CH375;
132
133 ldi r30,lo8(101)
134 001a 9FEF ldi r31,hi8(101)
135 001c 91BB ld r25,Z
55:CH375\CH375.c **** CH375_A0_H;
136 i r25,lo8(2)
137 st Z,r25
139 0020 F0E0 .LM6:
140 0022 9081 out 50-0x20,r24
142 0026 9083 .LM7:
56:CH375\CH375.c **** CH375_DAT_IN = _CMD;
143 ,Z
144 andi r24,lo8(-17)
145 0028 82BB st Z,r24
57:CH375\CH375.c **** CH375_WR_L;
146 tabn 68,0,58,.LM8-.LFBB2
147 .LM8:
148 002a 8081 /* #APP */
149 002c 8F7E nop;
58:CH375\CH375.c **** asm("nop;");
151
152 nop;
154 0030 0000 .LM10:
59:CH375\CH375.c **** asm("nop;");
155 #NOAPP */
156 ld r24,Z
157 0032 0000 ori r24,lo8(16)
60:CH375\CH375.c **** //asm("nop;");
61:CH375\CH375.c **** //asm("nop;");
62:CH375\CH375.c **** CH375_WR_H;
158 Z,r24
159 .LBB44:
160 .LBB45:
161 0034 8081 .LBB46:
162 0036 8061 .LBB47:
164 .Ltext3:
166 .LM11:
167 ldi r24,lo8(2)
168 /* #APP */
169 1: dec r24
170 brne 1b
171 /* #NOAPP */
172 003a 82E0 .LBE47:
173 .LBE46:
174 003c 8A95 .LBE45:
175 003e 01F4 .LBE44:
176 /* epilogue: frame size=0 */
177 ret
178 /* epilogue end (size=1) */
179 /* function CH375_WriteCMD size 24 (23) */
184 .Lscope2:
187 .global CH375_WriteDAT
189 CH375_WriteDAT:
191 .Ltext4:
193 .LM12:
194 .LFBB3:
195 /* prologue: frame size=0 */
196 /* prologue end (size=0) */
63:CH375\CH375.c **** _delay_us(1);
64:CH375\CH375.c **** }
65:CH375\CH375.c ****
66:CH375\CH375.c **** //CH375写数据
67:CH375\CH375.c **** void CH375_WriteDAT(uint8 _DAT)
68:CH375\CH375.c **** {
197 i r25,lo8(-1)
198 out 49-0x20,r25
200 .LM14:
201 ldi r30,lo8(101)
69:CH375\CH375.c **** //CH375_CS_L();
70:CH375\CH375.c **** MCU_TO_CH375;
202 r31,hi8(101)
203 ld r25,Z
204 0042 9FEF andi r25,lo8(-3)
205 0044 91BB st Z,r25
71:CH375\CH375.c **** CH375_A0_L;
206 abn 68,0,72,.LM15-.LFBB3
207 .LM15:
208 0046 E5E6 out 50-0x20,r24
210 004a 9081 .LM16:
211 004c 9D7F ld r24,Z
212 004e 9083 andi r24,lo8(-17)
72:CH375\CH375.c **** CH375_DAT_IN = _DAT;
213 24
215 0050 82BB .LM17:
73:CH375\CH375.c **** CH375_WR_L;
216 #APP */
217 nop;
219 0054 8F7E .LM18:
220 0056 8083 nop;
74:CH375\CH375.c **** asm("nop;");
221 bn 68,0,78,.LM19-.LFBB3
222 .LM19:
223 /* #NOAPP */
224 0058 0000 ld r24,Z
75:CH375\CH375.c **** asm("nop;");
225 r24,lo8(16)
226 st Z,r24
227 005a 0000 /* epilogue: frame size=0 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -