Simulink自动代码生成(三)函数
编写任何项目,为了程序的可读性和可移植至性都会将部分功能进行封装,因此就涉及到函数的内容。就我个人的应用情况,将函数为:1、普通函数;2、初始化函数;3、中断函数。
1、普通函数
在Library Browser中找到Function-call subsystem模块

图1中就是simulink给出的调用函数(子系统)的模块,可在内部放置自己想要实现的功能,形成一个封装模块。模块有3个端口:1、输入端口,2、输出端口,3子系统模块的函数调用输入端口。这些端口都是可以删除/添加的。
这里做一个简单的反转函数功能,input!=output,如图2所示:

在Library Browser中选择GPIO模块以及function-call generator,按照图3去连接。图3中也可以将红框中的模块都封装在一块,形成一个函数。GPIO10作为输入信号,GPIO11作为输出信号,经过反转函数使得,GPIO11的输出信号为输入信号的取反。

实验结果

多函数调用问题
当调用过的函数不只一个时,需要利用到图6所示的Function-call split模块。Function-call split模块可设置函数调用的先后顺序,带点的被调用。


图7为多函数调用的示例,mainFunction函数先于mainFunction1函数被调用。执行顺序为先mainFunction然后再执行mainFunction1。
使用中发现的问题
simulink应该不是所有的DSP型号都支持boot from flash模式,就我个人的程序版本而言28377D就不支持,但是28335就支持,这块我是从2837xD的cmd文件并结合实验得到的推测。

2、初始化函数
初始化通常设置为只执行一次,因此,这里需要用到enable subsystem。该函数被调用的前提是能信号端口输入条件为真。使能信号的触发条件可以设置为“held(输入高)”或者“reset(输入低)”。

利用使能函数模块构建图10所示的具备初始化功能的示例。其大致逻辑为,当初始化完成后(这里设置的是外部GPIO信号为高电平),初始函数给出初始完成标志,使得主程序可以进行。

3、中断函数配置方式
Library browser 搜索interrupt,这里选择软件中断SW int trigger

图11给出了软件中断的模块和内部参数,CPU interrupt number x 和PIE interrupt number y 组合起来就表示的是INTx,y。如果记不清楚要用的中断是多少可以点击Help,帮助里有中断表。这里要记住选择哪个中断组,这于稍后中断的响应配置有关系。

图12是DSP硬件中断响应的模块,里面的参数应该与软件中断相对应(如果你配置的是外设的中断,那么这里就需要设置与外设的中断相适应)。这里的优先级是相对的概念,数字越小优先级越高,但是不要超过40。

利用中断模块配置了如图13所示的中断函数示例,simulink模型为计数到2.55s,然后触发中断,在中断中翻转一次GPIO口电平状态。效果如图14。
