Matlab生成dsp程序——官方例程学习(3)


官方例程链接: 添加链接描述
模型与程序链接: 模型与程序链接

一、主要功能

   使用CLA与CPU进行交互,cla读取数据控制LED灯闪烁。

二、CLA介绍

    CLA是允许并行处理的协处理器。将CLA用于时间紧迫的任务可以释放主CPU的空间,以同时执行其他系统和通信功能。(主要用于CPU在中断时,来不及处理的任务,分担CPU负重)

    CLA有八个任务(Task1[优先级最高]-Tack8),存在与CPU交互的RAM空间。在2837x中,可以控制多种外设:ePWM,eCAP,HRPWM,eQEP,等。其程序与数据存放在LS0-LS5 RAM中,并且有两个128字节的==CPU to CLA(CLA to CPU)==的消息寄存器。

CLA触发:(其八个任务触发都能选择触发源)

  • 1)通过软件强制触发(给MIFRC寄存器写入相应的标志)
  • eg:Cla1Regs.MIFRC.bit.INT5 = 1;
    1. 写IACK指令。 asm(“ IACK #0x0008”);
  • 3)在寄存器中选择触发源。

CLA使用步骤:

1.从Flash中拷贝CLA的程序到RAM中执行。
2.初始化CLA数据寄存器。
3.设置CLA寄存器:1)使能时钟(PCLKCR3)2)写入函数地址(MVECT1-8) 3)设置中断源(CLA1TASKSRCSELx)
4.设置任务中断(使能任务的MIER寄存器)
5.初始化触发任务的外设。

使用CLA的时候,一定要查看编译器是否使能了CLA:

在这里插入图片描述
CLA不支持64位数据运行(long long 等定义只会使用32位)

CLA中变量需要在.C文件进行初始化。

//.c文件
int16_t x=5;

//.cla文件
extern int16_t x;

CLA不支持除法,相应的运算方式需要在CLA math文件中寻找。

//cmd文件中定义,cla运算堆栈
.scratchpad :> RAMLS0, PAGE=1

三、Simulink分析

1)CLA 任务模块(需要注意不同型号硬件触发源选择不同)
在这里插入图片描述

 这里的软件触发,指的是以Sample time进行触发。

  需要设置将模块为inline

在这里插入图片描述

在这里插入图片描述
2)注意可能需要修改修改cmd文件的内存分配

3)每次CLA的Taskx执行完毕之后会产生中断(PIE11.x[1-8])。

4)CLA运算数据需要放在特定的ram才能与CPU进行交互。

在这里插入图片描述

在这里插入图片描述

5)因为CLA无法访问全局变量,所以将设置改为inline。

在这里插入图片描述

6)调试时,需要使用**__mdebugstop()**指令进行设置断点。

7)可以使用双缓冲的模型,匹配cla与cpu的处理速率。

在这里插入图片描述

四、程序分析

主函数的框架和其他的函数还是一模一样,这里就不单独贴出来了。

**c28377Sblink_cla_initialize()**函数中完成了GPIO的初始化。CLA时钟、CLA1TOCPURAM与CPUTOCLA1RAM、MSEL_LS0-5(属于CPU与CLA控制)、配置程序RAM与数据RAM、使能软件触发、指定Task1的函数、开启中断。

程序思路大致是在Timer0中断函数中,手动触发CLA(利用汇编语句)。在CLA_Task1中会执行相应的模型算法,指向完毕之后。后进入CLA中断函数,在CLA中断函数中根据CLA运算结果,控制GPIO的翻转。

//1.触发开始Task1
#define Cla1ForceTask1()       asm("  IACK  #0x0001")

五、总结

Matlab生成的程序,格式比较固定,多看几个就能大致明白结构。以后可能就是更多的是关于Simulink中模块的学习了!

### 回答1: 生成动态心形的代码需要使用数学函数和图形绘制的知识,下面是一个使用 matplotlib 库绘制动态心形的示例代码: ``` import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def update_heart(frame): t = np.linspace(0, 2*np.pi, 1000) x = 16*np.sin(t)**3 y = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t) plt.cla() plt.plot(x, y, 'r') plt.axis([-20, 20, -20, 20]) fig = plt.figure() ani = animation.FuncAnimation(fig, update_heart, interval=100) plt.show() ``` 这段代码的思路是每隔一段时间,通过计算 `x` 和 `y` 的值并绘制出来来实现心形的动态显示。 ### 回答2: 下面是一个使用Python绘制动态心形的代码: ```python import turtle # 初始化 turtle.setup(800, 600) turtle.bgcolor('black') turtle.pensize(2) # 设置画笔颜色 colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'] # 绘制动态心形 for i in range(200): turtle.pencolor(colors[i % 7]) turtle.forward(i) turtle.left(59) # 结束绘制 turtle.done() ``` 运行以上代码,可以在窗口中看到一个动态的心形图案。代码使用turtle库提供的函数来绘制图形,首先设置画布的大小和背景色,然后设置画笔的粗细。接着使用循环来绘制动态心形,每次循环改变画笔的颜色和移动的距离,并且旋转一定角度。循环执行200次后,完成绘制并关闭窗口。 希望能帮到你! ### 回答3: 以下是一个生成绘制动态心形的Python代码: ```python import math import turtle def draw_heart(t, size): t.begin_fill() t.left(140) t.forward(size) t.circle(-size, 200) t.left(120) t.circle(-size, 200) t.forward(size) t.end_fill() def main(): # 设置画布 screen = turtle.Screen() screen.bgcolor('white') # 创建画笔 pen = turtle.Turtle() pen.speed(2) pen.color('red') # 设置初始位置和大小 pen.up() pen.goto(0, -100) pen.down() size = 10 while True: angle = 0 while angle < 360: x = size * math.sin(math.radians(angle)) y = size * math.cos(math.radians(angle)) pen.goto(x, y - 100) draw_heart(pen, size) angle += 10 size += 5 turtle.done() if __name__ == '__main__': main() ``` 运行上述代码后,将会创建一个绘制动态心形的窗口,并不断变化大小和位置,形成一个动态的心形图案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quikk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值