; generated by ARM C/C++ Compiler, 4.1 [Build 894]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\STM324xG_EVAL\stm32f4xx_rng.o --asm_dir=.\STM324xG_EVAL\ --list_dir=.\STM324xG_EVAL\ --depend=.\STM324xG_EVAL\stm32f4xx_rng.d --cpu=Cortex-M4.fp --apcs=interwork -O0 -Otime -I..\ -I..\..\..\Libraries\CMSIS\Device\ST\STM32F4xx\Include -I..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc -I..\..\..\Utilities\STM32_EVAL\Common -I..\..\..\Utilities\STM32_EVAL\STM3240_41_G_EVAL -IC:\Keil\ARM\RV31\Inc -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\Inc\ST\STM32F4xx -D__MICROLIB -DUSE_STM324xG_EVAL -DSTM32F4XX -DUSE_STDPERIPH_DRIVER --omf_browse=.\STM324xG_EVAL\stm32f4xx_rng.crf ..\..\..\Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c]
                          THUMB

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

                  RNG_ClearFlag PROC
;;;326      */
;;;327    void RNG_ClearFlag(uint8_t RNG_FLAG)
000000  ea6f1100          MVN      r1,r0,LSL #4
;;;328    {
;;;329      /* Check the parameters */
;;;330      assert_param(IS_RNG_CLEAR_FLAG(RNG_FLAG));
;;;331      /* Clear the selected RNG flags */
;;;332      RNG->SR = ~(uint32_t)(((uint32_t)RNG_FLAG) << 4);
000004  4a01              LDR      r2,|L1.12|
000006  6011              STR      r1,[r2,#0]
;;;333    }
000008  4770              BX       lr
;;;334    
                          ENDP

00000a  0000              DCW      0x0000
                  |L1.12|
                          DCD      0x50060804

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

                  RNG_ClearITPendingBit PROC
;;;372      */
;;;373    void RNG_ClearITPendingBit(uint8_t RNG_IT)
000000  43c1              MVNS     r1,r0
;;;374    {
;;;375      /* Check the parameters */
;;;376      assert_param(IS_RNG_IT(RNG_IT));
;;;377    
;;;378      /* Clear the selected RNG interrupt pending bit */
;;;379      RNG->SR = (uint8_t)~RNG_IT;
000002  b2c9              UXTB     r1,r1
000004  4a01              LDR      r2,|L2.12|
000006  6011              STR      r1,[r2,#0]
;;;380    }
000008  4770              BX       lr
;;;381    /**
                          ENDP

00000a  0000              DCW      0x0000
                  |L2.12|
                          DCD      0x50060804

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

                  RNG_Cmd PROC
;;;108      */
;;;109    void RNG_Cmd(FunctionalState NewState)
000000  b130              CBZ      r0,|L3.16|
;;;110    {
;;;111      /* Check the parameters */
;;;112      assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;113    
;;;114      if (NewState != DISABLE)
;;;115      {
;;;116        /* Enable the RNG */
;;;117        RNG->CR |= RNG_CR_RNGEN;
000002  4907              LDR      r1,|L3.32|
000004  6809              LDR      r1,[r1,#0]
000006  f0410104          ORR      r1,r1,#4
00000a  4a05              LDR      r2,|L3.32|
00000c  6011              STR      r1,[r2,#0]
00000e  e005              B        |L3.28|
                  |L3.16|
;;;118      }
;;;119      else
;;;120      {
;;;121        /* Disable the RNG */
;;;122        RNG->CR &= ~RNG_CR_RNGEN;
000010  4903              LDR      r1,|L3.32|
000012  6809              LDR      r1,[r1,#0]
000014  f0210104          BIC      r1,r1,#4
000018  4a01              LDR      r2,|L3.32|
00001a  6011              STR      r1,[r2,#0]
                  |L3.28|
;;;123      }
;;;124    }
00001c  4770              BX       lr
;;;125    /**
                          ENDP

00001e  0000              DCW      0x0000
                  |L3.32|
                          DCD      0x50060800

                          AREA ||i.RNG_DeInit||, CODE, READONLY, ALIGN=1

                  RNG_DeInit PROC
;;;93       */
;;;94     void RNG_DeInit(void)
000000  b510              PUSH     {r4,lr}
;;;95     {
;;;96       /* Enable RNG reset state */
;;;97       RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, ENABLE);
000002  2101              MOVS     r1,#1
000004  2040              MOVS     r0,#0x40
000006  f7fffffe          BL       RCC_AHB2PeriphResetCmd
;;;98     
;;;99       /* Release RNG from reset state */
;;;100      RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, DISABLE);
00000a  2100              MOVS     r1,#0
00000c  2040              MOVS     r0,#0x40
00000e  f7fffffe          BL       RCC_AHB2PeriphResetCmd
;;;101    }
000012  bd10              POP      {r4,pc}
;;;102    
                          ENDP


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

                  RNG_GetFlagStatus PROC
;;;293      */
;;;294    FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG)
000000  4601              MOV      r1,r0
;;;295    {
;;;296      FlagStatus bitstatus = RESET;
000002  2000              MOVS     r0,#0
;;;297      /* Check the parameters */
;;;298      assert_param(IS_RNG_GET_FLAG(RNG_FLAG));
;;;299    
;;;300      /* Check the status of the specified RNG flag */
;;;301      if ((RNG->SR & RNG_FLAG) != (uint8_t)RESET)
000004  4a03              LDR      r2,|L5.20|
000006  6812              LDR      r2,[r2,#0]
000008  420a              TST      r2,r1
00000a  d001              BEQ      |L5.16|
;;;302      {
;;;303        /* RNG_FLAG is set */
;;;304        bitstatus = SET;
00000c  2001              MOVS     r0,#1
00000e  e000              B        |L5.18|
                  |L5.16|
;;;305      }
;;;306      else
;;;307      {
;;;308        /* RNG_FLAG is reset */
;;;309        bitstatus = RESET;
000010  2000              MOVS     r0,#0
                  |L5.18|
;;;310      }
;;;311      /* Return the RNG_FLAG status */
;;;312      return  bitstatus;
;;;313    }
000012  4770              BX       lr
;;;314    
                          ENDP

                  |L5.20|
                          DCD      0x50060804

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

                  RNG_GetITStatus PROC
;;;342      */
;;;343    ITStatus RNG_GetITStatus(uint8_t RNG_IT)
000000  4601              MOV      r1,r0
;;;344    {
;;;345      ITStatus bitstatus = RESET;
000002  2000              MOVS     r0,#0
;;;346      /* Check the parameters */
;;;347      assert_param(IS_RNG_GET_IT(RNG_IT));
;;;348    
;;;349      /* Check the status of the specified RNG interrupt */
;;;350      if ((RNG->SR & RNG_IT) != (uint8_t)RESET)
000004  4a03              LDR      r2,|L6.20|
000006  6812              LDR      r2,[r2,#0]
000008  420a              TST      r2,r1
00000a  d001              BEQ      |L6.16|
;;;351      {
;;;352        /* RNG_IT is set */
;;;353        bitstatus = SET;
00000c  2001              MOVS     r0,#1
00000e  e000              B        |L6.18|
                  |L6.16|
;;;354      }
;;;355      else
;;;356      {
;;;357        /* RNG_IT is reset */
;;;358        bitstatus = RESET;
000010  2000              MOVS     r0,#0
                  |L6.18|
;;;359      }
;;;360      /* Return the RNG_IT status */
;;;361      return bitstatus;
;;;362    }
000012  4770              BX       lr
;;;363    
                          ENDP

                  |L6.20|
                          DCD      0x50060804

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

                  RNG_GetRandomNumber PROC
;;;170      */
;;;171    uint32_t RNG_GetRandomNumber(void)
000000  4801              LDR      r0,|L7.8|
;;;172    {
;;;173      /* Return the 32 bit random number from the DR register */
;;;174      return RNG->DR;
000002  6800              LDR      r0,[r0,#0]
;;;175    }
000004  4770              BX       lr
;;;176    
                          ENDP

000006  0000              DCW      0x0000
                  |L7.8|
                          DCD      0x50060808

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

                  RNG_ITConfig PROC
;;;267      */
;;;268    void RNG_ITConfig(FunctionalState NewState)
000000  b130              CBZ      r0,|L8.16|
;;;269    {
;;;270      /* Check the parameters */
;;;271      assert_param(IS_FUNCTIONAL_STATE(NewState));
;;;272    
;;;273      if (NewState != DISABLE)
;;;274      {
;;;275        /* Enable the RNG interrupt */
;;;276        RNG->CR |= RNG_CR_IE;
000002  4907              LDR      r1,|L8.32|
000004  6809              LDR      r1,[r1,#0]
000006  f0410108          ORR      r1,r1,#8
00000a  4a05              LDR      r2,|L8.32|
00000c  6011              STR      r1,[r2,#0]
00000e  e005              B        |L8.28|
                  |L8.16|
;;;277      }
;;;278      else
;;;279      {
;;;280        /* Disable the RNG interrupt */
;;;281        RNG->CR &= ~RNG_CR_IE;
000010  4903              LDR      r1,|L8.32|
000012  6809              LDR      r1,[r1,#0]
000014  f0210108          BIC      r1,r1,#8
000018  4a01              LDR      r2,|L8.32|
00001a  6011              STR      r1,[r2,#0]
                  |L8.28|
;;;282      }
;;;283    }
00001c  4770              BX       lr
;;;284    
                          ENDP

00001e  0000              DCW      0x0000
                  |L8.32|
                          DCD      0x50060800

;*** Start embedded assembler ***

#line 1 "..\\..\\..\\Libraries\\STM32F4xx_StdPeriph_Driver\\src\\stm32f4xx_rng.c"
	AREA ||.rev16_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___15_stm32f4xx_rng_c_3ce7902d____REV16|
#line 114 "C:\\Keil\\ARM\\CMSIS\\Include\\core_cmInstr.h"
|__asm___15_stm32f4xx_rng_c_3ce7902d____REV16| PROC
#line 115

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___15_stm32f4xx_rng_c_3ce7902d____REVSH|
#line 128
|__asm___15_stm32f4xx_rng_c_3ce7902d____REVSH| PROC
#line 129

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
