DSP原理与应用 第10章 C55x典型应用系统设计

Slides:



Advertisements
Similar presentations
人機介面 Arduino 簡介 授課教師 開課單位. Arduino 簡介 Arduino 是一塊 Open source 的 Simple i/o 介面板,並 且具有使用類似 java, C 語言的開發環境。 可以快速使用 Arduino 語言 ( 基於 wiring) 與 Flash 或 Processing…
Advertisements

现代电子技术实验 ——综合实验之单片机部分
什么是SOPC: SOPC是英文System On a Programmable Chip的缩写,称为片上可编程系统。SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理等融为一体,综合了各自的优势,且在结构上形成一块芯片。 为什么用SOPC:SOPC是现代电子技术和电子系统设计的发展趋势,建立了电子系统设计的新模式。用户利用SOPC开发平台,自行设计高速、高性能的DSP处理器、特定功能的CPU及其外围接口电路,创建结构最为简洁的电子系统。
FPGA设计与应用 大连理工大学软件学院 王洁 2011年春季.
第2章 SOPC硬件开发环境及流程.
EDA技术 第9章 FPGA硬件设计.
青岛市数字证书认证中心 2011年4月.
第2章 FPGA/CPLD结构与应用.
第8章 机床操作 主讲:臧红彬 博士.
第4章 VHDL设计初步.
加速度計 指導老師 : 洪正瑞 製作人 : 蔡昌佑.
C8051F MCU V1.0.
DSP原理与应用 第10章 C55x典型应用系统设计
电工电子实验中心.
EPF10K10TI144-4晶片燒錄.
Hardware Chen Ching-Jung
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
CH.2 Introduction to Microprocessor-Based Control
Netduino 程式設計教學 國立豐原高中 郭再興.
第一章 嵌入式系统开发基础 本章介绍了嵌入式系统开发的基础知识,从嵌入式计算机的历史由来、嵌入式系统的定义、嵌入式系统的基本特点、嵌入式系统的分类及应用、嵌入式系统软硬件各部分组成、嵌入式系统的开发流程、嵌入式技术的发展趋势等方面进行了介绍,涉及到嵌入式系统开发的基本内容,使读者系统地建立起的嵌入式系统整体概念。
電腦硬體基本介紹 國立高雄大學資訊工程學系 林士倫 2010/10/21.
VHDL數位電路實習與專題設計 文魁資訊-UE301
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
PIC16F1827介紹 以微控器為基礎之電路設計實務-微處理器實驗室.
Timer & KEYPAD 11/24.
Chapter 5 Verilog硬體描述語言
S3c2410电路设计(以北京博创s3c2410-s实验箱为例讲解)
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
浅谈基于FPGA的电路设计 报告人:吴爱平 2005/11/13
EDA原理及应用 何宾
第八章 数据通信.
嵌入式系统教案 武汉创维特信息技术有限公司 2018/11/27.
Block diagram BB —逻辑 —音频 —电源管理 HW interface. Block diagram BB —逻辑 —音频 —电源管理 HW interface.
I2C使用 AIC23数字回音实验.
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
第 9 章 存储器和可编程逻辑器件 9.1 半导体存储器 9.2 可编程逻辑器件.
Arduino.
初始化串列通訊埠 在啟始串列傳輸介面時有以下3個步驟:假設傳輸的通訊協定為9600bps,傳送8個位元資料,沒有同位位元,1個停止位元。
KeyStone I DSP[C665x 与 C6678] 视频教程
使用VHDL設計--Moore Machine
語法:Variables & Functions 實作:Digital out (Button+LED) 簡報:廖崇義
DHT11 溫溼度感測器 林品成 月.
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
K60基础课程 02 首都师范大学物理系 王甜.
第 2 章 数字逻辑电路基础 和计算机中的逻辑部件
EDA 第二章 可编程逻辑器件.
使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆.
    使用Arduino量測交流(AC)電壓    林品成 月.
    使用Arduino量測直流(DC)電壓    林品成 月.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
基于WEB的嵌入式视频采集压缩瘦身服务器的设计
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
第1章 概述 1.1 DSP实现方案及设计流程 1.2 现代DSP设计流程概述 1.3 两类DSP解决方案的比较.
计算机学院 数字逻辑实验的要求.
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/18.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
设计示例一 用门级结构描述D触发器:.
K60入门课程 06 首都师范大学物理系 靳熙芃.
使用VHDL設計-8x1多工器 通訊一甲 B 楊穎穆.
UART通信实验(二) McBSP软件模拟异步通信
外部存储器接口 键盘扫描实验.
外部存储器接口 SDRAM实验.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
Programmable Logic System Design
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
第七章 基本逻辑电路设计.
第2章 Arduino编程.
Programmable Logic System Design
Presentation transcript:

