查看: 5059|回复: 4

[原创] 【LPC5411】使用Matlab+Simulink开发Cortex-M系列嵌入式处理器

[复制链接]

该用户从未签到

16

主题

108

帖子

2

中级会员

Rank: 3Rank: 3

积分
398
最后登录
2025-1-15
发表于 2017-5-7 20:56:51 | 显示全部楼层 |阅读模式
本帖最后由 mars4zhu 于 2017-5-7 20:58 编辑

使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序
文档编号
TN_AAAA_A0
关键字
Matlab, Simulink, Cortex-M, 基于模型设计, Model-Based-Design
摘要
本技术笔记对使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序进行说明


Mars4zhu
目 录
插图索引
表格索引
错误!未找到目录项。
1 总述
Matlab为嵌入式处理器应用程序的开发提供了强大的功能,包括Embedded Coder代码生成、Simulink模型转换,Processor-In-the-Loop(PIL)处理器闭环开发等。同时提供了硬件支持包Embedded Coder Support Package for ARM Cortex-M Processors以及DSP System Toolbox Support Package for ARM Cortex-M Processors,并根据流行的开发板提供了对STM32-Discovery、FRDM-K64F以及QEMU模拟器等的硬件支持包。
11 安装好的Matlab的嵌入式处理器支持包
本文主要通过Matlab相应的支持包提供的范例,学习基于Matlab+Simulink开发Cortex-M系列嵌入式处理器的应用程序的开发流程,记录学习笔记
2 ARM Cortex-M处理器的Ecoder支持包学习
Embedded Coder Support Package for ARM Cortex-M Processors提供了多个范例来演示学习如何使用Matlab+Simulink来开发ARM Cortex-M嵌入式处理器的应用程序。
2.1 ARM Cortex-M处理器的Ecoder支持包范例学习2.1.1 arm_cortex_m_gettingstarted范例学习
该范例建立一个最简单的Simulink模型,然后完成针对ARM Cortex-M处理器开发的设置,生成代码,最后运行在QEMU模拟器中。
使用Simulink打开arm_cortex_m_gettingstarted范例,设置后编译并运行。
21  arm_cortex_m_gettingstarted范例的模型、设置、编译和运行
模型生成的代码如下:
/* Model step function */
void arm_cortex_m_gettingstarted_step(void)
{
/* Outport: '<Root>/Out1' incorporates:
   *  Constant: '<Root>/Constant'
   *  Gain: '<Root>/Gain'
   */
  arm_cortex_m_gettingstarted_Y.Out1 = arm_cortex_m_gettingstarted_P.Gain_Gain *
    arm_cortex_m_gettingstarted_P.Constant_Value;
}
/* Model initialize function */
void arm_cortex_m_gettingstarted_initialize(void)
{
/* Registration code */
/* initialize error status */
  rtmSetErrorStatus(arm_cortex_m_gettingstarted_M, (NULL));
/* external outputs */
  arm_cortex_m_gettingstarted_Y.Out1 = 0.0;
}
/* Model terminate function */
void arm_cortex_m_gettingstarted_terminate(void)
{
/* (no terminate code required) */
}
停止使用QEMU仿真运行Matlab模型命令为:codertarget.arm_cortex_m.stopQemu
2.1.2 arm_cortex_m_pil_block范例学习
arm_cortex_m_pil_block范例模型演示了如何使用PIL,即通过PC软件仿真和硬件处理器仿真进行两者的闭环控制,可以直接对比PC仿真与硬件处理器仿真的差别。
该范例首先需要编译PIL子系统,并将编译后的生成的PIL模块复制到原模型中然后进行PIL仿真。
22  arm_cortex_m_pil_block范例模型的PIL子系统编译与复制

