MCU

简单的说,进入了电子,不管是学纯模拟,还是学单片机,DSP、ARM等处理器,或者是我们的FPGA,一般没有不用到按键的地方。按键:人机交互控制,主要用于对系统的控制,信号的释放等。因此在这里,FPGA上应用的按键消抖动,也不得不讲!

一、为什么要消抖动

在按键被按下的短暂一瞬间,由于硬件上的抖动,往往会产生几毫秒的抖动,在这时候若采集信号,势必导致误操作,甚至系统崩溃;同样,在释放按键的那一刻,硬件上会相应的产生抖动,会产生同样的后果。因此,在模拟或者数字电路中,我们要避免在最不稳定的时候采集信号,进行操作。

对此一般产用消抖动的原理。一般可分为以下几种:

(1)延时
(2)N次低电平计数
(3)低通滤波
在数字电路中,一般产用(1)(2)种方法。后文中将详细介绍。

二、各种消抖动

1. 模拟电路按键消抖动

对于模拟电路中,一般消抖动用的是电容消抖动或者施密特触发等电路,再次不做具体介绍。

“”

2. 单片机中按键消抖动

对于单片机中的按键消抖动,本节Bingo根据自己当年写过的单片机其中的一个代码来讲解,代码如下所示:

unsigned char key_sCAN(void)
{
if(key == 0) //检测到被按下
{
delay(5); //延时5ms,消抖
if(key != 0)
retrurn 0; //是抖动,返回退出
while(!key1); // 确认被按下,等下释放
delay(5); //延时5ms,消抖
while(!key1); //确认被释放
return 1; //返回按下信号
}
return 0; //没信号
}

针对以上代码,消抖动的顺序如下所示:

(1)检测到信号
(2)延时5ms,消抖动
(3)继续检测信号,确认是否被按下
a) 是,则开始等待释放
b) 否,则返回0,退出
(4)延时5ms,消抖动
(5)确认,返回按下信号,退出

当然在单片机中也可以循环计数来确认是否被按下。Bingo认为如此,太耗MCU资源,因此再次不做讲述。

3. FPGA中的按键消抖动

对于FPGA中的消抖动,很多教科书上都没有讲述。但Bingo觉得这个很有必要。对于信号稳定性以及准确性分析,按键信号必须有一个稳定的脉冲,不然对系统稳定性有很大的干扰。

此处Bingo用两种方法对FPGA中按键消抖动分析。其中第一种是通过状态机的使用直接移植以上MCU的代码,这个思想在FPGA状态机中很重要。第二种,通过循环n次计数的方法来确认是否真的被按下,这种方法很实用在FPGA这种高速并行器件中。

(1)利用状态机移植MCU按键消抖动
此模块由Bingo无数次修改测试最后成型的代码,在功能上可适配n个按键,在思想上利用单片机采用了单片机消抖动的思想。具体代码实现过程请有需要的自行分析,本模块移植方便,Verilog代码如下所示:

/*************************************************
* Module Name : key_scan_jitter.v
* Engineer : Crazy Bingo
* Target DevICe : EP2C8Q208C8
* Tool versions : QUARTus II 11.0
* Create Date : 2011-6-26
* Revision : v1.0
* DescripTIon :
**************************************************/
module key_scan_jitter
#(
parameter KEY_WIDTH = 2
)
(
input clk,
input rst_n,
input [KEY_WIDTH-1:0] key_data,
output key_flag,
output reg [KEY_WIDTH-1:0] key_value
);
reg [19:0] cnt; //delay_5ms(249999)
reg [2:0] state;
//-----------------------------------
always @(posedge clk or negedge rst_n)

本文转自网络,版权归原作者,如果您觉得不好,请联系我们删除!

围观 15

