DSP课程设计 基于DSP的BIOS模块设计实现.doc

上传人:laozhun 文档编号:2392416 上传时间:2023-02-17 格式:DOC 页数:27 大小:918KB
返回 下载 相关 举报
DSP课程设计 基于DSP的BIOS模块设计实现.doc_第1页
第1页 / 共27页
DSP课程设计 基于DSP的BIOS模块设计实现.doc_第2页
第2页 / 共27页
DSP课程设计 基于DSP的BIOS模块设计实现.doc_第3页
第3页 / 共27页
DSP课程设计 基于DSP的BIOS模块设计实现.doc_第4页
第4页 / 共27页
DSP课程设计 基于DSP的BIOS模块设计实现.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《DSP课程设计 基于DSP的BIOS模块设计实现.doc》由会员分享,可在线阅读,更多相关《DSP课程设计 基于DSP的BIOS模块设计实现.doc(27页珍藏版)》请在三一办公上搜索。

1、 课程设计(论文)任务书 信息工程 学院 通信工程 专业 08 3 班一、课程设计(论文)题目 基于DSP的BIOS模块设计实现 二、课程设计(论文)工作自2011 年6月 27 日起至2011 年7月1 日止。三、课程设计(论文) 地点: 图书馆 、通信实验室(4-403、4-404) 。四、课程设计(论文)内容要求:1本课程设计的目的(1)使学生掌握DSP/BIOS组件的基本工作原理; (2)培养学生基本掌握DSP程序设计的基本思路和方法; (3)使学生掌握DSP系统硬件调试;(4)能提高和挖掘学生对所学习知识的实际应用能力及创新能力;(5)提高学生的科技论文写作能力。 2课程设计的任务及

2、要求1)基本要求:(1)学习DSP/BIOS组件的基本工作原理;(2)熟悉DSP编程软件,熟练掌握DSP/BIOS组件设置;(3)掌握一个完整的DSP/BIOS组件实现语音通信的设计;(4)提出系统软件的设计方案; (5)对所设计软件进行硬件调试即在DSP系统实验箱实现DSP/BIOS组件的语音通信;2)创新要求: 在基本要求达到后,可进行创新设计,如在一个程序中实现DSP/BIOS组件的中断法实现等。3)课程设计论文编写要求(1)要按照书稿的规格打印誊写毕业论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)毕业论文装订按学校的统一要求完成4)答辩与评分标准: (1)完成原

3、理分析:10分;(2)完成设计过程:40分;(3)完成调试:40分;(4)回答问题:10分;5)参考文献:(1) 胡辉 编著. DSP应用技术 教育科学出版社(2) 邹彦 编著 .DSP原理及应用 电子工艺出版社(3) 张雄伟等编著 . DSP集成开发与应用 电子工业出版社(4) (5) 6)课程设计进度安排:内容 天数 地点构思及收集资料 1图书馆编写程序与硬件调试 2实验室撰写论文 2图书馆、实验室学生签名: 2011 年 月 日课程设计(论文)评审意见(1)完成原理分析 (10分):优()、良()、中()、一般()、差(); (2)程序设计分析(40分):优()、良()、中()、一般()

