; generated by ARM C/C++ Compiler, 4.1 [Build 894]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\Obj\blinky.o --asm_dir=.\Lst\ --list_dir=.\Lst\ --depend=.\Obj\blinky.d --cpu=Cortex-M4 --apcs=interwork -O0 -I.\Drivers\include -IC:\Keil\ARM\RV31\Inc -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\Inc\NXP\LPC43xx -D__MICROLIB --omf_browse=.\Obj\blinky.crf Blinky.c]
                          THUMB

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

                  SGPIOPWMValue PROC
;;;194    
;;;195    void SGPIOPWMValue(uint8_t value, uint8_t channel)
000000  4a7d              LDR      r2,|L1.504|
;;;196    {
;;;197    	chan = channel;
000002  7011              STRB     r1,[r2,#0]
;;;198    	val = value;
000004  4a7d              LDR      r2,|L1.508|
000006  7010              STRB     r0,[r2,#0]
;;;199    	LPC_SGPIO->CTR_STATUS_1 =  0xFFFF;			//Clear the interrupts
000008  f64f72ff          MOV      r2,#0xffff
00000c  4b7c              LDR      r3,|L1.512|
00000e  601a              STR      r2,[r3,#0]
;;;200    	LPC_SGPIO->SET_EN_1 = 0x8000;	//interrupt when slice 15 switches data register
000010  f44f4200          MOV      r2,#0x8000
000014  4b7a              LDR      r3,|L1.512|
000016  3b0c              SUBS     r3,r3,#0xc
000018  601a              STR      r2,[r3,#0]
;;;201    }
00001a  4770              BX       lr
;;;202    
                          ENDP

                  c_entry PROC
;;;74     
;;;75     int c_entry (void) {                       /* Main Program                       */
00001c  f7fffffe          BL       SystemInit
;;;76     	SystemInit();
;;;77     	CGU_Init();	
000020  f7fffffe          BL       CGU_Init
;;;78     
;;;79       scu_pinmux(0x1, 1 , MD_PLN, FUNC3);				//Function 3, SGPIO08, P1.1, Slice B(1)
000024  2303              MOVS     r3,#3
000026  2210              MOVS     r2,#0x10
000028  2101              MOVS     r1,#1
00002a  4608              MOV      r0,r1
00002c  f7fffffe          BL       scu_pinmux
;;;80     	scu_pinmux(0x2, 6 , MD_PLN, FUNC0);				//Function 0, SGPIO07, P2.6, Slice L(11)
000030  2300              MOVS     r3,#0
000032  2210              MOVS     r2,#0x10
000034  2106              MOVS     r1,#6
000036  2002              MOVS     r0,#2
000038  f7fffffe          BL       scu_pinmux
;;;81     	scu_pinmux(0x2, 8 , MD_PLN, FUNC0);				//Function 0, SGPIO15, P2.8, Slice P(15)
00003c  2300              MOVS     r3,#0
00003e  2210              MOVS     r2,#0x10
000040  2108              MOVS     r1,#8
000042  2002              MOVS     r0,#2
000044  f7fffffe          BL       scu_pinmux
;;;82     
;;;83       LPC_SGPIO->CLR_EN_0	= 0xffff;		// disable interrupting on clock
000048  f64f70ff          MOV      r0,#0xffff
00004c  496c              LDR      r1,|L1.512|
00004e  3930              SUBS     r1,r1,#0x30
000050  6008              STR      r0,[r1,#0]
;;;84       LPC_SGPIO->CLR_EN_1	= 0xffff;		// disable interrupting on clock
000052  496b              LDR      r1,|L1.512|
000054  3910              SUBS     r1,r1,#0x10
000056  6008              STR      r0,[r1,#0]
;;;85     	LPC_SGPIO->CLR_EN_2	= 0xffff;		// disable interrupting on clock
000058  4969              LDR      r1,|L1.512|
00005a  3110              ADDS     r1,r1,#0x10
00005c  6008              STR      r0,[r1,#0]
;;;86     	LPC_SGPIO->CLR_EN_3	= 0xffff;		// disable interrupting on clock
00005e  4968              LDR      r1,|L1.512|
000060  3130              ADDS     r1,r1,#0x30
000062  6008              STR      r0,[r1,#0]
;;;87     
;;;88     	LPC_SGPIO->GPIO_OENREG = 0xFFFF;	//All SGPIO's as output
000064  4967              LDR      r1,|L1.516|
000066  6008              STR      r0,[r1,#0]
;;;89     	
;;;90     	//pin 1.1, SGPIO08, slice B
;;;91       //Used as an output for PWM
;;;92       LPC_SGPIO->OUT_MUX_CFG[1] = 0x00000000;			//one bit mode
000068  f04f0000          MOV      r0,#0
00006c  4966              LDR      r1,|L1.520|
00006e  6048              STR      r0,[r1,#4]
;;;93       LPC_SGPIO->SGPIO_MUX_CFG[1] = (0x1 << 11);		//internal clock, concave on
000070  f44f6100          MOV      r1,#0x800
000074  4864              LDR      r0,|L1.520|
000076  6441              STR      r1,[r0,#0x44]
;;;94       LPC_SGPIO->SLICE_MUX_CFG[1] = 0x0;		//Interrupt on match on
000078  f04f0100          MOV      r1,#0
00007c  f8c01084          STR      r1,[r0,#0x84]
;;;95     	LPC_SGPIO->PRESET[1] = 0x1;					//clock speed = ((supplied clock / 2) / (preset + 1))
000080  f04f0101          MOV      r1,#1
000084  f8c01144          STR      r1,[r0,#0x144]
;;;96       LPC_SGPIO->COUNT[1] = 0x0;
000088  f04f0100          MOV      r1,#0
00008c  f8c01184          STR      r1,[r0,#0x184]
;;;97       LPC_SGPIO->POS[1] = 0x1F00;					//after 32 clocks, switch data registers,
000090  f44f51f8          MOV      r1,#0x1f00
000094  f8c011c4          STR      r1,[r0,#0x1c4]
;;;98     	LPC_SGPIO->REG[1] = 0xFFFFF;			//Data in normal register, not important for now
000098  495c              LDR      r1,|L1.524|
00009a  f8c010c4          STR      r1,[r0,#0xc4]
;;;99       LPC_SGPIO->REG_SS[1] = 0xFFFFF;			//Data in shadow register, used for match
00009e  f8c01104          STR      r1,[r0,#0x104]
;;;100    	
;;;101    	//pin 2.6, SGPIO07, slice L
;;;102      //Used as an output for PWM
;;;103      LPC_SGPIO->OUT_MUX_CFG[11] = 0x00000000;			//one bit mode
0000a2  f04f0000          MOV      r0,#0
0000a6  4958              LDR      r1,|L1.520|
0000a8  62c8              STR      r0,[r1,#0x2c]
;;;104      LPC_SGPIO->SGPIO_MUX_CFG[11] = (0x1 << 11);		//internal clock, concave on
0000aa  f44f6100          MOV      r1,#0x800
0000ae  4856              LDR      r0,|L1.520|
0000b0  66c1              STR      r1,[r0,#0x6c]
;;;105      LPC_SGPIO->SLICE_MUX_CFG[11] = 0x0;		//Interrupt on match on
0000b2  f04f0100          MOV      r1,#0
0000b6  f8c010ac          STR      r1,[r0,#0xac]
;;;106    	LPC_SGPIO->PRESET[11] = 0x1;					//clock speed = ((supplied clock / 2) / (preset + 1))
0000ba  f04f0101          MOV      r1,#1
0000be  f8c0116c          STR      r1,[r0,#0x16c]
;;;107      LPC_SGPIO->COUNT[11] = 0x0;
0000c2  f04f0100          MOV      r1,#0
0000c6  f8c011ac          STR      r1,[r0,#0x1ac]
;;;108      LPC_SGPIO->POS[11] = 0x1F00;					//after 32 clocks, switch data registers,
0000ca  f44f51f8          MOV      r1,#0x1f00
0000ce  f8c011ec          STR      r1,[r0,#0x1ec]
;;;109    	LPC_SGPIO->REG[11] = 0xFFFFF;			//Data in normal register, not important for now
0000d2  494e              LDR      r1,|L1.524|
0000d4  f8c010ec          STR      r1,[r0,#0xec]
;;;110      LPC_SGPIO->REG_SS[11] = 0xFFFFF;			//Data in shadow register, used for match
0000d8  f8c0112c          STR      r1,[r0,#0x12c]
;;;111    	
;;;112    	//pin 2.8, SGPIO15, slice P
;;;113      //Used as an output for PWM
;;;114      LPC_SGPIO->OUT_MUX_CFG[15] = 0x00000000;			//one bit mode
0000dc  f04f0000          MOV      r0,#0
0000e0  4949              LDR      r1,|L1.520|
0000e2  63c8              STR      r0,[r1,#0x3c]
;;;115      LPC_SGPIO->SGPIO_MUX_CFG[15] = (0x1 << 11);		//internal clock, concave on
0000e4  f44f6100          MOV      r1,#0x800
0000e8  4847              LDR      r0,|L1.520|
0000ea  67c1              STR      r1,[r0,#0x7c]
;;;116      LPC_SGPIO->SLICE_MUX_CFG[15] = 0x0;		//Interrupt on match on
0000ec  f04f0100          MOV      r1,#0
0000f0  f8c010bc          STR      r1,[r0,#0xbc]
;;;117    	LPC_SGPIO->PRESET[15] = 0x1;					//clock speed = ((supplied clock / 2) / (preset + 1))
0000f4  f04f0101          MOV      r1,#1
0000f8  f8c0117c          STR      r1,[r0,#0x17c]
;;;118      LPC_SGPIO->COUNT[15] = 0x0;
0000fc  f04f0100          MOV      r1,#0
000100  f8c011bc          STR      r1,[r0,#0x1bc]
;;;119      LPC_SGPIO->POS[15] = 0x1F00;					//after 32 clocks, switch data registers,
000104  f44f51f8          MOV      r1,#0x1f00
000108  f8c011fc          STR      r1,[r0,#0x1fc]
;;;120    	LPC_SGPIO->REG[15] = 0xFFFFF;			//Data in normal register, not important for now
00010c  493f              LDR      r1,|L1.524|
00010e  f8c010fc          STR      r1,[r0,#0xfc]
;;;121      LPC_SGPIO->REG_SS[15] = 0xFFFFF;			//Data in shadow register, used for match
000112  f8c0113c          STR      r1,[r0,#0x13c]
;;;122    
;;;123    
;;;124    	TimerInit(0, 100000);                   //Init a timer for delays
000116  493e              LDR      r1,|L1.528|
000118  f04f0000          MOV      r0,#0
00011c  f7fffffe          BL       TimerInit
;;;125    
;;;126    	LPC_SGPIO->CTRL_ENABLED = 0xFFFF;		//Enable all SGPIO clocks.
000120  f64f70ff          MOV      r0,#0xffff
000124  4938              LDR      r1,|L1.520|
000126  f8c1021c          STR      r0,[r1,#0x21c]
;;;127      NVIC_EnableIRQ(SGPIO_IINT_IRQn);        //Enable SGPIO Interrupt
00012a  201f              MOVS     r0,#0x1f
00012c  2101              MOVS     r1,#1
00012e  4081              LSLS     r1,r1,r0
000130  0942              LSRS     r2,r0,#5
000132  f04f23e0          MOV      r3,#0xe000e000
000136  eb030282          ADD      r2,r3,r2,LSL #2
00013a  f8c21100          STR      r1,[r2,#0x100]
00013e  bf00              NOP      
;;;128    
;;;129    
;;;130    	//Every 100mS the value of PWMCounter is changed, one up or one down.
;;;131    	//After SGPIO15 is done sending all data in REG a data swap occurs and the data swap interrupt.
;;;132    	//Every interrupt, the value of PWMValues[PWMcounter] is put in REG_SS, so every time PWMcounter changes in value the PWM value is changed 
;;;133    
;;;134    while (1)
000140  e023              B        |L1.394|
                  |L1.322|
;;;135    	{
;;;136    		i = SystemCoreClock;
000142  4834              LDR      r0,|L1.532|
000144  6800              LDR      r0,[r0,#0]  ; SystemCoreClock
000146  4934              LDR      r1,|L1.536|
000148  6008              STR      r0,[r1,#0]  ; i
;;;137    		SGPIOPWMValue(0x1E, 15);
00014a  210f              MOVS     r1,#0xf
00014c  201e              MOVS     r0,#0x1e
00014e  f7fffffe          BL       SGPIOPWMValue
;;;138    		DelayMs(0, 250);
000152  21fa              MOVS     r1,#0xfa
000154  2000              MOVS     r0,#0
000156  f7fffffe          BL       DelayMs
;;;139    		SGPIOPWMValue(0x03, 15);
00015a  210f              MOVS     r1,#0xf
00015c  2003              MOVS     r0,#3
00015e  f7fffffe          BL       SGPIOPWMValue
;;;140    		DelayMs(0, 250);
000162  21fa              MOVS     r1,#0xfa
000164  2000              MOVS     r0,#0
000166  f7fffffe          BL       DelayMs
;;;141    		SGPIOPWMValue(0x1E, 11);
00016a  210b              MOVS     r1,#0xb
00016c  201e              MOVS     r0,#0x1e
00016e  f7fffffe          BL       SGPIOPWMValue
;;;142    		DelayMs(0, 250);
000172  21fa              MOVS     r1,#0xfa
000174  2000              MOVS     r0,#0
000176  f7fffffe          BL       DelayMs
;;;143    		SGPIOPWMValue(0x03, 11);
00017a  210b              MOVS     r1,#0xb
00017c  2003              MOVS     r0,#3
00017e  f7fffffe          BL       SGPIOPWMValue
;;;144    		DelayMs(0, 250);
000182  21fa              MOVS     r1,#0xfa
000184  2000              MOVS     r0,#0
000186  f7fffffe          BL       DelayMs
                  |L1.394|
00018a  e7da              B        |L1.322|
;;;145    	}
;;;146    }
;;;147    
                          ENDP

                  main PROC
;;;153       file, and that startup code will setup stacks and data */
;;;154    int main(void)
00018c  f7fffffe          BL       c_entry
;;;155    {
;;;156    
;;;157        return c_entry();
;;;158    }
;;;159    #define DEBUG
                          ENDP

                  check_failed PROC
;;;167    *******************************************************************************/
;;;168    void check_failed(uint8_t *file, uint32_t line)
000190  bf00              NOP      
                  |L1.402|
;;;169    {
;;;170    	/* User can add his own implementation to report the file name and line number,
;;;171    	 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
;;;172    
;;;173    	/* Infinite loop */
;;;174    	while(1);
000192  e7fe              B        |L1.402|
;;;175    }
;;;176    
                          ENDP

                  SGPIO_IRQHandler PROC
;;;177    void SGPIO_IRQHandler (void)                    //Handles all SGPIO interrupts
000194  481a              LDR      r0,|L1.512|
;;;178    {
;;;179    	interruptvar = LPC_SGPIO->STATUS_1;	
000196  1f00              SUBS     r0,r0,#4
000198  6800              LDR      r0,[r0,#0]
00019a  4920              LDR      r1,|L1.540|
00019c  6008              STR      r0,[r1,#0]  ; interruptvar
;;;180    	if (interruptvar & (1 << chan))		//Slice P P2.8
00019e  4816              LDR      r0,|L1.504|
0001a0  7801              LDRB     r1,[r0,#0]  ; chan
0001a2  2001              MOVS     r0,#1
0001a4  4088              LSLS     r0,r0,r1
0001a6  491d              LDR      r1,|L1.540|
0001a8  6809              LDR      r1,[r1,#0]  ; interruptvar
0001aa  4208              TST      r0,r1
0001ac  d021              BEQ      |L1.498|
;;;181    	{
;;;182    		LPC_SGPIO->REG_SS[chan] = PWMValues[val];
0001ae  481c              LDR      r0,|L1.544|
0001b0  4912              LDR      r1,|L1.508|
0001b2  7809              LDRB     r1,[r1,#0]  ; val
0001b4  f8501021          LDR      r1,[r0,r1,LSL #2]
0001b8  481a              LDR      r0,|L1.548|
0001ba  4a0f              LDR      r2,|L1.504|
0001bc  7812              LDRB     r2,[r2,#0]  ; chan
0001be  f8401022          STR      r1,[r0,r2,LSL #2]
;;;183    		intcount += 1;
0001c2  4819              LDR      r0,|L1.552|
0001c4  7800              LDRB     r0,[r0,#0]  ; intcount
0001c6  1c40              ADDS     r0,r0,#1
0001c8  4917              LDR      r1,|L1.552|
0001ca  7008              STRB     r0,[r1,#0]
;;;184    		LPC_SGPIO->CTR_STATUS_1 =  0xFFFF;			//Clear the interrupts
0001cc  f64f70ff          MOV      r0,#0xffff
0001d0  490b              LDR      r1,|L1.512|
0001d2  6008              STR      r0,[r1,#0]
;;;185    		if(intcount >= 2)
0001d4  4814              LDR      r0,|L1.552|
0001d6  7800              LDRB     r0,[r0,#0]  ; intcount
0001d8  2802              CMP      r0,#2
0001da  db0a              BLT      |L1.498|
;;;186    		{
;;;187    			LPC_SGPIO->SET_EN_1 = 0x0000;	//interrupt when slice 15, 11 or 1 switches data register
0001dc  2000              MOVS     r0,#0
0001de  4908              LDR      r1,|L1.512|
0001e0  390c              SUBS     r1,r1,#0xc
0001e2  6008              STR      r0,[r1,#0]
;;;188    			LPC_SGPIO->CLR_EN_1	= 0xffff;		// disable interrupting on clock
0001e4  f64f70ff          MOV      r0,#0xffff
0001e8  1f09              SUBS     r1,r1,#4
0001ea  6008              STR      r0,[r1,#0]
;;;189    			intcount = 0;
0001ec  2000              MOVS     r0,#0
0001ee  490e              LDR      r1,|L1.552|
0001f0  7008              STRB     r0,[r1,#0]
                  |L1.498|
;;;190    		}
;;;191    	}
;;;192    	
;;;193    }
0001f2  4770              BX       lr
;;;194    
                          ENDP

                  SGPIOPWMinit PROC
;;;202    
;;;203    void SGPIOPWMinit(uint8_t freq, uint8_t channel)
0001f4  4770              BX       lr
;;;204    {
;;;205    	
;;;206    }
;;;207    
                          ENDP

0001f6  0000              DCW      0x0000
                  |L1.504|
                          DCD      chan
                  |L1.508|
                          DCD      val
                  |L1.512|
                          DCD      0x40101f30
                  |L1.516|
                          DCD      0x40101218
                  |L1.520|
                          DCD      0x40101000
                  |L1.524|
                          DCD      0x000fffff
                  |L1.528|
                          DCD      0x000186a0
                  |L1.532|
                          DCD      SystemCoreClock
                  |L1.536|
                          DCD      i
                  |L1.540|
                          DCD      interruptvar
                  |L1.544|
                          DCD      PWMValues
                  |L1.548|
                          DCD      0x40101100
                  |L1.552|
                          DCD      intcount

                          AREA ||.bss||, DATA, NOINIT, ALIGN=2

                  PWMcounter
                          %        64

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

                  PWMValues
                          DCD      0x00000000
                          DCD      0x00000001
                          DCD      0x00000003
                          DCD      0x00000007
                          DCD      0x0000000f
                          DCD      0x0000001f
                          DCD      0x0000003f
                          DCD      0x0000007f
                          DCD      0x000000ff
                          DCD      0x000001ff
                          DCD      0x000003ff
                          DCD      0x000007ff
                          DCD      0x00000fff
                          DCD      0x00001fff
                          DCD      0x00003fff
                          DCD      0x00007fff
                          DCD      0x0000ffff
                          DCD      0x0001ffff
                          DCD      0x0003ffff
                          DCD      0x0007ffff
                          DCD      0x000fffff
                          DCD      0x001fffff
                          DCD      0x003fffff
                          DCD      0x007fffff
                          DCD      0x00ffffff
                          DCD      0x01ffffff
                          DCD      0x03ffffff
                          DCD      0x07ffffff
                          DCD      0x0fffffff
                          DCD      0x1fffffff
                          DCD      0x3fffffff
                          DCD      0x7fffffff
                          DCD      0xffffffff
                  interruptvar
                          DCD      0x00000000
                  tempvar
                          DCD      0x00000000
                  chan
00008c  00                DCB      0x00
                  val
00008d  00                DCB      0x00
                  intcount
00008e  0000              DCB      0x00,0x00
                  i
                          DCD      0x00000000
                  tempx
                          DCD      0x00000000
                  tempy
                          DCD      0x00000000

;*** Start embedded assembler ***

#line 1 "Blinky.c"
	AREA ||.rev16_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___8_Blinky_c_62ad53cd____REV16|
#line 115 "C:\\Keil\\ARM\\CMSIS\\Include\\core_cmInstr.h"
|__asm___8_Blinky_c_62ad53cd____REV16| PROC
#line 116

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___8_Blinky_c_62ad53cd____REVSH|
#line 130
|__asm___8_Blinky_c_62ad53cd____REVSH| PROC
#line 131

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***

                  __ARM_use_no_argv EQU 0