很多MCU开发者对MCU晶体两边要各接一个对地电容的做法表示不理解,因为这个电容有时可以去掉。笔者参考了很多书籍,却发现书中讲解的很少,提到最多的往往是:对地电容具稳定作用或相当于负载电容等,都没有很深入地去进行理论分析。而另外一方面,很多爱好者都直接忽略了晶体旁边的这两个电容,他们认为按参考设计做就行了。但事实上,这是MCU的振荡电路,又称“三点式电容振荡电路”,如图1所示。

“图1:MCU的三点式电容振荡电路”
图1:MCU的三点式电容振荡电路

其中,Y1是晶体,相当于三点式里面的电感;C1和C2是电容,而5404和R1则实现了一个NPN型三极管(大家可以对照高频书里的三点式电容振荡电路)。

▼接下来将为大家分析一下这个电路 ▼

首先,5404必需搭一个电阻,不然它将处于饱和截止区,而不是放大区,因为R1相当于三极管的偏置作用,能让5404处于放大区域并充当一个反相器,从而实现NPN三极管的作用,且NPN三极管在共发射极接法时也是一个反相器。

其次将用通俗的方法为大家讲解一下这个三点式振荡电路的工作原理。

众所周知,一个正弦振荡电路的振荡条件为:系统放大倍数大于1,这个条件较容易实现;但另一方面,还需使相位满足360°。而问题就在于这个相位:由于5404是一个反相器,因此已实现了180°移相,那么就只需C1、C2和Y1再次实现 180°移相就可以了。恰好,当C1、C2和Y1形成谐振时,就能实现180移相;最简单的实现方式就是以地作为参考,谐振的时候,由于C1、C2中通过的电流相同,而地则在C1、C2之间,所以恰好电压相反,从而实现180移相。

再则,当C1增大时,C2端的振幅增强;当C2降低时,振幅也增强。有时即使不焊接C1、C2也能起振,但这种现象不是由不焊接C1、C2的做法造成的,而是由芯片引脚的分布电容引起,因为C1、C2的电容值本来就不需要很大,这一点很重要。

▼那么,这两个电容对振荡稳定性到底有什么影响呢? ▼

由于5404的电压反馈依靠C2,假设C2过大,反馈电压过低,这时振荡并不稳定;假设C2过小,反馈电压 过高,储存能量过少,则容易受外界干扰,还会辐射影响外界。而C1的作用与C2的则恰好相反。在布板的时候,假设为双面板且比较厚,那么分布电容的影响则 不是很大;但假设为高密度多层板时,就需要考虑分布电容,尤其是VCO之类的振荡电路,更应该考虑分布电容。

因此,那些用于工控的项目,笔者建议最好不要使用晶体振荡,而是直接接一个有源的晶振。很多时候大家会采用32.768K的时钟晶体来做时钟,而不是通过单片机的晶体分频来做时钟,其中原因想必很多人也不明白,其实上这是和晶体的稳定度有关:频率越高的晶体,Q值一般难以做高,频率稳定度也比较差;而 32.768K晶体在稳定度等各方面的性能表现都不错,还形成了一个工业标准,比较容易做高。另外值得一提的是,32.768K是16 bit数据的一半,预留最高1 bit进位标志,用作定时计数器内部数字计算处理也非常方便。

来源:畅学单片机

围观 14

我们在从事MCU应用开发过程中,难免会碰到MCU芯片异常的问题。比如异常复位,表现为复位脚有电平跳变或者干脆处于复位电平;在做代码调试跟踪时,发现代码往往进不到用户main()程序;或者时不时感觉芯片死掉了,功能完全不可控等。

针对类似严重异常情况的原因我在这里大致总结下,与大家分享。

1、时钟问题。一般表现在时钟配置异常,比方配置超出芯片主频工作范围。【对于STM32系列MCU,如果使用STM32CUBEMX图形化工具做配置,基本可以回避这个问题】

2、电源问题。比方电源质量差,纹波过大,尤其开关电源供电时;或者供电芯片质量差,输出不稳定;或者系统供电能力不足而引起电源波动等。