4、、差(); (3)完成调试分析(40分):优()、良()、中()、一般()、差();(4)回答问题 (10分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否()评阅人: 职称: 教授 2011年 月 日目 录绪论1第一章 DSP/BIOS的介绍21.1 DSP/BIOS的系统介绍21.2 DSP/BIOS组件结构31.3 DSP/BIOS实现语音通信5第二章 系统总体设计62.1 芯片介绍62.2系统设计10第三章 系统程序设计123.1 系统程序设计流程图123.2系统程序设计133.3软件程序流程图14第四章 系统调试154.1 CCS设置154.

5、2调试遇到的问题及问题分析18结束语19参考文献20致 谢20附录:源程序21绪 论TI公司的DSP开发软件包括集成开发系统(CCS), 实时操作系统(DSP/BIOS),第三方算法库标准(eXpressDSP)。DSP/BIOS是一个用户可剪裁的实时操作系统,主要由三部分组成:多线程实时内核;实时分析工具;芯片支持库。利用实时操作系统开发程序,可以方便快速的开发复杂的DSP程序。操作系统维护调度多线程的运行,只需将定制的数字信号算法作为一个线程嵌入系统即可;芯片支持库帮助管理外设资源,复杂的外设寄存器初始化可以利用直接图形工具配置;实时分析工具可以帮助分析算法实时运行情况。DSP/BIOS以

6、模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要剪裁。实际应用中需要的定制算法作为一个线程插入DSP/BIOS的调度队列,由DSP/BIOS进行调度。在本次课设中,主要就是应用一个完整的DSP/BIOS组件实现语音通信的设计,在这个设计过程中还要用到芯片AD50,因此在报告中主要分以下几个模块来分析:(1) 详细介绍DSP/BIOS组件的工作原理及其配置过程;(2) 系统的总体设计,包括AD50芯片的结构和工作原理,以及PCB制图,DSP/BIOS和AD50的连接等;(3) 系统的程序设计,基于DSP/BIOS语音通信的程序设计过程;(4) 硬件调试结果

7、,及遇到的问题和问题分析。在整个课程设计过程中我主要负责硬件的调试过程,同时还参与了总体方案的设计过程。第一章 DSP/BIOS的介绍1.1 DSP/BIOS的系统介绍 DSP/BIOS是一个简易的嵌入式操作系统,主要是为需要实时调度,同步以及主机目标系统通讯和实时监测的应用而设计的。DSP/BIOS集成于CCS中,不需要额外的费用,但不提供源码,它是TI公司倡导的eXpressDSP技术的重要组成部分。DSP/BIOS组件由以下3部分组成: 1. DSP/BIOS实时多任务内核与API函数 使用DSP/BIOS开发程序主要就是通过调用DSP/BIOS实时库中的API(应用程序接口)函数来实现

8、的。所有API都提供C语言程序调用接口,只要遵从C语言的调用约定,汇编代码也可以调用DSP/BIOS API。DSP/BIOS API被分为多个模块,根据应用程序模块的配置和使用情况的不同,DSP/BIOS API函数代码长度从500字到6500字不等。CCS FOR C6000 V2。2提供的DSP/BIOS主要的API模块包括以下几种:CLK模块、HST模块、HWI模块、IDL模块、LOG模块、MEM模块、PIP模块、PRD模块、RTDX模块、STS模块、SWI模块、DEC模块、SIO模块、MBX模块、QUE模块与SEM模块。2. DSP/BIOS配置工具 基于DSP/BIOS的程序都需要

9、一个DSP/BIOS的配置文件,其扩展名为.CDB。DSP/BIOS配置工具有一个类似Windows资源管理器的界面,它主要有两个功能:在运行时设置DSP/BIOS库使用的一系列参数; 静态创建被DSP应用程序调用的DSP/BIOS API函数所使用的运行对象,这些对象包括软件中断、任务、周期函数及事件日志等。 3. DSP/BIOS实时分析工具 DSP/BIOS分析工具可以辅助CCS环境实现程序的实时调试,以可视化的方式观察程序的性能,并且不影响应用程序的运行。通过CCS下的DSP/BIOS工具控制面板可以选择多个实时分析工具,包括CPU负荷图、程序模块执行状态图、主机通道控制、信息显示窗口

10、、状态统计窗口等。与传统的调试方法不同的是,程序的实时分析要求在目标处理器上运行监测代码,使DSP/BIOS的API和对象可以自动监测目标处理器,实时采集信息并通过CCS分析工具上传到主机。实时分析包括:程序跟踪、性能监测和文件服务等。1.2 DSP/BIOS组件结构 DSP/BIOS的组件结构如图1.2所示图1.2 DSP/BIOS组件管理器DSP/BIOS主要包括以下组件:1、System(系统配置):对一些关键寄存器的设置,定义目标文件的使用以及系统设置;(1)Global Settings主要的设计属性有:Target Board Name:目标板的名称,往往根据所用DSP的类型自动命

11、名。DSP Type:DSP芯片家族的类型,如C54x.Chip Support Library(CSL):指定具体DSP芯片的类型,如C5402.PMST(6-0):PMST映射寄存器的低七位MP/MC,OVLY,AVIS,DROM,CLKOFF,SMUL和SST.SWWSR:软件等待状态寄存器的值,它控制软件可编程等待状态发生器。BIOS_init初始化时,SWWER,BSCR和CLKMD寄存器将被初始化,之后才调用main函数.BSCR:直译为块开关控制寄存器的值。这个寄存器的功能在于防止访问不同存储区域切换时在总线上发生冲突。(2)MEM(Memory Section Manager)

12、 这是存储区段管理器。在这个项目中用户可以图形化地分配自己的DSP/BIOS程序存储区段的占用情况,DSP/BIOS默认的各存储区段均已列出,用户可以直接通过右键单击后的弹出菜单进行修改。(3)SYS-System Settings2、Instrumentation(分析工具):调试工具有记录器,可以提供针对实时操作优化的调试信息; 这一栏可以称为“示波器”栏,包括两个项目:LOG和STS.(1)LOG组件可以建立LOG模块,这个模块可以调用LOG组件的API函数捕获实时信息,在CCStudio给出的hello程序段就使用了这种方法。(2)STS组件中建立的对象有一个重要属性unit type

13、,通过这个属性可以设定在STS“示波器”中显示的时间轴的时间单位。在C6000中更为方便一些,可以指定时间单位。3、Scheduling(任务调度):包含定时器,硬件、软件中断等;4、Synchronization(任务同步):提供一般操作系统都具有的信号灯、邮箱、队列、锁等四个组件;5、Input/Output(输入输出):提供DSP实时运行时与主机通过仿真口和CCS交互数据的机制;6、Chip Support Library(芯片支持库) CSL组件是DSP/BIOS中的一员,它的主要作用在于为用户提供DSP片上外设的抽象调用方法,针对不同的DSP芯片帮助配置DSP 的外设资源。 CSL与

14、DSP/BIOS一样,是通过专用的API函数使得访问片上外设更加方便。这些API函数按功能不同分为许多个程序包,依次为:CHIP程序包,DAT程序包,DMA程序包,DMA程序包,EBUS程序包,GPIO程序包,HPI程序包,IRQ程序包,MCBSP程序包,PLL程序包,PWR程序包,TIMER程序包和WDTM程序包,分别支持和管理CPU,DMA数据搬移,总线,通用IO口线,HPI,片上外设中断,McBSP口,PLL,掉电工作模式,计时器等片上资源。各个程序的API函数大部分以相应的程序包名加下划线开头,容易识别和掌握。 在程序中调用CSL的方法有两种:一种是通过DSP/BIOS组件管理器,另一

15、种是直接调用CSL库函数。后者要求用户对CSL的各种库函数相当了解,这种方法生成的可执行程序代码要小得多,而第一种方法,即借用DSP/BIOS组件管理器,特别是当用户使用中断时,使用DSP/BIOS更为方便一些。7 API函数API函数是DSP/BIOS的真正灵魂,它是DSP/BIOS提供的一种灵活的用于图形化编程和实时调试的编程内核,以其高度模块化,面向中断的编程方法,节约了CPU的占用时间,为用户进行DSP应用系统设计带来了极大地方便,实现DSP/BIOS的功能是通过调用其相应的API函数来完成的。 1.3 DSP/BIOS实现语音通信 DSP/BIOS是CCS提供的一套工具,是一个尺寸可

16、伸缩的实时内核,它是为了那些需要实时线程调度与同步、主机与目标DSP间通信或者实时监测的应用而设计的。DSP/BIOS提供了抢占式多线程、硬件抽象、实时分析和配置工具。DSP/BIOS工作原理如图1.3所示:音频信号音频信号A/D/AMcBSP1软中断(SWI)串行口硬中断(McBSP1HWI)DXPDXP图1.3 DSP/BIOS实现语音通信中断程序的工作原理通过PHONE2采集数据,先由TLC274前级放大和调理经AD50转换通过同步串行口经CPLD选择MCBSP1与5402连接。经采集后的数据经5402处理后,同样经MCBSP1传回AD50通过TLC274放大后经PHONE1输出。第二章

17、 系统总体设计2.1 芯片介绍 在本次课设过程中主要用到的芯片有DSP芯片5402和AD50,下面就这两块芯片进行介绍: (1)DSP芯片5402 图2.1(a) 5402管脚图 这里用到5402,其晶体振荡器的频率为10MHZ,在接受输入和发送输出的帧同步脉冲为高电平时,并且接收时钟和发送时钟到来,进行数据的接受和发送,芯片主要是对数字信号处理的过程,对信号进行采样,处理和分析。 (2) TLC320AD50C 图2.1(b) AD50管脚图TLC320AD50C集成了 16 位A/ D、D/ A 转换器,采样速率最高可达22. 05kb/ s。在 TLC320AD50C内部DAC之前有插值

18、滤波器, ADC之后有抽样滤波器,接收和发送可同时进行。TLC320AD50C主机时钟信号来源于外部,通过 MCL K引脚输入。帧同步信号从内部产生,由MCL K导出,其频率由控制寄存器4设定。SCL K时钟可以由内部产生也可由外部输入,在内部产生时,其频率为帧同步信号频率的256倍。TLC320AD50C与外界串行通信可以分为首次通信和二次通信。在首次通信中,有两种数据传送模式,16位传送模式和15+1位传送模式,可通过控制寄存器设定。省却情况下为15+1位传送模式。若采用15+1位传送模式,其最低位D0为非数据位,输入DAC数据的D0位为二次通信请求位,输出ADC数据的D0位为M/ S脚的

19、状态位。二次通信只有在发出请求时产生,当首次通信采用15+1位模式时,可以用D0进行二次通信请求;当首次通信采用16位模式时,则必须由FC脚输入信号来产生二次通信请求。二次通信数据格式如图2所示,其中D7D0为控制寄存器数据,D12D8为控制寄存器地址,D13 = 1为读控制寄存器数据,D13 =0对控制寄存器写数据。通过二次通信,可实现TLC320AD50C初始化和修改TLC320AD50C内部控制寄存器。图2.1(c)二次通信数据格式 (3)DSP与AD50的连接 图2.1(d)DSP与AD50的硬件连接2.2系统设计确定设计实现方案器件的选择原理图设计制板与焊接PCB设计硬件调试图2.2

20、 系统设计流程图第一步:方案的确定 硬件的实现方案的确定是在考虑系统性能指标、成本、算法需求、体积和功耗核算等因素的基础上,选择系统的最优硬件实现方案,包括画出硬件系统框图。第二步:器件的选择。一个DSP硬件系统除了DSP芯片外,还包括ADC、DAC、存储器、电源、逻辑控制、通信、人机接口、总线等基本部件。DSP芯片的选择:根据系统对运算量的需求来选择,此次我们选择的的是TMS320VC5402.ADC和DAC的选择:A/D转换器的选择应根据采样频率、精度等来选型。D/A转换器因根据信号频率、精度等来选择。此次我们选择的芯片是TLC320AD50CDW.逻辑控制器件的选择:系统的逻辑控制通常是

21、用可编程逻辑器件来实现。首先我们采用CPLD,芯片型号ALTERA EPM7128SLC84-15。通信器件的选择。通常系统都要求有通信接口。首先要根据系统对通信速率的要求来选择通信方式第三步:原理图设计。第一步和第二步的工作是完成系统的分析,从第三步进入系统的综合,在所有的系统综合工作中,原理图设计是最关键一步,它关系到所设计的DSP系统是否正常工作。因此,在原理图设计阶段必须清楚的了解器件的特性、使用的方法和系统的开发,必须时可对单元电路进行功能仿真。原理图设计包括:系统结构设计,可分为单DSP结构和多DSP结构、并行和串行结构、全DSP结构和DSP/MCU混合结构等;l 模拟数字混合电路

22、设计,主要用来实现DSP与模拟混合产品的无缝连接,包括信号的调整、A/D和D/A转换电路、数据缓冲等;l 存储器的设计,是利用DSP的扩展接口进行数据存储器、程序存储器和I/O空间的配置。在设计时要考虑存储映射地址、存储器容量和存储器速度等;l 通信接口的设计;l 电源和时钟电路的设计;控制电路的设计,包括状态控制、同步控制。第四步:PCB设计。PCB图的设计要求设计人员既要熟悉系统的工作原理,还要清楚布线工艺和系统结构设计。图2.2就是应用protel软件所画出的PCB图图2.2 PCB图设计第五步:制板与焊接这一步主要过程是根据PCB图来制作PCB板,然后再将元器件一一焊在板子。第六步:硬

23、件调试。硬件调试的过程就是将制成的板子与仿真器连接一起进行仿真,看调试结果是否与预期结果一致。第三章 系统程序设计3.1 系统程序设计流程图图3.1(a)系统程序设计流程图 图3.1(b) DSP/BIOS配置图3.2系统程序设计第一步:进入CCStudio集成环境,新建一个工程文件,点击Project/New,进入如下图所示环境,把工程命名为bios_audio即可。第二步:进入DSP/BIOS组件管理器中进行DSP片上资源的设置,并将生成的配置文件加到工程文件中去。点击File/New/DSP/BIOS Configuration第三步:文件和一个空的主程序文件,需要加入DSP/BIOS运

24、行支持库和c语言支持库。第四步:编写主函数,实现所需要的功能,这一步是在上面框架下完善主程序文件,将CPU初始化,将CSL初始化,并使用CSL的API函数完成对串口的读写操作,完成后的工程文件如图所示。3.3软件程序流程图语音通信的DSP/BIOS实现流程 1) DSP初始化完成对系统时钟和状态寄存器等的设置; 2)McBSP初始化完成对McBSP相应寄存器的初始化; 3)调用API函数对AD50初始化 4)通过查询方式,完成对数据的发送和接收。图3.3(a) 程序流程图 图3.3(b) 语音通信的实现流程第四章 系统调试4.1 CCS设置第一步: 先在桌面上打开Setup CCS 2 (C5

25、000)进入下图所示界面,点击右边的“Install a Device Driver”。图4.1 Setup CCS2(C5000)开始界面2. 弹出对话框,在CCS的安装目录中找到drivers找到相应的设备。 图4.2(a) Select Device Driver File 对话框图4.2(b) Device Driver 属性设置3.点击“OK”按钮,会发现在中的框中多了“tixds54X”这个设备,然后点击“Add To System” 出现“Board Properties”对话框。图4.3 Board Properties 对话框4. 在Board下面的下拉菜单中选择第二项“Au

