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

📄 i2cbus.lst

📁 renasas m16c上实现iic通信的源代码.
💻 LST
📖 第 1 页 / 共 5 页
字号:
   154  0005C  9F03ED03              S  	or.b	#03h,P7			; 	SDA/SCL Hi-Z.
   155  00060  97FCEF03              S  	and.b	#0fch,PD7		;	Deacltivate I2C bus.   
   156  00064  B77D03                Z  	mov.b	#00h,U2C1		;		'
   157  00067  B77803                Z  	mov.b	#00h,U2MR		;		'
   158  0006A  B77703                Z  	mov.b	#00h,U2SMR		;		'
   159  0006D  C7807603              S  	mov.b	#80h,U2SMR2		;		'
   160  00071  B74A00                Z  	mov.b	#00h,STSPIC		;		'
   161  00074  B75000                Z  	mov.b	#00h,S2RIC		;		'
   162  00077  B4                    Z  	mov.b	#00h,R0L		;		'
   163  00078                           iic_stop_common:			;
   164  00078  EB33                     	popc	FLG				;	Pop flag register. 
   165                                  .if	DEBUG == 1				; 	---DEBUG---
   166  0007A  7E8F881F                 	bclr	0,dp			; 	---DEBUG---
   167                                  .endif						; 	---DEBUG---
   168  0007E  F3                       	rts						;
   169                                  ;;; ***************************************************************************
   170                                  ;;; ***************************************************************************
   171                                  ;;; unsigned char iic_mw_start(R0H,A0,R0L)
   172                                  ;;			Start Master Write on I2C bus.
   173                                  ;;			Variables;
   174                                  ;;				ROH:	Transmission data length.
   175                                  ;;				A0:		Data sram start address
   176                                  ;;				ROL: 	Target (ID) address.
   177                                  ;;			Return Values;
   178                                  ;;				0:		Master transmission started correctly.	
   179                                  ;;				1:		Cannot start master transmission.
   180                                  ;;; --------------------------------------------------------------------------
   181  0007F  04                       	.align					;
   182  00080                           _iic_mw_start:				;
   183                                  .if	DEBUG == 1				; --- DEBUG ---
   184  00080  7E9F891F                 	bset	1,dp			; --- DEBUG ---
   185                                  .endif						; --- DEBUG ---
   186  00084  EB32                     	pushc	FLG				;	Push Flag register on to stack.
