hi, I am using nrf52832 development board for PWM and I want to play an audio (.wav) file using PWM, I am unable to play the audio clip using the PWM, and same audio file I am able to play in Arduino UNO board. Can you please tell me the procedure to play the audio clip in the nrf52832 board using PWM. I am using The SDK version 15.3.0, I have taken reference of pwm driver example to develop. nRF5_SDK_15.3.0/examples/peripheral/pwm_driver.
please find below the attachments of code and audio file .
/** * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form, except as embedded into a Nordic * Semiconductor ASA integrated circuit in a product or a software update for * such product, must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. * * 3. Neither the name of Nordic Semiconductor ASA nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * 4. This software, with or without modification, must only be used with a * Nordic Semiconductor ASA integrated circuit. * * 5. Any software provided in binary form under this license must not be reverse * engineered, decompiled, modified and/or disassembled. * * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** @file * @defgroup pwm_example_main main.c * @{ * @ingroup pwm_example * * @brief PWM Example Application main file. * * This file contains the source code for a sample application using PWM. */ #include <stdio.h> #include <string.h> #include "nrf_drv_pwm.h" #include "app_util_platform.h" #include "app_error.h" #include "boards.h" #include "bsp.h" #include "app_timer.h" #include "nrf_drv_clock.h" #include "nrf_delay.h" #include "tone.h" #include "airtel.h" #include "nrf_gpio.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" #define AUDIO 2 static nrf_drv_pwm_t m_pwm0 = NRF_DRV_PWM_INSTANCE(0); static void pwm_stop(void) { nrf_drv_pwm_uninit(&m_pwm0); nrf_gpio_pin_clear(AUDIO); } nrf_pwm_values_individual_t seq_values; nrf_pwm_sequence_t const seq = { .values.p_individual = &seq_values, .length = NRF_PWM_VALUES_LENGTH(seq_values), .repeats = 0, .end_delay = 0 }; void play_audio(void) { uint16_t len = sizeof(airtel)/sizeof(airtel[1]); for(uint16_t i = 0;i<len;i++) { seq_values.channel_0 = airtel[i]; nrf_delay_ms(1); (void)nrf_drv_pwm_simple_playback(&m_pwm0, &seq, 1, NRF_DRV_PWM_FLAG_STOP); } } static void vib_pwm_init(void) { nrf_drv_pwm_config_t const config0 = { .output_pins = { AUDIO , // channel 0 NRF_DRV_PWM_PIN_NOT_USED, // channel 1 NRF_DRV_PWM_PIN_NOT_USED, // channel 2 NRF_DRV_PWM_PIN_NOT_USED, // channel 3 }, .irq_priority = APP_IRQ_PRIORITY_LOWEST, .base_clock = NRF_PWM_CLK_125kHz, .count_mode = NRF_PWM_MODE_UP, .top_value = 255, .load_mode = NRF_PWM_LOAD_COMMON, .step_mode = NRF_PWM_STEP_AUTO }; APP_ERROR_CHECK(nrf_drv_pwm_init(&m_pwm0, &config0, NULL)); } /* * Applicatin entry */ int main(void) { nrf_gpio_pin_dir_set(AUDIO,NRF_GPIO_PIN_DIR_OUTPUT); nrf_gpio_pin_clear(AUDIO); for (;;) { vib_pwm_init(); play_audio(); pwm_stop(); nrf_delay_ms(2000); printf("audio\r\n"); } }