26、to-generate board data file with extra configuratic”,这里“Configuratic File”变成可见,点击“Browse” 图4.4 打开所需文件5.在CCS目录中的bin目录中找到wintech.cfg这个文件,选中打开,然后点击“Next”按钮。出现下面的对话框后,将I/O port 的Value改成0x0。点击“Next” 图4.5 I/O端口设置6.选中”TMS320C5400”点击旁边的“Add Single”按钮,在右边的框中会出现“CPU_1”,点击“Next” 图4.6 添加Single7.在“startup GEL”中点

27、击右边的小按钮 图4.7 startup GEL对话框8.在打开对话框中选择需要的文件。 4.8 选择芯片C54029.点“File”菜单中的“Save”存盘,然后退出,弹出对话点击是,就会启动CCS软件。 编译运行无误后,导入程序,最后点击全速运行,用一根数据线一端插板子的PHONE1端,另外一端接电脑,再用一副耳机插入板子的PHONE2,看是否能够听到电脑里放的歌曲。4.2调试遇到的问题及问题分析(1)当板子上电后,电源指示灯不亮,板子不能够上电。 检查电源的三个角,发现两个接地的管脚虽然是短路的,但是之间还是有压降的,解决方法将两个接地的管脚用一根线焊在一起发现上电后,电源指示灯会亮,并

