I want to integrate the PDM microphone with thingy53, I found no particular sample code for it
Would be needing help from scratch
I want to integrate the PDM microphone with thingy53, I found no particular sample code for it
Would be needing help from scratch
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
I check the device tree file and in that I noticed that pdm clk and data in pin is not assigned and when I tried to add assignment there was no option for &pdm
I check the device tree file and in that I noticed that pdm clk and data in pin is not assigned and when I tried to add assignment there was no option for &pdm