完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
DSP之CLA模块
1 概述 控制律加速器通过添加并行处理扩展C28x CPU的功能。由CLA服务的时间是关键的控制回路,可以实现ADC采样到输出的低延迟。因此,CLA能够实现更快的系统响应和更高的频率控制环路。将CLA用于时间是关键的任务,可以释放主CPU,进而并发地执行其他系统和通信功能。 以下是CLA的主要特性:
2 CLA接口 2.1 CLA存储 CLA可以访问三种类型储存器:程序、数据、消息RAM。CLA的RAM受CSM模块保护。
CLA具有专用的总线结构,该总线结构和C28x CPU的总线结构相似。这些总线结构具有独立的程序读、数据读和数据写总线。因此,他们可以在一个单周期里,被同步获取、数据读和数据写入。和C28x CPU一样,CLA期望内存逻辑将32位读或者写对齐到偶数地址。如果地址通用逻辑产生一个奇地址,那么CLA将在之前的偶数地址上开始读或者写。这种对齐不影响有地址通用逻辑产生的地址值。
CPU和CLA共享访问一下外设。 一些外设控制寄存器通过EALLOW保护机制来防止一些假的28x CPU的误写入。同样的,这些寄存器也防止CLA误写入。 CPU状态寄存器(ST1)中的EALLOW位CPU的保护状态。类似的,在CLA的状态寄存器(MSTF)中的MEALLOW位表示CLA的写保护状态。MEALLOW这个CLA指令使能CLA写操作到EALLOW保护的寄存器。同样,MEDIS 这个CLA指令将禁用写访问。这样,CLA可以独立于CPU启用/禁用写访问。 ADC提供了在采样转换开始时产生更早的中断脉冲的选项。如果使用此选项启动ADC触发的CLA任务,用户可能会使用中间的周期,直到转换完成,执行初步计算或加载和存储,然后才最终读取ADC值。 2.4 CLA任务和中断向量 CLA程序被分为任务和中断服务子程序。任务没有固定的起始位置和长度。CLA程序内存可以按照预期分配。CLA使用中断向量(MVECT1到MVECT8)的内容决定任务的开始。任务通过MSTOP指令停止。 CLA支持8个任务。任务1优先级最高,任务8优先级最低。 一个任务可以由外设中断或者软件来请求,具体如下:
如果CLA是空闲的(没有执行任务),那么即被标志的(MIFR)又被使能(MIER)的最高优先级的中断请求将会开始。流程如下:
3 CLA和CPU仲裁 3.1 CLA和CPU仲裁 CLA是独立于CPU运作。当出现CLA和CPU都想访问内存和外设寄存器情况时,就会发生仲裁。仲裁可以使得当CPU和CLA同时读取ADC结果寄存器时,不会出现矛盾。 可能发生访问冲突的接口有:
消息RAM包含两个快。这两个快用于在CPU和CLA只见传递数据。不允许从消息ram中获取操作码。消息RAM具有如下特征:
程序内存的表现是由MMEMCFG[PROGE]位决定的。该位确定内存是映射到CLA空间还是CPU空间。
一共有两个独立的数据内存。数据内存的表现取决于MMEMCFG[RAM0E]位和MMEMCFG[RAM1E]位的状态。这两个位确定内存是映射到CLA空间还是CPU空间。
访问寄存器遵循如下规则:
4.1 构建CLA应用程序 CLA编写程序可以使用CLA汇编,或者C语言简化子集。CLA汇编代码与C28x代码驻留在同一个项目中。唯一的限制是CLA代码必须位于它自己的汇编部分。这可以很容易地使用.sect汇编指令来完成。这并不会阻止CLA和C28x代码在链接器命令文件中链接到相同的内存区域。 系统和CLA初始化由主CPU执行。这通常是用C或c++完成的,但也可以包括C28x汇编代码。主CPU也将CLA代码复制到程序内存中,如果需要,初始化CLA数据RAM。一旦系统初始化完成并开始应用程序,CLA将使用CLA汇编代码(或任务)为其中断提供服务。主CPU可以在执行CLA程序的同时执行其他任务。 4.2 典型CLA初始化序列 典型的CLA初始化顺序是由主CPU执行的,如下所述:
如果CLA获取了一个与合法指令不对应的操作码,它将表现如下: (1) CLA将与流水线D2阶段的非法操作码一起停止,就像它是一个断点一样。无论是否启用CLA断点,都会发生这种情况。 (2) CLA将向PIE发出特定任务的中断。 (3) 任务的MIRUN位将保持设置。 一旦执行因非法操作代码而停止,将忽略进一步的单步操作。要退出这种情况,请按4.5节所述对CLA进行软复位或硬复位。 4.5 复位CLA 有时可能需要重置CLA。例如,在代码调试期间,CLA可能由于代码错误而进入一个无限循环。CLA有两种类型的复位:硬复位和软复位。这两种重置都可以由调试器或主CPU执行。
|
|
|
|
5 流水线
5.1 流水线概述 CLA流水线和C28x流水线类似,有八个阶段:
大多数CLA指令不需要考虑任何的注意事项。以下列出需要考虑流水线的操作:
ADC可以被配置为在ADC转换完成之前,产生一个早期中断脉冲。如果该选项被用作CLA任务,那么,只要ADC结果寄存器中的值可用,CLA可以读取结果。这种即时采样和CLA的短中断响应组合,可以产生更快的系统响应和更高的频率控制环路。 在ADC章节有ADC转换的时序。如果ADCCLK使用SYSCLK的分频,那用户将不得不考虑SYSCLK周期中的转换时间。 比如,当ADCCLK为SYSCLK/2,那将花费 13 ADCCLK * 2 SYSCLK = 26 SYSCLK个周期完成转换。 从CLA的角度来看,N-cycle (SYSCLK) ADC转换的流水线活动下表所示。N-2指令将及时到达R2阶段以读取结果寄存器。虽然前面的指令将过早地进入流水线的R2阶段,无法读取转换,但它们可以有效地用于任务所需的预处理计算。 5.3 并行指令 并行指令是并行执行两个操作的单个操作码。以下类型的并行指令是可用的:与一个移动操作并行的数学操作,或两个并行的数学操作。这两种操作在一个周期内完成,没有特殊的流水线对齐要求。 例5-3: ; MADDF32 || MMOV32 instruction: 32-bit floating-point add with parallel move ; MADDF32 is a 1 cycle operation ; MMOV32 is a 1 cycle operation MADDF32 MR0, MR1, #2 ; MR0 = MR1 + 2, || MMOV32 MR1, @Val ; MR1 gets the contents of Val ; <-- MMOV32 completes here (MR1 is valid) ; <-- DDF32 completes here (MR0 is valid) MMPYF32 MR0, MR0, MR1 ; Any instruction, can use MR1 and/or MR0 例5-4: ; MMPYF32 || MADDF32 instruction: 32-bit floating-point multiply with parallel add ; MMPYF32 is a 1 cycle operation ; MADDF32 is a 1 cycle operation MMPYF32 MR0, MR1, MR3 ; MR0 = MR1 * MR3 || MADDF32 MR1, MR2, MR0 ; MR1 = MR2 + MR0 (Uses value of MR0 before MMPYF32) ; <-- MMPYF32 and MADDF32 complete here (MR0 and MR1 are valid) MMPYF32 MR1, MR1, MR0 ; Any instruction, can use MR1 and/or MR0 6 指令集 本节描述控制律加速器的汇编语言指令。还描述了并行操作、条件操作、资源约束和寻址模式。这里列出的指令独立于C28x和C28x+FPU指令集。 6.1 指令描述 每条指令可能会提供以下信息:
6.2 寻址模式和编码 CLA访问数据、寄存器和主CPU一样,使用相同的地址。比如,主CPU访问地址为0x00 6800地址的ePWM寄存器,那么CLA将使用地址0x6800来访问。因为所有的CLA可访问的内存和寄存器都是低64k x 16内存,所有只低16位的地址用于CLA。 为了寻址CLA数据内存、消息RAM和共享外设,CLA支持两种寻址模式:
6.3 指令集 具体指令集见官方数据手册。 6 指令集 本节描述控制律加速器的汇编语言指令。还描述了并行操作、条件操作、资源约束和寻址模式。这里列出的指令独立于C28x和C28x+FPU指令集。 6.1 指令描述 每条指令可能会提供以下信息:
6.2 寻址模式和编码 CLA访问数据、寄存器和主CPU一样,使用相同的地址。比如,主CPU访问地址为0x00 6800地址的ePWM寄存器,那么CLA将使用地址0x6800来访问。因为所有的CLA可访问的内存和寄存器都是低64k x 16内存,所有只低16位的地址用于CLA。 为了寻址CLA数据内存、消息RAM和共享外设,CLA支持两种寻址模式:
6.3 指令集 具体指令集见官方数据手册。 |
|
|
|
只有小组成员才能发言,加入小组>>
3177 浏览 9 评论
2861 浏览 16 评论
3369 浏览 1 评论
8780 浏览 16 评论
3965 浏览 18 评论
9597浏览 3评论
953浏览 3评论
489浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
491浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2212浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-12 07:05 , Processed in 0.877475 second(s), Total 52, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191