DSP原理与应用 第10章 C55x典型应用系统设计 刘忠国:liuzhg@sdu.edu.cn 电话:18764171197 ; 微信: jnliuzg 山东大学生物医学工程

网站: http://course.sdu.edu.cn/G2S/dsp.cc http://www.ti.com 任课教师:刘忠国 网站: http://course.sdu.edu.cn/G2S/dsp.cc http://www.ti.com TMS320C55x DSP CPU Reference Guide (SPRU371F, 2004年版) TMS320VC5509A Fixed-Point Digital Signal Processor-Data Manual (SPRS205K,2008年版) TMS320VC5503/5507/5509 DSP External Memory Interface (EMIF) Reference Guide (SPRU670) TMS320VC5507/5509 DSP Analog-to-Digital Converter (ADC) Reference Guide (SPRU586B)

第10章 C55x典型应用系统设计 10.1 典型DSP板的硬件设计 10.2 CPLD电路模块设计 10.3 DSP板测试程序 10.4 综合设计实例1: 自适应系统辨识 10.5 综合设计实例2: 数字式有源抗噪声耳罩

10.1 典型DSP板的硬件设计 10.1.1 概述 10.1.2基本电路模块 10.1.3 FLASH电路模块 10.1.4 SDRAM电路模块 10.1.5 数模转换电路 10.1.6 SD卡接口电路 10.1.7 USB接口电路 10.1.8 自启动电路模块

10.1 典型DSP板的硬件设计 10.1.1 概述 基于TMS320VC5509A的通用数字信号处理板: 包括VC5509A芯片、复位电路、时钟电路、JTAG接 口电路以及电源电路等基本电路模块。 通过EMIF外扩了FLASH、SDRAM等存储器模块。 通过McBSP0、McBSP1和I2C外扩了2片AIC23B,使 该系统具有4路模拟输入和4路模拟输出。

10.1.2基本电路模块 参考:图9-8 TPS767D301双路电源 1. 电源电路 ,Vref=1.1834V

参考:图9-10 手动复位电路 2.复位电路 Y = A 单施密特反相器芯片SN74AHC1G14 3.时钟电路

CPLD实现的FLASH高位地址扩展寄存器 S29AL008D: 8M bit (1Mx8Bit, 512K x16Bit) CMOS Flash 1为字模式 CE1 A[13:1] 参考图 9-16 C5509A PGE与S29AL008D连接示意图 CPLD实现的FLASH高位地址扩展寄存器

10.1.4 SDRAM电路模块 A0与A14在EMIF中异或输出, A0不用(A0=0),则该引脚就是A14 LDQM,UDQM这些信号线是为了实现字节访问和半字访问,LDQM控制低八位,UDQM控制高八位,这样当要按字节写的时候,就把高八位屏蔽掉。 A0与A14在EMIF中异或输出, A0不用(A0=0),则该引脚就是A14 字节使能位BE0n, BE1n Auto-Precharge 占用CE0, CE1两个CE空间 参考图9-19 C55x与64M位(4M×16) SDRAM的连接图

参考表2-24 C5509A存储器映射 C5509有SROM C5509A没有SROM, block block block 外部扩展存储空间(CE3) 当MPNMC=1时有效

10.1.5 数模转换电路 x1~x4为线性电压输入端; y1~y4为线性电压输出端 CS=0: 地址0011010 CS=1: 地址0011011 MODE=0 选择2线模式 参考图9-29 McBSP和AIC23B的数据接口接线图(两AIC23B为主模式) 表9-21 数字音频接口格式(地址:0000111)寄存器的位MS=1

10.1.6 SD卡接口电路

10.1.7 USB接口电路 DSP芯片的USB相关引脚

