Esempio n. 1
0
uint32_t TM_RNG_Get(void) {
	//Wait until one RNG number is ready
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET);

	//Get a 32bit Random number
	//return RNG_GetRandomNumber();
	return RNG->DR;
	/**** while(RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET);
	 8000276:	2001      	movs	r0, #1
 	 8000278:	f00a f8c6 	bl	800a408 <RNG_GetFlagStatus>
 	 800027c:	4603      	mov	r3, r0
 	 800027e:	2b00      	cmp	r3, #0
 	 8000280:	d0f9      	beq.n	8000276 <TM_RNG_Get+0x6>
	 *
	 *
	 **** return RNG->DR;
	 * ldr	r3, [pc, #8]	; (800028c <TM_RNG_Get+0x1c>)
 	 8000284:	689b      	ldr	r3, [r3, #8]
 	 800028c:	50060800 	.word	0x50060800

	 //equivalent:
 	 ldr r0,=0x50060800
 	 ldr r0, [r0, #8]
	 */

	//#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region                                */
	//#define AHB2PERIPH_BASE       (PERIPH_BASE + 0x10000000)
	//#define RNG_BASE              (AHB2PERIPH_BASE + 0x60800)
	//RNG_BASE = 0x50060800

}
// generate one random number
uint32_t get_random_number()
{
	/* Wait until one RNG number is ready */
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET);
	/* Get a 32bit Random number */
	uint32_t r = RNG_GetRandomNumber();
	return r;
}
Esempio n. 3
0
uint32_t GetRandomInteger(void) {
	if (!RNGInitialized) {
		//ERROR
		return 0;
	}
	while (RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET);
	return RNG_GetRandomNumber();
}
Esempio n. 4
0
uint32_t SRAM_Test(void)
{
  uint32_t  adr   = 0;
  uint32_t  error = 0;
  uint16_t *prnd;
  uint16_t *pmem;
  uint16_t  temp;
  
  prnd = malloc(512); 
 
  RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
  RNG_Cmd(ENABLE);
  
  for(adr = 0; adr < 512; adr++)
  {
    while(RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET); 
    *(prnd++) = (uint16_t)RNG_GetRandomNumber();   
  } 
   
  RNG_Cmd(DISABLE);
  RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,DISABLE);     
  
  prnd -= 512;
  pmem = (uint16_t*)sram_bank3;
  temp = *prnd;
  
  for(adr = 0; adr < 524288; adr++)
  { 
    if((adr & 0x3ff) == 0x3ff) temp = *(prnd++);
    temp = (temp + 1024) * 5;
    *(pmem++) = temp;
  }
  
  for(int test_num = 0; test_num < 3; test_num++)
  {
    prnd -= 512;
    pmem = (uint16_t*)sram_bank3;
    temp = *prnd;
  
    for(adr = 0; adr < 524288; adr++)
    {
      if((adr & 0x3ff) == 0x3ff) temp = *(prnd++);
      
      temp = (temp + 1024) * 5;
      
      if(temp != *(pmem++)) error++;
    }
  }
  
  free(prnd); 
  return error;
}
Esempio n. 5
0
int init_rng(void)
{
	u16 retry=0; 
	RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);  //开启 RNG 时钟   
	RNG_Cmd(ENABLE);  //使能 RNG
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET&&retry<10000)//等待就绪
	{  
		retry++; 
		delay_ms(1); 
	}
	if(retry>=10000)return 1;//随机数产生器工作不正常
	return 0;
}
Esempio n. 6
0
void vTaskTest( void* pvParam ) 
{
	u8 t, i;
	Uart_putstr( "vTaskTest start" ) ;
	RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE);
	RNG_Cmd(ENABLE); 
	while( 1 )
	{
		xQueueSend( xqh_Tpframe, (void*)NULL, 0 ) ;
			while(RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET);  
		t = RNG_GetRandomNumber(); 
		for( i = 0; i < t; i++ )
			vTaskDelay( 100/portTICK_RATE_MS ) ;
	}
}
Esempio n. 7
0
void rng_irq_handler(void) {
    portBASE_TYPE shouldYield = pdFALSE;
    uint32_t word = 0;

    if(RNG_GetFlagStatus(RNG_FLAG_DRDY) == SET) {
        word = RNG_GetRandomNumber();
        if(pdTRUE != xQueueSendFromISR(rng_buffer, &word, &shouldYield)) {
                RNG_ITConfig(DISABLE);
        }
    }

    if(pdTRUE == shouldYield) {
        taskYIELD();
    }
}
Esempio n. 8
0
/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{
 uint32_t random32bit = 0;
 uint32_t counter = 0;

  /*!< At this stage the microcontroller clock setting is already configured, 
       this is done through SystemInit() function which is called from startup
       files (startup_stm32f40_41xxx.s/startup_stm32f427_437xx.s/startup_stm32f429_439xx.s)
       before to branch to application main. 
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f4xx.c file
     */

  /* Display init (LCD or/and USART)*/
  Display_Init();
  
  /* Key Button configuration */
  STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO);
  
  /* RNG configuration */
  RNG_Config();

  while (1)
  {
    /* Wait until Key button is pressed */
    while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET)
    {
    }
    /* Loop while Key button is maintained pressed */
    while(STM_EVAL_PBGetState(BUTTON_KEY) == RESET)
    {
    }

    for(counter = 0; counter < 8; counter++)
    {
      /* Wait until one RNG number is ready */
      while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET)
      {
      }

      /* Get a 32bit Random number */       
      random32bit = RNG_GetRandomNumber();

      /* Display the Random number value on the LCD or/and USART */
      Display(random32bit, counter+1);
    }
  }
}
Esempio n. 9
0
/**
 * @Function u8 RNG_Init(void);
 * @Description Init_RNG
 * @Return 0:SUCESS
 *				 1:Error 
 */
