[技术问答] 有没有人玩过ISD9160?

[复制链接]
3515|15
 楼主| 512751875 发表于 2016-9-6 17:03 | 显示全部楼层 |阅读模式
    求个玩过ISD9160语音开发板的朋友,求指教,求联系方式
 楼主| 512751875 发表于 2016-9-6 17:04 | 显示全部楼层
    就是这个板子
Photo - P16-008_Oscar-Numaker Plus_Carl Xie_20160113.jpg
 楼主| 512751875 发表于 2016-9-6 18:05 | 显示全部楼层
ddddddddddddddd
zhuotuzi 发表于 2016-9-6 19:08 | 显示全部楼层
ISD9160是以Cortex™-M0为基础的系统单芯片ChipCorder,能为需要语音/音频功能的应用提供强大而又成本低廉的解决方案。其高度整合式架构32位Cortex™-M0处理器、2.4至5.5V的宽广运作电压、I²S 数字音频接口、1瓦喇叭驱动器、内建闪存、3V调节器及多功能GPIO-皆是为消费性产品及工业应用市场提供成本低廉的语音/音频系统单芯片而设计。与ADPCM相比,其ISD9160的高压缩算法能达成超过50%的压缩,因此不但能降低内存大小,同时又能传达高质量的语音/音频。其内嵌闪存可用来做为用户程序代码及音讯储存空间。ISD9160可使用外接闪存储存音讯,以延长回放时间。
zhuotuzi 发表于 2016-9-6 19:08 | 显示全部楼层
http://www.nuvoton.com.cn/hq/pro ... sd9160/?__locale=zh
这里有资料,BSP开发包,应该BSP里有例程。
zhuotuzi 发表于 2016-9-6 19:12 | 显示全部楼层
目前,语音识别作为一种新的人机交互方式,被广泛应用在各种领域,语音识别技术就是让设备通过识别和理解把语音信号转变为相应的文本或命令。

    语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术三个方面。根据语音输入的使用者,可以把语音识别技术分为两种:特定人语音识别和非特定人语音识别,前者只能识别一个或几个人的语音,而后者则可以被任何人使用。

    芯唐提供基于ISD9160的语音识别方案。ISD9160是一款具有Cortex-M0内核的语音SOC,能够实现录音放音等应用。通过软件支持,ISD9160可以实现特定人和非特定人语音识别。其中非特定人语音识别支持九种语音,方便客户开发国际化的产品。客户在开发的时候,使用芯唐提供的ASR Tool工具,只需将所需命令写成文本模式,然后经由工具转换,就能生成用于项目文件的语音识别代码模块,简单并且容易使用。这种语音识别方案适用于语音控制系统领域,即用语音来控制设备的运行,相对于手动控制来说更加快捷、方便,可以用在诸如智能家电、声控智能玩具等许多领域。


