Jacktang

  • 2020-08-13
  • 发表了主题帖: Qorvo宽带接入 CATV 和 FTTH 产品选型指南

        Qorvo 为高要求的混合式光纤同轴 (HFC) 和宽带应用提供领先技术和全面的产品解决方案。Qorvo 的宽带产品组合包括采用业界标准 SOT115J 封装和多芯片模块 (MCMs) 的高功率放大器,低功率 MMICs 和控制产品。这些产品专为 HFC 头端,CMTS,光纤节点以及支持 DOCSIS® 标准的分布式架构而设计,可采用各种不同的配置,如深度光纤,节点分裂,远程 PHY,全双工以及扩展频谱 DOCSIS。此外,Qorvo 还提供适用于 FTTx 和 xPON 系统解决方案的产品,以及互阻抗放大器和完整的光学模块。 高输出混合模块和多芯片模块         4 端口光纤节点,RF 发射放大器:有线电视             中低功率 MMICs     8 端口 MoCA 掉电放大器:有线电视       4 端口光纤节点,提供反馈功能,用于 DPD 和 4 个 SPST 开关           控制产品       适合 RFoG 或 XPON 应用的光纤视频接收器光纤到户         光网络       光纤参考设计         变压器和保护             下行高功率 (40-67 dBmV)             上行放大器           下行 MMIC             氮化镓创新     过去 15 年来,Qorvo 一直推动支持下一代系统的氮化镓 (GaN) 产品和技术的创新与开发。Qorvo 不仅可以助您实现世界级的电气性能,作为具有业界领先 GaN 可靠性的“可信赖”供应商,也会让我们的合作伙伴受益无穷。Qorvo 还是唯一一家达到制造成熟度 (MRL) 10 级的 GaN 供应商。   Qorvo GaN 的主要特性: 现场 16,900 器件上达到超过 6,500 万器件-小时数,每 100 万小时的故障率不到 0.013% 从直流到 Ka 频段的应用 高功率密度 高结温条件下经过实践证明的可靠性,200 °C 下的平均故障时间 (MTTF) 为 107 (1,000 万) 至 109 (10 亿) 小时, 在 225 °C 下为 106 (100 万) 至 108 (1 亿) 小时         Qorvo 有线电视产品封装指南    

  • 发表了主题帖: 802.11ax有关的无线技术

        802.11ax,也称为高效无线网络(High-Efficiency Wireless - HEW),通过一系列系统特性和多种机制增加系统容量,通过更好的一致覆盖和减少空口介质拥塞来改善Wi-Fi网络的工作方式,使用户获得最佳体验;尤其在密集用户环境中,为更多的用户提供一致和可靠的数据吞吐量,其目标是将用户的平均吞吐量提高至少4倍。也就是说基于802.11ax的Wi-Fi网络意味着前所未有的高容量和高效率。   802.11ax技术构成     ▲802.11ax技术构成模块示意图   802.11ax标准在物理层导入了多项大幅变更。然而,它依旧可向下兼容于802.11a/b/g/n与ac设备。正因如此,802.11ax STA能与旧有STA进行数据传送和接收,旧有客户端也能解调和译码802.11ax封包表头 (虽然不是整个802.11ax封包),并于802.11ax STA传输期间进行轮询。下图显示此标准修正最重要的变更以及与现行802.11n和802.11ac的对照。   ▲802.11n、802.11ac和802.11ax的关键PHY比较   关键技术解析   以下是在802.11ax当中使用到的关键技术   · OFDMA   · MU-MIMO   · 1024-QAM   · Spatial Reuse   · BBS Coloring   OFDMA(正交频分复用多址接入)   OFDMA是通过将子载波子集分配给不同用户在OFDM系统中添加多址的方法。迄今为止,它已被许多无线技术采用,例如3GPP LTE。 802.11ax是第一个将OFDMA引入WLAN网络的WLAN标准。此外,802.11ax标准也仿效LTE专有名词,将最小的子信道称为“资源单位(RU)”,每个RU当中至少包含26个子载波。   OFDMA允许同时提供具有不同带宽需求的多个用户,从而有效利用可用频谱。子载波被分成若干组,每组表示为具有最小尺寸为26个子载波(2MHz宽)和最大尺寸为996个子载波(77.8MHz宽)的资源单元(RU)。在用于传统WLAN技术的OFDM中,总信道带宽(例如,20MHz,40MHz等......)用于任何一帧传输。但是在用于802.11ax 的OFDMA中,使用的子载波可以分配为小到2 MHz的块或最大带宽的传输。因此,可以针对不同类型的流量(例如即时消息(IM)与视频流)来扩展资源。 OFDM和OFDMA之间的区别如下图所示。   ▲OFDM与OFDMA对比   有如下几种子载波类型:   · 数据子载波,用于数据传输;   · 导频子载波,用于相位信息和参数跟踪;   · 未使用的子载波,不用于数据/导频传输,未使用的子载波是DC子载波;   · 保护频带子载波,在频带边缘;   · 空子载波。   形成RU的子载波是连续的,除了在带的中间,其中空值被放置在DC处。   OFDMA结构由26子载波RU,52子载波RU,106子载波RU,242子载波RU,484子载波RU和996子载波RU组成。下图中显示了最大RU数,RU位置取决于信道带宽。     ▲不同频宽的RU总数   下图显示了用于80MHz信道带宽的26,52,106,242,484和996个子载波RU位置。 用户只能分配给一个RU,RU大小≥106可以分配给多个用户。     ▲RU在80MHz中的位置示意图   MU-MIMO(多用户多入多出)   MU-MIMO相信大家都不陌生,在802.11ac时,引入了DL MU-MIMO,但遇到了以下问题:   · 许多客户端设备是单天线,并且许多两个天线客户端切换到用于DL MU-MIMO的单流模式以防止干扰:   使用4个天线AP,与单个用户相比的增益是适度的;   即使构建了8个天线AP,分组也限制为4个用户;   · 来自用户的信道探测响应在时间上连续发送,导致高开销;   · 在没有UL MU增强的情况下,在上行链路上具有TCP ACK的TCP/IP受到削弱;   · UL MU-MIMO最初在11ac中被考虑,但由于实施问题而未包括在内。   802.11ax MU-MIMO的增强功能如下:   · 支持UL MU-MIMO:   · 探测帧、数据帧等可以在多个用户之间分组,以减少开销并增加上行链路响应时间;   · 对于DL和UL,扩展到八个用户:   · 现在,即使设备处于单流模式,MU-MIMO吞吐量也可以在单用户操作中增加一倍或三倍。   802.11ac标准引入了4x4下行链路MU-MIMO,其中AP同时向多达四个STA发送独立数据流。 802.11ax将下行链路MU-MIMO支持的最大用户数扩展到8个。它还增加了对8x8上行链路MU-MIMO的支持,允许多达8个STA通过相同的频率资源同时传输到单个AP。结果是,与802.11ac相比,下行链路容量增加了2倍,上行链路容量增加了8倍。     ▲802.11ax MU-MIMO的特性   MU MIMO和OFDMA技术可以同时使用。为了启用上行链路MU传输,AP发送称为触发帧的新控制帧,其包含用于STA的RU分配调度信息,用于基于触发的PPDU中每个STA的编码类型和调制与编码方案(MCS)。另外,触发帧为上行链路传输提供同步。   由于多个发射机参与UL MU-MIMO传输,因此它需要参与STA的时间、频率、采样时钟和功率预校正,以减轻AP处的同步相关问题。   多用户上链作业   在802.11ax中,MU-MIMO和OFDMA技术可以分别使用。在多用户作业模式中,标准会根据情况指定两种方式来为特定区域内更多用户进行多任务操作:即多用户多入多出(MU-MIMO)或正交频分复用多址接入 (OFDMA)。无论为上述何种方式,无线接入点都会充当多用户作业的中央控制器,这点与LTE基站用来控制多用户多任务的方式相似。     ▲根据所服务的应用程序类型使用OFDMA和MU-MIMO   通过了解他们的工作机制您可以看到,OFDMA增加了空口效率,这大大减少了应用的延迟,它在可工作的信噪比范围之内对于小数据包的传输效率更高、效果更好,极其适合无线语音或者类似应用的场景。而MU-MIMO提升的是系统容量,在高信噪比条件下传输大数据包时效率更高,适合视频、Web浏览、办公场景和应用。   当然,802.11ax 无线接入点也可将MU-MIMO和OFDMA作业结合在一起。为了协调上行MU-MIMO或上行OFDMA传输,无线接入点将发送触发管理帧给所有使用者。该管理帧会指出每位使用者的空间串流数量和/或OFDMA配置(频率和RU大小)。此外,当中也会包含功率控制信息,好让个别用户可以调高或调低其传输功率,进而平衡无线接入点从所有上行使用者接收到的功率,同时改善较远节点的帧接收情况。无线接入点也会指示所有使用者何时可以开始和结束传输。如下图所示,无线接入点传送多使用者上行触发管理帧,告知所有使用者何时可以一起开始传输,以及所属帧的持续时间,以确保彼此能够同时结束传输。一旦无线接入点收到了所有使用者的帧,就会回传Block ACK以结束作业。     ▲UL MU传输的基本帧交换序列   在竞争环境中,用户无需互相竞争在上行链路中发送数据,而是由802.11ax无线接入点协同安排,以免彼此冲突。这种管理方法将实现更好的资源利用和效率提高。   1024-QAM   QAM编码是用星座图(点阵图)来做数据的调制解调,实际应用中是2的N次方的关系。比如说16-QAM ,16是2的4次方,一次就可以传输4个bit的数据;802.11n是64-QAM ,是2的6次方,因此在64个点阵的一个星座集合里面,用任意一个点可以携带六个bit的数据信息。   到了802.11ac,就变成了256-QAM,是2的8次方,802.11ac相对于802.11n在编码上面的速率提升了33%。802.11ax之后引入了更高阶的编码,就是2的10次方,1024-QAM。   我们都知道从8到10的提升是25%,也就是相对于802.11ac来说,802.11ax的性能又提高了25%,变成了1024-QAM,一个符号可以携带10个bit的数据。     ▲256-QAM与1024-QAM的对比   Spatial Reuse(空间复用)   为了在密集部署方案中提高系统级性能和频谱资源的有效使用,802.11ax标准实现了空间重用技术。 STA可以识别来自重叠基本服务集(BSS)的信号,并基于该信息做出关于介质争用和干扰管理的决定。   当主动侦听介质的STA检测到802.11ax帧时,它会检查MAC头中的BSS颜色位或MAC地址。但是,利用现有的介质访问规则,来自一个BSS的设备将推迟到另一个同频道BSS,而不会增加网络容量。   BSS着色是802.11ah中引入的一种机制,用于为每个BSS分配不同的“颜色”,将其扩展到11ax,根据检测到的颜色分配新的频道访问行为。     ▲BSS着色机制   当802.11ax STA使用基于颜色代码的CCA规则时,它们也可以与发射功率控制一起调整OBSS信号检测阈值。此调整可提高系统级性能和频谱资源的使用。此外,802.11ax STA可以调整CCA参数,例如能量检测级别和信号检测级别。     ▲动态调整BSS内部的CCA门限   除了使用CCA来确定当前帧的介质是空闲还是繁忙之外,802.11标准还使用网络分配向量(NAV),一种维持未来流量预测的定时器机制,以便STA指示所需紧接在当前帧之后的帧的时间。NAV充当虚拟载波侦听,确保对802.11协议操作关键帧的介质预留,例如控制帧,以及RTS / CTS交换后的数据和ACK。   · Intra-BSS NAV,如果所侦测的协议数据单元 (PPDU) 中的 BSS 色彩与所关联 AP 已公布的色彩相同,STA 就会将该帧视为Intra-BSS帧;   · Inter-BSS NAV,如果所侦测帧的 BSS 色彩不同,STA 就会将该帧视为来自重叠 BSS 的 Inter-BSS 帧。在这之后,只有在需要 STA 验证帧是否是 Inter-BSS 帧期间,STA 才将介质当成忙碌中 (BUSY)。   该标准仍然必须定义一些忽略来自重叠BSS的业务机制,但是该实现可以包括提高BSS间帧的空闲信道评估信号检测(SD)阈值,同时保持BSS内业务的较低阈值。这样,来自相邻BSS的流量不会产生不必要的信道接入争用。   总结   总体来讲,802.11ax从两个大方面实现了自己的既定目标,其中MU-MIMO和OFDMA是802.11ax成功的关键。   1.物理层的增强与高效,主要包括:   · 上行和下行方向正交频分多址(OFDMA) OFDMA机制可以同时为多个使用者提供较小(但专属)的子信道,进而改善每位用户的平均传输率。   · 上行和下行方向多用户-多输入多输出(MU-MIMO) 上行链路最多可同时为8个用户提供服务,容量是802.11ac的8倍;下行链路最多可同时为8个用户提供服务,容量是802.11ac的2倍。   · 上行链路资源调度 在802.11ax中,MU-MIMO和OFDMA技术可以分别使用;OFDMA增加了空口效率;而MU-MIMO提升的是系统容量。   · 最多8个发送天线、8个接收天线和8个空间流   · 更高的调制方式,1024-QAM 每符号可携带10bit,与256-QAM相比,容量提升了25%。   2. MAC层的增强与高效,主要包括:   · 基本服务集着色(BSS Coloring) BSS着色机制使设备能够区分自己网络中的传输与邻近网络中的传输,在尽可能的情况下最大限度去减少同频干扰。   · 双NAV机制 同时拥有Intra-BSS NAV和Inter-BSS NAV可以帮助STA预测自身BSS内的流量,并且当它们在得知重叠流量状态时可以进行自由传输   · 目标唤醒时间(Target Wake up Time - TWT) 减少用户之间的争用和重叠,显著增加STA的休眠时间以降低功耗   锐捷网络已发布了基于802.11ax平台的全新产品RG-AP860-I,该产品采用了更高阶的1024-QAM调制编码方案和上下行OFDMA技术,通过更高的传输速率、更强大的并发能力和更高效的资源调度能力,展现出单台AP承载10Gbps网络接入速率的震撼力。最关键的一点是,锐捷RG-AP860-I已全面支持802.11ax的企业级应用,此举为第七代无线技术打通了大规模商业化的应用之路。

  • 发表了主题帖: QORVO的802.11AX 5 GHZ FEM大幅度 提高 WI-FI 性能

            QPF4528 拥有更出色的热管理性能和更高的线性功率传输率,为新的 H3C 接入点提供支持         美国北卡罗来纳州格林斯巴勒市的移动应用、基础设施与航空航天、国防应用中 RF 解决方案的领先供应商 Qorvo® Inc.(纳斯达克代码:QRVO)今日宣布,其 5 GHz 前端模块 (FEM) 正助力实现行业最快、最高能效的 802.11ax 企业接入点。Qorvo 的 FEM 与 Qualcomm® IPQ8078 802.11ax 芯片组配合使用,通过领先的数字解决方案提供商 New H3C 为先进的 WA6628 企业级接入点提供支持。         Qorvo 高效的 QPF4528 FEM 在不增加功耗的情况下提高线性功率传输,因此能够在更小尺寸的设计中实施更高性能的 802.11ax 企业级接入点。值得注意的是,QPF4528 的优化是为了解决多用户多输入多输出 (MU-MIMO) 环境中,Wi-Fi 设备所面临的热量难题。 FEM 助力用于此里程碑载波网关的 Qualcomm Technologies IPQ8072 芯片组解决方案,提供日益增长的 Wi-Fi 吞吐量和扩展范围。由于家庭成员使用的互连设备越来越多,Qorvo 802.11ax 产品也因此正在改善全球最终用户的体验。         802.11Ax 技术(具备 8x8 MU-MIMO)具备更高容量,这为企业带来了许多好处,包括更少的接入点、更高容量和效率,更高速度以及更低的运营成本。据 IHS Markit 估算,截至 2021 年,支持 802.11ax 的全球设备出货量将达到近 2 亿台。1         New H3C 的 WA6628 接入点通过 12 个流信道,同时为 1,000 个客户端提供数据。其纤细优雅的外形赢得了 2018 年红点设计奖 - 世界顶级工业设计奖之一。         移动应用、基础设施与航空航天、国防应用中 RF 解决方案的领先供应商 Qorvo®, Inc.(纳斯达克代码:QRVO)今日宣布,其高效率 5GHz 前端模块(FEM)QPF4528 已成为新型商用草拟版 802.11ax 载波网关的重要组成部分。相比之前部署的载波网关,集成高通IPQ807x 系列 802.11ax 芯片组的新网关,在带宽密集型应用中提供高达四倍的无线网络吞吐量和更出色的性能。         Qorvo QPF4528 FEM是Qorvo 802.11ax 高性能 2.4GHz 和 5GHz FEM 产品组合的一部分。与前几代 FEM 相比,QPF4528在不增加功耗的情况下传输更高的线性功率。在多用户多路输入多路输出(MU-MIMO)环境下设计 Wi-Fi 设备时,该器件减少了具挑战性的热问题。FEM 的功效还支持使用以太网供电(PoE)的应用,这对输出功率受到监管的世界各地都很重要。         Qorvo 无线连接业务部总经理 Cees Links 表示:“Qorvo 非常重视支持 Wi-Fi 标准演进的前端解决方案。我们的高性能产品正加快推动行业向 802.11ax 过渡。.11Ax 技术和 MU-MIMO 提供的更高容量帮助提高了工作密集型企业环境的速度和最终用户体验。” 如需了解有关 Qorvo Wi-Fi 扩展产品组合的更多信息,请访问此处。在 Qorvo 白皮书“什么是 Wi-Fi .11ax?”中阅读该产品组合如何增强 802.11ax。         Qorvo 无线连接业务部是互连设备无线半导体系统解决方案和 Wi-Fi 集成式前端解决方案的领先开发商。它提供全面丰富、技术先进的 RF 芯片和软件,助力智能家居数据通信和物联网的发展。 关于 Qorvo          Qorvo(纳斯达克代码:QRVO)长期坚持提供创新的射频解决方案以实现更加美好的互联世界。我们结合产品和领先的技术优势、 以系统级专业知识和全球性的制造规模,快速解决客户最复杂的技术难题。Qorvo 服务于全球市场,包括先进的无线设备、 有线和无线网络和防空雷达及通信系统。我们在这些高速发展和增长的领域持续保持着领先优势。我们还利用我们独特的竞争优势,以推进 5 G 网络、 云计算、 物联网和其他新兴的应用市场以实现人物、 地点和事物的全球互联。访问 www.qorvo.com 了解 Qorvo如何创造美好的互联世界。 Qorvo为Qorvo公司在美国及其它地区注册商标。  

  • 2020-08-12
  • 发表了主题帖: TL335x-EVM开发板 处理器、FLASH、RAM、FRAM

    处理器     TI Sitara AM335x是一款高性能嵌入式32位工业级Cortex-A8处理器,主频可高达1GHz,运算能力可高达2000DMIPS,搭配DDR3,兼容eMMC和NAND FLASH,拥有多种工业接口资源,以下是AM335x CPU资源框图: 图 1 FLASH FLASH采用512M/1GByte NAND FLASH或4GByte eMMC,硬件位置如下图: 图 2 RAM RAM采用DDR3L,硬件如下图: 图 3   FRAM U9为FRAM铁电芯片,大小为8KByte,利用铁电晶体的铁电效应实现数据存储,其特点是速度快,读写功耗极低,能像RAM一样操作。连接I2C0总线,地址0X50用于存储板卡ID或者用户写入数据,地址0X51用于存储板卡ID或者用户读取数据。其硬件位置及原理图如下图所示: 图 4   图 5

  • 发表了主题帖: TI KeyStone C66x系列多核架构定点/浮点TMS320C6678设计的评估板串口

    CPU处理器 TI TMS320C6678是一款TI KeyStone C66x多核定点/浮点DSP处理器,集成了8个C66x核,每核心主频高达1.0/1.25GHz,支持高性能信号处理应用,拥有多种工业接口资源,以下是TMS320C6678 CPU功能框图: 创龙TL6678-EasyEVM是一款基于TI KeyStone C66x系列多核架构定点/浮点TMS320C6678设计的高端DSP评估板,由核心板与底板组成。 串口 开发板上引出了1个串口(CON3),使用CH340转成Micro USB接口,并提供4针TTL电平测试端口(CON15),硬件及引脚定义如下图:

  • 发表了主题帖: C2000和dsp的使用的一些技术性问题

    本帖最后由 Jacktang 于 2020-8-12 21:06 编辑 问:我有两个关于C2000的问题:1、C240或C2407的RS复位引脚既可输入,也可输出,直接用CMOS门电路(如74ACT04)驱动是否合适,还是应该用OC门(集电极开路)驱动?2、大程序有时运行异常,但加一两条空指令就正常,是何原因? 答:1、OC门(集电极开路)驱动。2、是流水线的问题。 问:1.DSP芯片内是否有单个的随机函数指令?2.DSP内的计算速度是快的,但是它的I/O 口的交换速度有多快呢?SP如何配合EPLD或FPGA工作呢? 答:1.没有。2.取决于你所用的I/O。对于HPI,传输速率(字节)大约为CPU的1/4,对McBSP,位速率(kbps)大约为CPU的1/2。3.你可以级联仿真接口和一个EPLD/FPGA在一起。 问:设计DSP系统时,我用C6000系列。DSP引脚的要上拉,或者下拉的原则是怎样的?我经常在设计时为某一管脚是否要设置上/下拉电阻而犹豫不定。 答:C6000系列的输入引脚内部一般都有弱的上拉或者下拉电阻,一般不需要考虑外部加上 拉或者下拉电阻,特殊情况根据需要配置。 问:我正在使用TMS320VC5402,通过HPI下载代码,但C5402的内部只提供16K字的存储区,请问我能通过HPI把代码下载到它的外部扩展存储区运行吗? 答:不行,只能下载到片内。 问:电路中用到DSP,有时当复位信号为低时,电压也属于正常范围,但DSP加载程序不成功。电流也偏大,有时时钟也有输出。不知为什么? 答:复位时无法加载程序。 问:DSP和单片机相连组成主从系统时,需要注意哪些问题? 答:建议使用HPI接口,或者通过DPRAM连接。 问:原来的DSP的程序需放在EPROM中,但EPROM的速度难以和DSP匹配。现在是如何解决此问题的? 答:用BootLoad方法解决。 问:我在使用5402DSK时,一上电,不接MIC,只接耳机,不运行任何程序,耳机中有比较明显的一定频率的噪声出现。有时上电后没有出现,但接MIC,运 行范例中的CODEC程序时,又会出现这种噪声。上述情况通常都在DSK工作一段时间后自动消失。我在DSP论坛上发现别人用DSK时也碰到过这种情况, 我自己参照5402DSK做了一块板,所用器件基本一样,也是这现象,请问怎么回事?如何解决? 答:开始时没有有效的程序代码,所以上电后是随机状态,出现这种情况是正常的。 问:我使用的是TMS320LF2407,但是仿真时不能保证每次都能GO MAIN。我想详细咨询一下,CMD文件的设置用法,还有VECTOR的定义。 答:可能看门狗有问题,关掉看门狗。有关CMD文件配置请参考《汇编语言工具》第二章。 问:我设计的TMS320VC5402板子在调试软件时会经常出现存储器错误报告,排除是映射的问题,是不是板子不稳定的因素?还是DSP工作不正常的问题?如何判别? 答:你可以利用Memoryfill功能,填入一些数值,然后刷新一下,看是不是在变,如果是 在变化,则Memory 是有问题。 问:如何解决Flash编程的问题:可不可以先用仿真器下载到外程序存储RAM中,然后程序代码将程序代码自己从外程序存储RAM写到F240的内部Flash ROM中,如何写? 答:如果你用F240,你可以用下载TI做的工具。其它的可以这样做。 问:C5510芯片如何接入E1信号?在接入时有什么需要注意的地方? 答:通过McBSP同步串口接入。注意信号电平必须满足要求。 问:请问如何通过仿真器把.HEX程序直接烧到FLASH中去?所用DSP为5402是否需要自己另外编写一个烧写程序, 如何实现?谢谢!! 答:直接写.OUT。是DSP中写一段程序,把主程序写到FLASH中。 问:DSP的硬件设计和其他的电路板有什么不同的地方? 答:1.要考虑时序要求;2.要考虑EMI的要求;3.要考虑高速的要求;4.要考虑电源的要求。 问:ADS7811,ADS7815,ADS8320,ADS8325,ADS8341,ADS8343,ADS8344,ADS8345中,哪个可以较方便 地与VC33连接,完成10个模拟信号的AD转换(要求16bit,1毫秒内完成10个信号的采样,当然也要考虑价格)? 答:作选择有下列几点需 要考虑1. 总的采样率:1ms、10个通道,总采样率为100K ,所有A/D均能满足要求。2. A/D与VC33的接口类型:并行、串行。前2种A/D为并行接口,后几种均为串行接口。3. 接口电平的匹配。前2种A/D为5V电平,与VC33不能接口;后几种均可为3.3V电平,可与VC33直接接口。 问:DSP的电路板有时调试成功率低于50%,连接和底板均无问题,如何解决?有时DSP同CPLD产生不明原因的冲突,如何避免? 答:看来你的硬件设计可能有问题,不应该这么小的成功率。我们的板的成功率为95%以上。 问:我们的工程有两人参与开发,由于事先没有考虑周全,一人使用的是助记符方式编写 汇编代码,另一人使用的是代数符号方式编写汇编代码,请问CCS5000中这二种编写方式如何嵌在一起调试? 答:我没有这样用过,我想可以用下面的办法解决:将一种方式的程序先单独编译为.obj 文件,在创建工程时,将这些.obj文件和另一种方式的程序一起加进工程中,二者即可一起编译调试了。 问:DSP数据缓冲,能否用SDRAM代替FIFO? 答:不行 问:ADC或DAC和DSP相连接时,要注意什么问题?比如匹配问题,以保证A/D采样稳定或D/A码不丢失。 答:1. 接口方式:并行/串行;2. 接口电平,必须保证二者一致。 问:用F240经常发生外部中断丢失现象,甚至在实际环境中只有在程序刚开始时能产生中 断,几分钟后就不能产生中断。有时只能采取查询的方式,请问有何有效的解决方法?改 为F2407是不是要好些? 答:应该同DSP无关。建议你将中断服务程序简化看一下。

  • 发表了主题帖: 如何使用蓝牙 5.1 实现室内定位系统

            新版本的蓝牙核心规范(5.1 版)能够让开发人员更轻易地实现资产跟踪和室内定位系统 (IPS)。具体而言,该规范为蓝牙数据包添加了固定频率扩展信号 (CTE),以便让接收器能够从射频信号中提取 "IQ" 数据(计算收发器位置所需的同相和正交相位信息),而不会对调制产生干扰效果。此外,开发人员现在只需使用主机控制接口 (HCI) 配置采样控制器,即可轻松配置协议以执行 IQ 采样。         不过,提取 IQ 数据仍然比较复杂,需要将设计合理的天线阵列与无线微处理器配合使用。即便 IQ 数据成功提取,仍然必须对其进行处理,充分考虑多路径接收、信号极化和传播延迟、噪声和抖动后,才能用于计算发射器的位置。         本文阐示了实际解决方案中所需注意的事项,并介绍了 Dialog Semiconductor、Silicon Labs 和 Nordic Semiconductor 推出的适用于构建蓝牙 5.1 测向应用的开发平台和模块。此外,本文还阐示了如何使用这些平台着手原型开发、测试和验证设计。 蓝牙 5.1 数据包结构         蓝牙 5.1 数据包中包含由一串数字 "1" 组成的 CTE,从而确保天线以恒定频率接收该部分信号(而非常用于传输蓝牙数据的调制频率)。此外,该数据串未白化(即去相关)。配置得当的低功耗 (LE) 蓝牙无线电接收包含 CTE 信号的数据包后,将在 CTE 信号期间进行 IQ 采样。单个 IQ 样本由信号幅度和的相位角组成,并以笛卡尔坐标表示(图 1)。 图 1:低功耗蓝牙接收设备会获取阵列中每个天线的蓝牙数据包 CTE 部分时间段内的相位角和幅度 IQ 样本,测向应用的第一步正从这一采样过程开始。这些样本均以笛卡尔坐标 (I,Q) 表示。(图片来源:Bluetooth SIG)        蓝牙核心规范 v5.1 详细说明了对低功耗蓝牙控制器的变更,使 AoA 和 AoD 技术能够使用连接(“配对”)或无连接通信。不过,AoA 常用于资产跟踪等连接应用,而 AoD 将用于 IPS 等无连接应用。     连接式测向使用标准蓝牙 5.1 数据包,并在末尾附加 CTE。相比之下,无连接测向则在蓝牙周期性广播数据包末尾添加 CTE(图 2)。         图 2:蓝牙 5.1 数据包结构显示了 CTE 的位置和持续时间。连接式应用在标准数据包末尾添加 CTE,而无连接应用则使用广播数据包。(图片来源:Bluetooth SIG) 无论是连接式应用,还是无连接应用,开发人员都必须执行一些设置和配置步骤,才能启动发射器的 CTE 和接收器的 IQ 采样,而具体步骤取决于应用是基于 AoA 还是 AoD。     构建测向解决方案在 AoA 适用的资产跟踪等应用中,发射器是像低成本简单标签之类可移动物体,而接收器(或定位器)则是固定参考点。AoA 实现的优点在于,标签只需使用单个天线(而非阵列)传输蓝牙 5.1 协议数据包,并且不需要运行计算密集型算法以最终确定发射器的位置(参见第 1 部分)。 虽然资产跟踪系统的标签设计遵循相对简单的射频 (RF) 设计原则,但标签需要配备蓝牙 5.1 收发器,才能配置数据包以包含 CTE。收发器选型时,值得注意的是,CTE 发送不能采用蓝牙低功耗编码式 PHY(用于实现蓝牙 5 技术的远程无线电),而须采用未编码 PHY。         市面上有些商用蓝牙 5.1 产品可供使用,例如 Dialog Semiconductor 的 DA14691 低功耗蓝牙 5 SoC 适用于定位服务应用。该芯片采用 Arm® Cortex®-M33 微处理器,包括 512 KB 的随机存取存储器 (RAM)。Dialog 为 DA14691 提供了蓝牙 5.1 堆栈。Silicon Labs 也为 EFR32BG13 低功耗蓝牙 SoC 发布了蓝牙 5.1 堆栈;该芯片采用 Arm Cortex-M4 微处理器,提供 64 KB 的 RAM 和 512 KB 的闪存。此外,Nordic Semiconductor 更进一步,他们发布了全新“测向”硬件和软件解决方案 nRF52811。这款低功耗蓝牙 SoC 可以兼容蓝牙 5.1,集成了 Arm Cortex -M4 微处理器,并结合了来自 Nordic 的高端器件 nRF52840 的多协议无线电。该芯片提供 192 KB 的闪存和 24 KB 的 RAM。         这些器件在蓝牙测向应用中适合用于发射器和接收器。每个器件均支持 CTE 传输,并能借助指定发射器天线布局的配置文件信息获取 IQ 样本。从理论上讲,这些器件也能执行复杂计算,从而计算传入无线电信号的入射角和收发器的位置。不过,尽管这些 SoC 使用的 Arm Cortex-M33 和 M4 处理器功能相对强大,但是若在运行复杂测向算法的同时,还需监控无线协议,可能就会造成应用性能不佳。         根据应用对性能和延迟的要求,开发人员可以考虑使用协处理器(可提供额外的 RAM 和闪存),尤其是针对应用软件。例如,Nordic 的 nRF52811 设计可通过内部集成电路 (I2C) 接口和串行外设接口 (SPI) 与协处理器连接。         另一个设计挑战是,为了降低成本,低功耗蓝牙 SoC 通常不具备多个天线端口,或不具备在阵列中各个天线之间进行系统化切换的能力。因此,在低功耗蓝牙 SoC 的单天线端口与多天线阵列之间需要接入射频开关,从而在各个天线之间切换以收集各天线的 IQ 数据(图 3)。 图 3:在 AoA 测向资产跟踪系统中,标签使用单天线和传统低功耗蓝牙 SoC 来发送包含 CTE 的蓝牙 5.1 数据包。主要计算在系统的多天线定位器端执行,定位器收集的信号数据将发送至运行测向算法的定位引擎。(图片来源:Bluetooth SIG) 接收器(或定位器)需要通过天线阵列的 IQ 数据来检测信号的相位差,这种相位差是由于阵列中的每个天线与单一信号发射天线的距离差异导致的。而应用是采用 AoA 还是 AoD,正是取决于各个天线的相位角差异。     天线设计通常分为三种类型:均匀直线阵列 (ULA)、均匀矩形阵列 (URA) 和均匀圆形阵列 (UCA)。设计天线阵列需要大量经验,因而对于开发人员而言,交由第三方专家来配置最佳阵列,并提供物料清单 (BoM) 以便批量构建,往往是更为有效的做法,如第 1 部分所述。 应用对天线阵列、协处理器、额外存储器和天线管理的要求,不仅增加了资产跟踪解决方案定位器端的复杂性,也增加了成本和功耗。所幸定位器通常安装在固定位置,因此可由市电供电。对于大多数解决方案,所需的设备数量比标签数量少得多。 AoD 实现则略微复杂。在这种情况下,发射器包含天线阵列。接收器执行 IQ 采样,对各个天线进行测量,并根据远程发射器天线阵列的设计细节追溯所测量的特定天线。     在 AoD 实现中,固定的定位器信标需要配备蓝牙 5.1 收发器、射频开关和多个天线来传输信标信号,但与 AoA 实现不同,由于链路这一端不需执行信号分析,因此不需另增处理器和存储器。然而,移动接收器虽然只需单个天线,却需要配备相应的硬件和软件来执行测向计算(图 4)。例如,在 IPS 应用中,接收器通常是兼容蓝牙 5.1 的智能手机,因而处理器和存储器资源足以完成该任务。 图 4:在 AoD 测向 IPS 系统中,固定信标使用天线阵列发送包含 CTE 的蓝牙 5.1 数据包。主要计算由消费者的智能手机等移动设备执行。(图片来源:Bluetooth SIG) 使用蓝牙 5.1 进行原型开发     Dialog Semiconductor、Silicon Labs 和 Nordic Semiconductor 目前推出的解决方案主要集中在 AoA 和 AoD 应用中的 CTE 传输、数据包接收和 IQ 采样执行等环节。因此,开发人员需要确定执行实际测向计算所需的资源(即硬件和定位引擎固件)。不过,随着供应商争相发布增强型测向解决方案,这一情况可能不久后就会发生变化。 例如,针对 AoA 资产跟踪应用,各家公司都推出了相应的开发工具以支持标签原型开发。开发过程通常遵循传统低功率无线设备的开发过程。例如,开发套件中包含由工厂提供的基于蓝牙 5.1 目标设备和外设的全功能收发器,将其连接至 PC 或 Mac 构建合适的集成开发环境 (IDE),并利用芯片供应商的软件工具以实现应用开发。         Dialog 建议使用 DA14695-00HQDEVKT-P-ND 开发套件来开发基于蓝牙 5.1 的应用。该套件包括母板、基于 DA14695 蓝牙 5.1 SoC 的子板,以及用于连接 PC 的电缆。此外,该开发套件还支持 Arduino 和 MikroElektronika mikroBUS 盾板,并具有功率测量功能。 Silicon Labs 推出了 SLWSTK6006A 无线 Gecko 入门套件。该开发套件配备了 6 个以上基于 EFR32BG21 蓝牙 5.1 SoC 的子板,可实现具有多个标签的资产跟踪系统原型开发。该开发套件可与该公司的 Simplicity Studio 配合使用,后者支持 Flex SDK 应用和配置软件开发工具。 Nordic 推出基于该公司 nRF52840 SoC 的 nRF52840-DK 评估板,该 SoC 可与 nRF52811 蓝牙 5.1 SoC 完全兼容。该公司的 nRF5 SDK 是一款受众多常用 IDE 支持的软件开发工具,可用于执行应用开发和系统配置。     由于蓝牙 5.1 默认不发送包含 CTE 的数据包或执行 IQ 采样,开发人员必须通过供应商的开发工具配置系统以添加这些功能。这些工具可以访问主机控制器接口 (HCI),之后主机就可使用该接口配置控制器以生成 CTE 和执行 IQ 采样。 对于无连接应用(AoD 适用的应用类型),主机将执行以下控制器初始化步骤(图 5): 配置扩展广播 配置周期性广播 配置 CTE 发送 启用 CTE 广播 启用周期性广播 启用扩展广播 设置广播数据 图 5:无连接方案(AoD 适用的应用类型)主机执行的控制器初始化步骤。(图片来源:Bluetooth SIG) 扫描设备旨在接收 CTE 数据,获取广播发送的 IQ 样本,因而必须采用如下配置: 配置扩展扫描 启动扩展扫描 与接收的周期性广播同步数据包同步 启用无连接 IQ 采样 对于连接方案(AoA 适用的应用类型),由主设备或从设备请求其他设备发送包含 CTE 的数据包。通过发送链路层 (LL) CTE 请求数据包来执行请求,该数据包中的许多参数可用于配置 CTE 创建。若远程设备不支持 CTE,则会通知本地设备。于是,本地设备就不会使用当前连接进一步发送 CTE 请求。 具体过程如下,请求设备将: 在控制器中配置 CTE 接收参数 在控制器中启用 CTE 请求 接收和处理 IQ 报告 不再需要时禁用 CTE 请求发送 响应设备将: 在控制器中配置 CTE 发送参数 在控制器中启用 CTE 响应 接收并响应来自其他设备的 LL CTE 请求         在蓝牙 5.1 规范中,HCI 具有一条新命令“低功耗读取天线信息”,允许主机获取其控制器所支持天线的信息。用于获取远程设备中天线阵列信息的程序尚未定义。 使用天线阵列执行 IQ 采样时,获取的每个样本都必须追溯至特定天线,并且以系统化方式完成采样。使用 HCI 配置命令中指定的模式并严格遵循时序规则有助于系统化采样。这些规则的应用以及具体设备对应的具体规则,均取决于应用是基于 AoA 还是 AoD,设备属于发送设备还是接收设备。例如,单天线发送设备可连续发送包含 CTE 的数据包。不过,IQ 采样总是由接收设备执行,无论设备使用的天线数量多寡。 CTE 处理时间可分为 4 µs 起始保护周期 、8 µs 参考周期,之后的序列则由切换时隙、采样时隙,或切换时隙和采样时隙交替排列组成(图 6)。 图 6:该例说明了 AoA 应用中 1 µs 和 2 µs 的切换及采样时序。单天线发送设备连续发送包含 CTE 的数据包,而接收设备根据切换和采样序列执行 IQ 采样。(图片来源:Bluetooth SIG)         在参考周期内,不切换天线,一次性获取 8 个 IQ 样本。主机可以使用参考样本来估算信号频率并推断波长,从而提高角相位角计算的精度。[1] 总结         蓝牙核心规范 5.1 版的增强功能要求生成使用 CTE 和 IQ 采样进行测向所需的原始数据。该规范使用经过验证的工程技术来确定信号方向,并将接口、配置和交互标准化。另一个优势在于,如今所有芯片供应商提供的蓝牙解决方案均可实现高精度测向。         各大芯片制造商争相提供各种硬件解决方案、软件、开发套件和软件开发套件,让开发人员能够尽快熟悉如何配置使用蓝牙测向功能的系统。商用资产跟踪和 IPS 应用仍要求较高水平的开发专业知识,尤其是在天线阵列和定位引擎固件的设计方面。不过,今后的蓝牙测向配置有望进一步简化这一难题。

  • 2020-08-11
  • 发表了主题帖: TI DSP集成开发环境CCS的使用

    CCS是TI公司推出的用于开发DSP芯片的集成开发环境,它采用Windows风格界面,集编辑、编译、链接、软件仿真、硬件调试以及实时跟踪等功能于一体,极大地方便了DSP芯片的开发与设计,是目前使用最为广泛的DSP开发软件之一。   一、CCS的简介  CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具。 CCS有两种工作模式: 1、软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。 2、硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。 本次实验主要采用软件仿真器模式。 二、CCS系统配置   采用标准配置文件进行系统配置的步骤: 步骤1:启动CCS配置程序。双击桌面上的Setup CCS快捷图标,弹出对话框。 步骤2:清除以前定义的配置。 步骤3:选择与目标系统相匹配的配置文件。 步骤4:将所选中的配置文件加入到系统配置中。 步骤5:安装驱动程序。点击“Intall a Device Driver”,弹出选择器件驱动程序对话框。 步骤6:保存系统配置。打开“File”菜单,单击“Save”按钮,将系统配置保存在系统寄存器中,完成CCS的系统配置。 三、CCS中常用文件名和应用界面 1、常用文件名  *.cmd —— 链接命令文件; *.obj —— 由源文件编译或汇编后所生成的目标文件; *.out —— 完成编译、汇编、链接后所形成的可执行文件,可在CCS监控下调试和执行。 2、应用界面 四、实验举例 1. 创建新工程 利用CCS创建一个新工程,然后向该工程中添加源代码文件和库文件。 1) CCS的安装目录为c:\ti,首先在文件夹c:\ti\myprojects\下建立一个新的文件夹,命名为volume1。 2) 将c:\ti\tutorial\target(sim54xx或dsk5402等)\volume1文件夹中的内容拷贝到该新建的文件夹中。 3) 启动CCS。如果需要的话,对CCS进行配置,使其工作在C54x simulator模式下。 4) 从CCS的Project菜单下选择子菜单New。将出现Project Creation对话框。在对话框中“Project Name”处输入volume1,“Location”处用浏览方式选入在第一步中所建立的文件夹volume1的位置,在“Project Type”处选择Executable(.out)类型,在“Target”中选择CCS所配置的目标DSP类型。最后单击“Finish”完成。 5) 通过上述步骤Code Composer Studio就建立了一个工程文件,名为volume1.pjt,该工程文件用于存储工程配置以及在工程中所用到的若干文件。可在“工程项目观察窗口(Project view)”处看到。 2. 向工程中添加文件 一个工程项目包括源程序、库文件、链接命令文件和头文件等。 1) 在CCS中选择菜单Project® Add Files to Project,然后选文件volume.c,并单击Open。(也可在工程图标处单击鼠标右键在快捷菜单中选Add Files to Project,或将文件拖入工程视图窗口的文件夹中。) 2) 在CCS中选择菜单Project® Add Files to Project,并在文件类型选框中选汇编源文件(*.a*, *.s*),然后选vectors.asm 和 load.asm 这两个文件并单击Open。这些文件中包含了设置复位RESET中断到程序的C入口c_int00的一些汇编指令。(对于更加复杂的程序,可在vectors.asm 文件中定义更多的中断向量。也可利用DSP/BIOS来自动定义所有的中断向量。) 3) 在CCS中选择菜单Project® Add Files to Project,并在文件类型选框中选择链接命令文件(*.cmd),然后选volume.cmd并单击Open,该命令文件将汇编程序的段映射到DSP的存储空间中。 4) 在CCS中选择菜单Project® Add Files to Project,进入编译库文件夹(c:\ti\c5400\cgtools\lib),在文件类型选框中选择目标文件类型和库文件类型(*.o*, *.lib),为所配置的目标DSP选rts.lib文件并单击Open。该库文件为目标DSP提供了运行时间(runtime)支持。(对于一些目标DSP,运行时间库可以是一个更特殊的文件名,如rts_ext.lib 。) 5) 在工程视图窗口,用鼠标右键单击工程文件volume.pjt 并在快捷菜单中选择 Scan All Dependencies。这时volume.h应出现于工程视图窗口中的库(Libraries)文件夹中。 6) 单击Project左边的小加号+,将展开工程列表:volume1.pjt,Libraries,以及 Source。该列表即为工程视图。 无需手工向工程中加入include文件,因为CCS将会在编译过程中自动找到这些文件。编译之后在工程视图中将出现这些include文件.。 如果要从工程中移出一个文件,只要在相应文件处单击鼠标右键在弹出的快捷菜单中选Remove from project 即可。 编译时CCS在以下路径依次查找工程文件:包含有源文件的文件夹;在compiler 或 assembler 选项中从左到右依次列出的文件夹。 3. 察看源代码 在工程视图中volume.c上双击,就可在CCS右边窗口中察看源代码。 请注意该程序中的以下部分: Ÿ 在进入main函数后打印出一条消息,并进入死循环。循环体中程序调用了dataIO以及其他一些过程函数。 Ÿ 在过程函数中,将输入缓冲区(input buffer)中的每一个数值乘以增益(gain),并将结果放入输出缓冲区(output buffer)。程序也将调用汇编载入例程,该例程按照传递给它的processingLoad取值来消耗指令周期。 Ÿ 本例中dataIO函数除了返回之外不做其他任何动作。我们在这里不使用C代码来完成I/O,而是利用CCS中的一个探针Probe Point 来从主机的文件中读入数据并放入inp_buffer区域。 4. 编译并运行程序 编译并运行程序的步骤: 1) 选Project®Rebuild All 或单击工具按钮      (Rebuild All)。CCS重新编译,并链接工程中的全部文件。编译过程信息显示在CCS下部的窗口中。 2) 在默认情况下,将当前工程目录下的debug子目录中生成.out文件。通过CCS工具条可改变生成文件的存放位置。 3) 选File®Load Program,并在对话框中选刚刚编译生成的文件volume1.out,单击Open打开。(默认在目录c:\ti\myprojects\volume1\Debug\ 文件夹下)这样CCS就将程序载入目标DSP,并打开一个反汇编窗口,显示出相应的反汇编指令。CCS也将在窗口底部自动打开一个标签区域来显示程序送往stdout的输出。 4) 选View®Mixed Source/ASM,将同时看到c源代码和汇编结果代码。 5) 在混合模式窗口中单击一条汇编伪指令本身,并按F1键,CCS将搜索该条指令的帮助。 6) 选Debug®Go Main开始从main 函数处执行程序。程序暂停在main处,并用黄色的箭头标识。 7) 选Debug®Run或单击工具按钮    (Run)来运行程序。 8) 选Debug®Halt来暂停程序执行。 9) 从菜单View中选Mixed Source/ASM。将看到不带相应汇编的c代码。从而可以方便地进行下一个任务:修改程序选项,修正语法错误。 5. 修改并运行程序 在前面的介绍中,预处理命令(#ifdef and #endif)包围的程序部分不会被执行,因为没有定义FILEIO。在这一部分将在CCS中设置一个预处理选项。 1) 选Project®Build Options。 2) 在Build Options窗口的Compiler标签下,从列表栏选择Processor, 在Define Symbols域键入FILEIO,然后按Tab键。 (注:窗口上部的编译命令中含有了选项-d。再次编译时程序中的#ifdef FILEIO之后的语句将被包含。根据所使用的DSP板的不同其他选项也将发生变化。) 3) 单击OK保存新的选项设置。 4) 选Project®Rebuild All 或单击工具按钮     (Rebuild All)。只要改变了工程选项,就必须重新编译所有的文件。 5) 选File®Load Program并选择文件volume1.out。(也可以在编译之后自动装入,选择Option®Customize,并单击Program Load Options标签,然后选中Load Program After Build Option) 6) 选Debug®Go Main开始从main 函数处执行程序。程序暂停在main处,并用黄色的箭头标识。 7) 选Debug®Run或单击工具按钮    (Run)来运行程序。 8) 选Debug®Halt来暂停程序执行。 6. 使用断点以及变量观察窗口 在开发测试程序的过程中,经常需要在程序执行中察看变量的取值,将利用断点以及变量观察窗口来达到此目的。在达到断点后,使用单步执行命令。 1) 选File®Reload Program。 2) 在工程视图中双击文件volume.c,打开代码窗口。将光标置于下面的语句行: dataIO; 3) 单击工具按钮  (Toggle Breakpoint)或按F9。选择边区(编辑区左边的灰色竖条部分)标示出断点已经设置(红色点图标)。如果选择边区无效(用Option®Costomize®Editor Properties 来设置),择行显示用粉红色高亮显示。(用Option®Costomize®Color可改变颜色。) 4) 选View®Watch Window,在CCS的右下角将出现一个分离区域,程序运行时该区域显示观察变量的取值。默认时选中局部观察标签Watch Locals,显示当前执行的函数中的局部变量。 5) 如果程序没有停留在main处,选Debug®Go Main。 6) 选Debug®Run,或按F5,或图标      。 7) 选Watch1标签。在Name栏单击并键入dataIO ,即键入要观察的变量名称。 8) 单击watch window 的白色区域来保存。这时变量取值将立即显示出来。 9) 单击工具按钮     (Step Over)或按F10数次,将跳到调用dataIO()处。 10) 单击      (Remove All Breakpoints)。 7. 为文件I/O添加探针(测试点) 利用探针来从计算机中的文件读取数据,对于算法开发来说是很有用的。探针的用途: Ÿ 将主机文件中的数据(如利用Matlab产生)传输到目标DSP板的缓冲区中,供相应算法使用。 Ÿ 将计算输出从目标板的缓冲区中取出并存放到主机的文件中,以便分析。 Ÿ 用来利用数据更新某窗口,如图形显示窗口。 本部分利用探针将主机文件数据传送到目标板作为测试数据,另外,当到达探针位置时,利用断点来更新所有打开的窗口。 1) File®Load Program,选择volume1.out,并单击Open。 2) 双击工程视图文件volume.c。 3) 将光标置于main函数中的语句处:dataIO(); 此处dataIO()函数作为一个占位符(无任何功能的函数)。现在该函数是一个方便的位置来设置探针,以便从主机传入数据。 4) 单击工具按钮 (Toggle Probe Point),选择边区标出一个菱形小蓝点,标示探针已经设置。若选择边区无效,可以使用Option®Customize®Editor Properties来设置,在该行用蓝色高亮来显示,用Option®Customize®Color来改变颜色。 5) 从File菜单选择File I/O。File I/O对话框出现以便选择输入、输出文件。 6) 在File Input 标签下,单击Add File。 7) 浏览到建立的volume1工程文件夹并选择sine.dat单击Open。(可在文件类型项目下选择数据文件格式。sine.dat文件包含了一个正弦波形的16进制数值) 接着出现了sine.dat的控制窗口。当执行程序时,可利用该控制窗口来在数据文件中作开始、停止、回卷、快进操作。 8) 在File/IO对话框中,改变Address为inp_buffer,修改Length为100,并选中Wrap Around 框。 Ÿ Address域定义了来自文件的数据应放到哪里。inp_buffer是在volume.c中声明的大小为BUFSIZE的一个整型数组(BUFSIZE 是定义于volume.h的一个常量。) Ÿ Length域定义了每次探针点能从数据文件中读取多少样本。由于在volume.h中定义了常量BUFSIZE为(0x64),所以这里设置Length域为100。 Ÿ Wrap Around选项使得当CCS读取数据到文件末尾时能够再次从文件头开始读取。这就允许数据文件可以被视为一个连续数据流,尽管该文件中只包含1000各数据,而探针每次读取100个数据值。 9) 单击Add Probe Point,使得Break/Probe Points对话框中的Probe Points标签出现。 10) 在Probe Point列表中,单击VOLUME.C line 61® No Connection行使之高亮。 11) 在 Connect To域,单击下拉箭头并从列表中文件选择sine.dat 。 12) 单击Replace,这样Probe Point列表将显示为探针与文件sine.dat已经连接。单击OK,那么现在File I/O对话框就将显示文件与探针相连。单击OK关闭File I/O对话框。 8. 显示图形 如果现在运行程序,那么程序的运行结果将无法显示出来。通过设置观察变量来观察与inp_buffer和out_buffer数组相关联的地址中的数据。但是需要观察许多数据,并且显示的只是数据,而不是数据相应的曲线图(波形图)。 CCS提供了多种方式来将程序处理的数据可视化。 1) 选菜单View® Graph® Time/Frequency。 2) 在Graph Property对话框中,修改Graph Title 为 Input,Start Address为inp_buffer,Acquisition Buffer Size 为100,Display Data Size为100,DSP Data Type为 16-bit signed integer,Autoscale为 Off,Maximum Y-value为1000。 3) 单击OK,显示 Input Buffer 的一个 Input图形窗口就出现了。 4) 在Input graph 窗口单击鼠标右键并在弹出菜单中选择Clear Display。 5) 再次选菜单View® Graph® Time/Frequency。将Graph Title修改为Output,并将Start Address修改为out_buffer,其余值默认。 6) 单击OK,显示Output图形窗口。在该窗口中单击鼠标右键,从弹出菜单中选择Clear Display。 五、实验操作 同学按上述讲解步骤完成实验的操作并熟悉CCS的使用。

  • 发表了主题帖: ccs的三种颜色格式

    <!DOCTYPE html> <html lang="en">     <head>         <meta charset="utf-8">         <style >             .red {                 color: red;             }             li:nth-child(2) {                 color: #FF6600;   /*  橙色  颜色尽量十六进制,简写格式*/             }             #rgb {                 color: rgb(0,0,255);  /* 蓝色*/             }         </style>     </head>     <body>         <h3>color属性用于定义文本的颜色,其取值方式有如下三种;</h3>         <ol>  <!-- 有序列表 -->             <li class="red">预定义的颜色值,如red,green,blue等。</li>             <li>16进制,如#FF0000,#FF6600,#29D794等。十六进制是最常用的定义颜色的方式</li>             <li id="rgb">RGB代码,如红色可以表示为rgb(255,0,0)或rgb(100%,0%,0%)。</li>         </ol>     </body> </html>

  • 发表了主题帖: 适用于传感和信号处理的 C2000

    C2000 MCU 包含可有效提高传感和处理系统性能的重要特性。在具有控制要求的系统中,客户需要精确检测系统参数、对控制律方程式进行低延迟处理以及精确生成驱动信号。 这些类型的功能有助于实现实时握手、数据共享和调试。C2000 器件具有高度可配置性,并提供有关传感、处理、致动和连接的控制功能。  所有 C2000 器件都包括片上模数转换器 (ADC) 12 位单端输入或 16 位差分输入 具有双路采样保持的单个模数转换器或具有单路采样保持的多个模数转换器 允许对采样操作进行排序或同步 实现从 1MSPS 到超过 12 MSPS 的速度转换 了解每个 C2000 系列器件上提供的 ADC 技术   C2000 器件可提供具有直接存储器存取 (DMA) 功能的 SPI 和 McBSP 数字外设,以便连接至外部 ADC 某些应用需要专用模拟前端或具有 C2000 MCU 所集成功能之外规格的模数转换器 能够将外部转换与内部计时器同步  高分辨率捕捉 (HRCAP) 外设可在数百皮秒内测量典型分辨率下的外部脉冲宽度。 用途包括:  电容式触控应用 脉冲序列周期的高分辨率周期和占空比测量 瞬时速度测量 瞬时频率测量 隔离边界上的电压测量 距离/声纳测量和扫描

  • 发表了主题帖: C2000-8027系列的看门狗

     

  • 2020-08-10
  • 发表了主题帖: MSP430单片机UART_FIFO 发送 接受

    一共有2个程序 程序1发送: #include <msp430x42x.h> #define TXBUF_SIZE  32                    /*发送FIFO的最大容量*/ unsigned char TX_BUFF[TXBUF_SIZE];  /*发送FIFO缓冲区数组*/ unsigned int  UART_OutLen=0;        /*发送FIFO内待发出的字节数*/ unsigned int  TX_IndexR=0;          /*发送FIFO内的读指针*/ unsigned int  TX_IndexW=0;          /*发送FIFO内的写指针*/ /***************************************************************** * 名    称:UART0_PutChar() * 功    能:从串口发送1字节数据(向缓冲队列内填入1字节待发送数据) * 入口参数:Chr:待发送的字节 * 出口参数:返回1表示发送成功,             返回0表示发送失败。      * 说    明: 发送过程中,不阻塞CPU运行 *****************************************************************/ char UART0_PutChar(unsigned char Chr) {   if(UART_OutLen == TXBUF_SIZE) //如果FIFO已满   {     return (0);                 // 不发送数据,返回发送失败标志   }   if(UART_OutLen==0)            // 如果是第一个字节   {     IFG1|=UTXIFG0;              // 人为制造第一次中断条件      }   _DINT();                      // 涉及FIFO操作时不允许中断,以免数据错乱   UART_OutLen++;                // 待发送字节数加1   TX_BUFF[TX_IndexW] = Chr;     // 待发送数据通过写指针写入FIFO   if (++TX_IndexW >= TXBUF_SIZE)// 写指针递增,且判断是否下标越界    {     TX_IndexW = 0;              // 如果越界则写指针归零(循环队列)          }   IE1 |= UTXIE0;                  // 允许UART0的发送中断,在中断内依次发送数据      _EINT();                      // FIFO操作完毕,恢复中断允许   return (1);                   // 返回发送成功标志    }                                    #pragma vector=UART0TX_VECTOR __interrupt void UART_TX (void)         // 串口发送中断 {    if(UART_OutLen>0)                    // FIFO内是否有待发送的数据?        {                                           UART_OutLen--;                // 待发送数据字节数减1             U0TXBUF=TX_BUFF[TX_IndexR];   // 从尾指针读取一个字节并发送           if (++TX_IndexR >= TXBUF_SIZE)// 读指针递增,且判断是否下标越界            {                                                 TX_IndexR = 0;             // 如果越界则写指针归零(循环队列)            }        }     else  IE1 &=~ UTXIE0;  // 如果数据已发完,则关闭UART0的发送中断,停止发送   }    /***************************************************************** * 名    称:UART0_PutChar_Legacy() * 功    能:传统的从串口发送1字节数据程序,供对比用 * 入口参数:Chr:待发送的字节    * 说    明: 发送过程中,会阻塞CPU运行 *****************************************************************/ void UART0_PutChar_Legacy(char Chr) {   TXBUF0=Chr; while ((IFG1 & UTXIFG0)==0);         // 等待该字节发完 } void main( void ) {                                                                  WDTCTL = WDTPW + WDTHOLD;           // 停止看门狗   FLL_CTL0 |= XCAP18PF;                // 配置晶振负载电容   U0CTL = CHAR;                        // 异步通讯模式,8位数据,无校验,1位停止位。   ME1 |= UTXE0 + URXE0;                // 开启串口0收发模块   U0TCTL |= SSEL0;                // 选择ACLK作为串口波特率时钟源。   U0BR1 = 0;                        //   U0BR0 = 13;                        // 分频系数整数部分=13   U0MCTL = 0x6B;                // 分频系数小数部分调制=5/8。(2400bps)   P2SEL |= BIT4 + BIT5;  // P2.4,5 开启第二功能,作为串口收发引脚(不同单片机有差别)   _EINT();                        // 总中断允许   while(1)   {     TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // 用TA测量传统发送程序所需时间                                                        UART0_PutChar_Legacy(0x01);     UART0_PutChar_Legacy(0x02);     UART0_PutChar_Legacy(0x03);     UART0_PutChar_Legacy(0x04);     UART0_PutChar_Legacy(0x05);             //测试,发送8字节数据     UART0_PutChar_Legacy(0x06);     UART0_PutChar_Legacy(0x07);     UART0_PutChar_Legacy(0x08);     TACTL = TASSEL_2 + MC_0;                // TA停止计时     _NOP();                           // 在这一句设断点查看TAR值(29652个周期)     __delay_cycles(1000000);                 TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // 用TA测量带FIFO的发送程序所需时间                                                        UART0_PutChar(0x01);     UART0_PutChar(0x02);     UART0_PutChar(0x03);     UART0_PutChar(0x04);     UART0_PutChar(0x05);                    //测试,发送8字节数据     UART0_PutChar(0x06);     UART0_PutChar(0x07);     UART0_PutChar(0x08);     TACTL = TASSEL_2 + MC_0;                // TA停止计时     _NOP();                           // 在这一句设断点查看TAR值 (440个周期)        __delay_cycles(1000000);                    //约一秒发送一次   } } 复制代码 程序2接受: #include <msp430x42x.h> #define RXBUF_SIZE  32                              /*接收FIFO的最大容量*/ unsigned char RX_BUFF[RXBUF_SIZE];          /*接收FIFO缓冲区数组*/ unsigned int  UART_InpLen=0;                /*接收FIFO内待读取的字节数*/ unsigned int  RX_IndexR=0;                  /*接收FIFO的读指针*/ unsigned int  RX_IndexW=0;                  /*接收FIFO的写指针*/ /***************************************************************** * 名    称:UART0_GetChar() * 功    能:从串口读取1字节数据(从缓冲队列内读取1字节已接收的数据) * 入口参数:*Chr:读取数据所存放的地址指针 * 出口参数:返回1表示读取成功,返回0表示读取失败。      * 说    明: 读取过程中,不阻塞CPU运行 *****************************************************************/ char UART0_GetChar(unsigned char *Chr) {   if(UART_InpLen==0) return(0);         // 如果FIFO内无数据,返回0   _DINT();                              // 涉及FIFO操作时不允许中断,以免指针错乱                                 UART_InpLen--;                        // 待读取数据字节数减1     *Chr=RX_BUFF[RX_IndexR];                   // 从尾指针读取一个字节作为返回值   if (++RX_IndexR >= RXBUF_SIZE)        // 读指针递增,且判断是否下标越界      {                                           RX_IndexR = 0;                   // 如果越界则写指针归零(循环队列)      }   _EINT();                              // FIFO操作完毕,恢复中断允许   return (1);                           // 返回发送成功标志    }                                    /***************************************************************** * 名    称:UART0_GetCharsInRxBuf() * 功    能:获取FIFO内已接收的数据字节数 * 入口参数:无 * 出口参数:待读取的字节数      *****************************************************************/ unsigned int UART0_GetCharsInRxBuf() {   return (UART_InpLen);                 // 返回FIFO内数据的字节数    }                                    /***************************************************************** * 名    称:UART0_ClrRxBuf() * 功    能:清除接收FIFO区 * 入口参数:无 * 出口参数:无      *****************************************************************/ void UART0_ClrRxBuf() {   _DINT();        // 涉及FIFO操作时不允许中断,以免指针错乱   UART_InpLen=0;  // 接收的数据清空   RX_IndexR=0;      RX_IndexW=0;    // 头尾指针复位   _EINT(); } #pragma vector=UART0RX_VECTOR __interrupt void UART0_RX (void)         // 串口接收中断 {   UART_InpLen++;                        // 接收字节计数加1   RX_BUFF[RX_IndexW] =U0RXBUF;             // 串口接收数据通过写指针写入FIFO   if (++RX_IndexW >= RXBUF_SIZE)        // 写指针递增,且判断是否下标越界    {     RX_IndexW = 0;                      // 如果越界则写指针归零(循环队列)          }   } void main( void ) {                                                                  unsigned char RxDataBuff[8];   unsigned char Addr;   unsigned char Func;   int i;   WDTCTL = WDTPW + WDTHOLD;           // 停止看门狗   FLL_CTL0 |= XCAP18PF;                // 配置晶振负载电容   U0CTL = CHAR;                        // 异步通讯模式,8位数据,无校验,1位停止位。   ME1 |= UTXE0 + URXE0;                // 开启串口0收发模块   U0TCTL |= SSEL0;                // 选择ACLK作为串口波特率时钟源。   U0BR1 = 0;                        //   U0BR0 = 13;                        // 分频系数整数部分=13   U0MCTL = 0x6B;                // 分频系数小数部分调制=5/8。(2400bps)   P2SEL |= BIT4 + BIT5;  // P2.4,5 开启第二功能,作为串口收发引脚(不同单片机有差别)   IE1 |= URXIE0;         // 开启UART0的接收中断,在中断内接收数据   _EINT();                        // 总中断允许   while(1)   {       __delay_cycles(1000000);//模拟一个长耗时的程序,使CPU暂时不能读取串口     if(UART0_GetCharsInRxBuf()>=10) //每收到10字节数据     {       UART0_GetChar(&Addr);         //读取第1字节       UART0_GetChar(&Func);         //读取第2字节       for(i=0;i<8;i++) UART0_GetChar(RxDataBuff+i); //依次读取后8字节     }   } }  

  • 发表了主题帖: 分享MSP430控制发光二极管和流水灯源编程实例

    分享MSP430单片机的2个小程序: 1、二极管的闪烁程序 2、流水灯程序 单片机源程序如下: //所有教程一律免费下载 /************************************************************************************ 工程名称:   LED 功能描述:  使用单片机P10口做输出口控制LED,使该位发光二极管闪烁。 硬件连接:  用1位杜邦线将J8_0与J13_1连接。 ************************************************************************************/ #include "io430.h" #include "nbc430.h" #define uchar unsigned char #define uint  unsigned int //*********************************************************************************** //延时 //*********************************************************************************** void delay(uint time) {         uint i,j;         for(i = 0;i < time; i++)         {           for(j = 0;j < 30; j++);             } } //*********************************************************************************** //IO初始化操作 //*********************************************************************************** void IO_init(void) {         P1DIR0=1;                  //设置P10口为同相低电平输出         P10=1;                    //设置P10初始化数据为高电平 } //*********************************************************************************** //主函数 //*********************************************************************************** void main () {              WDTCTL = WDTPW + WDTHOLD;     //禁止看门狗复位     IO_init();                    //IO初始化         while(1)                  //死循环          { …………………… //所有教程一律免费下载 /************************************************************************************ 工程名称:   LED_liushui 功能描述:  使用单片机的P1口做输出口,控制8位发光二极管实现流水灯。 硬件连接:  用8位杜邦线将J8与J13连接。 ************************************************************************************/ #include "io430.h" #include "nbc430.h" #define uchar unsigned char #define uint  unsigned int //*********************************************************************************** //延时 //*********************************************************************************** void delay(uint time) {         uint i,j;         for(i = 0;i < time; i++)         {           for(j = 0;j < 30; j++);             } } //*********************************************************************************** //IO初始化操作 //*********************************************************************************** void IO_init(void) {         P1DIR=0xff;          //设置P1口为同相低电平输出         P1=0x00;          //设置P1初始化数据为高电平 } //*********************************************************************************** //主函数 //*********************************************************************************** void main () {          uchar  i,j;              //定义变量i,j; WDTCTL = WDTPW + WDTHOLD;//禁止看门狗复位 IO_init();               //IO初始化          while(1)                 //进入while死循环   {                         j=0x01;                //0x01即为二进制0000 0001,即最低位为1,其他位为0    for(i=0;i<8;i++)       //进入for循环,循环8次      {       P1=~j;              //依次循环点亮8位LED的1位       delay(1000);        //延时,修改延时即可修改时间间隔       j<<=1;              //j左移1位,j<<=1等效于j=j<<1  

  • 发表了主题帖: MSP430有关LCD5110驱动编程实例

    单片机源程序如下: #include "5110.h" unsigned char Font_code[][6] = {     {0x00,0x00,0x00,0x00,0x00,0x00},// (0)     {0x00,0x00,0x00,0x4F,0x00,0x00},//!(1)     {0x00,0x00,0x07,0x00,0x07,0x00},//"(2)     {0x00,0x14,0x7F,0x14,0x7F,0x14},//#(3)     {0x00,0x24,0x2A,0x7F,0x2A,0x12},//$(4)     {0x00,0x23,0x13,0x08,0x64,0x62},//%(5)     {0x00,0x36,0x49,0x55,0x22,0x50},//&(6)     {0x00,0x00,0x05,0x03,0x00,0x00},//'(7)     {0x00,0x00,0x1C,0x22,0x41,0x00},//((8)     {0x00,0x00,0x41,0x22,0x1C,0x00},//)(9)     {0x00,0x14,0x08,0x3E,0x08,0x14},//*(10)     {0x00,0x08,0x08,0x3E,0x08,0x08},//+(11)     {0x00,0x00,0x50,0x30,0x00,0x00},//,(12)     {0x00,0x08,0x08,0x08,0x08,0x08},//-(13)     {0x00,0x00,0x60,0x60,0x00,0x00},//.(14)     {0x00,0x20,0x10,0x08,0x04,0x02},///(15)     {0x00,0x3E,0x51,0x49,0x45,0x3E},//0(16)     {0x00,0x00,0x42,0x7F,0x40,0x00},//1(17)     {0x00,0x42,0x61,0x51,0x49,0x46},//2(18)     {0x00,0x21,0x41,0x45,0x4B,0x31},//3(19)     {0x00,0x18,0x14,0x12,0x7F,0x10},//4(20)     {0x00,0x27,0x45,0x45,0x45,0x39},//5(21)     {0x00,0x3C,0x4A,0x49,0x49,0x30},//6(22)     {0x00,0x01,0x71,0x09,0x05,0x03},//7(23)     {0x00,0x36,0x49,0x49,0x49,0x36},//8(24)     {0x00,0x06,0x49,0x49,0x29,0x1E},//9(25)     {0x00,0x00,0x36,0x36,0x00,0x00},//:(26)     {0x00,0x00,0x56,0x36,0x00,0x00},//;(27)     {0x00,0x08,0x14,0x22,0x41,0x00},//<(28)     {0x00,0x14,0x14,0x14,0x14,0x14},//=(29)     {0x00,0x00,0x41,0x22,0x14,0x08},//>(30)     {0x00,0x02,0x01,0x51,0x09,0x06},//?(31)     {0x00,0x32,0x49,0x79,0x41,0x3E},//@(32)     {0x00,0x7E,0x11,0x11,0x11,0x7E},//A(33)     {0x00,0x7F,0x49,0x49,0x49,0x3E},//B(34)     {0x00,0x3E,0x41,0x41,0x41,0x22},//C(35)     {0x00,0x7F,0x41,0x41,0x22,0x1C},//D(36)     {0x00,0x7F,0x49,0x49,0x49,0x41},//E(37)     {0x00,0x7F,0x09,0x09,0x09,0x01},//F(38)     {0x00,0x3E,0x41,0x49,0x49,0x7A},//G(39)     {0x00,0x7F,0x08,0x08,0x08,0x7F},//H(40)     {0x00,0x00,0x41,0x7F,0x41,0x00},//I(41)     {0x00,0x20,0x40,0x41,0x3F,0x01},//J(42)     {0x00,0x7F,0x08,0x14,0x22,0x41},//K(43)     {0x00,0x7F,0x40,0x40,0x40,0x40},//L(44)     {0x00,0x7F,0x02,0x04,0x02,0x7F},//M(45)     {0x00,0x7F,0x04,0x08,0x10,0x7F},//N(46)     {0x00,0x3E,0x41,0x41,0x41,0x3E},//O(47)     {0x00,0x7F,0x09,0x09,0x09,0x06},//P(48)     {0x00,0x3E,0x41,0x51,0x21,0x5E},//Q(49)     {0x00,0x7F,0x09,0x19,0x29,0x46},//R(50)     {0x00,0x46,0x49,0x49,0x49,0x31},//S(51)     {0x00,0x01,0x01,0x7F,0x01,0x01},//T(52)     {0x00,0x3F,0x40,0x40,0x40,0x3F},//U(53)     {0x00,0x1F,0x20,0x40,0x20,0x1F},//V(54)     {0x00,0x3F,0x40,0x38,0x40,0x3F},//W(55)     {0x00,0x63,0x14,0x08,0x14,0x63},//X(56)     {0x00,0x03,0x04,0x78,0x04,0x03},//Y(57)     {0x00,0x61,0x51,0x49,0x45,0x43},//Z(58)     {0x00,0x00,0x7F,0x41,0x41,0x00},//[(59)     {0x00,0x15,0x16,0x7C,0x16,0x15},//\(60)     {0x00,0x00,0x41,0x41,0x7F,0x00},//](61)     {0x00,0x04,0x02,0x01,0x02,0x04},//^(62)     {0x00,0x40,0x40,0x40,0x40,0x40},//_(63)     {0x00,0x00,0x01,0x02,0x04,0x00},//`(64)     {0x00,0x20,0x54,0x54,0x54,0x78},//a(65)     {0x00,0x7F,0x48,0x44,0x44,0x38},//b(66)     {0x00,0x38,0x44,0x44,0x44,0x20},//c(67)     {0x00,0x38,0x44,0x44,0x48,0x7F},//d(68)     {0x00,0x38,0x54,0x54,0x54,0x18},//e(69)     {0x00,0x08,0x7E,0x09,0x01,0x02},//f(70)     {0x00,0x0C,0x52,0x52,0x52,0x3E},//g(71)     {0x00,0x7F,0x08,0x04,0x04,0x78},//h(72)     {0x00,0x00,0x44,0x7D,0x40,0x00},//i(73)     {0x00,0x20,0x40,0x44,0x3D,0x00},//j(74)     {0x00,0x7F,0x10,0x28,0x44,0x00},//k(75)     {0x00,0x00,0x41,0x7F,0x40,0x00},//l(76)     {0x00,0x7E,0x02,0x0C,0x02,0x7C},//m(77)     {0x00,0x7E,0x04,0x02,0x02,0x7C},//n(78)     {0x00,0x38,0x44,0x44,0x44,0x38},//o(79)     {0x00,0x7C,0x14,0x14,0x14,0x08},//p(80)     {0x00,0x08,0x14,0x14,0x18,0x7C},//q(81)     {0x00,0x7C,0x08,0x04,0x04,0x08},//r(82)     {0x00,0x48,0x54,0x54,0x54,0x20},//s(83)     {0x00,0x04,0x3F,0x44,0x40,0x20},//t(84)     {0x00,0x3C,0x40,0x40,0x20,0x7C},//u(85)     {0x00,0x1C,0x20,0x40,0x20,0x1C},//v(86)     {0x00,0x3C,0x40,0x30,0x40,0x3C},//w(87)     {0x00,0x44,0x28,0x10,0x28,0x44},//x(88)     {0x00,0x0C,0x50,0x50,0x50,0x3C},//y(89)     {0x00,0x44,0x64,0x54,0x4C,0x44},//z(90)     {0x00,0x00,0x08,0x36,0x41,0x00},//{(91)     {0x00,0x00,0x00,0x7F,0x00,0x00},//|(92)     {0x00,0x00,0x41,0x36,0x08,0x00},//}(93)     {0x00,0x08,0x04,0x08,0x10,0x08},//~(94)     {0x00,0x08,0x08,0x2A,0x1C,0x08},//?ú(127)     {0x00,0x08,0x1C,0x2A,0x08,0x08},//??(128)     {0x00,0x04,0x02,0x7F,0x02,0x04},//?ü(129)     {0x00,0x10,0x20,0x7F,0x20,0x10},//?y(130)     {0x00,0x1C,0x2A,0x32,0x2A,0x1C},//D|??(131)     {0x00,0x1C,0x22,0x44,0x22,0x1C} //°?D?(132) }; /*--------------------------------------------------------------*/ // 写一个字节的命令或者数字 //commond==0写指令, commond==1写数据 void LCD_write_byte(uchar date, uchar commond) {   uchar i;   CE0;   if(commond == 1)   {     DC1;   }   else   {     DC0;   }   for(i = 8; i > 0; i--)   {     if(date & 0x80)     {       DIN1;     }     else     {       DIN0;     }     CLK0;     date = date << 1;     CLK1;   }   CE1; } /*--------------------------------------------------------------*/ //设定开始写的位置 void LCD_set_XY(uchar X, uchar Y) {   LCD_write_byte(0x40 | Y, 0);// 行 0-5   LCD_write_byte(0x80 | X, 0);// 列 0-83/12 } /*--------------------------------------------------------------*/ //清屏 void LCD_clr_scr(void)// {   unsigned int i;   LCD_write_byte(0x80, 0);   LCD_write_byte(0x40, 0);   for(i = 504; i; i--)   {     LCD_write_byte(0x00, 1);   } } /*--------------------------------------------------------------*/ //字符输出(6*8字体) //x: 0 - 13 //y: 0 - 5 void LCD_printc(unsigned char x, unsigned char y, unsigned char c_dat) {     unsigned char i;     c_dat -= 32;             x *= 6;                 LCD_set_XY(x, y);     for(i = 0; i < 6; i++)     {         LCD_write_byte(Font_code[c_dat][i], 1);     } } /*--------------------------------------------------------------*/ //字符串输出(6*8字体) //x: 0 - 13 //y: 0 - 5 void LCD_prints(unsigned char x, unsigned char y, unsigned char *s_dat) {     while(*s_dat && x < 14)     {         LCD_printc(x++, y, *s_dat);         s_dat++;     } } /*--------------------------------------------------------------*/ //字符串输出,自动换行(6*8字体) //x: 0 - 13 //y: 0 - 5 void LCD_printsl(unsigned char x, unsigned char y, unsigned char *s_dat) {     while(*s_dat)     {         LCD_printc(x++, y, *s_dat);         s_dat++;         if(x == 14)         {             x = 0;             y++;         }         if(y == 6)         {             y = 0;         }     } } /*--------------------------------------------------------------*/ //定位输出数字 //x: 0 - 13 //y: 0 - 5 //num: 0 - 65535    要显示的数字 //num_bit: 0 - 5    数字的位数 void LCD_printn(unsigned char x, unsigned char y, unsigned int num, unsigned char num_bit) {     signed   char i;     unsigned char ii;     unsigned char dat[6];     for(i = 0; i < 6; i++)     {         dat[i] = 0;        }     i = 0;     while(num / 10)                          {         dat[i] = num % 10;                       num /= 10;         i++;     }     dat[i] = num;                          ii = i;                                  for(; i >= 0; i--) ……………………

  • 2020-08-09
  • 发表了主题帖: CC2640R2F单载波代码

    一、简介 CC2640R2F的SDK中没有单载波发送的代码,根据CC1310的单载波代码进行移植,实测OK。 二、环境 1.IAR8.11 2.SDK:simplelink_cc2640r2_sdk_1_40_00_45 三、参考资料: 1.C:\ti\simplelink_cc13x0_sdk_1_60_00_21\examples\rtos\CC1310_LAUNCHXL\drivers\rfCarrierWave,CC1310单载波代码 2.Smartrf studio中CC2640R2F的单载波配置,如下: 四、步骤 1.C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\drivers随便找一个工程打开,打开前先备份原工程。 2.先编译该默认工程,确保工程本身没有问题,然后将第三步中的Smartrf studio中CC2640R2F的单载波配置导出,并添加到工程中。 3.编译,针对出现的问题一一修正,比如在工程配置中添加Device_Family的定义,这里定义为cc26x0r2,然后将RF_OP修改为RF_ble 4.编译通过,烧写测试,找另一块CC2640R2F的板子接上Smartrf studio,选择continous rx,现象如下:(中间的脉冲为复位发送板)

  • 回复了主题帖: TI 采用低功耗蓝牙技术实现汽车门禁系统变革

    入门 磨刀不误砍柴工,这个章节我们先详细讲解TI SimpleLink低功耗蓝牙无线MCU CC2640R2F的学习路线图。无论你是经验丰富还是才入门的的开发人员,TI都提供了各种资源,以简化CC2640R2F平台的开发。学会利用这些资源对学习、产品开发都至关重要。往往这部分也是我们最容易忽略的部分,迫不及待的吸收新知识,反而忽略了学习的方法。 尽管我们我们写了大量中文教程尝试带你入门,但是更多的是我们是希望做TI的搬运工,试图将原厂的学习思路毫不保留交给你。 图1.显示了TI的SimpleLink低功耗蓝牙(BLE)开发环境入门的建议工作流程。 图1. 建议的工作流程 Demo:Project Zero 这是TI全新的云开发平台,理想条件下,使用它我们可以省掉桌面开发环境的安装。 CC2640R2F Evaluation Board是Project Zero和使用BLE5-Stack开发应用程序的主要开发套件。想快速利用CC2640R2F Evaluation Board开始一个简单项目,请参阅Project Zero概述页面:www.ti.com/ble-project-zero。 Project Zero使用此SDK中的simple_peripheral示例应用程序的修改版本来演示和评估一些最常用的BLE功能。使用CCS Cloud™(TI的基于Web的集成开发环境(IDE)),Project Zero可以直接从支持的浏览器创建,下载和调试,而无需安装完整的桌面版IDE。Project Zero在CC2640R2F Evaluation Board上运行之后,您可以连接到智能手机来远程控制板载LED的闪烁,发送文本字符串到Evaluation Board的串行端口,以及接收按钮按键通知。 本文档中的以下部分将重点介绍使用BLE5-Stack开发自己的应用程序。 总而言之,Project Zero能让你快速地: 不安装任何工具即可运行软件 从浏览器点击一次按钮即可烧写设备的Flash 将项目导入云编辑器进行开发,构建和调试 在CCS桌面开发版的一个归档文件中下载所有必需的项目文件 图2. CCS云上的Project Zero

  • 发表了主题帖: TI CC2640R2F献给初学者的文档

         程序是什么?程序就是个流程,很多人对着协议栈,不知道从哪下手,然后哪里出了问题也不知道怎么改,提出问题,别人说原理,又觉得自己用不上,实际上,原理就是流程,顺着原理去读程序,就很顺畅。 先解释几个基本点: 一、低功耗的思路。这个概念,很多人不懂,先解释这个,懂了这个,BLE很多事情就清晰很多。 人的低功耗,就是躺着比走路省卡路里,走路比跑步省卡路里。这个很容易懂吧? 然后切换到芯片,芯片的功耗,由晶振决定,晶振的频率决定了单位时间里的功耗。 晶振,就是给处理器提供时序信号的,RISC指令集,一个时序触发一条指令,于是可以得出,晶振的频率,与功耗成正比,跟处理速度也成正比。 回看CC2640R2F,有2个晶振,1是32768HZ,2是24MHZ,在芯片中倍频成48MHz的晶振。现在来分析3个情况: 1、2个晶振都不工作,那么功耗非常低,程序处于停止状态,不会跑。 2、32768Hz晶振工作,48MHz不工作。功耗就比较低,但是处理速度很慢,一般仅用于定时。 3、24MHz晶振工作,32768Hz晶振不工作。功耗很高,但是处理速度非常快。 由上面3个结论,我们延伸出这么一个思路,一般我们实际应用场景,都是很快处理完一段程序,然后大部分时间在等待。 比如,按键扫描,一次处理10来条指令去判断有无按键,然后等待10-40ms(一般的按键扫描间隔),再扫描一次。按照48MHz晶振,我们计算下,算20条指令,只需要花20/48000000秒的时间,就是0.416uS时间处理,然后等待的时间,我们按20ms计算,我们实际上只用了十万分之一的时间在工作,剩下的全部是在等待。这个效率是不是很低?其他的如ADC(就算1kHz的采样频率,大部分时间也是在等待),液晶显示(一般都24Hz-60Hz)等等,都是类似的。 那么,我们能不能,用32768Hz去定时,定时时间到了,启动48MHz的晶振去飞快的处理完,然后又切换到32768Hz去计时下一次任务时间的到来。如此一来,可以将功耗降下来很多。 所有MCU的低功耗设计,都是这么个思路,在CC2640R2F这里,32768Hz做定时,48MHz晶振全速处理,在这个工作状态下,TI称之为PM1或者PM2(PM1和PM2的区别是一些内部电压开不开启而已。)。上诉1的状态,称之为PM3,就是完全停止,只能靠外部中断去重新启动晶振(类似施密特触发器)。上诉3的状态,称之为PM0,就是全速工作状态。 这是基本的低功耗知识,不论你使用不使用CC2640R2F,对于所有其他MCU,思路是一样的。 二、延伸到BLE协议栈,BLE为什么省电?也是用这个思路。首先,射频电路的耗电,产生于电路振荡,这个自己搜索下,不细讲,发射和接收,都是需要开启电路振荡的,这个时候功耗很大,但是实际上我们没必要一直开着发射或者接收,是吧?我们可以参考地铁或高铁的模式,是不是更容易理解: 地铁是规定了几个站停靠(在地铁里,是空间上的间隔,在BLE里,是时间上的间隔。),只有到站了可以上下客,而且上下客的时间定死了(在BLE里也有这个窗口时间,双方只在这个窗口时间内进行数据交换,过时不候)。只要定好了这几个参数,地铁就可以很顺畅的运行了:到站点,定时上下客,两个站点中间路程全速运行,这样就大大提升了效率。 再反过来解释BLE,其实就是,定一个大的时间间隔,然后用一个很短时间的窗口,进行数据交换,就这样,在很小的时间窗口内,双方全速工作,把数据交互做完,然后在大的时间间隔内,双方都休息,达到了低功耗的效果。 这个大的时间间隔,就叫做连接间隔,做BLE的应该非常清楚这个参数。这个参数决定了你的功耗。这个时间间隔越大,功耗越低,能交互的数据越少;这个时间间隔越短,功耗就越高,能交与的数据就越多。 三、已经了解了BLE协议的基本工作情况,我们就要理清,我们的应用(APP)应该怎么配合BLE的协议栈(stack)。下面分析几个大家特别容易出问题的点。 1、CC2640R2F的协议栈,在GATT层里有个读写回调程序,如下图: 写回调 读回调 要千万记得,这两个程序,是运行在我们前面所说的窗口时间内的,所以这两个程序的主要内容,是把主机要读的内容传递出去,以及把主机要写的内容保存下来,最终再启动一个应用层的写回调(读回调没有,因为数据传递出去就行了;写回调,因为新的内容写进来,需要通过回调通知应用层)。很多人直接在这个子函数里写程序,直接导致BLE断线。这个情况就好像,我们坐火车一样,路过上饶,停靠5分钟,这个时候听到上饶鸡腿的叫卖, 你下火车买了个鸡腿,然后回火车上,火车开动了开吃,谁知道某人,买了鸡腿直接吃,吃完了才上火车,结果你吃鸡腿花了6分钟时间,火车开走了!这段程序的流程就类似这样,写了个数据进来,保存下来,通知应用层,然后完成余下的操作(收到了数据,要回一个回执给主机),本次数据交互结束。你在这里加程序,那等于是在上饶下火车吃鸡腿。 2,由于BLE的数据,只在连接间隔时间到的时候交互,所以,你写的处理程序,不能长时间的占用CPU,如果你占用CPU的时间大于了这个连接间隔,那你会大概率BLE掉线。那些写程序喜欢加delay很长时间的朋友,重新学习下编程思维,程序真不是这样写的。 3,CC2640R2F的重复进事件,会导致系统崩溃。这是什么意思呢?就是触发一个event,然后进入event,你的程序是先启动这个event的定时器,比如下个10ms继续触发这个event,然后在下面的程序中,你delay了10ms,就是说,你还在这个event的处理程序中,系统又触发这个这个event,这样形成嵌套,就会导致崩溃。这个碰到的人也比较多,要引起注意,最好是重新启动定时器的指令,放在这个事件子函数的最后位置。 不会弄一些动图,所以字多,估计能耐心开的人少。如果你看了,希望你有所得。

  • 发表了主题帖: TI 采用低功耗蓝牙技术实现汽车门禁系统变革

    CC2640R2F-Q1 通过汽车级认证的 SimpleLink™ 32 位 Arm Cortex-M3 低功耗 Bluetooth® 无线 MCU 为了满足消费者希望以智能手机取代车钥匙的需求,汽车行业正在经历着重大变革。随着“手机即钥匙”技术的普及,你不再需要传统的密钥卡,使用手机即可操作“被动门禁/被动启

  • 2020-08-08
  • 发表了主题帖: 天线原理和射频无源器件技术

    一、天线原理 1.1 天线的定义: Ø 能够有效地向空间某特定方向辐射电磁波或能够有效的接收空间某特定方向来的电磁波的装置。 1.2 天线的功能: Ø 能量转换-导行波和自由空间波的转换; Ø 定向辐射(接收)-具有一定的方向性。 1.3 天线辐射原理 1.4 天线参数 u辐射参数 Ø半功率波束宽度、前后比; Ø极化方式、交叉极化鉴别率; Ø方向性系数、天线增益; Ø主瓣、副瓣、旁瓣抑制、零点填充、波束下倾 … u电路参数 Ø电压驻波比 VSWR、反射系数Γ、回波损耗RL; Ø输入阻抗 Zin、传输损耗 TL; Ø隔离度 Iso; Ø无源三阶互调 PIM3 … u天线旁瓣 u水平面波束宽度 u前后比:指定向天线的前向辐射功率和后向±30°内辐射功率之比 u增益和天线尺寸及波束宽度的关系 将“轮胎”压扁,信号就越集中,增益就越高,天线尺寸就越大,波束宽度越窄; u天线增益的几个要点:         Ø天线是无源器件,不能产生能量。         天线增益只是将能量有效集中向某特定方向辐射或接受电磁波的能力。         Ø天线的增益由振子叠加而产生。         增益越高,天线长度越长。         增益增加3dB,体积增大一倍。         Ø天线增益越高,方向性越好,能量越集中,波瓣越窄。   1.5 辐射参数 u极化:指电场矢量在空间运动的轨迹或变化的状态。 1.6 电路参数 u回波损耗 此例中,回波损耗为 10log(10/0.5) = 13dB VSWR(驻波比) 是对此现象的另一种度量方法 u隔离度 : 是某一极化接收到的另一极化信号的比例 u无源交调(PIM): 当两个频率f1和f2输入到天线,由于非线性效应,天线辐射的信号除频率f1 和f2 外,还包括有其他频率,如2f1-f2 和2f2-f1 (3阶)等。 二、天线产品 2.1 天线命名方式 天线类别: ODP(室外定向板状天线),OOA(室外全向天线),IXD(室内吸顶天线),OCS(室外双向天线),OCA(室外集束天线),OYI(室外八木天线),ORA(室外抛面天线),IWH(室内壁挂天线)等等. 半功率角: 032,065,090,105,360(基站天线) 020,030,040,050,060,075,090,120,160,360(直放站天线) 极化方式: R(双极化),V(单极化) 增益: 按照实际指标,目前最大为21dbi 接头类型: D(Din头),N(N型头),S(SMA头),T(TNC头)等等 频段: 规格代码:罗马字母表示第几代产品.后面字母和数字表示电调下倾角、赋形、电调等信息.F赋型;V电调;RV远程电调 2.2基站天线 全向天线 双频天线 三频天线 2.3 分布系统天线 烟感器型吸顶天线 灯型吸顶天线 壁挂天线 2.4 室外天线 施主天线: Ø窄波束、方向性强 Ø高前后比 八木天线 角反射天线 抛物面天线 用户天线 三、无源器件概述 3.1 微波无源器件概述         Ø无源器件分为线性器件与非线性器件。         Ø线形无源器件又有互易与非互易之分。         Ø线形互易元件只对微波信号进行线形变换而不改变频率特性,并满足互易原理。         通常我们所说的无源器件指的都是线性互易元件。   3.2 线性互易元件树状图 3.3 功分器         Ø功分器是一种将一路输出信号能量分成两路或多路输出的器件。         本质上是一个阻抗变换器。         Ø是否可以将功分器逆用以取代合路器呢?         Ø在做为合成器使用时,不仅需要高隔离,低驻波比,更侧重于要求承受大功率。         考虑到常用的腔体功分器输出端口不匹配,大驻波;微带功分器反向承受低功率的特点,我们不建议使用功分器逆用来取代合路器。   3.4功分器的分类 3.5功分器分类比较 3.6腔体功分器特点         Ø腔体功分器,采用优质合金作为导体,填充介质为空气;         Ø能承受比较大的功率,最大可达200W;而介质损耗,导体损耗基本上可忽略不计,插入损耗小,能做到0.1dB以下。         Ø但由于没有隔离电阻,输出端口隔离度很小,因此腔体功分器不能作为功率合成器使用.   3.7 功分器测试指标示意图 如图所示,1口可测得驻波比;2,3口可测得插入损耗,而由于腔体功分器本身的器件特点,输出口驻波以及输出口的隔离不作为声明值提出。 四、耦合器介绍 4.1耦合器         Ø耦合器是一种将输入信号的能量通过电场、磁场耦合分配出来一部分成为耦合端输出,剩余部分成为输出端输出,以完成功率分配的元件。         Ø 耦合器的功率分配是不等分的。         又称功率取样器。   4.2四口网络耦合器原理说明图 4.3 耦合器分类 4.4 定向耦合器         Ø定向耦合器常用与对规定流向微波信号进行取样,主要目的是分离及隔离信号,或是相反地混合不同的信号,在无内负载时,定向耦合器往往是一四端口网络.         Ø定向耦合器常有两种方法实现   4.5 腔体耦合器 特点:承载大功率,表现低损耗。 原因: 1.腔体内部填充介质为空气,在传输过程中,因空气介质原因引起的介质耗散要低得多。 2.其耦合线带一般采用导电性良好的导体(如铜表面镀银)制成,导体损耗基本上可忽略不计。 3.腔体体积大,散热快.承受高功率。 4.6耦合器指标测试示意简图 如图所示,其中,方向性=隔离度-耦合度,无法接读取数据。 五、3dB电桥介绍 5.13dB电桥 3dB电桥耦合器是定向耦合器的一种。 作为功率合成器使用时,两路输入信号接入互为隔离端口,而耦合输出和直通输出端口互易.如作为两路输出,不考虑损耗,则输入信号功率之和平分于两输出口。 而当作为单端口输出使用时,另一输出端必须连接匹配功率负载以吸收该端口的输出功率,否则将严重影响到系统传输特性,而这同时,也带来了附加的3dB损耗,这对于系统应用来说,对其有源部分的成本和可靠性都会有影响. 5.2主要工程应用 主要应用于同频段内不同载波间的合路应用。 由于电路和加工装配上的离散性,电桥耦合器输入端口的隔离度比较低,不建议应用在不同频段间的合路应用。 综上,在异频合路应用时,除了同频段内相临载频(如GSM下行频段内的相临载频)等只能采用3dB电桥而不适用双工/多工合路器情况外,建议在使用中优先选用双工/多工合路器,以改善系统的性能指标,增加可靠性. 5.3功分器VS耦合器 六、合路器介绍 6.1合路器         Ø作用:         将多路信号合成一路信号输出         Ø分类:         按实际合路频段进行分类   6.2 合路器VS电桥VS功分器 七、衰减器介绍 7.1衰减器         Ø衰减器是二端口互易元件         Ø衰减器最常用的是吸收式衰减器.         Ø工程中通常使用的是同轴型衰减器,由“π”型或“T”型衰减网络组成。         Ø同轴衰减器通常有固定及可变衰减两种。         Ø衰减器主要用于检测系统中控制微波信号传输能量、消耗超额能量,因而扩展信号测量的动态范围,诸如功率计,频谱分析仪,放大器,接收器等。

  • 发表了主题帖: 分享千兆以太网口电路设计

    网络已经是现代生活中必不可少的基础设施了。对于一般人来讲,在家里可能很少会用到有线网络,但对于在公司工作的时候,大多数还是都在用的网线接口,因此,很多网络类产品也相应占据着一定的市场份额。 而随着科技的发展,千兆网口甚至成为了刚需。今天就来介绍一下网口相关电路。 典型的以太口电路如下图: 上图所示为具体电路,U0903为网口变压器,P0403为网口。PHY出来的信号线上预留10pf对地电容,中心抽头则可以接在一起对地接100pf电容。经过变压器后,新号段直接接RJ45输出至电缆,中心抽头则采用75ohm端接电阻接高压1nf电容接地。 需要指出的是,对于电流驱动型的PHY,共模电感端接RJ45口,另一端接PHY。如下图: 网口变压器 网口变压器都是1:1的变压器,即变压器初级侧和次级侧的电压不会发生变化。而这里使用变压器主要作用有二: 1.实现电气隔离。 弱电器件内部的地电平,跟通过双绞线/电缆的进来的外部地电平电压可能会不统一,因此会导致对弱电器件造成的电器损伤。因此需要变压器进行电气性能隔离。 2.抑制共模噪声。 所有共模噪声通过中心抽头返回地平面,为其提供低阻抗路径,减少了噪声对信号的干扰。这种干扰是双方的,可以减小设备对外的EMI噪声,同时可增强设备的EMS性能,降低外部环境对于设备的干扰。并且对于某些可以供电类的POE产品,提供相应的偏置电压和功率。 传输端端接 在传输端,即接RJ45端,采用bob-smith电路,即中心抽头采用75ohm端接电阻,通过高压电容C接地,进行混合共模/差模端接模式,改善EMI性能。 这种接法广泛应用于LAN口设备中,保证任意信号都有三条回路,通过阻抗匹配,来改善信号的EMI性能,有效滤除共模干扰。 信号 对于千兆网口,采用八条信号线传输;百兆网口虽然同样八条线,但其中四条为空信号对,闲置不用。 千兆网口接口定义: 1 TX_D1+ Tranceive Data+ (发送数据+) 2 TX_D1- Tranceive Data- (发送数据-) 3 RX_D2+ Receive Data+ (接收数据+) 4 BI_D3+ Bi-directional Data+ (双向数据+) 5 BI_D3- Bi-directional Data- (双向数据-) 6 RX_D2- Receive Data- (接收数据-) 7 BI_D4+ Bi-directional Data+ (双向数据+) 8 BI_D4- Bi-directional Data- (双向数据-) 其中,1/2/3/6四条线为百兆网口传输信号线。1/2为TX线差分对,3/6为RX线差分对。4/5/7/8为千兆网口配合传输的数据线,同样为差分信号。示意图如下: 接线时请注意线序,如果带有MDIX功能,即可以输入/输出换续的功能,则1/2和3/6可以调换顺序,4/5,7/8可以调换顺序,否则要严格按照定义连接。 以上为千兆网口电路图解析。主要注意信号线序,端接电路以及变压器方向。  

统计信息

已有413人来访过

  • 芯币:5673
  • 好友:--
  • 主题:2194
  • 回复:127
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


seaskyland 2020-7-24
你好,你发表的C2000的软件串口(SCI)实现方法里面的图片内容都打不开,能给我发一下看看吗,想学习一下,谢谢,邮箱地址:13058594@qq.com
seaskyland 2020-7-24
你好,你发表的C2000的软件串口(SCI)实现方法里面的图片内容都打不开,能给我发一下看看吗,想学习一下,谢谢
桃子瑶瑶 2019-10-12
你的实验很有意思
查看全部