stm8s_awu.ls
来自「STM8-触摸例程」· LS 代码 · 共 274 行
LS
274 行
1 ; C Compiler for STM8 (COSMIC Software)
2 ; Generator V4.2.8 - 03 Dec 2008
3 ; Optimizer V4.2.8 - 03 Dec 2008
5 .const: section .text
6 0000 _APR_Array:
7 0000 00 dc.b 0
8 0001 1e dc.b 30
9 0002 1e dc.b 30
10 0003 1e dc.b 30
11 0004 1e dc.b 30
12 0005 1e dc.b 30
13 0006 1e dc.b 30
14 0007 1e dc.b 30
15 0008 1e dc.b 30
16 0009 1e dc.b 30
17 000a 1e dc.b 30
18 000b 1e dc.b 30
19 000c 1e dc.b 30
20 000d 3d dc.b 61
21 000e 17 dc.b 23
22 000f 17 dc.b 23
23 0010 3e dc.b 62
24 0011 _TBR_Array:
25 0011 00 dc.b 0
26 0012 01 dc.b 1
27 0013 02 dc.b 2
28 0014 03 dc.b 3
29 0015 04 dc.b 4
30 0016 05 dc.b 5
31 0017 06 dc.b 6
32 0018 07 dc.b 7
33 0019 08 dc.b 8
34 001a 09 dc.b 9
35 001b 0a dc.b 10
36 001c 0b dc.b 11
37 001d 0c dc.b 12
38 001e 0c dc.b 12
39 001f 0e dc.b 14
40 0020 0f dc.b 15
41 0021 0f dc.b 15
70 ; 83 void AWU_DeInit(void)
70 ; 84 {
72 switch .text
73 0000 _AWU_DeInit:
77 ; 85 AWU->CSR = AWU_CSR_RESET_VALUE;
79 0000 725f50f0 clr 20720
80 ; 86 AWU->APR = AWU_APR_RESET_VALUE;
82 0004 353f50f1 mov 20721,#63
83 ; 87 AWU->TBR = AWU_TBR_RESET_VALUE;
85 0008 725f50f2 clr 20722
86 ; 88 }
89 000c 81 ret
251 ; 105 void AWU_Init(AWU_Timebase_TypeDef AWU_TimeBase)
251 ; 106 {
252 switch .text
253 000d _AWU_Init:
255 00000000 OFST: set 0
258 ; 109 assert_param(IS_AWU_TIMEBASE_OK(AWU_TimeBase));
260 ; 112 AWU->CSR |= AWU_CSR_AWUEN;
262 000d 721850f0 bset 20720,#4
263 0011 88 push a
264 ; 115 AWU->TBR &= (u8)(~AWU_TBR_AWUTB);
266 0012 c650f2 ld a,20722
267 0015 a4f0 and a,#240
268 0017 c750f2 ld 20722,a
269 ; 116 AWU->TBR |= TBR_Array[(u8)AWU_TimeBase];
271 001a 5f clrw x
272 001b 7b01 ld a,(OFST+1,sp)
273 001d 97 ld xl,a
274 001e c650f2 ld a,20722
275 0021 da0011 or a,(_TBR_Array,x)
276 0024 c750f2 ld 20722,a
277 ; 119 AWU->APR &= (u8)(~AWU_APR_APR);
279 0027 c650f1 ld a,20721
280 002a a4c0 and a,#192
281 002c c750f1 ld 20721,a
282 ; 120 AWU->APR |= APR_Array[(u8)AWU_TimeBase];
284 002f 5f clrw x
285 0030 7b01 ld a,(OFST+1,sp)
286 0032 97 ld xl,a
287 0033 c650f1 ld a,20721
288 0036 da0000 or a,(_APR_Array,x)
289 0039 c750f1 ld 20721,a
290 ; 122 }
293 003c 84 pop a
294 003d 81 ret
349 ; 137 void AWU_Cmd(FunctionalState NewState)
349 ; 138 {
350 switch .text
351 003e _AWU_Cmd:
355 ; 139 if (NewState != DISABLE)
357 003e 4d tnz a
358 003f 2705 jreq L331
359 ; 142 AWU->CSR |= AWU_CSR_AWUEN;
361 0041 721850f0 bset 20720,#4
364 0045 81 ret
365 0046 L331:
366 ; 147 AWU->CSR &= (u8)(~AWU_CSR_AWUEN);
368 0046 721950f0 bres 20720,#4
369 ; 149 }
372 004a 81 ret
425 switch .const
426 0022 L41:
427 0022 000003e8 dc.l 1000
428 ; 176 void AWU_LSICalibrationConfig(u32 LSIFreqHz)
428 ; 177 {
429 switch .text
430 004b _AWU_LSICalibrationConfig:
432 004b 5206 subw sp,#6
433 00000006 OFST: set 6
436 ; 179 u16 lsifreqkhz = 0x0;
438 ; 180 u16 A = 0x0;
440 ; 183 assert_param(IS_LSI_FREQUENCY_OK(LSIFreqHz));
442 ; 185 lsifreqkhz = (u16)(LSIFreqHz / 1000); /* Converts value in kHz */
444 004d 96 ldw x,sp
445 004e 1c0009 addw x,#OFST+3
446 0051 cd0000 call c_ltor
448 0054 ae0022 ldw x,#L41
449 0057 cd0000 call c_ludv
451 005a be02 ldw x,c_lreg+2
452 005c 1f03 ldw (OFST-3,sp),x
453 ; 189 A = (u16)(lsifreqkhz >> 2U); /* Division by 4, keep integer part only */
455 005e 54 srlw x
456 005f 54 srlw x
457 0060 1f05 ldw (OFST-1,sp),x
458 ; 191 if ((4U * A) >= ((lsifreqkhz - (4U * A)) * (1U + (2U * A))))
460 0062 58 sllw x
461 0063 58 sllw x
462 0064 1f01 ldw (OFST-5,sp),x
463 0066 1e03 ldw x,(OFST-3,sp)
464 0068 72f001 subw x,(OFST-5,sp)
465 006b 1605 ldw y,(OFST-1,sp)
466 006d 9058 sllw y
467 006f 905c incw y
468 0071 cd0000 call c_imul
470 0074 1605 ldw y,(OFST-1,sp)
471 0076 9058 sllw y
472 0078 bf01 ldw c_x+1,x
473 007a 9058 sllw y
474 007c 90b301 cpw y,c_x+1
475 007f 7b06 ld a,(OFST+0,sp)
476 0081 2504 jrult L561
477 ; 193 AWU->APR = (u8)(A - 2U);
479 0083 a002 sub a,#2
481 0085 2001 jra L761
482 0087 L561:
483 ; 197 AWU->APR = (u8)(A - 1U);
485 0087 4a dec a
486 0088 L761:
487 0088 c750f1 ld 20721,a
488 ; 201 AWU->CSR |= AWU_CSR_MR;
490 ; 203 }
493 008b 5b06 addw sp,#6
494 008d 721250f0 bset 20720,#1
495 0091 81 ret
573 switch .const
574 0026 L42:
575 0026 000186a0 dc.l 100000
576 002a L62:
577 002a 00030d41 dc.l 200001
578 ; 221 ErrorStatus AWU_AutoLSICalibration(void)
578 ; 222 {
579 switch .text
580 0092 _AWU_AutoLSICalibration:
582 0092 5205 subw sp,#5
583 00000005 OFST: set 5
586 ; 224 u32 lsi_freq_hz = 0x0;
588 0094 96 ldw x,sp
589 0095 1c0002 addw x,#OFST-3
590 0098 cd0000 call c_ltor
592 ; 225 u32 fmaster = 0x0;
594 009b 96 ldw x,sp
595 009c 1c0002 addw x,#OFST-3
596 009f cd0000 call c_ltor
598 ; 226 ErrorStatus status = ERROR;
600 ; 229 fmaster = CLK_GetClockFreq();
602 00a2 cd0000 call _CLK_GetClockFreq
604 00a5 96 ldw x,sp
605 00a6 1c0002 addw x,#OFST-3
606 00a9 cd0000 call c_rtol
608 ; 232 AWU->CSR |= AWU_CSR_MSR;
610 00ac 721050f0 bset 20720,#0
611 ; 235 lsi_freq_hz = TIM3_ComputeLsiClockFreq(fmaster);
613 00b0 1e04 ldw x,(OFST-1,sp)
614 00b2 89 pushw x
615 00b3 1e04 ldw x,(OFST-1,sp)
616 00b5 89 pushw x
617 00b6 cd0000 call _TIM3_ComputeLsiClockFreq
619 00b9 5b04 addw sp,#4
620 00bb 96 ldw x,sp
621 00bc 1c0002 addw x,#OFST-3
622 00bf cd0000 call c_rtol
624 ; 238 AWU->CSR &= (u8)(~AWU_CSR_MSR);
626 00c2 721150f0 bres 20720,#0
627 ; 240 if ((lsi_freq_hz >= LSI_FREQUENCY_MIN) && (lsi_freq_hz <= LSI_FREQUENCY_MAX))
629 00c6 96 ldw x,sp
630 00c7 1c0002 addw x,#OFST-3
631 00ca cd0000 call c_ltor
633 00cd ae0026 ldw x,#L42
634 00d0 cd0000 call c_lcmp
636 00d3 251e jrult L722
638 00d5 96 ldw x,sp
639 00d6 1c0002 addw x,#OFST-3
640 00d9 cd0000 call c_ltor
642 00dc ae002a ldw x,#L62
643 00df cd0000 call c_lcmp
645 00e2 240f jruge L722
646 ; 243 AWU_LSICalibrationConfig(lsi_freq_hz);
648 00e4 1e04 ldw x,(OFST-1,sp)
649 00e6 89 pushw x
650 00e7 1e04 ldw x,(OFST-1,sp)
651 00e9 89 pushw x
652 00ea cd004b call _AWU_LSICalibrationConfig
654 00ed 5b04 addw sp,#4
655 ; 244 status = SUCCESS;
657 00ef a601 ld a,#1
659 00f1 2001 jra L132
660 00f3 L722:
661 ; 248 status = ERROR;
663 00f3 4f clr a
664 00f4 L132:
665 ; 251 return status;
669 00f4 5b05 addw sp,#5
670 00f6 81 ret
693 ; 269 void AWU_IdleModeEnable(void)
693 ; 270 {
694 switch .text
695 00f7 _AWU_IdleModeEnable:
699 ; 273 AWU->CSR &= (u8)(~AWU_CSR_AWUEN);
701 00f7 721950f0 bres 20720,#4
702 ; 276 AWU->TBR = (u8)(~AWU_TBR_AWUTB);
704 00fb 35f050f2 mov 20722,#240
705 ; 278 }
708 00ff 81 ret
731 ; 294 void AWU_ReInitCounter(void)
731 ; 295 {
732 switch .text
733 0100 _AWU_ReInitCounter:
737 ; 296 AWU->CSR |= AWU_CSR_MR;
739 0100 721250f0 bset 20720,#1
740 ; 297 }
743 0104 81 ret
787 ; 317 FlagStatus AWU_GetFlagStatus(void)
787 ; 318 {
788 switch .text
789 0105 _AWU_GetFlagStatus:
793 ; 319 return((FlagStatus)(((u8)(AWU->CSR & AWU_CSR_AWUF) == (u8)0x00) ? RESET : SET));
795 0105 720a50f002 btjt 20720,#5,L04
796 010a 4f clr a
798 010b 81 ret
799 010c L04:
800 010c a601 ld a,#1
803 010e 81 ret
838 xdef _TBR_Array
839 xdef _APR_Array
840 xdef _AWU_GetFlagStatus
841 xdef _AWU_ReInitCounter
842 xdef _AWU_IdleModeEnable
843 xdef _AWU_AutoLSICalibration
844 xdef _AWU_LSICalibrationConfig
845 xdef _AWU_Cmd
846 xdef _AWU_Init
847 xdef _AWU_DeInit
848 xref _CLK_GetClockFreq
849 xref _TIM3_ComputeLsiClockFreq
850 xref.b c_lreg
851 xref.b c_x
870 xref c_lcmp
871 xref c_rtol
872 xref c_imul
873 xref c_ludv
874 xref c_ltor
875 end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?