周六上午-实验三_第1页
周六上午-实验三_第2页
周六上午-实验三_第3页
周六上午-实验三_第4页
周六上午-实验三_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5.7 音频驱动及应用实验一、实验目的掌握熟悉熟悉UDAl341TS 音频工作原理linux 音频驱动程序实现方法编程基本知识二、实验内容介绍音频三、预备知识工作原理和音频器的基本工作原理,剖析音频驱动程序的实现过程。掌握在Linux 集成开发环境中编写和调试程序的基本过程。了解 S3C2410 的 S 四、实验设备及工具硬件:UP-NETARM2410-S于128M。总线结构。实验仪,PC 机Pentumn500 以上, 硬盘 40G 以上,内存大:PC 机操作系统 REDH五、实验原理1、音频驱动硬件体系结构 IIS音频接口INUX 9.0 AMRLINUX 开发环境音频系统设计包括设计和

2、硬件设计两方面,在硬件上使用了基于 IIS 总线的音频系统体系结构。IIS(er-IC Sound bus)又称 I2S,是菲利浦公司串行数字音频总线协议。目前很多音频和MCU 都提供了对 IIS 的支持。图图5.7.1 是UP-NETARM2410-S 音频接线图。接线图5.7.1 UP-NETARM2410-S 音频IIS 总线只处理声音数据。其他信号(如控制信号)必须单独传输。为了使的引出管脚尽可能少,IIS 只使用了四根串行总线。IIS 音频接口总线共有四根线:串行数据输入(IISDI)、串行数据输出(IISDO)、左右声道选择(IISLRCK)和串行位时钟(IISCLK)。由主控设备

3、提供 IISLRCK 和 IISCLK。除了提供 IIS 接口和麦克风扬声器接口,还提供 L3 接口控制音量等。L3UDAl341TS接口分别连到 S3C2410 的 3 个通用数据输出引脚上。IISCON 寄存器的设置和位描述如表5.7.1,5.7.2 所示所示:表 5.7.1 IISCON 寄存器的设置 寄存器 地址 R/W描述 复位值 IISCON0 x01D18000(Li/HW, Li/W, Bi/W)0 x01D18002(Bi/HW)R/WIIS 控制寄存器 0 x100表 5.7.2 IISCON 寄存器的位描述IISCON位 描述 初始化状态左/右声道指示(只读) 8 0 =

4、左声道 1 =右声道 1发送 FIFO 准备好标志(只读)70=FIFO 没准备好(空) 1=FIFO 准备好(非空)0接收 FIFO 准备好标志(只读)60=FIFO 没准备好(满) 1=FIFO 准备好(非满)0发送 DMA 服务请求使能 5 0=请求接收 DMA 服务请求使能 4 0=请求发送声道空闲信号 31=请求使能 01=请求使能 0在闲置状态 IISLRCK 是停止的(暂停 Tx)。只有在 IIS 是主控时这一位才有效。0=产生 IISLRCK 1=不产生 IISLRCK0接收声道空闲信号 2在闲置状态 IISLRCK 是停止的(暂停Rx),只有在 IIS 是主控时这一位才有效。

5、0=产生 IISLRCK 1=不产生 IISLRCK0IIS 比率使能IIS 接口使能1 0 = 比率IIS (开始)1 = 比率使能 00 0=IIS(停止) 1=IIS 使能(开始)0参考:prescaler enable,打开 DMA 服务请求?IISMOD寄存器IISMOD 寄存器的设置和位描述如表 5.7.3 和表 5.7.4 所示。表 5.7.3 IISMOD 寄存器的设置寄存器 地址 R/W描述 复位值IISMOD0 x01D18004(Li/W, Li/HW, Bi/W)0 x01D18006(Bi/HW)R/WIIS 模式寄存器 0 x0Beijing Universal P