23  arm_cortex_m_pil_block范例模型编译与运行
从图中可以看出PC仿真和PIL仿真的数值误差为0,说明了PIL仿真的正确性。
2.1.3 arm_cortex_m_model_pil_block范例学习
arm_cortex_m_model_pil_block范例使用单个模块的子系统设置为PIL方式并分别运行仿真的方式,无需额外生成PIL模块并复制。
24  arm_cortex_m_model_pil_block范例模型编译与运行
2.1.4 arm_cortex_m_top_model_pil范例学习
arm_cortex_m_top_model_pil范例演示了在顶层模型中设置PIL仿真模式的方式。该仿真方式将整个模型生成一个wrapper封装并编译运行。
25 arm_cortex_m_top_model_pil范例模型编译与运行
26 arm_cortex_m_top_model_pil范例运行后生成的wrapper封装和代码覆盖运行结果
2.2 ECoder的ARM Cortex-M处理器Simulink模型库
在Simulink的模型库中,选中EmBedded Coder Support Package for ARM Cortex-M Processors可以查看ecoder的ARM Cortex-M处理器模型库,包含一个即Hardware Interrupt的模型模块,在Simulink中插入该模块,则可以实现ARM Cortex-M处理器的各种中断中执行后续的代码。
其设置界面如下:
27  ecoder for arm_cortex_m 的Simulink模型库
2.2.1 TODO: Hardware Interrupt的模型模块的使用。2.3 开发一个目标处理器/目标开发板
TODO:
3 ARM Cortex-M处理器的DSP System Toolbox支持包学习
DSP System Toolbox Support Package for ARM Cortex-M Processors主要是采用CMSIS里面的DSPLib中的DSP函数对Matlab默认生成的DSP函数进行替换,可以充分利用ARM Cortex-M处理器内建的DSP硬件对运算进行加速,挺高效率和性能。
3.1 范例学习3.1.1 ex_fircmsis_tut范例学习
ex_fircmsis_tut范例采用FIR滤波器对生成的数据和人为叠加的噪声信号进行滤波,通过演示对比FIR滤波器在PC上和在ARM Cortex-M处理器上的执行结果对比,显示了通过调用ARM Cortex-M的DSPLib库函数进行运算的结果。
该范例首先在设置中实现Code Replacement Library中采用ARM Cortex-M (CMSISI)来进行函数替换,然后生成对应的代码。
26ex_fircmsis_tut范例代码替换库设置与代码替换生成报告
最后采用跟arm_cortex_m_pil_block范例相同的方式进行PC与PIL联合仿真对比,结果如下。
其中设置的时候应该取消Generate Code Only选项,并且设置Create PIL Block。
26ex_fircmsis_tut范例编译和运行结果
3.1.2 ex_fircmsis_tut_q15范例学习
在Gain模块中将输出修改为fixdt(1, 16, 15)类型,即ARM-CMSIS-DSP中的q15类型,这样对应生成的函数则是相应的q15类型的函数。
26ex_fircmsis_tut_q15范例Gain模块设置和代码生成函数替代结果
运行结果相同,不再赘述。
3.1.3 ex_fircmsis_tut_mlfun范例学习
ex_fircmsis_tut_mlfun范例为使用代码替换库将Matlab语句中的dsp.FIRFilter系统对象替换为CMSIS中对应的DSPLib库函数。
与前节不同的是,该范例中的FIR滤波器是一个调用Matlab函数的模块,该函数为:
function y = firfun(u)
%#codegen
persistent firfilter;
if isempty(firfilter)
        firfilter = dsp.FIRFilter('Numerator', fir1(63,1/3));
end
    y = step(firfilter, u);
end
后续设置和编译运行及结果与前节相同。
26 ex_fircmsis_tut_mlfun范例代码生成和编译运行结果
3.1.4 ex_fircmsis_tut_ml范例学习
Ex_fircmsis_tut_ml范例采用将Matlab函数代码转化为包含调用CMSIS-DSPLib库函数的C代码。
function y1 = ex_fircmsis_tut_ml(u1)
% Copyright 2013-2016 The MathWorks, Inc.
%#codegen
persistent firfilter;
if isempty(firfilter)
        firfilter = dsp.FIRFilter('Numerator', fir1(63, 0.33));
end
    y1 = firfilter(u1);
end
通过创建一个coder的配置,完成coder设置后,调用codegen生成代码并编译成lib库文件。
   cfgEx = coder.config('lib');
   cfgEx.CodeReplacementLibrary = 'ARM Cortex-M';
   cfgEx.HardwareImplementation.ProdHWDeviceType = 'ARM Compatible->ARM Cortex';
   cfgEx.GenCodeOnly = true;
   tempdirObj = dstarmexample.dstTempdir('ex_fircmsis_tut_ml_workflow');
   dstarmsrc = which('ex_fircmsis_tut_ml');
   dstarmtmpdir = tempdirObj.tempDir;
   type(fullfile(dstarmsrc))
   copyfile(dstarmsrc, dstarmtmpdir, 'f');
26ex_fircmsis_tut_生成的C代码及其CMSIS函数替代结果
3.1.5 TODO:生成的代码形成的lib库与外部应用层app的调用集成4 版本历史(Revision History)
版本号
发布时间
内容
A0
2017-05-07
初次编写



首发CSDN: http://blog.csdn.net/zhu210/article/details/71373364
版权所有: mars4zhu
回复

使用道具 举报

  • TA的每日心情

    2019-1-19 16:32
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    23

    主题

    113

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2022-3-31
    发表于 2017-5-8 08:37:00 | 显示全部楼层
    原本對MATLAB的認知就是跑跑模擬
    沒想到還可以寫code控制LPC
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    108

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    398
    最后登录
    2025-1-15
     楼主| 发表于 2017-5-8 08:41:29 | 显示全部楼层
    lamb8059 发表于 2017-5-8 08:37
    原本對MATLAB的認知就是跑跑模擬
    沒想到還可以寫code控制LPC

    Matlab只负责生成代码,我还没有跑通LPC的编译、下载、调试流程。STM32、K64等几个官方支持的跑通了。

    需要硬件支持宝才能直接控制LPC开发板。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    2017-11-6
    发表于 2017-10-27 09:19:13 | 显示全部楼层
    好东西啊,加精加精
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 10:13
  • 签到天数: 2490 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    17

    主题

    5376

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    11240
    最后登录
    2025-8-15
    发表于 2017-10-27 11:22:38 | 显示全部楼层
    感谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-16 03:01 , Processed in 0.093234 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表