3、BOOT脚配置问题。对于ARM芯片往往都有些BOOT配置脚。经常遇到有人因为BOOT脚的焊接或接触不良导致各类奇怪问题。这种情况多表现在芯片功能时好时坏,或者部分芯片正常,部分芯片异常。

4、启动文件问题。经常因为选错了启动文件,导致程序无法正常运行,或者说调试时好好的,脱机运行就出鬼。这点在做不同系列芯片间移植时最容易碰到。

5、中断请求位清除问题。由于中断请求位没有及时清除导致中断没完没了的重复进入,感觉系统死机一般。

6、堆或栈的越界溢出。这个也会导致芯片无法正常工作,调试时往往可能会有硬错提示。

7、VCAP脚问题。有些MCU芯片有VCAP脚,该类脚往往需要接上适当的电容,如果无视了它的话,也可能导致整个芯片的功能异常。

上面这几个原因比较容易导致MCU出现功能严重异常,也不太容易简单地通过查看MCU技术手册直接获得答案,分享出来算作一些提醒。

来源:玩转单片机

围观 11

我们应该知道,有一种开关电源是通过PWM波来实现的,但你知道通过PWM波也能输出负电压吗?

负电压的产生电路图原理

在电子电路中我们常常需要使用负电压,比如我们在使用运放的时候常常需要建立一个负电压。下面就简单的以正5V电压到负电压5V为例说一下它的电路。

通常需要使用负电压时一般会选择使用专用的负压产生芯片,但这些芯片都比较贵,比如ICL7600、LT1054、MC34063等。MC34063使用的最多了,关于34063的负压产生电路这里不说了,在datasheet中有的。下面请看我们在单片机电子电路中常用的两种负电压产生电路。

现在很多MCU都带有PWM输出,在使用单片机的时候PWM很多时候是没有用到的,用它辅助产生负压是不错的选择。

上面的电路是一个最简单的负压产生电路了。使用的原件是最少的了,只需要给它提供1kHz左右的方波就可以了,相当简单。这里需要注意这个电路的带负载能力是很弱的,同时在加上负载后电压的降落也比较大。

由于上面的原因产生了下面的这个电路:

负电压产生电路分析

电压的定义:电压(voltage),也称作电势差或电位差,是衡量单位电荷在静电场中由于电势不同所产生的能量差的物理量。其大小等于单位正电荷因受电场力作用从A点移动到B点所做的功,电压的方向规定为从高电位指向低电位的方向。

说白了就是:某个点的电压就是相对于一个参考点的电势之间的差值。V某=E某-E参。一般把供电电源负极当作参考点。电源电压就是Vcc=E电源正-E电源负。

想产生负电压,就让它相对于电源负极的电势更低即可。要想更低,必须有另一个电源的介入,根本原理都是利用两个电源的串联。电源2正极串联在参考电源1的负极后,电源2负极就是负电压了。

一个负电压产生电路:利用电容充电等效出一个新电源,电容串联在GND后,等效为电源2,则产生负电压。

1、电容充电:当PWM为低电平时,Q2打开,Q1关闭,VCC通过Q2给C1充电,充电回路是VCC-Q2-C1-D2-GND,C1上左正右负。

2、电容C1充满电。

3、电容C1作为电源,C1高电势极串联在参考点。C1放电,从C2续流,产生负电压。

当PWM为高电平时,Q2关闭,Q1打开,C1开始放电,放电回路是C1-C2-D1,这实际上也是对C2进行充电的过程。C2充好电后,下正上负,如果VCC的电势为5点几伏,就可以输出-5V的电压了。

内容来源嵌入式资讯精选,希望对你有帮助。

围观 15

Holtek A/D Flash MCU with EEPROM系列新增HT66F0184成员,HT66F0184为HT66F0185的精简版,因此具有更低成本的优势。此产品特点为具备高精度HIRC、10-bit ADC及LCD Driver,适用于生活家电、民生消费品、电动工具、工业控制等应用领域,如电动车仪表、温控器、搅拌器等产品。

HT66F0184工作电压为2.2V~5.5V,系统资源为4K×15 Flash Memory、192×8 RAM、32×15 emulated EEPROM、4通道10-bit ADC、LCD Driver、两组10-bit CTM、一组10-bit STM及高精度HIRC。

HT66F0184提供24SOP/SSOP与28SOP/SSOP封装方式。

来源:HOLTEK

围观 48

Holtek新一代具高抗干扰能力Enhanced Touch A/D LCD Flash MCU系列推出新型号BS67F350C,提供24个具高抗干扰能力的触摸键,内建最新的Enhanced Touch Key Engine,强化Touch Key算法的执行效率;充足的程序空间及丰富的系统资源,特别适合功能复杂并需求多触摸键、温度侦测及带LCD显示的产品,如温控器、微波炉、电饭锅、除湿机等应用。

BS67F350C可抵抗各式噪声的干扰,如电源噪声、RF干扰、电源波动,并通过CS (Conductive Susceptibility ) 10V动态测试。内建1/3 Bias的LCD Driver支持R-type与C-type,可直推液晶显示器,点数为24 SEG x 4COM / 32 SEG x 4COM / 40 SEG x 4COM,大幅简化产品应用零件及降低成本,引脚定义与BS67F350兼容,不需重洗PCB板可直接替换,封装提供48/64LQFP。

BS67F350C适合当主控MCU,搭配适当电源板即可实现应用产品。Holtek同时提供软、硬件功能齐全的发展系统,在软件上提供完整的触摸函式库,使客户能快速上手,硬件使用e-Link,并搭配专用的OCDS (On Chip Debug Support) 架构的MCU,可提供客户快速的开发及仿真,达到Time to Market的目的。

来源:HOLTEK

围观 42

伴随汽车智能化提速,汽车半导体加速成长。当前全球汽车每年销量超过9500万辆;汽车半导体市场规模高达300亿美元。汽车半导体按种类可分为功能芯片MCU(MicrocontrollerUnit)、功率半导体(IGBT、MOSFET等)、传感器及其他。

根据StrategyAnalytics统计,在传统燃油汽车中,MCU价值量占比最高,为23%;在纯电动车中,MCU占比仅次于功率半导体,为11%。

DIGITIMES预测,功能芯片MCU市场规模有望从2017年66亿美元稳步提升至2020年72亿美元。


目前,汽车功能芯片MCU呈现国外巨头垄断的行业格局。随着中美贸易摩擦不断升级,对中国车企引入国外核心技术及核心零部件都增加了障碍。但时势造英雄,严峻的形势也为中国汽车行业提供了机会,势必加速中国汽车芯片产业的发展,加快自主研发和创新的步伐。在核心技术研发方面,更需要中国汽车企业时刻“警醒”,避免“芯片危机”。


“打铁还需自身硬”,机会总是留给有准备的人。国内领先的工业级汽车级MCU厂商上海芯旺微电子(ChipON Micro)自主研发出适用于汽车市场所需的高可靠性、高安全性的车规级MCU——KF8A系列,此系列包含了17款车规级MCU- KF8A100和KF8A200,采用了自主的KungFu8内核架构。 KF8A系列MCU均通过了AEC-Q100汽车电子系统质量标准认证。温度等级达到Grade1,满足-40℃~125℃工作温度范围,同时具备高可靠性、 强抗干扰能力,可抵抗各式噪声干扰,如电源噪声、RF干扰、电源波动等, 所有管脚均可承受8KV ESD(人体模式)接触放电; 芯片可以轻松通过4.2KV EFT 干扰测试 。KF8A系列MCU的研发和量产打破了车规级MCU一直被国外巨头垄断的局面。