28、且其他芯片的电压正常,板子可以上电了。(2)按下复位键后,复位指示灯不亮,并且U5的一些管脚电压值不对。 这出现的问题是CPLD芯片没有烧入程序进行,在实验室师兄的帮组下,烧入程序后可以发现复位电路有用,并且复位指示灯也亮了。CPLD芯片的管脚电压值也恢复正常。(3)下载不了程序进去。 这是整个课设中遇到的最大问题,一直没有解决,出现这个问题,我估计原因有以下几点:DSP芯片管脚焊接出现虚焊的问题;DSP芯片有问题,拿过来时就有问题;当用示波器观察晶振产生的波形,可以看到产生的不是正弦波而是有失真,到DSP芯片输出也是一样的结果,但是频率为10MHZ没有问题;(4)借用其他组的板子进行测试时,

29、发现用耳机可以听到嘟嘟的声音,但是听不到由电脑里放出的歌曲的声音。 出现这个问题,第一反应就是某些地方可能接触不良,后来发现是CPLD芯片确实没有接触好,芯片和插槽之间没有接触好,当用手指按住时可以听到歌曲声。结 束 语 这次课程设计主要是基于DSP的BIOS系统模块设计,主要是利用TMS320C54xDSP来实现音频的输入输出,这和语音通信模块的实验结果是一样的,都是在PHONE1输入音频信号,用耳机看能否在PHONE2端能否收到这些音频信号。但是二者最大的不同之处在于:语音通信主要是通过编程来实现的,而DSP/BIOS主要是通过BIOS这么一个操作系统来完成的,可以发现用第二种方法程序明显

30、少了许多,只有一个主函数main(),然后通过调用BIOS里面的函数来实现各种功能,而语音通信主要是通过编写一大堆程序来实现,麻烦而且易出错。一句话,DSP/BIOS帮组完成了各种进程间的管理,主函数main的作用被减弱,甚至可以为空函数,但是不能不要。 虽然在本次课设过程中,虽然我们自己制作的板子没有出结果,但是还是受益匪浅,首先,在整个买元器件,制板的过程中让我认识了很多元器件,也让我见识了许多元器件,比如:贴片LED灯,贴片晶振等,以前只认为有贴片电阻,贴片电容,但是这次让我大开眼界啊。其次,在网上买芯片的过程中,让我发现光知道芯片的形状不一定能够买到自己需要的芯片,因为还需要知道芯片的

31、封装,封装不同,用起来也不相同,另外,型号有一个字母不同,其差别相差万里,不只是价格相差好大,而且用途也非常大,例如在买芯片TPS767D318QPWPRQ1时,一个字母Q就相差很大,有字母Q的是军工专用,而且是耐高温的,没有的则是平常教学用的。最后,在整个课程设计过程中,让我学到的最多的是DSP/BIOS的相关知识,让我对BIOS有了进一步的了解,虽然在上课过程中有提到这方面的知识,但是当时只是有一个大概的影响,通过这次课设让我对这方面的知识有了深刻的了解。参 考 文 献1 邹彦,DSP原理与应用 电子工业出版社 2005年2张勇,CC+语言硬件程序设计:基于TMS320C5000系列DSP

