半天学会ARM Cortex-M3 课件_第1页
半天学会ARM Cortex-M3 课件_第2页
半天学会ARM Cortex-M3 课件_第3页
半天学会ARM Cortex-M3 课件_第4页
半天学会ARM Cortex-M3 课件_第5页
已阅读5页,还剩253页未读 继续免费阅读

下载本文档

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

文档简介

主题:飓风行动---半天学会ARMCortex-M3

利尔达嵌入式研发中心M3小组2010年12月主题:飓风行动---半天学会ARMCortex-M3一、TIStellarisM3产品总体介绍和未来展望二、TIStellarisM3Tempest系列硬件性能讲解三、StellarisWare软件架构介绍四、基于LSDEV-3S5956开发板的现场动手实验目录一、TIStellarisM3产品总体介绍和未来展望二、一、TIStellarisM3产品总体介绍和未来展望一、TIStellarisM3产品总体介绍和未来展望什么是ARM®Cortex™-M3?Cortex系列ARM处理器在各种特定市场应用中,提供一系列解决方案。

Cortex强调ARM的市场战略围绕特定应用和性能要求技术。ARMCortex系列包含3个系列,都是用Thumb-2指令集,增强了性能以及适应各种市场的成本要求。

ARMCortex-A系列,用于复杂操作系统的应用处理器。支持ARM、Thumb、Thumb-2指令集ARMCortex-R系列实时操作系统的嵌入式处理器支持ARM、Thumb、Thumb-2指令集ARMCortex-M系列嵌入式处理器优化成本仅支持Thumb-2指令集什么是ARM®Cortex™-M3?Cortex系列ARARM®Cortex™-M3特性Cortex-M3为微控制器版本优化的单周期flash快速,准确的中断控制器:6个时钟周期,不多于12个时钟周期单周期硬件乘法器和除法器Thumb2混合16-/32-位指令集—无须模式切换三种睡眠模式降低电源消耗高级调试功能包括数据断点和软件断点自动操作—读/修改/写(单周期指令)1.25DMIPS/MHz—比ARM7和ARM9好ARM®Cortex™-M3特性Cortex-M3为微Cortex™-M3优点为MCU市场而设计能力更胜ARM7:完全不需要汇编比起ARM7的执行Cortex-M3只需要近似½的Flash

在MCU控制应用程序上面快了2-4倍原始中断性能:我们快了85%

PID(进程控制)主循环:我们快了217%乘法加强代码:我们快了294%Cortex™-M3优点为MCU市场而设计能力更胜ARM7ARMCortex-M系列处理器开发满足用户需求从头设计,以满足低功耗,高性能的市场需求ARM7TDMI是一个出色的处理器但是已发展15年,用户期望继续发展ARM7TDMICortexMClass无标准的中断控制器IRQ和FIQ中断太受限制完整的NVIC中断控制器多达240个中断32级中断优先级进入中断服务程序ISRs时间不确定需要20-50个时钟周期H/W堆栈确定中断服务程序时间LSMs(咬尾中断)需要特殊的汇编代码对于所有的中断和启动代码无需汇编代码硬件操作处理软件开发需要互通编译ARM和Thumb指令集时需要软件切换Thumb-2简化开发,无需任何切换应用程序可移植性差没有标准的内存映射和中断控制器已定义有NVIC,SysTick和内存映射集成到内核当中,时代码重用性好ARMCortex-M系列处理器开发满足用户需求ARM7TI微控制器家族TI微控制器家族

2009年5月,TI收购了LuminaryMicro公司.LuminaryMicro公司是ARM的Cortex-M3的架构的主要合作伙伴目前,TI提供的四代的Stellaris的ARMCortex-M3的微控制器Stellaris®系列已经有160多个型号混合信号控制器主要应用在能源、安全应用、通信市场用于运动控制应用,实时通讯(Ethernet,ControllerAreaNetwork,USB),智能模拟功能以及电源转换的独立IP设计强大的群星硬件工具,文档,技术支持和ARM公司第三方支持,让您体验快速、高效、标准化的市场领导解决方案Stellaris处理器

FEB2007JUL2006MAY2006MAR2006JUN2007SEP20072619245185DEC2007104APR2008StellarisFuryClassStellarisSandstormClass128MAR2009138StellarisDustDevilClass167OCT2009StellarisTempestClass2009年5月,TI收购了LuminaryMicStellaris世界级的支持Micriµm编译,仿真工具操作系统协议栈合作伙伴编程器MicriµmStellaris世界级的支持Micriµm编译,操作系统 Over160familymembers 20,25,50,80,and100MHz 8Kto256KFlash 2Kto96KSRAM 48-LQFP 64-LQFP 100-LQFP and108-BGAIndustrial&ExtendedTemperature

Over160familymembersStellaris®各个系列特点LM3S1xxx non-CAN,non-EthernetLM3S2xxx CANLM3S3xxx USBLM3S5xxx CAN+USBLM3S6xxx EthernetLM3S8xxx Ethernet+CANLM3S9xxx Ethernet+CAN+USBStellaris®各个系列特点LM3S1xxx non系列型号

Flash容量 SRAM容量LM3Sx1xx 16KSRAMLM3Sx2xx 32KSRAMLM3Sx3xx 16KSRAMLM3Sx4xx 32KSRAMLM3Sx5xx 64KSRAMLM3Sx6xx 32KSRAMLM3Sx7xx 64KSRAMLM3Sx8xx 32KSRAMLM3Sx9xx 64KSRAMLM3SxBxx 96KSRAMLM3SxDxx 96KSRAM64KFlash96KFlash128KFlash256KFlash512KFlash系列型号 Flash容量 SRAM容量64KFStellaris器件查询工具Stellaris器件查询工具Stellaris微控制器家族Stellaris微控制器家族二、