6、ioneering Technology Co.,325.: FAX:总机转 828 http博创科技(UP-TECH) )表 5.7.4 IISMOD 寄存器的位描述IISMOD 位 位 描述 初始化状态主/从动模式选择 8 0=主模式(IISLRCK 和 IISCLK 为输出)1=从动模式(IISLRCK 和 IISCLK 为输入)0传送/接收模式选择7:6 00=无转移 01=接收模式 10=传输模式 11=传输和接收模式0082110741 82110742 82110743左/右声道有效电平5 0=左声道低(右声道高) 1=左声道高(右声道低)0串行接口模式 4 0=IIs 兼容格式

7、1=MSB(左)-对齐格式0每通道串行数据位 30 = 8-位1 = 16-位0主时钟频率选择2 0 = 256fs1 = 384fs (fs : 采样频率)0串行位时钟频率选择1:0 00 = 16fs 10 = 4801 = 32fs 11 = N/Afs (fs : 采样频率) 00参考:发送模式,16 位数据,串行位频率为?IISPSR寄存器32fs,主控时钟频率为 384fsIISPSR 寄存器的设置和位描述如表 5.7.5 和表 5.7.6 所示,它的除数因子如表表 5.7.5 IISPSR 寄存器的设置寄存器 地址 R/W描述 复位值IISPSR0 x01D18008(Li/B,

8、 Li/HW, Li/W, Bi/W)0 x01D1800A(Bi/HW)0 x01D1800B(Bi/B)R/WIIS 预比例寄存器(预分频寄存器)0 x0表 5-38 IISPSR 寄存器的位描述IISPSR 位 位 描述 初始化状态预分频系数 A7:4 预分频系数 A 的预分频除数因子一个时钟的预分频系数 A= MCLK/0 x0预分频系数B3:0 预分频系数B 的预分频除数因子一个时钟的预分频系数 B= MCLK/0 x0表 5.7.6 IISPSR 寄存器的除数因子5-39 所示。IISPSR3:0 / 7:4 除数因子0000b 2 1000b 10001b 4 1001b 001

9、0b 6 1010b 3*0011b 8 1011b 0100b 10 1100b 5*0101b 12 1101b 0110b 14 1110b 7*0111b 16 1111b 参考:在本实验中,主要是IISPSR3:0 / 7:4 除数因子44.1kHz(IISLRCK)的 16 位双声道音频,系统时钟为 67.5MHz,采用384fs 模式,所以分频值为4。时钟频率的对照如表5.7.7 所示。表 5.7.7 时钟频率对应表IISLRCK(fs) 8.000KHz 11.02KHz 16.00KHz 22.05KHz 32.000KHz 44.100KHz 48.000KHz 64.00

10、0KHz 88.200KHz 96.000KHz256fs2.048 2.822 4.096 5.645384fs CODECLK (MHz)3.072 4.233 6.144 8.467?IISFCON寄存器8.19211.28912.288 16.38422.579 24.57612.28816.93418.43224.576 33.868 36.864IISFCON 寄存器的设置和位描述如表 5.7.8 和 5.7.9 所示:表 5.7.8 IISFCON 寄存器的设置寄存器 地址 R/W 描述 复位值IISFCON0 x01D1800C(Li/HW, Li/W, Bi/W)0 x01D

11、1800E(Bi/HW)R/WIIS FIFO 接口寄存器 0 x0表 5.7.9 IISFCON 寄存器的位描述IISFCON位传送 FIFO接收 FIFO描述 初始化状态模式选择模式选择11 0=标准10 0=标准模式模式1=DMA模式1=DMA模式00传送 FIFO 使能接收 FIFO 使能1=FIFO 使能 01=FIFO 使能 07:4数据计数值=0 8 0003:0数据计数值=0 8 0009 0=FIFO8 0=FIFO传送 FIFO 数据计数(只读)接收 FIFO 数据计数(只读)参考:DMA 模式,打 FIFO? DMA 数据传输方式DMA(Direct Memory Acs

12、)技术是一种代替微处理器完成器与外部设备或器之间大数据量传送的方法,也称直接器存取方法。知道,在微机系统内,要把外设的数据读到内存或把闪存数据送别外设。一般是通过 CPU 执行一段程序来完成的。但利用DMA 技术则可不用 CPU 介入就能实现外设与内存之间数据的直接传送。一般认为,相对于CPU 执行程序实现外设与不之间的数据传送而言,DMA 直接数传速率要更高,但这点并是 DMA 技术的主要优点。因为相对于 CPU 执行程序的速度来讲,外设数据传输的速率往往是比较慢的,而且目前在一些高档微机系统中,CPU 对内存的读写速率可能还要高于 DMA的传送速率。DMA 的主要优点是当需要把一个外设的大

