工具/软件:
您好:
我想在 LS ram 存储器中存储几个常量浮点 LUT 数组、以供 CLA 访问。 我最初将 LUT 存储在闪存中、然后在启动时写入 RAM、并且能够在 CPU 读取 LS RAM 时使这些 LUT 都正常工作。 但是、一旦我授予了对 CLA 的 RAM 访问权限并让 CLA 执行读取、我就注意到了单次读取(在 CLA 中)的访问时间是几百个时钟周期、似乎有些过时了。 读取值是正确的值、因此我猜我的设置不正确。
以下是相关代码部分
///// LUT C File
#pragma DATA_SECTION (LUT_D2,"LUT_DUTY_MEM1")
const float LUT_D2[16][71] = {..}
/////
///// LUT H File
extern const float LUT_D2[LUT_P_MAX+1][LUT_Vr_MAX+1];
//////
///// CLA memory config
void initCLA(void)
{
//
// Copy the program and constants from FLASH to RAM before configuring
// the CLA
//
#if defined(_FLASH)
memcpy((uint32_t *)&Cla1ProgRunStart, (uint32_t *)&Cla1ProgLoadStart,
(uint32_t)&Cla1ProgLoadSize);
memcpy((uint32_t *)&Cla1ConstRunStart, (uint32_t *)&Cla1ConstLoadStart,
(uint32_t)&Cla1ConstLoadSize );
memcpy((uint32_t *)&LUTRUNSTART, (uint32_t *)&LUTRUNSTART,
(uint32_t)&LUTRUNSTART );
// memcpy(&LUTRUNSTART,&LUTRUNSTART,(Uint32)&LUTRUNSTART);
#endif //defined(_FLASH)
//
// CLA Program will reside in RAMLS0 and data in RAMLS1, RAMLS2
//
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS0, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS1, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS2, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS4, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS5, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS6, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setLSRAMMasterSel(MEMCFG_SECT_LS7, MEMCFG_LSRAMMASTER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS0, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS1, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setCLAMemType(MEMCFG_SECT_LS2, MEMCFG_CLA_MEM_DATA);
MemCfg_setCLAMemType(MEMCFG_SECT_LS4, MEMCFG_CLA_MEM_DATA);
MemCfg_setCLAMemType(MEMCFG_SECT_LS5, MEMCFG_CLA_MEM_DATA);
MemCfg_setCLAMemType(MEMCFG_SECT_LS6, MEMCFG_CLA_MEM_DATA);
MemCfg_setCLAMemType(MEMCFG_SECT_LS7, MEMCFG_CLA_MEM_DATA);
//
// Suppressing #770-D conversion from pointer to smaller integer
// The CLA address range is 16 bits so the addresses passed to the MVECT
// registers will be in the lower 64KW address space. Turn the warning
// back on after the MVECTs are assigned addresses
//
#pragma diag_suppress=770
//
// Assign the task vectors and set the triggers for task 1
// and 8
//
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_1, (uint16_t)&Cla1Task1);
// CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_2, (uint16_t)&Cla1Task2);
CLA_mapTaskVector(CLA1_BASE, CLA_MVECT_8, (uint16_t)&Cla1Task8);
//CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_ADCA1);
// CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_ADCB1);
CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_EPWM7INT);
// CLA_setTriggerSource(CLA_TASK_2, CLA_TRIGGER_EPWM7INT);
CLA_setTriggerSource(CLA_TASK_8, CLA_TRIGGER_SOFTWARE);
#pragma diag_warning=770
//
// Enable Tasks 1 and 8
//
// CLA_enableTasks(CLA1_BASE, (CLA_TASKFLAG_1 | CLA_TASKFLAG_2| CLA_TASKFLAG_8));
CLA_enableTasks(CLA1_BASE, (CLA_TASKFLAG_1 | CLA_TASKFLAG_8));
//
// Force task 8, the one time initialization task
//
CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_8);
}
//////////////
////// Linker File
RAMLS4_7 : origin = 0x0000A000, length = 0x00002000
FLASH_BANK1_SEC567 : origin = 0x095000, length = 0x003000
LUT_MEM_RAM1 : LOAD = FLASH_BANK1_SEC567,
RUN = RAMLS4_7,
LOAD_START(LUTLOADSTART),
RUN_START(LUTRUNSTART),
LOAD_SIZE(LUTLOADSIZE)
ALIGN(8)
/////// CLA Program
#include "TPS_LUT.h"
float Lut_test;
__attribute__((interrupt)) void Cla1Task1(void)
{
// x,y two uint16_t values with correct limits
Lut_test = LUT_D2[x][y];
///////