10.1.8 自启动电路模块 系统复位时, 程序会自动跳转到0xFF8000处运行, 在这里固化着出厂时的引导程序。这段程序中系统会读取GPIO0~3的状态, 然后确定引导方式: 表10-1 GPIO引脚与系统上电引导方式表 GPIO0 GPIO1 GPIO2 GPIO3 说明 1 来自于Mcbsp0的串行EEPROM引导方式(24bit地址) USB接口引导方式 EHPI(多元引导)方式 EHPI(非多元引导)方式 来自于外部16bit异步内存的引导方式 来自于Mcbsp0的串行EEPROM引导方式(16bit地址) 并行EMIF引导方式(16bit异步内存) 来自Mcbsp0同步串行引导方式(16bit数据) 来自Mcbsp0同步串行引导方式(8bit数据)

10.1.8 自启动电路模块

第10章 C55x典型应用系统设计 10.1 典型DSP板的硬件设计 10.2 CPLD电路模块设计 10.3 DSP板测试程序 10.4 综合设计实例1: 自适应系统辨识 10.5 综合设计实例2: 数字式有源抗噪声耳罩

10.2 CPLD电路模块设计 10.2.1 概述 10.2.2 复位逻辑 10.2.3 控制寄存器的地址生成 10.2.4 用户寄存器 10.2.5 FLASH高位地址寄存器 10.2.6 控制寄存器数据的输出

