; generated by Component: ARM Compiler 5.05 (build 41) Tool: ArmCC [4d0eb9]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\error.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\error.d --cpu=Cortex-M0 --apcs=interwork -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\Mini51Series\Include -I..\..\..\Library\StdDriver\inc -I.\StdDriver\inc -I.\CMSIS -IG:\Geek\Projects\Zulolo_F\Force\Code\Zulolo_F_Force\RTE -ID:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.0.2\Device\Mini51\Include -ID:\Keil_v5\ARM\CMSIS\Include -I\ -D__MICROLIB --omf_browse=.\obj\error.crf User\Error.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  clearError PROC
;;;13     
;;;14     void clearError(ENUM_ERROR_LEVEL enumErrorType)
000000  2800              CMP      r0,#0
;;;15     {
000002  d006              BEQ      |L1.18|
;;;16     	if (ERR_NULL != enumErrorType)
;;;17     	{	
;;;18     		iErrorMaster &= ~(1UL << (enumErrorType - 1));
000004  2101              MOVS     r1,#1
000006  1e40              SUBS     r0,r0,#1
000008  4081              LSLS     r1,r1,r0
00000a  482a              LDR      r0,|L1.180|
00000c  6882              LDR      r2,[r0,#8]  ; iErrorMaster
00000e  438a              BICS     r2,r2,r1
000010  6082              STR      r2,[r0,#8]  ; iErrorMaster
                  |L1.18|
;;;19     	}
;;;20     }
000012  4770              BX       lr
;;;21     
                          ENDP

                  setError PROC
;;;22     void setError(ENUM_ERROR_LEVEL enumErrorType)
000014  4927              LDR      r1,|L1.180|
;;;23     {
;;;24     	if (ERR_NULL == enumErrorType)
000016  2800              CMP      r0,#0
000018  d006              BEQ      |L1.40|
;;;25     	{
;;;26     		iErrorMaster = 0;
;;;27     	}
;;;28     	else
;;;29     	{
;;;30     		iErrorMaster |= 1UL << (enumErrorType - 1); 
00001a  2201              MOVS     r2,#1
00001c  1e40              SUBS     r0,r0,#1
00001e  4082              LSLS     r2,r2,r0
000020  6888              LDR      r0,[r1,#8]  ; iErrorMaster
000022  4302              ORRS     r2,r2,r0
000024  608a              STR      r2,[r1,#8]  ; iErrorMaster
;;;31     	}
;;;32     }
000026  4770              BX       lr
                  |L1.40|
000028  2000              MOVS     r0,#0                 ;26
00002a  6088              STR      r0,[r1,#8]            ;26  ; iErrorMaster
00002c  4770              BX       lr
;;;33     
                          ENDP

                  getPrecedenceError PROC
;;;34     ENUM_ERROR_LEVEL getPrecedenceError(void)
00002e  4921              LDR      r1,|L1.180|
;;;35     {
;;;36     	register ENUM_ERROR_LEVEL iVernier = ERR_BRD_FAULT;
000030  2007              MOVS     r0,#7
;;;37     	while (iVernier)
;;;38     	{
;;;39     		iVernier--; 
;;;40     		if (iErrorMaster >> iVernier)
000032  688a              LDR      r2,[r1,#8]
                  |L1.52|
000034  1e40              SUBS     r0,r0,#1
000036  b2c0              UXTB     r0,r0                 ;39
000038  4611              MOV      r1,r2                 ;39
00003a  40c1              LSRS     r1,r1,r0
00003c  d002              BEQ      |L1.68|
00003e  1c40              ADDS     r0,r0,#1
;;;41     		{
;;;42     			return (iVernier + 1);
000040  b2c0              UXTB     r0,r0
;;;43     		}		
;;;44     	}
;;;45     	return iVernier;
;;;46     }
000042  4770              BX       lr
                  |L1.68|
000044  2800              CMP      r0,#0                 ;37
000046  d1f5              BNE      |L1.52|
000048  4770              BX       lr
;;;47     
                          ENDP

                  LEDBlinkHandler PROC
;;;48     void LEDBlinkHandler(ENUM_ERROR_LEVEL errorType, uint32_t iErrorStartTime)
00004a  b5f8              PUSH     {r3-r7,lr}
;;;49     {
00004c  2700              MOVS     r7,#0
;;;50     	uint16_t iLEDTime;
;;;51     	if (ERR_BRD_FAULT == errorType)
;;;52     	{
;;;53     		// Always ON
;;;54     		LED_ON;
00004e  4c1a              LDR      r4,|L1.184|
000050  4605              MOV      r5,r0                 ;49
000052  2807              CMP      r0,#7                 ;51
000054  d010              BEQ      |L1.120|
;;;55     	}
;;;56     	else if (ERR_NULL == errorType)
;;;57     	{
;;;58     		// Always off
;;;59     		LED_OFF;
000056  2601              MOVS     r6,#1
000058  2d00              CMP      r5,#0                 ;56
00005a  d00f              BEQ      |L1.124|
;;;60     	}
;;;61     	else
;;;62     	{
;;;63     		iLEDTime = (uint16_t)(((uint32_t)(iSystemTick - iErrorStartTime)) % LED_PATTERN_INTERVAL);
00005c  4817              LDR      r0,|L1.188|
00005e  6800              LDR      r0,[r0,#0]  ; iSystemTick
000060  1a40              SUBS     r0,r0,r1
000062  217d              MOVS     r1,#0x7d
000064  0149              LSLS     r1,r1,#5
000066  f7fffffe          BL       __aeabi_uidivmod
00006a  4608              MOV      r0,r1
;;;64     		if (iLEDTime >= errorType * (LED_BLINK_INTERVAL))
00006c  21ff              MOVS     r1,#0xff
00006e  3191              ADDS     r1,r1,#0x91
000070  434d              MULS     r5,r1,r5
000072  4285              CMP      r5,r0
000074  d902              BLS      |L1.124|
000076  e003              B        |L1.128|
                  |L1.120|
000078  6327              STR      r7,[r4,#0x30]         ;54
;;;65     		{
;;;66     			LED_OFF;
;;;67     		}
;;;68     		else
;;;69     		{
;;;70     			iLEDTime %= LED_BLINK_INTERVAL;
;;;71     			if (iLEDTime < LED_BLINK_ON_TIME)
;;;72     			{
;;;73     				LED_ON;
;;;74     			}
;;;75     			else
;;;76     			{
;;;77     				LED_OFF;
;;;78     			}
;;;79     		}
;;;80     	}
;;;81     }
00007a  bdf8              POP      {r3-r7,pc}
                  |L1.124|
00007c  6326              STR      r6,[r4,#0x30]         ;59
00007e  bdf8              POP      {r3-r7,pc}
                  |L1.128|
000080  21ff              MOVS     r1,#0xff              ;70
000082  3191              ADDS     r1,r1,#0x91           ;70
000084  f7fffffe          BL       __aeabi_uidivmod
000088  29c8              CMP      r1,#0xc8              ;71
00008a  d2f7              BCS      |L1.124|
00008c  e7f4              B        |L1.120|
;;;82     
                          ENDP

                  ErrorManager PROC
;;;85     // to make sure then responding time will not burn the board
;;;86     void ErrorManager(void)
00008e  b510              PUSH     {r4,lr}
;;;87     {
;;;88     	static uint32_t staLastErrorChangeTime;
;;;89     	static ENUM_ERROR_LEVEL lastErrorType = ERR_NULL;
;;;90     	ENUM_ERROR_LEVEL errorFetched;
;;;91     	errorFetched = getPrecedenceError();
000090  f7fffffe          BL       getPrecedenceError
;;;92     
;;;93     	if (lastErrorType != errorFetched)
000094  4a07              LDR      r2,|L1.180|
000096  7811              LDRB     r1,[r2,#0]  ; lastErrorType
000098  4281              CMP      r1,r0
00009a  d004              BEQ      |L1.166|
;;;94     	{
;;;95     		lastErrorType = errorFetched;
;;;96     		// error type changed (maybe changed to no error)
;;;97     		staLastErrorChangeTime = iSystemTick;
00009c  4907              LDR      r1,|L1.188|
00009e  7010              STRB     r0,[r2,#0]            ;95
0000a0  6809              LDR      r1,[r1,#0]  ; iSystemTick
;;;98     		// No matter there is error or not, process!!
;;;99     		LEDBlinkHandler(errorFetched, staLastErrorChangeTime);
0000a2  6051              STR      r1,[r2,#4]  ; staLastErrorChangeTime
0000a4  e002              B        |L1.172|
                  |L1.166|
;;;100    	}
;;;101    	else
;;;102    	{
;;;103    		// Still same error (maybe no error)
;;;104    		// Only process when there is some error
;;;105    		if (ERR_NULL != errorFetched)
0000a6  2800              CMP      r0,#0
0000a8  d002              BEQ      |L1.176|
;;;106    		{
;;;107    			LEDBlinkHandler(errorFetched, staLastErrorChangeTime);
0000aa  6851              LDR      r1,[r2,#4]  ; staLastErrorChangeTime
                  |L1.172|
0000ac  f7fffffe          BL       LEDBlinkHandler
                  |L1.176|
;;;108    		}	
;;;109    	}
;;;110    	
;;;111    }
0000b0  bd10              POP      {r4,pc}
;;;112    
                          ENDP

0000b2  0000              DCW      0x0000
                  |L1.180|
                          DCD      ||.data||
                  |L1.184|
                          DCD      0x50004280
                  |L1.188|
                          DCD      iSystemTick

                          AREA ||.data||, DATA, ALIGN=2

                  lastErrorType
000000  00000000          DCB      0x00,0x00,0x00,0x00
                  staLastErrorChangeTime
                          DCD      0x00000000
                  iErrorMaster
                          DCD      0x00000000

;*** Start embedded assembler ***

#line 1 "User\\Error.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___7_Error_c_ca138499____REV16|
#line 118 ".\\CMSIS\\core_cmInstr.h"
|__asm___7_Error_c_ca138499____REV16| PROC
#line 119

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___7_Error_c_ca138499____REVSH|
#line 132
|__asm___7_Error_c_ca138499____REVSH| PROC
#line 133

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
