合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 低能耗加速器(LEA) > 许多DSPLib功能都支持MSP430 FRAM器件上可用的低功耗加速器(LEA)外设。 LEA是一种数字加速器,可实现一流的超低功耗信号处理和嵌入式数学计算,以实现诸如乘法和累加(MAC),滤波(FIR和IIR)和变换(FFT)之类的常见操作。 请参阅下面的LEA支持的API部分,以获取支持LEA的API的完整列表。 ## 使用LEA注意事项 > LEA外围设备的大部分用法都作为软件库的一部分进行了抽象,但是将LEA与DSPLib中的功能一起使用时,需要考虑一些关键因素。 数据必须放入共享内存中并对齐到某些地址边界(通常功能需要4字节对齐,但FIR和FFT功能可能需要更严格的对齐)。 该库包含预处理器宏,用于在共享LEA内存中分配和对齐数据结构,下面显示了如何使用它们的示例。 ``` // Allocate 16-bit data vector with default 4-byte alignment //默认分配4字节对齐的16位向量数据 #define VECTOR_LENGTH 16 DSPLIB_DATA(vectorData,VECTOR_LENGTH) _q15 vectorData[VECTOR_LENGTH]; // Allocate 16-bit real FFT data vector with correct alignment. //以正确的对齐方式分配16位实数FFT数据向量。 #define FFT_LENGTH 256 DSPLIB_DATA(fftData,MSP_ALIGN_FFT_Q15(FFT_LENGTH)) _q15 fftData[FFT_LENGTH]; // Allocate 32-bit complex FIR circular buffer with correct alignment. The // circular buffer is twice the length of the FIR filter and the length is // doubled again for complex data with real and imaginary components. //以正确的对齐方式分配32位复数FIR循环缓冲区。 的 //循环缓冲区是FIR滤波器长度的两倍,并且长度是 //对于具有实部和虚部的复杂数据,再次加倍。 #define FIR_LENGTH 32 DSPLIB_DATA(firCmplxData,MSP_ALIGN_CMPLX_FIR_IQ31(FIR_LENGTH)) _iq31 firCmplxData[2*2*FIR_LENGTH]; ``` 有关使用LEA使用该库的更详细信息,请参阅代码示例。 ***** ## 数据分布 > 数据和系数数组必须驻留在CPU和LEA都可以访问的共享RAM部分中。 这些数据部分在下面针对CCS和IAR列出,但是DSPLIB_DATA宏可用于轻松地将数据放入共享的LEA存储器中。 > * CCS linker section: ".leaRAM" > * IAR linker section: "LEARAM" ***** ## 对齐 > 放置到共享LEA RAM部分中的数据必须至少与32位边界对齐(4字节对齐),但是某些功能可能需要更严格的对齐方式,例如变换(FFT)和过滤器(FIR)功能。 每个API在API文档的“ LEA支持”部分中列出了所需的对齐方式。 默认情况下,在调用LEA命令之前会检查对齐方式,如果不符合条件,函数将返回 > MSP_LEA_INVALID_ADDRESS。 ## 低能耗模式的使用 > 使用LEA的功能将在LEA运行时进入使能中断的LPM0,以实现最低的能耗。 LEA中断例程由DSPLib提供,并在命令完成后唤醒设备。 应用程序可以自由使能其他中断,并根据需要对其进行服务,从中断返回LPM0。 > 某些芯片修订版受LEA1勘误表影响,其他外围设备的异步中断会中断LEA的时序。 DSPLib通过保持在活动模式并轮询LEA寄存器来解决此勘误,以实现有效的修订。 尽管不像使用LPM0那样低能耗,但该例程已进行了优化,以利用FRAM缓存,并且比典型的活动模式使用的能耗低得多。 ***** ## LEA修订 > 为了确保LEA的功能以及应用了最新的固件和解决方法,启用诊断检查后,DSPLib会检查LEA代码ROM的修订版。 该修订必须在编译器选项中预定义,或者等于DSPLIb_lea.h中定义的默认修订。 需要修补程序的功能将加载并执行命令的最新版本。 如果从LEA ROM读取的修订版不等于定义的修订版,则该函数将返回MSP_LEA_INCORRECT_REVISION状态,指示该修订版不正确。 msp_lea_getRevision函数可用于检查LEA修订版,并在下面的示例中进行演示。 > > ``` /* Check that the correct revision is defined. */ //检查定义了正确的修订。 if (msp_lea_getRevision() != MSP_LEA_REVISION)) { // The defined value of MSP_LEA_REVISION does not match LEA revision. // MSP\_LEA\_REVISION的定义值与LEA修订不匹配 __no_operation(); } ``` ## LEA支持的API > 下表列出了所有DSPLib API和LEA支持。 此外,每个功能的API文档还包括LEA是否支持该功能以及任何其他对齐要求。 > | 函数| 描述|LEA支持 | 数据对齐(字节) | | --- | --- |--- |--- | | msp_add_q15 | 两个实源向量的加法 | 是 | 4 | | msp_add_iq31| 两个实源向量的加法 | 是 | 4 | | msp_sub_q15| 两个实源向量的减法 | 是 | 4 | | msp_sub_iq31| 两个实源向量的减法 | 是 | 4 | | msp_mpy_q15| 两个实源向量的乘法 | 是 | 4 | | msp_mpy_iq31| 两个实源向量的乘法 | 是 | 4 | | msp_neg_q15| 源向量的否 | 是 | 4 | | msp_neg_iq31| 源向量的否 | 是 | 4 | | msp_abs_q15| 实源向量的绝对值 | 否 | 4 | | msp_abs_iq31| 实源向量的绝对值 | 否 | 4 | | msp_offset_q15| 实源向量的常数偏移| 是 | 4 | | msp_offset_iq31| 实源向量的常数偏移| 是 | 4 | | msp_scale_q15| 缩放实源向量| 否 | 4 | | msp_scale_iq31| 缩放实源向量| 否 | 4 | | msp_shift_q15| 实向量的按位移位| 是 | 4 | | msp_shift_iq31| 实向量的按位移位| 是 | 4 | | msp_max_q15| 源向量的有符号最大值| 是 | 4 | | msp_max_iq31| 源向量的有符号最大值| 是 | 4 | | msp_max_uq15| 源向量的无符号最大值| 是 | 4 | | msp_max_uq31| 源向量的无符号最大值| 是 | 4 | | msp_min_q15| 源向量的有符号最小值| 是 | 4 | | msp_min_iq31| 源向量的有符号最小值| 是 | 4 | | msp_min_uq15| 源向量的无符号最小值| 是 | 4 | | msp_min_uq31| 源向量的无符号最小值| 是 | 4 | 待续......