[X]关闭

【ZYNQ-7000开发之十六】音频信号处理

文档创建者:RZJM
浏览次数:8622
最后更新:2019-07-11
本帖最后由 RZJM 于 2016-3-17 10:40 编辑

本编文章将使用Zynq开发平台Miz702上的ADAU1761音频编解码芯片,进行采样模拟音频信号(2路),转成数字信号,然后再通过ADAU1761转成模拟信号输出(2路)。在此基础上通过左右声道相减,简单的实现人声消除。本文不介绍ADAU1761驱动的编写方法,直接采用 Ali Aljaani编写的IP。
ADAU1761参数的配置参考 ADA1761 Datasheet

本文所使用的开发板是Miz702(兼容zedboard)
PC 开发环境版本:Vivado 2015.2 Xilinx SDK 2015.2
3.5mm公对公的音频连接线一根
ADA1761驱动IP core 和本编文章工程源码下载

建立vivado工程

建好工程之后,把下载好的IP添加到IP Repository里面,如图所示

点击Create Blcok Design,完成后点击Add IP,把ZYNQ PS,添加进来,然后双击ZYNQ,进行如下配置

在Clock Configuration下,使能FLCK_CLK1,并且把时钟配置成10Mhz,如图所示

选中IIC_1和FCLK_CLK1,右击,点击Make external

结果如图所示

点击Add IP,添加zed_audio_ctrl IP,添加好之后点击Run Connection Automation

选中zed_audio_ctrl上其余的接口,右击,Make external

在空白处右击,选择Create port
然后按照如图所示配置

点击Add IP,添加Constant IP,配置如下

新建一个约束文件,把以下引脚约束添加进来

配置好之后和ADDRESS连接在一起,
然后就可以Create HDL wapper,点击Generate bitstream

新建一个约束文件,把以下引脚约束添加进来

  1. # Miz702 or zedboard Audio Codec Constraints
  2. set_property PACKAGE_PIN AA6 [get_ports BCLK]
  3. set_property IOSTANDARD LVCMOS33 [get_ports BCLK]
  4. set_property PACKAGE_PIN Y6 [get_ports LRCLK]
  5. set_property IOSTANDARD LVCMOS33 [get_ports LRCLK]
  6. set_property PACKAGE_PIN AA7 [get_ports SDATA_I]
  7. set_property IOSTANDARD LVCMOS33 [get_ports SDATA_I]
  8. set_property PACKAGE_PIN Y8 [get_ports SDATA_O]
  9. set_property IOSTANDARD LVCMOS33 [get_ports SDATA_O]
  10. #MCLK
  11. set_property PACKAGE_PIN AB2 [get_ports FCLK_CLK1]
  12. set_property IOSTANDARD LVCMOS33 [get_ports FCLK_CLK1]
  13. set_property PACKAGE_PIN AB4 [get_ports iic_1_scl_io]
  14. set_property IOSTANDARD LVCMOS33 [get_ports iic_1_scl_io]
  15. set_property PACKAGE_PIN AB5 [get_ports iic_1_sda_io]
  16. set_property IOSTANDARD LVCMOS33 [get_ports iic_1_sda_io]
  17. set_property PACKAGE_PIN AB1 [get_ports {ADDRESS[0]}]
  18. set_property IOSTANDARD LVCMOS33 [get_ports {ADDRESS[0]}]
  19. set_property PACKAGE_PIN Y5 [get_ports {ADDRESS[1]}]
  20. set_property IOSTANDARD LVCMOS33 [get_ports {ADDRESS[1]}]
复制代码

建立软件工程