u8 RNG_Init(void)
{
	u16 retry=0; 
	
  RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);//开启RNG时钟,来自PLL48CLK
	
	RNG_Cmd(ENABLE);	//使能RNG
	
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET&&retry<10000)	//等待随机数就绪
	{
		retry++;
		delay_us(100);
	}
	if(retry>=10000)return 1;//随机数产生器工作不正常
	return 0;
}
Esempio n. 10
0
// rstephane : get a random number between pre defined two markers
uint8_t GetRndValue6()
{
	uint8_t rndData;
	initRng();	
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET)
      	{
      	}
      	
      	/* Get a random number between 0 and 6 */
   	do {
        	rndData = GetRngValue();
 
        	/* mask off the bottom 3 bits */ 
       		rndData = rndData & 0x00000007;
    	} while (rndData == 6 || rndData == 7);
    
      return rndData;
}
Esempio n. 11
0
// rstephane : get a random number between pre defined two markers
uint8_t GetRndValue127()
{
	uint8_t rndData;
	initRng();	
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET)
      	{
      	}
      	
      	/* Get a random number between 0 and 15 */
   	do {
        	rndData = GetRngValue();
 
         	/* mask off the bottom 7 bits 0 to 126 */ 
        	rndData = rndData & 0x0000007F;
    	} while (rndData == 127);
    
      return rndData;
}
Esempio n. 12
0
/**
 * @Function u32 RNG_Get_RandomNum(void);
 * @Description Get_RandomNum
 * @Return u32 得到随机数
 */
