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

📄 iic_avr.lst

📁 串口转发IIC程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
   1               		.file	"IIC_AVR.c"
   2               		.arch atmega16
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  55               	.global	IIC_BaudrateConfig
  56               		.data
  59               	IIC_BaudrateConfig:
  60 0000 0C        		.byte	12
  61 0001 00        		.byte	0
  62 0002 20        		.byte	32
  63 0003 00        		.byte	0
  64               		.text
  68               	.global	IIC_Init
  70               	IIC_Init:
   1:IIC_AVR.c     **** ///////////////////////////////////////////
   2:IIC_AVR.c     **** //		IIC_AVR.C
   3:IIC_AVR.c     **** //	Function:	IIC driver for atmel mega16
   4:IIC_AVR.c     **** //	Create : Guobg 
   5:IIC_AVR.c     **** //	Date :	20060113
   6:IIC_AVR.c     **** //	Revision:	0.0
   7:IIC_AVR.c     **** ///////////////////////////////////////////
   8:IIC_AVR.c     **** //	Modify History
   9:IIC_AVR.c     **** //
  10:IIC_AVR.c     **** ///////////////////////////////////////////
  11:IIC_AVR.c     **** #include "IIC_AVR.H"
  12:IIC_AVR.c     **** 
  13:IIC_AVR.c     **** struct IIC_BUFFER IIC_Buffer_In;		// IIC Input Buffer
  14:IIC_AVR.c     **** struct IIC_BUFFER IIC_Buffer_Out;		// IIC Output Buffer
  15:IIC_AVR.c     **** //U8 ucIICSLA;					// IIC Master Mode Destination Address,R/W
  16:IIC_AVR.c     **** U8 ucIICTimeoutCount;			// IIC Time out counter
  17:IIC_AVR.c     **** U8 ucIICMode;					// IIC Mode
  18:IIC_AVR.c     **** U8 ucIICError;					// IIC Error code
  19:IIC_AVR.c     **** 
  20:IIC_AVR.c     **** U8 ucIICAddress;				// Myself IIC Address
  21:IIC_AVR.c     **** 
  22:IIC_AVR.c     **** 
  23:IIC_AVR.c     **** BP_CODE U8 IIC_BaudrateConfig[2][2] =
  24:IIC_AVR.c     **** {
  25:IIC_AVR.c     **** 	{
  26:IIC_AVR.c     **** 		IIC_BAUDRATE_TWBR_200K, IIC_BAUDRATE_TWPS_NODIV
  27:IIC_AVR.c     **** 	}
  28:IIC_AVR.c     **** 	,  // Config for 200K
  29:IIC_AVR.c     **** 	{
  30:IIC_AVR.c     **** 		IIC_BAUDRATE_TWBR_100K, IIC_BAUDRATE_TWPS_NODIV
  31:IIC_AVR.c     **** 	} // Config for 100K
  32:IIC_AVR.c     **** };
  33:IIC_AVR.c     **** 
  34:IIC_AVR.c     **** 
  35:IIC_AVR.c     **** ///////////////////////////////////////////
  36:IIC_AVR.c     **** //		IIC_Init
  37:IIC_AVR.c     **** //	Function:	Initlize IIC interface
  38:IIC_AVR.c     **** //	Input:	
  39:IIC_AVR.c     **** //		ucSlaveAddr: SlaveAddr (1--127)
  40:IIC_AVR.c     **** //		ucBaudrate:	 Baudrate index see IIC.H
  41:IIC_AVR.c     **** //	Output:
  42:IIC_AVR.c     **** //		NONE
  43:IIC_AVR.c     **** ///////////////////////////////////////////
  44:IIC_AVR.c     **** void IIC_Init(U8 ucSlaveAddr,U8 ucBaudrate)
  45:IIC_AVR.c     **** {
  72               	.LM1:
  73               	/* prologue: frame size=3 */
  74 0000 CF93      		push r28
  75 0002 DF93      		push r29
  76 0004 CDB7      		in r28,__SP_L__
  77 0006 DEB7      		in r29,__SP_H__
  78 0008 2397      		sbiw r28,3
  79 000a 0FB6      		in __tmp_reg__,__SREG__
  80 000c F894      		cli
  81 000e DEBF      		out __SP_H__,r29
  82 0010 0FBE      		out __SREG__,__tmp_reg__
  83 0012 CDBF      		out __SP_L__,r28
  84               	/* prologue end (size=10) */
  85 0014 8983      		std Y+1,r24
  86 0016 6A83      		std Y+2,r22
  46:IIC_AVR.c     **** 	unsigned char i;
  47:IIC_AVR.c     **** 	//Initlize baudrate
  48:IIC_AVR.c     **** 	TWBR=IIC_BaudrateConfig[ucBaudrate][0];
  88               	.LM2:
  89 0018 8A81      		ldd r24,Y+2
  90 001a 282F      		mov r18,r24
  91 001c 3327      		clr r19
  92 001e C901      		movw r24,r18
  93 0020 820F      		add r24,r18
  94 0022 931F      		adc r25,r19
  95 0024 FC01      		movw r30,r24
  96 0026 E050      		subi r30,lo8(-(IIC_BaudrateConfig))
  97 0028 F040      		sbci r31,hi8(-(IIC_BaudrateConfig))
  98 002a 8081      		ld r24,Z
  99 002c 8093 2000 		sts 32,r24
  49:IIC_AVR.c     **** 	TWSR=IIC_BaudrateConfig[ucBaudrate][1];
 101               	.LM3:
 102 0030 8A81      		ldd r24,Y+2
 103 0032 282F      		mov r18,r24
 104 0034 3327      		clr r19
 105 0036 C901      		movw r24,r18
 106 0038 820F      		add r24,r18
 107 003a 931F      		adc r25,r19
 108 003c FC01      		movw r30,r24
 109 003e E050      		subi r30,lo8(-(IIC_BaudrateConfig+1))
 110 0040 F040      		sbci r31,hi8(-(IIC_BaudrateConfig+1))
 111 0042 8081      		ld r24,Z
 112 0044 8093 2100 		sts 33,r24
  50:IIC_AVR.c     **** 
  51:IIC_AVR.c     **** 	//Set IIC Slave address, enable broadcast respond
  52:IIC_AVR.c     **** 	TWAR=(ucSlaveAddr<<1 | _BV(TWGCE));
 114               	.LM4:
 115 0048 8981      		ldd r24,Y+1
 116 004a 9927      		clr r25
 117 004c 880F      		lsl r24
 118 004e 991F      		rol r25
 119 0050 8160      		ori r24,lo8(1)
 120 0052 8093 2200 		sts 34,r24
  53:IIC_AVR.c     **** 
  54:IIC_AVR.c     **** 	ucIICMode=IIC_MODE_SLAVE_RECEIVE;	//Default mode
 122               	.LM5:
 123 0056 81E0      		ldi r24,lo8(1)
 124 0058 8093 0000 		sts ucIICMode,r24
  55:IIC_AVR.c     **** 	ucIICError=IIC_ERROR_NOERROR;
 126               	.LM6:
 127 005c 1092 0000 		sts ucIICError,__zero_reg__
  56:IIC_AVR.c     **** 
  57:IIC_AVR.c     **** 	//Clear IIC buffer
  58:IIC_AVR.c     **** 	for(i=0;i<IIC_MAX_BUFFER_LEN;i++)
 129               	.LM7:
 130 0060 1B82      		std Y+3,__zero_reg__
 131               	.L2:
 133               	.LM8:
 134 0062 8B81      		ldd r24,Y+3
 135 0064 8031      		cpi r24,lo8(16)
 136 0066 80F4      		brsh .L3
  59:IIC_AVR.c     **** 	{
  60:IIC_AVR.c     **** 		IIC_Buffer_In.IIC_BUFFER_UNION.ucData[i]=0;
 138               	.LM9:
 139 0068 8B81      		ldd r24,Y+3
 140 006a 9927      		clr r25
 141 006c FC01      		movw r30,r24
 142 006e E050      		subi r30,lo8(-(IIC_Buffer_In))
 143 0070 F040      		sbci r31,hi8(-(IIC_Buffer_In))
 144 0072 1082      		st Z,__zero_reg__
  61:IIC_AVR.c     **** 		IIC_Buffer_Out.IIC_BUFFER_UNION.ucData[i]=0;
 146               	.LM10:
 147 0074 8B81      		ldd r24,Y+3
 148 0076 9927      		clr r25
 149 0078 FC01      		movw r30,r24
 150 007a E050      		subi r30,lo8(-(IIC_Buffer_Out))
 151 007c F040      		sbci r31,hi8(-(IIC_Buffer_Out))
 152 007e 1082      		st Z,__zero_reg__
 154               	.LM11:
 155 0080 8B81      		ldd r24,Y+3
 156 0082 8F5F      		subi r24,lo8(-(1))
 157 0084 8B83      		std Y+3,r24
 158 0086 EDCF      		rjmp .L2
 159               	.L3:
  62:IIC_AVR.c     **** 	}
  63:IIC_AVR.c     **** 
  64:IIC_AVR.c     **** 	//Clear buffer status
  65:IIC_AVR.c     **** 	IIC_Buffer_In.ucReadP=0;
 161               	.LM12:
 162 0088 1092 0000 		sts IIC_Buffer_In+17,__zero_reg__
  66:IIC_AVR.c     **** 	IIC_Buffer_In.ucWriteP=0;
 164               	.LM13:
 165 008c 1092 0000 		sts IIC_Buffer_In+16,__zero_reg__
  67:IIC_AVR.c     **** 	IIC_Buffer_In.ucIICBufferStatus.bEnAccess=0;	//In Buffer Disable Access
 167               	.LM14:
 168 0090 8091 0000 		lds r24,IIC_Buffer_In+19
 169 0094 8E7F      		andi r24,lo8(-2)
 170 0096 8093 0000 		sts IIC_Buffer_In+19,r24
  68:IIC_AVR.c     **** 
  69:IIC_AVR.c     **** 	IIC_Buffer_Out.ucReadP=0;
 172               	.LM15:
 173 009a 1092 0000 		sts IIC_Buffer_Out+17,__zero_reg__
  70:IIC_AVR.c     **** 	IIC_Buffer_Out.ucWriteP=0;
 175               	.LM16:
 176 009e 1092 0000 		sts IIC_Buffer_Out+16,__zero_reg__
  71:IIC_AVR.c     **** 	IIC_Buffer_Out.ucIICBufferStatus.bEnAccess=1;//Out Buffer Enable Access	
 178               	.LM17:
 179 00a2 8091 0000 		lds r24,IIC_Buffer_Out+19
 180 00a6 8160      		ori r24,lo8(1)
 181 00a8 8093 0000 		sts IIC_Buffer_Out+19,r24
  72:IIC_AVR.c     **** 
  73:IIC_AVR.c     **** 	// Clear TWINT , enabel TWI ack ,enable TWI port ,enable TWI Interrupt
  74:IIC_AVR.c     **** 	TWCR=(_BV(TWINT) | _BV(TWEA) | _BV(TWEN) | _BV(TWIE) );
 183               	.LM18:
 184 00ac 85EC      		ldi r24,lo8(-59)
 185 00ae 8093 5600 		sts 86,r24
 186               	/* epilogue: frame size=3 */
 187 00b2 2396      		adiw r28,3
 188 00b4 0FB6      		in __tmp_reg__,__SREG__
 189 00b6 F894      		cli
 190 00b8 DEBF      		out __SP_H__,r29
 191 00ba 0FBE      		out __SREG__,__tmp_reg__
 192 00bc CDBF      		out __SP_L__,r28
 193 00be DF91      		pop r29
 194 00c0 CF91      		pop r28
 195 00c2 0895      		ret
 196               	/* epilogue end (size=9) */
 197               	/* function IIC_Init size 98 (79) */
 201               	.global	__vector_17
 203               	__vector_17:
  75:IIC_AVR.c     **** }
  76:IIC_AVR.c     **** 
  77:IIC_AVR.c     **** 
  78:IIC_AVR.c     **** ///////////////////////////////////////////
  79:IIC_AVR.c     **** //		IIC_handle
  80:IIC_AVR.c     **** //	Function:	IIC Interrupt handler
  81:IIC_AVR.c     **** //	Input:	
  82:IIC_AVR.c     **** //		NONE
  83:IIC_AVR.c     **** //	Output:
  84:IIC_AVR.c     **** //		NONE
  85:IIC_AVR.c     **** ///////////////////////////////////////////
  86:IIC_AVR.c     **** #ifdef ICC_AVR
  87:IIC_AVR.c     **** void IIC_handler(void)
  88:IIC_AVR.c     **** #endif
  89:IIC_AVR.c     **** #ifdef GCC_AVR
  90:IIC_AVR.c     **** SIGNAL(SIG_2WIRE_SERIAL)
  91:IIC_AVR.c     **** #endif
  92:IIC_AVR.c     **** {
 205               	.LM19:
 206               	/* prologue: frame size=3 */
 207 00c4 1F92      		push __zero_reg__
 208 00c6 0F92      		push __tmp_reg__
 209 00c8 0FB6      		in __tmp_reg__,__SREG__
 210 00ca 0F92      		push __tmp_reg__
 211 00cc 1124      		clr __zero_reg__
 212 00ce 2F93      		push r18
 213 00d0 3F93      		push r19
 214 00d2 8F93      		push r24
 215 00d4 9F93      		push r25
 216 00d6 AF93      		push r26
 217 00d8 BF93      		push r27
 218 00da EF93      		push r30
 219 00dc FF93      		push r31
 220 00de CF93      		push r28
 221 00e0 DF93      		push r29
 222 00e2 CDB7      		in r28,__SP_L__
 223 00e4 DEB7      		in r29,__SP_H__
 224 00e6 2397      		sbiw r28,3
 225 00e8 DEBF      		out __SP_H__,r29
 226 00ea CDBF      		out __SP_L__,r28
 227               	/* prologue end (size=20) */
  93:IIC_AVR.c     **** 	U8 ucTwiStatus;
  94:IIC_AVR.c     **** 	ucTwiStatus = (TWSR & TW_NO_INFO); 
 229               	.LM20:
 230 00ec 98EF      		ldi r25,lo8(-8)
 231 00ee 8091 2100 		lds r24,33
 232 00f2 8923      		and r24,r25
 233 00f4 8983      		std Y+1,r24
  95:IIC_AVR.c     **** 	switch(ucTwiStatus)
 235               	.LM21:
 236 00f6 8981      		ldd r24,Y+1
 237 00f8 282F      		mov r18,r24
 238 00fa 3327      		clr r19
 239 00fc 2A83      		std Y+2,r18
 240 00fe 3B83      		std Y+3,r19
 241 0100 8A81      		ldd r24,Y+2
 242 0102 9B81      		ldd r25,Y+3
 243 0104 8836      		cpi r24,104
 244 0106 9105      		cpc r25,__zero_reg__
 245 0108 09F4      		brne .+2
 246 010a 54C1      		rjmp .L21
 248               	.LM22:
 249 010c 2A81      		ldd r18,Y+2
 250 010e 3B81      		ldd r19,Y+3
 251 0110 2936      		cpi r18,105
 252 0112 3105      		cpc r19,__zero_reg__
 253 0114 0CF0      		brlt .+2
 254 0116 61C0      		rjmp .L47
 255 0118 8A81      		ldd r24,Y+2
 256 011a 9B81      		ldd r25,Y+3
 257 011c 8033      		cpi r24,48
 258 011e 9105      		cpc r25,__zero_reg__
 259 0120 09F4      		brne .+2
 260 0122 10C1      		rjmp .L14
 261 0124 2A81      		ldd r18,Y+2
 262 0126 3B81      		ldd r19,Y+3
 263 0128 2133      		cpi r18,49
 264 012a 3105      		cpc r19,__zero_reg__
 265 012c 2CF5      		brge .L48
 266 012e 8A81      		ldd r24,Y+2
 267 0130 9B81      		ldd r25,Y+3
 268 0132 8831      		cpi r24,24
 269 0134 9105      		cpc r25,__zero_reg__
 270 0136 09F4      		brne .+2
 271 0138 C0C0      		rjmp .L10
 272 013a 2A81      		ldd r18,Y+2
 273 013c 3B81      		ldd r19,Y+3
 274 013e 2931      		cpi r18,25
 275 0140 3105      		cpc r19,__zero_reg__
 276 0142 6CF4      		brge .L49
 277 0144 8A81      		ldd r24,Y+2
 278 0146 9B81      		ldd r25,Y+3
 279 0148 8830      		cpi r24,8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -