This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:CLA

Guru**** 2387080 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/955340/tms320f28379d-cla

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

我需要有关使用 CLAsin ()函数的指导。 尽管我提到了 CLA_MATH_LIB_UG.pdf、但我有以下问题

在我添加  具有第一优先级的"F2837xRevB_c1bootROM_CLADataROMSymbols_fpu32.lib"之前、我的程序显示了创建 CLAMathTable 的警告。 添加之后,我的警告消失了, 但 CLAsin ()函数在我的 CLA 任务中仍然不起作用。  我正在使用控制卡、因此我在我的 cmd 中使用 RAM。 我应该修改我的 cmd 文件吗?  

以下是我的 cmd 文件

//如果使用
// CLA C 编译器
//项目属性-> C2000链接器->高级选项->命令文件
//预处理->--,用户必须在项目链接器设置中定义 CLA_C define
#ifdef CLA_C
//定义
将由 CLA 编译器用于局部符号和 temps 的 CLA 暂存区的大小
//还强制引用标记
了//暂存区的特殊符号。
CLA_暂 存区_size = 0x100;
--undef_sym=__cla_scratchpad 结束
--undef_sym=__cla_scratchpad 开始
#endif //cla_C

MEMORY
{
PAGE 0:
/* begin 用于"引导至 SARAM"引导加载程序模式*/

begin:origin = 0x000000,length = 0x000002
RAMM0:origin = 0x000123,length = 0x0002DD
RAMD0:origin = 0x00B000、length = 0x000800
RAMD1 :origin = 0x00B800,length = 0x000800
// RAMLS4:origin = 0x00A000、length = 0x000800 */
/* RAMLS5 :origin = 0x00A800、length = 0x000800 */
RAMLS4_5 :origin = 0x00A000、length = 0x001000
reset:origin = 0x3FFFC0,length = 0x000002

page 1:

boot_RSVD :origin = 0x000002、length = 0x000121 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400、length = 0x0003F8 /*片上 RAM 块 M1 *//
RAMM1_RSVD :origin = 0x0007F8,length = 0x000008 /*根据勘误咨询"内存:有效内存之外的预取"来保留和不用于代码*/*
RAMLS0:origin = 0x008000、length = 0x000800*/

EPWM1ISR_LS0:origin = 0x008000、length = 0x000050
ECAP1ISR_LS0:origin = 0x008050、length = 0x000050

RAMLS0:origin = 0x080A0,length = 0x000760

RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000、length = 0x000800
RAMLS3:origin = 0x009800,length = 0x000800

RAMGS0 :origin = 0x00C000、length = 0x001000
RAMGS1 :origin = 0x00D000、length = 0x001000
RAMGS2 :origin = 0x00E000、length = 0x001000
RAMGS3 :origin = 0x00F000、length = 0x001000
RAMGS4 :origin = 0x010000,length = 0x001000
RAMGS5 :origin = 0x011000,length = 0x001000
RAMGS6 :origin = 0x012000,length = 0x001000
RAMGS7 :origin = 0x013000、length = 0x001000
RAMGS8 :origin = 0x014000、length = 0x001000
RAMGS9 :origin = 0x015000,length = 0x001000
RAMGS10 :origin = 0x016000,length = 0x001000

// RAMGS11 :origin = 0x017000、length = 0x000FF8 //取消对 F28374D、F28376D 器件的注释*//

RAMGS11_RSVD:origin = 0x017FF8,length = 0x000008 //根据勘误表中的“Memory:Prepetching Beyond valid Memory”*/

RAMGS11保留并不用于代码 :origin = 0x017000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
RAMGS12 :origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
RAMGS13 :origin = 0x019000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
RAMGS14 :origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
RAMGS15 :origin = 0x01B000、length = 0x000FF8 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 //

RAMGS15_RSVD:origin = 0x01BFF8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取)来保留代码且不用于代码*/
/*仅在 F28379D、F28377D、F28375D 器件上。 移除其他设备上的线路。 *

/ EMIF1_CS0n :origin = 0x8000000、length = 0x10000000
EMIF1_CS2n :origin = 0x00100000、length = 0x00200000
EMIF1_CS3n :origin = 0x00300000、length = 0x00080000
EMIF1_CS4n :origin = 0x00380000、length = 0x00060000
EMIF2_CS0n :origin = 0x90000000、length = 0x10000000
EMIF2_CS2n :origin = 0x00002000、length = 0x00001000

CANA_MSG_RAM :origin = 0x049000、length = 0x000800
CANB_MSG_RAM :origin = 0x04B000、length = 0x000800

CLA1_MSGRAMLOW:origin = 0x001480、length = 0x000080
CLA1_MSGRAMIGH:origin = 0x001500、length = 0x000080

CPU2TOCPU1RAM:origin = 0x03F800、length = 0x000400
CPU1TOCPU2TOCPU2FC00:origin = 0x000400


SECTIONS

:origin = 0x03FRAM :>开始, PAGE = 0.text
:>> RAMD0 | RAMD1 | RAMLS4_5,page = 0.cinit
:> RAMM0, PAGE = 0.switch
:> RAMM0, PAGE = 0.reset
:>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
.stack :> RAMM1, PAGE = 1

#if defined (_TI_EABI _)
.bss :> RAMLS2,页= 1.bss
:输出 :> RAMLS2,page = 1
.init_array :> RAMM0, PAGE = 0
.const :> RAMLS3,page = 1.data
:> RAMLS3,page = 1
.sysmem :> RAMLS3,page = 1#else

.pinit :> RAMM0, PAGE = 0
.ebss :> RAMLS2,PAGE = 1.econst
:> RAMLS3,page = 1
.esysmem :> RAMLS3,page = 1
#endif
Filter_RegsFile:> RAMGS0,PAGE = 1

.em1_cs0 :> EMIF1_CS0n,PAGE = 1.em1_CS2
:> EMIF1_CS2n,PAGE = 1.em1_CS3
:> EMIF1_CS3n,page = 1.em1_CS4
:> EMIF1_CS4n,PAGE = 1.EM2_cs0
:> EMIF2_CS0n,PAGE = 1.EM2_CS2
:> EMIF2_CS2n,PAGE = 1

/* CLA 特定部分*/
Cla1Prog :>RAMLS4_5,PAGE=0