13、量数据送到指定内存时,它可以自动完成传送任务。也就是说外设发出一个制外DMA 请求,则 DMA 电路暂停CPU 操作,并控设与内存之间进行一次传数,然后再让 CPU 继续执行程序。这样就使 CPU 节省了大量对外设查询时间,从而提高了系统的整体性能。从这点上看,似乎与微机的中断功能有点类似。但实际上,在数据量很大且数传速率较高的情况下,频繁的中断会大大降低系统的执行效率,同时数传速率也不可能高。S3C2410X 有的控制。4 个DMA 控制器,其中 DMA1(数据输入)和 DMA2(数据输出)可用于 IIS通过设置 CPU 的 IISFCON 寄存器可以使存器IIS 接口工作在DMA 模式下。

14、此模式下 FIFO 寄组的控制权掌握在 DMA 控制器上。当 FIFO 满时,由 DMA 控制器对 FIFO 中的数据进行处理。DMA 模式的选择由 IISCON 寄存器的第四和第五位控制。 DCONO 寄存器的设置和位描述如表 5.7.10 和 5.7.11 所示:表 5.7.10 DCONn 寄存器的设置寄存器 地址 读 读/ 写 描述 复位值DCON00 x4B000010R/WDMA 0 控制寄存器 0 x00000000R/W DMA 1 控制寄存器 R/W DMA 2 控制寄存器 R/W DMA 3 控制寄存器DCON1DCON2 DCON30 x4B0000500 x4B0000

15、900 x4B0000D00 x000000000 x000000000 x00000000表 5.7.11 BDCON0 寄存器的位描述 DCONn 位 位 描述 初始化状态 DMD_HS31Select one betn Demand mode and Handshake mode. 0: Demandmode i0ected.1: Handshake mode iected.In both modes, DMA controller starts its transfer and asserts DACK fora given asserted DREQ. The difference

16、betn the two modes iswhether it waits for the deasserted DACK or not.he Handshakemode, DMA controller waits for the deasserted DREQ before starting anew transfer. If it finds the deasserted DREQ, it deasserts DACK andwaits for another asserted DREQ. In contrast,he Demand mode,DMA controller does not

17、 wait until the DREQ is deasserted. It justdeasserts DACK and then starts another transfer if DREQ is asserted.Wesour SYNCmend using Handshake mode for external DMA requestto prevent unended starts of new transfers. 30Select DREQ/DACK synchronization. 0: DREQ and DACK aresynchronized to PCLK (APB cl

18、ock). 1: DREQ and DACK aresynchronized to HCLK (AHB clock). Therefore, for deviattached toAHB system bus, this bis to be set to 1, while for those attached toAPB system, it should be set to 0. For the deviattached to externalsystems, the user should select this bit depending on which the externalsys

19、tem is synchronized with bet029n AHB system and APB system.Enable/Disable theerrupt setting for CURR_TC (terminal count) 0:CURR_TCerrupt is disabled. The user has to view the transfer counthe sus register (i.e. polling). 1:errupt request is generated whenall the transfer is done (i.e. CURR_TC0TSZ28e

20、s 0).Select the transfer size of an atomic transfer (i.e. transferformedeach time DMA owns the bus before releasing the bus). 0: a unittransfer is performed. 1: a burst transfer of length four is performed. 0SERVMODE27Select the service mode bet service mode.00: Single service mode in Single service

21、 mode and Wholeected in which after each atomic transfer(single or burst of length four) DMA stops and waits for another DMArequest. 1: Whole service mode iected in which one request getsatomic transfers to be repeated until the transfer count reaches to 0. Inthis mode, additional request are not re

