Esempio n. 1
0
void SPI2_IRQHandler(void)
{  
   u16 volume;
   u16 app;

  /* Check if data are available in SPI Data register */
  if (SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESET)
  {
    app = SPI_I2S_ReceiveData(SPI2);
    InternalBuffer[InternalBufferSize++] = HTONS(app);
    
    /* Check to prevent overflow condition */
    if (InternalBufferSize >= INTERNAL_BUFF_SIZE)
    {
      InternalBufferSize = 0;
     
      volume = 50;
      
      PDM_Filter_64_LSB((uint8_t *)InternalBuffer, (uint16_t *)pAudioRecBuf, volume , (PDMFilter_InitStruct *)&Filter);

      if(sample_collected_fp != NULL)
          sample_collected_fp((int16_t*)pAudioRecBuf);
    }
  }
}
Esempio n. 2
0
void SPI2_IRQHandler(void){
	uint16_t mask,i;
	uint16_t app;
	static uint8_t k = 0;

	/* Check if data are available in SPI Data register */
	  if (SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESET)
	  {

			app = SPI_I2S_ReceiveData(SPI2);// 64 decimation

			  mask = 0x01;
			  for(i=0;i<16;i++)
			  	  {
				  	  if(mask & app)
				  		  samp64 += 1;
				  	  else
				  		  samp64 -= 1;
				  	  mask <<= 1;
			  	  }
			 if(k==3)
				  {
				 	  k=0;
				 	  if(MAXIMUM <samp64) MAXIMUM = samp64;
				 	 // if(samp64 > CLAPLIMIT) DisplayOn = 1;
				 	  samp64 = 0;
				  }

			 k++;
	  	 }
	return;
}
void SPI2_IRQHandler(void){
  extern PDMFilter_InitStruct Filter;
  extern uint16_t* AudioRecBuf;
  extern uint16_t* WriteBuf;
  extern uint16_t  PDM_Input_Buffer[];
  extern uint16_t PCM_Output_Buffer[];

  u16 volume;
  u16 app;

  // Check if new data are available in SPI data register
  if (SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESET){
    // Read received data and save it in internal table
    app = SPI_I2S_ReceiveData(SPI2);
   // PDM_Input_Buffer[InternalBufferSize++] = (uint8_t)app;
    PDM_Input_Buffer[InternalBufferSize++] = /*(uint8_t)*/HTONS(app);

    counter++;
    // Check to prevent overflow condition
    if (InternalBufferSize >= PDM_Input_Buffer_SIZE){
      InternalBufferSize = 0;

      volume = 50;
      
      PDM_Filter_64_LSB((uint8_t *)PDM_Input_Buffer, (uint16_t *)AudioRecBuf/*PCM_Output_Buffer*/, volume, &Filter);

      Data_Status = 1;
    }
  }
}
void AUDIO_MIC_SPI_IRQHANDLER(void)
{
   u16 app;

  /* Check if data are available in SPI Data register */
  if (SPI_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESET)
  {
	/* actually, we receiving 64kSamples/s due we dont care about left/right channel. */
    app = SPI_I2S_ReceiveData(SPI2);
#ifdef USE_ST_FILTER
    InternalBuffer[InternalBufferSize++] = HTONS(app);
    InternalBufferSize++;
    /* Check to prevent overflow condition */
    if (InternalBufferSize >= INTERNAL_BUFF_SIZE)
    {
      InternalBufferSize = 0;
      //got 64 samples of 16bit => 16 samples of output
      PDM_Filter_64_LSB((uint8_t *)  InternalBuffer,
    		            (uint16_t *) &pAudioRecBuf_8Khz[PCM_OUT_SIZE*recBuffFillness],
    		            10, (PDMFilter_InitStruct *)&Filter);
      recBuffFillness++;
      if(recBuffFillness >= REC_BUFFERS) {
    	  Data_Status = 1;
    	  recBuffFillness=0;
      }
    }
#else
    //pdm_fir_flt_put(&Filter2, HTONS(app));
    pdm_fir_flt_put(&Filter2, app);
    InternalBufferSize++;
    /* Check to prevent overflow condition */
    if (InternalBufferSize >= INTERNAL_BUFF_SIZE)
    {
      InternalBufferSize = 0;
      pAudioRecBuf_8Khz[recBuffFillness] = pdm_fir_flt_get(&Filter2, 16);
      recBuffFillness++;
      if(recBuffFillness >= REC_BUFFERS * PCM_OUT_SIZE) {
    	  Data_Status = 1;
    	  recBuffFillness=0;
      }
    }
#endif
  }
}
Esempio n. 5
0
__interrupt void SPI_IRQHandler(void)
{
    static u8 cnt = 0;
    u8 * data = getDataBuf();
    
    if(SPI_GetITStatus(SPI_IT_RXNE) != RESET){
        spi_cmd = SPI_ReceiveData();
        SPI_ClearITPendingBit(SPI_IT_RXNE); 
    }    
    if(SPI_GetITStatus(SPI_IT_TXE) != RESET){
        if(spi_cmd == 0xff)
            SPI_SendData(cnt);
        else if((spi_cmd & 0xc0) == 0x40)
            SPI_SendData(data[spi_cmd&0x3f]);
        else if((spi_cmd & 0xc0) == 0x80)
        {
            switch(buffer_s)
            {
            case 0:
              SPI_SendData(Rx_Buffer[spi_cmd&0x3f]);
              break;
#if defined(NEED_RESOLVE_INFO)             
            case 1:
              SPI_SendData(RxGGA[spi_cmd&0x3f]);
              break;
#endif // defined(NEED_RESOLVE_INFO)              
            case 2:
              SPI_SendData(DataP[spi_cmd&0x3f]);
              break;
            case 3:
              SPI_SendData(DataQ[spi_cmd&0x3f]);
              break;            
            default:
              SPI_SendData(data[spi_cmd&0x3f]);
              break;
            }
        }
        else if((spi_cmd & 0xf0) == 0x30)
            buffer_s = spi_cmd & 0xf;
        else if((spi_cmd & 0xfc) == 0x14)
        {
            switch(spi_cmd & 0x03)
            {
            case 0:
              BEEP_Cmd(DISABLE);
              SPI_SendData(spi_cmd);
              break;           
            case 1:
              BEEP_DeInit();
              BEEP_Init(BEEP_FREQUENCY_1KHZ);
              BEEP_Cmd(ENABLE);              
              SPI_SendData(spi_cmd);
              break;             
            case 2:
              BEEP_DeInit();
              BEEP_Init(BEEP_FREQUENCY_2KHZ);
              BEEP_Cmd(ENABLE);                  
              SPI_SendData(spi_cmd);
              break;
            case 3:
              BEEP_DeInit();
              BEEP_Init(BEEP_FREQUENCY_4KHZ);
              BEEP_Cmd(ENABLE);                  
              SPI_SendData(spi_cmd);
              break;            
            default:
              BEEP_Cmd(DISABLE);
              SPI_SendData(data[spi_cmd]);
              break;
            }            
        }
        else
            SPI_SendData(0x66);
        cnt ++;
        SPI_ClearITPendingBit(SPI_IT_TXE); 
    }
}