完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
如果您了解ti Hercules产品,采用Hercules产品做过设计,请您分享出Hercules产品的设计心得,有分享、有惊喜! 2012年10月29日 - 2012年11月30日 分享Hercules设计心得,有机会获得价值79美金的TMS570LS31x Hercules USB Stick Development Kit ! 分享要求(不符合以下要求不具备获奖资格): - 每篇主题不少于200字 - 内容要求清晰、详细写出设计心得的具体过程(例如设计中使用哪款产品碰到的问题及其解决的方法和步骤。) - 发表以跟贴形式,需为原创贴 (最好同时配上合适的图片或视频) 奖项设置: - 奖项由 TI 技术专家团队评选,取前五名为优秀分享奖。奖品为TMS570LS31x Hercules USB Stick Development Kit。 - 阳光普照奖 – TI 16G U盘 - 每个ID拥有一次获奖机会。 - TI拥有获奖最终解释权。 |
|
相关推荐
71个回答
|
|
虽然不懂TI Hercules还是来凑下热闹··支持下TI的活动
|
|
|
|
|
|
|
|
大家好,首先,我是天津职业大学的一名学生,看到了TI在此发表的活动,虽然对于TI的Hercules的了解不是很多,但是还是很想学习一下这款片子,通过身边人和网络的介绍,知道了这是一款安全微控器,其频率能达到220Mhz,这么快的处理速度可谓是我现有知道的最快的一款微控器了,之前我也在学习TI公司的MSP430,但是Hercules不知道他的低功耗怎么样,其他的明面比MSP430要强很多,微控器非常适用于先进驾驶辅助系统、电动助力转向、混合动力车和电动汽车、电源轨推进控制、航空防滑控制、越野车等。可以看到,这款微控器可以适用的范围非常广泛,甚至可以在航天领域应用到,他有三个系列,其中两个系列是基于 Cortex-R4 内核的,另一个系列是基于 Cortex-M3 内核的。
这是我听说Hercules的知识,因为是初学,有不对的地方希望大家可以谅解,希望可以获得板子,可以更加深入的学习这款微控器。 希望TI越办越好。 |
|
|
|
|
|
|
|
偶然在同事那里摆弄了一下这个板子, 型号是TMS570LS20216, 看起来新出, 时间不长,我和同事都不很熟, 打算一起深入学习一下, 本文只用入门级参考而已,
1. 学习中使用的硬件环境: 开发板1——TMS570 MCU Development Kit (TMDX570LS20SUSB,TMS570 Safety MCU Demo Board), 这是一个USB接口开发套件,这个开发板自带一个mini emulator—TI XDS100V2 USB JTAG Emulator,直接接到PC的USB端口就可以调试程序,通过这个开发板可以了解一下TMS570的ADC, NHET, CAN, SCI等模块,有点不足的就是这个自带的emulator调试程序效率不高; 2. 学习中需要使用的软件环境: IDE— Code Composer Studio Version, 现在升到 V5了. 外设driver代码生成工具—HAL Code Generator version 2.09.000,Hardware abstraction layer code generator; 这个工具够用了 NHET Assembler—HET Simulator version 1.1; NowECC-- Ecc generator tool; NowFlash—烧写程序用; 3. 学习中需要参考的文档: Technical Reference Manual (TRM) (Rev:C) TMS570LS Serial datasheet—(Rev:F) 还有一些从TI网站上download的application note文档。 结束语 这次看到TI又有活动, 所以也抛砖引玉一下, 希望得到开发板, 可以深入学习一下, 支持TI. 谢谢TI ! |
|
|
|
不懂Hercules,但之前用过MSP430,主要用于公司TV的按键板上;
目前在做测试开发,需要用到一些仪器级别的芯片,希望能送块开发板,用于HDMI的信号发生器的开发,谢谢! |
|
|
|
先占住楼层
|
|
|
|
在长沙已经报名参加培训交流了,不晓得是否报上了? 现在正在使用ti新的载波方案产品C2000,正在调试,却是有很多需要学习的。 |
|
|
|
刚开始熟悉Hercules TMS570起来,使用的是TMS570LS20216 : ARM-Cortex-R4F based high-performance 32-bit RISC Microcontroller with floating point unit. Dual Core in Lockstep for Safety Critical Appliations, 2 MB on-chip Flash ROM, 160KB on-chip SRAM 以及丰富的外设接口,它的速度可以达到160M(140)是之前用的M3 LM3S9B96 80M的两倍。FLASH 与 ROM 的相当大,让我 在设计中暂时没有必要增加 外置的SDRAM 与 FLASH 。我们是在开发,一种微震监控系统,需要对微震信号进行采集传输,信号的频率 0.1HZ-3KHZ 之间,,先采用 TMS570自带的ADC进行采集,通过CAN 高速传输到环网交换机上去,通过光纤最终进入PC用户端。 开发软件没有 使用CCS5.1,也下载了,个人编好,使用KEIL MDK4.54,先对他的各种外设熟悉 和测试 起来:测试ADC的采样速度,采样精度,串口的使用;定时器的使用;CAN代码的编写(CAN协议是个标准的通信协议对于它的使用现在只是简单的通过寄存器级的使用和测试,,还没有把它整成类似CANOPEN协议的形式),以及TMS570的中断程序的测试。在采集震动信号的时候 需要很大的数据缓冲区来存放临时的数据,TMS570大容量的SRAM 为此提供了保证。外设的 项目还在进展中,自己也在之中慢慢学习 和 掌握TMS570的开发。 |
|
|
|
在Hercules™ARM®安全MCU借助高端定时器传输单元来改进系统性能
H e r c u l e s 安全微控制器是基于T I 2 0 多年来对安全有严格要求的系统的专业知识,汽车市场业界协作和已验证合格硬件而研发出的。这个平台包含有3 个基于A R M C o r t e x ™ 的微处理器系列产品( R M 4 8 x , T M S 5 7 0 和T M S 4 7 0 M ) ,提供可升级的性能,连通性,存储器和安全特性。与其它很多严重依赖软件以获得安全性能的微控制器不同,H e r c u l e s 微控制器在硬件中实现安全,从而使得性能最大化并减少软件开销。 H e r c u l e s R M A x 系列产品为主板安全应用提供最高水平性能,包括医学和工业方面的应用,并符合I E C 61508 S I L- 3 安全标准。H e r c u l e s T M S 5 7 0 系列产品为交通运输应用提供较高的性能并且非常适合需要满足I E C 61508 SIL-3 或者 ISO26262 要求的应用。极具性价比的H e r c u l e s TMS470M 系列产品很好地满足了那些对性能和安全水平要求较低的应用需求。 R M 4 8 x 和T M S 5 7 0 的双C P U 同步结构在简化开发过程的同时去除了冗余的系统需求以减少成本。C P U 硬件内置自检(B I S T )无需复杂的安全软件开销即可侦测潜在缺陷。C P U 输出的硬件比较模块提供接近瞬时的安全反应时间而不会对性能产生任何额外的影响。E C C 逻辑集成在C P U 内部以保护内存和总线。所有的R A M 内存能通过使用H W B I S T的高诊断覆盖率进行测试,除此之外,集成的内存保护单元可以帮助防止应用软件中的确定性错误。 本报告显示了如何使用高端定时器传输单元(HTU),一个TMS570和RM4x器件上专门用于多用途可编程定时器协处理器(NHET) 的本地DMA,通过在主存储器和NHET间进行传输来从主CPU上减轻任务负担。它显示了如何设置HTU,涉及当使用HTU时需要考虑的特定细节,并且列出了使用HTU而不是CPU用于数据传输的优势。 1 系统性能注意事项 很对基于微控制器的应用需要生成脉宽调制(PWM)输出,显示复杂的脉冲图形,测量一个进入信号的周期或者脉冲宽度以及更多。HET(还有NHET,N2HET)是一款HerculesMCU上的可编程定时器协处理器,它有助于减少常用定时器/捕捉任务所需的主CPU处理量并且还执行一些不能由传统硬件定时器完成 的任务。然而,在大多数应用中,CPU仍然需要在定时器和主存储器之间传送有很多数据,对于输入和输出信号都是如此,从而减少了CPU用于其它任务的时间。HTU在处理这些传输时非常有用。为了有助于以下讨论,图1显示了一个TMS570或者RM4x安全微控制器架构的简化方框图。对于适用于您器件的方框图,请参阅器件专用数据表。 图1. 典型TMS570/RM4x器件方框图 如果CPU必须访问NHETRAM来更新值或检索数据,路径为通过交换式中央资源到外设中央资源(PCR)。在很多情况下,这些总线运行在不同的频率上,这意味着一个单周期可花费几个周期的时间。CPU需进行的访问的数量越多,它们对于总体系统性能的影响越大。 所以,为什么不使用系统DMA来将所有这些数据传送至定时器?它可以完成并且它将分配CPU的一些空载时间去进行其它操作,但是CPU和DMA共用到PCR的同一个单总线接口。所以如果两个外设都进行访问,那么在两个外设间将出现竞争和仲裁,这将使得其中一个外设慢下来。 HTU通过提供到NHETRAM的直接访问和一个用于直接访问R-4TCMRAM的主控端口来解决这个瓶颈。SCR将通过不同主控到系统的不同受控来实现并发处理。在图1中的示例中,一个CPU到CRC模块的访问,一个到外设的DMA访问,和一个到CPU主RAM的HTU传输,可同时进行。其它优势是,CPU所需的或者需要更新的数据驻留在本地CPURA中,通常计时为一个单周期访问。所以CPU能够更快速地获得相关数据并且能够自由访问针对DMA的PCR,从而增加了总体系统性能。 在边注上,在看见图1时,用户也许会感到奇怪,为什么HTU没有到NHETRAM的直接访问。虽然NHET架构允许同时方位多个不同的RAM位置,在同一个时钟周期内,NHET和HTU仍然有可能在访问同一个存储器位置时发生竞争。通过在能够访问NHETRAM的不同主控之间加入仲裁器,已经将这个情况考虑在内。NHET将一直获得优先级,这样NHET程序执行不会被停止。针对大多数访问情况,Hercules架构已经被设计用于提供非常高的性能。 2 HTU特性 现在已经对HTU如何有助于提升总体系统性能有了一些基本的了解,是时候进一步了解HTU的特性以及它们是如何工作的。这个应用报告将不会专注于每一个单一的HTU特性,但是将为解决更加复杂应用情况提供一个好的基础。 如上所述,HTU是一个到NHET的本地DMA,并且可实现与NHETRAM间的数据传输。由于有多达八条请求线路(HTUREQ[x]) 将NHET和HTU连接起来,它的工作方式与系统DMA相似。某些NHET指令能够在特殊事件出现时在请求线路上生成触发事件。请求被接至控制数据包,此数据包可编辑传输方向,源和目的地址以及应传输多少数据。然后根据存储在控制数据包内的信息,一个被触发的请求开始一个单一或者多个与NHET间的数据传输控制数据包被称为双控制数据包(DCP),这是因为它们提供为双向数据传输建立两个缓冲器的功能。例如,HTU能够在CPU工作在另外一个缓冲器上时,将数据传输到一个缓冲器。一旦HTU已经将其它缓冲器填满,它能够自动切换至另外一个并且开始用新数据来填充此缓冲器。 3 NHET和HTU的设置 您可以使用HTU来将测量数据从NHET传输到主存储器,进入一个单一缓冲器。为了实现这一操作,您创建一个简单的NHET程序,此程序在PCNT指令的帮助下测量输入信号的周期。 3.1 NHET程序 L01 PCNT [next=L02,reqnum=0, request=GENREQ,irq=OFF, type=FALL2FALL,pin=10, period=0,data=0, hr_data=0] L02 BR [next=L01,cond_addr=L01, event=NOCOND] 使用PCNT指令的两个参数第一个是reqnum参数,此参数在在新的测量数据出现在指令数据字段内时告诉NHET和HTU请求信号触发。另外一个参数是request,此指令指定应该生成的请求的类型。会有不同的类型,但是对于这个示例,只使用将被生成的标准请求。 3.2 NHET设置 一旦出现已经被载入到NHETRAM,NHET需要被配置。其中一个需要被编程的寄存器为请求目的选择寄存器(HETREQDS)。这个寄存器是你能够选择生成一个HTU或者DMA请求或者生成这两个请求。对于这个示例,你只需生成一个HTU请求并且PCNT指令选择的请求线路为HTUREQ[0],所以你需要将位TDBS0和TDS0设定为'0'。另外一个寄存器是请求使能设定寄存器(HETREQENS)。这个寄存器启用请求来生成到HTU的触发。位REQENA0需要被设定为'1' 来启用请求HTUREQ[0]。 void hetInit(void) [ … HETREQDS &= 0xFFFEFFFE; /* Set bits TDBS0and TDS0 to 0 */ HETREQENS |= 0x00000001; /* Enable request HTUREQ[0] */ … ] 3.3 HTU设置 接下来,您必须配置HTU。在您进行此操作前,您应该定义存储测得数据的缓冲器的大小。对于此示例,您希望捕捉条目。 在HTU中,根据所选的HTUREQ信号,您需要设置几个寄存器和控制数据包。 对于控制数据包,您必须定义测得的数据将被存储的起始地址,测得的数据将被读取的PCNT指令的NHET数据字段的地址,以及应该传输多少元素和数据帧。每个新的HTU请求将触发一个数据帧传输。每个数据帧可以有一个或者多个元素。所以,例如,如果只需传送一条单一指令的一个字段,一个数据帧内的元素数量将为1。如果使用一个单HTU请求来传送来自多个指令的多个字段,元素数量应该与需要被传送的字段数量相对应。图2显示了元素和数据帧的示例。 图2.元素和数据帧数量示例 一个元素可以是32位或者64位宽。 在这个示例中,您只将PCNT数据字段移动到缓冲器内,所以您必须将每个帧的元素数量设置为'1' 并且由于缓冲器为10条目深,您需要将数据帧数量设置为'10'。PCNT指令的数据字段位于NHETRAM的0x8地址上。请注意,由于HTU可直接访问NHET存储器,您无需为ARMCPU指定32位地址。为了完成控制数据包设置,您需要数据将被传输的目的地址,此目的地址与缓冲器的起始地址相对应。 … unsigned int bufferA[10]; … void HTU_init(void)[ … htuCPRAM ->DCP[0].ITCOUNT = 0x0001000A; /* DCP0 CPA element count= 1, framecount= 10 */ htuCPRAM ->DCP[0].IHADDRCT= 0x00000008; /* DCP0 CPA DIR = NHET to main memory */ /* SIZE = 32-bit */ /* ADDMH= 16 bytes(not relevant for */ /* this example) */ /* ADDFM= post-increment main memory */ /* TMBA = one shot buffer A */ /* TMBB = one shot buffer B (not rel.)*/ /* IHADDR = 0x2 => 0x8 PCNT data field*/ htuCPRAM ->DCP[0].IFADDRA = (unsigned int)bufferA; /* DCP0 CPA startaddress of destination buffer */ … ] 缓冲器被设置为单触发模式。这意味着它将被填充一次并且当被填满时,虽然NHET仍将生成到HTU的请求,但是HTU将不传输任何额外的数据。 4 示例项目 此项目可被配置为一个处于单触发模式中的单缓冲器,就如上面说明的那样,或者处于双缓冲器自动切换模式。进而,它可被配置成当缓冲器被填满时,生成一个中断。 可在main.h文件中进行配置。 #define BUFFERSIZE20 /* size of the single or double buffer */ #define INT 0 /* 0 = interrupt disabled; 1 = interrupt enabled */ #define DOUBLEBUFFER 0 /* 0 = single buffer; 1 = double buffer */ 项目需要在每次配置被改变时建立。 无需将一个外部PWM信号应用于引脚NHET[10],这是由于项目利用了软件能够将引脚设置为输出并且通过写入HETDOUT或HETDSET或HETDCLR寄存器来切换引脚,以及NHET程序通过引脚结构的回路功能来测量信号周期等这些实际情况。 捕捉周期被存储在数组bufferA和bufferB之中。如果中断被启用,那么可在变量htu_highintcp0a_count和htu_highintcp0b_count中检查被执行的中断的数量。 5 结论 本报告澄清了使用高端定时器传输单元的优势。虽然本文使用的示例非常简单,但它应该提供了模块的基本功能性。与NHET的灵活性结合在一起,通过使用HTU来减轻主CPU处理普通任务的负担,有很多应用能够从中受益;从而将CPU解放出来处理其它任务。 项目关键代码: HTU.C * Setup HTU Registers and Control Packets */ #include "htu.h" #include "main.h" extern unsigned int bufferA[BUFFERSIZE]; extern unsigned int bufferB[BUFFERSIZE]; extern unsigned int htu_highintcp0a_count; extern unsigned int htu_highintcp0b_count; extern unsigned int htu_lowintcp0a_count; extern unsigned int htu_lowintcp0b_count; #if DOUBLEBUFFER void htuInit(void)[ htuCPRAM ->DCP[0].ITCOUNT = 0x00010000 + BUFFERSIZE; /* DCP0 CPx element count = 1, frame count = BUFFERSIZE */ htuCPRAM ->DCP[0].IHADDRCT = 0x000F0008; /* DCP0 CPx DIR = NHET to main memory */ /* SIZE = 32-bit */ /* ADDMH = 16 bytes */ /* ADDFM = post-increment main memory */ /* TMBA = auto switch buffer A */ /* TMBB = auto switch buffer B */ /* IHADDR = 0x2 => 0x8 PCNT data field */ htuCPRAM ->DCP[0].IFADDRA = (unsigned int)bufferA; /* DCP0 CPA start address of destination buffer */ htuCPRAM ->DCP[0].IFADDRB = (unsigned int)bufferB; /* DCP0 CPB start address of destination buffer */ #if INT htuREG ->BFINTS = 0x00000003; /* enable buffer full interrupt for DCP0 CPA and CPB*/ #else htuREG ->BFINTC = 0x00000003; /* disable buffer full interrupt for DCP0 CPA and CPB*/ #endif htuREG ->CPENA = 0x00000001; /* enable DCP0 CPA */ htuREG ->GC = 0x00010000; /* enable HTU */ ] #else void htuInit(void)[ htuCPRAM ->DCP[0].ITCOUNT = 0x00010000 + BUFFERSIZE; /* DCP0 CPx element count = 1, frame count = BUFFERSIZE */ htuCPRAM ->DCP[0].IHADDRCT = 0x00000008; /* DCP0 CPx DIR = NHET to main memory */ /* SIZE = 32-bit */ /* ADDMH = 16 bytes */ /* ADDFM = post-increment main memory */ /* TMBA = one shot buffer A */ /* TMBB = one shot buffer B (not rel.) */ /* IHADDR = 0x2 => 0x8 PCNT data field */ htuCPRAM ->DCP[0].IFADDRA = (unsigned int)bufferA; /* DCP0 CPA start address of destination buffer */ #if INT htuREG ->BFINTS = 0x00000001; /* enable buffer full interrupt for DCP0 CPA and CPB*/ #else htuREG ->BFINTC = 0x00000001; /* disable buffer full interrupt for DCP0 CPA and CPB*/ #endif htuREG ->CPENA = 0x00000001; /* enable DCP0 CPA */ htuREG ->GC = 0x00010000; /* enable HTU */ ] #endif /* Interrupt Service Routine for the HTU high level interrupt */ #pragma INTERRUPT(htuHighLevelInterrupt, IRQ) void htuHighLevelInterrupt(void)[ volatile unsigned int dummy; dummy = htuREG ->INTOFF0; /* read of offset register will automatically clear the interrupt flags */ switch(dummy & 0x00000300)[ case 0x00000100 : [ if ((dummy & 0x0000000F) == 0x0) htu_highintcp0a_count++; else if ((dummy & 0x0000000F) == 0x1) htu_highintcp0b_count++; ] break; default : break; ] ] /* Interrupt Service Routine for the HTU low level interrupt */ #pragma INTERRUPT(htuLowLevelInterrupt, IRQ) void htuLowLevelInterrupt(void)[ ] main.c #include "sys_common.h" #include "system.h" #include "main.h" #include "het.h" #define WAIT 100 unsigned int bufferA[BUFFERSIZE]; unsigned int bufferB[BUFFERSIZE]; unsigned int htu_highintcp0a_count = 0; unsigned int htu_highintcp0b_count = 0; unsigned int htu_lowintcp0a_count = 0; unsigned int htu_lowintcp0b_count = 0; void main(void) [ while(1)[ hetREG ->DSET = 0x00000400; /* Set pin NHET[10] */ for(delay = 0; delay < WAIT; delay++); hetREG ->DCLR = 0x00000400; /* Clear pin NHET[10] */ for(delay = 0; delay < WAIT; delay++); ] ] |
|
|
|
在TI Hercules™ARM®安全MCU上配置一个CAN节点 下图展示了TI Hercules™ARM®安全MCU的家庭成员: 德州仪器(TI) 生产的Hercules系列微控制器是系列32位RISC微控制器,此微控制器具有高级ARM架构和一个丰富的外设集。 这个报告描述了一个配置CAN节点以及在网络上执行CAN通信的典型步骤。 1 简介 1.1 控制器局域网络(CAN) 控制器局域网是一个串行多主控通信协议,此协议高效支持分布式实时控制,具有高级安全级别,和一个高达1Mbps的通信速率。 CAN总线是嘈杂和恶劣的环境,诸如汽车和其他要求可靠通信的工业领域应用的理想选择。 外设支持以下特性: • 协议: – 支持CAN协议版本2.0部分A.B • 时钟和速度: – 高达1M位每秒的比特率 – 双时钟源 • 消息目标/消息对话框: – 16,32,64或128消息目标(器件专用) – 针对每个消息目标的独立标识符掩码 – 针对消息目标的可编程先进先出(FIFO) 模式 • 中断: – 到中断模块的两条中断线路 • 低功耗支持: – 全局断电和唤醒支持 – 本地断电和唤醒支持 • 突发传输支持 – 通过DMA的数据传输 • 调试支持: – 针对自检运行的可编程回路模式 – 测试期间到消息RAM的直接访问 – 针对调试支持的挂起模式 • 其它: – 由一个32位定时器实现的总线关闭后的自动总线打开 – CANRx/Tx引脚可配置为通用输入输出(IO)引脚 1.2 CAN收发器接口图 图1显示了一个典型的CAN收发器接口。 图1.CAN收发器接口 2 初始化CAN外设 下面常见的步骤涉及初始化CAN。 • CANRAM初始化(建议在引导期间使用) • CAN配置 • CAN波特率配置 初始化CAN之后,邮箱需要按照应用的要求配置。 下面的小节详细介绍了CAN初始化过程。 2.1 CANRAM初始化 CANRAM保存CAN消息目标(也被成为邮箱)。要开始初始化,通过配置系统寄存器,RAM应该由硬 件被初始化为零。 为了初始化CANRAM: 1. 切换到存储器初始化模式:MINITGCR.MINITGNA=0xA 2. 设定MSINENA。相对于DCANRAM的存储器初始化使能寄存器(MSIENAx)位 3. 通过检查存储器硬件初始化状态寄存器(MINISTAT),等待存储器初始化完成。 4. 从存储器初始化模式中退出。 初始化RAM的代码示例: SYS_Ptr->MINITGCR_UN.MINITGCR_UL = 0xA; SYS_Ptr->MSINENA_UL = MEM_CH_DCANRAM; while(SYS_Ptr->MINISTAT_UL == 0); SYS_Ptr->MINITGCR_UN.MINITGCR_UL = 0x5; 如果您计划使用奇偶校验或ECC,您需要在RAM初始化过程之前启用它。 下面是启用奇偶校验/ ECC的示例代码: DCAN1_Ptr->CCR_UN.CCR_ST.PMD_B4= 0xA 2.2 CAN配置 通过软件可配置CAN的以下特性: • 禁用/启用总线活动时的自动唤醒。[位:CCR.WUBA-总线活动时的自动唤醒] • 启用/禁用自动总线打开定时器。[位:CCR.ABO-自动总线打开] • 启用/禁用奇偶校验/ ECC。[位:CCR.PMD-奇偶校验模式位] • 启用/禁用全局中断线路0和1。[位:CCR.IEx- 中断使能] • 启用/禁用错误中断。[位:CCR.EIE-错误中断使能] • 禁用/启用状态中断。[位:CCR.SIE-状态中断使能] • 设置消息的自动重传。[位:DAR- 禁用自动重传] • 请求到配置寄存器的写入权限。[位:CCR.CCE-配置改变使能] • 进入调试状态前,设置消息完成。[位:CCR.IDS] • 禁用/启用本地断电模式。[位:CCR.PDR] • 禁用/启用DMA请求线路。[位:DEx] • 启用/禁用测试模式。[位:CCR.Test] 示例CAN配置代码: Void CanInit (void [ /**@bInitializ @b DCAN1: */ canREG1->CTL = 0x00021443U; /* Configure CAN */ /** - Clearall pending errorflagsand resetcurrent status */ canREG1->ES = ox0000031Fu; /** - Assign interrupt levelfor messages */ canREG1->INTMUXx[0U] = MessageBoxNo; canREG1->INTMUXx[1U] = 0x00000000U; /** - Setupauto bus on timerperiod */ canREG1->ABOTR= 0U; ] 2.3 配置CAN波特率 通过计算位时序值并且将这个值编辑进位时序寄存器(BTR) 来设定CAN数据传输波特率。 要初始化CAN波特率: 1. 设定CANCONTROL.init位。这将把CAN置于初始化模式中。 2. 设定配置改变使能(CANCONTROL.CCE) 位。这将启用到BTR寄存器的写入访问。 3. 将经计算的位时序元件值写入BTR寄存器。 4. 清除CANCONTROL.init位之前的CANCONTROL.CCE位。 图4.CAN波特率配置 /* Baudrate configuration */ DCAN1_Ptr->CCR_UN.CCR_ST.INIT_B1 = 1 ; /* EnterInitialization Mode */ DCAN1_Ptr->CCR_UN.CCR_ST.CCE.B1 = 1 ; while(DCAN1_Ptr->CCR_UN.CCR_ST.INIT_B1 == 0) ; /* With CAN clock(CAN_CLK) of 8 MHz and BRPE = 0x00, the BRT valueof 0x2301 configuresthe CAN for a bit rate of 500kBits/s. */ DCAN1_Ptr->CCR_UN.BTR_UL = 0x2301 ; DCAN1_Ptr->CCR_UN.CCR_ST.CCE.B1 = 0 ; DCAN1_Ptr->CCR_UN.CCR_ST.INIT_B1 = 0 ; while(DCAN1_Ptr->CCR_UN.CCR_ST.INIT_B1 == 1) ; /* EnterNormal Mode */ 2.4 CAN消息目标 表1中显示了CAN消息目标(也称为CAN邮箱)的结构。 表1.CAN消息目标 表1有以下三个关键组件: • ID:消息ID(具有扩展的消息ID,Xtd) • DLC:消息长度 • Datax:消息数据(高达8字节) 此外,表1有下列控制位: • 消息有效(MsgVal):表示消息有效。 • 方向(Dir):表示邮箱是发送还是接收 • 标识符屏蔽(Msk):表示ID 中可被屏蔽的位 • 屏蔽扩展标识符(MXtd):表示扩展ID Xtd的屏蔽位 • 屏蔽消息方向(MDir):表示Dir是否应该被屏蔽。 • 使用接受屏蔽(UMask):表示屏蔽位是否将被使用。 • 块末尾(EoB):表示FIFO缓冲器的最后一条消息 • 发送中断使能(TxIE):提供一个数据传输后的中断。 • 接收中断使能(RxIE):提供一个数据接收后的中断。 • 中断等待(IntPnd):表示中断在等待这个消息目标。 • 新数据(NewDat):表示新数据在消息目标中可用。 • 时序请求(TxRqst):请求数据传输 • 远程使能(RmtEn):启用消息目标接收远程帧。 2.5 CAN接口寄存器 消息目标只能通过接口寄存器(IFx) 访问。这是为了避免当CPU和DMA都尝试访问消息目标时仲裁的发生。在每个IFx 访问期间,消息目标中所选的项目可按照需要更新。一次只能访问一个消息目标(针对读取/写入)。总共有三个接口寄存器。接口寄存器(IFx) 运行期间,相应的繁忙位保持高电平。消息目标1的优先级最高,而最后执行的消息目标具有优先级最低。如果有多于一个传输请求在等待,它们被按照优先级被处理。 接口寄存器IF1 和IF2 是完全一样的。 图5.IF1/2 寄存器位 命令寄存器指定数据传输的方向(来自/到消息目标)以及传输哪部分消息目标并且选择一个消息RAM中的消息目标作为传输的目标或者源。 仲裁寄存器用消息ID 来启用/禁用消息目标并且将其配置为发送或接收。 消息控制寄存器定义数据尺寸和其它配置,这些配置在消息目标初始化期间完成。 数据寄存器保存将被传输或被接收的数据。 每个消息目标可按照接口寄存器的要求进行配置。 IF3 寄存器集可使用接收到的消息目标进行自动更新,而无需初始化来自消息RAM的传输。可针对每一个消息目标独立编辑自动更新功能。 图6.IF3 寄存器 3 配置字消息目标 基本上,一个消息目标可被配置为: • 发送消息对象 • 接收消息目标 图7是一个用于配置一个CAN消息目标的逻辑图。 图7.CAN消息目标配置-逻辑图 必须通过接口寄存器(IFx) 来完成消息目标的配置。 配置一个消息目标所需的最少步骤为: 1. 等待IFx 可被使用。 2. 设定消息屏蔽。 3. 设定消息仲裁。 4. 设定消息控制字。 5. 设定IFx 控制字节。 6. 设定IFx 消息数量。 通过两个方法中的任何一个可执行CAN通信: • 中断方法 • 轮询方法 3.1 将CAN消息目标配置为发送 下面是一个配置一个传输消息目标的示例代码: while(canREG1->IF1STAT & 0x80); canREG1->IF1MSK = 0xC0000000U | ((0x000007FFU & 0x1FFFFFFFU0 << 0U) ; canREG1->IF1ARB = 0x80000000U | 0x40000000U | 0x20000000U | ((1U & ox1FFFFFFFU) << 0U) ; canREG1->IF1MCTL = 0x00001080U | 0x00000C00U | 8U ; canREG1->IF1CMD = 0x20 ; canREG1->IF1NO = 1 ; 示例代码解释: 1. 如果IF1 忙则等待。 2. 配置屏蔽寄存器。 MXtd = 1 使用扩展ID 屏蔽 MDir = 1 使用消息方向屏蔽 Msk = 0x7FF 用位10:0来过滤 3. 配置仲裁寄存器 MsgVal = 1 启用消息目标 Xtd = 1 扩展的25位标识符 Dir = 1 发送邮箱 ID 1 消息ID 0x1 4. 配置消息控制寄存器 UMask = 1 使用屏蔽来过滤 EoB = 1 单一消息目标 TxIE = 1 启用传输中断 RxIE = 1 启用接收中断 DLC = 8 将数据长度设定为8 5. 配置命令寄存器 消息号 = 0x20 消息号位0x20 3.2 将CAN消息目标配置为接收 下面是配置一个接收消息目标的示例代码: while(canREG1->IF2STAT & 0x80); canREG1->IF2MSK = 0xC0000000U | ((0x000007FFU & 0x1FFFFFFFU0 << 0U) ; canREG1->IF2ARB = 0x80000000U | 0x40000000U | 0x00000000U | ((2U & ox1FFFFFFFU) << 0U) ; canREG1->IF2MCTL = 0x00001080U | 0x00000C00U | 8U ; canREG1->IF2CMD = 0x22 ; canREG1->IF2NO = 2 ; 示例代码解释 1. 如果IF2 忙则等待。 2. 配置屏蔽寄存器。 MXtd = 1 使用扩展ID 屏蔽 MDir = 1 使用消息方向屏蔽 Msk = 0x7FF 使用位10:0来过滤 3. 配置仲裁寄存器。 MsgVal = 1 启用消息目标 Xtd = 1 扩展25位标识符 Dir = 0 接收邮箱 ID 2 消息ID 0x2 4. 配置消息控制寄存器 UMask = 1 使用屏蔽来过滤 EoB = 1 单一消息目标 TxIE = 1 启用发送中断 RxIE = 1 启用接收中断 DLC = 8 将数据长度设定为8 5. 配置命令寄存器 消息号 = 0x22 消息号为0x22 3.3 CAN发送/接收操作 unsigned canTransmit (canBASE_t*node, unsigned messageBox, constunsigned char *data) [ unsigned I; unsigned success = 0U; unsigned regIndex = (messageBox - 1U) >> 5U; unsigned bitIndex = 1U << ((messageBox - 1U) & 0x1FU); /** - Checkfor pending message: * - pending message, return 0 * - no pending message, startnew transmission */ if (node->TXRQx[regIndex]& bitIndex) [ return success; ] /** - Wait untilIF1 is readyfor use */ while(node->IF1STAT & 0x80); /** - Copy TX data into IF1 */ for (I = 0U < 8U; I++) [ node->IF1DATx[s_canByteOrder] = *data++; ] /** - Copy TX data into message box */ node->IF1NO= messageBox; success = 1U; /** @noteThe function canINIT has to be called before this function can be used.n * The user is responsible to initializethe message box. */ return success; ] 下面是一个接收CAN数据的示例代码: unsigned canGetData(canBASE_t*node, unsigned messageBox, unsigned char * constdata) [ unsigned I; unsigned size; unsigned char *pData = (unsigned char *) data; unsigned success = 0U; unsigned regIndex = (messageBox - 1U) >> 5U; unsigned bitIndex = 1U << ((messageBox - 1U) & 0x1FU); /** - Checkif new data has arrived: * - no new data,return 0 * - new data,get received message */ if (!(node->NWDATx[regIndex] & bitIndex)) [ return success; ] /** - Wait untilIF2 is readyfor use */ while(node->IF2STAT & 0x80); /** - Copy data into IF2 */ node->IF2NO= messageBox /** - Wait untildata are copied into IF2 */ while(node->IF2STAT & 0x80); /** - Get number of received bytes*/ size = node->IF2MCTL & 0xFU; /** - Copy RX data into destination buffer */ for (I = 0U; I < size;I++) [ *pData++ = node->IF2DATx[s_canByteOrder]; ] success = 1U; /** - Checkif data has been lost: * - no data lost,return 1 * - data lost,return 3 */ if (node->IF2MCTL & 0x4000U) [ success = 3U; ] return success; ] 图8说明了处理接收中断的流程。 图8.处理CAN消息接收 4 软件流 这一小节显示了针对一个CAN节点的软件流汇总。 1. 针对消息目标来初始化CANRAM空间。 2. 配置CAN通用参数(DMA,中断,自动给唤醒,等)。 3. 配置所需的CAN波特率。 4. 用所需的ID 和屏蔽来配置需要的消息目标。 5. 根据中断模式或轮询模式提供发送/接收例程。 附录A 采样位时序 图9和图10说明了针对一个500和1000比特率计算的采样位时序,此时序被编辑进位时序寄存器。 针对位速率=500的采样位时序计算 图9.针对500kb的采样位时序计算 位时序寄存器值: BRPE=(0U<<16U) TSEG2:PHASESEG2=((2U-1U)<<12U) TSEG1:PROPSEG+PHASESEG1=(((3U+2U)-1U)<<8U) SJW:((2U-1U)<<6U) BRP=9U; 针对位速率=1000的采样位时序计算 图10.针对1000kb的采样位时序计算 位时序寄存器值: BRPE=(0U<<16U) TSEG2:PHASESEG2=((1U-1U)<<12U) TSEG1:PROPSEG+PHASESEG1=(((7U+1U)-1U)<<8U) SJW:((1U-1U)<<6U) BRP=3U; |
|
|
|
第一次听说,刚出来的新产品吧!了解了一下下……
1. 主要应用的领域为医疗、工业及交通应用的新型Hercules安全微控制器平台,该平台专为帮助开发人员获得安全性认证而设计。 2.特点如下 ●锁步的双ARM Cortex-R4F浮点内核可提供最高水平的在线诊断; ●CPU和全部总线主设备,包括存储器保护; ●用于具有单位纠错和双位纠错(SECDED)能力的闪存及RAM的纠错码(ECC)在锁步CPU中进行评估,不会对性能造成影响; ●CPU和RAM包括用于检测潜在的不易察觉故障的内置自测(BIST)功能,而不会产生软件开销; ●对外设RAM、双通道模数转换器(ADC)和定时器、以及电压与时钟监测实施奇偶校验,以扩大诊断所覆盖的范围; ●智能型错误信号传输模块允许终端应用根据错误类型采取适当的措施; ●安全手册详细说明了如何将Hercules MCU引入安全关键型应用; ●失效模式、影响及诊断分析(FMEDA)可提供满足此类安全性标准所需的失效率信息。 Hercules RM4x MCU系列的特性与优势: ●运行频率高达220 MHz(基于锁步的双 ARM Coretex-R4F 浮点内核),可提供适合工业自动化、伺服驱动器及医疗仪器(如诊断和治疗设备)的高性能; ●支持单精度和双精度浮点数学,可执行复数数学运算; ●能达到国际电工委员会 (IEC) 61508 SIL-3安全标准的要求; ●在对于安全关键型工业自动化和医疗设备应用而言至关重要的联网能力方面,可提供以太网、CAN及USB连接; ●高达3 MB闪存和256KB RAM,可满足多功能应用。 Hercules TMS570 MCU系列的特性与优势: ●运行频率高达 180 MHz(基于锁步的双 ARM Coretex-R4F 浮点内核),可提供适合交通应用(如铁路、航空及汽车)的性能; ●支持单精度和双精度浮点数学,可执行复数数学运算; ●能达到ISO 26262 ASIL-D 和 IEC 61508 SIL-3 安全标准的要求,并符合 AEC-Q100 标准,可满足汽车应用的要求; ●可在高达 125℃ 的温度条件下工作,以适应交通应用的温度范围; ●可提供以太网、CAN 及 FlexRay 连接,以实现现有及不断发展的交通应用所需的较高带宽联网能力; ●高达 3 MB 闪存和 256KB RAM,可满足多功能应用。 Hercules TMS470M MCU 系列的特性与优势: ●运行频率高达 80MHz(基于一个 ARM Coretex-M3内核),可提供成本效益型性能; ●符合 AEC-Q100 标准,可满足汽车应用的要求,并支持IEC 61508 系统安全要求; ●本地互连网络 (LIN) 和 CAN 可支持常见的交通联网; ●320~640KB 闪存及 16~48KB RAM可满足不同的内存要求。 ●锁步的双ARM Cortex-R4F浮点内核可提供最高水平的在线诊断; ●CPU和全部总线主设备,包括存储器保护; ●用于具有单位纠错和双位纠错(SECDED)能力的闪存及RAM的纠错码(ECC)在锁步CPU中进行评估,不会对性能造成影响; ●CPU和RAM包括用于检测潜在的不易察觉故障的内置自测(BIST)功能,而不会产生软件开销; ●对外设RAM、双通道模数转换器(ADC)和定时器、以及电压与时钟监测实施奇偶校验,以扩大诊断所覆盖的范围; ●智能型错误信号传输模块允许终端应用根据错误类型采取适当的措施; ●安全手册详细说明了如何将Hercules MCU引入安全关键型应用; ●失效模式、影响及诊断分析(FMEDA)可提供满足此类安全性标准所需的失效率信息。 Hercules RM4x MCU系列的特性与优势: ●运行频率高达220 MHz(基于锁步的双 ARM Coretex-R4F 浮点内核),可提供适合工业自动化、伺服驱动器及医疗仪器(如诊断和治疗设备)的高性能; ●支持单精度和双精度浮点数学,可执行复数数学运算; ●能达到国际电工委员会 (IEC) 61508 SIL-3安全标准的要求; ●在对于安全关键型工业自动化和医疗设备应用而言至关重要的联网能力方面,可提供以太网、CAN及USB连接; ●高达3 MB闪存和256KB RAM,可满足多功能应用。 Hercules TMS570 MCU系列的特性与优势: ●运行频率高达 180 MHz(基于锁步的双 ARM Coretex-R4F 浮点内核),可提供适合交通应用(如铁路、航空及汽车)的性能; ●支持单精度和双精度浮点数学,可执行复数数学运算; ●能达到ISO 26262 ASIL-D 和 IEC 61508 SIL-3 安全标准的要求,并符合 AEC-Q100 标准,可满足汽车应用的要求; ●可在高达 125℃ 的温度条件下工作,以适应交通应用的温度范围; ●可提供以太网、CAN 及 FlexRay 连接,以实现现有及不断发展的交通应用所需的较高带宽联网能力; ●高达 3 MB 闪存和 256KB RAM,可满足多功能应用。 Hercules TMS470M MCU 系列的特性与优势: ●运行频率高达 80MHz(基于一个 ARM Coretex-M3内核),可提供成本效益型性能; ●符合 AEC-Q100 标准,可满足汽车应用的要求,并支持IEC 61508 系统安全要求; ●本地互连网络 (LIN) 和 CAN 可支持常见的交通联网; ●320~640KB 闪存及 16~48KB RAM可满足不同的内存要求。 |
|
|
|
占座,准备一下,U盘该有个TI的LOGO了
|
|
|
|
支持,先表示一下,呵呵。给力
|
|
|
|
论坛的活动时间是10/29-11/30, 但邮件说明的投稿时间是11/01-11/30, 我都有点糊涂了, 不管怎么, 再发一遍吧, 管理员也看看, 是不是要重新声明一下, 告诉大家一个统一的时间, 下面是10/31日的回贴,
偶然在同事那里摆弄了一下这个板子, 型号是TMS570LS20216, 看起来新出, 时间不长,我和同事都不很熟, 打算一起深入学习一下, 本文只用入门级参考而已, 1. 学习中使用的硬件环境: 开发板1——TMS570 MCU Development Kit (TMDX570LS20SUSB,TMS570 Safety MCU Demo Board), 这是一个USB接口开发套件,这个开发板自带一个mini emulator—TI XDS100V2 USB JTAG Emulator,直接接到PC的USB端口就可以调试程序,通过这个开发板可以了解一下TMS570的ADC, NHET, CAN, SCI等模块,有点不足的就是这个自带的emulator调试程序效率不高; 2. 学习中需要使用的软件环境: IDE— Code Composer Studio Version, 现在升到 V5了. 外设driver代码生成工具—HAL Code Generator version 2.09.000,Hardware abstraction layer code generator; 这个工具够用了 NHET Assembler—HET Simulator version 1.1; NowECC-- Ecc generator tool; NowFlash—烧写程序用; 3. 学习中需要参考的文档: Technical Reference Manual (TRM) (Rev:C) TMS570LS Serial datasheet—(Rev:F) 还有一些从TI网站上download的application note文档。 结束语 这次看到TI又有活动, 所以也抛砖引玉一下, 希望得到开发板, 可以深入学习一下, 支持TI. 谢谢TI ! |
|
|
|
争取一下,没有使用过该产品,我先关注希望今后的开发中用到Hercules
|
|
|
|
一直在用TI 2000系列的MCU,觉得很好用,尤其是退出28335之类的芯片之后,做浮点运算的性能大大提高,现在只知道Hercules产品是基于ARM核的安全控制器,暂时没有用过,很想获得开发板学习一下,以后用到项目中。根据下面的介绍,感觉是一款很好的控制器,希望能被大家快速的接收,并应用到实际项目中去。支持TI!!! 德州仪器 (TI) 宣布推出 12 款新型 Hercules™ TMS570 ARM® Cortex™-R4 安全微控制器,与 TI 的 TPS65831-Q1 多轨安全电源管理集成电路 (PMIC) 和 DRV3201-Q1 安全电机驱动器相得益彰。Hercules TMS570 安全微控制器以及 TI 首款功能安全 PMIC 和业界首款功能安全电机驱动器联袂形成“安全电机控制芯片组”,可最大限度地提升故障检测和缓解能力,同时把软件开销降到最低。新型电机控制安全芯片组随附于 SafeTI-26262 和 SafeTI-61508 设计软件包,能帮客户更轻松地获取面向安全关键型汽车及交通运输电机控制应用的 ISO 26262 与 IEC 61508 认证,并加快产品上市进程 |
|
|
|
占座,看看TI的小U盘。。。
|
|
|
|
前几个礼拜刚好借了同学的TMS570LS3137开发板调试了RTI中断,感觉有些难度,本来只是想玩玩,没想到还是花了挺多时间的,这里简单讲讲整个过程。
1、首先新建了一个基于TMS57LS3137 USB Kit的HALCoGen工程,然后选择使能RTI驱动模块。再去配置中断,包括:(1、选择 VIM Channel 0-31 标签;2、使能VIM Channel 2 (RTI Compare 0) ;3、将 VIM 通道2映射为IRQ中。) 2、配置实时中断比较器的值 选择 RTI1 àRTI1 Compare标签;配置RTI比较器0 的周期值为1000ms:在周期编辑框中输入1000.000。 3、生成代码 所有的RTI相关设置已经完成. 根据刚才做的配置,生成相应的源代码 4、进行CCS导入及配置:确认建立CCS工程文件的保存路径和建立HALCoGen项目的路径相同。启动 CCSV5,在CCS界面中,创建一个新的CCS 项目。 5、对新建的CCS项目进行配置 要注意到项目同名、同路径,芯片型号,调试工具等,都设置好了以后,删除CCS自动生成的main.c文件,因为HALCoGen已经自动生成了相关的system_main.c 6、配置片上Flash与ARM编译器 7、在CCS项目中添加代码 /* USER CODE BEGIN (0) */ /* Include RTI and NHET header file */ #include "rti.h" /* USER CODE END */ 在main()函数中添加相关配置代码 void main(void) [ /* USER CODE BEGIN (3) */ /* Initialize RTI driver */ rtiInit(); /* Set high end timer GIO port hetPort pin direction to all output */ /* Enable RTI Compare 0 interrupt notification */ rtiEnableNotification(rtiNOTIFICATION_COMPARE0); /* Enable FIQ - Clear F flag in CPS register */ /* Note: This is usually done by the OS or in an svc dispatcher */ _enable_IRQ(); /* Start RTI Counter Block 0 */ rtiStartCounter(rtiCOUNTER_BLOCK0); /* Run forever */ while(1); /* USER CODE END */ ] 中断响应函数模块 /* USER CODE BEGIN (4) */ /* RTI Compare 0 interrupt notification */ void rtiNotification(unsigned notification) [ /* Toggle NHET1[0] pin */ ] /* GIO interrupt notification (Not used but must be provided) */ /* ESM interrupt notification (Not used but must be provided) */ void esmGroup1Notification(int bit) [ return; ] void esmGroup2Notification(int bit) [ return; ] /* USER CODE END */ 8、代码完善后,开始编译整个项目 编译成功后,会生成调试所需的.out 文件,以便调试。程序下载和调试。单击Debug快捷按钮,下载程序并进入调试模式。然后在Debug模式下,单击运行快捷按钮,开始运行程序。 |
|
|
|
只有小组成员才能发言,加入小组>>
336 浏览 1 评论
529 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
774 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
651 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1130 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
63浏览 29评论
158浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
253浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
202浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
60浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 20:03 , Processed in 1.201427 second(s), Total 84, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号