达芬奇平台DM6446介绍课件

上传人:m**** 文档编号:569443556 上传时间:2024-07-29 格式:PPT 页数:70 大小:4.81MB
返回 下载 相关 举报
达芬奇平台DM6446介绍课件_第1页
第1页 / 共70页
达芬奇平台DM6446介绍课件_第2页
第2页 / 共70页
达芬奇平台DM6446介绍课件_第3页
第3页 / 共70页
达芬奇平台DM6446介绍课件_第4页
第4页 / 共70页
达芬奇平台DM6446介绍课件_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《达芬奇平台DM6446介绍课件》由会员分享,可在线阅读,更多相关《达芬奇平台DM6446介绍课件(70页珍藏版)》请在金锄头文库上搜索。

1、达芬奇平台简要介绍达芬奇平台简要介绍汇报人:马守磊目录v1.DM6446整体结构v2.VPSS视频处理子系统v3.一个简单的视频处理实例v4.软件架构(扩展)Video Processing Subsystem视频处理子系统视频处理子系统TMS320DM644x 处理器处理器 框图框图外设外设后端后端ARM 子系统子系统DSP 子系统子系统视频影像协处理器(VICP)前端前端CCD 控制器控制器视频接口视频接口图像缩放工具图像缩放工具Histogram/3A预览预览屏幕菜单式屏幕菜单式调节调节 (OSD)10b DAC10b DAC10b DAC10b DACEDMAATA/CompactFl

2、ashAsyncEMIF/NAND/SmartMediaMMC/SDWatchdogTimerPWMPWMPWMGeneral-PurposeTimerDDR2Controller(16b/32b)USB2.0PHYVLYNQEMACWithMDIO连接性连接性程序程序/数据存储数据存储SPIUARTUARTUARTI2CAudioSerialPort串行接口串行接口系统系统DM6443ARM926EJ-S 300 MHz CPUC64x+TM DSP 600 MHz Core资源交换中心资源交换中心 (SCR)视频视频编码器编码器 (VENC)/6DM6446系统DSP子系统具有以下特性配置

3、594MHZ的C64x+DSPCPU内核,单时钟周期内能运行8条32位C64x+指令,运算能力达到4752MIPS32KBL1P程序RAM/Cache80KBL1D数据RAM/Cache64KB统一映射L2RAM/Cache数据对齐模式为小端模式ARM子系统包含以下特性ARM926EJ-SRISC处理器ARMvSTEJ(32/16-bit)指令集小端模式CP15协处理器内存管理单元16KB指令cache8KB数据cache支持写入缓冲区32位的16KB内部RAM8KB内部ROM(支持无EMIFA启动选项的ARMbootloader)跟踪宏单元(ETM)和嵌入式跟踪缓冲区(ETB)ARM中断控制

4、器PLL控制器电源与体眠控制器(PSC)系统组件DM6446特点(1)高性能DM6446采用低功耗、高性能的32位C64+内核和ARM内核,工作频率分别达到594MHz和297MHz,具有很强的运算处理能力和事物控制能力。(2)专用的视频处理子系统视频处理子系统包括1个视频前端输入接口和1个视频末端输出接口,视频前端输入接口用于接收外部视频解码器输入的视频数据,视频末端输出接口则可以直接输出DM6446处理后的视频数据到SDTV,LCD,HDTV等显示屏上。(3)大存储容量DM6446支持256MB的32位DDR2SDRAM存储地址空间;支持128MB的16位FLASH存储地址空间;DM644

5、6同时具有ATA控制器,可外接大容量硬盘。DM6446特点(4)众多的外设DM6446具有64通道EDMA控制器;串行端口(3个UART,SPI,ASP);3个64位通用定时器;10/100M以太网卡模块;USB2.0端口;3个PWM端口;多达71个通用I/O口;支持MMC/SD/CF卡等。(5)低功耗、多电源管理模式DM6446双内核电压供给均为1.6V;ARM内核具有16KB指令和8KB数据Cache,C64+DSP内核具有32KB程RAM/Cache.80KB数据RAM/Cache及64MB未定义RAM/Cache;DM6446支持3.3V或1.8V的I/O接口和存储器接口。目录v1.D