* M16C FAMILY ASSEMBLER *   SOURCE LIST       Mon Sep 10 15:02:41 2001  PAGE 004

  SEQ.  LOC.   OBJ.              0XMSDA ....*....SOURCE STATEMENT....7....*....8....*....9....*....0....*....1....*....2....*....3....*....4

   187  00086  EB65                     	fclr	I				;	Disable interrupt.  
   188                                  ;;
   189  00088  070000r               S  	mov.b	R0H,mw_lng		;	Set master transmit data length.
   190  0008B  734F0000r                	mov.w	A0,mw_data		;	Set master transmit data address 
   191  0008F  EB05                     	fclr	C				;	Set Carry flag to ZERO "WRITE".
   192  00091  76A0                     	rolc.b	R0L				;	Shift "ROL" left; Carry --> to LSBit of R0L.
   193  00093  030000r               S  	mov.b	R0L,mw_target	;	Set target's  (ID) address.
   194                                  ;;
   195  00096  7EBFBA1B                 	btst	2,U2SMR			;	Bit test of Bus Busy flag. 
   196  0009A  685A                     	jc	m_Ereturn			;	Jump to master error return.
   197  0009C  C7020000r             S  	mov.b	#02h,m_iic		;	Else Set master transmit mode.
   198  000A0  FE23                  B  	jmp	m_start				;	Jump to Master Start Function. 
   199                                  ;;; ***************************************************************************
   200                                  ;;; ***************************************************************************
   201                                  ;;; unsigned char iic_mr_start(R0H,R2,R0L)
   202                                  ;;			Start Master Read on I2C bus. 
   203                                  ;;			Variables;
   204                                  ;;				ROH:	Receive data length.
   205                                  ;;				A0:		Receive data start address.
   206                                  ;;				ROL:	Receive target (ID) address
   207                                  ;;			Return Values;
   208                                  ;;				0:		Master Read started successfully. 
   209                                  ;;				1:		Cannot start master read. 
   210                                  ;;; --------------------------------------------------------------------------
   211                                  	.align					;
   212  000A2                           _iic_mr_start:				;
   213                                  .if	DEBUG == 1				; --- DEBUG ---
   214  000A2  7E9F8A1F                 	bset	2,dp			; --- DEBUG ---
   215                                  .endif						; --- DEBUG ---
   216  000A6  EB32                     	pushc	FLG				; Push Flag register on to stack.
   217  000A8  EB65                     	fclr	I				; Disable interrupts.
   218                                  ;;
   219  000AA  AB                       	dec.b	R0H				;  Decrement receive data length.
   220  000AB  070000r               S  	mov.b	R0H,mr_lng		;  Store receive data length. 
   221  000AE  734F0000r                	mov.w	A0,mr_data		;  Store receive target address.
   222  000B2  EB04                     	fset	C				;  Set carry in flag register to ONE "READ".
   223  000B4  76A0                     	rolc.b	R0L				;  Shift "ROL" left: Carry --> to LSBit	of R0L.
   224  000B6  030000r               S  	mov.b	R0L,mr_target	;  Store target's (ID) address. 
   225                                  ;;
   226  000B9  7EBFBA1B                 	btst	2,U2SMR			;  Bit test of Bus Busy flag.
   227  000BD  6837                     	jc	m_Ereturn			;  Jump to master error return.
   228  000BF  C7030000r             S  	mov.b	#03h,m_iic		;  Else set master receive mode. 
   229                                  ;;; --------------------------------------------------------------------------
   230                                  ;;	Master start write/read function;  Make Start.
   231                                  ;;; --------------------------------------------------------------------------
   232  000C3  04                       	.align					;
   233  000C4                           m_start:					;
   234                                  ;;
   235  000C4  7E8FFB1B                 	bclr	3,U2RB+1		; Reset Arbitration Lost detection flag. 	
   236  000C8  C301                  S  	mov.b	#01h,R0H		; Set Ninth bit to one.
   237  000CA  7E8FBC1B                 	bclr	4,U2SMR			; UART2 initialization denied.
   238  000CE  C78D7603              S  	mov.b	#8dh,U2SMR2		; Enable I2C "See page 30 of app. note".
   239  000D2  B77803                Z  	mov.b	#00h,U2MR		; Initialize "Serial I/O mode not valid(port control).
   240  000D5  7E8F681F                 	bclr	0,P7			; Set data output to low. 
   241  000D9  C7027803              S  	mov.b	#02h,U2MR		; Set Serial I/O mode to I2C mode. 
   242                                  							;
   243  000DD  730F7A03                 	mov.w	R0,U2TB			; Copy data to U2 Transmit buffer.
   244  000E1  7E9FB11B                 	bset	1,U2SMR2		; Enable Clock synchronous mode. 
   245  000E5  F50404                W  	jsr wait_4usec			; New delay counter July 1999 by Bruce Embry.	
   246  000E8  7E9FB51B                 	bset	5,U2SMR2		; Set SCL output to low.  
   247  000EC  F50904                W  	jsr wait_15usec			; New delay counter July 1999 by Bruce Embry
   248  000EF  7E8FB51B                 	bclr	5,U2SMR2		; Bit Clear SCL output to high. 