特色优势介绍:
1、自主内核架构处理器和开发工具

KF8A100和KF8A200均采用了ChipON自主研发的KungFu8内核架构处理器,该处理器采用流水线结构,提高了指令运行效率和稳定性。使用自主内核处理器,不存在芯片IP授权问题,也没有被禁用的风险。同时,ChipON还自主研发了开发工具,包括集成开发环境、C编译器和仿真器。真正意义上实现了从芯片到工具链的全自主。

2、高可靠性,车规级品质

KF8A100和KF8A200全部通过了AEC-Q100汽车电子系统质量标准认证。温度等级达到Grade1,满足-40℃~125℃工作温度范围,所有管脚均可承受8KV ESD(人体模式)接触放电; 芯片可以轻松通过4.2KV EFT 干扰测试 。 且KungFu8处理器经过了10年的验证,工业级、车规级MCU累计出货超5亿片,车规级MCU不良率低于10PPM。

3、资源丰富,模数混合

KF8A100和KF8A200共计17款车规级MCU,Flash从4KB-64KB,管脚从14PIN-100PIN,采用模数混合设计思维,提供更为丰富的外设资源,包括支持100万次擦写寿命的DATA EEPROM,12bit ADC,12bit DAC,16位PWM,16位ECCP模块,TouchKey触摸按键,步进电机控制单元,LCD显示驱动,模拟比较器CMP,运算放大器AMP;通信接口方面除了传统的USART,针对汽车电子应用提供了LIN和CAN总线通信接口。

这些资源基本覆盖汽车车载电子控制模块的应用,包括适用于车灯、汽车开关面板、门窗控制、声音控制、水泵控制、汽车仪表面板显示等汽车电子控制模块。


KF8A100和KF8A200产品图示

来源:电子工程专辑

围观 61

开发的功能安全控制器的主控制芯片MCU,其安全状态与系统的安全状态怎样配合在一起,需要考虑哪些因素?

首先明确MCU通常定义的5种安全状态中除去正常运行状态,当发生故障或失效时,MCU进入另外4种安全状态的某种时,开发人员需要保证整个系统能够进入系统的安全状态。

为了系统安全状态与MCU安全状态能够匹配在一起,可以通过以下步骤分析并开发:

步骤一:首先确定MCU在各故障或失效情况下需要进入哪种MCU安全状态

1)MCU的安全手册上面定义了相应的安全机制来处理MCU内部的故障或失效,这些机制的描述里面会有推荐采用哪种处理方式,优先采用推荐方式(比如当检测到供电电压过低时MCU复位;或者MCU检测到内部错误通过专门的故障指示引脚对外指示内部错误信号)。

2)对于安全状态可选的MCU内部故障或失效,先设为待定;

步骤二:匹配系统安全状态与MCU安全状态

利用FMEA分析的方式,分析步骤一里面MCU不同的故障和失效发生时,在系统层面会引发的系统失效是怎样的,并根据设定的安全目标来反过来验证MCU进入的安全状态是否能够保证系统也能进入安全状态。

这里分情况讨论:

1)对于采用MCU安全手册里给明的要进入的安全状态,此时主要检查系统设计,确认MCU的安全状态进入并保持时,系统能够进入系统安全状态并保持;

2)对于步骤一的第二种情况,先看失效在系统层面的影响——>结合系统安全目标——>选定MCU需要进入的安全状态——>进一步检查系统机制设计是否能够保证不违反安全目标;如不满足,则需要考虑更改系统层设计。

举例:比如MCU发生内存随机错误,导致软件输出的控制指令异常,此时可以采用的MCU安全状态有:对外报告错误、复位、断电或关闭MCU所有输出及通讯功能。

此时要看发生错误时控制指令输出异常会不会导致严重的系统故障并违反安全目标,比如电动助力转向EPS的助力电机控制指令发生异常潜在会导致严重问题,应对这种情况,一个合适的MCU安全状态选择是对外报告错误并切断MCU的指令输出,并在系统层面上保证此时助力电机不工作。