22、quired. Notet evenheWhole service mode, DMA releases the bus after each atomic transferand then tries to re-get the bus to prevent starving of other bus masters. HWSRCSEL 26:24Select DMA request source for each DMA. 00DCON0: 000:nXDREQ0 001:UART0 010:SDI 011:Timer 100:USBdevice EP1DCON1: 000:nXDREQ1

23、 001:UART1 010:I2SSDI 011:SPI 100:USBdevice EP2DCON2: 000:I2SSDO 001:I2SSDI 010:SDI 011:Timer 100:USB device EP3DCON3: 000:UART2 001:SDI 010:SPI 011:Timer 100:USB device EP4These bits control the 4-1 MUX to select the DMA request source of each DMA. These bits have meanings only if H/W request mode

24、is selected by DCONn23.SWHW_ SE L23Select the DMA source betn software (S/W request mode) andhardware (H/W request mode). 0: S/W request mode iected andDMA is triggered by setting SW_TRIG bit of DMASKTRIG controlregister. 1: DMA souroperation. 0RELOAD22elected by bit26:24 triggers the DMASet the rel

25、oad on/off option. 0: auto reload is performed when a currentvalue of transfer countes 0 (i.e. all the required transfers areperformed). 1: DMA channel (DMA REQ) is turned off when a currentvalue of transfer countes 0. The channel on/oit(DMASKTRIGn1) is set to 0 (DREQ off) to prevent unendedfurther

26、start of new DMA operation. 0DSZ21:20Data size to be transferred. 00 = Byte 01 = Half word 10 = Word 11 =00Beijing Universal Pioneering Technology Co., TC19:0Initial transfer count (or transfer beat). Note.t the actual number ofbytest are transferred is computed by the following equation: DSZ xTSZ x

27、 TC. Where, DSZ, TSZ (1 or 4), and TC represent data size(DCONn21:20), transfer size (DCONn28), and initial transfer count,respectively. This value will be loadedCURR_SRC is 0 and the DMA ACK is 1. 00000o CURR_SRC only if the图图5.7.2 是与菲利浦公司的 UDAl341TS 音频的连接示意图。的连接S3C2410X5.7.2 UDAl341TS 音频在这例)先由并系结构

