Files
99_7018_lmx/apps/common/audio/audio_export_demo.c
2025-10-29 13:10:02 +08:00

141 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "app_config.h"
#ifdef AUDIO_PCM_DEBUG
#include "uartPcmSender.h"
extern int aec_uart_init();
extern int aec_uart_fill(u8 ch, void *buf, u16 size);
extern void aec_uart_write(void);
extern int aec_uart_close(void);
/*
16k 正选波 pcm 数据
*/
static short const sin0_16k[16] = {
0x0000, 0x30fd, 0x5a83, 0x7641, 0x7fff, 0x7642, 0x5a82, 0x30fc, 0x0000, 0xcf04, 0xa57d, 0x89be, 0x8000, 0x89be, 0xa57e, 0xcf05,
};
static u16 tx1_s_cnt = 0;
static int get_sine0_data(u16 *s_cnt, s16 *data, u16 points, u8 ch)
{
while (points--) {
if (*s_cnt >= 16) {
*s_cnt = 0;
}
*data++ = sin0_16k[*s_cnt] / 2;
if (ch == 2) {
*data++ = sin0_16k[*s_cnt] / 2;
}
(*s_cnt)++;
}
return 0;
}
/*
*************************************************************
* uart data export 接口使用说明
* 1、每个通道一次只能固定发送512byte数据,数据不够会被丢弃
* 2、aec_uart_write()一次会发送3个通道的数据没有填数的通道会发送空白数据
* 3、UART DMA发送一次数据需要约8ms时间两次发数间隔需 > 8ms
* 4、发送波特率、发送引脚在 uartPcmSender.h 配置
* 5、该接口的接收端需使用JL的串口导出工具接收数据
*
*************************************************************
*/
void audio_export_demo_task(void *param)
{
printf("audio_export_demo_task\n");
s16 data[256];
int len = 512;
/*生成256个点的16k的正选波数据*/
get_sine0_data(&tx1_s_cnt, data, len / 2, 1);
while (1) {
putchar('.');
{
/*run code*/
}
aec_uart_fill(0, data, 512); //往通道0填数据
{
/*run code*/
}
aec_uart_fill(1, data, 512); //往通道1填数据
{
/*run code*/
}
aec_uart_fill(2, data, 512); //往通道2填数据
aec_uart_write(); //一次把3路数据发送出去
os_time_dly(2); //等待发送完成发送一次要8ms发完才可以进行下一次发数
}
}
/*
**********************************************************
* uart data export 接口使用示例
*********************************************************
*/
int audio_export_demo_init()
{
printf("audio_export_demo_init\n");
/* uartSendInit(); //串口初始化,已经在开机时调用初始化,这里不需调用 */
aec_uart_init(); //uart export 初始化
os_task_create(audio_export_demo_task, NULL, 1, 1024, 128, "audio_export_task");
return 0;
}
/*
*************************************************************
* 通用 uart 发数接口uartSendData())使用说明
* 1、发数的数据长度可以根据需要修改
* 2、一般发送512byte,DMA模式需要2.7ms
* 3、发送波特率、发送引脚在 uartPcmSender.h 配置
* 4、可以使用该接口自定义发数方式、协议等
*
*************************************************************
*/
void audio_uart_transmit_demo_task(void *param)
{
printf("audio_uart_transmit_demo_task\n");
s16 data[256];
int len = 512;
/*生成256个点的16k的正选波数据*/
get_sine0_data(&tx1_s_cnt, data, len / 2, 1);
while (1) {
putchar('.');
uartSendData(data, len); //uart 发送数据接口
os_time_dly(1); //一般发送512byte,DMA模式需要2.7ms
}
}
/*
**********************************************************
* 通用uart发数使用示例
*********************************************************
*/
int audio_uart_transmit_demo_init()
{
printf("audio_uart_transmit_demo_init\n");
/* uartSendInit(); //串口初始化,已经在开机时调用初始化,这里不需调用 */
os_task_create(audio_uart_transmit_demo_task, NULL, 1, 1024, 128, "audio_uart_transmit_task");
return 0;
}
static u8 audio_export_demo_idle_query()
{
return 0;
}
REGISTER_LP_TARGET(audio_export_demo_lp_target) = {
.name = "audio_export__demo",
.is_idle = audio_export_demo_idle_query,
};
#endif /*AUDIO_PCM_DEBUG*/