u32 RNG_Get_RandomNum(void)
{	 
	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==RESET);	//等待随机数就绪  
	return RNG_GetRandomNumber();	
}
Esempio n. 13
0
/* This function runs before the OS start. */
void NetworkConnecting()
{
	int i, p, test, test1;
	int sendcounter = 0;
	u32 *pu32 = NULL;
	
	test1 = Timer2Counter;
	test = Timer2Counter;
	
	
	sPacketbuf[DES_NUM] = SELFADDRESS;
	sPacketbuf[SRC_NUM] = SELFADDRESS;
	
	CC2500_SeleChannel(0);
	CC2500_SetRecvAddr(SELFADDRESS);

	CC2500_SetRxd();
	
	CC2500_SendPacket(sPacketbuf,PACKET_LEN);
	CC2500_SetRxd();
	
	sPacketbuf[DES_NUM]=0x00;
	NbrList[0]=NbrCount;
	
//	while(RESET==RNG_GetFlagStatus(RNG_FLAG_DRDY));
//	Delay_100us(RNG_GetRandomNumber() & 0x000000f);
  pu32 = (u32*) &sPacketbuf[1];
	while (0 == NodeFlag[SELFADDRESS])
	{
		if (ISIDLE)
		{
			NbrList[0] = NbrCount;
			sPacketbuf[PRC_NUM] = DISCOVERY_MESSAGE;
			arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1);
			pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp.
			CRC_ResetDR();
			pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1);
			p = Bernoulli(1.0/(MAXNUM-NbrCount+1));
			//Delay_100us(1);
			if (ISIDLE)
			{
				if (0 == DelayFlag)
				{
					if (p/*Bernoulli(1.0/(MAXNUM-NbrCount+1))*/)
					{
						
						CC2500_SendPacket(sPacketbuf, PACKET_LEN);
						CC2500_SetRxd();
						DelayFlag=1;
					}
				}
				else
				{
					Preemptive_Delay_100us(25, &DelayFlag);
					DelayFlag=0;
				}
			}
		}
	
	}
	
	
	test1 = Timer2Counter - test1;
	while(MAXNUM > NbrCount)
	{
		if (0 != DiscoveryHelp)
		{
			if (ISIDLE)
			{
				Delay_100us(1);
				if (ISIDLE)
				{	
          if (Bernoulli(1.0/(MAXNUM-NbrCount+1)))
					{						
						NbrList[0] = NbrCount;
						sPacketbuf[PRC_NUM] = DISCOVERY_MESSAGE;
						arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1);
						pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp.
						CRC_ResetDR();
						pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1);
						CC2500_SendPacket(sPacketbuf, PACKET_LEN);
						CC2500_SetRxd();
					}
				}
			}	
			DiscoveryHelp = 0;
		}
		
	}
	
	test = Timer2Counter - test;
	while(RESET==RNG_GetFlagStatus(RNG_FLAG_DRDY));
	Delay_100us(RNG_GetRandomNumber() & 0x000000f);
	
	pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp.
	sendcounter = 3;
	while (0 != sendcounter)
	{
		if (ISIDLE)
		{
			Delay_100us(1);
			if (ISIDLE)
			{				
				NbrList[0] = NbrCount;
				sPacketbuf[PRC_NUM] = DISCOVERY_ACCOMPLISHED;
				arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1);
				CRC_ResetDR();
				pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1);
				CC2500_SendPacket(sPacketbuf, PACKET_LEN);
				CC2500_SetRxd();
				sendcounter--;
			}
		}	
		Delay_100us(10);
	}
	
	printf("NeighbourList:\r\n");
	for (i=0;i<MAXNUM;i++)
	{
		printf("%#x\r\n",NbrList[1+i]);
	}
  printf("t1 = %d\r\n", test1);
	printf("t = %d\r\n", test);
}
Esempio n. 14
0
uint32_t rng_get(void)
{

	while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET);
	return RNG_GetRandomNumber();
}
Esempio n. 15
0
/**
  * @brief  Start recording
  * @param  None
  * @retval None
  */