TIStellarisM3Tempest系列硬件性能讲解二、TIStellarisM3Tempest系列硬件基本外设模块介绍1、电源模块2、调试接口3、时钟模块4、系统定时器5、工作模式6、休眠模块7、GPIO模块8、GPTM模块9、看门狗模块10、PWM模块11、QEI模块12、UART模块13、SSI模块14、ADC模块15、CAN模块16、EPI17、Ethernet模块18、USB模块基本外设模块介绍1、电源模块10、PWM模块Stellaris®电源模块三路输入电源VDDC内核电压1.2VVDD数字电源,3.0-3.6VVDDA模拟电源一路输出电源LDO内部电压调整器1.2VStellaris®电源模块三路输入电源Stellaris®调试接口JTAG行业标准的边界扫描电路内测试在电路Flash编程并行JTAGTAP允许进入到芯片的JTAG边界扫描Cortex-M3的调试的JTAG支持SerialWireDebug/SerialWireTrace(SWD/SWT)一种提供调试访问和两个引脚控制,跟踪信息的引脚的新技术Stellaris®调试接口JTAGStellaris®调试接口如果需要调试,或Flash映像文件已损坏,您可以随时使用的JTAG/SWD接口对Flash下载bin文件。请记住,所有的Stellaris评估工具包可以作为在电路调试接口(ICDIs),这意味着你可以用它对其他板子进行编程/调试,例如IDM。Stellaris®调试接口如果需要调试,或Flash映像Stellaris®时钟特点具体介绍一下这4个时钟源:高精度内部振荡器(PIOSC):内部振荡器是片内时钟源。它不需要使用任何外部元件。内部振荡器的频率是16MHz±1%。不依赖精确时钟源的应用可以使用这个时钟源来降低系统成本。内部振荡器是器件在POR过程中和POR之后使用的时钟源如果需要主振荡器,软件必须在复位后使能主振荡器,并在改变时钟基准前使主振荡器稳定下来。主振荡器OSC:主振荡器用下面的其中一种方法来提供一个频率精确的时钟源:OSC0输入管脚连接一个外部单端时钟源或在OSC0输入和OSC1输出管脚之间连接一个外部晶体。允许的晶体值取决于主振荡器是否用作PLL的时钟参考源。-如果使用PLL,则从3.579545MHz到16.384MHz-如果不使用PLL,则从1MHz到16.384MHzStellaris®时钟特点具体介绍一下这4个时钟源:Stellaris®时钟特点内部30kHz的振荡器OSC:内部30kHz振荡器与内部振荡器类似,它提供30kHz±30%的工作频率。它主要用在深度睡眠的节电模式中。这个节电模式从减少的内部切换中获益,它还允许主振荡器掉电。Hibernation振荡器:外部实时振荡器提供一个低频率、精确的时钟基准。它的目的是给系统提供一个实时时钟源。实时振荡器是休眠模块的一部分,它也提供了一个精确的深度睡眠或休眠模式节电源。可以使用4.194304MHz晶振或者32.768kHz有源晶振。Stellaris®时钟特点内部30kHz的振荡器OSC:Stellaris®时钟模块框图Stellaris®时钟模块框图Stellaris®系统定时器Cortex-M3包含一个集成的系统定时器SysTick。SysTick提供了一种简单的、24位写清零(clear-on-write)、递减的、到零重装(wrap-on-zero)的计数器,该计数器带有灵活的控制机制:RTOS节拍定时器以一个可编程的速率(例如100Hz)运行并调用SysTick程序。使用系统时钟的高速报警定时器。速率可变的报警或信号定时器—时间延迟的范围由使用的参考时钟和计数器的动态范围决定。简单的计数器。软件可使用该计数器来测量完成时间和使用时间。基于错过/满足持续时间的内部时钟源控制。控制和状态寄存器中的COUNTFLAG位字段可用来确定操作是否作为动态时钟管理控制循环的一部分,在设定的持续时间内完成。Stellaris®系统定时器Cortex-M3包含一个Stellaris®工作模式运行模式。运行模式提供了处理器和RCGCn寄存器当前使能的所有外设的正常操作。系统时钟可以是包括PLL在内的任何可用的时钟源。睡眠模式。睡眠模式通过Cortex-M3内核执行一条WFI(等待中断)指令进入。系统中任何适当配置的中断事件将使处理器回到运行模式。在睡眠模式中,Cortex-M3处理器内核和存储器子系统不使用时钟。当自动时钟门控使能时(见RCC寄存器),SCGCn寄存器使能的外设时钟被使用;而当自动时钟门控禁止时,RCGCn寄存器使能的外设时钟被使用。睡眠模式下的系统时钟,其时钟源和频率与运行模式下的相同。Stellaris®工作模式运行模式。运行模式提供了处理Stellaris®工作模式深度睡眠模式。深度睡眠模式通过先写ARMCortex-M3NVIC系统控制寄存器的深度睡眠使能位、再执行一条WFI指令进入。系统中任何适当配置的中断事件将使处理器回到运行模式。Cortex-M3处理器内核和存储器子系统不使用时钟。当自动时钟门控使能时,DCGCn寄存器使能的外设时钟被使用;而当自动时钟门控禁止时,RCGCn寄存器使能的外设时钟被使用。系统的时钟源默认是主振荡器或DSLPCLKCFG寄存器指定的内部振荡器,前提是其中一个时钟源要使能。当使用DSLPCLKCFG寄存器时,内部振荡器上电,如有必要,主振荡器可以掉电。如果PLL在执行WFI指令时运行,则硬件将使PLL掉电,并将有效RCC/RCC2寄存器的SYSDIV域分别替换成/16或/64。当出现深度睡眠退出事件时,硬件会把在深度睡眠阶段被停止的时钟使能之前,将系统时钟恢复为开始进入深度睡眠模式时采用的时钟源和频率。休眠模式。这种模式下,器件主要功能部件的电源关断,只有休眠模块的电路有效。需要一个外部唤醒事件或RTC事件来使器件回到运行模式。Cortex-M3处理器和休眠模块之外的外设看见一个正常的“上电”序列,处理器启动运行代码。通过检查休眠模块寄存器可以确定已经从休眠模式重新启动。Stellaris®工作模式深度睡眠模式。深度睡眠模式通Stellaris®休眠模块特点休眠模块管理微控制器其它功能模块电源的解除和恢复,提供一种降低功耗的方法。当处理器和外设空闲时,电源可以完全解除,只维持休眠模块的供电。电源可以因为一个外部信号而恢复,也可以利用内置实时时钟(RTC),在某个时刻被恢复。休眠模块可单独通过电池或辅助电源提供电源。到个别外部稳压器的电源切换逻辑用作外部信号唤醒的专门管脚低电池检测、发出信号和中断发生32位实时计数器(RTC)2个32位的RTC匹配寄存器,用作定时唤醒和中断产生时钟源来自一个32.768kHz的外部振荡器或一个4.194304MHz的晶体RTC预分频器调整,对时钟速率进行良好地调节64个32位字的非易失性存储器可编程的匹配、外部唤醒和低电池电压事件的中断Stellaris®休眠模块特点休眠模块管理微控制器其它功Stellaris®休眠模块框图Stellaris®休眠模块框图Stellaris®GPIO特点高达33个GPIO(64LQFP),60个GPIO(100LQFP)具体数目取决于配置输入/输出可承受5V每个GPIO均可用于产生中断,可编程为边沿触发或电平检测在读和写操作中通过地址线进行位屏蔽可启动ADC采样序列GPIO端口配置的可编程控制弱上拉或下拉电阻2mA、4mA和8mA端口驱动8-mA驱动的斜率控制开漏使能数字输入使能高达4个GPIO可以驱动输出18mAGPIO配置灵活,基本上每个IO口都有多种功能Stellaris®GPIO特点高达33个GPIO(64LStellaris®GPIO框图Stellaris®GPIO框图Stellaris®GPTM通用定时器3个或4个通用定时器模块(GPTM),每个模块都能提供2个16位的定时器/计数器。每个通用定时器模块都能够被配置为独立运作的定时器或事件计数器:用作单个32位的定时器或用作一个32位的实时时钟(RTC)以捕获事件,或者用作脉宽调制输出(PWM),或触发模数转换32位定时器模式可编程的单次触发定时器可编程的周期定时器当接入32.768-KHz外部时钟输入时可作为实时时钟使用当控制器在调试期间使CPU暂停标志有效时,用户可以在周期和单次触发模式中使能中止(stalling)Stellaris®GPTM通用定时器3个或4个通用定时Stellaris®GPTM框图Stellaris®GPTM框图Stellaris®看门狗特点双看门狗定时器32位递减计数器,可编程重装载寄存器带使能位的独立看门狗时钟可编程中断产生逻辑和中断屏蔽位寄存器锁保护可设置是否使能复位功能可以设置在调试程序时,程序暂停时停止计数Stellaris®看门狗特点双看门狗定时器Stellaris®看门狗框图Stellaris®看门狗框图Stellaris®PWM特点3个PWM信号发生模块,每个模块都带有1个16位计数器、2个比较器,1个PWM信号发生器和1个死区发生器1个16位的计数器运行在递减或递增/递减模式输出频率由一个16位的装载值控制可同步更新装载值当计数器的值到达零或者装载值时产生输出信号2个PWM比较器

比较器值的更新可以同步在匹配的时候产生输出信号PWM信号发生器根据计数器和PWM比较器的输出信号来产生PWM输出信号可产生两个独立的PWM信号Stellaris®PWM特点3个PWM信号发生模块,每个Stellaris®PWM特点PWM比较事件波形减计数模式先递增后递减模式AsymmetricalWaveformSymmetricalWaveformCMPACMPACMPBCMPBStellaris®PWM特点PWM比较事件波形减计数模式Stellaris®PWM框图Stellaris®PWM框图Stellaris®PWM应用StellarisPower,MotorControl,Hall,AnalogStellaris带多路PWM,可以广泛用于电机控制、数字电源等场合。Stellaris®PWM应用StellarisPowerStellaris®QEI特点两个正交编码器接口(QEI)模块。每个QEI模块对正交编码器轮产生的代码进行解码,将它们解释成位置对时间的积分,并确定旋转的方向。另外,它还能够捕获编码器轮运转时的大致速度。每个Stellaris®正交编码器具有以下特性:使用位置积分器来跟踪编码器的位置使用内置定时器来捕获速度QEI在下列事件发生时将产生中断: –检测到索引脉冲 –速度定时器发生计满返回事件 –旋转方向发生改变 –检测到正交错误Stellaris®QEI特点两个正交编码器接口(QEI)Stellaris®QEI框图Stellaris®QEI框图Stellaris®UART特点3个完全可编程的16C550-typeUART,支持IrDA,支持ISO7816智能卡协议带有独立的16×8发送(TX)和16×12接收(RX)FIFO,减轻CPU中断服务负载(loading)可编程的波特率发生器,带有小数分频器可编程设置FIFO长度,包括1字节深度的操作,以提供传统的双缓冲接口。FIFO触发水平可设为1/8、1/4、1/2、3/4和7/8标准异步通信位:起始位、停止位、奇偶位无效起始位检测行中断的发生和检测Stellaris®UART特点3个完全可编程的16C55Stellaris®UART框图Stellaris®UART框图Stellaris®SSI特点主机或从机操作可编程控制的时钟位速率和预分频独立的发送和接收FIFO,16位宽,8位深可编程的接口,与Freescale的SPI接口,MICROWIRE或者TI(TexasInstruments)器件的同步串行接口相连

可编程的数据帧大小,范围为4到16位内部循环测试模式可用于诊断/调试测试Stellaris®SSI特点主机或从机操作Stellaris®SSI框图Stellaris®SSI框图Stellaris®ADC特点8个、16个模拟输入通道单端和差分输入配置内部温度传感器1,000,000次/秒的采样率4个可编程的采样转换序列,入口长度1到8,每个序列均带有相应的转换结果FIFO灵活的触发控制控制器(软件)定时器模拟比较器

PWM

GPIO硬件可对多达64个采样值进行平均计算,以便提高精度Stellaris®ADC特点8个、16个模拟输入通道Stellaris®ADC框图Stellaris®ADC框图Stellaris®CAN特点控制器局域网(CAN)

1、2个CAN控制器 支持CAN协议版本2.0partA/B

传输位速率可达1Mb/s

32个消息对象,每个都带有独立的标识符屏蔽 可屏蔽的中断 可禁止TTCAN的自动重发模式 可编程设定的循环模式用于自检操作Stellaris®CAN特点控制器局域网(CAN)Stellaris®CAN框图Stellaris®CAN框图Stellaris®CAN典型应用LM3S芯片内置CAN控制器,然后通过CAN物理芯片连接到CAN网络上,进一步与其他设备通信。Stellaris®CAN典型应用LM3S芯片内置CAN控Stellaris®EPI特点支持多种设备SDRAM:支持x16(单数据速率)高达50MHz

支持低成本的SDRAM芯片,最大为64MB包括自动更新和访问所有banks/rows包括睡眠/待机模式主机总线接口:传统的8/16位微处理器总线接口功能类似器件兼容操作,如:PIC,ATMega,8051,其他访问SRAM,NORFlash和其他设备,高达24MB的寻址支持地址数据线复用和非复用两种方式访问多种设备,支持无地址FIFO的8位接口变量,支持发送FIFO空和接收FIFO满标志速度控制,读取和写入数据等待状态计数器手动片选(或使用额外的地址引脚)Stellaris®EPI特点支持多种设备Stellaris®EPI特点支持多种类型设备机器到机器:宽并行接口用于快速通信,如CPLDs和FPGAs

数据宽度可达32位,数据速率可达150MByte每秒

可选地址大小从4位到16位

可选时钟输出,读写频率,和时钟使能输入其他特性普通并行GPIO,快速控制的FIFO用于普通外设和数字控制阻塞和非阻塞读取写FIFO和处理器在时间上独立直接内存访问(DMA)Stellaris®EPI特点支持多种类型设备Stellaris®EPI框图Stellaris®EPI框图Stellaris®Ethernet特点

10/100以太网控制器

MAC+PHY,集成PHY层省去外加PHY芯片的麻烦 遵循IEEE802.3-2002规范 遵循IEEE1588-2002精确时间协议(PTP) 在100Mbps和10Mbps速率运作下支持全双工和半双工的操作方式

自动的MDI/MDI-X交叉校验 可编程MAC地址 节能和断电模式例程包中支持Lwip、uip等协议栈的详细例程Stellaris®Ethernet特点10/100以太Stellaris®Ethernet框图Stellaris®Ethernet框图功能描述MII1:1隔离变压器LM3S功能描述MII1:1隔离变压器LM3S数据链路层(MAC)媒体独立接口(MII)发送缓存接收缓存MII管理接口流控制数据链路层(MAC)媒体独立接口(MII)发送缓存接收缓存M网络物理层PHY发送&接口10Base-T曼彻斯特编码100Base-TX4B/5B编码媒体独立接口(MII)发送&接口网络物理层PHY发送&接口10Base-T曼彻斯特编码10以太网连接典型电路优点:集成PHY层,减少PCB走线难度,增加以太网稳定性。

以太网连接典型电路优点:集成PHY层,减少PCB走线难度,增什么是IEEE1588™系统?IEEE1588被称为“网络精确时钟同步协议及控制系统”-或精确时间协议-简称PTPIEEE1588允许在系统组件的时钟同步,以高度的准确性。使用Stellaris很容易实现微秒的精度并且成本低提交小等的特点。如何使用的同步时钟?

在一个IEEE1588系统的时钟通常用来协调系统上执行的主要应用的活动。如果传感器的数据源时间戳。时间标记的数据可能联系后面的相关业务。时钟是用来启动一个或多个组件的行动。执行机构可以改变它的价值,同时时间T1传感器测量值在时间T+Δ被标记当时钟同步的时候,结果立即进行协调。

什么是IEEE1588™系统?IEEE1588被称为可视化的IEEE1588在IEEE1588之前,以太网通信在控制应用中没有确定性:假设Sender发送TURN指令到Controller假设ClockS和ClockC不同步如果Sender告诉Controller收到TURN指令,然而在Controller收到TURN后无返回SenderClockSControllerClockCUh-oh!以太网不确定性TURN(some??timelater)

“Ok!”可视化的IEEE1588在IEEE1588之前,可视化的IEEE158861SenderClockSControllerClockCUh-oh!AlphaonClockSAlphaonClockC.ControllerClockCYes!AlphaonClockS=AlphaonClockC.即使Sender告诉Controller在一个给定的时间alpha接收TURN,这里仍然有一个时间同步问题

但是如果Sender告诉Controller在一个给定的时间alpha接收TURN,然后时钟由一个主机来同步时间,之后Controller返回TURN.“TURNatalpha!”“Ok!IwillTURN

atalpha.”“TURNatalpha!”“Ok!IwillTURN

atalpha.”SenderClockS可视化的IEEE158861SenderContr工业应用的PTPPTP和运动控制变频驱动器需要10个微妙级软件产生5uS44%的应用需要联网,63%使用以太网TCP/IPB私服控制系统需要100个纳秒需要大量的硬件支持36%的应用需要联网,56%使用以太网TCP/IPCStellaris实施开源的lwIP+PTPd:主时钟下500nS,误差+/-500nS应用领域需要高精度的同步级别低速传感器(e.g.压力,温度)普通的电机控制(e.g.继电器,断路器,电磁阀,阀门)一般自动化(e.g.材料处理,化学处理)精密运动控制(e.g.高速包装,印刷,机器人)高速电子设备(e.g.同步相位测量)电子测距(e.g.故障检查,三角)毫秒毫秒毫秒几毫秒毫秒毫秒工业应用的PTPPTP和运动控制应用领域需要高精度的同步Stellaris®USB特点完整的控制与物理层协议(PHY)USB2.0全速(12Mbps)操作可运行于OTG/Host/Device

或者是Host/Device传输:控制传输,中断传输,块传输以及同步传输32个端点 —1对端点用于控制传输,分别为IN/OUT端点 —15对端点可以配置成IN/OUT端点4KB专用端点缓冲区—DMA—一个端点能够被定义成1023字节大小的双缓冲Stellaris®USB特点完整的控制与物理层协议(PHStellaris®USB传输模式1、控制(Control)方式传输:控制传输是双向传输,数据量通常较小。USB系统软件用来主要进行查询、配置和给USB设备发送通用的命令。控制传输方式可以包括8、16、32和64字节的数据,这依赖于设备和传输速度。控制传输典型地用在主计算机和USB外之间的端点(Endpoint)0之间的传输,但是指定供应商的控制传输可能用到其它的端点。2、同步(isochronous)方式传输:同步传输提供了确定的带宽和间隔时间latency)。它被用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传输率的即时应用中例如执行即时通话的网络电话应用时,使用同步传输模式是很好的选择同步数据要求确定的带宽值和确定的最大传输次数。对于同步传输来,说即时的数据传递比完美的精度和数据的完整性更重要一些。Stellaris®USB传输模式1、控制(ControlStellaris®USB传输模式3、中断(interrupt)方式传输:中断方式传输主要用于定时查询设备是否有中断数据要传输。设备的端点模式器的结构决定了它的查询频率,从1到255ms之间。这种传输方式典型的应用在少量的分散的、不可预测数据的传输。键盘、操纵杆和鼠标就属于这一类型。中断方式传输是单向的并且对于host来说只有输入的方式。4、大量(bulk)传输主要应用在数据大量传输传输和接受数据上同时又没有带宽和间隔时间要求的情况下,要求保证传输。打印机和扫描仪属于这种类型。这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传输完成之后再传输和接收数据。Stellaris®USB传输模式3、中断(interruStellaris®USB引脚介绍USB0DM数据差分线D-。USB0DP数据差分线D+。USB0IDOTG模式下用于指示处于主机还是从机模式下。USB0VBUS供USBPHY层检测VBUS电压USB0PFLT输入,作为主机时,指示外部电源错误。USB0EPEN输出,作为主机时,控制外部电源输出Stellaris®USB引脚介绍USB0DM数据差分Stellaris®USBOTG连接图USB作为主机时电源保护芯片,可根据需要添加:

Stellaris®USBOTG连接图USB作为主机时Stellaris®USB框图Stellaris®USB框图休息一下(15分钟)休息一下(15分钟)三、

StellarisWare软件架构介绍三、StellarisWare软件架构介绍串行Flash编程图形用户界面

LMFlashProgrammingGUI简单的图形用户界面支持所有评估板主要功能包括:编程校验擦除读取BIN文件串行Flash编程图形用户界面LMFlashProgFlash编程GUI支持:对评估板

(EVM)直接编程

对通过硬件间接连接的评估板(EVM)编程USBUSB注意:目标板必须先供电评估板可以作为JTAG接口Flash编程GUI支持:对评估板(EVM)直接编程USDriverlib驱动库使用介绍driverlib为一个软件包,帮助我们快速开发LM3S器件。该软件包全部使用C语言编写,可以说我们只需要懂C语言,就能进行嵌入式的开发。ASMC/C++Driverlib驱动库使用介绍driverl外设驱动库(DriverLib)高级API接口快速完成外设配置免费的许可证和不需要版权费用简化和加速应用的开发可以作为目标程序库和源文件支持编译器包括ARM/Keil,IAR,CodeRed,和GNU工具包括Stellaris图形库和StellarisUSB库在有些StellarisMCUs外设驱动库函数被预置到ROM中外设驱动库(DriverLib)高级API接口快速完成外设外设驱动库组织结构“.\StellarisWare”包含硬件相关的头文件(默认)

包含外设相关定义

必要的类型定义

宏定义“.\StellarisWare\driverlib”包含:

‘c’源文件和头文件包含外设特有的功能

为了编译驱动所需的编译器特有工程文件编译器特有的输出目录和文件,即实际每个编译器所需的库文件

C:\StellarisWare\driverlib\ewarm

-IAR

C:\StellarisWare\driverlib\gcc -CodeRed

C:\StellarisWare\driverlib\rvmdk -Keil

C:\StellarisWare\driverlib\sourcerygxx -CodeSourcery

C:\StellarisWare\driverlib\ccs-CodeComposerStudio外设驱动库组织结构“.\StellarisWare”包含Stellaris图形库特点Stellaris图形库是一套免专利费的基本图元和小控件集,能够在基于Stellaris微处理器且带有图形显示器的电路板上创建图形用户界面,图形库由三个功能构建层组成:一、显示驱动层,针对使用的显示屏驱动程序。二、基本图元层,可在能实现无抖动工作的活动显示缓冲或屏外缓冲中绘制点、线、矩形、圆形、字体、位图影像以及文本等。三、控件层,支持复选框、按钮、单选按钮、滑块、列表框以及一种或多种基本图元的通用包络,可在显示屏上绘制用户界面元素,并能根据用户与小控件元素的互动提供应用定义的响应。Stellaris图形库特点Stellaris图形库是一套免图形库使用Stellaris微控制器来设置基本图形元素和部件三层功能函数:显示驱动层基本图形层控件层DisplayDriverLayerGraphicsPrimitivesLayerWidgetLayer应用图形库使用Stellaris微控制器来设置基本图形元素和部件接口选择–并行显示控制器芯片通常支持的并行接口为8/16位6800或8080兼容接口。优点:由于是并行传输,速度快

缺点:资源消耗大,需要较多引脚例子:EK-LM3S3748,DK-LM3S9B96,所有的RDK-IDM板子StellarisMCUGPIOEPIDisplayControllerICCase1:Displayw/integratedcontrollerCase2:Discretecontroller+displayOR接口选择–并行显示控制器芯片通常支持的并行接口为8/16图形库–显示驱动层该图形库可在任何位置显示,任意大小(当然在合理范围内)。唯一的限制是颜色深度,最多24位色的RGB。使用的基本图形结构描述显示,以找出如何对它说话。此结构包含:如宽度显示的基本信息/高度,决定显示方向。如单个像素绘制,多个像素绘制(基本任务函数绘制水平,垂直线),矩形填充颜色,颜色翻译从24位RGB(以显示特定的颜色),并刷新缓存。如果一个显示控制器不支持的图形库,建立一个具有上述功能的驱动程序,将使其能够与图形库使用。图形库–显示驱动层该图形库可在任何位置显示,任意大小(当图形库–基本图形层基本图形:点,线,矩形,圆,字体,图像,文本,缓冲区可用现代计算机的134种预定义的字体高达24位色彩(GraphicsLib提供150种常见的颜色方便引用)该控件库使用基本图形构造部件例如,一个复选框使用长方形,字体和行原语-矩形绘制的容器,绘制的“X”为40,30行,并填入对应的字体和文本这可能使调用基本图形层(例如,制订静态文本或图像),但如果应用程序部件为基础,因此没有必要的。图形库–基本图形层基本图形:图形库–控件层内置图形控件层,包括:画布,复选框,容器,按钮,单选按钮,画框,列表框该按钮和滑块控件的外观,可定制任何图像。该框架还允许小部件,为你定制需要原本不存在的部件.一种实用工具(pnmtoc)在StellarisWare提供帮助的PNM格式转换图像到C的数组,可以链接到应用程序。用户申请定期服务的队列调用WidgetMessageQueueProcess()的部件信息。未经处理的队列,变化不会显示在屏幕上。应用程序代码(部件处理程序,中断服务等),可以通过调用WidgetAdd(...)或WidgetRemove(...)来添加和删除控件,也可以通过使用WidgetMessageQueueAdd(...)来处理邮件。图形库–控件层内置图形控件层,包括:以太网帧结构前导码(7)SFD(1)目标地址(6)源地址(6)长度/类型(2)数据(46-1500)FSC(4)帧时序同步指示帧开始1010.1011目标地址LSB-单个地址0多播地址1源地址字段的值大于1500为类型CRC-32算法14字节以太网帧结构前导码SFD目标地址源地址长度/类型数据FSC帧TCP/IP分层结构链路层网络层运输层应用层物理层数据链路层网络层运输层会话层表示层应用层Iso7层结构TCP/IP5层结构TCP/IP分层结构链路层网络层运输层应用层物理层数据链路层各种协议所在的层应用层:DHCP,DNS,FTP,HTTP,IMAP4,IRC,NNTP,XMPP,POP3,RTP,SIP,SMTP,SNMP,SSH,TELNET,RPC,RTCP,RTSP,TLS(andSSL),SDP,SOAP,GTP,STUN,NTP,etc...传输层:TCP,UDP,DCCP,SCTP,RSVP,ECN,etc...网络层:IP(IPv4,IPv6),OSPF,IS-IS,BGP,IPsec,ARP,RARP,RIP,ICMP,ICMPv6,IGMP,etc...数据链路层:Ethernet,802.11(WLAN),802.16,Wi-Fi,WiMAX,ATM,DTM,Tokenring,FDDI,FrameRelay,GPRS,EVDO,HSPA,HDLC,PPP,PPTP,L2TP,ISDN,ARCnet,LLTD,etc...物理层:Ethernetphysicallayer,Twistedpair,Modems,PLC,SONET/SDH,G.709,Opticalfiber,Coaxialcable,etc...各种协议所在的层应用层:DHCP,DNS,FTP,H各种协议所在的层应用层FTPTELNETRLOGINSMTPDNSHTTPTFTP…传输层TCPUDP…网络层IPICMPIGMP…数据链路层Ethernet/ATM/WirelessARP…物理层TwistedpairOpticalfiber…各种协议所在的层应用层FTPTELNETRLOGINSMTPLwIP&uIP协议栈由AdamDunkels开发LwIP比uIP完整uIP比LwIP更精小TI提供以上的两个开源协议栈的移植范例。LwIP&uIP协议栈由AdamDunkels开发Eth应用例程Quick-Start使用lwIPTCP/IP协议栈作为DHCP客户端,即动态获取IP地址基本web服务器网页Web服务器游戏使用Java技术展示简单的web控制Eth应用例程Quick-StartEth应用例程ENET_IOWeb服务器基本IO控制使用lwIPTCP/IP协议栈作为DHCP客户端展示两种web控制技术HTTP请求CGI/SSIHTTPDEth应用例程ENET_IOEth应用例程ENET_lwIP使用lwIPTCP/IP协议栈作为DHCP客户端服务器网页有两种来源SD卡检查SD卡是否存在从SD卡中读取服务器网页片内flash中片内flash中存在web服务器网页Eth应用例程ENET_lwIPEth应用例程ENET_uIP使用uIPTCP/IP协议栈DHCP获取IP地址静态网页Eth应用例程ENET_uIPUSB标准标准USB1.1

定义为主机(host)或者从机(device)

速度可达12Mbits/sec最大输出电流500mA(启动最大100mA)USB2.0速度高达480Mbits/sec

增加OTG模式USB3.0速度高达4.8Gbits/sec

新型的连接器

独立收发线USB标准标准USB协议的层次物理层: USB总线接口,发送和接收数据包。中间层

是底层数据接口和USB设备端点之间的路由。负责传输数据到USB端点上。应用层

提供USB设备类,比如鼠标、大容量存储器等。USB协议的层次物理层:USB协议物理层连接类型USB比特率USB高速比特率为480Mb/sUSB全速比特率为12Mb/sUSB低速比特率为1.5Mb/s四线+ID线USB2.0USB信号USB协议物理层连接类型USB协议中间层USB模式:USBDevice大部分的USB产品是从机。USBHost通过用于PC机,嵌入式处理器也可以做。USBOTGOn-The-Go单个端口可以用作主机或从机,根据ID线的状态区分(就是说根据连接线区分)。USB端点:

IN,OUT控制、同步、批量、中断USB类每种类对应于某一种产品。比如鼠标等。USB描述符EndPoints(EP)HostcontrollerUSB设备逻辑通道RxTxRxUSB协议中间层USB模式:EndPoints(EP)USB设备描述符

给出了设备的版本信息、PID、VID等。一个USB设备可以有一个或者多个配置描述符。每个配置描述符可以有一个或多个接口,每个接口可以有多个端点。设备描述符

厂商ID、产品ID支持的设备类

配置描述符最大功耗接口数接口描述符端点数USB类代码端点描述符(传输模式、速度)端点地址传输类型最大数据包大小USB设备描述符 给出了设备的版本信息、PID、VID等。USB协议中间层—数据流枚举过程:

在设备上电的时候,主机轮询每个设备,并获取设备的信息(描述符),包括以下:

设备描述符(厂商ID、产品ID,用于帮助主机查找驱动)

配置描述符(功耗和接口描述符)

端点描述符(传输类型和速度)握手、数据USB协议中间层—数据流枚举过程:USB协议中间层—数据包USB协议中间层—数据包USB协议顶层端点EP逻辑通道RxTxRx物理层USB协议顶层端点EP逻辑通道RxTxRx物理层USBVID授权VID:定义一个USB设备生产厂商。PID:给定VID下不同的产品。每个USB设备都需要VID每个VID代表一个公司。可以使用TI的VID,并向TI申请一个指定的PID。USBVID授权VID:定义一个USB设备生产厂商。Stellaris解决方案设备API函数

(鼠标,键盘,文件系统)USB设备类驱动API函数(HID、大容量存储器)USB主机控制器API函数USB硬件驱动库Stellaris解决方案设备API函数(鼠标,键盘,USB驱动库综合子集的USB功能简化嵌入式USB控制提供给客户免费的应用软件,使用StellarisMCUs来快速开发USB.可获得的例程:从机例子:HID键盘HID鼠标CDC虚拟串口大容量存储器(如U盘)普通批传输(bulk)音频设备设备固件更新示波器主机例子:大容量存储器HID键盘HID鼠标OTG例子:SRP(检测请求协议)HNP(主机协商协议)USB-IF认证StellarisMCUs已经通过USB从机和嵌入式主机认证测试TI许可StellarisVID&PIDs给客户使用WindowsINF支持类Windowsdrivers基础驱动程序设定配置字符串设定PID/VID预编译的DLL缩短开发时间USBLib提供设备程序框架USB驱动库综合子集的USB功能简化嵌入式USB控制WindUSBDevice例程Audio将开发板作为一个USB音频类设备16为立体声、48KHz采样速率、耳机音量控制使用的是同步传输模式HIDKeyboard将开发板作为一个键盘可以输出字符、支持USB远程唤醒使用的HID,人机接口类HIDMouse将开发板作为一个鼠标可以发送x、y坐标值,按钮状态展示HID人机接口类MSD展示了大容量存储器类,将开发板作为一个U盘显示当前可以进行的操作

读、写、空闲、无媒体、断开连接使用SD卡作为媒体介质支持FAT文件系统Serial展示了CDC类,将开发板作为一个虚拟串口需要Windows‘.inf’fileUSBDevice例程AudioUSBHost例程Mouse展示支持USB鼠标显示鼠标数据:连接状态按键状态光标Keyboard展示支持USB键盘显示键盘数据:显示CAP状态在屏幕上输出按键MassStorage展示支持大容量存储器USBHost例程Mouse四、基于LSDEV-3S5956开发板的现场动手实验四、基于LSDEV-3S5956开发板的现场动手实验LM3S5956开发板特点32位ARM®CortexTM-M3v7M架构,工作频率为80MHz,36个中断,具有8个优先级USB2.0全速OTG端口,可以设置成Host/Device/OTG内置256KB大容量单周期Flash高达64KB单周期访问的SRAM最高工作频率可达80MHZ集成板载仿真器,使用FT2232和CPLD芯片LC4032,可对主芯片实时仿真,并且提供对一个外部芯片仿真接口集成一个虚拟串口(通过FT2232)1个CAN2.0A/B控制器ROM中内置StellarisWareLM3S5956开发板特点32位ARM®CortexTM-LM3S5956开发板实物图供电仿真USB接口FTDI虚拟串口EEPROM,供FTDI存储数据CPLD,用于仿真调试M3CPLD烧写程序JTAG口4个用户LED灯LM3S5956主芯片Reset按键引出接口3.3VLDO自锁按键,用于切换USB总线供电用户按键S1用户按键S2OTGUSB接口LM3S5956开发板实物图供电仿真USB接口FTDI虚拟串LM3S5956开发板系统框图LM3S5956开发板系统框图开发板自锁按键首先需要说明的是,本开发板设置了一个自锁按键,这个自锁按键用于切换系统供电和总线供电,就是说在按键松开的状态时,开发板通过供电、仿真USB接口P6供电,此时系统可以用于USB从机、USB主机(可以对外部供电),如果这个按键处于按下状态时,此时系统通过OTG接口P7供电,只能当做从机,不能用于做主机。这里使用时需要将自锁按键处于松开状态。自锁按键开发板自锁按键首先需要说明的是,本开发板设置了开发环境搭建(实验不是必须)首先当然是要安装开发环境,因为我们这里的例程均是Keil的工程,因此我们就应该首先安装Keil,具体安装文件在Tools\使用工具_V1.0\Keil-MDK-V4.03目录下,具体安装使用方法详见DOC目录下的《Keil4.02实验指导书》,当然,我们也可以使用IAR编译。以上版本的Keil是30天限制版的。注意:当然我们开发板出厂程序已经包含以下的三个实验,因此可以不用下载,直接进入实验。出厂程序为Code\LSDEV-3S5956-V1.0\LSDEV-3S5956-V1.0\test开发环境搭建(实验不是必须)首先当然是要安装开发环境,因为我实验一、GPIO闪灯程序单独GPIO例程所在目录:\LSDEV-3S5956-V1.0光盘\Code\LSDEV-3S5956-V1.0\LSDEV-3S5956-V1.0\gpio_blinky此时可以看到LED1闪烁。以下具体介绍这个闪灯程序:

程序使用的端口为PB4(LED1)注意:当然我们开发板出厂程序已经包含以下的三个实验,因此可以不用下载,直接进入实验。出厂程序为Code\LSDEV-3S5956-V1.0\LSDEV-3S5956-V1.0\test实验一、GPIO闪灯程序单独GPIO例程所在目录:\LSD初始化和配置//配置系统主时钟,使用外部晶振16MSysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);//使能端口PB,然后配置PB.4为输出SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_4);初始化和配置//配置系统主时钟,使用外部晶振16M相关API函数介绍系统时钟设定,SysCtlClockSet(unsignedlongulConfig),例如:

SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);这条语句用于设定系统使用外部16MHZ晶振作为系统时钟,不使能PLL,系统分频为1分频,那就是说系统时钟为16MHZ。如果想要开启PLL,则可以使用以下语句:SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);这条语句用于设定系统使用外部晶振16MHZ作为PLL输入,然后PLL输出4分频后作为系统时钟,由于PLL输出为200MHZ,因此系统时钟为50MHZ。相关API函数介绍系统时钟设定,SysCtlClockSet相关API函数介绍使能GPIO,通常Stellaris系列ARM所有片内外设只有在使能以后才可以工作,否则被禁止。暂时不用的片内外设被禁止后可以节省功耗。GPIO也不例外,复位时所有GPIO模块都被禁止,在使用GPIO模块之前必须首先要使能。例如: SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//使能GPIOB模块配置GPIO为输入、输出、特殊功能。例如:

//配置端口PB4为输出端口

GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_4);相关API函数介绍使能GPIO,通常Stellaris系列驱动LED的闪烁

//驱动LED的闪烁

while(1){//置PB.4为高电平

GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_4,GPIO_PIN_4);//延时500ms

SysCtlDelay(500*(SysCtlClockGet()/3000));

//置PB.4为低电平

GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_4,0);//延时500ms

SysCtlDelay(500*(SysCtlClockGet()/3000));

}驱动LED的闪烁//驱动LED的闪烁相关API函数介绍GPIO端口读写函数,对GPIO管脚的读写操作是通过函数