步骤三:检查并确认系统的FTTI, L-FTTI指标能够满足

由于MCU探测到自身故障并驱动进入MCU安全状态,再到系统进入其安全状态,整个过程需要一定的时间。该步骤就是要保证针对单点失效,从MCU发生故障到系统进入其安全状态耗时在系统FTTI之内。而针对潜在故障,相应指标也能满足在L-FTTI内。

完成上面三个步骤,基本上可以做到MCU故障或失效进入的MCU安全状态与系统安全状态之间匹配,从而指导开发人员依据MCU手册来实现MCU的安全机制,并且和系统层面的安全机制结合在一起。

本文转自: IND4汽车人 - Jason021,转载此文目的在于传递更多信息,版权归原作者所有。

围观 57

在使用MCU的嵌入式系统设计中,当程序或者数据内存占用太大而无法放入片上闪存或SRAM时,开发者通常考虑使用SDRAM。

别问我为什么你的MCU不支持SDRAM

SDRAM是同步动态随机存取存储器的缩写。在微控制器应用中,微控制器通过使用外部存储控制器(EMC)操作访问SDRAM ,SDRAM时钟频率通常为100MHz或133MHz。

外部存储控制器通常不支持DDR SDRAM, 数据只是单边沿采样,即并行数据总线可以接受一个命令并在每个时钟周期传输一个数据字。

在SDRAM中执行程序是使用SDRAM的一种典型用法, 小编这里就介绍一下SDRAM中执行程序的方法和SDRAM执行程序的性能基准。

SDRAM初始化

SDRAM必须在使用前进行配置,SDRAM初始化分为6个步骤。

① 配置EMC寄存器的SDRAM时钟频率、字节顺序和时序参数。
SDRAM的时序比较复杂,用户需要通过查阅相关SDRAM芯片的手册获得时序参数(如刷新周期、预充电命令周期、自刷新退出时间、写恢复时间等等)。

② 发送NOP命令

③ 发送预充电命令

④ 发送两次自动刷新命令

⑤ 设置SDRAM模式

⑥ 发送正常运行命令

系统启动时,SDRAM尚未初始化。理论上,程序在系统启动后的任何时刻都可以进行SDRAM初始化。然而,由于SDRAM初始化过程比较复杂,使用的系统资源较多,SDRAM初始化必须在所需的系统资源初始化完成后再进行。

具体上讲,开发者在芯片刚刚启动时(如Reset_Handler中)初始化SDRAM需要留心以下细节:

① 由于SDRAM初始化函数使用系统堆栈或全局变量,开发者必须确保系统堆栈或全局变量所在的物理内存上电及时钟使能。

② 在程序跳转到主程序启动之前,全局变量未清零或初始化,如果在主函数之前执行SDRAM初始化,开发者必须手动初始化变量。

举个例子,在LPC5460x中,开发者需要在SystemInit函数中初始化SDRAM,该函数(SystemInit)由Reset_Handler调用。在调用系统初始化之前,要通过设置AHBCLKCTRLSET0寄存器将SRAM时钟使能。

Reset_Handler   PROC
EXPORT  Reset_Handler               [WEAK]
IMPORT  SystemInit
IMPORT  __main
; clock control SRAM1/SRAM2/SRAM3 for stack
LDR     r0, = 0x40000220 ; AHBCLKCTRLSET0
MOV     r1, #0x38
STR     r1, [r0]
LDR     r0, =SystemInit
BLX     r0
LDR     r0, =__main
BX      r0
ENDP

SDRAM存储器布局

当使用SDRAM时,外部存储控制器(EMC)分配SDRAM一定的地址空间。开发者可以使用链接描述文件将代码或数据分配到SDRAM中。值得注意的是,链接器脚本编程在不同IDE之间是不同的。