* M16C FAMILY ASSEMBLER *   SOURCE LIST       Mon Sep 10 15:02:41 2001  PAGE 005

  SEQ.  LOC.   OBJ.              0XMSDA ....*....SOURCE STATEMENT....7....*....8....*....9....*....0....*....1....*....2....*....3....*....4

   249                                  ;;; for C
   250  000F3  B4                    Z  	mov.b	#00h,R0L		; Return value to c-code, "0: Master started successfully."
   251  000F4  61                    S  	jmp	m_start_end			;
   252  000F5                           m_Ereturn:			;
   253  000F5  C401                  S  	mov.b	#01h,R0L		; Stop Master transmit.
   254  000F7                           m_start_end:				;
   255  000F7  EB33                     	popc	FLG				;
   256                                  .if	DEBUG == 1				; --- DEBUG ---
   257  000F9  B7F103                Z  	mov.b	#00h,dp			; --- DEBUG ---
   258                                  .endif						; --- DEBUG ---
   259  000FC  F3                       	rts						; Return sub-routine.
   260                                  ;;; ***************************************************************************
   261                                  ;;; ***************************************************************************
   262                                  ;;	I2C Stop/Start function; Detect interrupt:  Bus Collision detection interrupt.
   263                                  ;;; ---------------------------------------------------------------------------
   264  000FD  04                       	.align					;
   265  000FE                           stsp_int:					;
   266                                  .if	DEBUG == 1				; --- DEBUG ---
   267  000FE  7E9F8D1F                 	bset	5,dp			; --- DEBUG ---
   268                                  .endif						; --- DEBUG ---
   269  00102  7442                     	push.b	R1L				; Place R1L on to Stack. 
   270  00104  9F035000              S  	or.b	#S2RIPL,S2RIC	; clear interrupt status register. 
   271  00108  7EBFBA1B                 	btst	2,U2SMR			; Bit test 
   272  0010C  6A11                     	jz	stop_int			; Jump if BBS = 1
   273                                  ;;; ----------------------------------------------------------------------------
   274                                  ;;	If Bus Busy Flag == 0 Continue with start-int.
   275                                  ;;; ----------------------------------------------------------------------------
   276  0010E                           start_int:					;
   277  0010E  B74A00                Z  	mov.b	#00h,STSPIC		; Disable Start Stop interrupt request. 
   278  00111  7EBF0000r                	btst	1,m_iic			; Test for master / slave operation.
   279  00115  6A37                     	jz	stsp_int_end		; Jump if master. 
   280  00117                           start_int10:				;
   281                                  ;;
   282                                  ;;
   283  00117  F59003                W  	jsr	make_stop			;  Jump to make_stop and return. 
   284  0011A  D842                  Q  	mov.b	#04h,R1L		;  Status return value: "Improper Start Condition Detected."
   285  0011C  FE16                  B  	jmp	stsp_common_master
   286                                  ;;; ----------------------------------------------------------------------------
   287                                  ;;
   288                                  ;;; ----------------------------------------------------------------------------
   289                                  	.align					;
   290  0011E                           stop_int:					;
   291  0011E  B74A00                Z  	mov.b	#00h,STSPIC		; Disable interrupt.
   292  00121  C7D17603              S  	mov.b	#0d1h,U2SMR2	;
   293  00125  E7000000r             S  	cmp.b	#00h,m_iic		; Set I2C bus mode condition to "Wait mode stop to start con
   294  00129  6A23                     	jeq	stsp_int_end		;
   295  0012B                           stop_int10:					;
   296                                  ;;; ----------------------------
   297  0012B  7EBF0000r                	btst	1,m_iic			; Test for Master mode. 
   298  0012F  6A1D                     	jz	stsp_int_end		; If not master mode jump to stsp_int_end. 
   299                                  ;;
   300                                  ;;							 Master mode
   301  00131  D852                  Q  	mov.b	#05h,R1L		;
   302                                  ;;; ------------------------------------------------------------------------------
   303                                  ;;	Master common function. 
   304                                  ;;; ------------------------------------------------------------------------------
   305  00133                           stsp_common_master:			;
   306  00133  744F0000r                	push.b	md_cnt			; Push Master Receive Data Count on to stack. 
   307                                  	;
   308  00137  7EBF0000r                	btst	0,m_iic			; Bit test for Read or Write mode. 
   309  0013B  6806                     	jc	stsp_common_master10 ; If Read
   310                                  	;; W

⌨️ 快捷键说明

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