打开SDK之后,新建一个空的工程
新建头文件文件,
audio.h

  1. #ifndef __AUDIO_H_
  2. #define __AUDIO_H_
  3. #include "xparameters.h"
  4. /* Redefine audio controller base address from xparameters.h */
  5. #define AUDIO_BASE                                XPAR_ZED_AUDIO_CTRL_0_BASEADDR
  6. /* Slave address for the ADAU audio controller 8 */
  7. #define IIC_SLAVE_ADDR                        0x70
  8. /* I2C Serial Clock frequency in Hertz */
  9. #define IIC_SCLK_RATE                        400000
  10. /* ADAU internal registers */
  11. enum audio_regs {
  12.         R0_CLOCK_CONTROL                                                                = 0x00,
  13.         R1_PLL_CONTROL                                                                         = 0x02,
  14.         R2_DIGITAL_MIC_JACK_DETECTION_CONTROL                         = 0x08,
  15.         R3_RECORD_POWER_MANAGEMENT                                                = 0x09,
  16.         R4_RECORD_MIXER_LEFT_CONTROL_0                                         = 0x0A,
  17.         R5_RECORD_MIXER_LEFT_CONTROL_1                                         = 0x0B,
  18.         R6_RECORD_MIXER_RIGHT_CONTROL_0                                 = 0x0C,
  19.         R7_RECORD_MIXER_RIGHT_CONTROL_1                                 = 0x0D,
  20.         R8_LEFT_DIFFERENTIAL_INPUT_VOLUME_CONTROL                 = 0x0E,
  21.         R9_RIGHT_DIFFERENTIAL_INPUT_VOLUME_CONTROL                 = 0x0F,
  22.         R10_RECORD_MICROPHONE_BIAS_CONTROL                                 = 0x10,
  23.         R11_ALC_CONTROL_0                                                                = 0x11,
  24.         R12_ALC_CONTROL_1                                                                = 0x12,
  25.         R13_ALC_CONTROL_2                                                                = 0x13,
  26.         R14_ALC_CONTROL_3                                                                = 0x14,
  27.         R15_SERIAL_PORT_CONTROL_0                                                 = 0x15,
  28.         R16_SERIAL_PORT_CONTROL_1                                                 = 0x16,
  29.         R17_CONVERTER_CONTROL_0                                                 = 0x17,
  30.         R18_CONVERTER_CONTROL_1                                                 = 0x18,
  31.         R19_ADC_CONTROL                                                                        = 0x19,
  32.         R20_LEFT_INPUT_DIGITAL_VOLUME                                         = 0x1A,
  33.         R21_RIGHT_INPUT_DIGITAL_VOLUME                                         = 0x1B,
  34.         R22_PLAYBACK_MIXER_LEFT_CONTROL_0                                 = 0x1C,
  35.         R23_PLAYBACK_MIXER_LEFT_CONTROL_1                                 = 0x1D,
  36.         R24_PLAYBACK_MIXER_RIGHT_CONTROL_0                                 = 0x1E,
  37.         R25_PLAYBACK_MIXER_RIGHT_CONTROL_1                                 = 0x1F,
  38.         R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL         = 0x20,
  39.         R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL = 0x21,
  40.         R28_PLAYBACK_LR_MIXER_MONO_OUTPUT_CONTROL                 = 0x22,
  41.         R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL                 = 0x23,
  42.         R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL         = 0x24,
  43.         R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL         = 0x25,
  44.         R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL         = 0x26,
  45.         R33_PLAYBACK_MONO_OUTPUT_CONTROL                                 = 0x27,
  46.         R34_PLAYBACK_POP_CLICK_SUPPRESSION                                 = 0x28,
  47.         R35_PLAYBACK_POWER_MANAGEMENT                                         = 0x29,
  48.         R36_DAC_CONTROL_0                                                                 = 0x2A,
  49.         R37_DAC_CONTROL_1                                                                 = 0x2B,
  50.         R38_DAC_CONTROL_2                                                                 = 0x2C,
  51.         R39_SERIAL_PORT_PAD_CONTROL                                         = 0x2D,
  52.         R40_CONTROL_PORT_PAD_CONTROL_0                                         = 0x2F,
  53.         R41_CONTROL_PORT_PAD_CONTROL_1                                         = 0x30,
  54.         R42_JACK_DETECT_PIN_CONTROL                                         = 0x31,
  55.         R67_DEJITTER_CONTROL                                                         = 0x36,
  56.         R58_SERIAL_INPUT_ROUTE_CONTROL                                        = 0xF2,
  57.         R59_SERIAL_OUTPUT_ROUTE_CONTROL                                        = 0xF3,
  58.         R61_DSP_ENABLE                                                                        = 0xF5,
  59.         R62_DSP_RUN                                                                                = 0xF6,
  60.         R63_DSP_SLEW_MODES                                                                = 0xF7,
  61.         R64_SERIAL_PORT_SAMPLING_RATE                                         = 0xF8,
  62.         R65_CLOCK_ENABLE_0                                                                 = 0xF9,
  63.         R66_CLOCK_ENABLE_1                                                                 = 0xFA
  64. };
  65. /* Audio controller registers */
  66. enum i2s_regs {
  67.         I2S_DATA_RX_L_REG        = 0x00 + AUDIO_BASE,
  68.         I2S_DATA_RX_R_REG        = 0x04 + AUDIO_BASE,
  69.         I2S_DATA_TX_L_REG   = 0x08 + AUDIO_BASE,
  70.         I2S_DATA_TX_R_REG   = 0x0c + AUDIO_BASE,
  71.         I2S_STATUS_REG      = 0x10 + AUDIO_BASE,
  72. };
  73. #endif
