## 低能耗加速器(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 |
待續......