10.2 CPLD电路模块设计 10.2.1 概述 利用小 规模逻 辑 器 件 译 码 的方式 己 不 能满 足 DSP 系统的要求。 同吋 DSP 系统中经常需要 外部专 门的快速逻辑控制电路的配合,这可由 CPLD 来 实现。 CPLD 是 Complex Programmable Logic Device 的简 称, 其时序严格 、速 度较快 、可编程性好, 非常适合 于实现译码和逻辑控制专门电路。 XILINX(赛灵思)公司的CPLD芯片XC95144XL, 用于: DSP复位逻辑控制; 外部存储器FLASH高位地址扩展; 系统外扩等。 CPLD代码使用VHDL语言编写。 VHDL (VHSIC Hardware Description Language(VHSIC硬件描述语言)。VHSIC(Very High Speed Integrated Circuit的缩写) 还有verilog HDL语言

输入 输出 输入 XC95144XL输入输出引脚的定义 DSP_CE2n 100-pin TQFP(81 user I/O pins) 输入 输出 DSP_CE2n 输入 100-pin TQFP(81 user I/O pins) 144-pin TQFP (117 user I/O pins) 144-CSP (117 user I/O pins) XC95144XL输入输出引脚的定义

10.2.2 复位逻辑 1. 输入信号: 2.输出信号: 电源芯片复位信号PWR_RSTn; 按键复位信号BTN_RST; 外部复位信号X_RSTn; 2.输出信号: VC5509A芯片系统复位信号DSP_RSTn; FLASH芯片复位信号FLASH_RSTn; 复位指示灯信号DSP_RSTn_LED。

SystemResetn<='0‘ when PWR_RSTn='0' or X_RSTn= '0' or BTN_RST = '1' 3. 代码: SystemResetn<='0‘ when PWR_RSTn='0' or X_RSTn= '0' or BTN_RST = '1' else '1'; DSP_RSTn<= '0' when SystemResetn = '0' DST_RST_LED<='0‘ when SystemResetn='0' FLASH_RSTn<='0‘ when SystemResetn='0' 输入信号 4.功能: 当PWR_RSTn(低电平有效)、X_RSTn(低电平有效) 、BTN_RST (高电平有效)有一个有效时, 即产生有效的复位信号DSP_RSTn (低电平有效)、FLASH_RSTn(低电平有效) 、DSP_RSTn_LED (低电平有效)。

10.2.3 控制寄存器的地址生成 用户寄存器和FLASH高位地址寄存器FHA与VC5509A通过EMIF接口联系, 其地址分别为0x400601、0x400602。 地址生成代码(由XC95144产生): CE2首字地址0x400000 REGCEn<='0' when DSP_CE2n='0' and DSP_ADDRH(13 downto 10)="0011" else '1'; GENERATE_ADDR: process(DSP_ADDRL) begin case DSP_ADDRL(4 downto 1) is when "0001"=> ChipEnables <="00000001“ ; -- USER REG 0x400601 when "0010"=> ChipEnables <="00000010“ ; -- FLASH REG 0x400602 when others=> ChipEnables <="00000000“ ; end case; end process; USER_REGCS<='1' when ChipEnables(0)='1' and REGCEn='0' else '0'; -- FLASH_REGCS<=1' when ChipEnables(1)='1' and REGCEn='0‘ else '0'; -- 符号后面是注释

10.2.4 用户寄存器 用户寄存器用于控制LED灯和读拨码开关状态, 长度为8位。高4位对应引脚USER_SW4~USER_SW1,用于读拨码开关状态; 低4位对应引脚USER_LED4~USER_LED1, 用于控制LED灯。 代码: process(SystemResetn, USER_REGCS, DSP_DQ , DSP_AWEn) begin if SystemResetn='0' then USER_REG(3 downto 0)<="1010"; elsif DSP_AWEn'EVENT and DSP_AWEn = '1' then -- _↑ ¯ if (USER_REGCS = '1') then USER_REG(3 downto 0) <= DSP_DQ(3 downto 0); end if; end process; USER_REG(7 downto 4) <= USER_SW(4 downto 1); -- read SW state USER_LED(4 downto 1)<=not USER_REG(3 downto 0);-- output LED state 符号后面是注释 取反

10.2.5 FLASH高位地址寄存器 该模块用于生成FLASH的高位地址信号A18~A13。 代码: FLASH_CEn<= DSP_CE1n; FLASH_WEn<= DSP_AWEn; FLASH_OEn<= DSP_AOEn; process(SystemResetn, FHA_REGCS,DSP_DQ,DSP_AWEn) begin if SystemResetn = '0' then FHA_REG (5 downto 0) <= "000000"; -- elsif DSP_AWEn'EVENT and DSP_AWEn = '1' then -- _ _↑ ¯ ¯ if (FHA_REGCS = '1') then -- FHA_REG (5 downto 0) <= DSP_DQ(5 downto 0); end if; end process; FLASH_ADDR(18 downto 13) <= FHA_REG (5 downto 0);

10.2.6 控制寄存器数据的输出 下列代码可将对应控制寄存器中的内容送出供DSP读取: Multiplex多路复用 -- Mux the read data from all the registers and output for reads process(DSP_ADDRL,USER_REG,FLASH_REG) begin case DSP_ADDRL(4 downto 1) is when "0001" => MuxD <= USER_REG; when "0010" => MuxD <= "00" & FLASH_REG; when others => MuxD <= "ZZZZZZZZ"; end case; end process; DSP_DQ <= MuxD when (REGCEn = '0') and (DSP_AREn = '0') and (DSP_AOEn = '0') else "ZZZZZZZZ"; 高阻状态

第10章 C55x典型应用系统设计 10.1 典型DSP板的硬件设计 10.2 CPLD电路模块设计 10.3 DSP板测试程序 10.4 综合设计实例1: 自适应系统辨识 10.5 综合设计实例2: 数字式有源抗噪声耳罩

10.3 DSP板测试程序 10.3.1 LED灯和拨码开关测试程序 10.3.2 LED灯和拨码开关测试程序 10.3.3 SDRAM测试程序 10.3.4 FLASH测试程序 10.3.5 AIC23B测试程序

10.3 DSP板测试程序 10.3.1 LED灯和拨码开关测试程序 对于LED灯和拨码开关的操作是通过对CPLD上的用 户寄存器USER_REG进行读写来完成的。 用户寄存器地址为0x400601, 各位的定义: 7 6 5 4 3 2 1 SW4 SW3 SW2 SW1 LED4 LED3 LED2 LED1 R-x R-x R-x R-x R/W-0 R/W-0 R/W-0 R/W-0 测试程序功能:让LED灯依次点亮(1:亮;0:灭), 然后再依次熄灭。然后让LED灯闪烁3次, 最后循环读取SW1~SW4的值送LED1~LED4显示。

(1:亮;0:灭) for(i = 0; i < 8; i++) //将LED灯依次点亮,再依次熄灭 { //因数组已定义LEDcode[8]={0,1,3,7,15, 7, 3,1,0} LedDisp(LEDcode[i]); Delay_ms(300) ; //延时300ms函数 } for(i = 0;i < 0x03;i++) //让LED灯闪烁3次 { LedDisp(0x00); //该函数将0送USER_REG中使灯全灭 Delay_ms(300); LedDisp(0x0F); //将0F送USER_REG中使灯全亮 while(1) //循环读取拨码开关的键值,送LED显示 readvalue = SwithRead();// SwithRead读取拨码开关的值 LedDisp(readvalue); //送LED灯显示 (1:亮;0:灭)

10.3.2 LED灯和拨码开关测试程序 GPIO0~GPIO3与拨码开关相连,在系统复位时用于 选择系统引导方式,当系统引导完毕后即可作为普通 GPIO来使用。 GPIO4、GPIO6、GPIO7以及XF连接了LED灯,输 出为0时点亮LED灯,输出为1时关闭LED灯。 注意: C5509A 的PGE封装无GPIO5引脚(BGA封装有) 测试程序功能: 先让GPIO4、XF、GPIO6、GPIO7闪烁3次, 然后循环检测GPIO0~GPIO3的值, 依次送GPIO4、XF、GPIO6和GPIO7显示。 以下程序所用到的函数部分可在CSL安装目录的库文件中查找:\C55xxCSL\lib\csl55xx.src, 类似前面用到的: D:\ti\ccsv5\tools\compiler\c5500_4.4.1\lib\rtssrc.zip(解压)

GPIO_RSET(IODIR,0xF0); //使GPIO0-3为输入,GPIO4-7为输出 for(i = 0;i<0x03;i++) { GPIO_RSET(IODATA,0x0f); //使GPIO4-7都输出0, 使3灯亮 CHIP_FSET(ST1_55,XF,0); //XF灯也点亮 Delay_ms(300); GPIO_RSET(IODATA,0xff); //3灯全灭 CHIP_FSET(ST1_55,XF,1); //XF灯也熄灭 } while(1) readvalue=GPIO_RGET(IODATA) & 0x0F; //读取GPIO0-3的值 GPIO_RSET(IODATA,readvalue<<4); //给GPIO4(6, 7)赋值 CHIP_FSET(ST1_55,XF,(readvalue & 0x02) >> 1); //将GPIO1的值与GPIO5(C5509A PGE无)对应, 赋给XF //GPIO_RSET设置IODIR值为0xF0 //设置IODATA值为0x0f 无GPIO5引脚 //CHIP_FSET设置ST1_55的XF=0 有关函数或宏定义在片上支持库安装文件夹C55xxCSL的csl55xx.src中 #define GPIO_RSET(Reg,Val) _PREG_SET(GPIO_ADDR(##Reg),Val) #define _PREG_SET(PregAddr, Val) PREG16(PregAddr)=(Uint16)Val #define PREG16(addr) (*(volatile ioport Uint16*)(addr)) #define CHIP_FSET(Reg,Field,Val) _CHIP_##Reg##_FSET(##Field,Val) 在csl55xx.src中依次可追究出对ST1_55的XF位清0 GPIO_RGET(IODATA)的追源: #define GPIO_RGET(Reg) _PREG_GET(GPIO_ADDR(##Reg)) #define _PREG_GET(PregAddr) PREG16(PregAddr) #define PREG16(addr) (*(volatile ioport Uint16*)(addr))

10.3.3 SDRAM测试程序 SDRAM占用两个空间: CE0和CE1, FLASH与SDRAM复用CE1空间。当CE1_1寄存器中的MTYPE为001b时, 表示CE1空间为16位异步存储器; 当MTYPE为011b时, 表示CE1空间为16位SDRAM。 测试程序功能:首先配置好EMIF,然后向SDRAM中写入1000个数据,接着将写入的数据读出,验证读出的数据是否正确,并对错误的数据个数进行计数。

EMIF_config(&emiffig); //初始化SDRAM psrc = (Uint16 * )0x200000; //指向将要读写的地址 for(ii = 0;ii < 1000;ii++) //向对应地址中写入数据 { * psrc++ = ii; } psrc = (Uint16 * )0x200000; //重新指向将要读写的地址 if((* psrc) != (ii - 1)) error++; * psrc++; if(error == 0) printf("SDRAM test completed! No Error!"); while(1); //*psrc = ii; //psrc++;

10.3.4 FLASH测试程序 测试程序功能: 首先配置好EMIF,然后擦除整片FLASH。接着进行写操作, 先在0x4202000开始的地址写入1000个数据,然后在0x4204000开始的地址写入1000个数据。最后读取两块数据, 验证数据是否正确,并对错误的个数进行计数。 EMIF_config(&emiffig);//配置EMIF success = Flash_Erase_all();//需要大约14s才能擦除完毕 if(success == 1) printf("Flash erase successfully!!\n"); Flash_Write_init();//向flash中写入数据,有换页操作 for(ii=0;ii<1000;ii++) { Flash_Write(0x202000+ii,ii); }

for(ii = 0;ii < 1000;ii++) { Flash_Write(0x204000 + ii, ii+1); //写入的数据与上面略有不同 } Flash_Write_end(); for(ii = 0;ii < 1000;ii++) //读取写入flash中的数据,并验证 if(Flash_Read(0x202000 +ii) != (ii - 1)) error++; if(Flash_Read(0x204000+ii) != ii+1) error++; if(error == 0) printf("FLASH test completed! No Error!"); while(1);

10.3.5 AIC23B测试程序 板上共有2片AIC23B。控制接口部分使用I2C总线, 两个芯片的地址分别为0x1A和0x1B;数字接口部 分使用了两个McBSP接口:McBSP和McBSP1。 测试程序功能:首先对AIC23B进行初始化,配置 启动McBSP0和McBSP1,然后进入一个循环。在 循环中,等待数据接收,待接收完毕后将其存入 一个数组,再将接收到的数据发送出去。

//AIC23_Init()定义见实验Lab0701, Lab0702的aic23.c程序 AIC23_Init(); //AIC23B初始化, hMcbsp0=MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET); //打开McBSP0 hMcbsp1=MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET); //打开McBSP1 MCBSP_config(hMcbsp0, &McbspConfig);//配置McBSP0 MCBSP_config(hMcbsp1, &McbspConfig);//配置McBSP1 MCBSP_start(hMcbsp0, MCBSP_RCV_START|MCBSP_XMIT_START, 0x3000); //开启McBSP0发送和接收 MCBSP_start(hMcbsp1, MCBSP_RCV_START|MCBSP_XMIT_START, 0x3000); //开启McBSP1发送和接收 用结构体McbspConfig

while(1) {for(i=0;i<LENGTH;i++) {while(!MCBSP_rrdy(hMcbsp0)) {}; //判断是否有数据收到,若无则 等待 aic23data = MCBSP_read32(hMcbsp0); //接收数据 aic0R[i]=(unsigned int) aic23data & 0xffff;//AIC23B0右声道数 据 aic0L[i]=(unsigned int)(aic23data>>16)&0xffff;//AIC23B1左 声道数据 while(!MCBSP_xrdy(hMcbsp0)){};//判断是否准备好发送,若无则等 待 MCBSP_write32(hMcbsp0,aic23data);//发送数据 while(!MCBSP_rrdy(hMcbsp1)){};//判断是否有数据收到,若无则等 待 aic23data=MCBSP_read32(hMcbsp1); //接收数据 aic1R[i]=(unsigned int)aic23data&0xffff;//AIC23B1右声道数据 aic1L[i]=(unsigned int)(aic23data>>16)&0xffff;//AIC23B1左 声道数据 while(!MCBSP_xrdy(hMcbsp1)){};//判断是否准备好发送,若没有则 等待 MCBSP_write32(hMcbsp1,aic23data);//发送数据 }

第10章 C55x典型应用系统设计 10.1 典型DSP板的硬件设计 10.2 CPLD电路模块设计 10.3 DSP板测试程序 10.4 综合设计实例1: 自适应系统辨识 10.5 综合设计实例2: 数字式有源抗噪声耳罩

10.4 综合设计实例1:自适应系统辨识 10.4.1 基于LMS算法的自适应滤波器

10.4.2 自适应系统辨识算法 算法收敛后,N为辨识长度 :

10.4.3 辨识系统硬件设计

10.4.4 辨识系统软件设计 1.主程序

#include "5509.h" // 5509片上资源声明 #include "util.h" #include "math.h" int n_iden,N_iden; //声明辨识计数器和辨识时间长度 int L; // 声明滤波器阶数 int timer_flag; // 声明定时器状态标志位 float Fs,Ts; // 声明采样频率与采样时间 float Mu;// 声明收敛因子 float *w; // 声明自适应滤波器系数指针 float *x; // 声明自适应滤波器参考输入向量指针 float desizedSignal; // 声明期望信号 float ErrorSignal; // 声明误差信号 int whiteNoise; // 声明白噪声信号

void PLL_Init(); //声明锁相环配置函数 void wait(unsigned int cycles); //声明延时函数 void SDRAM_Init(); //声明存储器配置函数 void AIC23_Init(); //声明AIC23B配置函数 void INTR_Init(); //声明中断初始化函数 void TIMER_Init(); //声明定时器初始化函数 void TIMER_Start(); //声明定时器启动函数 void interrupt Timer(); //声明定时器中断服务程序 void LMS_Filter(); //声明自适应滤波程序

void main() { int temp; /*------------------------------------------------------------*/ /* VC5509A初始化 */ /*--------------------------------------------------------*/ PLL_Init(144); //锁相环配置,CPU时钟频率设置为144MHz wait(30); //延时 SDRAM_Init(); //存储器配置 INTR_Init(); //中断初始化 TIMER_Init(); //定时器初始化 /*-----------------------------------------------------------------*/ /* 变量初始化 */ n_iden=0; // 辨识计数器清0 N_iden=8000; //辨识时间长度赋值

L=200; // 滤波器阶数赋值 Fs=2000; // 采样频率赋值 Ts=1/Ts; // 计算采样时间 timer_flag=0; //定时器状态标志位初始化 Mu=0.01;//收敛因子赋值 TIMER_Start();//启动定时器 while(n_iden 1 <N_iden) { if(timer_flag==1) timer_flag=0; whiteNoise=rand()-0x4000; //生成白噪声信号,取值范围-16384至+16383 Write(pMCBSP0->dxr2, whiteNoise); //发送噪声数据到AIC23B(0)左输出通道

while(!ReadMask(pMCBSP0-> spcr2, SPCR2_XRDY)); //是否准备好接收数据, 若无则等待 temp=Read(pMCBSP0->ddr2); //通过AIC23B(0)左输入通道引脚读取待辨识系统的输出信号 desizedSignal=(float)temp/32768; //对输入信号进行类型转换及归一化得到期望信号 LMS_Filter();//调用LMS自适应滤波程序 n_iden= n_iden+1; } while(1){}; //辨识完成,可取滤波器系数作为待辨识系统的冲击响应

2.自适应滤波子程序 LMS_Filter() {PC55XX_MCSP pMCBSP0=(PC55XX_MCSP)C55XX_MSP0_ADDR; int i; float alpha; for(i=L;i<0;i--) //构造当前时刻参考信号向量 { x[i] = x[i-1]; } x[0]=(float)whiteNoise/32768; //对白噪声信号进行类型转换及归一化得到参考信号 float y=0.0; for(i=0;i<L;i++) //滤波器计算 { y = y + w[i]*x[i]; } ErrorSignal = desizedSignal - y; alpha=Mu*ErrorSignal; for(i=0;i<L;i++) //更新滤波器系数 { w[i]=w[i]+ alpha*x[i]; } }

3.定时器中断服务程序 4. 其它程序 void interrupt Timer() //中断服务程序 { timer_flag=1; } 本例主要代码放在main函数中,定时器中断服务 程序只是设置timer_flag=1,告知主程序新的采样 时间到。 4. 其它程序 限于本书篇幅,其它程序模块不再赘述。

第10章 C55x典型应用系统设计 10.1 典型DSP板的硬件设计 10.2 CPLD电路模块设计 10.3 DSP板测试程序 10.4 综合设计实例1: 自适应系统辨识 10.5 综合设计实例2: 数字式有源抗噪声耳罩

10.5 综合设计实例2:数字式有源抗噪声耳罩 10.5.1 概述 工作原理:利用传声器监测待消除的噪声信号,由控制器进行处理后发出一个与原噪声信号幅度相同、相位相反的反噪声信号,使二者相互抵消,从而达到消除噪声的目的 特点:低频抗噪效果好、重量轻、透气性好、不影响正常通讯等

10.5.2 系统工作原理和控制算法 1. 工作原理 图10-17 有源耳罩(单耳)示意图

S(z)为次级通道,包括反噪声输出通道的数模转换、重构滤波、功率放大器、扬声器,从扬声器Y到误差传声器M2的声通道,以及误差信号通道的传声器、放大、抗混叠滤波、模数转换等环节。 P(z)为初级通道,包括参考噪声信号通道的模数转换、抗混叠滤波、放大、传声器,从参考传声器M1到误差传声器M2的声通道,以及误差信号通道的传声器、放大、抗混叠滤波、模数转换等环节。 W(z)为控制器,通常取有限冲击响应(FIR)结构。 2.控制算法 次级通道S(z) 的模型,需要进行估计或辨识。 为叙述简单起见,本系统采用有源噪声控制中常用的FXLMS算法。 图10-18 FXLMS算法