复制代码
新建C文件
audio.c
  1. #include <stdio.h>
  2. #include <xil_io.h>
  3. #include <sleep.h>
  4. #include "xiicps.h"
  5. #include <xil_printf.h>
  6. #include <xparameters.h>
  7. #include "xuartps.h"
  8. #include "stdlib.h"
  9. #include "audio.h"
  10. // Parameter definitions
  11. #define UART_BASEADDR XPAR_PS7_UART_1_BASEADDR
  12. #define GPIO_BASE XPAR_GPIO_0_BASEADDR
  13. #define LED_CHANNEL 1
  14. //----------------------------------------------------
  15. // PROTOTYPE FUNCTIONS
  16. //----------------------------------------------------
  17. unsigned char IicConfig(unsigned int DeviceIdPS);
  18. void AudioPllConfig();
  19. void AudioWriteToReg(unsigned char u8RegAddr, unsigned char u8Data);
  20. void AudioConfigureJacks();
  21. void LineinLineoutConfig();
  22. void read_superpose_play();;
  23. //Global variables
  24. XIicPs Iic;
  25. int main(void)
  26. {
  27.      xil_printf("------------------Enter Main Fun------------------------------\r\n");
  28.      //Configure the IIC data structure
  29.     IicConfig(XPAR_XIICPS_0_DEVICE_ID);
  30.     //Configure the Audio Codec's PLL
  31.     AudioPllConfig();
  32.     //Configure the Line in and Line out ports.
  33.     //Call LineInLineOutConfig() for a configuration that
  34.     //同时开启Miz702的两个输入(绿色)和输出(红色)
  35.     AudioConfigureJacks();
  36.     xil_printf("-----------------ADAU1761 configured----------------------------\n\r");
  37.     while(1)
  38.     {
  39.         //循环采集 播放
  40.         read_superpose_play();
  41.     }
  42.     return 0;
  43. }
  44. //
  45. void read_superpose_play(void)
  46. {
  47.     u32  in_left, in_right, out_left, out_right;
  48.     while (!XUartPs_IsReceiveData(UART_BASEADDR)){
  49.         // 采集到的左右声道的数据
  50.         in_left = Xil_In32(I2S_DATA_RX_L_REG);
  51.         in_right = Xil_In32(I2S_DATA_RX_R_REG);
  52.         out_left =    in_left ;
  53.         out_right =   in_right ;
  54.         //输出
  55.         Xil_Out32(I2S_DATA_TX_L_REG, out_left);
  56.         Xil_Out32(I2S_DATA_TX_R_REG, out_right);
  57.         //消除人声
  58.        // out_right =   in_right - out_right ;
  59.         //Xil_Out32(I2S_DATA_TX_L_REG, out_right );
  60.         //Xil_Out32(I2S_DATA_TX_R_REG, out_right);
  61.         }
  62. }
  63. /* ---------------------------------------------------------------------------- *
  64. *                                  IicConfig()                                 *
  65. * ---------------------------------------------------------------------------- *
  66. * Initialises the IIC driver by looking up the configuration in the config
  67. * table and then initialising it. Also sets the IIC serial clock rate.
  68. * ---------------------------------------------------------------------------- */
  69. unsigned char IicConfig(unsigned int DeviceIdPS)
  70. {
  71.     XIicPs_Config *Config;
  72.     int Status;
  73.     /* Initialise the IIC driver so that it's ready to use */
  74.     // Look up the configuration in the config table
  75.     Config = XIicPs_LookupConfig(DeviceIdPS);
  76.     if(NULL == Config) {
  77.         return XST_FAILURE;
  78.     }
  79.     // Initialise the IIC driver configuration
  80.     Status = XIicPs_CfgInitialize(&Iic, Config, Config->BaseAddress);
  81.     if(Status != XST_SUCCESS) {
  82.         return XST_FAILURE;
  83.     }
  84.     //Set the IIC serial clock rate.
  85.     XIicPs_SetSClk(&Iic, IIC_SCLK_RATE);
  86.     return XST_SUCCESS;
  87. }
  88. /* ---------------------------------------------------------------------------- *
  89. *                              AudioPllConfig()                                *
  90. * ---------------------------------------------------------------------------- *
  91. * Configures audio codes's internal PLL. With MCLK = 10 MHz it configures the
  92. * PLL for a VCO frequency = 49.152 MHz, and an audio sample rate of 48 KHz.
  93. * ---------------------------------------------------------------------------- */
  94. void AudioPllConfig() {
  95.     unsigned char u8TxData[8], u8RxData[6];
  96.     int Status;
  97.     Status = IicConfig(XPAR_XIICPS_0_DEVICE_ID);
  98.     if(Status != XST_SUCCESS) {
  99.         xil_printf("\nError initializing IIC");
  100.     }
  101.     // Disable Core Clock
  102.     AudioWriteToReg(R0_CLOCK_CONTROL, 0x0E);
  103.     // Write 6 bytes to R1 @ register address 0x4002
  104.     u8TxData[0] = 0x40; // Register write address [15:8]
  105.     u8TxData[1] = 0x02; // Register write address [7:0]
  106.     u8TxData[2] = 0x02; // byte 6 - M[15:8]
  107.     u8TxData[3] = 0x71; // byte 5 - M[7:0]
  108.     u8TxData[4] = 0x02; // byte 4 - N[15:8]
  109.     u8TxData[5] = 0x3C; // byte 3 - N[7:0]
  110.     u8TxData[6] = 0x21; // byte 2 - 7 = reserved, bits 6:3 = R[3:0], 2:1 = X[1:0], 0 = PLL operation mode
  111.     u8TxData[7] = 0x01; // byte 1 - 7:2 = reserved, 1 = PLL Lock, 0 = Core clock enable
  112.     // Write bytes to PLL Control register R1 @ 0x4002
  113.     XIicPs_MasterSendPolled(&Iic, u8TxData, 8, (IIC_SLAVE_ADDR >> 1));
  114.     while(XIicPs_BusIsBusy(&Iic));
  115.     // Register address set: 0x4002
  116.     u8TxData[0] = 0x40;
  117.     u8TxData[1] = 0x02;
  118.     // Poll PLL Lock bit
  119.     do {
  120.         XIicPs_MasterSendPolled(&Iic, u8TxData, 2, (IIC_SLAVE_ADDR >> 1));
  121.         while(XIicPs_BusIsBusy(&Iic));
  122.         XIicPs_MasterRecvPolled(&Iic, u8RxData, 6, (IIC_SLAVE_ADDR >> 1));
  123.         while(XIicPs_BusIsBusy(&Iic));
  124.     }
  125.     while((u8RxData[5] & 0x02) == 0); // while not locked
  126.     AudioWriteToReg(R0_CLOCK_CONTROL, 0x0F);    // 1111
  127.                                                 // bit 3:       CLKSRC = PLL Clock input
  128.                                                 // bits 2:1:    INFREQ = 1024 x fs
  129.                                                 // bit 0:       COREN = Core Clock enabled
  130. }
  131. /* ---------------------------------------------------------------------------- *
  132. *                              AudioWriteToReg                                 *
  133. * ---------------------------------------------------------------------------- *
  134. * Function to write one byte (8-bits) to one of the registers from the audio
  135. * controller.
  136. * ---------------------------------------------------------------------------- */
  137. void AudioWriteToReg(unsigned char u8RegAddr, unsigned char u8Data) {
  138.     unsigned char u8TxData[3];
  139.     u8TxData[0] = 0x40;
  140.     u8TxData[1] = u8RegAddr;
  141.     u8TxData[2] = u8Data;
  142.     XIicPs_MasterSendPolled(&Iic, u8TxData, 3, (IIC_SLAVE_ADDR >> 1));
  143.     while(XIicPs_BusIsBusy(&Iic));
  144. }
  145. /* ---------------------------------------------------------------------------- *
  146. *                              AudioConfigureJacks()                           *
  147. * ---------------------------------------------------------------------------- *
  148. * Configures audio codes's various mixers, ADC's, DAC's, and amplifiers to
  149. * accept stereo input from line in and push stereo output to line out.
  150. * ---------------------------------------------------------------------------- */
  151. void AudioConfigureJacks()
  152. {
  153.     //AudioWriteToReg(R4_RECORD_MIXER_LEFT_CONTROL_0, 0x01); //enable mixer 1
  154.     AudioWriteToReg(R4_RECORD_MIXER_LEFT_CONTROL_0, 0x0f);
  155.     AudioWriteToReg(R5_RECORD_MIXER_LEFT_CONTROL_1, 0x07); //unmute Left channel of line in into mxr 1 and set gain to 6 db
  156.     AudioWriteToReg(R6_RECORD_MIXER_RIGHT_CONTROL_0, 0x0f); //enable mixer 2
  157.     AudioWriteToReg(R8_LEFT_DIFFERENTIAL_INPUT_VOLUME_CONTROL,0x03);
  158.     AudioWriteToReg(R9_RIGHT_DIFFERENTIAL_INPUT_VOLUME_CONTROL,0x03);
  159.     AudioWriteToReg(R10_RECORD_MICROPHONE_BIAS_CONTROL, 0x01);
  160.     AudioWriteToReg(R7_RECORD_MIXER_RIGHT_CONTROL_1, 0x07); //unmute Right channel of line in into mxr 2 and set gain to 6 db
  161.     AudioWriteToReg(R19_ADC_CONTROL, 0x13); //enable ADCs
  162.     AudioWriteToReg(R22_PLAYBACK_MIXER_LEFT_CONTROL_0, 0x21); //unmute Left DAC into Mxr 3; enable mxr 3
  163.     AudioWriteToReg(R24_PLAYBACK_MIXER_RIGHT_CONTROL_0, 0x41); //unmute Right DAC into Mxr4; enable mxr 4
  164.     AudioWriteToReg(R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL, 0x05); //unmute Mxr3 into Mxr5 and set gain to 6db; enable mxr 5
  165.     AudioWriteToReg(R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL, 0x11); //unmute Mxr4 into Mxr6 and set gain to 6db; enable mxr 6
  166.     AudioWriteToReg(R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL, 0xFF);//Mute Left channel of HP port (LHP)
  167.     AudioWriteToReg(R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL, 0xFF); //Mute Right channel of HP port (LHP)
  168.     //AudioWriteToReg(R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL, 0xE6); //set LOUT volume (0db); unmute left channel of Line out port; set Line out port to line out mode
  169.     //AudioWriteToReg(R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL, 0xE6); // set ROUT volume (0db); unmute right channel of Line out port; set Line out port to line out mode
  170.     AudioWriteToReg(R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL, 0xFE); //set LOUT volume (0db); unmute left channel of Line out port; set Line out port to line out mode
  171.     AudioWriteToReg(R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL, 0xFE); // set ROUT volume (0db); unmute right channel of Line out port; set Line out port to line out mode
  172.     AudioWriteToReg(R35_PLAYBACK_POWER_MANAGEMENT, 0x03); //enable left and right channel playback (not sure exactly what this does...)
  173.     AudioWriteToReg(R36_DAC_CONTROL_0, 0x03); //enable both DACs
  174.     AudioWriteToReg(R58_SERIAL_INPUT_ROUTE_CONTROL, 0x01); //Connect I2S serial port output (SDATA_O) to DACs
  175.     AudioWriteToReg(R59_SERIAL_OUTPUT_ROUTE_CONTROL, 0x01); //connect I2S serial port input (SDATA_I) to ADCs
  176.     AudioWriteToReg(R65_CLOCK_ENABLE_0, 0x7F); //Enable clocks
  177.     AudioWriteToReg(R66_CLOCK_ENABLE_1, 0x03); //Enable rest of clocks
  178. }
  179. /* ---------------------------------------------------------------------------- *
  180. *                              LineinLineoutConfig()                           *
  181. * ---------------------------------------------------------------------------- *
  182. * Configures Line-In input, ADC's, DAC's, Line-Out and HP-Out.
  183. * ---------------------------------------------------------------------------- */
  184. void LineinLineoutConfig() {
  185.     AudioWriteToReg(R17_CONVERTER_CONTROL_0, 0x05);//48 KHz
  186.     AudioWriteToReg(R64_SERIAL_PORT_SAMPLING_RATE, 0x05);//48 KHz
  187.     AudioWriteToReg(R19_ADC_CONTROL, 0x13);
  188.     AudioWriteToReg(R36_DAC_CONTROL_0, 0x03);
  189.     AudioWriteToReg(R35_PLAYBACK_POWER_MANAGEMENT, 0x03);
  190.     AudioWriteToReg(R58_SERIAL_INPUT_ROUTE_CONTROL, 0x01);
  191.     AudioWriteToReg(R59_SERIAL_OUTPUT_ROUTE_CONTROL, 0x01);
  192.     AudioWriteToReg(R65_CLOCK_ENABLE_0, 0x7F);
  193.     AudioWriteToReg(R66_CLOCK_ENABLE_1, 0x03);
  194.     AudioWriteToReg(R4_RECORD_MIXER_LEFT_CONTROL_0, 0x01);
  195.     AudioWriteToReg(R5_RECORD_MIXER_LEFT_CONTROL_1, 0x05);//0 dB gain
  196.     AudioWriteToReg(R6_RECORD_MIXER_RIGHT_CONTROL_0, 0x01);
  197.     AudioWriteToReg(R7_RECORD_MIXER_RIGHT_CONTROL_1, 0x05);//0 dB gain
  198.     AudioWriteToReg(R22_PLAYBACK_MIXER_LEFT_CONTROL_0, 0x21);
  199.     AudioWriteToReg(R24_PLAYBACK_MIXER_RIGHT_CONTROL_0, 0x41);
  200.     AudioWriteToReg(R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL, 0x03);//0 dB
  201.     AudioWriteToReg(R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL, 0x09);//0 dB
  202.     AudioWriteToReg(R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL, 0xE7);//0 dB
  203.     AudioWriteToReg(R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL, 0xE7);//0 dB
  204.     AudioWriteToReg(R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL, 0xE6);//0 dB
  205.     AudioWriteToReg(R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL, 0xE6);//0 dB
  206. }
复制代码
下载完成后测试效果:采集的音频信号,再次输出
修改代码,左右声道相减可以消除部分人声
红色的线是音频输入,白色的是耳机输出





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

发表评论已发布 3

uisrc

发表于 2016-3-20 13:24:28 | 显示全部楼层

越努力越幸运!加油!
回复

使用道具 举报

skypinglee

发表于 2018-5-13 11:49:47 | 显示全部楼层

请问ADA1761驱动IP core 和本编文章工程源码下载的链接已经失效,能提供一个链接吗?谢谢

LilyLee1

发表于 2019-7-11 19:58:33 | 显示全部楼层


本文中ADA1761驱动IP core 和本编文章工程源码下载的链接已经失效,麻烦各位大佬提供一个链接~~
感激不尽!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则