xyz549040622 发表于 2016-9-6 20:42 | 显示全部楼层
你搜搜以前的资料,有个网友玩过这个,他还做过这类的板子,貌似想开源来着
mintspring 发表于 2016-9-7 07:08 | 显示全部楼层
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Revision: 1 $
  5. * $Date: 14/07/15 2:52p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    This is an I2S demo using NAU8822 audio codec, and used to play
  7. *           back the input from MIC interface..
  8. *
  9. * @note
  10. * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
  11. *
  12. ******************************************************************************/
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include "ISD9100.h"
  16. #include "config.h"

  17. #define NAU8822_ADDR    0x1A                /* NAU8822 Device ID */

  18. //uint32_t PcmBuff[BUFF_LEN] = {0};
  19. uint32_t volatile u32BuffPos = 0;

  20. void Delay(int count)
  21. {
  22.     volatile uint32_t i;
  23.     for (i = 0; i < count ; i++)
  24.                 {
  25.                         i=i;
  26.                 }
  27. }

  28. /*---------------------------------------------------------------------------------------------------------*/
  29. /*  Write 9-bit data to 7-bit address register of WAU8822 with I2C0                                        */
  30. /*---------------------------------------------------------------------------------------------------------*/
  31. void I2C_WriteWAU8822(uint8_t u8addr, uint16_t u16data)
  32. {

  33.     I2C_START(I2C0);
  34.     I2C_WAIT_READY(I2C0);

  35.     I2C_SET_DATA(I2C0, NAU8822_ADDR<<1);
  36.     I2C_SET_CONTROL_REG(I2C0, I2C_SI);
  37.     I2C_WAIT_READY(I2C0);

  38.     I2C_SET_DATA(I2C0, (uint8_t)((u8addr << 1) | (u16data >> 8)));
  39.     I2C_SET_CONTROL_REG(I2C0, I2C_SI);
  40.     I2C_WAIT_READY(I2C0);

  41.     I2C_SET_DATA(I2C0, (uint8_t)(u16data & 0x00FF));
  42.     I2C_SET_CONTROL_REG(I2C0, I2C_SI);
  43.     I2C_WAIT_READY(I2C0);

  44.     I2C_STOP(I2C0);
  45. }

  46. /*---------------------------------------------------------------------------------------------------------*/
  47. /*  WAU8822 Settings with I2C interface                                                                    */
  48. /*---------------------------------------------------------------------------------------------------------*/
  49. void WAU8822_Setup()
  50. {
  51.     printf("\nConfigure WAU8822 ...");

  52.     I2C_WriteWAU8822(0,  0x000);   /* Reset all registers */
  53.     Delay(0x200);

  54.     I2C_WriteWAU8822(1,  0x1DA);
  55.     I2C_WriteWAU8822(2,  0x1BF);   // Enable L/R Headphone, ADC Mix/Boost, ADC
  56.     I2C_WriteWAU8822(3,  0x1FF);   // Enable L/R main mixer, DAC
  57.     I2C_WriteWAU8822(4,  0x010);   // 16-bit word length, I2S format, Stereo
  58.     I2C_WriteWAU8822(5,  0x000);   // Companding control and loop back mode (all disable)
  59.     I2C_WriteWAU8822(6,  0x008);   // Divide by 6, 16K
  60.     I2C_WriteWAU8822(7,  0x006);   // 16K for internal filter coefficients
  61.     I2C_WriteWAU8822(10, 0x008);   // DAC soft mute is disabled, DAC oversampling rate is 128x
  62.     I2C_WriteWAU8822(14, 0x108);   // ADC HP filter is disabled, ADC oversampling rate is 128x
  63.     I2C_WriteWAU8822(15, 0x1FF);   // ADC left digital volume control
  64.     I2C_WriteWAU8822(16, 0x1FF);   // ADC right digital volume control
  65.     I2C_WriteWAU8822(44, 0x033);   // LMICN/LMICP is connected to PGA
  66.                 I2C_WriteWAU8822(0x2d, 0x13F);   /* Left PGA gain*/
  67.                 I2C_WriteWAU8822(0x2e, 0x13F);   /* Right PGA gain*/       
  68.                 I2C_WriteWAU8822(0x2f, 0x100);   /* LLIN connected, and its Gain value */
  69.                 I2C_WriteWAU8822(0x30, 0x100);   /* RLIN connected, and its Gain value */
  70.     I2C_WriteWAU8822(50, 0x001);   // Left DAC connected to LMIX
  71.     I2C_WriteWAU8822(51, 0x001);   // Right DAC connected to RMIX

  72.                 printf("[OK]\n");
  73. }

  74. void SYS_Init(void)
  75. {
  76.     /*---------------------------------------------------------------------------------------------------------*/
  77.     /* Init System Clock                                                                                       */
  78.     /*---------------------------------------------------------------------------------------------------------*/
  79.     /* Unlock protected registers */
  80.     SYS_UnlockReg();

  81.     /* Enable External XTL32K */
  82.     CLK_EnableXtalRC(CLK_PWRCTL_LXTEN_Msk);

  83.     /* Enable External OSC49M */
  84.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
  85.        
  86.     /* Enable External OSC10K */
  87.     CLK_EnableXtalRC(CLK_PWRCTL_LIRCEN_Msk);
  88.        
  89.     /* Switch HCLK clock source to HXT */
  90.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKSEL0_HIRCFSEL_48M, CLK_CLKDIV0_HCLK(1));

  91.     /* Enable IP clock */
  92.     CLK_EnableModuleClock(UART_MODULE);
  93.     CLK_EnableModuleClock(I2C0_MODULE);
  94.     CLK_EnableModuleClock(I2S0_MODULE);

  95.     /* Select I2S module clock source */
  96.     CLK_SetModuleClock(I2S0_MODULE, CLK_CLKSEL2_I2S0SEL_HCLK, 0);

  97.     /* Reset I2S */
  98.     SYS_ResetModule(I2S0_RST);

  99.     /* Update System Core Clock */
  100.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
  101.     SystemCoreClockUpdate();

  102.     /*---------------------------------------------------------------------------------------------------------*/
  103.     /* Init I/O Multi-function                                                                                 */
  104.     /*---------------------------------------------------------------------------------------------------------*/
  105.     /* Set GPA multi-function pins for UART0 RXD and TXD */
  106.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA8MFP_Msk) ) | SYS_GPA_MFP_PA8MFP_UART_TX;
  107.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA9MFP_Msk) ) | SYS_GPA_MFP_PA9MFP_UART_RX;
  108.     /* Set GPA10,GPA11 multi-function pins for I2C0 */
  109.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA10MFP_Msk) ) | SYS_GPA_MFP_PA10MFP_I2C_SDA;
  110.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA11MFP_Msk) ) | SYS_GPA_MFP_PA11MFP_I2C_SCL;
  111.                 GPIO_SetMode(PA, BIT10, GPIO_MODE_OPEN_DRAIN);
  112.                 GPIO_SetMode(PA, BIT11, GPIO_MODE_OPEN_DRAIN);

  113.     /* Set multi function pin for I2S1 */
  114.     /* GPA4, GPA5, GPA6, GPA7, GPB1  */
  115.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA4MFP_Msk) ) | SYS_GPA_MFP_PA4MFP_I2S_FS;
  116.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA5MFP_Msk) ) | SYS_GPA_MFP_PA5MFP_I2S_BCLK;
  117.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA6MFP_Msk) ) | SYS_GPA_MFP_PA6MFP_I2S_SDI;
  118.                 SYS->GPA_MFP  = (SYS->GPA_MFP & (~SYS_GPA_MFP_PA7MFP_Msk) ) | SYS_GPA_MFP_PA7MFP_I2S_SDO;
  119.                 SYS->GPB_MFP  = (SYS->GPB_MFP & (~SYS_GPB_MFP_PB1MFP_Msk) ) | SYS_GPB_MFP_PB1MFP_MCLK;

  120.     /* Lock protected registers */
  121.     SYS_LockReg();
  122. }

  123. void I2C0_Init(void)
  124. {
  125.     /* Open I2C0 and set clock to 48 */
  126.     I2C_Open(I2C0, 48000);

  127.     /* Get I2C0 Bus Clock */
  128.     printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0));

  129.     /* Set I2C0 4 Slave Addresses */
  130.     //I2C_SetSlaveAddr(I2C0, 0, 0x15, I2C_GCMODE_DISABLE);   /* Slave Address : 0x15 */
  131.     //I2C_SetSlaveAddr(I2C0, 1, 0x35, I2C_GCMODE_DISABLE);   /* Slave Address : 0x35 */
  132.     //I2C_SetSlaveAddr(I2C0, 2, 0x55, I2C_GCMODE_DISABLE);   /* Slave Address : 0x55 */
  133.     //I2C_SetSlaveAddr(I2C0, 3, 0x75, I2C_GCMODE_DISABLE);   /* Slave Address : 0x75 */

  134.     //I2C_EnableInt(I2C0);
  135.     //NVIC_EnableIRQ(I2C0_IRQn);
  136. }

  137. void UART_Init(void)
  138. {
  139.     /*---------------------------------------------------------------------------------------------------------*/
  140.     /* Init UR                                                                                               */
  141.     /*---------------------------------------------------------------------------------------------------------*/
  142.     /* Reset IP */
  143.     SYS_ResetModule(UART0_RST);

  144.     /* Configure UART0 and set UART0 Baudrate(115200) */
  145.     UART_Open( UART0,115200 );
  146. }

  147. /*---------------------------------------------------------------------------------------------------------*/
  148. /*  Main Function                                                                                          */
  149. /*---------------------------------------------------------------------------------------------------------*/
  150. int32_t main (void)
  151. {
  152.     uint32_t u32startFlag = 1;

  153.     /* Init System, IP clock and multi-function I/O */
  154.     SYS_Init();

  155.                 CLK->APBCLK0 |= CLK_APBCLK0_ANACKEN_Msk;
  156.                 ANA->LDOPD &= ~ANA_LDOPD_PD_Msk;
  157.                 ANA->LDOSEL = 3;

  158.     /* Init UART0 for printf */
  159.     UART_Init();

  160.     printf("+------------------------------------------------------------------------+\n");
  161.     printf("|                   I2S Driver Sample Code with WAU8822                  |\n");
  162.     printf("+------------------------------------------------------------------------+\n");
  163.     printf("  NOTE: This sample code needs to work with WAU8822.\n");

  164.     /* Init I2C0 to access WAU8822 */
  165.     I2C0_Init();

  166.     I2S_Open(I2S0, I2S_MODE_MASTER, 16000, I2S_DATABIT_16, I2S_STEREO, I2S_FORMAT_I2S, I2S_I2S);

  167.     CLK_SetModuleClock(I2S0_MODULE, CLK_CLKSEL2_I2S0SEL_HCLK, 0);

  168.     /* Initialize WAU8822 codec */
  169.     WAU8822_Setup();

  170.     /* Set MCLK and enable MCLK */
  171.     I2S_EnableMCLK(I2S0, 4096000 );

  172.     /* Enable Rx threshold level interrupt */
  173.     I2S_EnableInt(I2S0, I2S_IEN_RXTHIEN_Msk);

  174.     /* Enable I2S Rx function to receive data */
  175.     I2S_ENABLE_RX(I2S0);

  176.     while(1) {
  177.         if (u32startFlag) {
  178.             /* Enable I2S Tx function to send data when data in the buffer is more than half of buffer size */
  179.             if (u32BuffPos >= BUFF_LEN/2) {
  180.                 I2S_EnableInt(I2S0, I2S_IEN_TXTHIEN_Msk);
  181.                 I2S_ENABLE_TX(I2S0);
  182.                 u32startFlag = 0;
  183.             }
  184.         }
  185.     }
  186. }

  187. /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/