GPIOPinWrite()和

GPIOPinRead()实现的,这是两非常重要而且很常用的库函数。GPIOPinWrite()函数向所选GPIO端口的指定管脚写入一个值,以更新管脚状态。GPIOPinRead()函数读取所选GPIO端口指定管脚的值。比如:

GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_4,GPIO_PIN_4);

这条语句用于设定端口输出,这里是设定端口PB4,然后最后一个参数用于设定输出高电平、还是低电平。如果是端口号,则设定为高电平,如果是0,则设定为低电平。相关API函数介绍GPIO端口读写函数,对GPIO管脚的读写实验二、UART回发程序单独UART例程所在目录:\LSDEV-3S5956-V1.0光盘\Code\LSDEV-3S5956-V1.0\LSDEV-3S5956-V1.0\uart_int_echoUART回发:然后打开Tools\使用工具_V1.0\串口通讯助手目录下的sscom32.exe,选择FTDI产生的虚拟串口,这个之前在安装驱动的时候讲过,设定波特率为115200,数据位为8,停止位为1,校验无,这时我们在字符输入框中输入字符串并发送,开发板接收到数据后会发回,因此可以在串口调试助手中的接收区可以看到接收到发送的数据。实验二、UART回发程序单独UART例程所在目录:\LSD初始化和配置//配置系统主时钟,使用外部晶振16M

SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);//使能Uart引脚,(PA0、PA1)

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA

//配置引脚为Rx、Tx功能

GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);//使能Uart时钟

SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);初始化和配置//配置系统主时钟,使用外部晶振16初始化和配置//配置uart0的参数115200,8位,1个停止位,无校验

UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),115200,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));//使能接收中断和接受超时中断

UARTIntEnable(UART0_BASE,UART_INT_RT|UART_INT_RX);//启动UartUARTEnable(UART0_BASE);//使能Uart中断

IntEnable(INT_UART0);初始化和配置//配置uart0的参数115200,相关API函数介绍

UARTConfigSetExpClk()用来对UART端口的波特率、数据格式进行配置voidUARTConfigSetExpClk(unsignedlongulBase,unsignedlongulUARTClk,unsignedlongulBaud,unsignedlongulConfig)ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE

ulUARTClk:提供给UART模块的时钟速率,即系统时钟频率ulBaud:期望设定的波特率ulConfig:UART端口的数据格式,取下列各组数值之间的“或运算”组合形式。UARTEnable()使能指定UART端口的发送和接收操作voidUARTEnable(unsignedlongulBase)相关API函数介绍UARTConfigSetExpClk(相关API函数介绍

UARTIntEnable()使能指定UART端口的一个或多个中断voidUARTIntEnable(unsignedlongulBase,unsignedlongulIntFlags)UARTIntClear()清除指定UART端口的一个或多个中断voidUARTIntClear(unsignedlongulBase,unsignedlongulIntFlags)ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或

UART2_BASE

ulIntFlags:指定的中断源,应当取下列值之一或者它们之间的任意“或运算”组合形式:相关API函数介绍UARTIntEnable()使能指定UART中断收发voidfn_uart0_interrupt(void){//清除中断标志

UARTIntClear(UART0_BASE,UART_INT_RT|UART_INT_RX);

//如果接收到数据就将数据发回

if(UARTCharsAvail(UART0_BASE)){//无阻塞发送 UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE));}}UART中断收发voidfn_uart0_interrup相关API函数介绍函数UARTCharPutNonBlocking()以“无阻塞”的形式发送数据,即不去探测发送FIFO里是否有可用空位。如果有空位则放入数据并立即返回,否则立即返回false表示发送失败。因此调用该函数时不会出现任何等待。UARTCharNonBlockingPut()是其等价的宏形式。函数UARTCharGetNonBlocking()以“无阻塞”的形式接收数据,即不去探测接收FIFO里是否有接收到的数据。如果有数据则读取并立即返回,否则立即返回-1表示接收失败。因此调用该函数时不会出现任何等待。UARTCharNonBlockingGet()是其等价的宏形式。相关API函数介绍函数UARTCharPutNonBlock实验三、US

温馨提示

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

评论

0/150

提交评论