This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

(活动结束) 晒经验,拿板子!快来分享!US$79 Hercules开发板免费赠!

Other Parts Discussed in Thread: TMS570LS20216, DRV3201-Q1, TMS570LS3137, HALCOGEN, TPS65381-Q1, F021FLASHAPI, RM42L432, CONTROLSUITE

如果您了解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拥有获奖最终解释权。

  • 不知道为什么,我上传的图片看不到呢?

  • 其次,我使用SPI总线时,发现总有数据读取出错,SPI总线的时序图如下:后来我发现出错的原因不是我程序时序调得不对,而是我SPI个外设芯片的参考地与TMS570LS地线有压差,而导致数据读取时出错了。

     
  • Hercules系列MCU入门学习分享 (原创 已在EEWORLD上发表,现在在这里综合下)

    什么是 Hercules?

    Hercules 安全微处理器是基于 TI 针对汽车电子市场的 20 多年安全关键型系统专业技术、行业协作而发展成熟的硬件。该平台包含三个基于 ARM® Cortex™ 的微处理器系列(RM48x、TMS570 和 TMS470M),可提供可扩展的性能、连接、内存和安全功能。与强烈依赖于软件以获得安全功能的某些微处理器不同,Hercules 微处理器在硬件内实施安全保护,从而使性能最佳化并减少软件使用。

    硬件的安全使用

    RM48x 和 TMS570 双核 CPU 锁步构架在消除冗余系统要求的同时也使开发得以简化,从而降低了成本。CPU 硬件内置自检 (BIST) 无需复杂安全软件和代码大小费用即可检测到潜在缺陷。CPU 输出的硬件比较提供即时安全响应时间,而不会对其它性能产生影响。ECC 逻辑集成在 CPU 中,这会对存储器和总线起到保护作用。使用 HW BIST 可对所有 RAM 存储器进行测试,从而实现高诊断覆盖范围,且内存保护单元 (MPU) 对应用软件中的确定性错误起到帮助防范作用。

    Hercules 之 GIO的 学习

    GIO 模块提供数字输入捕捉和数字输入/输出。在这个块中没有处理功能。GIO 通常用于静态的或者很少发生改变的输出,诸如收发器使能信号、报警光等。GIO 也可被用于提供外部中断输入功能。GIO 的大体框图如下:(以TMS570系列为例)

      

    GIO 主要特点

    GIOA 和GIOB的每个端口都包含8个双向可位操作的IO引脚

    GIOA 具有外部中断触发功能

    可编程的单边沿触发或者双边沿触发

    可编程的边沿极性

    可编程的中断优先级

    管脚的配置问题

    配置数据传输方向

    数据输入或者输出配置

    数据设置或者清零设置

    漏极开路配置

    上拉下拉配置

    以上的配置都是通过相关的寄存器实现,配置寄存器如下   

    相关寄存器的介绍

    GIOPSL   选择上拉或者下拉操作的寄存器

    GIOPULDIS 失能管脚上下拉操作

    GIOPDR  控制管脚的漏极开路配置

    GIODOUT  配置输出管脚的电平

    GIODIN 从外部管脚读到的数据信息

    GIODIR 控制管脚的方向

    GIO 的电气特性 
    当作为输出的时候 负载最大电流是+ /-2ma ,最大输入箝位电流为+ -20ma;当作为输入的时候 , 最大输入箝位电流为+ /-20ma 有部分通道最为模拟输入的时候最大输入箝位电流为+ /-10ma    看图

    Hercules 之ADC的学习

    Hercules 器件系列产品执行两个带有共享通道的用于快速转换的模块(乒乓操作方法)。使用双ADC 转换器来执行两个通道的系统也许能够在应用中请求故障容错。 Hercules 系列的ADC 不同于我们普通CPU 里面的ADC,称为MibADC,ADC的结构也是SAR,分辨率是12位。有两个ADC 核的CPU 有24个通道的ADC 例如TMS570LS20216 。24个通道的组成是每个ADC 核自己拥有单独的16个通道的ADC,还有8个通道 是两个ADC内核共享的。分布如下图 :

    ADC 带有64字节的存储深度/FIFO, 这个大小通过相关的寄存器是可以编程设置的。这个ADC 是带有 自检输入的,这个是安全型CPU 必备的。擎能够检测到AD的两个输入端是否短路或者开路输入。软件必须配置、启用和评估这个诊断的结果。错误响应、诊断的可测试性、以及任何必须的软件要求由系统集成人员所执行的软件来定义。ADC性能如下:

    1.  ADC 模块内部还带校准部分功能,来自校准逻辑电路的对已知基准值转换的
    软件比较能够提供一个对转换器功能性的诊断。校准例程的重复执行可被用于检测应用期间的漂移2.  带多个缓冲  3.  MibADC SRAM 内容可使用硬件CRC-64 诊断进行定期测试。

    还有更多的功能 期待大家的探讨。

    ADC 内核的转换公式是   4096*(输入电压的差)/参考电压

    ADC 的初始化过程 如下

    1 CPU复位后,使能各种相关的外设通过时钟寄存器,使能ADC内核

    2 启动ADC 的FIFO RAM的初始化

    3 配置ADCLK的时钟频率

    4 使能ADC 进入普通操作模式

    5 分配64个字的FIOFO RAM 到三个转换组里

    6 配置采样时间

    HERCULES  的VIM 模块 学习

    VIM (vectored interrupt manager)模块中文名 叫做 矢量中断管理模块 它的大致框图如下

    矢量中断模块(VIM) 被用于将外设中断连接至Cortex-R4F CPU。VIM 提供可编程中断优先级、屏蔽、和睡眠模式唤醒功能。VIM包括一个本地SRAM,此SRAM 被用于保持每个通道的中断句柄的地址。VIM SRAM 包括一个奇偶诊断,此诊断能够检测内存中的单一位错误。当检测到一个奇偶错误时,ESM 被告知此错误。这一特性在复位后被禁用。软件必须配置和启用这个特性。

    VIM主要特点

    VIM 硬件

    与CPU之间有专门的矢量中断接口

    IRQ 矢量地址硬件重映射

    硬件辅助以优化和管理中断源

    VIM功能

    96个中断请求源

    通过编程 可将中断请求映射到不同的中断通道

    通过中断请求的映射可以得到不同的中断优先级

    为CPU的中断通道排序

    为CPU提供中断服务程序地址

    VIM 通道映射的默认状态

      NMI 不可屏蔽中断: Channel 0 和Channel 1 是不可屏蔽中断的

      中断请求可以通过CHANMAPX 寄存器映射到所需要的中断

      看示例图 就很清楚

    VIM 通道映射 编程之后如下 中断请求2可以同时映射到VIM通道2和 4  如果关闭通道 2, 那么中断优先级的次序变成:  REQ0-REQ1-REQ3-REQ2, 可以看到 中断的优先级次序已经改变了。

    VIM 进行一次中断 需要进行 如下配置

     外设中断通道使能

     外设模块中断使能

    清除相对应的中断屏蔽位

    建立VIM RAM 表

    中断通道进行相对的映射

    使能中断(在CPSR寄存器中实现)
    注意  如果使用到矢量内存(VECTOR RAM),记得使用前要将之初始化。

    HERCULES  的高端定时器N2HET),HET 转移单元(HTU) 学习

    N2HET 模块是一个具有输入/输出功能的可编程定时器。N2HET 被执行为一个带有指令集(专门用于定时操作)的简单RISC 处理器。复杂输入可被捕捉并由N2HET 进行预处理,随后由CPU 处理。输出生成通常为脉宽调制(PWM),但是也可以为简单通用输入/输出(GIO) 类型信号。每个N2HET 有一个被称为HTU 的专用微型DMA 控制器。HTU 提供了一个用于数据从N2HET 和CPU内存移进移出的高带宽连接。HTU 包括一个内存保护单元(MPU)。MPU 逻辑电路可被用于提供器件内存中软件任务的空间分离。根据每一个任务的需求,N2HET 驱动器控制MPU 并改变MPU 设置。违反一个已设置的内存保护策略会导致一个ESM 错误。复位时MPU 不启用软件必须启用、配置和测试MPU 增强型高端定时器 N2HET 可编程定时协处理器占用极小的CPU开销实现高级和复杂的定时器功能带奇偶校验功能的128word 指令内存空间专门的DMA功能模块(HTU) 在无需CPU干预的情况下 实现数据从NHET到RAM的转移条件语句的执行语句根据引脚状态与比较值决定32输入输出通道可实现复杂或常用的定时器功能. 例如 捕获 比较输出  PWM  GPIO功能 等. 内部集成 抑制滤波器可消除输入干扰信号多路25bit虚拟计数器可实现定时器,事件计数器 以及角度计数器.

    通用高端定时器 应用

     单或者多通道PWM ;同步或者异步占空比更新的PWM;异步周期更新的PWM;PWM 移相功能;带死区功能的 同步、异步PWM 这个是大家比较要常用到的

    基本功能 频率调制输出;事件计数器;脉宽计数;脉宽累加器;时间戳;多分辨率选择;频率或者脉宽检测;单通道脉宽与周期测量;正交解码

    特殊功能 模拟SPI;信号发生器

    HERCULES  的RTI(实时中断模块)学习

    实时中断(RTI)模块提供计时器功能的操作系统和用于产生时基测试代码。RTI的模块能把用于操作系统调度的几个时基计数器很好的组合一起协调工作。RTI有如下的结构特性:

    两个独立的64位计数器;四个可配置的比较,以响应操作系统或DMA请求,每个事件可以被块1或者块2驱动。一个时钟块用于同步FLEXRay网节点,还有时钟监督。各种事件的快速使能或者失能;两个时间戳(捕捉)函数系统或周边中断,其中一个用于每个计数器块。结构图如下:

    RTI的比较单元 四个比较单元有各自的比较中断和DMA通道,比较值自动更新 无需CPU干预。中断可以选择 DMA 中断 或者比较捕获出发中断还可以 是两个计数器的溢出中断。

    RTI 中断周期计算

    中断或DMA请求周期的计算方法

    tCOMPx =tRTCLK x (预分频比较器值+1) x FreeRu计数器比较值

      如果预分频比较器值=0,

    tCOMPx = tRTCLK x232 x FreeRu计数器比较值

    如果FreeRu计数器比较值为0

    tCOMPx =tRTCLK x (预分频比较器值+1) x232

    HERCULES  的RTI中断嵌套

     基本上,Cortex R 内核只提供了IRQFIQ两种默认中断,而且进入IR的ISR后,CPU会自动屏蔽其他所有IRQ。也就是说,只要是IRQ, 无论优先顺位,一律不能嵌套,直到当前的IRQ的ISR执行完成。    如果用户想实现IRQ的中断嵌套,那么可以在进入ISR之后,手动将CPSR (current program status register)寄存器的"I" 位清零。这样后面的更高优先级的IRQ就可以得到响应,并嵌套进来了。    这个嵌套是没有层级限制的但是用户需要自行对被打断的ISR现场进行保护,这个工作也会随着嵌套层级增多而变得复杂,稍有不慎,就可能引起内存溢出。
    所以建议大家谨慎使用中断嵌套。

    在IRQ处理函数起始处通过如下所示汇编代码进行现场保护,处理完毕后再进行恢复。
    同时在保护好现场后需要将优先级等于或小于本身的IRQ中断禁掉,恢复现场后再将相应中断打开。中断关闭打开操作可以通过VIM进行。这样就可以实现高优先IRQ的
    嵌套处理。
    #pragma INTERRUPT(rtiCompare0Interrupt, IRQ)
    void rtiCompare0Interrupt(void)
    {
    /* USER CODE BEGIN (39) */
    /* USER CODE END */
       rtiREG1->INTFLAG = 1U;
       asm("   STMFD SP!, {R0-R12, LR}");/*Save R0- R12, LR_irq*/   
       asm("   mrs lr, spsr"); /* Copy SPSR_irq to LR */
       asm("   STMFD SP!, {LR}"); /* Save SPSR_irq */
       asm("   MSR CPSR_c, #0x1F"); /* Enable IRQ (Sys Mode) */
       asm("   STMFD SP!, {LR}"); /* Save LR */
       rtiDisableNotification(rtiNOTIFICATION_COMPARE0);/*Disable rtiCompare1 Interrupt iteself */
       rtiNotification(rtiNOTIFICATION_COMPARE0);
       //asm(" LDMFD SP!, {R0-R12}");/*Restore R0-R12*/
         asm(" LDMFD SP!, {LR}"); /* Restore LR */
         asm(" MSR CPSR_c, #0x92"); /* Disable IRQ (IRQ Mode) */
         asm(" LDMFD SP!, {LR}"); /* Restore SPSR_irq to LR */
         asm(" MSR SPSR_cxsf, LR"); /* Copy LR to SPSR_irq */
         asm("   LDMFD SP!, {R0-R12, LR}");/* Restore LR */
         rtiEnableNotification(rtiNOTIFICATION_COMPARE0);/*Enable rtiCompare1 Interrupt  */
    }
    记得做好保护啥

    Hercules 开发流程

    1. 使用HALCoGen,根据设定的配置生成代码
    2. 将代码导入到CCSV5 中
    3. 由用户根据需要完善代码功能
    4. 然后进行编译
    5. 编译无误后,利用下载工具下载到CPU中
    6. 重新上电运行

    附件上Hercules的工程样例

     

    工程样例.zip
  • TMS570LS 开发设计流程与设计注意事项:

    1)设计前首先到TI官网download TMS570LS相关的资料,包括 TMS570LS规格书,软件开发库,技术文档等。

    2)选型,详细阅读TMS570LS 型号从封装上是有两种型号:QFP 144与BGA 377 ,考虑到方便小量的测试与DIY,我建议选择QFP144。

    3)画原理图,注意引脚的定义,把我们需要的引脚都引出来,注意引脚能承受的灌电流、输入电压,假如ADC输入电压不要超过VCCAD值,如超过请外围上加限压电路等。

    4)LAYOUT线路板,设计线路板时注意几点,首先它跟常见的ARM芯片一样,靠近VCC端要加滤波电容,晶振要尽量接近TMS570LS,ADC参考电压加接近采集器件等。

    其次是软件设计:

    1)如需要一些DSP运行库,可以到http://www.ti.com.cn/tool/cn/hercules-dsplib下载。

    2)程序详细阅读F021FLASHAPI 手册,里面的内容很重要。

    3)编写我们需要功能程序,参考F021FLASHAPI内容编写,非常简单。

    4)连接TI的防真器到TMS570LS 实时仿真,TMS570LS 仿真接口是标准的JTAG口,调试灵活。

    5)编写程序时,注意几点:中断嵌套,SPI、ADC模块的使用,临界区的保护,可关中断或做变量互锁。

  • hercules的GUI代码生成器HALCoGen 的安装与初试

    HALCOGEN 可以以图形方式,用鼠标点点就可以产生代码然后把代码考到自己的程序中。

    现在我发一下HALCOGEN的安装及使用心得。

    首先从TI网站下载HALCOGEN安装程序。

    50多M

    多后开始安装。

    同意协议

    选则安装路径:

    正在安装:

    安装结束:

    HALCOGEN的界面可以浏览TI网站

    选择型号:

    使能相应的外设:

     

    选择RTI COMPARE0中断:

    Compare 0 period选择1000:

    点击File -> Generate Code

    再把产生的代码考到自己的程序中:注意生成的Main.c是空的,到相应的外设可看到代码

    /* Include Files */

    #include "sys_common.h"
    #include "system.h"

    /* USER CODE BEGIN (1) */
    #include "rti.h"
    #include "het.h"
    #include "gio.h"
    /* USER CODE END */


    /* USER CODE BEGIN (2) */
    /* USER CODE END */


    void main(void)
    {
    /* USER CODE BEGIN (3) */

        /* Initialize RTI driver */
        rtiInit();

        /* Set high end timer GIO port hetPort pin direction to all output */
        gioSetDirection(hetPORT1, 0xFFFFFFFF);

        /* Enable RTI Compare 0 interrupt notification */
        rtiEnableNotification(rtiNOTIFICATION_COMPARE0);

        /* Enable IRQ - Clear I 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) */
    /* Note-You need to remove rtiNotification from notification.c to avoid redefinition */
    void rtiNotification(uint32_t notification)
    {
    /*  enter user code between the USER CODE BEGIN and USER CODE END. */
        /* Toggle HET pin 0 */
        gioSetPort(hetPORT1, gioGetPort(hetPORT1) ^ 0x00000001);
    }
    /* USER CODE END */

     

     

  • 使用TMS570LS20216做的简易语音识别

    实时语音识别系统中,由于语音的数据量大,运算复杂,对处理器性能提出了很高的要求,通常都是采用高速DSP来实现。在这里,我使用HERCULES系列的TMS570LS20216来做了下尝试实验。

    识别系统存在的难点问题

    首先,实现小词汇量语音识别系统最可靠的方法为孤立词语音识别。虽然孤立词语音识别较其他类型的语音识别较成熟完善,基本可以达到使用要求,但在实际的具体系统应用环境中,仍存在一些影响因素使其识别率降低,孤立词语音识别存在的难点问题如下:

    (1)同一发音的随机性变化

    语音信号是非平稳随机信号,不但不同发音者发音之间存在重大差异,即使同一人在不同时间、地点、不同生理状态情况下发音也存在很大差异。

    (2)噪声问题

    由于环境噪声广泛存在,具体的语音识别工作环境千差万别,容易造成训练与测试环境不匹配致使系统性能严重下降,因此提高语音识别系统的鲁棒性是关系这项技术能否走向实用阶段的关键。现有的语音识别系统只能工作在安静环境下。在噪声环境下工作,受噪声的干扰,讲话人产生情绪或心理的变化,导致发音失真、发音速度和音调改变,即发生Lombard效应或Loud效应。从90年代初期到现在,抗噪声语音识别技术已经成为语音识别领域的一个重要研究课题。

    (3)端点检测

    研究表明,即使在安静的环境下,语音识别系统一半以上的错误来自端点检测器。提高端点检测技术的关键在于寻找稳定的语音参数。

    (4)环境影响

    发音时室内环境将同一声波的传导、反射等对声音的能量存在很大影响。

    (5)词与词的特征空间混叠

    语音识别的常规方法是利用语音信号的短时平稳特性将语音时域采样信号分为若干帧,计算出每一帧的相应特征矢量,从而得到该帧语音的一个特征矢量序列。但从这些矢量的空间分布来看,很多不同词语的矢量序列在特征空间存在混叠现象。克服这个问题的主要思路是,首先应当基本准确地找出该发音者发音的大致短时周期,并尽量使用合理的特征,同时充分利用特征序列的时序特征。

    综上考虑 ,采用线性预测来识别,这样简单一点。

    线性预测的基本原理

    线性预测的目的即是用过去的状态来预测现在或将来的某一状态。在随机信号谱分析中常把一个时间序列模型化为白噪声序列通过一个数字滤波器H(z)的输出。在一般情况下,取滤波器的全极点形式(Auto Regressive)AR模型即:

                                                                                    

    其中系数ak,G即为模型参数。当输入信号u(n)为零均值的随机信号时,系统的输出s(n)与输入之间的关系可以用相关函数或功率谱来表示:

                                                                           

    式中Rss(z)和Ruu(z)分别为信号的输出与输入的自相关序列的Z变换。在信号模型中,u(n)为零均值,方差为2uσ的白噪声序列,其自相关:

                                                               

                                 

    这表明,信号s(n)的功率谱,完全可以由滤波器的幅度频率响应来决定,从这个意义上讲,系统H(z)确实可以用来模型化信号s(n)。由此得出结论:在语音分析中,求出预测滤波器H(z)的参数,便可以将其用在语音识别与分类中。这种线性系统在离散时域可以表示成:

                                      

    其中输入为e(n)(高斯白噪声),输出为x(n),即在高斯白噪声的激励下,该系统输出为指定的语音信号。设定预测误差:    

    验证时,首先利用已知的语音信号,对其进行分帧后,然后选取其中一帧,使之通过预测误差滤波器,得到预测误差滤波器的系数,然后利用随机白噪声来激励该误差滤波器,则可以模拟出原语音信号。所作FFT为256点,纵坐标数值仅体现数值比例关系,图形显示所示。

    通过频域波形观察可以看出该预测误差滤波器基本上可以模拟出原语音信号。语音识别根据提取到的语音特征参数,在一组参考模板中轮流进行匹配,从而判断其中哪个具有输出该观察矢量的最大可能性。

    接下来是总体的小设计

    TMS570LS20216 硬件概述

    TMS570LS20216集成了ARM® Cortex™-R4F 浮点CPU,该CPU 提供了高效的1.6 IPS/MHz,并且具有可运行至高达160MHz 的配置,从而提供大于250 DMIPS 的指令执行速度。MS570LS 系列还提供具有单位错误校正和双位错误检测的不同闪存(1MB 或2MB)和数据SRAM(128KB 或160KB)选项

    TMS570LS20216 主要特性如下

    锁步中的双TMS570 16/32 位RISC (ARM Cortex™-R4F)

    • 支持ECC 的高达2M 字节的程序闪存

    • 支持ECC 的高达160K 字节的静态RAM (SRAM)

    • 实时中断(RTI) 操作系统定时器

    • 矢量中断模块(VIM)

    • 循环冗余校验器(CRC)支持并行特征值分析(PSA)

    • 直接内存访问(DMA) 控制器

    • 带前置分频器的基于调频锁相环(FMzPLL) 的时钟模块

    • 三个多缓冲串行外设接口(MibSPI)

    • 两个具有本地互连网络接口(LIN) 的UART (SCI)

    • 三个CAN 控制器(DCAN)

    • 带有专用传输单元(HTU) 的高端定时器(NHET)

    • 提供带有专用PLL 和传输单元(FTU) 的FlexRay 控制器

    • 外部时钟前置分频(ECP) 模块

    • 两个16 通道12 位多缓冲ADC (MibADC) - 其中8 个通道由两个ADC 共用

    • 支持故障检测的地址总线奇偶校验

    • 带有外部错误引脚的错误信令模块(ESM)

    • 支持超范围复位置位的电压监控器(VMON)

    • 嵌入式跟踪模块(ETMR4)

    • 数据修正模块(DMM)

    • RAM 跟踪端口(RTP)

    语音采集模块采用TI公司推出的一款高性能立体声音频Codec芯片

    TLV320AIC23B,内置耳机输出放大器,支持MIC和LINE IN两种输入方式,且对输入和输出都具有可编程增益调节。其最主要的优点是和TI公司的DSP芯片的McBSP接口完全兼容,和本设计中使用的TMS570LS20216芯片能够实现无缝接口。

    AIC23的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。与此同时,AIC23还具有很低的能耗,回放模式下功率仅为23mW,省电模式下更是小于15μW。由于具有上述优点,使得AIC23是一款非常理想的音频模拟I/O器件,可以很好的适用于随声听(如CD,MP3),录音机等数字音频领域。由TLV320AIC23组成的语音输入与输出模块不仅采样率高最高可达96KHz,且外围电路简单,性价比高。最方便之处是它是TI原厂制造,能与McBSP无缝接口。TLV320AIC23管脚功能如下:

    麦克风输入接口:

    MICBIAS一提供麦克风偏压,通常是3/4 AVDD。

    MICIN一麦克风输入引脚。

    LINE IN输入接口:

    LLINEIN一左声道LINE IN输入。

    RLINEIN一右声道LINE IN输入。

    耳机输出接口:

    LHPOUT一左声道耳机放大输出。

    RHPOUT一右声道耳机放大输出。

    LOUT一左声道输出。

    ROUT一右声道输出。

    配置接口:

    5DIN一配置数据输入。

    SCLK一配置时钟。

    其他管脚:

    MCLK一芯片时钟输入(12.288M,11.2896M,18.432M,16.9344M)

    VMID一半压输入,通常由一个10μ和一个O.lμ电容并联接地。

    MODE一芯片工作模式选择,Master或者Slav。e

    CS一片选信号(配置时有效)。

    CLKOUT一时钟输出,可以为MCLK或者MCLK/2。

    选用ALTERA公司的EPM7128S CPLD(Complex Programable LogicDevice)来满足DSP芯片对外围器件(如A/D、SRAM、FLASH等)的数字接口电路的要求,EPM7128S是基于第二代MAX结构体系的高性能EEPROM结构的CPLD,具有最小5ns的引脚到引脚的逻辑时延,频率最高可达175.4MHz,内部有128个宏单元、8个逻辑阵列块和2500个门电路在本系统中主要起到逻辑译码和器件信号同步的作用。为了TMS570LS20216与外部数据的交换,其片选、数据线、地址线等时序信号需要按照规定的逻辑控制关系正常工作,对CPLD的软件开发实际上就是用硬件描述语言对它编程,经过功能仿真、时序仿真、在线测试三个过程的编译及调试,从而实现系统所需的逻辑控制功能。

    本系统时序逻辑不复杂,本文在设计过程中采用了相对简单的原理图方法对EPM7128S CPLD进行了编程,开发环境使用ALTERA公司的MAX+plusII。下面以DSP与SRAM、FLASH的控制信号SRAM_WE、SRAM_OE、SRAM_CE、FLASH_WE、FLASH_OE、FLASH_CE为例简要介绍时序信号的CPLD开发系统总体架构框图 如下

    本系统的硬件基于一个以hercules(TTMS570LS20216)为主处理器的硬件平台,硬件平台主要包括语音输入输出模块、主处理器模块、存储器模块、异步串口输出模块和电源模块。其中语音输入输出模块实现了语音的输入和输出,采用的芯片为TI公司的AIC23B,主处理器模块(TMS570LS20216)主要完成语音识别所需的计算,其性能能够达到实时处理的要求。存储器模块包括一片FLASH和两片SRAM,用256K字的FLASH作为DSP的可编程存储器,两片SRAM分别作为DSP的数据和程序存储器。

     

    语音识别系统的数据流程图是把麦克风输入的语音经过预处理,特征参数提取,以及HMM模型库Viterbi译码,评分判决部分组成。

    本设计中,使用串口0接收语音数字信号,McBSP0工作在从模式下,时钟和帧同步都以AIC23芯片的时钟和帧同步信号为源信号。接收方式可以选择中断方式和查询方式,由于在设计中输入识别信号和输入训练信号都采用外部中断完成,McBSP的接收和发送中断优先级分别为7和8,而外部中断INT0和INT3中断优先级为3和4,而数据接收操作在外部中断程序中,在外部中断没有执行完成情况下不能执行串口接收中断,否则将导致严重错误,发生死循环且不能收到数据,所以在设计中接收采用查询方式。查询接收数据子程序为:

    for(i=0;i<N;i++)

    {*(volatile u16*)SPSA_ADDR(0)=SPCR1_SUBADDR;//查询

    while(!(*(volatile u16*)SPSD_ADDR(0)&0x0002)){}

    audio_data[i]=*(volatile u16*)DRR1_ADDR(0);}

    数据的发送时钟为AIC23主时钟18.432MHz,由于采用8KHz采样率,帧同步信号周期为1/8000=125μs,当接收准备好位RRDY=1时,取出信号in_data,同时存进长度为16000(2秒钟数据)的数组audio_data中等候处理,识别结果调用子函数显示接受或者是拒绝,在后续的设计中可以加入控制模块,按照识别结果作出相应操作。

    下面是语音识别的设计程序

    后向算法
    /*Backward.c*/
    #include<stdio.h>
    #include"hmm.h"
    void Backward(HMM*phmm,int T,int*O,double**beta,double*pprob)
    {
    int i,j;
    int t;
    double sum;
    for(i=1;i<=phmm->N;i++)
    beta[T][i]=1.0;
    for(t=T-1;t>=1;t--)
    {
    for(i=1;i<=phmm->N;i++)
    {
    sum=0.0;
    for(j=1;j<=phmm->N;j++)
    sum+=phmm->A[i][j]*(phmm->B[j][O[t+1]])*beta[t+1][j];
    beta[t][i]=sum;
    }
    }
    *pprob=0.0;
    for(i=1;i<=phmm->N;i++)
    *pprob+=beta[1][i];
    }
    void BackwardWithScale(HMM*phmm,int T,int*O,double**beta,double*scale,double
    *pprob)
    {
    int i,j;
    int t;
    double sum;
    for(i=1;i<=phmm->N;i++)beta[T][i]=1.0/scale[T];
    for(t=T-1;t>=1;t--)
    {
    for(i=1;i<=phmm->N;i++)
    {
    sum=0.0;
    for(j=1;j<=phmm->N;j++)
    sum+=phmm->A[i][j]*(phmm->B[j][O[t+1]])*beta[t+1][j];
    beta[t][i]=sum/scale[t];
    }
    }
    }

     

    Baum_whelch算法
    /*Baum.c*/
    #include<stdio.h>
    #include"nrutil.h"
    #include"hmm.h"
    #define DELTA 0.005
    void BaumWelch(HMM*phmm,int T,int*O,double**alpha,double**beta,double**gamma)
    {
    int i,j,k;
    int t,l=0;
    double probf,probb,val,threshold;
    double numeratorA,denominatorA;
    double numeratorB,denominatorB;
    double***xi,*scale;
    double delta,deltaprev,probprev;
    double ratio;
    deltaprev=10e-70;
    xi=AllocXi(T,phmm->N);
    scale=dvector(1,T);
    ForwardWithScale(phmm,T,O,alpha,scale,&probf);
    BackwardWithScale(phmm,T,O,beta,scale,&probb);
    ComputeGamma(phmm,T,alpha,beta,gamma);

    ComputeXi(phmm,T,O,alpha,beta,xi);
    probprev=probf;
    do{
    /*reestimate frequency of state i in time t=1*/
    for(i=1;i<=phmm->N;i++)
    phmm->pi[i]=.001+.999*gamma[1][i];
    /*reestimate transition matrix and symbol prob in each st
    for(i=1;i<=phmm->N;i++){
    denominatorA=0.0;
    for(t=1;t<=T-1;t++)
    denominatorA+=gamma[t][i];
    for(j=1;j<=phmm->N;j++){
    numeratorA=0.0;
    for(t=1;t<=T-1;t++)
    numeratorA+=xi[t][i][j];
    phmm->A[i][j]=.001+.999*numeratorA/denominatorA
    }
    denominatorB=denominatorA+gamma[T][i];
    for(k=1;k<=phmm->M;k++){
    numeratorB=0.0;
    for(t=1;t<=T;t++){
    if(O[t]==k)
    numeratorB+=gamma[t][i];
    }
    phmm->B[i][k]=.001+.999*numeratorB/denominatorB
    }
    }
    ForwardWithScale(phmm,T,O,alpha,scale,&probf);
    BackwardWithScale(phmm,T,O,beta,scale,&probb);
    ComputeGamma(phmm,T,alpha,beta,gamma);
    ComputeXi(phmm,T,O,alpha,beta,xi);
    delta=probf-probprev;
    ratio=delta/deltaprev;
    probprev=probf;
    deltaprev=delta;l++;
    }while(ratio>DELTA);
    printf("num iterations:%d\n",l);
    FreeXi(xi,T,phmm->N);
    free_dvector(scale,1,T);
    }

    void ComputeGamma(HMM*phmm,int T,double**alpha,double**beta,double**gamma)
    {
    int i,j;
    int t;
    double denominator;
    for(t=1;t<=T;t++){
    denominator=0.0;
    for(j=1;j<=phmm->N;j++){
    gamma[t][j]=alpha[t][j]*beta[t][j];
    denominator+=gamma[t][j];
    }
    for(i=1;i<=phmm->N;i++)
    gamma[t][i]=gamma[t][i]/denominator;
    }
    }
    void ComputeXi(HMM*phmm,int T,int*O,double**alpha,double**beta,double***xi)
    {
    int i,j;
    int t;
    double sum;
    for(t=1;t<=T-1;t++){
    sum=0.0;
    for(i=1;i<=phmm->N;i++)
    for(j=1;j<=phmm->N;j++){
    xi[t][i][j]=
    alpha[t][i]*beta[t+1][j]*(phmm->A[i][j])*(phmm->B[j][O[t+1]]);
    sum+=xi[t][i][j];
    }
    for(i=1;i<=phmm->N;i++)

    for(j=1;j<=phmm->N;j++)
    xi[t][i][j]/=sum;
    }
    }
    double***AllocXi(int T,int N)
    {
    int t;
    double***xi;
    xi=(double***)malloc(T*sizeof(double**));
    xi--;
    for(t=1;t<=T;t++)
    xi[t]=dmatrix(1,N,1,N);
    return xi;
    }
    void FreeXi(double***xi,int T,int N)
    {
    int t;
    for(t=1;t<=T;t++)
    free_dmatrix(xi[t],1,N,1,N);
    xi++;
    free(xi);
    }

    65
    Viterbi算法
    /*Viterbi.c*/
    #include<math.h>
    #include"hmm.h"
    #include"nrutil.h"
    #define VITHUGE 100000000000.0
    void Viterbi(HMM*phmm,int T,int*O,double**delta,int**psi,int*q,double*pprob)
    {
    int i,j;
    int t;
    int maxvalind;
    double maxval,val;for(i=1;i<=phmm->N;i++){
    delta[1][i]=phmm->pi[i]*(phmm->B[i][O[1]]);
    psi[1][i]=0;
    }
    for(t=2;t<=T;t++){
    for(j=1;j<=phmm->N;j++){
    maxval=0.0;
    maxvalind=1;
    for(i=1;i<=phmm->N;i++){
    val=delta[t-1][i]*(phmm->A[i][j]);
    if(val>maxval){
    maxval=val;
    maxvalind=i;
    }
    }
    delta[t][j]=maxval*(phmm->B[j][O[t]]);
    psi[t][j]=maxvalind;
    }
    }
    *pprob=0.0;
    q[T]=1;
    for(i=1;i<=phmm->N;i++){
    if(delta[T][i]>*pprob){
    *pprob=delta[T][i];
    q[T]=i;
    }
    }
    for(t=T-1;t>=1;t--)
    q[t]=psi[t+1][q[t+1]];
    }
    void ViterbiLog(HMM*phmm,int T,int*O,double**delta,int**psi,int*q,double
    *pprob)
    {
    int i,j;
    int t;int maxvalind;
    double maxval,val;
    double**biot;
    for(i=1;i<=phmm->N;i++)
    phmm->pi[i]=log(phmm->pi[i]);
    for(i=1;i<=phmm->N;i++)
    for(j=1;j<=phmm->N;j++){
    phmm->A[i][j]=log(phmm->A[i][j]);
    }
    biot=dmatrix(1,phmm->N,1,T);
    for(i=1;i<=phmm->N;i++)
    for(t=1;t<=T;t++){
    biot[i][t]=log(phmm->B[i][O[t]]);
    }
    for(i=1;i<=phmm->N;i++){
    delta[1][i]=phmm->pi[i]+biot[i][1];
    psi[1][i]=0;
    }
    for(t=2;t<=T;t++){
    for(j=1;j<=phmm->N;j++){
    maxval=-VITHUGE;
    maxvalind=1;
    for(i=1;i<=phmm->N;i++){
    val=delta[t-1][i]+(phmm->A[i][
    if(val>maxval){
    maxval=val;
    maxvalind=i;
    }
    }
    delta[t][j]=maxval+biot[j][t];
    psi[t][j]=maxvalind;
    }
    }
    *pprob=-VITHUGE;
    q[T]=1;for(i=1;i<=phmm->N;i++){
    if(delta[T][i]>*pprob){
    *pprob=delta[T][i];
    q[T]=i;
    }
    }
    for(t=T-1;t>=1;t--)
    q[t]=psi[t+1][q[t+1]];

    }

  • Hercules入门知识

    什么是 Hercules?

    Hercules 安全微处理器是基于 TI 针对汽车电子市场的 20 多年安全关键型系统专业技术、行业协作而发展成熟的硬件。该平台包含三个基于 ARM® Cortex™ 的微处理器系列(RM48x、TMS570 和 TMS470M),可提供可扩展的性能、连接、内存和安全功能。与强烈依赖于软件以获得安全功能的某些微处理器不同,Hercules 微处理器在硬件内实施安全保护,从而使性能最佳化并减少软件使用量。

    产品系列

    RM4x 是 Hercules 安全微处理器系列中性能最高的产品。基于运行速度高达 220 MHz 的 ARM® Cortex™-R4F 浮点内核,它包括闪存和连接选项。为满足 IEC 61508 SIL-3 安全标准和支持要求,已在硬件中集成多个安全功能。

    TMS470M 安全微处理器系列基于广泛采用的、运行速度为 80 MHz 的 ARM® Cortex™-M3 CPU。此系列提供多种闪存和 RAM 存储器选项,并提供 CAN 和 LIN 连接及其灵活的控制外设。包括 CPU 和 RAM 自检 (BIST) 引擎、ECC 和 奇偶校验等内置安全功能。TMS470M 安全微处理器同样符合 AEC-Q100 标准。  

    TMS570LS 安全微处理器系列让客户能轻松开发安全关键型运输应用产品。这款基于 ARM® Cortex™-R4F 的系列微处理器可提供多种性能、存储器和连接选择,已开发出满足 ISO 26262 ASIL D 和 IEC 61508 SIL-3 安全标准和符合 AEC-Q100 汽车电子规范的产品。

    硬件中的安全功能  

    RM48x 和 TMS570 双核 CPU 锁步构架在消除冗余系统要求的同时也使开发得以简化,从而降低了成本。CPU 硬件内置自检 (BIST) 无需复杂安全软件和代码大小费用即可检测到潜在缺陷。CPU 输出的硬件比较提供即时安全响应时间,而不会对其它性能产生影响。ECC 逻辑集成在 CPU 中,这会对存储器和总线起到保护作用。使用 HW BIST 可对所有 RAM 存储器进行测试,从而实现高诊断覆盖范围,且内存保护单元 (MPU) 对应用软件中的确定性错误起到帮助防范作用。

    Hercules 之GIO学习入门

    GIO 模块提供数字输入捕捉和数字输入/输出。在这个块中没有处理功 能。GIO 通常用于静态的或者很少发生改变的输出,诸如收发器使能信 号、报警光等。GIO 也可被用于提供外部中断输入功能。GIO 的大体框 图如下:(以TMS570系列为例)  

    GIO 主要特点

    GIOA 和GIOB的每个端口都包含8个双向可位操作的IO引脚

    GIOA 具有外部中断触发功能

    可编程的单边沿触发或者双边沿触发;可编程的边沿极性;可编程的中断优先级;管脚的配置问题;配置数据传输方向;数据输入或者输出配置;数据设置或者清零设置;漏极开路配置;上拉下拉配置。以上的配置都是通过相关的寄存器实现,配置寄存器如下    

    相关寄存器的介绍

    GIOPSL   选择上拉或者下拉操作的寄存器

    GIOPULDIS 失能管脚上下拉操作

    GIOPDR  控制管脚的漏极开路配置

    GIODOUT  配置输出管脚的电平

    GIODIN 从外部管脚读到的数据信息

    GIODIR 控制管脚的方向

    Hercules 系列的ADC学习

    Hercules 器件系列产品执行两个带有共享通道的用于快速转换的模块

    (乒乓操作方法)。使用双ADC 转换器来执行两个通道的系统也许能够在应用中请求故障容错。 Hercules 系列的ADC 不同于我们普通CPU 里面的ADC,称为MibADC,ADC的结构也是SAR,分辨率是12位。有两个ADC 核的CPU 有24个通道的ADC 例如MS570LS20216 。24个通道的组成是每个ADC 核自己拥有单独的16个通道的ADC,还有8个通道 是两个ADC内核共享的。

    Hercules 的嵌套中断学习理解

      基本上,Cortex R 内核只提供了IRQ和FIQ两种默认中断,而且进入IR的ISR后,CPU会自动屏蔽其他所有IRQ。也就是说,只要是IRQ, 无论优先顺位,一律不能嵌套,直到当前的IRQ的ISR执行完成。 如果用户想实现IRQ的中断嵌套,那么可以在进入ISR之后,手动将CPSR (current program status register)寄存器的"I" 位清零。这样后面的更高优先级的IRQ就可以得到响应,并嵌套进来了。 这个嵌套是没有层级限制的但是用户需要自行对被打断的ISR现场进行保护,这个工作也会着嵌套层级增多而变得复杂,稍有不慎,就可能引起内存溢出。所以建议大家谨慎使用中断嵌套。

       在IRQ处理函数起始处通过如下所示汇编代码进行现场保护,处理完毕后再进行恢复。同时在保护好现场后需要将优先级等于或小于本身的IRQ中断禁掉,恢复现场后再将相应中断打开。中断关闭打开操作可以通过VIM进行。这样就可以实现高优先IRQ的

    嵌套处理。

    #pragma INTERRUPT(rtiCompare0Interrupt, IRQ)

    void rtiCompare0Interrupt(void)

    {

    /* USER CODE BEGIN (39) */

    /* USER CODE END */

      rtiREG1->INTFLAG = 1U;

      asm("   STMFD SP!, {R0-R12, LR}");/*Save R0- R12, LR_irq*/  

      asm("   mrs lr, spsr"); /* Copy SPSR_irq to LR */

      asm("   STMFD SP!, {LR}"); /* Save SPSR_irq */

      asm("   MSR CPSR_c, #0x1F"); /* Enable IRQ (Sys Mode) */

      asm("   STMFD SP!, {LR}"); /* Save LR */

      rtiDisableNotification(rtiNOTIFICATION_COMPARE0);/*Disable rtiCompare1 Interrupt iteself */

      rtiNotification(rtiNOTIFICATION_COMPARE0);

      //asm(" LDMFD SP!, {R0-R12}");/*Restore R0-R12*/

        asm(" LDMFD SP!, {LR}"); /* Restore LR */

        asm(" MSR CPSR_c, #0x92"); /* Disable IRQ (IRQ Mode) */

        asm(" LDMFD SP!, {LR}"); /* Restore SPSR_irq to LR */

        asm(" MSR SPSR_cxsf, LR"); /* Copy LR to SPSR_irq */

        asm("   LDMFD SP!, {R0-R12, LR}");/* Restore LR */

        rtiEnableNotification(rtiNOTIFICATION_COMPARE0);/*Enable rtiCompare1 Interrupt  */

    }

    记得做好保护啥

    Hercules 开发流程

    1.使用HALCoGen,根据设定的配置生成代码使用HALCoGen生成代码  

    2.将代码导入到CCS5中

    3. 由用户根据需要完善代码功能

    4.  然后进行编译

    5.  编译无误后,利用下载工具下载到CPU中

    6.重新上电 运行

    以上就是开发Hercules 系列的一般流程 。

    Hercules入门知识.pdf
  • 刚开始学,没有做过相关的项目呢,希望能获得一个开发板,有个学习的机会,O(∩_∩)O谢谢

  • 共享下自己的资料(内容在附件)

    ziliao.rar
  • 共享下自己的资料(内容在附件)

    ziliao.rar
  • 好像不能显示图片,都写在WORD里了。

    浅谈Hercules.docx
  • 学习Hercules 从_c_int00了解Hercules的初始化过程!

    在IAR工程项目配置中
    Linker/Library/Override default program entry
    Entery symbol 中 填入 _c_int00  

    在download and debug  后就直接跳到右边 _c_int00  函数

    该函数与 “Initialization of the TMS570LS043x, TMS570LS033x and RM42L432 Hercules ARM Cortex-R4 Microcontrollers.pdf”文件结合起来可以了解Hercules初始化中到底做了重要工作!

  • TI网站上发现的hercules全部27个应用


    TitleAbstractTypeSize (KB)DateViews

    PDF15630 Oct 2012 371 

    PDF14026 Sep 2012 385 

    PDF14517 Sep 2012 452 

    PDF9505 Jul 2012 631 

    Multiple Files 12 Apr 2012 617 

    PDF4607 Mar 2012 435 

    PDF8317 Feb 2012 661 

    PDF72616 Feb 2012 887 

    Multiple Files 27 Jan 2012 959 

    PDF19426 Jan 2012 575 

    PDF6117 Nov 2011 816 

    PDF76906 Nov 2011 497 

    Multiple Files 04 Nov 2011 487 

    PDF13820 Oct 2011 595 

    PDF8127 Sep 2011 610 

    Multiple Files 06 Sep 2011 920 

    PDF142606 Sep 2011 595 

    PDF37606 Sep 2011 749 

    Multiple Files 06 Sep 2011 799 

    PDF10306 Sep 2011 660 

    PDF12623 Feb 2011 624 

    Multiple Files 30 Aug 2010 1,244 

    PDF65913 Jul 2010 610 

    Multiple Files 27 May 2010 513 

    PDF7910 Mar 2010 588 

    PDF3010 Mar 2010 467 

    PDF6204 Mar 2010 539

  • Hercules之TMS470系列培训学习分享    第一部分

    TMS470M_MCU_1Day_Training_part.pdf
  • Hercules之TMS470系列培训学习分享     第二部分

    详情请见附件

    TMS470M_MCU_1Day_Training_part2.pdf
  • Hercules之TMS470系列培训学习分享     第二部分

    详情请见附件

    TMS470M_MCU_1Day_Training_part2.pdf
  • Hercules之TMS470系列培训学习分享      第三部分

    具体请参照附件

    TMS470M_MCU_1Day_Training_part3.pdf
  • 没有板子,没有应用开发就不会有经验积累,没有经验积累,就没话可说,没话可说就无法争取到板子,然后还是没经验!!

     

    支持活动,希望能获得板子!!

  •  1:系统性能

    显示了如何使用高端定时器传输单元 (HTU),一个 TMS570 和 RM4x 器件上专门用于多用途
    可编程定时器 协处理器 (NHET) 的本地 DMA ,通过在主存储器和 NHET 间进行传输来从主 CPU 上减轻任
    务负担。 它显示了如何设置 HTU,涉及当使用 HTU 时需要考虑的 特定细节,并且列出了使用 HTU 而不是
    CPU 用于数据传输的优势。

    很对基于微控制器的应用需要生成脉宽调制 (PWM) 输出,显示复杂的脉冲图形,测量一个进入信号的周期
    或者脉冲宽度 以及更多。 HET(还有 NHET,N2HET)是一款 Hercules MCU 上的可编程定时器协处理
    器, 它有助于减少常用定时器/捕捉任务所需的主 CPU 处理量 并且还执行一些不能由传统硬件定时器完成
    的任务。 然而,在大多数 应用中,CPU 仍然需要在定时器和 主存储器之间传送有很多数据,对于输入和输
    出信号都是如此,从而减少了 CPU 用于其它任务的时间。 HTU 在处理这些传输时非常有用。 为了有助于
    以下讨论,图 1显示了一个 TMS570 或者 RM4x 安全微控制器 架构的简化方框图。 对于适用于您器件的方
    框图,请参阅器件专用数据 表。

    如果 CPU 必须访问 NHET RAM 来更新值或检索数据,路径为 通过交换式中央资源到外设中央资源
    (PCR)。 在很多情况下, 这些总线运行在不同的频率上,这意味着一个单周期可花费 几个周期的时间。
    CPU 需进行的访问的数量越多,它们对于 总体系统性能的影响越大。
    所以,为什么不使用系统 DMA 来将所有这些数据传送至定时器? 它可以 完成并且它将分配 CPU 的一些空
    载时间去进行其它操作,但是 CPU 和 DMA 共用到 PCR的同一个单总线接口。 所以如果两个外设都进行访
    问,那么在两个外设间将出现竞争 和仲裁,这将使得其中一个外设慢下来。
    HTU 通过提供到 NHET RAM 的直接访问和一个用于直接访问 R-4 TCM RAM 的 主控端口来解决这个瓶
    颈。 SCR 将通过不同主控到系统的不同受控来实现并发 处理。 在图 1中的示例中,一个 CPU 到 CRC 模
    块的访问,一个到 外设的 DMA 访问,和一个到 CPU 主 RAM 的 HTU 传输,可同时进行。 其它优势
    是,CPU 所需的或者需要更新的数据驻留在本地 CPU RA 中,通常计时为一个 单周期访问。 所以 CPU 能
    够更快速地获得相关数据并且能够自由访问针对 DMA 的 PCR,从而增加了总体系统性能。
    在边注上,在看见图 1时,用户也许会感到奇怪,为什么 HTU 没有到 NHET RAM 的直接访问。 虽然
    NHET 架构允许同时方位多个不同的 RAM 位置,在同一个 时钟周期内,NHET 和 HTU 仍然 有可能在访问
    同一个存储器位置时发生竞争。 通过在能够访问 NHET RAM 的不同 主控之间加入仲裁器,已经将这个情
    况考虑在内。 NHET 将一直获得优先级,这样 NHET 程序执行不会被停止。 针对大多数访问情
    况,Hercules 架构已经被设计用于提供非常高的 性能。

    2: HTU  特性

    现在已经对 HTU 如何有助于提升总体系统 性能有了一些基本的了解,是时候进一步了解 HTU 的特性以及
    它们是如何工作的。 这个应用报告将不会专注于每一个单一的 HTU 特性,但是将为解决更加复杂应用情况
    提供一个 好的基础。

    如上所述,HTU 是一个到 NHET 的本地 DMA,并且可实现 与 NHET RAM 间的数据传输。 由于有 多达八
    条请求线路 (HTUREQ[x]) 将 NHET 和 HTU 连接起来,它的工作方式与系统 DMA 相似。 某些 NHET 指令
    能够在特殊 事件出现时在请求线路上生成触发事件。 请求被接至控制数据包,此数据包可编辑传输方向,
    源和目的地址以及应传输多少数据。 然后根据 存储在控制数据包内的信息,一个被触发的请求 开始一个单
    一或者多个与 NHET 间的数据传输 控制数据包被称为双控制数据包 (DCP),这是因为 它们提供为双向数据
    传输建立两个缓冲器的功能。 例 如,HTU 能够在 CPU 工作在另外一个缓冲器上时,将数据传输到一个缓
    冲器。 一旦 HTU 已经将其它缓冲器填满,它能够自动切换至另外一个并且开始用 新数据来填充此缓冲器。

  • 在 Hercules™ ARM®  MCU 上  配置 一个 CAN 节点

    德州仪器 (TI) 生产的 Hercules 系列微控制器是系列 32 位 RISC 微控制器,此微控制器具有高级 ARM 架构
    和一个丰富的外设集。

    1:控制器局域网络(CAN)

    控制器局域网是一个串行多主控通信协议, 此协议高效支持分布式实时控制,具有高级安全级别,和一个
    高达 1Mbps 的通信速率。
    CAN 总线是嘈杂和恶劣的环境,诸如 汽车和其他要求可靠通信的工业领域应用的理想选择。

    外设支持一下 特性
    • 协议:
    – 支持 CAN 协议 版本 2.0 部分 A.B
    • 时钟和 速度:
    – 高达 1M 位每秒的比特率
    – 双时钟 源
    • 消息目标/消息 对话框:
    – 16,32,64 或 128 消息目标(器件 专用)
    – 针对每个消息 目标的独立标识符掩码
    – 针对消息 目标的可编程先进先出 (FIFO) 模式
    • 中断:
    – 到中断模块的两条 中断线路
    • 低功耗 支持:
    – 全局断电和唤醒支持
    – 本地 断电和唤醒支持
    • 突发传输 支持
    – 通过 DMA 的数据传输
    • 调试 支持:
    – 针对自检 运行的可编程回路模式
    – 测试 期间到消息 RAM 的直接访问
    – 针对调试 支持的挂起模式
    • 其它:
    – 由一个 32 位定时器实现的总线关闭后的自动总线 打开
    – CAN Rx/Tx 引脚 可配置为通用输入输出 (IO) 引脚

    1.2 CAN收发器接口图

    2.初始化CAN

    下面常见的步骤涉及初始化 CAN。
    • CAN RAM 初始化(建议在引 导期间使用)
    • CAN 配置

    • CAN 波特率 配置

    初始化 CAN 之后,邮箱需要按照 应用的要求配置。
    下面的小节 详细介绍了 CAN 初始化过程。

    CAN RAM 初 初始 始化 化
    CAN RAM 保存 CAN 消息目标(也被成为邮箱)。 要开始
    件被初始化为零。
    为了初始化 CAN RAM:
    1. 切换到存储器初始化模式: MINITGCR.MINITGNA = 0x
    2. 设定 MSINENA。 相对于 DCAN RAM 的存储器初始化使
    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;

    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]

    Void CanInit (void
    {
    /**@b Initializ @b DCAN1: */
    canREG1->CTL = 0x00021443U; /* Configure CAN */
    /** - Clear all pending error flags and reset current status */
    canREG1->ES = ox0000031Fu;
    /** - Assign interrupt level for messages */
    canREG1->INTMUXx[0U] = MessageBoxNo;
    canREG1->INTMUXx[1U] = 0x00000000U;
    /** - Setup auto bus on timer period */
    canREG1->ABOTR = 0U;
    }

    配置 CAN  波特  率
    通过计算位时序值并且 将这个值编辑进位时序寄存器 (BTR) 来设定 CAN 数据传输波特率。
    要初始化 CAN 波特率:
    1. 设定 CANCONTROL.init 位。 这将把 CAN 置于初始化 模式中。
    2. 设定配置改变使能 (CANCONTROL.CCE) 位。 这将 启用到 BTR 寄存器的写入访问。
    3. 将经计算的位时序 元件值写入 BTR 寄存器。
    4. 清除 CANCONTROL.init 位之前的 CANCONTROL.CCE 位。

    /* Baudrate configuration */
    DCAN1_Ptr->CCR_UN.CCR_ST.INIT_B1 = 1 ; /* Enter Initialization 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 value of 0x2301 configures the 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) ; /* Enter Normal Mode */

  • 有关Hercules 的ADC方面的资料 ,具体可以参考附件

    无缓冲多路复用比率式模数转换器 (ADC) 对于驱动不是一直明显的源阻抗有严格要求。 本应用报告解决了
    源阻抗和采样率之间的权衡。 它包括在 GS30,GS40,GS60 过程节点使用 TMS470 处理器和赫丘利斯
    ARM 安全 MCU(TMS470M,TMS570 和 RM4x 系列)的 10 位和 12 位的示例(又分别被称为
    F05/C05,F035/C035 和 F021)。

    zhca454b.pdf
  • 什么是 Hercules?

    Hercules 安全微处理器是基于 TI 针对汽车电子市场的 20 多年安全关键型系统专业技术、行业协作而发展成熟的硬件。该平台包含三个基于 ARM® Cortex™ 的微处理器系列(RM48x、TMS570 和 TMS470M),可提供可扩展的性能、连接、内存和安全功能。与强烈依赖于软件以获得安全功能的某些微处理器不同,Hercules 微处理器在硬件内实施安全保护,从而使性能最佳化并减少软件使用量。

    产品系列
    现已推出全部 Hercules 3 产品系列,具有备用存储器和已计划的外设选项。


    RM4x 系列

    RM48x 是 Hercules 安全微处理器系列中性能最高的产品。基于运行速度高达 220 MHz 的 ARM® Cortex™-R4F 浮点内核,它包括闪存和连接选项。为满足 IEC 61508 SIL-3 安全标准和支持要求,已在硬件中集成多个安全功能。

    TMS570LS 系列
    Hercules TMS570LS 安全微处理器系列让客户能轻松开发安全关键型运输应用产品。这款基于 ARM® Cortex™-R4F 的系列微处理器可提供多种性能、存储器和连接选择,已开发出满足 ISO 26262 ASIL D 和 IEC 61508 SIL-3 安全标准和符合 AEC-Q100 汽车电子规范的产品。

    TMS470M 系列
    TMS470M 安全微处理器系列基于广泛采用的、运行速度为 80 MHz 的 ARM® Cortex™-M3 CPU。此系列提供多种闪存和 RAM 存储器选项,并提供 CAN 和 LIN 连接及其灵活的控制外设。包括 CPU 和 RAM 自检 (BIST) 引擎、ECC 和 奇偶校验等内置安全功能。TMS470M 安全微处理器同样符合 AEC-Q100 标准。

    硬件中的安全功能

    RM48x 和 TMS570 双核 CPU 锁步构架在消除冗余系统要求的同时也使开发得以简化,从而降低了成本。CPU 硬件内置自检 (BIST) 无需复杂安全软件和代码大小费用即可检测到潜在缺陷。CPU 输出的硬件比较提供即时安全响应时间,而不会对其它性能产生影响。ECC 逻辑集成在 CPU 中,这会对存储器和总线起到保护作用。使用 HW BIST 可对所有 RAM 存储器进行测试,从而实现高诊断覆盖范围,且内存保护单元 (MPU) 对应用软件中的确定性错误起到帮助防范作用。

    Hercules 开发套件

    TI 提供了各种 Hercules 开发套件,旨在加速和简化发展过程。每个开发套件均附带文档、硬件原理图和代码示例。

    所有 Hercules 开发套件均包括板载 XDS100v2、Code Composer Studio、HALCoGen 配置工具、演示和示例

    Hercules 软件

    通过基于硬件抽象层代码生成工具的 GUI (HALCoGen),TI 让您可轻松开始进行任何 Hercules 安全 MCU 的软件开发。

    Hercules 安全 MCU

    Hercules MCU 具有集成安全功能、开发工具和广泛产品范围,让您轻松开始下一安全应用。



  • 虽然不知道Hercules但是希望获得开发板啊!!下面是我搜到的一些关于Hercules的信息啊!!!

    1.在TI在线培训上就有采用 Hercules USB Kit 启动开发工作课程

    课程简介是:Hercules 是面向安全应用而设计的MCU,可广泛应用于对安全有一定要求的汽车,交通运输,医疗,工业安全等领域

    2.主要应用

    a. 主要应用的领域为医疗、工业及交通应用的新型Hercules安全微控制器平台,该平台专为帮助开发人员获得安全性认证而设计。

    b.特点如下

    ●锁步的双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可满足不同的内存要求。

    3.【TI博客大赛】HerCules系列MCU学习杂谈

    Hercules入门知识

    什么是 Hercules?

    Hercules 安全微处理器是基于 TI 针对汽车电子市场的 20 多年安全关键型系统专业技术、行业协作而发展成熟的硬件。该平台包含三个基于 ARM® Cortex™ 的微处理器系列(RM48x、TMS570 和 TMS470M),可提供可扩展的性能、连接、内存和安全功能。与强烈依赖于软件以获得安全功能的某些微处理器不同,Hercules 微处理器在硬件内实施安全保护,从而使性能最佳化并减少软件使用量。

    产品系列

    RM4x 是 Hercules 安全微处理器系列中性能最高的产品。基于运行速度高达 220 MHz 的 ARM® Cortex™-R4F 浮点内核,它包括闪存和连接选项。为满足 IEC 61508 SIL-3 安全标准和支持要求,已在硬件中集成多个安全功能。

    TMS470M 安全微处理器系列基于广泛采用的、运行速度为 80 MHz 的 ARM® Cortex™-M3 CPU。此系列提供多种闪存和 RAM 存储器选项,并提供 CAN 和 LIN 连接及其灵活的控制外设。包括 CPU 和 RAM 自检 (BIST) 引擎、ECC 和 奇偶校验等内置安全功能。TMS470M 安全微处理器同样符合 AEC-Q100 标准。  

    TMS570LS 安全微处理器系列让客户能轻松开发安全关键型运输应用产品。这款基于 ARM® Cortex™-R4F 的系列微处理器可提供多种性能、存储器和连接选择,已开发出满足 ISO 26262 ASIL D 和 IEC 61508 SIL-3 安全标准和符合 AEC-Q100 汽车电子规范的产品。

    硬件中的安全功能   

     

    RM48x 和 TMS570 双核 CPU 锁步构架在消除冗余系统要求的同时也使开发得以简化,从而降低了成本。CPU 硬件内置自检 (BIST) 无需复杂安全软件和代码大小费用即可检测到潜在缺陷。CPU 输出的硬件比较提供即时安全响应时间,而不会对其它性能产生影响。ECC 逻辑集成在 CPU 中,这会对存储器和总线起到保护作用。使用 HW BIST 可对所有 RAM 存储器进行测试,从而实现高诊断覆盖范围,且内存保护单元 (MPU) 对应用软件中的确定性错误起到帮助防范作用。

    Hercules 之GIO学习入门

    GIO 模块提供数字输入捕捉和数字输入/输出。在这个块中没有处理功 能。GIO 通常用于静态的或者很少发生改变的输出,诸如收发器使能信 号、报警光等。GIO 也可被用于提供外部中断输入功能。GIO 的大体框 图如下:(以TMS570系列为例)  

    GIO 主要特点

    GIOA GIOB的每个端口都包含8个双向可位操作的IO引脚

    GIOA 具有外部中断触发功能

    可编程的单边沿触发或者双边沿触发;可编程的边沿极性;可编程的中断优先级;管脚的配置问题;配置数据传输方向;数据输入或者输出配置;数据设置或者清零设置;漏极开路配置;上拉下拉配置。以上的配置都是通过相关的寄存器实现,配置寄存器如下   

    相关寄存器的介绍

    GIOPSL   选择上拉或者下拉操作的寄存器

    GIOPULDIS 失能管脚上下拉操作

    GIOPDR  控制管脚的漏极开路配置

    GIODOUT  配置输出管脚的电平

    GIODIN 从外部管脚读到的数据信息

    GIODIR 控制管脚的方向

    Hercules 系列的ADC学习

    Hercules 器件系列产品执行两个带有共享通道的用于快速转换的模块

    (乒乓操作方法)。使用双ADC 转换器来执行两个通道的系统也许能够在应用中请求故障容错。 Hercules 系列的ADC 不同于我们普通CPU 里面的ADC,称为MibADCADC的结构也是SAR,分辨率是12位。有两个ADC 核的CPU 24个通道的ADC 例如MS570LS20216 24个通道的组成是每个ADC 核自己拥有单独的16个通道的ADC,还有8个通道 是两个ADC内核共享的。

    Hercules 的嵌套中断学习理解

       基本上,Cortex R 内核只提供了IRQFIQ两种默认中断,而且进入IR的ISR后,CPU会自动屏蔽其他所有IRQ。也就是说,只要是IRQ, 无论优先顺位,一律不能嵌套,直到当前的IRQ的ISR执行完成。 如果用户想实现IRQ的中断嵌套,那么可以在进入ISR之后,手动将CPSR (current program status register)寄存器的"I" 位清零。这样后面的更高优先级的IRQ就可以得到响应,并嵌套进来了。 这个嵌套是没有层级限制的但是用户需要自行对被打断的ISR现场进行保护,这个工作也会着嵌套层级增多而变得复杂,稍有不慎,就可能引起内存溢出。所以建议大家谨慎使用中断嵌套。
        在IRQ处理函数起始处通过如下所示汇编代码进行现场保护,处理完毕后再进行恢复。同时在保护好现场后需要将优先级等于或小于本身的IRQ中断禁掉,恢复现场后再将相应中断打开。中断关闭打开操作可以通过VIM进行。这样就可以实现高优先IRQ的
    嵌套处理。
    #pragma INTERRUPT(rtiCompare0Interrupt, IRQ)
    void rtiCompare0Interrupt(void)
    {
    /* USER CODE BEGIN (39) */
    /* USER CODE END */
       rtiREG1->INTFLAG = 1U;
       asm("   STMFD SP!, {R0-R12, LR}");/*Save R0- R12, LR_irq*/   
       asm("   mrs lr, spsr"); /* Copy SPSR_irq to LR */
       asm("   STMFD SP!, {LR}"); /* Save SPSR_irq */
       asm("   MSR CPSR_c, #0x1F"); /* Enable IRQ (Sys Mode) */
       asm("   STMFD SP!, {LR}"); /* Save LR */
       rtiDisableNotification(rtiNOTIFICATION_COMPARE0);/*Disable rtiCompare1 Interrupt iteself */
       rtiNotification(rtiNOTIFICATION_COMPARE0);
       //asm(" LDMFD SP!, {R0-R12}");/*Restore R0-R12*/
         asm(" LDMFD SP!, {LR}"); /* Restore LR */
         asm(" MSR CPSR_c, #0x92"); /* Disable IRQ (IRQ Mode) */
         asm(" LDMFD SP!, {LR}"); /* Restore SPSR_irq to LR */
         asm(" MSR SPSR_cxsf, LR"); /* Copy LR to SPSR_irq */
         asm("   LDMFD SP!, {R0-R12, LR}");/* Restore LR */
         rtiEnableNotification(rtiNOTIFICATION_COMPARE0);/*Enable rtiCompare1 Interrupt  */
    }
    记得做好保护啥
    Hercules 开发流程
    1.使用HALCoGen,根据设定的配置生成代码使用HALCoGen生成代码   
    2.将代码导入到CCS5
    3. 由用户根据需要完善代码功能
    4.  然后进行编译
    5.  编译无误后,利用下载工具下载到CPU
    6.重新上电 运行
    以上就是开发Hercules 系列的一般流程 。
    4.安全微控制平台的大力士:TI HerculesTM

    当今,在中国,安全问题无疑是一大热点,从高铁到电梯,一次次的事故使人们对安全问题越来越关注。正因为如此,电子产品在安全关键型应用的使用量激增,安全关键型应用开发人员需要一套可提供宽泛性能选项的灵活解决方案。德州仪器(TI)的新型 HerculesTM 安全MCU平台,面向医疗、工业及交通应用,助力开发人员打造更安全的世界。

    据TI半导体事业部MCU业务拓展经理吴健鸿先生介绍,Hercules的意思是大力士,这款平台包括 3 个基于 ARM Cortex 的微控制器系列:TMS470M 、TMS570和RM4x。

    Hercules TMS470M 超值系列交通及安全MCU ,运行频率高达 80MHz(基于一个 ARM Coretex-M3内核),符合汽车Q100规范,并支持IEC 61508 系统安全要求;工作温度范围是-40至125C;本地互连网络 (LIN) 和 CAN 可支持常见的交通联网;320~640KB 闪存及 16~48KB RAM可满足不同的内存要求。

    Hercules TMS570高性能交通及安全MCU,同样符合汽车Q100规范;运行频率高达 180 MHz;能达到ISO 26262 ASIL-D 和 IEC 61508 SIL-3 安全标准的要求;高达 3 MB 闪存和 256KB RAM,可满足多功能应用;可提供以太网、CAN 及 FlexRay™ 连接。

    Hercules RM4x高性能工业及医疗安全MCU,符合TMS标准,能达到国际电工委员会 (IEC) 61508 SIL-3 安全标准的要求;工作温度是-40 至85/105C;运行频率高达 220 MHz;支持单精度和双精度浮点数学,可执行复数数学运算;可提供以太网、CAN 及 USB 连接;拥有高达 3 MB 的闪存和 256KB RAM。


    吴健鸿先生表示,Hercules RM4x 系列提供最高性能水平,适用于诸如医疗和工业等广泛的应用领域。Hercules TMS570 系列针对交通应用,而Hercules TMS470M 系列则以低成本的特点满足了那些对性能要求不太高的系统的需要。

    新型HerculesTM安全MCU利用可扩展的安全平台实现设计的优化与差异化,基于TI20余载安全关键型系统专门知识的卓越硬件,集成型硬件安全功能可实现高诊断覆盖率,RM4x和TMS570拥有锁步的双ARM(R)  CortexTM-R4F 浮点内核,这些优秀性能赋予HerculesTM安全MCU打造更安全的世界的能力,不愧为安全MCU平台中的大力士!

    5.Hercules 应用分享

    随着技术的进步和发展,混合动力汽车/电动汽车(HEV/EV)的电气驱动系统对微控制器处理能力和存储器的要求越来越高.为了应对处理负荷的增加并满足ISO 26262标准中的汽车安全性要求,德州仪器提供了适合于汽车领域中复杂和安全关键型系统的微控制器。
    除了电池,在混合动力汽车(HEV)和电动汽车(EV)的驱动系统中,电机也是最关键的部件之一。
    电机控制器是电机运行的核心,其主要组成部分包括:数字微控制器,用于调节并监视电机和电力电子线路的组件,以及负责处理传感器信号、通信和电源的模块(见图1)。

    测量相位电流
    如需调整电机的转矩,微控制器就必须获取每个控制周期中电机相位电流的即时信息。但在高转矩条件下,有可能出现几百安培的相位电流,为此,在初级电路(强电流电路)和次级电路(电子电路)之间需采用具有电流隔离功能的电流变压器。这些基于霍尔效应的电流转换器的优势在于其可放置在信号电缆的外部,不干扰信号。如果采用串行测量并联电阻器替代方案,将会出现阻性损耗和过热状况,这对于测量高电流很成问题,而霍尔效应电流转换器则不会产生此类影响,甚至还能够承受初级电缆中的超高电流。

    隔离
    由于逆变器中的电流和电压远远高于微控制器控制单元中的电流和电压,因此在这些组件之间的所有接口都必须隔离,以避免控制单元遭受故障或误动作的损坏。ISO72xx是来自德州仪器的符合汽车应用要求的数字隔离器系列,该系列具有低功耗及高达250 Mbps的时钟速度。这些模块采用容性电流隔离,其在时钟速度、可靠性、ESD保护和EMC状态等方面均表现出极佳的特性,完全可与光隔离或磁隔离相媲美。

    微控制器
    通信网络、在线安全和诊断功能、标准化软件架构(即AUTOSAR)以及当今最新的电机控制技术——磁场定向控制技术都使得控制系统对微控制器处理能力和存储器的高要求。
    为了应对处理负荷的增加,德州仪器提供了适合于汽车领域中复杂和安全关键型系统的微控制器——Hercules TMS570LS安全微控制器系列,该系列提供了32位ARM Cortex-R4F CPU,其时钟频率高达180 MHz(> 280 DMIPS),并包括一个用于执行快速32 位和64位浮点运算(IEEE 754)的双精度浮点单元(FPU)。浮点运算和整数运算可并行运行,实现更高的处理能力。FPU 简化了软件开发,因为控制与调节算法越来越多地采用基于模型的代码发生器进行开发,而代码发生器的结果随后作为浮点子程序集成到整个项目之中。
    ARM Cortex-R4F内核能处理16位或32位命令,从而在处理速度与代码长度之间实现了最优折衷。目前德州仪器提供的Hercules TMS570LS安全微控制器系列具有大量的集成型闪存(1~3 MB)和数据存储器(128~256 kB)。
    运行速度较快的微控制器通常可提供较高的功能密度,而且尤其适合改善电机驱动器的动态特性与控制效率,因为它的控制环路时间较短。


    高端定时器协处理器
    Hercules TMS570LS安全微控制器系列的高端定时器(N2HET)模块是一种灵活、可编程的定时发生器和捕获引擎。单个程序能控制多达32个可被随意配置为输入或输出的引脚。N2HET程序在系统初始化期间被复制至其局部RAM中。
    在操作过程中,内核能够更新RAM中的关键值,以生成脉宽调制(PWM)信号或读出由输入引脚捕获的数值。为了进一步降低CPU的负荷,RAM与CPU存储器之间的事务处理也可由系统直接存储器存取(DMA)或高端传输单元(HTU)来执行。由于高度的灵活性,N2HET能够生成简单的专用定时器要求,例如电机的PWM控制或传感器信号的读取。另外,N2HET还具备在不增加CPU负荷的情况下实现状态机的能力。
    若要控制一个三相电机,定时器模块通常必须生成6个PWM信号,因此,借助逆变器电源开关上的合适脉冲图形可生成一个具有特定振幅、相位角和规定频率的三相电压系统。一般而言,使用单个N2HET模块可以控制两个三相电机。TMS570LS21x/31x 微控制器提供了两个N2HET模块,所以能实现额外的功能。第二个 N2HET模块可用于控制采用各种逆变器电路乃至其他传感器通信协议的其他电机。

    模数转换器
    Hercules TMS570LS 安全微控制器带两个具有12位分辨率和24个输入通道的多输入缓冲模数转换器(MibADC),用于转换模拟传感器信号。为了降低CPU负荷,每个MibADC模块都有其自己的多缓冲RAM,每个模块能存储64个转换结果。对该RAM实施存储变换,并可利用CPU或DMA在指定的时间点上读出其内容。N2HET 模块具有大量用于触发A/D转换的配置选项。对于电机控制应用,N2HET能够在可随意设置的时间点上于PWM周期之内起动多个A/D转换序列。

    通信
    从发展趋势来看,汽车的功能将被集成到越来越少的电子控制器之中,但通信接口依旧起着重要的作用。Hercules TMS570LS 安全微控制器的集成型以太网、FlexRay和 CAN模块可用于局部通信或者与主要汽车网络的连接。与 HTU 相似,FlexRay模块也包括一个传送单元(FTU),可在无需CPU干预的情况下读出数据。此外,传感器和专用集成电路 (ASIC)还可通过SPI或LIN/SCI模块连接至控制器。许多模块都具有自己的RAM,可在RAM中对将要发送或接收的数据进行缓冲。


    安全要求
    在至关重要的安全性能要求方面,自2004年起,欧洲已强制执行了IEC 61508国际标准,用于监管安全关键型电子系统的开发,包括其相关的开发过程与质量保证操作规程。ISO 26262标准是从IEC 61508派生出来的,并针对汽车行业进行了相应的修改,适用于机动车辆中与安全相关的电气/电子系统。
    作为控制电子系统的核心组件,Hercules TMS570LS安全微控制器的安全特性(见图2)尤为重要。Hercules TMS570LS安全微控制器系列专为在IEC 61508标准所定义的安全完整性等级3(SIL3)系统中使用而特别设计,经 Exida公司评估,Hercules TMS570LS安全微控制器的开发过程和安全性原理被认定适用于 SIL3系统。
    Hercules TMS570LS安全微控制器系列在芯片上使用了两个相同的 ARM Cortex-R4F 内核,它们以一种锁步的方式运行相同的程序并接收相同的输入。在每个CPU周期中,对两个内核计算的操作和结果相互做逻辑比较,以检测和响应可能出现的误差。两个CPU均采用几何及时间分集在硅片中实现,旨在降低发生物理共因故障的机率。第二个ARM Cortex-R4F内核在硅片中进行物理映射与旋转,而且其处理被延迟了几个周期。
    锁步架构的优势在于能够实现很高的诊断覆盖范围并减少诊断软件开发的工作量。两个内核的硬件比较在每个 CPU 周期中进行,因此当检测到误差时,便可在几个 CPU 周期之内接触故障实现安全状态。由于内核上的误差检测完全由硬件来执行,因而与基于软件的检测方案相比,不会增加 CPU 负荷,且几乎不需要软件。
    此外,利用硬件机理可在微控制器中检测其他误差。这种方法可降低系统侧的软件开发和安全性认证成本及复杂性。用户可以轻而易举地将第三方软件包集成到整体项目之中,而且,从双处理器系统至单处理器系统的巨大转变还能帮助降低成本。
    为了检测和响应 Hercules TMS570LS安全微控制器的程序存储器和数据存储器中的误差,每个ARM Cortex-R4F内核都具有集成型误差校正码(ECC)逻辑电路。该模块能够校正个别位误差并检测双重误差,此外还可在内部监视地址总线和解码器。
    用于监视内核的内置自测试模块有两种,分别是逻辑内置自测试(LBIST)和数据存储器可编程内置自测试(PBIST)。LBIST 模块能够检查 Cortex-R4F 内核在控制器初始化或应用程序运行期间的故障。PBIST 模块则可利用各种不同的可选算法来测试任意或所有的集成型RAM。由于无须为内核及数据存储器执行任何测试例程,因此这些内置自测试模块可简化软件开发及压缩代码空间。所有具备自有数据存储器的外设模块(N2HET、MibADC、FlexRay、DCAN 和 MibSPI)均利用硬件中的奇偶校验逻辑电路予以保护。另外,这些 RAM 区域也可以采用 PBIST 来测试。
    集成型存储器保护单元(MPU)可用于监视特定存储区域的访问以及为这些区域分配特殊的访问权限,它内置了一个 64 位循环冗余校验器(CRC)单元,用于测试存储的静态数据,并可由 DMA 在后台进行操作。此外,外设模块也拥有自己的误差检测能力,如模数转换器(ADC)的自测试。用于误差检测的所有模块均与误差信号传输模块相连,从而实现所有检出误差的集中式优先级处理及可配置的外部信号传输。

    总结与展望
    Hercules TMS570LS安全微控制器系列运用的ARM内核被许多半导体厂商用作处理器内核。基于 ARM的内核由于标准化的原因而拥有众多的优势,这样不少第三方供应商就可以利用开发工具和软件组件来支持这些内核。FlexRay驱动程序和AUTOSAR软件包都可用于Hercules TMS570LS安全微控制器。
    Hercules TMS570LS安全微控制器提供了适用于EV驱动控制的性能、外设和安全功能。此外,如图3所示的Hercules TMS570LS安全微控制器发展计划支持高达4 MB的闪存和变体架构,包括目前的锁步法以及一种可同时执行两个不同程序的双重独立Cortex-R配置。将高速缓存与这些方案配合使用将实现更高的处理能力。
  • 学习Hercules TMS570LS硬件设计入门

    硬件系统 原理图及PCB参考
    原理图以TMS570LS31x Hercules USB Stick Development Kit 参考
    PCB 以TMS570LS31x_USB_STICK_Gerber参考
  • Hercules入门知识

    什么是 Hercules?

    Hercules 安全微处理器是基于 TI 针对汽车电子市场的 20 多年安全关键型系统专业技术、行业协作而发展成熟的硬件。该平台包含三个基于 ARM® Cortex™ 的微处理器系列(RM48x、TMS570 和 TMS470M),可提供可扩展的性能、连接、内存和安全功能。与强烈依赖于软件以获得安全功能的某些微处理器不同,Hercules 微处理器在硬件内实施安全保护,从而使性能最佳化并减少软件使用量。

    产品系列

    RM4x 是 Hercules 安全微处理器系列中性能最高的产品。基于运行速度高达 220 MHz 的 ARM® Cortex™-R4F 浮点内核,它包括闪存和连接选项。为满足 IEC 61508 SIL-3 安全标准和支持要求,已在硬件中集成多个安全功能。

    TMS470M 安全微处理器系列基于广泛采用的、运行速度为 80 MHz 的 ARM® Cortex™-M3 CPU。此系列提供多种闪存和 RAM 存储器选项,并提供 CAN 和 LIN 连接及其灵活的控制外设。包括 CPU 和 RAM 自检 (BIST) 引擎、ECC 和 奇偶校验等内置安全功能。TMS470M 安全微处理器同样符合 AEC-Q100 标准。

    TMS570LS 安全微处理器系列让客户能轻松开发安全关键型运输应用产品。这款基于 ARM® Cortex™-R4F 的系列微处理器可提供多种性能、存储器和连接选择,已开发出满足 ISO 26262 ASIL D 和 IEC 61508 SIL-3 安全标准和符合 AEC-Q100 汽车电子规范的产品。

    硬件中的安全功能

    RM48x 和 TMS570 双核 CPU 锁步构架在消除冗余系统要求的同时也使开发得以简化,从而降低了成本。CPU 硬件内置自检 (BIST) 无需复杂安全软件和代码大小费用即可检测到潜在缺陷。CPU 输出的硬件比较提供即时安全响应时间,而不会对其它性能产生影响。ECC 逻辑集成在 CPU 中,这会对存储器和总线起到保护作用。使用 HW BIST 可对所有 RAM 存储器进行测试,从而实现高诊断覆盖范围,且内存保护单元 (MPU) 对应用软件中的确定性错误起到帮助防范作用。

    Hercules 之GIO学习入门

    GIO 模块提供数字输入捕捉和数字输入/输出。在这个块中没有处理功 能。GIO 通常用于静态的或者很少发生改变的输出,诸如收发器使能信 号、报警光等。GIO 也可被用于提供外部中断输入功能。GIO 的大体框 图如下:(以TMS570系列为例) 

    GIO 主要特点

    GIOA GIOB的每个端口都包含8个双向可位操作的IO引脚

    GIOA 具有外部中断触发功能

    可编程的单边沿触发或者双边沿触发;可编程的边沿极性;可编程的中断优先级;管脚的配置问题;配置数据传输方向;数据输入或者输出配置;数据设置或者清零设置;漏极开路配置;上拉下拉配置。以上的配置都是通过相关的寄存器实现,配置寄存器如下   

    相关寄存器的介绍

    GIOPSL   选择上拉或者下拉操作的寄存器

    GIOPULDIS 失能管脚上下拉操作

    GIOPDR  控制管脚的漏极开路配置

    GIODOUT  配置输出管脚的电平

    GIODIN 从外部管脚读到的数据信息

    GIODIR 控制管脚的方向

    Hercules 系列的ADC学习

    Hercules 器件系列产品执行两个带有共享通道的用于快速转换的模块

    (乒乓操作方法)。使用双ADC 转换器来执行两个通道的系统也许能够在应用中请求故障容错。 Hercules 系列的ADC 不同于我们普通CPU 里面的ADC,称为MibADCADC的结构也是SAR,分辨率是12位。有两个ADC 核的CPU 24个通道的ADC 例如MS570LS20216 24个通道的组成是每个ADC 核自己拥有单独的16个通道的ADC,还有8个通道 是两个ADC内核共享的。

    Hercules 的嵌套中断学习理解

       基本上,Cortex R 内核只提供了IRQFIQ两种默认中断,而且进入IR的ISR后,CPU会自动屏蔽其他所有IRQ。也就是说,只要是IRQ, 无论优先顺位,一律不能嵌套,直到当前的IRQ的ISR执行完成。 如果用户想实现IRQ的中断嵌套,那么可以在进入ISR之后,手动将CPSR (current program status register)寄存器的"I" 位清零。这样后面的更高优先级的IRQ就可以得到响应,并嵌套进来了。 这个嵌套是没有层级限制的但是用户需要自行对被打断的ISR现场进行保护,这个工作也会着嵌套层级增多而变得复杂,稍有不慎,就可能引起内存溢出。所以建议大家谨慎使用中断嵌套。
        在IRQ处理函数起始处通过如下所示汇编代码进行现场保护,处理完毕后再进行恢复。同时在保护好现场后需要将优先级等于或小于本身的IRQ中断禁掉,恢复现场后再将相应中断打开。中断关闭打开操作可以通过VIM进行。这样就可以实现高优先IRQ的 嵌套处理。
     #pragma INTERRUPT(rtiCompare0Interrupt, IRQ)
    void rtiCompare0Interrupt(void)
    {
    /* USER CODE BEGIN (39) */
    /* USER CODE END */   
    rtiREG1->INTFLAG = 1U;   
    asm("   STMFD SP!, {R0-R12, LR}");/*Save R0- R12, LR_irq*/     
    asm("   mrs lr, spsr"); /* Copy SPSR_irq to LR */   
    asm("   STMFD SP!, {LR}"); /* Save SPSR_irq */   
    asm("   MSR CPSR_c, #0x1F"); /* Enable IRQ (Sys Mode) */   
    asm("   STMFD SP!, {LR}"); /* Save LR */   
    rtiDisableNotification(rtiNOTIFICATION_COMPARE0);/*Disable rtiCompare1 Interrupt iteself */   rtiNotification(rtiNOTIFICATION_COMPARE0);    //asm(" LDMFD SP!, {R0-R12}");/*Restore R0-R12*/     
    asm(" LDMFD SP!, {LR}"); /* Restore LR */     
    asm(" MSR CPSR_c, #0x92"); /* Disable IRQ (IRQ Mode) */     
    asm(" LDMFD SP!, {LR}"); /* Restore SPSR_irq to LR */     
    asm(" MSR SPSR_cxsf, LR"); /* Copy LR to SPSR_irq */     
    asm("   LDMFD SP!, {R0-R12, LR}");/* Restore LR */     
    rtiEnableNotification(rtiNOTIFICATION_COMPARE0);/*Enable rtiCompare1 Interrupt  */
    }
     记得做好保护啥
    Hercules 开发流程
    1.使用HALCoGen,根据设定的配置生成代码使用HALCoGen生成代码  
    2.将代码导入到CCS5 3. 由用户根据需要完善代码功能 4.  然后进行编译 5.  编译无误后,利用下载工具下载到CPU中 6.重新上电 运行 以上就是开发Hercules 系列的一般流程 。
  • 对于Hercules,  算是TI最近推广的一款控制器吧,其最突出的特点就是安全性特别高,从它最初应用在汽车行业就可见该系统对安全性的要求。

    我学习Hercules 得益于TI 的合作网站 EEworld 推出的 Hercules 教学视频和资料分享活动,看到楼上Kevin Lee1 把eeworld 论坛里面几乎所有关于Hercules的精华分享都粘贴过来了,又借此学习了一遍,分享是好的,著名出处就更好了,毕竟不是原创的,在eeworld上面早就广为传阅了。

    闲言少叙,说说自己的Hercules 学习例程吧,说实话,学习步骤都是参考了那些优秀的分享。 没有开发板,只能写写程序,熟悉一下开发过程,进行简单的仿真调试。

    首先,开发环境:必备的是CCS 编译环境和 HalCoGen辅助工具。用过 430 Launchpad的人应该对图形化编程软件不陌生, Grace 的界面编程简化了430的初始化,让我们不用再去记那些寄存器名称,可以把更多精力放在程序和算法上面。HalCoGen 使用也很简单,图形化的工具为Hercules编程提供了很大的便利,关于HalCoGen的安装和使用,推荐两篇文章

    http://bbs.eeworld.com.cn/thread-359687-1-1.html

    http://bbs.eeworld.com.cn/thread-357251-1-2.html

    以GPIO为例,通过打钩和连线,可以很方便的实现程序的编写,转化成代码之后就可以使用了。

    附部分程序:

    #if 1

    #include "gio.h"


    /** @fn void gioInit(void)
    * @brief Initializes the GIO Driver
    *
    * This function initializes the GIO module and set the GIO ports
    * to the inital values.
    */
    void gioInit(void)
    {
    /** bring GIO module out of reset */
    gioREG->GCR0 = 1;
    gioREG->INTENACLR = 0xFF;
    gioREG->LVLCLR = 0xFF;

    /** @b initalise @b Port @b A */

    /** - Port A output values */
    gioPORTA->DOUT = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */

    /** - Port A direction */
    gioPORTA->DIR = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */

    /** - Port A open drain enable */
    gioPORTA->PDR = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */

    /** - Port A pullup / pulldown selection */
    gioPORTA->PSL = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */

    /** - Port A pullup / pulldown enable*/
    gioPORTA->PULDIS = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */

    #if 0
    /** @b initalise @b Port @b B */


    /** @b initalise @b interrupts */

    /** - interrupt polarity */
    gioREG->POL = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */

    /** - interrupt level */
    gioREG->LVLSET = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */


    /** - clear all pending interrupts */
    gioREG->FLG = 0xFF;

    /** - enable interrupts */
    gioREG->INTENASET = 0 /* Bit 0 */
    | (0 << 1) /* Bit 1 */
    | (0 << 2) /* Bit 2 */
    | (0 << 3) /* Bit 3 */
    | (0 << 4) /* Bit 4 */
    | (0 << 5) /* Bit 5 */
    | (0 << 6) /* Bit 6 */
    | (0 << 7); /* Bit 7 */
    }


    /** @fn void gioSetDirection(gioPORT_t *port, unsigned dir)
    * @brief Set Port Direction
    * @param[in] port pointer to GIO port:
    * - gioPORTA: PortA pointer
    * - gioPORTB: PortB pointer
    * @param[in] dir value to write to DIR register
    *
    * Set the direction of GIO pins at runtime.
    */
    void gioSetDirection(gioPORT_t *port, unsigned dir)
    {
    port->DIR = dir;
    }

    #pragma INTERRUPT(gioHighLevelInterrupt, IRQ)

    void gioHighLevelInterrupt(void)
    {
    int offset = gioREG->OFFSET0 - 1U;

    if (offset >= 0)
    {
    gioNotification(offset);
    }
    }


    /** @fn void gioLowLevelInterrupt(void)
    * @brief GIO Interrupt Handler
    *
    * Low Level Interrupt handler for GIO pin interrupt
    *
    */
    #pragma INTERRUPT(gioLowLevelInterrupt, IRQ)

    void gioLowLevelInterrupt(void)
    {
    int offset = gioREG->OFFSET1 - 1U;

    if (offset >= 0)
    {
    gioNotification(offset);
    }
    }

    #endif

    通过HalCoGen的配合,可以大大降低Hercules开发难度,更容易上手。

  •       学习汽车电子已经有一段时间了,老板也一直在强调汽车电子安全和可靠的重要性。在设计的过程中,也一直强调尽量降低甚至避免安全性失效。之前无论是用M4 还是DSP, 系统基本可以达到要求,但是安全等级一直上不去。

         看到TI 最近推广的Hercules 安全控制器,虽然没有真正用在项目中,但通过查资料发现该款芯片用在汽车行业最合适不过了。无论是IEC61508定义的安全等级,还是ISO26262定义的安全等级及质量管理等级, Hercules 安全性能无疑是最高的,虽然不能保证完全消除安全性失效,但其性能已经可以满足几乎所有对安全要求比较高的场合。看了部分资料后,Hercules 内部应该有冗余设计,相当于一个单片机在工作,另一个单片机在不断的检测和校验,防止出现错误,这样就大大提高了安全性能。

         打算用Hercules 做汽车马达控制器。Hercules TMS570 频率可以达到80M 以上,完全可以满足实时控制的要求;另外, 容量充足的flash也足以满足编程需要。Hercules 开发相对来说效率也很高,通过HalcoGen 对程序进行初始化,生成代码,导到CCS里面修改,然后下载调试就可以了,开发起来非常方便。相比于传统控制器,更加简单易用。随着电动汽车的发展,汽车行业控制系统要求越来越高,安全性对于汽车控制不言而喻。目前实验室有电动汽车试验平台,可以用Hercules 做一个马达控制系统体验一下其安全性能。

  • HERCULES之IDE CCS5 使用知识分享

    德州仪器 (TI) 宣布推出业界领先的Code Composer Studio集成型开发环境 (IDE) 升级版Code Composer Studio IDE v5。Code Composer Studio IDE基于Eclipse 开源软件框架之上,升级版Code Composer Studio IDE v5可进一步简化嵌入式软件开发工作,其用户界面有了重大改进,安装包缩小达5倍,即能简化开发,也可加速设置,其现在可在 Windows和Linux操作环境中运行。

    Code Composer Studio IDE v5完全可以支持32位与64位的Win7与Linux系统了(对Linux的支持是很方便开发者的改进)。

    Code Composer Studio IDE采用统一用户界面,可帮助开发人员顺利完成应用开发流程的每个步骤。该版本包含一系列可为嵌入式处理应用简化软件设计的工具,能够通过通用开发环境加速软件代码开发、分析与调试。Code Composer Studio IDE v5兼容于TI丰富嵌入式处理产品系列中的众多器件,包括单核与多核数字信号处理器 (DSP)、微控制器、视频处理器以及微处理器等。

    Code Composer Studio IDE v5 的以下增强特性可加速产品进程:

    ○简化的用户界面可为开发人员显示何时需要何种调用,从而可简化并加速开发;
    ○更简洁的下载安装,只下载安装设计所需的组件,无需为无用的组件花费不必要的时间,可帮助开发人员快速为新器件添加支持;
    ○Eclipse 开源框架可帮助开发人员通过第三方插件定制环境,加速嵌入式设计方案的故障排除、分析以及配置文件进程;
    ○集成型浏览器Resource Explorer,有助于使用 TI controlSUITE™、StellarisWare®、MSP430™ 微处理器 Grace 1.1 以及其它软件平台上的丰富范例代码;
    ○视频教程向您介绍如何充分利用各种特性;
    ○从前版Code Composer Studio IDE直接升级,支持软件重复使用。
    Code Composer Studio IDE 的其它特性与优势:

    ○优异的代码开发环境具有高级编辑器以及诸如代码完成、代码折叠、源代码改变本地历史记录、标记以及采用源线路进行关联的能力等特性,可加速设计与故障排除进程。此外,开发人员还可直接观看本机格式的影像与视频;
    ○高级 GUI 框架可通过菜单、工具栏以及快速查看的全面定制创建视图简化数据与项目管理,帮助开发人员根据多处理器上程序的编辑或调试等特定任务定义功能与视图;
    ○多处理器调试可智能管理多个内核的状态与信息,避免在每个内核需要其自己的分立调试器时造成混乱。1200 多款第三方插件支持产品开发,包括静态代码分析、源代码控制、建模以及脚本开发等;
    ○高灵活项目环境使开发人员能够控制每个项目使用的编译器及 SYS/BIOS™ 软件内核基础版本,不但可确保维护模式下的项目继续使用已经部署的工具,同时还可帮助新项目充分利用技术的最新改进特性;
    ○调试服务器脚本界面支持代码确认与配置文件等常见任务自动化;
    ○升级管理器工具可自动管理工具升级。

  • 很庆幸赶上这个活动,最近比较忙,所以没怎么进来论坛,但是并没有减少对TI的关注和使用,关于Hercules自己也没有怎么真正使用过,但是对于TI的MSP430、各种运放,自己还是很了解的,还有LM系列处理器,但是自己还是首先总结一下关于Hercules的优势之处:

    1.针对系统故障管理的开发过程:对于一个安全开发,有必要管理系统和随机故障。德州仪器 (TI)已经针对安全半导体创建了一个唯一的开发过程,此过程大大减少了系统错误的可能性。这一过程建立在一个受标准质量管理的开发过程,此过程作为安全开发的基础。然后这一过程由一个第二层开发活动所补充,此开发活动为针对IEC 61508 的特定安全开发。

    2. 运行状态 HerculesMCU 产品有一个运行状态的共用架构定义。这些运行状态应该由系统开发人员在他们的软件和系统级设计概念中进行观测 • “断电”-这是Hercules MCU 的初始运行状态。内核或者 I/O电源均未加电,器件处于非功能状态。这个状态只能转换到安全状态,并且只能通过安全状态到达此状态。 • “安全”-在安全状态中,HerculesMCU 被加电但还不可用。nPORRST(加电复位、也被成为冷启动)由系统置成有效,但是在电源缓慢上升为稳定状态之前不被释放。如果电源不在一个最小运行范围内,内部电压监视(VMON) 安全机制也会继续将nPORRST 置为器件内部有效。当产品处于安全状态时,CPU和外设不可用。 输出驱动器是被保持在一个只输入状态的三态和输入/输出引脚。 •“冷启动”-在冷启动状态中,关键模拟元件、数字控制逻辑电路、和调试逻辑电路被初始化以为未来使用。CPU 保持供电状态但不可用。当冷启动过程完成时,SYS_nRST信号被内部释放,导致热启动级。 SYS_nRST信号过渡改变能在 SYS_nRSTI/O 引脚上被外部监控。 •“热启动”-热启动模式将信号逻辑电路复位并启用CPUCPU开始从闪存存储器中执行软件并且器件的软件初始化开始。没有硬件连环显示热启动已经完成;这由软件决定。 •“可用”-在可用模式期间,器件能够支持安全功能性。 4.错误管理 当诊断检测到一个故障,这个错误必须被标出Hercules 产品架构使用一个被称为外设错误信令模块(ESM)的外设逻辑电路来提供来自内部安全机制的故障指示集合。ESM 提供了一些机制来将错误按照严重性分类并提供可编程错误响应。
     
    虽然不是很到位,但希望自己以后的继续努力的专研得到好的成果。很期待能够拿到这份奖品,为自己对TI处理器更深入的学习提供好的平台和机会!
    简易综合测试仪.doc
  • 关于Hercules的设计心得,通过自己一直以来对TI的了解和相关处理器的学习专研,加上自己以前的一些学习经验,本次就借助高端定时器传输单元来改进系统性能Hercules™ ARM®安全 MCU此应用自己的一些心得和看法!

    关于如何使用高端定时器传输单元 (HTU),一个 TMS570 和 RM4x 器件上专门用于多用途 可编程定时器 协处理器 (NHET) 的本地 DMA ,通过在主存储器和 NHET 间进行传输来从主 CPU 上减轻任 务负担。 它显示了如何设置 HTU,涉及当使用 HTU 时需要考虑的 特定细节,并且列出了使用 HTU 而不是 CPU 用于数据传输的优势。

                                                     
    上图显示了 TMS570 或者 RM4x 安全微控制器 架构的简化方框图。
    如果 CPU 必须访问 NHET RAM 来更新值或检索数据,路径为 通过交换式中央资源到外设中央资源 (PCR)。 在很多情况下, 这些总线运行在不同的频率上,这意味着一个单周期可花费 几个周期的时间。 CPU 需进行的访问的数量越多,它们对于 总体系统性能的影响越大。 所以,为什么不使用系统 DMA 来将所有这些数据传送至定时器? 它可以 完成并且它将分配 CPU 的一些空 载时间去进行其它操作,但是 CPU 和 DMA 共用到 PCR的同一个单总线接口。 所以如果两个外设都进行访 问,那么在两个外设间将出现竞争 和仲裁,这将使得其中一个外设慢下来。 HTU 通过提供到 NHET RAM 的直接访问和一个用于直接访问 R-4 TCM RAM 的 主控端口来解决这个瓶 颈。 SCR 将通过不同主控到系统的不同受控来实现并发 处理。 在上图中的示例中,一个 CPU 到 CRC 模 块的访问,一个到 外设的 DMA 访问,和一个到 CPU 主 RAM 的 HTU 传输,可同时进行。 其它优势 是,CPU 所需的或者需要更新的数据驻留在本地 CPU RA 中,通常计时为一个 单周期访问。 所以 CPU 能 够更快速地获得相关数据并且能够自由访问针对 DMA 的 PCR,从而增加了总体系统性能。 在边注上,在看见上图时,用户也许会感到奇怪,为什么 HTU 没有到 NHET RAM 的直接访问。 虽然 NHET 架构允许同时方位多个不同的 RAM 位置,在同一个 时钟周期内,NHET 和 HTU 仍然 有可能在访问 同一个存储器位置时发生竞争。 通过在能够访问 NHET RAM 的不同 主控之间加入仲裁器,已经将这个情 况考虑在内。 NHET 将一直获得优先级,这样 NHET 程序执行不会被停止。 针对大多数访问情 况,Hercules 架构已经被设计用于提供非常高的 性能。
                                  
                                                  
    应用:有关智能家庭相关解决方案的应用:

    1.电视音量智能化

    研究内容:

    本模块旨在实现家庭电视的人性化服务,在客厅电视声音影响的范围内当有手机即将进行语音通话时,正在工作的电视将会根据距离手机的远近调节合适的音量以达到不影响手机的正常通话;当通话结束后电视音量会自动恢复,恰到好处的体现了现代智能家居的设计理念。

    实施方案:

    此模块包括手机软件wifi交互和系统红外模块以下两个部分:

    手机软件wifi交互:设计一个手机软件检测手机的来电和拨打电话信号,用户首先安装此软件,当在电视影响范围内通话时此软件运行通过wifi将信号传给本系统主模块,Hercules通过wifi接收模块接收、处理数据;当手机通话结束后同样会向进行手机和本系统的wifi交互,具体原理如下:

    eclipse中设计android系统平台下的软件,在家里后台运行的该软件会实时检测到手机是否有语音通话,如果在有效范围有手机通话进行,手机将会以数据包的形式通过wifi发送到Hercules平台上的wifi接收模块;通话结束后会进行同样的操作。

    系统红外模块:当wifi接收模块接收到手机通话的信号后,Hercules会在软件的驱动下分析次信号的强弱并通过红外模块向电视发送音量调低多少的命令;当wifi接收到手机通话结束的信号后,Hercules处理并向电视发送回复音量的命令。

    流程图:

        2.灯光控制模块

        研究内容:

        本模块主要实现对于家庭环境中光线的控制。舒适的家庭一定是在适宜的光线环境下,所以在智能家庭解决方案中,对于家庭光线的控制是必不可少的。当家庭中有成员活动时,本模块能够自动地采集数据,并科学地反应房间光线状态。在得到房间光线状态之后,模块将进行光线调节,直到光线环境达到一个适宜的状态。以上便是本模块的主要功能。

        实施方案:

        为了减少对于资源的无谓消耗,本模块才只有在家庭成员活动的情况下才会启动,所以检测家庭成员活动信号是本模块需要实现的功能。对于这一功能,我们采用红外计数的方式来实现。首先在房间门口安装红外计数器,当有家庭成员进入或离开房间时,红外计数器记录进入或离开的人流数。若人流数为正,则表明房间中有家庭成员活动,本模块开启,否则本模块以低功率待机。

    本模块的另一功能则是要实现房间光线状态的采集。为了实现这一功能,我们采用光线传感器接受光信号,再将光信号转换位电流信号。光信号越强,则传感器输出的电流信号越强,反之越弱,所以就能实时地反应房间光线状态。

        ƒ在实现了信号采集的工作后就将进行光线的调节功能。经过考察,我们发现通常房间中存在的光源分为人造光源(如电灯)和自然光源(如日光),只要能够控制光源就能够实现光线的调节。对于人造光源的控制,我们采用电路耦合的方式能够相对直接地进行控制。对于自然光源,我们无法实现控制,于是便采用限制的方法间接控制。分析过后,我们决定通过机械方法控制窗帘的开合限制自然光进入,从而达到控制自然光源的目的。为了达到控制智能化,我们还在程序中限定以控制自然光源的方式为优先方式,这样就能更大程度节约家庭资源。

    以上便是灯光控制模块的研究内容以及实施方案。

    作为一名在校大学生,由于能力的有限自己可能做的还不是很好,但并没有阻碍自己的学习,希望可以抓住这一次机会有幸得到这一款板子,给自己提供一个更好的平台去学习,深入了解TI。
    附图.doc
  •     Hercules 是一款安全所谓的安全MCU,主要用在安全性要求比较高的场合,我们实验室产品对安全性等级要求也不是特别高,并且电动汽车平台都在用dspace, 对于这款新兴的安全MCU, 只能自己学习了。

       之前在一些科技竞赛中,做过电梯模拟的系统,在实现基本要求的情况下,还加入了比较流行的“群”算法,简单讲就是几台电梯协同工作以达到最大效率。后来观察办公楼里面用的电梯,也是2电梯群控系统。我想引入这种系统的初衷也是为了节能吧,但是日常使用中,经常看到电梯“罢工”,无法起到同时工作节省能源的作用。联想到自己之前做的模型,电梯群控系统还是比较容易出现差错的。无论是传统的MCU 还是PLC, 在电梯控制中其性能都无法达到最高要求,看了Hercules的介绍,在考虑把这么一种安全的MCU 引入的自己的模型中,通过提升控制系统的安全性,来降低整个系统的出错率。

         看了许工讲解Hercules的视频,对Hercules有了基本了解,查了TMS570LS3137的datasheet,感觉资源比较丰富。值得一提的是Hercules开发环境很好的延续了之前430开发简单直观的特点,对于熟悉430的我来说,应该不成问题。通过Halcogen 图形化编程环境对系统初始化,生成代码,导到CCS里面继续完善,就可以烧写调试了,开发过程也非常简单。丰富的资源、高效的开发环境、高安全性使我特别想把它运用在电梯模拟控制系统中,体验一把其特性。

  • 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 !

  • 一个编程问题

    怎样在chip level的schematic netlist中merge stdcell及IP的schematic信息?
    run hercules lvs时报告netlist中所有的std cell 都没有定义。

    run lvs,通过报告可以看见问题出在compare时,
    报告所有的std cell 及IP:
    ERROR (CMP-270): Schematic instance type sdcrq1 is not defined in netlist and has no EQUATE entry in runset

    解决方法

    在nettran时,加上std cell 及I/O cell的cdl文件。
    nettran -verilog ../verilog/design.v -cdl library.cdl -cdl io.cdl -verilog-b1 VDD -verilog-b0 VSS -outName ../herc/design.herc

  • 再次感谢大家的积极参与!通过这次活动,感到大家对Hercules产品还相对陌生。经内部讨论,我们把评奖也放松了一些标准。未来,对于Hercules产品我们还需更加努力推广啊:)

    现公布获奖名单如下:(有问题的朋友,请给我发站内信,谢谢大家!)

    优秀分享奖:

    Lizhe Liu ; jiabin guo ;Surface;Kevin Lee1 ;anvy178

    阳光普照奖:

    wang yingzhen ; henry he ;wang changlong ;xianfeng li;longfei feng ;Leer Peng ;QB ;Joseph Lin ;Longfei Chen ;minjie yuan1;li zhen;ShiYong Chen ; shilei lv1 ;hwang ce ;xie yuanfu ;liu xinran ;未来的某一天 ;changhu fang ;han chen ;bo zhang1 ;lulu wang ;xiuxing zhang ;lianjie ji ; whh ;feifei zhuang  ;jun qiao hu

  • 中奖了,好高兴啊!

    这是我的联系方式:

                                      地址     河北省 秦皇岛市 燕山大学 西校区 电气工程学院

                                      电话      18713509945

    谢谢了,感谢TI,感谢论坛!

  • 呵呵!!貌似小弟我也中奖了啊!!!!以下是我的地址:

    四川省成都市郫县西华大学电气信息学院    章秀星收

    电话号码:18780103207

    感谢TI公司的奖励,,我会更加努力的。。。。谢谢

     

  • 请大家不要在此回复。我们物流公司近期会和每位获奖人联络确认地址。谢谢!

  • 收到U盘了 ,感谢