fengjian2015 发表于 2016-9-7 09:48 | 显示全部楼层
我司是新唐一级代理商,现在主推ISD9160,有SDK、例程、开发板等提供,可以加我QQ2355898192详谈。
 楼主| 512751875 发表于 2016-9-7 10:45 | 显示全部楼层
xyz549040622 发表于 2016-9-6 20:42
你搜搜以前的资料,有个网友玩过这个,他还做过这类的板子,貌似想开源来着 ...

例程感觉好乱呀
 楼主| 512751875 发表于 2016-9-7 10:46 | 显示全部楼层

我有例程,就是有些看不懂
 楼主| 512751875 发表于 2016-9-7 10:47 | 显示全部楼层
zhuotuzi 发表于 2016-9-6 19:08
http://www.nuvoton.com.cn/hq/products/application-specific-socs/arm-based-audio/aui-enablers-series/ ...

我这里有例程,但是没有API
 楼主| 512751875 发表于 2016-9-7 11:09 | 显示全部楼层
本帖最后由 512751875 于 2016-9-7 11:17 编辑

    先附上原理图,给大家看看。
    再看一个GPIO的例程。
  1. int main (void)
  2. {
  3.     int32_t i32Err;
  4.                 uint16_t PB7;
  5.                 uint32_t count=0;

  6.     /* Lock protected registers */
  7.     if(SYS->REGLCTL == 1) // In end of main function, program issued CPU reset and write-protection will be disabled.
  8.         SYS_LockReg();

  9.                 /* Init System, IP clock and multi-function I/O
  10.        In the end of SYS_Init() will issue SYS_LockReg()
  11.        to lock protected register. If user want to write
  12.        protected register, please issue SYS_UnlockReg()
  13.        to unlock protected register if necessary */
  14.     SYS_Init();                        //系统初始化

  15.     /* Init UART0 for printf */
  16.     UART_Init();              //串口初始化

  17.     printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);

  18.     printf("+-------------------------------------+ \n");
  19.     printf("|           GPIO Driver Sample Code   | \n");
  20.     printf("+-------------------------------------+ \n");

  21.     /*-----------------------------------------------------------------------------------------------------*/
  22.     /* GPIO Basic Mode Test --- Use Pin Data Input/Output to control GPIO pin                              */
  23.     /*-----------------------------------------------------------------------------------------------------*/
  24.     printf("  >> Please connect PA.15 and PB.7 first << \n");
  25.     printf("     Press any key to start test by using [Pin Data Input/Output Control] \n\n");
  26.     //getchar();

  27.     /* Configure PA.15 as Output mode and PB.7 as Input mode then close it */
  28.     GPIO_SetMode(PA, BIT15, GPIO_MODE_OUTPUT);          //IO口模式设置
  29.     GPIO_SetMode(PB, BIT7, GPIO_MODE_INPUT);              //IO口模式设置
  30.                
  31.     i32Err = 0;
  32.     printf("  GPIO Output/Input test ...... \n");

  33.     /* Use Pin Data Input/Output Control to pull specified I/O or get I/O pin status */
  34.     GPIO_SET_OUT_DATA(PA, 0x00); // PA15=0                       //设置IO输出数据???
  35.                 PB7 = GPIO_GET_IN_DATA(PB) & 0x80;        
  36.     if (PB7 != 0) {
  37.         i32Err = 1;
  38.     }

  39.     GPIO_SET_OUT_DATA(PA, 0x8000); // PA15=1
  40.                 PB7 = GPIO_GET_IN_DATA(PB) & 0x80;
  41.     if (PB7 != 0x80) {
  42.         i32Err = 1;
  43.     }

  44.     if ( i32Err ) {
  45.         printf("  [FAIL] --- Please make sure PA.15 and PB.7 are connected. \n");
  46.     } else {
  47.         printf("  [OK] \n");
  48.     }

  49.     /* Configure PA.15 and PB.7 to default Quasi-bidirectional mode */
  50.     GPIO_SetMode(PA, BIT15, GPIO_MODE_QUASI);
  51.     GPIO_SetMode(PB, BIT7, GPIO_MODE_QUASI);


  52.     /*-----------------------------------------------------------------------------------------------------*/
  53.     /* GPIO Interrupt Function Test                                                                        */
  54.     /*-----------------------------------------------------------------------------------------------------*/
  55.     printf("\n  PA15, PB7 are used to test interrupt\n  and control LEDs(PA12,PA13,PB14)\n");

  56.     /*Configure PA, PB for LED control */
  57.     GPIO_SetMode(PA, BIT12, GPIO_MODE_OUTPUT);
  58.     GPIO_SetMode(PA, BIT13, GPIO_MODE_OUTPUT);
  59.     GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  60.     GPIO_SET_OUT_DATA(PA, ~0x1000);
  61.     GPIO_SET_OUT_DATA(PB, ~0x0000);

  62.     /* Configure PA15 as Input mode and enable interrupt by rising edge trigger */
  63.     GPIO_SetMode(PA, BIT15, GPIO_MODE_INPUT);
  64.     GPIO_EnableInt(PA, 15, GPIO_INT_RISING);
  65.     NVIC_EnableIRQ(GPAB_IRQn);

  66.     /*  Configure PB7 as Quasi-bi-direction mode and enable interrupt by both rising and falling edge trigger */
  67.     GPIO_SetMode(PB, BIT7, GPIO_MODE_QUASI);
  68.     GPIO_EnableInt(PB, 7, GPIO_INT_BOTH_EDGE);
  69.                
  70.     NVIC_EnableIRQ(GPAB_IRQn);
  71.     /* Enable interrupt de-bounce function and select de-bounce sampling cycle time */
  72.     GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_HCLK, GPIO_DBCTL_DBCLKSEL_1);
  73.     GPIO_ENABLE_DEBOUNCE(PA, BIT15);
  74.     GPIO_ENABLE_DEBOUNCE(PB, BIT7);

  75.     /* Waiting for interrupts */
  76.     while (1)
  77.                 {
  78.                         GPIO_SET_OUT_DATA(PA, ~((count>>14)&0xf000));
  79.                         GPIO_SET_OUT_DATA(PB, ~((count>>14)&0x80));
  80.                         count++;
  81.                 }

  82. }
把这个例程 编译成功后  烧录进板子,没有反应,这很迷茫。请问大家这个例程的大体功能是什么呀?

ISD-Demo9160 RevB Circuit原理图.pdf

21.29 KB, 下载次数: 60

 楼主| 512751875 发表于 2016-9-7 13:33 | 显示全部楼层
512751875 发表于 2016-9-7 11:09
先附上原理图,给大家看看。
    再看一个GPIO的例程。
把这个例程 编译成功后  烧录进板子,没有反应 ...

大家有时间的帮忙看看,晚辈在这里先谢谢了
w522930954 发表于 2016-9-7 14:27 | 显示全部楼层
很多年前玩过这个芯片,开发板没玩过。。。。识别的例程还挺准,换成别的字就不是很准了。。个人感觉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

133

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部