static void RECORDER_Start (void)
{
  GL_PageControls_TypeDef* item;
  uint8_t time[6];
  RTC_TimeTypeDef   RTC_TimeStructure;
  RTC_DateTypeDef   RTC_DateStructure;

  /*Create file name */
  if ( RTC_Error == 0)
  {
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
    RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);

    sprintf((char *)RecFileName, "Rec_%02d%02d%d%02d%02d%02d.wav", RTC_DateStructure.RTC_Date,
            RTC_DateStructure.RTC_Month,
            RTC_DateStructure.RTC_Year + 2000,
            RTC_TimeStructure.RTC_Hours,
            RTC_TimeStructure.RTC_Minutes,
            RTC_TimeStructure.RTC_Seconds);
  }
  else
  {
    /* Wait until one RNG number is ready */
    while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET)
    {
    }
    RecoveryRecorderCounter = RNG_GetRandomNumber() & 0x7FFFFFFF;
    sprintf((char *)RecFileName, "Rec_%014d.wav", (int)RecoveryRecorderCounter);
  }

  RECORDER_GetDefaultDirectory();
  strcat ((char *)REC_DefaultPath,"/");
  strcat((char *)REC_DefaultPath, (char *)RecFileName);
  RefreshLabel(RecordPage , REC_FILNAME_ID, (uint8_t *)"                                  ");


  if (AudioRecorder_Open(REC_DefaultPath))
  {
    memset (RecFileName, 0, sizeof(RecFileName));
    RefreshLabel(RecordPage , REC_FILNAME_ID, (uint8_t *)"Error Open File !");
    return;
  }
  else
  {
    RefreshLabel(RecordPage , REC_FILNAME_ID, RecFileName);
  }
  
  /* Graphical update */
  DestroyPageControl (RecordPage, REC_STRT_ID);
  RefreshPageControl(RecordPage, REC_STRT_ID);

  DestroyPageControl (RecordPage, REC_PLAY_ID);
  RefreshPageControl(RecordPage, REC_PLAY_ID);

  DestroyPageControl (RecordPage, REC_PAUSE_ID);
  RefreshPageControl(RecordPage, REC_PAUSE_ID);

  item = NewIcon (REC_STOP_ID, rec_stop_icon, 40, 40, RECORDER_Stop);
  AddPageControlObj(170,135,item, RecordPage);
  RefreshPageControl(RecordPage, REC_STOP_ID);

  item = NewIcon (REC_PAUSE_ID, rec_pause_icon, 40, 40, RECORDER_Pause);
  AddPageControlObj(110,135,item, RecordPage);
  RefreshPageControl(RecordPage, REC_PAUSE_ID);

  item = NewIcon (REC_CANCEL_ID, rec_cancel_icon, 40, 40, RECORDER_Cancel);
  AddPageControlObj(50,135,item, RecordPage);
  RefreshPageControl(RecordPage, REC_CANCEL_ID);

  sprintf((char *)time, "%02d:%02d", 0, 0);
  RefreshLabel(RecordPage, REC_TIME_ID, time);

  REC_GL_State = REC_GL_RECORDING;
  Recorder_UsedStorage = REC_DefaultPath[0];
  AudioRecorder_Start();
}
Esempio n. 16
0
/**
  * @brief  Save the image frame into a file
  * @param  Storage path
  * @param  file_name 
  * @retval Status 0 = Sucess, !0 :error
  */
static uint8_t Save_Bmp_To_File (uint8_t *path , uint8_t *file_name)
{
  RTC_TimeTypeDef   RTC_TimeStructure;
  RTC_DateTypeDef   RTC_DateStructure;
  uint32_t i = 0 ,j = 0 , Index;

  FIL file;

  for ( i = 0 ; i < IMAGE_COLUMN_SIZE; i++)
  {
    for ( j= 0 ; j < 2 * IMAGE_LINE_SIZE; j++)
    {
      ImageBuffer.SrcData[j + (2 * IMAGE_LINE_SIZE * i)] = ImageBuffer.RawData[j + (2 * IMAGE_LINE_SIZE * ( IMAGE_COLUMN_SIZE- 1 - i))];
    }
  }


  /* Convert RGB16 image to RGB24 */
  RGB16toRGB24(ImageBuffer.DestData, ImageBuffer.SrcData, 1);

  /* Update file name */
  strcpy((char *)ImageBuffer.ImageName , (char *)path),
  strcat ((char *)ImageBuffer.ImageName, "/");

  if ( RTC_Error == 0)
  {
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
    RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);

    sprintf((char *)file_name, "Camera_%02d%02d%d%02d%02d%02d.bmp", RTC_DateStructure.RTC_Date,
            RTC_DateStructure.RTC_Month,
            RTC_DateStructure.RTC_Year + 2000,
            RTC_TimeStructure.RTC_Hours,
            RTC_TimeStructure.RTC_Minutes,
            RTC_TimeStructure.RTC_Seconds);
  }
  else
  {
    /* Wait until one RNG number is ready */
    while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET)
    {
    }
    RecoveryImageCounter = (uint32_t )(RNG_GetRandomNumber() & 0x7FFFFFFF) ;
    sprintf((char *)file_name, "Camera_%014d.bmp", (int)RecoveryImageCounter);
  }

  strcat ((char *)ImageBuffer.ImageName, (char *)file_name);


  /* Can not create file */
  if (f_open(&file, (char *)ImageBuffer.ImageName, FA_CREATE_NEW | FA_WRITE) != FR_OK)
  {
    return 0;
  }

  /* Write the received data into the file */
  if (f_write(&file, (char*)ImageBuffer.ImageHeader, RGB_HEADER_SIZE, (UINT*)&Index))
  {
    f_close(&file);
    return 0;
  }

  if (f_write(&file, (char*)ImageBuffer.DestData, MAX_IMAGE_SIZE, (UINT*)&Index))
  {
    f_close(&file);
    return 0;
  }
  /* Close file */
  f_close(&file);
  return 1 ;
}