28、中,为了实现全双工,数据传输使用两个 DMA 通道。数据传输(以回放为总线送到内存,然后传到BDMA 控制器通道 1,再通过 IIS 控制器写入 IIS 总线传输给音频。通道 2 用来。2、音频设备底层设计音频设备驱动程序的主要任务是控制音频数据在硬件中,并为音频应用提供标准接口。由于系统资源有限,且处理器能力不强,所以在音频设备的驱动程序设计中,合理分配系统资源是难点。在三星公司的 ARM部中,IO 设备的寄存器作为内存空间的一分,可以使用普通的内存语句读写 IO 寄存器,进而控制外部设备。这是该系统与传统的基于el 处理器的 PC 最大的不同。?音频设备驱动程序功能:设备驱动程序中需要完成

29、的任务包括:对设备以及对应资源初始化和;应用程序传送给设备文件的数据并回送应用程序请求的数据。这需要在用户空间、内核空间、总线及外设之间传输数据。?驱动程序构架:Linux 驱动程序中将音频设备按功能分成不同类型,每种类型对应不同的驱动程序。UDAl341TS 音频提供如下功能: 数字化音频。这个功能有时被称为 DSP 或 Codec 设备。其功能是实现数字化声音文件或录制声音。在混频器。用来控制各种输入输出的音量大小,在本系统中对应L3 接口。Linux 设备驱动程序将设备看成文件,在驱动程序中将结构file_operations 中的各个VFS 对逻辑文件的操作。数函数指针与驱动程序对应例

30、程函数绑定,以实现虚拟文件系统字音频设备(audio)、混频器(mixer)对应的设备文件分别是devdsp 和devmixer。?设备的初始化和卸载:对devdsp 的驱动设计主要包含:设备的初始化和卸载、内存与 DMA 缓存区的管理、设备无关操作(例程)的实现以及中断处理程序。在设备初始化中对音频设备的相关寄存器初始化,并在设备中使用了两个设备函数 register sound_dsp()和 regiter_sound_mixer()音频设备和混频器设备。这两个 函数在 22 以上版本的内核 driverssoundsound_corec 文件中实现。其作用是设备,得到设备标识,并且实现设

31、备无关操作的绑定。在这些函数里使用的第一个参数都是 struct file_operations 类型的参数。该参数定义了设备无关接口的操作。设备卸载时使用注销函数。注销时用输入时得到的设备号即可。在注销时还必须驱动程序使用的各种系统资源包括 DMA、设备中断等。?DMA缓存区设计和内存管理 : :在音频设备的驱动程序设计中,DMA 缓存区设计和内存管理部分最为复杂。由于音频设备有很高的实时性要求,所以合理地使用内存能加快对音频数据的处理,并减少时延。三星公司的 DMA 控制器没有内置 DMA DMA 缓区域,在驱动程序中必须为音频设备分配存区。这样就能通过 DMA 直接将需要回放或是录制区中

32、。?设备无关操作 : :数据存放在内核的 DMA 缓存设备无关操作对应于 file_operations 指向的各个例程,它让用户用文件的方式设备。对设备的打开和读写是启动程序为用户程序提供的最主要接口,分别对应于 file_operations 中的 open、read 和 write 例程。在 open 例程中需要完成的任务主要是设备初始化,包括:通过设置 IIS 寄存器控制音频设备的初始化,并且初始化设备的工作参数(包括速度、声道、采样宽度);为设备分配 DMA 通道;根据采样参数计算出缓存内段的大小(程序也可以指定缓存内段的大小);当缓存区和 DMA 设置好后,读写操作主要对缓存操作。

33、 对设备的操作除了读写操作外,还有音频中的暂停和继续。这两个操作在 ioctl 接口中实现,通过对相应的 IIS 总线控制器(IISCON 寄存器)操作实现。在对音频操作时还要注意:一次采样得到的数据必须一次处理,否则不能正确3、WAV 音乐格式数据。在 Windwos 环境下,大部分的多 “资源互换文件格式”( resour文件都依循着一种结构来存放信息,这种结构称为erchange file format , 简称 RIFF)。例如声音的 WAV 文件、结构,其基本的AVI 文件等等均是由此结构衍生出来的。RIFF 可以看作是一种树状为 ck ,犹如树状结构中的节点,每个 ck 由“辨别码

34、”、“数据大小”及“数据”所组成。辨别码由 4 个 ASCII 码所,数据大小则标示出紧跟其后数据的长度(为 Byte),而数据大小本身也用掉 4 个 Byte,所以事实上一个 ck 的长度为数据大小加 8。一般而言,ck 本身并不允许再包含ck,但有两种例外,分 k,RIFF 又从原先的“数别为以“RIFF”及“LIST”为辨别码的 ck 。而针对这两种c据”中切出 4 个 Byte。这 4 个 Byte 称为“格式辨别码”,然而 RIFF 又规定文件中仅能有一个以“RIFF”为辨别码的 ck。只要是依循这一结构的文件,均称之为 RIFF 文档。这种结构提供了一种系统化的分类。如果和 MS-

35、DOS 文件系统作比较,“RIFF”ck 就好比是一台硬盘的根目录,其格式辨别码便是此硬盘的逻辑代码(C:或 D:),而“LIST”ck即为其下的子目录,其他的 c提k 则为一般的文件。至于在 RIFF 文件的处理方面,微软供了相关的函数。视窗下的各种多而在该目录下仅能放何种数据。文件格式就如同在磁盘上规定仅能放怎样的目录,WAV 为 waveform(波形)的缩写。声音文件的结构如表 5.7.12 所示,“RIFF”的格式辨别码为“WAVE”。整个文件由两个 c字符!)及“data”。表 5.7.12 WAV 文件结构 “RIFF” “WAVE”“fmt”sizeof(PCMWAVEFORM

36、AT)struct of PCMWAVEFORMAT datawave form datak 所组成:辨别码“fmt ”(注意,最后一个是空白在“fmt”的 ck 下包含了一个PCMWAVE-FORMAT 数据结构,其定义如下:typedef struct pcmwaveformat-tagWAVEFORMAT wf;WORD wBitsPerSPCMWAVEFORMAT;le;typedef struct waveformat-tagWORD wFormat Tag ; WORD nChannels;DWORD nSlesPerSec;DWORD nAvgBytesperSec;WORD n

37、BlockAlign;WAVEFORMAT;其意义分别为:着此声音的格式代号,例如WAVE- FORMAT- PCM,WAVE- FORAM-wFormat Tag等等。nChannels:CM声音的通道数。nSlesPerSec: nAvgBytesPerSec:每秒取样数。每秒的数据量。nBlockAlign:wBitsPerS区块的对齐。le:每个取样所需的位数。“data”C据k 包含着真正数据。Windows 目前仅提供 WAVE- FORMAT- PCM一种数格式,所代表的意义是脉冲编码调制(pulse code modulation)。针对这种格式,Windows定义了在“dat

38、a”的 ck 中数据的存放情形,图 5.7.3 中列出了四种不同通道数及取样所需的位元数以及位元位置的安排。图 5.7.3 PCM 文件中位元安排方式第一排表示单声道 8 位元,第二排表示双声道排8 位元,第三排表示单声道 16 位元,第四表示双声道 16 位元。8 位元代表音量大小由 8 个位元所表示,16 位元则代表音量大小由16 个位元所表示。理论上 8 位元可以表示 0255,16 位元可表示 065535,不过 Windows规定 16 位元其值的范围为-3216832167。此外尚有一点要注意的是,0 并不一定代表无声,而是由中间的数值来决定,也就是在 8 位元时为 128,16

39、位元时为 0 才是无声。所以,若程序设计时需放入无声的数据,需特别注意声音格式是 16 或是 8 位元,以放入适当的值。4、MP3 文件格式? 概述:MP3 文件是由帧(frame)的,帧是 MP3 文件最小的组成。MP3 的全称应为 MPEG1Layer-3 音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像组,MPEG 音频特指活动影音压缩标准,MPEG 音频文件是 MPEG1 标准中层,部分,也叫它根据压缩质量和编码复杂程度划分为三层,即 Layer-1、Layer2、Layer3,且分别对应 MP1、MP2、MP3 这三种声音文件,并根据

40、不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编越复杂,压缩率也越高,MP1 和 MP2 的压缩率分别为 4:1 和 6:1-8:1,而MP3 的压缩率则高达 10:1-12:1,也就是说,一分钟 CD 音质的音乐,压缩需要 10MB 的频信号空间,而经过 MP3 压缩编码后只有 1MB 左右。不过 MP3 对音采用的是有损压缩方式,为了降低声音失真度,MP3 采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的 MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源?整个

41、MP3文件结构:效果。MP3 文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1),如表 5.7.13 所示:表 5.7.13 MP3 文件组成ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了 ID3V1 的信息量。Frame.Frame一系列的帧,个数由文件大小和帧长决定每个 FRAME 的长度可能不固定,也可能固定,由位率 bitrate 决定每个 FRAME 又分为帧头和数据实体两部分帧头了 mp3 的位率,采样率,版本等信息,每个帧之间相互独立ID3V1 包含了作者,作曲,专辑等信息,长度为 128BYTE。? MP3的 FRAME格式:每个节的头FRAME 都有一个帧头 FRAMEHEADER,长度是 4BYTE(32bit),帧头后面可能有两个字 CRC 校验,这两个字节的是否存在决定于 FRAMEHEADER 信息的第 16bit,为 0 则帧后面无校验,为 1 则有校验,校验值长度为就是帧的实体数据了,格式如表 5.7.14:表 5.7.14 FRAME 的格式FRAMEHEADER CRC(free) MAIN_DATA4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论