vsp应用开发指南

一:获取和安装编译工具

MCU工具链和安装

先安装工具的依赖包:

~$ sudo dpkg --add-architecture i386

~$ sudo apt-get update

~$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 libx11-6:i386 gtk2-engines:i386 lib32ncurses5 lib32z1 libxtst6:i386 libgtk2.0-0:i386 lib32ncurses5 libcanberra-gtk3-0:i386

下载地址: 工具链下载地址:https://yunpan.360.cn/surl_yQCJEdcEje4 (提取码:d86d)

安装:

a. cd /opt

b. sudo tar xvf ~/toolchain/csky-abiv2-elf-tools-i386-minilibc-20160308.tar.bz2

d. 然后需要编辑 ~/.profile或者 ~/.bashrc,将/opt/csky-abiv2-elf/bin加入到PATH路径中


二:编译

进入VSP代码

配置文件根据具体板级或者客户自己实际情况修改

执行:

cp ./ configs/ leo_gx8008_uac_1v_defconfig .config

make menuconfig (有需要的话,执行)

make mcu

生成的mcu_nor.bin在output目录内


三:烧录

烧录命令:

./bootx -m leo -t s -c serialdown 0x0 mcu_nor.bin

./bootx -m leo -t s -c serialdown 0x100000 dsp.bin

mcu_nor.bin 客户自己开发驱动和逻辑控制

dsp.bin 是算法,我们会提供


四:驱动开发

关注 /mcu/drivers内的代码,提供了GPIO,PWM,I2C,红外,串口,flash读写,led控制,声音播放等相关的驱动代码。可以参考来控制自己的外设

参考:

GpioSetDirection(14, GPIO_DIRECTION_OUTPUT);

GpioSetLevel(14, GPIO_LEVEL_HIGH);

GpioSetDirection(33, GPIO_DIRECTION_OUTPUT);

GpioSetLevel(33, GPIO_LEVEL_HIGH);

GpioSetDirection(15, GPIO_DIRECTION_OUTPUT);

GpioEnablePWM(15, 3000, LedNuan.brightness);

GpioSetDirection(16, GPIO_DIRECTION_OUTPUT);

GpioEnablePWM(16, 3000, LedBai.brightness);

声音使用参考:

AudioOutInit(AUDIO_OUT_SAMPLE_RATE_22050, AUDIO_OUT_CHANNEL_MONO, (const short *)((const short *)(yikaideng_wav - 0x20000000 + 48)), ((yikaideng_wav_len - 48) / 1024 * 1024));

AudioOutPlayBuffer(0, ((yikaideng_wav_len - 48) / 1024 * 1024));

中断参考:

GpioEnableTrigger(CONFIG_BOARD_GPIO_MUTE_BTN, GPIO_TRIGGER_EDGE_FALLING, _UacMuteButtonCallback, NULL)


五:生成声音头文件

root@ubuntu:/disk2# xxd -i hello.wav hello.h

xxd为ubuntu系统带的工具,没有的话安装下。生成的hello.h可以用在代码里,进行声音播放

这样的话,可以参考代码,自己做开机启动音乐或者交互的声音


五 麦克风增益修改

在int AudioInBoardInit()

int AudioInSetMicGain(unsigned char mic_gain)

取值0到100

音量修改

int AudioOutSetVolume(const AUDIO_OUT_ROUTE route, const unsigned int volume)


六:语音效果测试

8008会输出字母,可以确认对应的关系。

8008 usb slave接到linux pc上,pc会把它识别为一个外部声卡

在linux上开个文本文件,看输出的字符是否正确

q,w 代表声音的开始和结束检测


七:pin口的复用配置

在对应板级的 misc_board.c 代码内

索引以0开头

比如,看硬件原理图,我们要用 PD1PORT02

就修改:

{ 2, 0}, //*UART0RX | PD1PORT02 |

为:

{ 2, 1}, //*UART0RX | PD1PORT02 |


八:声音录制

为了方便的确认麦克风的问题,或者配合算法来调试,需要抓取声音

安装audacity

8008 usb slave和电脑连接

注意:如果是虚拟机的话,可能会无法录制。用实体linux机器

确认usb 声卡设备被正确识别

打开audicity软件,进行设置,16000 (声道数根据麦克风的个数来选择)

如果声音输入就只有一个的话,就按照我下面的默认就可以,否则要自己选择正确

开始录制


九:麦克风的数量和位置配置 (gx8010也通用)

配置板级看客户自己的情况,下面是一个例子:

进入mcu/board/nationalchip/nre_uac_1v

打开audio_board.c

针对8010有八个麦克风通道,针对8008有六个麦克风通道

0xf代表关闭该路麦克风通道

4,5,6,7这样的数字代表硬件上是哪几个麦克风

可以看硬件原来图得到,例如:

左边会接到mic上,右边是芯片的引脚,我们可以看到数字是怎么来的

剩下的就是配置麦克风的顺时针或者逆时针的位置了

我们用vspdum进行录制声音后(bypass模式),通过audacity工具打开,会发现,channel_7_sel是audacity第一路的声音, channel_6_sel是第二路的,依次类推。我们要做的是确认好麦克风是哪几个,按照顺时针或者逆时针配好。可以用手敲麦克风。一个一个的敲,来确认。确认好了,重新设置下。

确认AEC回声通过,把ssd内部播放一个音乐,再用vspdump抓,audacity倒数的两路就是ref的两个通道,确认下是否正常,有把回声抓到吗

results matching ""

    No results matching ""