微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 将CompactECC移植到爱特梅尔新型SAM3S控制器

将CompactECC移植到爱特梅尔新型SAM3S控制器

时间:02-18 来源:电子产品世界 点击:
       爱特梅尔公司(Atmel Corporation)与ubisys合作,将其CompactECC库移植到爱特梅尔采用ARM Cortex-M3内核新型的SAM3S控制器中。这些通用微控制器适用于众多应用,尤其是智能电表市场的理想选择。

起始点:SAM7S/SAM7X

德国一家大型电表制造商从2009年10月就开始在其最新产品中采用这个ubisys CompactECC版本。由于爱特梅尔的AT91SAM7X控制器带有嵌入式以太网MAC,是SyM²电表的理想选择。因此,ubisys选择SAM7作为支持优化p192r1 ECC产品的初始平台。为了满足客户要求,下一个被支持的平台是爱特梅尔的8位 AVR,为超大批量、价格敏感的EDL电表提供高成本效益方案。

这里给出几个相关数字,SAM7X上运行在48MHz主时钟频率下的 ECDSA签名在140ms内可以完成,并需要大约8 KB ROM和2.5KB RAM,可以执行SyM ²电表的所有必要任务。 在这个基准上, C++编译器按照主要生成16位Thumb 指令 (约 99 %)的方式进行配置。这样一来,代码可从32位宽的预取缓冲器获益。 这个缓冲器的作用相当于一个极简指令缓存, 爱特梅尔将之集成到它的SAM7控制器中,以便在控制器的运行频率超出闪存的最大存取频率时提高16位Thumb指令的执行速度。 没有这种预取缓冲,当运行频率超过30MHz时,对闪存中存储的指令和数据进行存取就必然会因强制性等待状态而带来不良影响。 而有了预取缓冲的帮助,第2个16位Thumb 指令可以从缓冲器中载出,并由内核执行,而下一个32位字从快闪 ROM搬移到缓冲器。 在大多数情况下,这种方法可以为ARM内核的指令管线提供一个稳定的指令流。

至于CompactECC,只有单个计算极为密集的乘法(192 位 x 192 位生成 384 位结果)以一个采用32位ARMv4指令并直接从SRAM执行的手工编写的汇编程序的形式来实现。即使是在最大时钟速度之下,同步RAM的存取时间从来不超过一个时钟周期。

移植到SAM3S

最后,SAM3S的移植到底有多么复杂和耗时呢?以CompactECC库本身来说,5分钟之内就可以完成。至于项目设置,在C++编译器选项之下,代码生成目标已从ARM7TDMI变为Cortex-M3――差不多就是这样。

鉴于Cortex-M3不支持ARM模式(不用担心,Thumb-2中包含有32位ARM指令),必须得对上面提到的用于乘法操作的单行汇编源代码进行修改,也就是表明指令集被使用的指示。实际指令根本没有被涉及。由于SAM3提供有一条比SAM7宽四倍的闪存总线,故不再需要让该代码从以往的SRAM执行。

另外,还应该考虑到ARM7采用的是冯诺伊曼(Von-Neumann)架构, Cortex-M3却是基于数据和指令路径相互独立的哈佛(Harvard)架构。因此,若从闪存取指令,而从SRAM 读取和存入数据,可以获得最高的吞吐量。由于没有其它硬件依赖性需要考虑,CompactECC移植的算法部分就算完成了。

处理器模式也被简化,随之影响到硬件堆栈的数目和其初始化。ARM7TDMI支持7个工作模式(USR、FIQ、IRQ、SVC、ABT、SYS、UND),这表明该内核最初是针对具有多任务处理和分页等功能的成熟操作系统而设计的。相反地,Cortex-M3是针对控制器应用从头开始量身定做的,有两种模式就足够了。正常的程序执行采用线程模式(thread mode),中断则采用处理模式(handler mode)。实际上,ARM7TDMI程序内通常设置有两或三个堆栈:一个用于应用程序,一般运行在管理模式(supervisor mode,SVC)下;一个用于中断(IRQ);另一个用于快速中断(FIQ)。其余的处理器模式一般对控制器应用无用。此外,Cortex-M3设计包含一个(“主要”)或两个(“主要”和“进程”)堆栈。

当启动顺序运行时,在堆栈初始化之后,底层硬件初始化很快被执行。甚至在C/C++运行库控制之前,SAM7应用程序就从32 kHz振荡器切换到晶振,并且把PLL编程到其工作频率。这项工作应尽可能早完成,以加速包含预定义内容的存储器段的初始化,实际上最终提升整个系统启动体验。

SAM3S包括两个独立的PLL模块,对那些需要提供48 MHz USB时钟,却又很难从主时钟频率获得的应用程序十分有利。除了32KHz RC振荡器之外,SAM3S 还提供更快的内部 RC振荡器,有4、8或12 MHz 的输出频率选项。该振荡器从一开始就激活,提供初始4 MHz主时钟频率。它的主要作用是根据系统时钟来配置快闪的等待状态。爱特梅尔已经简化了嵌入式快闪控制器接口。使用前几代产品时必须注意主时钟频率的快闪控制器,至少当应用程序在快闪存储器页面执行写操作时应该如此。而SAM3S则不需要。

有好些外设模块,包括功率管理控制器,都具有保护功能,帮助其避免对任务

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top