6、M6446整体结构v2.VPSS视频处理子系统v3.一个简单的视频处理实例v4.软件架构(扩展)视频采集回放框图TMS320DM6446提供了VPSS视频处理子系统,包括视频处理前端(VPFE)和视频处理后端(VPBE),分别用于外部图像输入设备和视频输出设备。视频处理前端(VPFE)包括CCD摄像头控制器(CCDC),预览引擎,裁放器,支持自动聚焦(Auto-focus、自动白平衡(Autowhitebalance)和自动曝光(Autoexposure)的3A硬件引擎。视频处理后端(VPBE)包括:画中画显示(OSD)和视频编码引擎(VENC)。CMOS或CCD摄像头采集的原始视频图像由视频

7、处理前端进行裁放、直方图均衡、图像优化等预处理,预处理后的视频图像通过OSD模块可以进行字幕和图标的添加,通过视频编码(VENC)可将原始视频信号处理为特定格式的模拟视频数据和数字视频数据。v视频处理前端(VPFE)uCCD控制器从传感器(CMOS或CCD)接收原始图像/视频数据或者从视频解码装置接收YUV格式视频数据。u预览器将从传感器(CMOS或CCD)接收的原始的未处理的图像/视频数据转化成YCbCr422格式的数据。预览器的输出可以用于视频压缩,或者外部显示设备,如NTSC/PAL模拟编码器或数字LCD。u图像缩放装置从硬件实现图像大小的缩放。可以从预览器或者DDR2接收输入的图像/视

8、频数据,输出到DDR2。uH3A模块是提供自动白平衡、自动对焦、自动曝光的控制环路。包含两个主要模块:VENC的模拟/DACs接口有如下特性:自动对焦(AF)引擎装置自动曝光(AE)与自动白平衡(AWB)引擎装置u柱状图模块依靠输入的颜色像素和提供的统计需求来执行不同的3A算法,最后调整最终的图像和视频输出。柱状图模块的数据源一般为CCD/CMOS传感器(通过CCDC模块)或者DDR2.v视频处理后端(VPBE)uOSD模块的主要功能是在硬件上实现图形、字符叠加。同时支持2个视频窗和2个图形、字符(OSD)窗口,支持8种视频窗数据与OSD窗数据混合的方法。图形、字符数据从外部存储器读入,一般为

9、DDR2。OSD通过控制和参数寄存器编程实现其功能。uVENC的模拟/DACs接口有如下特性:l支持480P/576PNTSC/PAL标准模拟视频输出l4-通道10-位D/A输出,可产生各种组合的模拟视频输出复合视频超级视频(S-Video):使用2通道DAC分量视频(YPbPr或RGB):用3-通道D/A复合视频+分量视频:用4-通道D/Al内部产生彩色条(100/75%)uVENC的数字LCD控制器(DLCD)有如下特性:l时钟可编程,最高可达75MHzl支持多种数字视频输出格式16-位YCbCr8-位YCbCrBT.65624-位RGBl用于数字RGB输出的低通滤波器l可编程时序发生器l

10、支持主/从操作方式l内部产生彩色条(100/75%)v视频输入SEED-DVS6446视频输入接口选用了解码芯片TVP5150PBS。它是一款高性能的视频解码器,可将NTSC、PAL视频信号转换成数字色差信号(YUV422),支持两个复合视频或一个S端子输入。不仅如此,TVP5150PBS还具备了封装小(32脚的TQFP)、功耗小(150mV)的特点,因此,非常适用于便携、批量大、高质量和高性能的视频产品。vTVP5150的视频输入 视频解码器TVP5150PSB可以接受2路复合视频信号(CVBS)和1路超级视频信号(S-Video,Y/C)输入。在本系统使用了两片TVP5150PSB,每片只

11、使用了1路的复合信号。输入电路如下图所示: 视频编码器TVP5150PBS 的视频信号输入范围为0.75Vpp,而外部视频信号输入范围一般为1 Vpp,所以外部视频输入与TVP5150PBS 的视频输入之间串接39 和39 到地分压电阻网络,以达到TVP5150PBS 所需的输入电平。在使用前一定要将视频信号输入的范围调整到1 Vpp。vTVP5150的配置TVP5150PBS的配置是通过标准的IIC总线来完成的。TVP5150PBS的IIC标准总线是由串行数据输入/输出线(SDA)和时钟输入/输出线(SCL)组成的。TVP5150PBS只做为从设备,不能做为主设备。IIC总线的数据传送数率高

12、达400Kbits/s。在SEED-DVS6446系统中两片TVP5150PBS的IIC地址分别为0xBA和0xB8。TVP5150的写操作TVP5150的读操作vTVP5150的写操作lDM6446产生一个起始条件;lDM6464发出一个TVP5150的地址(0xBA或0XB8),并标明写操作,等待TVP5150响应;l接收到TVP5150的响应后,DM6446发出要配置的寄存器的地址,等待TVP5150响应;l接收到TVP5150的响应后,发送要配置的数据,等待TVP5150响应;l接收到TVP5150的响应后,发送停止位,结束一次配置。在进行寄存器(0x000x8F)配置时,TVP515

13、0需要一段延时来完成当前的配置,此时TVP5150保持SCL为低,通知DM6446配置尚未完成。在编程时,一般不用查询当前的SCL的状态,而是配置需要的最大延时64us。示例如下:voidtvp5150_init()/TVP5150初始化,设置5150的寄存器DAVINCIEVM_waitusec(1000);tvp5150_rset(0x00,0x00);/配置视频输入源选择寄存器,寄存器地址为0x00,寄存器数据为0x00(选择了符合视频1通道,查看5150的数据手册)InputVideo:CVBS:VI_2_Btvp5150_rset(0x03,0x6d);/查看5150的数据手册,寄存

14、器地址0x03是混杂寄存器,8位寄存器配置数据0x6d每位代表了不同的意思tvp5150_rset(0x09,0x8B);/亮度控制寄存器地址0x09,寄存器值0x8Btvp5150_rset(0x0a,0x80);/色彩饱和度寄存器地址0x0a,寄存器值0x80tvp5150_rset(0x0b,0x00);/色调调节寄存器0x0b,默认值0tvp5150_rset(0x0D,0x07);/输出和数据率选择寄存器YUVoutputformat,Enablingclock&Y/CB/CRinputformattvp5150_rset(0x0F,0x02);/配置复用引脚寄存器tvp5150_r

15、set(0x15,0x05);/同步锁相和实时时钟寄存器tvp5150_rset(0x1B,0x14);/色差控制寄存器DAVINCIEVM_waitusec(1000);/等待1msec的延迟wait1msecvoidtvp5150_rset(Uint8regnum,Uint8regval)/用IIC配置5150寄存器Uint8cmd2;cmd0=regnum;/8-bitRegisterAddress寄存器地址cmd1=regval;/8-bitRegisterData寄存器数据temp=DAVINCIEVM_I2C_write(TVP5150_I2C_ADDR,cmd,2);vTVP51

16、50的读操作当TMS320DM6446要读取当前TVP5150的状态时,需通过IIC总线启动对TVP5150的寄存器的一个读操作。读操作分两部分进行,说明如下:lDM6446向TVP5150写入要读取的寄存器的地址;lDM6446向TVP5150发送读取寄存器数据的命令。v视频输出SEED-DM6446视频输出采用DM6446片内的四路10位的DAC输出,实现CVBS与VGA输出。其中CVBS输出接口使用了1路DAC,VGA输出接口使用了3路的DAC。当配置为VGA输出接口时,还使用了行场同步信号HSYNC和VSYNC。其视频输出连接示意图如下所示。vVPFE寄存器详解1. PCR寄存器寄存器

17、ENABLE:使能CCDC控制器VPFE_PCR=0x00000001;/EnableCCDC,bit1是否busy,bit0enable/如果禁止的话,CCDC会向DSP发送中断,不需要中断需要配置INTC2.SYC_MODE寄存器寄存器vVDHOUT:垂直/水平同步帧信号,1配置为输出,0默认为输入vVDPOL:垂直同步帧极性,1表示低电平有效,默认0为高电平有效vHDPOL:同VDPOL。vEXWEN:外部写使能信号有效,对于BT656不需要配置vFLDMODE:1表示交错扫描,分2场。默认0为逐行扫描。vDATSIZ:8-16bit字节的数据大小,对于BT6568bit直接配为0x07

18、.vPACK8:1表示打包模式,数据都被打包成8位存储在SDRAM,区别与8bit大小,但是占据16bit空间的存储。即一个像素点8位,默认是16位存储(无论是多bit,缺少的补0)vINPMOD:数据输入,默认为原始的数据rawdata。Ycbcr8bit用于BT656。vFLDSTAT:对于隔行采样时,0表示当前是偶数行,1表示为奇数行。vVDHDEN:配置VD/HD为输入模式时,使能内部的时序产生器产生VD/HD信号vWEN:1表示允许CCDrawdata可以写入SDRAM。vVPFE_SYN_MODE=0/0x00032F84;/interlaced,withVDporityasneg

19、ativev|(019)/使能SDRAM端口输出到resizer的输入,0disablev|(018)/使能视频口videoport,输出到SDRAM,0disablev|(117)/数据写使能,控制CCD列数据是否写入DDR,0disablev|(116)/vd/hd使能,如果hd、vd定义为输出,那么内部产生时序,否则外部产生v|(015)/Field状态,表明当前的field状态,0奇场,1偶场v|(014)/3tap低通滤波器,0offv|(212)/INPMOD数据输入模式,0CCDRaw,1YCbCr16bit,2YCbCr8bit,3保留v|(111)/每个象素的包大小,016b

20、it/pixel,18bit/pixelv|(78)/ccd数据宽度,只有INPMOD0(12bit-13bit)时有效v/016bit,115bit,214bit,313bit,412bitv/511bit,610bit,78bitv|(17)/传感器场模式,0逐行扫描,1隔行v|(06)/CCD数据极性v|(05)/外部WEN信号选择,如果VDHDEN1(16bit),设置此位将使CCD数据加载到DDRv/0=不使用v|(04)/场指示器极性,0正极,1负极v|(03)/HD同步极性,0正极,1负极v|(12)/VD同步极性,0正极,1负极v|(01)/场ID方向,0输入,1输出v|(0)

21、;/VD、HD同步方向,0输入,1输出3.HD_VD_WID寄存器寄存器HDW,HDW分别表示有效脉冲电平的宽度。用于VD/HD作为输出模式VPFE_HD_VD_WID=0;/HD,VD信号脉冲宽度寄存器4.HORZ_INFO寄存器寄存器SPH:设置水平像素点从何位置其存储到DDR2中,一般设置为0NPH:设置有效像素点的长度,NPH+1为有效个数VPFE_HORZ_INFO=width1;/Verticallines(14bit-0)/垂直线的线数7. HSIZE_OFF寄存器寄存器LNOFST:每一行在DDR2中的偏移值VPFE_HSIZE_OFF=width1;/Horizontalli

22、neoffset/水平大小,(150)每行的地址偏移,即跳行到DDR2读取数据?8.SDOFST寄存器寄存器FIINV:1表示场的ID反转,比如原来ID=0表示是偶场,置为该位后偶场就是1。奇偶信息在EVA和SAV中FOFST:奇偶场首行直接的偏移,默认+1lineLOFTS(0-3):隔行默认+2line,逐行默认为+1lineVPFE_SDOFST=0/0x00000249;/DDR线偏移|(014)/场标志信号翻转,0正常|(012)/场线偏移,0+1线,1+2线,2+3线,3+4线,|(19)/偶线和偶场的线偏移,0+1,1+2,2+3,3+4,4-1,/5-2,6-3,7-4,|(1

23、6)/奇线和偶场的线偏移,0+1,1+2,2+3,3+4,4-1,/5-2,6-3,7-4,|(13)/偶线和奇场的线偏移,0+1,1+2,2+3,3+4,4-1,/5-2,6-3,7-4,|(10);/奇线和奇场的线偏移,0+1,1+2,2+3,3+4,4-1,/5-2,6-3,7-4,9.SDR_ADDR寄存器寄存器SDR_ADDR:CCD控制器输出到DDR2中的地址10.VDINT寄存器寄存器VDINT0,VDINT1:设置中断计数器。VD启动计数器记录HD出现的个数,如果计数到VDINT0中的设置值,则发生中断。下次只有重新在VD发生的状态下才会重新触发计数器。11.REC656IF寄

24、存器寄存器R656ON:bt656模式使能。12.CCDCFG寄存器寄存器BW656:1表示10bitBT656.默认0为8bit的BT656Y8POS:指定YUV存储顺序,1表示Y位于奇数位置,默认为偶数的位置,即Y在最前。vVPBE寄存器详解OSD_MODE=0/0x000000fc;/osd模式寄存器/最后8位指定背景色地址(ROM0)|(015)/cb/cr顺序,0=cb/cr,1=cr/cb(修改这个1会把背景变红)|(014)/osd窗口垂直扩展使能,如果使能,bitmap窗口/Y值将延伸为6/5。0=*1,1=*6/5|(013)/osd窗口水平扩展使能,如果使能,bitmap窗

25、口/X值将延伸为9/8。可用于pal和ntsc切换|(012)/延伸滤波使能,14、13位使能才有用,或者video串口/smoothing已经设置,小心使用|(011)/video窗口,类似14位|(010)/video窗口,类似13位|(09)/field(场信号)翻转1|(08)/背景颜色表选择,0ROM,1RAM|(0xfd0)/CLUT(colorlook-uptable)背景颜色查找表地址;/这是一部分图象不显示时出现的颜色vOSD_OSDWIN0MD=0|/Disablebothosdwindowsandcursorwindowv(013)|/RGB0ERGB输入还是BITMAP

26、输入v/0=bitmap,1=16bitRGB,如果此位设置,v/*#*那么WINDOW1的该位不能为1*#*v(012)|/CLUTS0,OSDWINDOW0的颜色查找表位置,0=rom,1=RAMv(010)|/OHZ0osd窗口0水平放大倍数(1、2、4)v(08)|/OVZ0osd窗口0垂直放大倍数v(06)|/BMW0bitmap位宽0=1,1=2,2=4,3=8v(03)|/BLND0osd窗口0和video窗口0混合率v(02)|/TE0osd窗口0透明,0=不使能,如果使能,根据v/BLND0出效果v(04OSD_VIDWIN0OFST=width4;OSD_VIDWIN0AD

27、R=buffer;/videowindow0地址寄存器,这里指向DDR,最低5位忽略OSD_VIDWIN0XP=0;/videowindow0X起始坐标实际偏移比此值少一半?/象素单位,从basepx开始算起,20刚好在边上OSD_VIDWIN0YP=20;/此值对NTSC显示有影响,0则无影响OSD_VIDWIN0XL=width;/图象大小OSD_VIDWIN0YL=height1;/videowindow0Y轴(垂直)长度,以象素/行(pixels/lines)为单位/在frame模式,根据line/field来指定值目录v1.DM6446整体结构v2.VPSS视频处理子系统v3.一个简

28、单的视频处理实例v4.软件架构(扩展)Sobel边缘检测tvp5150_init();/TVP5150初始化ntsc_pal_mode=PAL;/NTSC;/自己加的vpfe_init(Uint32)buff1,720,480);/视频前端VPFE初始化SetupFront-Endvpbe_init(Uint32)buff1,720,480,LOOPBACK,ntsc_pal_mode,COMPONENT_OUT);/SetupBack-Endfor(;)Sobel(Uint32)buff1);OSD_VIDWIN0ADR=(Uint32)buff2;voidSobel(Uint32memad

29、dr)ps=(Uint16*)memaddr;ptmp=(Uint16*)buff2;/开辟一个缓冲区for(i=1;i480-1;i+)/第一列、行和最后一列、行不要for(j=1;j720-1;j+).*ptmp=(nPixelMaxEngine_open:打开一个编解码引擎;Engine_close:关闭一个编解码引擎,通常是在删除算法实例后调用之来释放相关资源;Engine_getCpuLoad:获取CPU的使用百分比;Engine_getLastError:获取最后一个失败操作所引发的错误代码;Engine_getUsedMem:获取内存使用状况具体定义引擎所需要包含的头文件和如何定

30、义和使用引擎可参考工程实例example_dsp1.目前我们都是多个解码器共用一个引擎句柄,比如:staticStringengineName=videodec;/*定义引擎名字,ceapp.cfg配置文件中会用到*/Engine_HandleceHandle_264=NULL;/*创建一个264解码器引擎句柄*/Engine_Errorerrorcode;/*用于返回引擎打开的状况信息,不同返回值代表的意义可参考相应头文件*/ceHandle_264=Engine_open(engineName,NULL,&errorcode);创建一个算法实例:*_create()编解码引擎ceHandl

31、e_264创建完毕后,可以通过它来创建自己的算法实例,需要调用*_create(),其中*可以是VIDEO或AUDIO的相应编解码模块的名字,例如:staticStringdecoderName=h264dec;/*定义解码模块名字,用于标识算法名字,ceapp.cfg会用到*/VIDDEC_Handle264Handle;/*创建解码器句柄*/264Handle=VIDDEC_create(ceHandle_264,decoderName,NULL);/*在引擎上分配和初始化解码器,第三个参数可以用来初始化算法的相关参数,这些参数控制着算法的各种行为,参数结构依VISA中编码或解码器的不同而

32、不同,具体结构内容可参考头文件*/关闭一个算法实例:*_delete()VIDDEC_delete(264Handle);/*注意:只有当与算法相关的内存片清除后,才可以调用之删除算法实例*/控制一个算法实例:*_control()VIDDEC_control(264Handle,XDM_SETPARAME,dynamicParamsPtr,&encStatus);第一个参数是已经打开的算法实例句柄;第二个参数是一整型的commandid,它定义在xdm.h中;第三个参数是需要动态改变算法的参数,比如在create中第三个参数已经为解码器初始化了一些参数,在这里可以对之做修改,但修改有条件,其

33、具体结构内容可以参考头文件;第四个参数是一个结构体变量,不同模块具有不同的结构,具体参考头文件。通过算法实例处理数据:*_process()status=VIDDEC_process(264Handle&inBufDesc,&outBufDesc,&inArgs,&outArgs);第二和第三个参数是XDM_BufDesc类型的结构体,其中包含了内存片段的数目和开始地址以及长度信息;第四第五个参数分别为算法实例提供输入和输出地址。我们以ceapp.cfg文件的内容为例说明配置参数的含义:/*-setupOSAL-*/varosalGlobal=xdc.useModule(ti.sdo.ce.o

34、sal.Global);osalGlobal.runtimeEnv=osalGlobal.DSPLINK_LINUX;注:这两句是设置全局的模块使配置脚本生效,然后是设置引擎的运行环境,即需要用的DSP/BIOSLink和LinuxOS)./*-getcodecmodules;i.e.implementationofcodecs-*/varH264DEC=xdc.useModule(codecs.h264dec.H264DEC);注:设置需要用到的编解码器,即我们将要用到给定目录下的H264DEC。注意我们目前使用的都是codec目录下ti提供的videnc_copy,实际上我们可以修改的,另