CLADataLS0:>RAMLS0,PAGE=1
CLADataLS1:>RAMLS1,PAGE=1

ePWM_INT_ISR:>EPWM1ISR_LS0,PAGE = 1
ECAP1_ISR:>ECAP1ISR_LS0,PAGE = 1
CPU2TOCLUSB1



:>CLMSOM_CLUSB1:1:1 CLUSCMPOIN_CL1:1:1 CLMLS1:1 CLUSCOLUM_CLPM1_CLUSB1:1:1:1:CLMLS1:CLMLS1:CLMLS1:CLUSCO_CLMLS1 >CLA1_MSGRAMHIGH、PAGE = 1

/*以下段定义适用于 SDFM 示例*/
Filter1_RegsFile:>RAMGS1、PAGE = 1、fill=0x1111
Filter2_RegsFile:>RAMGS2、PAGE = 1、fill=0x2222
Filter3_RegsFile:>RAMGS3、PAGE = 0x4_RegsFile
: > RAMGS4、PAGE = 1、fill=0x4444

#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc:{}>RAMM0, PAGE = 0
#else
ramfuncs:>RAMM0 PAGE = 0
#endif
#endif

#ifdef CLA_C
/* CLA C 编译器段*/
//
////必须分配给 CLA 具有写入访问
权限的内存
:
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> RAMLS1、page = 1

.scratchpad :> RAMLS1、 PAGE = 1.bss_cla
:> RAMLS1、 PAGE = 1.CONST_CLA
:> RAMLS1、 PAGE = 1
#endif //cla_C

组:> CPU1TOCPU2RAM,PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}

组:> CPU2TOCPU1RAM,PAGE = 1
{
GETBUFFER:TYPE = DSECT
GETWRITEIDX:TYPE = DSECT
PUTREADIDX:TYPE = DSECT
}


} 

