141 lines
4.0 KiB
C
141 lines
4.0 KiB
C
#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*/
|
||
|