Integration of PDM microphone with thingy53

I want to integrate the PDM microphone with thingy53, I found no particular sample code for it

Would be needing help from scratch

Parents
  • I have executed some code till now

    #include <zephyr/zephyr.h>
    #include <stdio.h>
    #include <zephyr/drivers/uart.h>
    #include <string.h>
    // #include <misc/printk.h>
    
    #include <nrfx_pdm.h>
    #include <hal/nrf_gpio.h>
    #include "nrf5340_application.h"
    // #include <nrf9160.h>
    // #include <nrf53.h>
    
    #define PDM_BUF_SIZE 3072  //length of buffer in 16 bit words
    
    int16_t pdm_buf[PDM_BUF_SIZE];
    
    
    void bsd_recoverable_error_handler(uint32_t err)
    {
    	printk("bsdlib recoverable error: %u\n", err);
    }
    
    void nrfx_pdm_event_handler(nrfx_pdm_evt_t const *const p_evt)
    {
    	if (p_evt->buffer_requested) {
                    printk("Entered into 1st if condition \n");
    		nrfx_pdm_buffer_set(pdm_buf, PDM_BUF_SIZE);
    	}
    	if (p_evt->buffer_released != 0) {
    		// printk("Out: %4x @ 0x%x\r\n %4x @ 0x%x\r\n",
    		//        (uint16_t)pdm_buf[0], &pdm_buf[0],
    		//        (uint16_t)pdm_buf[1], &pdm_buf[1]);
                    printk("Entered into 2nd if condition \n");
                    for (int i = 0; i < 8; i++) {
                            printk("%4x \n", (uint16_t)pdm_buf[i]);
                    }
                    printk("\r\n");
    	}
    }
    
    static void pdm_init(void)
    {
    	nrfx_pdm_config_t pdm_config = NRFX_PDM_DEFAULT_CONFIG(NULL, NULL);
    	nrfx_pdm_init(&pdm_config, nrfx_pdm_event_handler);
    }
    
    /*ISR workaround given by Nordic*/
    ISR_DIRECT_DECLARE(pdm_isr_handler)
    {
    	nrfx_pdm_irq_handler();
    	ISR_DIRECT_PM(); /* PM done after servicing interrupt for best latency
    			  */
    
    	return 1; /* We should check if scheduling decision should be made */
    }
    
    void main(void)
    {
    	printk("The AT host sample started\n");
    	IRQ_DIRECT_CONNECT(PDM0_IRQn, 0, pdm_isr_handler, 0);  //workaround line 
    	printk("Starting PDM program!\n");
    	printk("PDM Buffer size: %d in 16 bit words\n", PDM_BUF_SIZE);
    
    	/*
    	bool enabled = nrfx_pdm_enable_check();
    	printk(enabled ? "true/n" : "false\n");
    	*/
    
    	pdm_init();
    	printk("%4x is the starting address\n", &pdm_buf);
    	// printk("%4x is current value at %x\n", pdm_buf[0], &pdm_buf);
    	printk("The PDM will start reading NOW...\n");
          /*  for (int i = 0; i < 500; i++) {
              int k = 5;
              for (volatile int j = 0; j < 50; j++) {
                    k = !k;
    		}
    	}*/
    	nrfx_pdm_start();
    	for (int i = 0; i < 100; i++) {
                    int k = 5;
                    for (volatile int j = 0; j < 100; j++) {
                            k = !k;
                    }
    	}
    	nrfx_pdm_stop();
            printk("%4x is current value at %x\n", (uint16_t)pdm_buf[0], &pdm_buf);
    
    	
    }

  • But the output is repeating and I don't think so the microphone is able to identify any sound as the output should have been changing

Reply Children
Related