32、 西安电子科技大学出版社 2003年3 4致 谢在本次课设过程中,指导老师胡辉老师给予了我最大的支持,尤其是在调试板子过程中,遇到了许多问题。当时正值是心情最低落的时候,这时胡辉老师过来给我开导,教育我制作板子的过程是一个非常严谨的过程,在其中有一个步骤出现了错误就会出现严重的后果,而且老师还告诉我们制作板子不是一朝一夕的事情,需要耐心地调试,发现错误,解决错误的过程,遇到问题不能够急躁,需要耐心地找出问题的所在。另外,实验室师兄也给予了我很大的帮助,调试过程中遇到问题,师兄能够细心地帮忙找出原因的所在,分析问题。遇到不懂的问题时,师兄能够进行详细地解答,让我倍受感动。同时,在整个课程设计的过

33、程,同学们也给予了我很多帮助,例如在买元器件时就是因为黄建同学提供了很好的厂家,要不然买芯片都需要花费很长的一段时间。同时,在遇到问题时,同组的同学能够积极参与讨论,解决问题,互相支持,互相鼓励,才能够走到今天,要不然真不知道自己能不能坚持下来。所以在这里我要感谢我同组的同学给予我的帮助!附录:源程序main.c#include std.h#include stdarg.h#include bios_audiocfg.hextern MCBSP_Config mcbspCfg1;extern MCBSP_Handle hMcbsp1;int XDat;int RDat;Void main() CSL_init(); CSL_cfgInit(); MCBSP_start(hMcbsp1,MCBSP_XMIT_START|MCBSP_RCV_START,0x300u); while(1) while(!MCBSP_rrdy(hMcbsp1); RDat=MCBSP_read16(hMcbsp1); XDat=RDat; while(!MCBSP_rrdy(hMcbsp1); MCBSP_write16(hMcbsp1,XDat); return;附:原理图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号