以LPC5460x系列微控制器为例,SDRAM支持4个片选区,每个片选区最大支持256MB空间。

SDRAM片选    地址范围

0         0xA0000000 - 0xA7FFFFFF
1         0xA8000000 - 0xAFFFFFFF
2         0xB0000000 - 0xB7FFFFFF
3         0xB8000000 - 0xBFFFFFFF

当SDRAM的硬件连接使用SDRAM片选0的情况下,在KEIL平台下,将加载在SPI FLASH的Coremark基准测试程序拷贝到SDRAM中执行需要以下几步。(coremark基准测试程序包括core_list_join.c,core_matrix.c,core_state.c及core_util.c)。

① 定义SDRAM区域,从0xA0000000开始,大小为0x80000。定义SPI FLASH区域,大小为0x80000(SPI FLASH存储器的起始地址为0x10000000)。

② 在C源码中使用“SDRAM_Data” 和 “SDRAM_Function”属性,标记放在SDRAM区域中的数据或程序。(SDRAM_Data和SDRAM_Function只是文本名字)。

③ 也可以将整个目标文件的数据和程序段配置到SDRAM

#define m_spifi_start     0x10000000
#define m_spifi_size       0x800000
#define m_sdram_start     0xA0000000
#define m_sdram_size       0x80000
LR_m_text2 m_spifi_start m_spifi_size { ; load to SPIFI
LR_m_sdram_text   m_sdram_start    m_sdram_size {
    *(SDRAM_Data)    *(SDRAM_Function)    core_list_join.o    core_matrix.o    core_state.o
    core_util.o
}

配置MPU

在SDRAM中运行程序,开发者可能需要配置ARM内核内存保护单元(MPU)。

内存保护单元(MPU)是一个可编程单元,用于定义内存访问权限。当MPU没有使能时,内存地址空间具有默认的访问权限。

如ARM Cortex™-M4器件通用用户指南中所述,当程序执行SDRAM中的代码且SDRAM内存影射地址的默认属性为禁止执行时, 内核就会产生HARDFAULT异常,且指令访问冲突标志SCB->CFSR为 1,该异常表示处理器尝试从不允许执行的位置获取指令。


因此,当SDRAM被影射到默认不可执行的地址空间时(如在LPC5460x中,SDRAM影射到0xA0000000起始的地址),开发者必须配置并使能MPU才能在SDRAM中执行代码。如下例中,代码配置并使能MPU,允许从0xA0000000到0xA0100000的内存区域是可执行的。

MPU->RNR = 0;                    //Region number 0
MPU->RBAR = 0xA0000000; //Region base address
/* Full Access | TEX: 000 | S: 0 | C: 0 | B:0 (No cacheable, no shareable)| 1M SIZE | ENABLE */
MPU->RASR = (0 << 28) | (0x3 << 24) | (0x0 << 19) | (0 << 18) | (0 << 17) | (0 << 16) | (0xFF < 8) | (0x13 << 1) | (1 << 0); //Region size and enable
MPU->CTRL = MPU_CTRL_ENABLE_Msk | MPU_CTRL_PRIVDEFENA_Msk;

SDRAM性能基准

最后,小编在LPC5460x经过程序运行CoreMark性能基准测试,总结了一点点经验,分享给大家

SDRAM(16位带宽)中的代码执行效率仅为在内部SRAM中执行效率性能40%,大约是内部FLASH中运行代码性能的50%;

代码在SDRAM中运行时,较高的CPU频率(CPU没有Cache)不能改善执行效率,这时SDRAM带宽成为系统性能的瓶颈。

基于这样的测试结果,建议大家在要求较高性能时,把程序代码放在内部SRAM执行,而用片外大容量的SDRAM存放海量的数据。

本文转自:嵌入式资讯精选,转载此文目的在于传递更多信息,版权归原作者所有。

围观 50

页面

订阅 RSS - MCU