⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375.lst

📁 CH375芯片设置驱动源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
   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 + -