2.即使我使用的是 CLA 库、我也应该将 CLA 汇编源文件包含在我的项目中吗?

3.当我添加"CLAsin.asm"源文件时、在原子模式下显示添加"CLAeabi.asm"时出错、但我正在使用 COFF 输出格式。 帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Ganeshapandi K">在我添加  具有第一优先级的"F2837xRevB_c1bootROM_CLADataROMMSymbols_fpu32.lib"之前、我的程序显示了创建 CLAMathTable 的警告。 添加之后,我的警告消失了, 但 CLAsin()函数在我的 CLA 任务中仍然不起作用。

    Ganeshapandi、   

    请提供更多信息、了解其故障情况。  它是否会导致错误的值? 返回0? 任务未运行?   

    [引用 user="Ganeshapandi K">我正在使用控制卡,所以我在我的 cmd 中使用 RAM。 我应该修改我的 cmd 文件吗?  [/报价]

    与最新 C2000Ware 版本中的 CLA 示例进行比较:

    • C:\ti\c2000\C2000Ware_ \libraries\math\CLAmath\c28\examples

    [引用 user="Ganeshapandi K"]2. 即使我使用的是 CLA 库、我是否也应该将 CLA 汇编源文件包含到我的项目中?

    您不必同时包含这两者。  

    [引用 user="Ganeshapandi K"]3. 当我添加"CLAsin.asm"源文件时、在原子模式下显示添加"CLAeabi.asm"时出错、但我正在使用 COFF 输出格式。 有关该问题的帮助[/quot]

    确切的误差是多少? (提供屏幕截图)

    我建议在某个时候转到 EABI。  展望未来、编译器的大多数增强和改进将仅在 EABI 中可用。  与 COFF 相比、它已经具有一些优势。  

    您可能会发现 CLA 软件开发指南很有用:

    https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/intro.html

    此致

    Lori  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.以下哪些库文件应用于使用 CLAsin ()函数? 如果应使用所有器件、那么为什么会使用呢?

    • "cla1_math_library_fpu32.lib"  
    • "cla1_math_library_datarom_fpu32.lib"
    • "F2837xRevB_c1bootROM_CLADataROMSymbols_fpu32.lib"

    2.我在属性中包含了 CLAmath 头文件并添加了以下符号  

    • CLA_C
    • CLA_MATH_Tables_in_ROM=1

    我最初调试了程序、编译器显示了以下警告  

    因此、我将  "F2837xRevB_c1bootROM_CLADataROMSymbols_fpu32.lib"的优先级 设置为在属性窗口中首先、然后我的警告消失并成功调试。

    5.但 CLAsin ()操作不起作用。 当我单步执行时、CLA 任务行当编译器单步执行 CLA 任务中存在的行"CLAsin (samples)"时、会出现以下消息。

    中断空 Cla1Task1 (void)
    {
    _mdebugstop ();
    GpioDataRegs.GPADD.bit.GPIO26 = 1;
    结果= CLAsin (samples); //编译器执行此行时,下图中的消息将显示
    } 

    6.我还在下面添加了我的 cmd 文件

    //如果使用
    // CLA C 编译器
    //项目属性-> C2000链接器->高级选项->命令文件
    //预处理->--,用户必须在项目链接器设置中定义 CLA_C define
    
    #ifdef CLA_C
    //定义
    将由 CLA 编译器用于局部符号和 temps 的 CLA 暂存区的大小
    //还强制引用标记
    了//暂存区的特殊符号。
    CLA_暂 存区_size = 0x100;
    --undef_sym=__cla_scratchpad 结束
    --undef_sym=__cla_scratchpad 开始
    #endif //cla_C
    
    --define=cla_MATH_Tables_in_rom=1
    
    _CLAsinTable = 0xFd0a;
    
    
    *
    
    启动加载程序开始时使用* RAM:/*以启动模式
    
    开始:origin = 0x000000,length = 0x000002
    RAMM0:origin = 0x000123,length = 0x0002DD
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMD1 :origin = 0x00B800,length = 0x000800
    // RAMLS4:origin = 0x00A000、length = 0x000800 */
    /* RAMLS5 :origin = 0x00A800、length = 0x000800 */
    RAMLS4_5 :origin = 0x00A000、length = 0x000800
    RAMLS1_4_5:origin = 0x00A800、length = 0x000800
    reset:origin = 0x3FFFC0,length = 0x000002
    
    page 1:
    
    boot_RSVD :origin = 0x000002、length = 0x000121 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1 :origin = 0x000400、length = 0x0003F8 /*片上 RAM 块 M1 *//
    RAMM1_RSVD :origin = 0x0007F8,length = 0x000008 /*根据勘误咨询"内存:有效内存之外的预取"来保留和不用于代码*/*
    RAMLS0:origin = 0x008000、length = 0x000800*/
    
    EPWM1ISR_LS0:origin = 0x008000、length = 0x000050
    ECAP1ISR_LS0:origin = 0x008050、length = 0x000050
    
    RAMLS0:origin = 0x080A0,length = 0x000760
    
    RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000、length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800
    
    RAMGS0 :origin = 0x00C000、length = 0x001000
    RAMGS1 :origin = 0x00D000、length = 0x001000
    RAMGS2 :origin = 0x00E000、length = 0x001000
    RAMGS3 :origin = 0x00F000、length = 0x001000
    RAMGS4 :origin = 0x010000,length = 0x001000
    RAMGS5 :origin = 0x011000,length = 0x001000
    RAMGS6 :origin = 0x012000,length = 0x001000
    RAMGS7 :origin = 0x013000、length = 0x001000
    RAMGS8 :origin = 0x014000、length = 0x001000
    RAMGS9 :origin = 0x015000,length = 0x001000
    RAMGS10 :origin = 0x016000,length = 0x001000
    
    // RAMGS11 :origin = 0x017000、length = 0x000FF8//取消对 F28374D、F28376D 器件的注释*//
    
    RAMGS11_RSVD:origin = 0x017FF8,length = 0x000008//根据勘误表中的“Memory:Prepetching Beyond valid Memory”*/
    
    RAMGS11保留并不用于代码 :origin = 0x017000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS12 :origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS13 :origin = 0x019000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS14 :origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS15 :origin = 0x01B000、length = 0x000FF8 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 //
    
    RAMGS15_RSVD:origin = 0x01BFF8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取)来保留代码且不用于代码*/
    /*仅在 F28379D、F28377D、F28375D 器件上。 移除其他设备上的线路。 *
    
    / EMIF1_CS0n :origin = 0x8000000、length = 0x10000000
    EMIF1_CS2n :origin = 0x00100000、length = 0x00200000
    EMIF1_CS3n :origin = 0x00300000、length = 0x00080000
    EMIF1_CS4n :origin = 0x00380000、length = 0x00060000
    EMIF2_CS0n :origin = 0x90000000、length = 0x10000000
    EMIF2_CS2n :origin = 0x00002000、length = 0x00001000
    
    CANA_MSG_RAM :origin = 0x049000、length = 0x000800
    CANB_MSG_RAM :origin = 0x04B000、length = 0x000800
    
    CLA1_MSGRAMLOW:origin = 0x001480、length = 0x000080
    CLA1_MSGRAMIGH:origin = 0x001500、length = 0x000080
    
    CPU2TOCPU1RAM:origin = 0x03F800、length = 0x000400
    CPU1TOCPU2TOCPU2FC00:origin = 0x000400
    
    
    SECTIONS
    
    :origin = 0x03FRAM :>开始, PAGE = 0.text
    :>> RAMD0 | RAMD1 | RAMLS4_5,page = 0.cinit
    :> RAMM0, PAGE = 0.switch
    :> RAMM0, PAGE = 0.reset
    :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
    .stack :> RAMM1, PAGE = 1
    
    #if defined (_TI_EABI _)
    .bss :> RAMLS2,页= 1.bss
    :输出 :> RAMLS2,page = 1
    .init_array :> RAMM0, PAGE = 0
    .const :> RAMLS3,page = 1.data
    :> RAMLS3,page = 1
    .sysmem :> RAMLS3,page = 1#else
    
    .pinit :> RAMM0, PAGE = 0
    .ebss :> RAMLS2,PAGE = 1.econst
    :> RAMLS3,page = 1
    .esysmem :> RAMLS3,page = 1
    #endif
    
    !(CLA_MATH_TABS_IN_ROM)
    CLA1mathTables:> RAMLS1_4_5, PAGE = 0#endif
    
    
    Filter_RegsFile:>RAMGS0,PAGE = 1
    
    .em1_cs0 :> EMIF1_CS0n,PAGE = 1.em1_CS2
    :> EMIF1_CS2n,PAGE = 1.em1_CS3
    :> EMIF1_CS3n,page = 1.em1_CS4
    :> EMIF1_CS4n,PAGE = 1.EM2_cs0
    :> EMIF2_CS0n,PAGE = 1.EM2_CS2
    :> EMIF2_CS2n,PAGE = 1
    
    /* CLA 特定部分*/
    Cla1Prog :>RAMLS4_5,PAGE=0
    
    CLADataLS0:>RAMLS0,PAGE=1
    CLADataLS1:>RAMLS1,PAGE=1
    
    ePWM_INT_ISR:>EPWM1ISR_LS0,PAGE = 1
    ECAP1_ISR:>ECAP1ISR_LS0,PAGE = 1
    CPU2TOCLUSB1
    
    
    
    :>CLMSOM_CLUSB1:1:1 CLUSCMPOIN_CL1:1:1 CLMLS1:1 CLUSCOLUM_CLPM1_CLUSB1:1:1:1:CLMLS1:CLMLS1:CLMLS1:CLUSCO_CLMLS1 >CLA1_MSGRAMHIGH、PAGE = 1
    
    /*以下段定义适用于 SDFM 示例*/
    Filter1_RegsFile:>RAMGS1、PAGE = 1、fill=0x1111
    Filter2_RegsFile:>RAMGS2、PAGE = 1、fill=0x2222
    Filter3_RegsFile:>RAMGS3、PAGE = 0x4_RegsFile
    : > RAMGS4、PAGE = 1、fill=0x4444
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}>RAMM0, PAGE = 0
    #else
    ramfuncs:>RAMM0 PAGE = 0
    #endif
    #endif
    
    #ifdef CLA_C
    /* CLA C 编译器段*/
    //
    ////必须分配给 CLA 具有写入访问
    权限的内存
    :
    {*。obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> RAMLS1、page = 1
    
    .scratchpad :> RAMLS1、 PAGE = 1.bss_cla
    :> RAMLS1、 PAGE = 1.CONST_CLA
    :> RAMLS1、 PAGE = 1
    #endif //cla_C
    
    组:> CPU1TOCPU2RAM,PAGE = 1
    {
    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }
    
    组:> CPU2TOCPU1RAM,PAGE = 1
    {
    GETBUFFER:TYPE = DSECT
    GETWRITEIDX:TYPE = DSECT
    PUTREADIDX:TYPE = DSECT
    }
    
    
    } 

    我还附加了我的 CLA 初始化

    void Init_cla ()
    {
    asm (" EALLOW"); //启用 EALLOW 受保护寄存器访问
    //
    DevCfgRegs.DC1.bit.CPU1_CLA1 = 1; //启用 CPU1.CLA1
    
    ///------------------------ 初始化并等待 CLA1ToCPUMsgRAM
    
    MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};
    
    ///------------------------ 初始化并等待 CPUToCLA1MsgRAM
    
    MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){};
    
    */
    
    
    //------------------------------------------ 启用 CPU1.CLA1
    
    DevCfgRegs.DC1.bit.CPU1_CLA1 = 1;
    
    //------------------------------------------ 启用 CPU2.CLA1
    
    DevCfgRegs.DC1.bit.CPU2_CLA1 = 1;
    
    
    //---------------------------------- 主 CPU 和 CLA 选择
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1; // 0=CPU 1=CPU 1=CPU 和 CLA
    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1; // 0=CPU 1=CPU 1=CPU 和 CLA
    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 0; // 0=CPU 1=CPU 1=CPU 和 CLA
    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 0; // 0=CPU 1=CPU 1=CPU 和 CLA
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1; // 0=CPU 1=CPU 1=CPU 和 CLA
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1; // 0=CPU 1=CPU 1=CPU 和 CLA
    
    ///------------------ CLA 数据存储器和 CLA 程序存储器选择
    
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0; // 0=CLA 数据存储器1=CLA 程序存储器
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0; // 0=CLA 数据存储器1=CLA 程序存储器
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0; // 0=CLA 数据存储器1=CLA 程序存储器
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 0; // 0=CLA 数据存储器1=CLA 程序存储器
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1; // 0=CLA 数据存储器1=CLA 程序存储器
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1; // 0=CLA 数据存储器1=CLA 程序存储器
    
    ///---------------------------- 初始化 CLA 任务中断矢量
    
    Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1);
    
    //-------------------------------- 选择任务中断源
    
    DmaClaSrcSelRegs.CLA1TASSKSRCSEL1.bit.task1 = 0; // 0=none/sof 8=ADCBINT3 16=ADCDINT1 32=XINT4 42=EPWM7INT 70=TINT2 78=ECAP4INT 95=SD1INT 114=SPIRXINTC
    // 1=ADCAINT1 9=ADCBINT4 17=ADCDINT2 33=XINT5 43=EPWM8INT 71=MXEVTA 79=ECAP5INT 96=SD2INT
    // 2=ADCAINT2 10=ADCBEVT 18=ADCDINT3 36=EPWM1INT 44=EPWM9INT 72=MREVTA 80=ECAP6INT 107=UPP1INT
    // 3=ADCAINT3 11=ADCCINT1 19=ADCDINT4 37=EPWM2INT 45=EPWM10INT 73=MXEVTB 83=EQEP1INT 109=SPITXINTA
    // 4=ADCAINT4 12=ADCCINT2 20=ADCDEVT 38=EPWM3INT 46=EPWM11INT 74=MREVTB 84=EQEP2INT 110=SPIRXINTA
    // 5=ADCAEVT 13=ADCCINT3 29=XINT1 39=EPWM4INT 47=EPWM12INT 75=ECAP1INT 85=EQEP3INT 111=SPITXINTB
    // 6=ADCBINT1 14=ADCCINT4 30=XINT2 40=EPWM5INT 48=TINT0 76=ECAP2INT 87=HRCAP1INT 112=SPIRXINTB
    // 7=ADCBINT2 15=ADCCEVT 31=XINT3 41=EPWM6INT 69=TINT1 77=ECAP3INT 88=HRCAP2INT 113=SPITXINTC
    
    ///---------------------------- CLA1TASKSRCSELx 寄存器锁定控制
    
    DmaClaSrcSelRegs.CLA1TASSKSRCSELLOCK.bit.CLA1TASSKSRCSEL1=0; //写入1以锁定(设置后无法清除)
    DmaClaSrcSelRegs.CLA1TASSKSRCSELLOCK.bit.CLA1TASSKSRCSEL2 = 0; //写入1以锁定(设置后无法清除)
    
    
    asm (" EDIS"); //禁用 EALLOW 受保护的寄存器访问
    
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Ganeshapandi K"]

    1.以下哪些库文件应用于使用 CLAsin ()函数? 如果应使用所有器件、那么为什么会使用呢?

    1. "cla1_math_library_fpu32.lib"  
    2. "cla1_math_library_datarom_fpu32.lib"
    3. "F2837xRevB_c1bootROM_CLADataROMSymbols_fpu32.lib"

    [/报价]

    如果您想使用 ROM 中提供的查找表、请包含(2)和(3)。  注意:这是我提到的 sin 示例按照提供的方式设置的。  库(1)被从构建中排除。   

    (1)和(2)是 CLA 代码本身。 使用其中一个或另一个、具体取决于您是在 ROM 中使用表、还是希望在 RAM 中使用表。  

    (3)使用时告知链接器表在 ROM 中的位置(2)(请参阅 CLA 数学指南的第13/14页)。

    [引用 user="Ganeshapandi K"]5. 但 CLAsin ()操作不起作用。 当我单步执行时、CLA 任务行当编译器单步执行 CLA 任务中存在的行"CLAsin (samples)"时、会出现以下消息。

    Code Composer Studio 只会询问您库的源位置、以便在您单步执行时向您显示源代码。  遗憾的是、它不知道它在您的系统上的位置-仅当我们构建库时才知道它在哪里。  (我们一直在寻求解决的一个恼人的问题)。   点击"locate file"并浏览至源代码目录。  然后、CCS 将能够在单步执行代码的同时显示源代码。  

    我在 init 或.cmd 文件中看不到任何明显的内容。  您可以将这些与工作示例进行比较、看看您是否发现任何问题。  单步执行 sin 函数有望指向一个原因。  

    此致

    Lori

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在上一篇文章中描述了问题1中的库时有几个拼写错误-我已经更正了这些错误。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Lori

    这里、查找表是什么意思? 这是指预编译的正弦输入值、还是仅指三角函数的地址位置(如   TRM 中所述)?

    2.如果我错了,请给我更正。

    • 当编译器看到"CLAsin ()"函数时、它会将控件传输到 ROM 中的查找表。
    • 编译器仅在我在 cmd 文件中提到位置时才可以找到"CLAsin()"的位置、如以下所示、或者我应该在 属性中包含"cla1_math_library_datarom_fpu32.lib"和"F2837xRevB_c1bootROM_CLADataROMMSymbols_fpu32.lib"
    _CLAsinTable = 0xFd0a;//对于 CLAsin()
    
    内存
    {
    PAGE 0:.........
    
    第1页:.........}
    
    第
    {
    }节 

    3.如果上述想法正确、则会产生一个问题:"ROM 是否具有用于三角函数的存储内置程序 ?" 如果我不使用此查找表工具,则编译器在看到 CLAsin ()时会如何反应 ? (注:但包含"cla1_math_library_fpu32.lib")

    非常感谢 Lori 为我的上一篇帖子提供了详细的解释。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Ganeshapandi K"]1. 在这里、查找表是什么意思? 它是指预编译的正弦输入值,还是仅指三角函数的地址位置(如   TRM 中所述)?

    您可以检查 IQMath 库源代码中的查找表。  标题中包含单词"Table"的文件是查找表。  特定函数的源代码文件注释中也对它们进行了说明。

    [引用 user="Ganeshapandi K"]当编译器看到"CLAsin()"函数时,它会将控件传输到 ROM 中的查找表。

    请参阅 CLA sin 函数源代码中的注释。  注释指示何时读取表值。

    [引用 USER="Ganeshapandi K"]只有当我在 cmd 文件中提到位置时,编译器才能找到"CLAsin()"的位置,或者我应该在 引号/属性中包含"cla1_math_library_datarom_fpu32.lib"和"F2837xRevB_c1bootROM_CLADataROMMSymbols_fpu32.lib"

    文件 "F2837xRevB_c1bootROM_CLADataROMSymbols_fpu32.lib"具有指向 ROM 中表的指针(地址)。  这样可以节省 RAM 存储器以用于其他操作。   

    请参阅示例。  ROM 中的表和 ROM 中的表有示例。  通过右键点击工程->编译配置->设置为活动->来选择该选项

    [引用 user="Ganeshapandi K"]3. 如果上述想法正确、则会产生一个问题:"ROM 是否具有用于三角函数的存储内置程序 ?" 如果我不使用此查找表工具,则编译器在看到 CLAsin ()时会如何反应 ? (注:但包含"cla1_math_library_fpu32.lib")

    编译器将告诉您该表是一个未解析符号。   

    此致

    Lori

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你 Lori