Unit tests for WM8731 module.
Copyright (c) 2012-2018 Microchip Technology Inc. and its subsidiaries.
#include <stdint.h>
#include <stdbool.h>
#include <board.h>
#include <sysclk.h>
#include <string.h>
#include <unit_test/suite.h>
#include <stdio_serial.h>
#include <conf_test.h>
#include "conf_board.h"
#include "conf_clock.h"
#include "conf_wm8731.h"
#include "wm8731.h"
#include "ssc.h"
#include "dmac.h"
#include "twi_master.h"
#include "at24cxx.h"
Macros | |
#define | BITS_BY_SLOT (16) |
Bits per slot. More... | |
#define | DMA_CH 0 |
#define | SAMPLE_RATE (48000) |
Wav feature. More... | |
#define | SLOT_BY_FRAME (2) |
Wav slot per frame. More... | |
#define | WAV_LENGTH (0xA0u) |
Bits per slot. More... | |
Functions | |
void | DMAC_Handler (void) |
ISR for DMA interrupt. More... | |
static void | init_dac (void) |
Initial the codec for audio play. More... | |
static void | init_dma (void) |
DMA driver configuration. More... | |
static void | init_ssc (void) |
Initial the ssc interface. More... | |
static void | init_twi_wm8731 (void) |
int | main (void) |
Run WM8731 module unit tests. More... | |
static void | run_wm8731_transfer_test (const struct test_case *test) |
WM8731 transfer test. More... | |
static void | ssc_dma (void *p_buffer, uint16_t us_size) |
Start DMA sending data. More... | |
Variables | |
volatile uint32_t | ul_transfer_done = 0 |
Transfer done flag. More... | |
const uint8_t | wav_data [WAV_LENGTH] |
wav data from the file "sample.wav" More... | |
#define BITS_BY_SLOT (16) |
Bits per slot.
Referenced by init_ssc().
#define DMA_CH 0 |
Referenced by DMAC_Handler(), init_dma(), and ssc_dma().
#define SAMPLE_RATE (48000) |
Wav feature.
Referenced by init_ssc().
#define SLOT_BY_FRAME (2) |
Wav slot per frame.
#define WAV_LENGTH (0xA0u) |
Bits per slot.
Referenced by run_wm8731_transfer_test().
void DMAC_Handler | ( | void | ) |
ISR for DMA interrupt.
References DMA_CH, dmac_channel_stop_transfer(), dmac_get_status(), ssc_disable_tx(), and ul_transfer_done.
|
static |
Initial the codec for audio play.
References init_twi_wm8731(), pmc_disable_pck(), pmc_enable_pck(), PMC_PCK_0, pmc_switch_pck_to_mainck(), wm8731_dac_select(), wm8731_power_mode_dac(), WM8731_REG_DIGITAL_AUDIO_INTERFACE_FORMAT_I2S, WM8731_REG_DIGITAL_AUDIO_INTERFACE_FORMAT_IWL_16_BIT, wm8731_reset(), wm8731_set_active(), wm8731_set_dac_soft_mute(), wm8731_set_digital_audio_data_bit_length(), and wm8731_set_sampling_control().
Referenced by main().
|
static |
DMA driver configuration.
References DMA_CH, dmac_channel_disable(), dmac_channel_set_configuration(), dmac_enable(), dmac_enable_interrupt(), dmac_init(), DMAC_PRIORITY_ROUND_ROBIN, dmac_set_priority_mode(), and pmc_enable_periph_clk().
Referenced by main().
|
static |
Initial the ssc interface.
References BITS_BY_SLOT, pmc_enable_periph_clk(), SAMPLE_RATE, ssc_disable_interrupt(), ssc_disable_tx(), ssc_reset(), ssc_set_clock_divider(), ssc_set_transmitter(), sysclk_get_peripheral_hz(), clock_opt_t::ul_ckg, clock_opt_t::ul_cki, clock_opt_t::ul_cko, clock_opt_t::ul_cks, data_frame_opt_t::ul_datlen, data_frame_opt_t::ul_datnb, data_frame_opt_t::ul_fsedge, data_frame_opt_t::ul_fslen, data_frame_opt_t::ul_fslen_ext, data_frame_opt_t::ul_fsos, data_frame_opt_t::ul_msbf, clock_opt_t::ul_period, clock_opt_t::ul_start_sel, and clock_opt_t::ul_sttdly.
Referenced by main().
|
static |
References twi_options::chip, twi_options::master_clk, twi_options::speed, sysclk_get_peripheral_hz(), twi_master_setup(), TWI_WM8731, TWI_WM8731_CLK, and WM8731_SLAVE_ADDRESS.
Referenced by init_dac().
int main | ( | void | ) |
Run WM8731 module unit tests.
References at24cxx_reset(), uart_rs232_options::baudrate, board_init(), CONF_TEST_BAUDRATE, CONF_TEST_PARITY, CONF_TEST_UART, CONSOLE_UART_ID, DEFINE_TEST_ARRAY, DEFINE_TEST_CASE, DEFINE_TEST_SUITE, init_dac(), init_dma(), init_ssc(), run_wm8731_transfer_test(), stdio_serial_init(), sysclk_enable_peripheral_clock(), sysclk_init(), and test_suite_run().
|
static |
WM8731 transfer test.
test | Current test case. |
References ssc_dma(), test_assert_true, ul_transfer_done, wav_data, and WAV_LENGTH.
Referenced by main().
|
static |
Start DMA sending data.
p_buffer | Pointer to the data to be transmitted. |
us_size | Size of the data to be transmitted. |
References DMA_CH, dmac_channel_enable(), dmac_channel_single_buf_transfer_init(), ssc_enable_tx(), dma_transfer_descriptor_t::ul_ctrlA, dma_transfer_descriptor_t::ul_ctrlB, dma_transfer_descriptor_t::ul_descriptor_addr, dma_transfer_descriptor_t::ul_destination_addr, and dma_transfer_descriptor_t::ul_source_addr.
Referenced by run_wm8731_transfer_test().
volatile uint32_t ul_transfer_done = 0 |
Transfer done flag.
Referenced by DMAC_Handler(), and run_wm8731_transfer_test().
const uint8_t wav_data[WAV_LENGTH] |
wav data from the file "sample.wav"
Referenced by run_wm8731_transfer_test().