; generated by Component: ARM Compiler 5.06 update 4 (build 422) Tool: ArmCC [4d3604]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\obj\lib_driver_pwm_pan159.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\lib_driver_pwm_pan159.d --cpu=Cortex-M0 --apcs=interwork -O3 --diag_suppress=9931 -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\Mini58Series\Include -I..\..\..\Library\StdDriver\inc -I..\..\Template -I..\..\..\Library\StdDriver\driver -I.\RTE\_Template -ID:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.0.9\Device\Mini58\Include -ID:\Keil_v5\ARM\CMSIS\Include -D__MICROLIB -D__UVISION_VERSION=523 --omf_browse=.\obj\lib_driver_pwm_pan159.crf ..\..\..\Library\StdDriver\driver\lib_driver_pwm_pan159.c]
                          THUMB

                          AREA ||i.pwm_pan159_init||, CODE, READONLY, ALIGN=2

                  pwm_pan159_init PROC
;;;45     *******************************************************************************/
;;;46     void pwm_pan159_init(uint16_t freq)
000000  b5f8              PUSH     {r3-r7,lr}
;;;47     {
;;;48         uint8_t psc = 1;
;;;49         if(freq >= 12000){
000002  4964              LDR      r1,|L1.404|
000004  2401              MOVS     r4,#1                 ;48
000006  4288              CMP      r0,r1
000008  d21c              BCS      |L1.68|
;;;50             psc = 1;
;;;51         }
;;;52         else if(freq >= 6000){
00000a  1049              ASRS     r1,r1,#1
00000c  4288              CMP      r0,r1
00000e  d301              BCC      |L1.20|
;;;53             psc = 2;
000010  2402              MOVS     r4,#2
000012  e017              B        |L1.68|
                  |L1.20|
;;;54         }
;;;55         else if(freq >= 4000){
000014  217d              MOVS     r1,#0x7d
000016  0149              LSLS     r1,r1,#5
000018  4288              CMP      r0,r1
00001a  d301              BCC      |L1.32|
;;;56             psc = 3;
00001c  2403              MOVS     r4,#3
00001e  e011              B        |L1.68|
                  |L1.32|
;;;57         }
;;;58         else if(freq >= 3000){
000020  495d              LDR      r1,|L1.408|
000022  4288              CMP      r0,r1
000024  d301              BCC      |L1.42|
;;;59             psc = 4;
000026  2404              MOVS     r4,#4
000028  e00c              B        |L1.68|
                  |L1.42|
;;;60         }
;;;61         else if(freq >= 2400){
00002a  214b              MOVS     r1,#0x4b
00002c  0149              LSLS     r1,r1,#5
00002e  4288              CMP      r0,r1
000030  d301              BCC      |L1.54|
;;;62             psc = 5;
000032  2405              MOVS     r4,#5
000034  e006              B        |L1.68|
                  |L1.54|
;;;63         }
;;;64         else if(freq >= 2000){
000036  217d              MOVS     r1,#0x7d
000038  0109              LSLS     r1,r1,#4
00003a  4288              CMP      r0,r1
00003c  d301              BCC      |L1.66|
;;;65             psc = 6;
00003e  2406              MOVS     r4,#6
000040  e000              B        |L1.68|
                  |L1.66|
;;;66         }
;;;67         else{
;;;68             psc = 12;
000042  240c              MOVS     r4,#0xc
                  |L1.68|
;;;69         }
;;;70         //const uint32_t pwmch_module[] = {PWMCH01_MODULE,PWMCH23_MODULE,PWMCH45_MODULE};
;;;71         
;;;72         CLK_EnableModuleClock(PWMCH01_MODULE);  //moudle clk enable ch01
000044  4855              LDR      r0,|L1.412|
000046  f7fffffe          BL       CLK_EnableModuleClock
;;;73         CLK_EnableModuleClock(PWMCH23_MODULE);  //moudle clk enable ch23
00004a  4855              LDR      r0,|L1.416|
00004c  f7fffffe          BL       CLK_EnableModuleClock
;;;74         CLK_EnableModuleClock(PWMCH45_MODULE);  //moudle clk enable ch45
000050  4854              LDR      r0,|L1.420|
000052  f7fffffe          BL       CLK_EnableModuleClock
;;;75     //    CLK_EnableModuleClock(pwmch_module[0x03 >> 1]);  //moudle clk enable ch3
;;;76         
;;;77         //P22
;;;78         SYS->P2_MFP &= ~SYS_MFP_P22_Msk;
000056  2105              MOVS     r1,#5
000058  0709              LSLS     r1,r1,#28
00005a  6b88              LDR      r0,[r1,#0x38]
00005c  4a52              LDR      r2,|L1.424|
00005e  4010              ANDS     r0,r0,r2
000060  6388              STR      r0,[r1,#0x38]
;;;79         SYS->P2_MFP |= SYS_MFP_P22_PWM0_CH0;
000062  6b88              LDR      r0,[r1,#0x38]
000064  2501              MOVS     r5,#1
000066  02ad              LSLS     r5,r5,#10
000068  4328              ORRS     r0,r0,r5
00006a  6388              STR      r0,[r1,#0x38]
;;;80         PWM->CTL |= PWM_CTL_CNTEN0_Msk | PWM_CTL_CNTMODE0_Msk;
00006c  484f              LDR      r0,|L1.428|
00006e  6882              LDR      r2,[r0,#8]
000070  2309              MOVS     r3,#9
000072  431a              ORRS     r2,r2,r3
000074  6082              STR      r2,[r0,#8]
;;;81         //P23
;;;82         SYS->P2_MFP &= ~SYS_MFP_P23_Msk;
000076  6b8a              LDR      r2,[r1,#0x38]
000078  4b4d              LDR      r3,|L1.432|
00007a  401a              ANDS     r2,r2,r3
00007c  638a              STR      r2,[r1,#0x38]
;;;83         SYS->P2_MFP |= SYS_MFP_P23_PWM0_CH1;
00007e  6b8a              LDR      r2,[r1,#0x38]
000080  14c3              ASRS     r3,r0,#19
000082  431a              ORRS     r2,r2,r3
000084  638a              STR      r2,[r1,#0x38]
;;;84         PWM->CTL |= PWM_CTL_CNTEN1_Msk | PWM_CTL_CNTMODE1_Msk;
000086  6882              LDR      r2,[r0,#8]
000088  2390              MOVS     r3,#0x90
00008a  431a              ORRS     r2,r2,r3
00008c  6082              STR      r2,[r0,#8]
;;;85         //P24
;;;86         SYS->P2_MFP &= ~SYS_MFP_P24_Msk;
00008e  6b8a              LDR      r2,[r1,#0x38]
000090  4b48              LDR      r3,|L1.436|
000092  401a              ANDS     r2,r2,r3
000094  638a              STR      r2,[r1,#0x38]
;;;87         SYS->P2_MFP |= SYS_MFP_P24_PWM0_CH2;
000096  6b8a              LDR      r2,[r1,#0x38]
000098  00ab              LSLS     r3,r5,#2
00009a  431a              ORRS     r2,r2,r3
00009c  638a              STR      r2,[r1,#0x38]
;;;88         PWM->CTL |= PWM_CTL_CNTEN2_Msk | PWM_CTL_CNTMODE2_Msk;
00009e  6882              LDR      r2,[r0,#8]
0000a0  2309              MOVS     r3,#9
0000a2  021b              LSLS     r3,r3,#8
0000a4  431a              ORRS     r2,r2,r3
0000a6  6082              STR      r2,[r0,#8]
;;;89         //P25
;;;90         SYS->P2_MFP &= ~SYS_MFP_P25_Msk;
0000a8  6b8a              LDR      r2,[r1,#0x38]
0000aa  4b43              LDR      r3,|L1.440|
0000ac  401a              ANDS     r2,r2,r3
0000ae  638a              STR      r2,[r1,#0x38]
;;;91         SYS->P2_MFP |= SYS_MFP_P25_PWM0_CH3;
0000b0  6b8a              LDR      r2,[r1,#0x38]
0000b2  00eb              LSLS     r3,r5,#3
0000b4  431a              ORRS     r2,r2,r3
0000b6  638a              STR      r2,[r1,#0x38]
;;;92         PWM->CTL |= PWM_CTL_CNTEN3_Msk | PWM_CTL_CNTMODE3_Msk;
0000b8  6881              LDR      r1,[r0,#8]
0000ba  2209              MOVS     r2,#9
0000bc  0312              LSLS     r2,r2,#12
0000be  4311              ORRS     r1,r1,r2
0000c0  6081              STR      r1,[r0,#8]
;;;93     
;;;94         PWM_SET_PRESCALER(PWM,0x02,psc);
0000c2  6801              LDR      r1,[r0,#0]
0000c4  22ff              MOVS     r2,#0xff
0000c6  0212              LSLS     r2,r2,#8
0000c8  4391              BICS     r1,r1,r2
0000ca  0226              LSLS     r6,r4,#8
0000cc  4331              ORRS     r1,r1,r6
0000ce  6001              STR      r1,[r0,#0]
;;;95         PWM_SET_DIVIDER(PWM,0x02,PWM_CLK_DIV_1);
0000d0  6841              LDR      r1,[r0,#4]
0000d2  2207              MOVS     r2,#7
0000d4  0212              LSLS     r2,r2,#8
0000d6  4391              BICS     r1,r1,r2
0000d8  1949              ADDS     r1,r1,r5
0000da  6041              STR      r1,[r0,#4]
;;;96         PWM_SET_ALIGNED_TYPE(PWM,0x02,0x80000000);//Ķ
0000dc  6881              LDR      r1,[r0,#8]
0000de  0342              LSLS     r2,r0,#13
0000e0  4311              ORRS     r1,r1,r2
0000e2  6081              STR      r1,[r0,#8]
;;;97         PWM_SET_CMR(PWM,0x02,0);
0000e4  2100              MOVS     r1,#0
0000e6  62c1              STR      r1,[r0,#0x2c]
;;;98         PWM_SET_CNR(PWM,0x02,1000);//PWM RANGE setting
0000e8  237d              MOVS     r3,#0x7d
0000ea  00db              LSLS     r3,r3,#3
0000ec  6143              STR      r3,[r0,#0x14]
;;;99         PWM->CTL |= 1 << (PWM_CTL_PINV0_Pos + (((uint32_t)(0x02)) << 2));//ȡ
0000ee  6887              LDR      r7,[r0,#8]
0000f0  432f              ORRS     r7,r7,r5
0000f2  6087              STR      r7,[r0,#8]
;;;100    
;;;101        PWM_SET_PRESCALER(PWM,0x01,psc);
0000f4  6805              LDR      r5,[r0,#0]
0000f6  0a2d              LSRS     r5,r5,#8
0000f8  022d              LSLS     r5,r5,#8
0000fa  4325              ORRS     r5,r5,r4
0000fc  6005              STR      r5,[r0,#0]
;;;102        PWM_SET_DIVIDER(PWM,0x01,PWM_CLK_DIV_1);
0000fe  6845              LDR      r5,[r0,#4]
000100  2770              MOVS     r7,#0x70
000102  43bd              BICS     r5,r5,r7
000104  3540              ADDS     r5,r5,#0x40
000106  6045              STR      r5,[r0,#4]
;;;103        PWM_SET_ALIGNED_TYPE(PWM,0x01,0x80000000);
000108  6885              LDR      r5,[r0,#8]
00010a  4315              ORRS     r5,r5,r2
00010c  6085              STR      r5,[r0,#8]
;;;104        PWM_SET_CMR(PWM,0x01,0);
00010e  6281              STR      r1,[r0,#0x28]
;;;105        PWM_SET_CNR(PWM,0x01,1000);//PWM RANGE setting
000110  6103              STR      r3,[r0,#0x10]
;;;106        PWM->CTL |= 1 << (PWM_CTL_PINV0_Pos + (((uint32_t)(0x01)) << 2));//ȡ
000112  6885              LDR      r5,[r0,#8]
000114  2740              MOVS     r7,#0x40
000116  433d              ORRS     r5,r5,r7
000118  6085              STR      r5,[r0,#8]
;;;107        
;;;108        PWM_SET_PRESCALER(PWM,0x00,psc);
00011a  6805              LDR      r5,[r0,#0]
00011c  0a2d              LSRS     r5,r5,#8
00011e  022d              LSLS     r5,r5,#8
000120  4325              ORRS     r5,r5,r4
000122  6005              STR      r5,[r0,#0]
;;;109        PWM_SET_DIVIDER(PWM,0x00,PWM_CLK_DIV_1);
000124  6844              LDR      r4,[r0,#4]
000126  08e4              LSRS     r4,r4,#3
000128  00e4              LSLS     r4,r4,#3
00012a  1d24              ADDS     r4,r4,#4
00012c  6044              STR      r4,[r0,#4]
;;;110        PWM_SET_ALIGNED_TYPE(PWM,0x00,0x80000000);
00012e  6884              LDR      r4,[r0,#8]
000130  4314              ORRS     r4,r4,r2
000132  6084              STR      r4,[r0,#8]
;;;111        PWM_SET_CMR(PWM,0x00,0);
000134  6241              STR      r1,[r0,#0x24]
;;;112        PWM_SET_CNR(PWM,0x00,1000);//PWM RANGE setting
000136  60c3              STR      r3,[r0,#0xc]
;;;113        PWM->CTL |= 1 << (PWM_CTL_PINV0_Pos + (((uint32_t)(0x00)) << 2));//ȡ
000138  6884              LDR      r4,[r0,#8]
00013a  2504              MOVS     r5,#4
00013c  432c              ORRS     r4,r4,r5
00013e  6084              STR      r4,[r0,#8]
;;;114        
;;;115        PWM_SET_PRESCALER(PWM,0x03,psc);
000140  6804              LDR      r4,[r0,#0]
000142  25ff              MOVS     r5,#0xff
000144  022d              LSLS     r5,r5,#8
000146  43ac              BICS     r4,r4,r5
000148  4334              ORRS     r4,r4,r6
00014a  6004              STR      r4,[r0,#0]
;;;116        PWM_SET_DIVIDER(PWM,0x03,PWM_CLK_DIV_1);
00014c  6845              LDR      r5,[r0,#4]
00014e  2407              MOVS     r4,#7
000150  0324              LSLS     r4,r4,#12
000152  43a5              BICS     r5,r5,r4
000154  0c54              LSRS     r4,r2,#17
000156  192d              ADDS     r5,r5,r4
000158  6045              STR      r5,[r0,#4]
;;;117        PWM_SET_ALIGNED_TYPE(PWM,0x03,0x80000000);
00015a  6885              LDR      r5,[r0,#8]
00015c  4315              ORRS     r5,r5,r2
00015e  6085              STR      r5,[r0,#8]
;;;118        PWM_SET_CMR(PWM,0x03,0);
000160  6301              STR      r1,[r0,#0x30]
;;;119        PWM_SET_CNR(PWM,0x03,1000);//PWM RANGE setting
000162  6183              STR      r3,[r0,#0x18]
;;;120        PWM->CTL |= 1 << (PWM_CTL_PINV0_Pos + (((uint32_t)(0x03)) << 2));//ȡ
000164  6882              LDR      r2,[r0,#8]
000166  4322              ORRS     r2,r2,r4
000168  6082              STR      r2,[r0,#8]
;;;121        
;;;122        /* PWM */
;;;123        PWM->CTL |= PWM_CTL_CNTEN0_Msk << (((uint32_t)0x00) << 2);
00016a  6882              LDR      r2,[r0,#8]
00016c  2301              MOVS     r3,#1
00016e  431a              ORRS     r2,r2,r3
000170  6082              STR      r2,[r0,#8]
;;;124        PWM->CTL |= PWM_CTL_CNTEN0_Msk << (((uint32_t)0x01) << 2);
000172  6882              LDR      r2,[r0,#8]
000174  2310              MOVS     r3,#0x10
000176  431a              ORRS     r2,r2,r3
000178  6082              STR      r2,[r0,#8]
;;;125        PWM->CTL |= PWM_CTL_CNTEN0_Msk << (((uint32_t)0x02) << 2);
00017a  6882              LDR      r2,[r0,#8]
00017c  1583              ASRS     r3,r0,#22
00017e  431a              ORRS     r2,r2,r3
000180  6082              STR      r2,[r0,#8]
;;;126        PWM->CTL |= PWM_CTL_CNTEN0_Msk << (((uint32_t)0x03) << 2);
000182  6882              LDR      r2,[r0,#8]
000184  011b              LSLS     r3,r3,#4
000186  431a              ORRS     r2,r2,r3
000188  6082              STR      r2,[r0,#8]
;;;127        
;;;128        PWM_PAN159_CHN_OUT(0x00,0);
00018a  6241              STR      r1,[r0,#0x24]
;;;129        PWM_PAN159_CHN_OUT(0x01,0);
00018c  6281              STR      r1,[r0,#0x28]
;;;130        PWM_PAN159_CHN_OUT(0x02,0);
00018e  62c1              STR      r1,[r0,#0x2c]
;;;131        PWM_PAN159_CHN_OUT(0x03,0);
000190  6301              STR      r1,[r0,#0x30]
;;;132        //PWM_PAN159_CHN_UNLOCK(1<<chn);
;;;133        
;;;134    
;;;135    //    return pwm_port;
;;;136    }
000192  bdf8              POP      {r3-r7,pc}
;;;137    /*******************************************************************************
                          ENDP

                  |L1.404|
                          DCD      0x00002ee0
                  |L1.408|
                          DCD      0x00000bb8
                  |L1.412|
                          DCD      0xa7c00014
                  |L1.416|
                          DCD      0xa7e00015
                  |L1.420|
                          DCD      0xe6400016
                  |L1.424|
                          DCD      0xfffffbfb
                  |L1.428|
                          DCD      0x40040000
                  |L1.432|
                          DCD      0xfffff7f7
                  |L1.436|
                          DCD      0xffffefef
                  |L1.440|
                          DCD      0xffffdfdf

                          AREA ||i.pwm_pan159_setDuty||, CODE, READONLY, ALIGN=2

                  pwm_pan159_setDuty PROC
;;;142    *******************************************************************************/
;;;143    void pwm_pan159_setDuty(uint16_t *duty)
000000  b530              PUSH     {r4,r5,lr}
;;;144    {
;;;145        register uint8_t lock = 0x00;
;;;146        register uint8_t unlock = 0x00;
;;;147        /*M1 - CH1 PWM out*/
;;;148        PWM_PAN159_CHN_OUT(0x01,duty[0]);
000002  4b17              LDR      r3,|L2.96|
000004  2200              MOVS     r2,#0                 ;145
000006  8804              LDRH     r4,[r0,#0]
000008  4611              MOV      r1,r2                 ;146
00000a  629c              STR      r4,[r3,#0x28]
;;;149        if(duty[0] == 0){
00000c  8804              LDRH     r4,[r0,#0]
00000e  2c00              CMP      r4,#0
000010  d01e              BEQ      |L2.80|
;;;150            lock |= 1 << 0x01;
;;;151        }
;;;152        else{
;;;153            unlock |= 1 << 0x01;
000012  2102              MOVS     r1,#2
                  |L2.20|
;;;154        }
;;;155        /*M2 - CH3 PWM out*/
;;;156        PWM_PAN159_CHN_OUT(0x03,duty[1]);
000014  8844              LDRH     r4,[r0,#2]
000016  631c              STR      r4,[r3,#0x30]
;;;157        if(duty[1] == 0){
000018  8845              LDRH     r5,[r0,#2]
;;;158            lock |= 1 << 0x03;
00001a  2408              MOVS     r4,#8
00001c  2d00              CMP      r5,#0                 ;157
00001e  d019              BEQ      |L2.84|
;;;159        }
;;;160        else{
;;;161            unlock |= 1 << 0x03;
000020  4321              ORRS     r1,r1,r4
                  |L2.34|
;;;162        }
;;;163        /*M3 - CH2 PWM out*/
;;;164        PWM_PAN159_CHN_OUT(0x02,duty[2]);
000022  8884              LDRH     r4,[r0,#4]
000024  62dc              STR      r4,[r3,#0x2c]
;;;165        if(duty[2] == 0){
000026  8885              LDRH     r5,[r0,#4]
;;;166            lock |= 1 << 0x02;
000028  2404              MOVS     r4,#4
00002a  2d00              CMP      r5,#0                 ;165
00002c  d014              BEQ      |L2.88|
;;;167        }
;;;168        else{
;;;169            unlock |= 1 << 0x02;
00002e  4321              ORRS     r1,r1,r4
                  |L2.48|
;;;170        }
;;;171        /*M4 - CH0 PWM out*/
;;;172        PWM_PAN159_CHN_OUT(0x00,duty[3]);
000030  88c4              LDRH     r4,[r0,#6]
000032  625c              STR      r4,[r3,#0x24]
;;;173        if(duty[3] == 0){
000034  88c3              LDRH     r3,[r0,#6]
;;;174            lock |= 1 << 0x00;
000036  2001              MOVS     r0,#1
000038  2b00              CMP      r3,#0                 ;173
00003a  d00f              BEQ      |L2.92|
;;;175        }
;;;176        else{
;;;177            unlock |= 1 << 0x00;
00003c  4301              ORRS     r1,r1,r0
                  |L2.62|
;;;178        }
;;;179        PWM_PAN159_CHN_LOCK(lock);
00003e  4808              LDR      r0,|L2.96|
000040  3040              ADDS     r0,r0,#0x40
000042  69c3              LDR      r3,[r0,#0x1c]
000044  4393              BICS     r3,r3,r2
000046  61c3              STR      r3,[r0,#0x1c]
;;;180        PWM_PAN159_CHN_UNLOCK(unlock);
000048  69c2              LDR      r2,[r0,#0x1c]
00004a  430a              ORRS     r2,r2,r1
00004c  61c2              STR      r2,[r0,#0x1c]
;;;181    
;;;182    }
00004e  bd30              POP      {r4,r5,pc}
                  |L2.80|
000050  2202              MOVS     r2,#2                 ;150
000052  e7df              B        |L2.20|
                  |L2.84|
000054  4322              ORRS     r2,r2,r4              ;158
000056  e7e4              B        |L2.34|
                  |L2.88|
000058  4322              ORRS     r2,r2,r4              ;166
00005a  e7e9              B        |L2.48|
                  |L2.92|
00005c  4302              ORRS     r2,r2,r0              ;174
00005e  e7ee              B        |L2.62|
;;;183    
                          ENDP

                  |L2.96|
                          DCD      0x40040000

;*** Start embedded assembler ***

#line 1 "..\\..\\..\\Library\\StdDriver\\driver\\lib_driver_pwm_pan159.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___23_lib_driver_pwm_pan159_c_c0813419____REV16|
#line 388 "..\\..\\..\\Library\\CMSIS\\Include\\cmsis_armcc.h"
|__asm___23_lib_driver_pwm_pan159_c_c0813419____REV16| PROC
#line 389

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___23_lib_driver_pwm_pan159_c_c0813419____REVSH|
#line 402
|__asm___23_lib_driver_pwm_pan159_c_c0813419____REVSH| PROC
#line 403

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