35、前面我们定义解码器的名字时用的小写的h264dec,这里配置改成大写./*-EngineCofiguation-*/varEngine=xdc.useModule(ti.sdo.ce.Engine);vardemoEngine=Engine.create(videodec,name:h264dec,mod:H264DEC,local:false,/*name:h264enc,mod:H264ENC,local:false.如果有的话*/);注:首先使目录下的引擎可用,然后用create()创建一个引擎。每个引擎都有一个名字,这个名字会被开发人员用到(如打开引擎的时候,前面我们定义的引擎名字是h

36、264dec)。create()的参数是一关于算法描述的数组,每个算法描述包含下面几个字段:name:算法实例的名字,在标识算法时要用到,VIDEC_creat()等VISAAPI的参数,如前面定义264解码器名字h264dec;mod:用来标识实际的算法实现模块,通常就是name的大写,如H264DEC.local:如果为真,算法实例在ARM端实现,否则通过codecserver来创建DSP端的算法实例。demoEngine.server=./encodeCombo.x64P;注:用于指明CodecServer.v虽然达芬奇技术带来了全新的开发平台和研发理念,但是作为一项尚处于发展初期的技术,仍然可能存在一些问题。v首先是视频硬件加速器VICP的使用细节没有公开,只有少数第三方厂商才能了解如何使用视频硬件加速器,因此其他厂商开发Codec的难度就非常大。v另外,由于DSP与ARM双核结构的开发环境非常复杂,目前尚无一个完全集成DSP与ARM调试环境的集成开发环境,因此需要同时进行DSP和ARM软件的跟踪调试,必须运行两个独立的集成开发环境。v另外DSP与ARM之间通信的协议接口也比较繁复。谢谢!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号