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

📄 stm8s_i2c.ls

📁 STM8-触摸例程
💻 LS
📖 第 1 页 / 共 3 页
字号:
   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Generator V4.2.8 - 03 Dec 2008
   3                     ; Optimizer V4.2.8 - 03 Dec 2008
  33                     ; 64 void I2C_DeInit(void)
  33                     ; 65 {
  35                     	switch	.text
  36  0000               _I2C_DeInit:
  40                     ; 66   I2C->CR1 = I2C_CR1_RESET_VALUE;
  42  0000 725f5210      	clr	21008
  43                     ; 67   I2C->CR2 = I2C_CR2_RESET_VALUE;
  45  0004 725f5211      	clr	21009
  46                     ; 68   I2C->FREQR = I2C_FREQR_RESET_VALUE;
  48  0008 725f5212      	clr	21010
  49                     ; 69   I2C->OARL = I2C_OARL_RESET_VALUE;
  51  000c 725f5213      	clr	21011
  52                     ; 70   I2C->OARH = I2C_OARH_RESET_VALUE;
  54  0010 725f5214      	clr	21012
  55                     ; 71   I2C->ITR = I2C_ITR_RESET_VALUE;
  57  0014 725f521a      	clr	21018
  58                     ; 72   I2C->CCRL = I2C_CCRL_RESET_VALUE;
  60  0018 725f521b      	clr	21019
  61                     ; 73   I2C->CCRH = I2C_CCRH_RESET_VALUE;
  63  001c 725f521c      	clr	21020
  64                     ; 74   I2C->TRISER = I2C_TRISER_RESET_VALUE;
  66  0020 3502521d      	mov	21021,#2
  67                     ; 75 }
  70  0024 81            	ret	
 249                     .const:	section	.text
 250  0000               L01:
 251  0000 000186a1      	dc.l	100001
 252  0004               L21:
 253  0004 000f4240      	dc.l	1000000
 254                     ; 99 void I2C_Init(u32 OutputClockFrequencyHz, u16 OwnAddress, I2C_DutyCycle_TypeDef DutyCycle, I2C_Ack_TypeDef Ack, I2C_AddMode_TypeDef AddMode, u8 InputClockFrequencyMHz )
 254                     ; 100 {
 255                     	switch	.text
 256  0025               _I2C_Init:
 258  0025 5209          	subw	sp,#9
 259       00000009      OFST:	set	9
 262                     ; 101   u16 result = 0x0004;
 264                     ; 102   u16 tmpval = 0;
 266                     ; 103   u8 tmpccrh = 0;
 268  0027 0f07          	clr	(OFST-2,sp)
 269                     ; 106   assert_param(IS_I2C_ACK_OK(Ack));
 271                     ; 107   assert_param(IS_I2C_ADDMODE_OK(AddMode));
 273                     ; 108   assert_param(IS_I2C_OWN_ADDRESS_OK(OwnAddress));
 275                     ; 109   assert_param(IS_I2C_INPUT_CLOCK_FREQ_OK(InputClockFrequencyMHz));
 277                     ; 110   assert_param(IS_I2C_OUTPUT_CLOCK_FREQ_OK(OutputClockFrequencyHz));
 279                     ; 115   I2C->FREQR &= (u8)(~I2C_FREQR_FREQ);
 281  0029 c65212        	ld	a,21010
 282  002c a4c0          	and	a,#192
 283  002e c75212        	ld	21010,a
 284                     ; 117   I2C->FREQR |= InputClockFrequencyMHz;
 286  0031 c65212        	ld	a,21010
 287  0034 1a15          	or	a,(OFST+12,sp)
 288  0036 c75212        	ld	21010,a
 289                     ; 121   I2C->CR1 &= (u8)(~I2C_CR1_PE);
 291  0039 72115210      	bres	21008,#0
 292                     ; 124   I2C->CCRH &= (u8)(~(I2C_CCRH_FS | I2C_CCRH_DUTY | I2C_CCRH_CCR));
 294  003d c6521c        	ld	a,21020
 295  0040 a430          	and	a,#48
 296  0042 c7521c        	ld	21020,a
 297                     ; 125   I2C->CCRL &= (u8)(~I2C_CCRL_CCR);
 299  0045 725f521b      	clr	21019
 300                     ; 128   if (OutputClockFrequencyHz > I2C_MAX_STANDARD_FREQ) /* FAST MODE */
 302  0049 96            	ldw	x,sp
 303  004a 1c000c        	addw	x,#OFST+3
 304  004d cd0000        	call	c_ltor
 306  0050 ae0000        	ldw	x,#L01
 307  0053 cd0000        	call	c_lcmp
 309  0056 257c          	jrult	L131
 310                     ; 131     tmpccrh = I2C_CCRH_FS;
 312  0058 a680          	ld	a,#128
 313  005a 6b07          	ld	(OFST-2,sp),a
 314                     ; 133     if (DutyCycle == I2C_DUTYCYCLE_2)
 316  005c 96            	ldw	x,sp
 317  005d 0d12          	tnz	(OFST+9,sp)
 318  005f 262b          	jrne	L331
 319                     ; 136       result = (u16) ((InputClockFrequencyMHz * 1000000) / (OutputClockFrequencyHz * 3));
 321  0061 1c000c        	addw	x,#OFST+3
 322  0064 cd0000        	call	c_ltor
 324  0067 a603          	ld	a,#3
 325  0069 cd0000        	call	c_smul
 327  006c 96            	ldw	x,sp
 328  006d 5c            	incw	x
 329  006e cd0000        	call	c_rtol
 331  0071 7b15          	ld	a,(OFST+12,sp)
 332  0073 b703          	ld	c_lreg+3,a
 333  0075 3f02          	clr	c_lreg+2
 334  0077 3f01          	clr	c_lreg+1
 335  0079 3f00          	clr	c_lreg
 336  007b ae0004        	ldw	x,#L21
 337  007e cd0000        	call	c_lmul
 339  0081 96            	ldw	x,sp
 340  0082 5c            	incw	x
 341  0083 cd0000        	call	c_ludv
 343  0086 be02          	ldw	x,c_lreg+2
 344  0088 1f08          	ldw	(OFST-1,sp),x
 346  008a 202f          	jra	L531
 347  008c               L331:
 348                     ; 141       result = (u16) ((InputClockFrequencyMHz * 1000000) / (OutputClockFrequencyHz * 25));
 350  008c 1c000c        	addw	x,#OFST+3
 351  008f cd0000        	call	c_ltor
 353  0092 a619          	ld	a,#25
 354  0094 cd0000        	call	c_smul
 356  0097 96            	ldw	x,sp
 357  0098 5c            	incw	x
 358  0099 cd0000        	call	c_rtol
 360  009c 7b15          	ld	a,(OFST+12,sp)
 361  009e b703          	ld	c_lreg+3,a
 362  00a0 3f02          	clr	c_lreg+2
 363  00a2 3f01          	clr	c_lreg+1
 364  00a4 3f00          	clr	c_lreg
 365  00a6 ae0004        	ldw	x,#L21
 366  00a9 cd0000        	call	c_lmul
 368  00ac 96            	ldw	x,sp
 369  00ad 5c            	incw	x
 370  00ae cd0000        	call	c_ludv
 372  00b1 be02          	ldw	x,c_lreg+2
 373  00b3 1f08          	ldw	(OFST-1,sp),x
 374                     ; 143       tmpccrh |= I2C_CCRH_DUTY;
 376  00b5 7b07          	ld	a,(OFST-2,sp)
 377  00b7 aa40          	or	a,#64
 378  00b9 6b07          	ld	(OFST-2,sp),a
 379  00bb               L531:
 380                     ; 147     if (result < (u16)0x01)
 382  00bb 1e08          	ldw	x,(OFST-1,sp)
 383  00bd 2603          	jrne	L731
 384                     ; 150       result = (u16)0x0001;
 386  00bf 5c            	incw	x
 387  00c0 1f08          	ldw	(OFST-1,sp),x
 388  00c2               L731:
 389                     ; 156     tmpval = ((InputClockFrequencyMHz * 3) / 10) + 1;
 391  00c2 7b15          	ld	a,(OFST+12,sp)
 392  00c4 97            	ld	xl,a
 393  00c5 a603          	ld	a,#3
 394  00c7 42            	mul	x,a
 395  00c8 a60a          	ld	a,#10
 396  00ca cd0000        	call	c_sdivx
 398  00cd 5c            	incw	x
 399  00ce 1f05          	ldw	(OFST-4,sp),x
 400                     ; 157     I2C->TRISER = (u8)tmpval;
 402  00d0 7b06          	ld	a,(OFST-3,sp)
 404  00d2 2038          	jra	L141
 405  00d4               L131:
 406                     ; 164     result = (u16)((InputClockFrequencyMHz * 1000000) / (OutputClockFrequencyHz << (u8)1));
 408  00d4 96            	ldw	x,sp
 409  00d5 1c000c        	addw	x,#OFST+3
 410  00d8 cd0000        	call	c_ltor
 412  00db 3803          	sll	c_lreg+3
 413  00dd 3902          	rlc	c_lreg+2
 414  00df 3901          	rlc	c_lreg+1
 415  00e1 96            	ldw	x,sp
 416  00e2 3900          	rlc	c_lreg
 417  00e4 5c            	incw	x
 418  00e5 cd0000        	call	c_rtol
 420  00e8 7b15          	ld	a,(OFST+12,sp)
 421  00ea b703          	ld	c_lreg+3,a
 422  00ec 3f02          	clr	c_lreg+2
 423  00ee 3f01          	clr	c_lreg+1
 424  00f0 3f00          	clr	c_lreg
 425  00f2 ae0004        	ldw	x,#L21
 426  00f5 cd0000        	call	c_lmul
 428  00f8 96            	ldw	x,sp
 429  00f9 5c            	incw	x
 430  00fa cd0000        	call	c_ludv
 432  00fd be02          	ldw	x,c_lreg+2
 433                     ; 167     if (result < (u16)0x0004)
 435  00ff a30004        	cpw	x,#4
 436  0102 2403          	jruge	L341
 437                     ; 170       result = (u16)0x0004;
 439  0104 ae0004        	ldw	x,#4
 440  0107               L341:
 441  0107 1f08          	ldw	(OFST-1,sp),x
 442                     ; 176     I2C->TRISER = (u8)(InputClockFrequencyMHz + 1);
 444  0109 7b15          	ld	a,(OFST+12,sp)
 445  010b 4c            	inc	a
 446  010c               L141:
 447  010c c7521d        	ld	21021,a
 448                     ; 181   I2C->CCRL = (u8)result;
 450  010f 7b09          	ld	a,(OFST+0,sp)
 451  0111 c7521b        	ld	21019,a
 452                     ; 182   I2C->CCRH = (u8)(((u8)(result >> 8) & I2C_CCRH_CCR) | tmpccrh);
 454  0114 7b08          	ld	a,(OFST-1,sp)
 455  0116 a40f          	and	a,#15
 456  0118 1a07          	or	a,(OFST-2,sp)
 457  011a c7521c        	ld	21020,a
 458                     ; 185   I2C->CR1 |= I2C_CR1_PE;
 460  011d 72105210      	bset	21008,#0
 461                     ; 188   I2C_AcknowledgeConfig(Ack);
 463  0121 7b13          	ld	a,(OFST+10,sp)
 464  0123 ad6f          	call	_I2C_AcknowledgeConfig
 466                     ; 191   I2C->OARL = (u8)(OwnAddress);
 468  0125 7b11          	ld	a,(OFST+8,sp)
 469  0127 c75213        	ld	21011,a
 470                     ; 192   I2C->OARH = (u8)((u8)AddMode |
 470                     ; 193                    I2C_OARH_ADDCONF |
 470                     ; 194                    (u8)((OwnAddress & (u16)0x0300) >> (u8)7));
 472  012a 7b10          	ld	a,(OFST+7,sp)
 473  012c a403          	and	a,#3
 474  012e 97            	ld	xl,a
 475  012f 4f            	clr	a
 476  0130 02            	rlwa	x,a
 477  0131 a607          	ld	a,#7
 478  0133               L61:
 479  0133 54            	srlw	x
 480  0134 4a            	dec	a
 481  0135 26fc          	jrne	L61
 482  0137 9f            	ld	a,xl
 483  0138 6b04          	ld	(OFST-5,sp),a
 484  013a 7b14          	ld	a,(OFST+11,sp)
 485  013c aa40          	or	a,#64
 486  013e 1a04          	or	a,(OFST-5,sp)
 487  0140 c75214        	ld	21012,a
 488                     ; 195 }
 491  0143 5b09          	addw	sp,#9
 492  0145 81            	ret	
 547                     ; 212 void I2C_Cmd(FunctionalState NewState)
 547                     ; 213 {
 548                     	switch	.text
 549  0146               _I2C_Cmd:
 553                     ; 216   assert_param(IS_FUNCTIONALSTATE_OK(NewState));
 555                     ; 218   if (NewState != DISABLE)
 557  0146 4d            	tnz	a
 558  0147 2705          	jreq	L371
 559                     ; 221     I2C->CR1 |= I2C_CR1_PE;
 561  0149 72105210      	bset	21008,#0
 564  014d 81            	ret	
 565  014e               L371:
 566                     ; 226     I2C->CR1 &= (u8)(~I2C_CR1_PE);
 568  014e 72115210      	bres	21008,#0
 569                     ; 228 }
 572  0152 81            	ret	
 607                     ; 245 void I2C_GeneralCallCmd(FunctionalState NewState)
 607                     ; 246 {
 608                     	switch	.text
 609  0153               _I2C_GeneralCallCmd:
 613                     ; 249   assert_param(IS_FUNCTIONALSTATE_OK(NewState));

⌨️ 快捷键说明

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