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.

[参考译文] CCS/TMS320F28377S:对 cfgmemregs 有疑问

Guru**** 2589280 points
Other Parts Discussed in Thread: TMS320F28377S, TMS320F28069

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/664842/ccs-tms320f28377s-doubt-regarding-memcfgregs

器件型号:TMS320F28377S
主题中讨论的其他器件: TMS320F28069

工具/软件:Code Composer Studio

我正在尝试使用 C-2000软件中的 PI-CLA 代码。当我将 LS5设置为代码中的程序存储器时、当我运行代码时、代码会运行到一个名为非法 ISR 的段中并在那里停止

这是我正在使用的代码

/* example_f28069_pi.c
*
*版权所有(C) 2017 Texas Instruments Incorporated - http://www.ti.com/
*保留所有权利
*
*

//头文件

#include "DCL.h"
#include "cla_adc_fir32_shared.h"
#include "F28x_Project.h"
#include "stdio.h"
//函数原型
中断 void CONTRAL_ISR (void);

//全局变量
长 IdleLoopCount = 0;
长 IsrCount = 0;
浮点占空比= 0;

//共享变量
#pragma DATA_SECTION (rk、"CpuToCla1MsgRAM")
#pragma DATA_SECTION (YK、"CpuToCla1MsgRAM")
#pragma DATA_SECTION (UK、"Cla1ToCpuMsgRAM")
#pragma DATA_SECTION (pi1、"Cla1DataRam1")
float rk = 0.25f;
float YK=0.05f;
float UK = 0.00f;


DCL_PI pi1 = PI_DEFAULTS;
const 结构 PIE_VECT_TABLE PieVectTableInit ={
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
PIE_RESERVE_ISR、//保留
Timer1_ISR、// CPU 定时器1中断
TIMER2_ISR、// CPU 定时器2中断
DATALOG_ISR、//数据记录中断
RTOS_ISR、// RTOS 中断
EMU_ISR、//仿真中断
NMI_ISR、//不可屏蔽中断
ILLEGAL_ISR、//非法操作陷阱
User1_ISR、//用户定义的陷阱1
User2_ISR、//用户定义的陷阱2.
User3_ISR、//用户定义的陷阱3.
User4_ISR、//用户定义的陷阱4.
USER5_ISR、//用户定义的陷阱5
USER6_ISR、//用户定义的陷阱6.
USER7_ISR、//用户定义的陷阱7
USER8_ISR、//用户定义的陷阱8
USER9_ISR、//用户定义的陷阱9.
USER10_ISR、//用户定义的陷阱10
USER11_ISR、//用户定义的陷阱11
USER12_ISR、//用户定义的陷阱12.
ADCA1_ISR、// 1.1 - ADCA 中断1
ADCB1_ISR、// 1.2 - ADCB 中断1
ADCC1_ISR、// 1.3 - ADCC 中断1
XINT1_ISR、// 1.4 - XINT1中断
XINT2_ISR、// 1.5 - XINT2中断
ADCD1_ISR、// 1.6 - ADCD 中断1
TIMER0_ISR、// 1.7 -定时器0中断
WAKE_ISR、// 1.8 -待机和停止唤醒中断
EPWM1_TZ_ISR、// 2.1 - ePWM1触发区中断
EPWM2_TZ_ISR、// 2.2 - ePWM2触发区中断
EPWM3_TZ_ISR、// 2.3 - ePWM3触发区中断
EPWM4_TZ_ISR、// 2.4 - ePWM4触发区中断
EPWM5_TZ_ISR、// 2.5 - ePWM5触发区中断
EPWM6_TZ_ISR、// 2.6 - ePWM6触发区中断
EPWM7_TZ_ISR、// 2.7 - ePWM7触发区中断
EPWM8_TZ_ISR、// 2.8 - ePWM8触发区中断
EPWM1_ISR、// 3.1 - ePWM1中断
EPWM2_ISR、// 3.2 - ePWM2中断
EPWM3_ISR、// 3.3 - ePWM3中断
EPWM4_ISR、// 3.4 - ePWM4中断
EPWM5_ISR、// 3.5 - ePWM5中断
EPWM6_ISR、// 3.6 - ePWM6中断
EPWM7_ISR、// 3.7 - ePWM7中断
EPWM8_ISR、// 3.8 - ePWM8中断
eCAP1_ISR、// 4.1 - eCAP1中断
ECAP2_ISR、// 4.2 - eCAP2中断
ECAP3_ISR、// 4.3 - eCAP3中断
ECAP4_ISR、// 4.4 - eCAP4中断
ECAP5_ISR、// 4.5 - eCAP5中断
ECAP6_ISR、// 4.6 - eCAP6中断
PIE_RESERVE_ISR、// 4.7 -保留
PIE_RESERVE_ISR、// 4.8 -保留
EQEP1_ISR、// 5.1 - eQEP1中断
EQEP2_ISR、// 5.2 - eQEP2中断
EQEP3_ISR、// 5.3 - eQEP3中断
PIE_RESERVE_ISR、// 5.4 -保留
PIE_RESERVE_ISR、// 5.5 -保留
PIE_RESERVE_ISR、// 5.6 -保留
PIE_RESERVE_ISR、// 5.7 -保留
PIE_RESERVE_ISR、// 5.8 -保留
SPIA_RX_ISR、// 6.1 - SPIA 接收中断
SPIA_TX_ISR、// 6.2 - SPIA 发送中断
SPIB_RX_ISR、// 6.3 - SPIB 接收中断
SPIB_TX_ISR、// 6.4 - SPIB 发送中断
MCBSPA_RX_ISR、// 6.5 - McBSPA 接收中断
MCBSPA_TX_ISR、// 6.6 - McBSPA 发送中断
MCBSPB_RX_ISR、// 6.7 - McBSPB 接收中断
MCBSPB_TX_ISR、// 6.8 - McBSPB 发送中断
DMA_CH1_ISR、// 7.1 - DMA 通道1中断
DMA_CH2_ISR、// 7.2 - DMA 通道2中断
DMA_CH3_ISR、// 7.3 - DMA 通道3中断
DMA_CH4_ISR、// 7.4 - DMA 通道4中断
DMA_CH5_ISR、// 7.5 - DMA 通道5中断
DMA_CH6_ISR、// 7.6 - DMA 通道6中断
PIE_RESERVE_ISR、// 7.7 -保留
PIE_RESERVE_ISR、// 7.8 -保留
I2CA_ISR、// 8.1 - I2CA 中断1
I2CA_FIFO_ISR、// 8.2 - I2CA 中断2
I2CB_ISR、// 8.3 - I2CB 中断1
I2CB_FIFO_ISR、// 8.4 - I2CB 中断2.
SCIC_RX_ISR、// 8.5 - SCIC 接收中断
SCIC_TX_ISR、// 8.6 - SCIC 发送中断
SCID_RX_ISR、// 8.7 - SCID 接收中断
SCID_TX_ISR、// 8.8 - SCID 发送中断
SCIA_RX_ISR、// 9.1 - SCIA 接收中断
SCIA_TX_ISR、// 9.2 - SCIA 发送中断
SCIB_RX_ISR、// 9.3 - SCIB 接收中断
SCIB_TX_ISR、// 9.4 - SCIB 发送中断
CANA0_ISR、// 9.5 - CANA 中断0
CANA1_ISR、// 9.6 - CANA 中断1
CANB0_ISR、// 9.7 - CANB 中断0
CANB1_ISR、// 9.8 - CANB 中断1
ADCA_EVT_ISR、// 10.1 - ADCA 事件中断
ADCA2_ISR、// 10.2 - ADCA 中断2
ADCA3_ISR、// 10.3 - ADCA 中断3
ADCA4_ISR、// 10.4 - ADCA 中断4
ADCB_EVT_ISR、// 10.5 - ADCB 事件中断
ADCB2_ISR、// 10.6 - ADCB 中断2
ADCB3_ISR、// 10.7 - ADCB 中断3
ADCB4_ISR、// 10.8 - ADCB 中断4
CLA1_ISR、// 11.1 - CLA1中断1
CLA1_2_ISR、// 11.2 - CLA1中断2
CLA1_3_ISR、// 11.3 - CLA1中断3
CLA1_4_ISR、// 11.4 - CLA1中断4
CLA1_5_ISR、// 11.5 - CLA1中断5
CLA1_6_ISR、// 11.6 - CLA1中断6
CLA1_7_ISR、// 11.7 - CLA1中断7
CLA1_8_ISR、// 11.8 - CLA1中断8
XINT3_ISR、// 12.1 - XINT3中断
XINT4_ISR、// 12.2 - XINT4中断
XINT5_ISR、// 12.3 - XINT5中断
PIE_RESERVE_ISR、// 12.4 -保留
PIE_RESERVE_ISR、// 12.5 -保留
VCU_ISR、// 12.6 - VCU 中断
FPU_Overflow_ISR、// 12.7 - FPU 溢出中断
FPU_Underflow_ISR、// 12.8 - FPU 下溢中断
PIE_RESERVE_ISR、// 1.9 -保留
PIE_RESERVE_ISR、// 1.10 -保留
PIE_RESERVE_ISR、// 1.11 -保留
PIE_RESERVE_ISR、// 1.12 -保留
IPC0_ISR、// 1.13 - IPC 中断0
IPC1_ISR、// 1.14 - IPC 中断1
IPC2_ISR、// 1.15 - IPC 中断2
IPC3_ISR、// 1.16 - IPC 中断3
EPWM9_TZ_ISR、// 2.9 - ePWM9触发区中断
EPWM10_TZ_ISR、// 2.10 - ePWM10触发区中断
EPWM11_TZ_ISR、// 2.11 - ePWM11触发区中断
EPWM12_TZ_ISR、// 2.12 - ePWM12触发区中断
PIE_RESERVE_ISR、// 2.13 -保留
PIE_RESERVE_ISR、// 2.14 -保留
PI_RESERVE_ISR、// 2.15 -保留
PI_RESERVE_ISR、// 2.16 -保留
EPWM9_ISR、// 3.9 - ePWM9中断
EPWM10_ISR、// 3.10 - ePWM10中断
EPWM11_ISR、// 3.11 - ePWM11中断
EPWM12_ISR、// 3.12 - ePWM12中断
PIE_RESERVE_ISR、// 3.13 -保留
PI_RESERVE_ISR、// 3.14 -保留
PIE_RESERVE_ISR、// 3.15 -保留
PIE_RESERVE_ISR、// 3.16 -保留
PIE_RESERVE_ISR、// 4.9 -保留
PIE_RESERVE_ISR、// 4.10 -保留
PIE_RESERVE_ISR、// 4.11 -保留
PIE_RESERVE_ISR、// 4.12 -保留
PIE_RESERVE_ISR、// 4.13 -保留
PIE_RESERVE_ISR、// 4.14 -保留
PIE_RESERVE_ISR、// 4.15 -保留
PIE_RESERVE_ISR、// 4.16 -保留
SD1_ISR、// 5.9 - SD1中断
SD2_ISR、// 5.10 - SD2中断
PIE_RESERVE_ISR、// 5.11 -保留
PIE_RESERVE_ISR、// 5.12 -保留
PIE_RESERVE_ISR、// 5.13 -保留
PIE_RESERVE_ISR、// 5.14 -保留
PIE_RESERVE_ISR、// 5.15 -保留
PIE_RESERVE_ISR、// 5.16 -保留
spic_RX_ISR、// 6.9 -***接收中断
spic_TX_ISR、// 6.10 -***发送中断
PIE_RESERVE_ISR、// 6.11 -保留
PIE_RESERVE_ISR、// 6.12 -保留
PIE_RESERVE_ISR、// 6.13 -保留
PIE_RESERVE_ISR、// 6.14 -保留
PIE_RESERVE_ISR、// 6.15 -保留
PIE_RESERVE_ISR、// 6.16 -保留
PIE_RESERVE_ISR、// 7.9 -保留
PIE_RESERVE_ISR、// 7.10 -保留
PIE_RESERVE_ISR、// 7.11 -保留
PIE_RESERVE_ISR、// 7.12 -保留
PIE_RESERVE_ISR、// 7.13 -保留
PIE_RESERVE_ISR、// 7.14 -保留
PIE_RESERVE_ISR、// 7.15 -保留
PIE_RESERVE_ISR、// 7.16 -保留
PIE_RESERVE_ISR、// 8.9 -保留
PIE_RESERVE_ISR、// 8.10 -保留
PI_RESERVE_ISR、// 8.11 -保留
PIE_RESERVE_ISR、// 8.12 -保留
PIE_RESERVE_ISR、// 8.13 -保留
PIE_RESERVE_ISR、// 8.14 -保留
CPU1
UPPA_ISR、// 8.15 - UPPA 中断
PIE_RESERVE_ISR、// 8.16 -保留
#Elif Defined (CPU2)
PIE_RESERVE_ISR、// 8.15 -保留
PIE_RESERVE_ISR、// 8.16 -保留
#endif
PIE_RESERVE_ISR、// 9.9 -保留
PIE_RESERVE_ISR、// 9.10 -保留
PIE_RESERVE_ISR、// 9.11 -保留
PIE_RESERVE_ISR、// 9.12 -保留
PIE_RESERVE_ISR、// 9.13 -保留
PIE_RESERVE_ISR、// 9.14 -保留
CPU1
USBA_ISR、// 9.15 - USBA 中断
#Elif Defined (CPU2)
PIE_RESERVE_ISR、// 9.15 -保留
#endif
PIE_RESERVE_ISR、// 9.16 -保留
ADCC_EVT_ISR、// 10.9 - ADCC 事件中断
ADCC2_ISR、// 10.10 - ADCC 中断2
ADCC3_ISR、// 10.11 - ADCC 中断3
ADCC4_ISR、// 10.12 - ADCC 中断4
ADCD_EVT_ISR、// 10.13 - ADCD 事件中断
ADCD2_ISR、// 10.14 - ADCD 中断2
ADCD3_ISR、// 10.15 - ADCD 中断3
ADCD4_ISR、// 10.16 - ADCD 中断4
PI_RESERVE_ISR、// 11.9 -保留
PIE_RESERVE_ISR、// 11.10 -保留
PIE_RESERVE_ISR、// 11.11 -保留
PIE_RESERVE_ISR、// 11.12 -保留
PIE_RESERVE_ISR、// 11.13 -保留
PIE_RESERVE_ISR、// 11.14 -保留
PIE_RESERVE_ISR、// 11.15 -保留
PIE_RESERVE_ISR、// 11.16 -保留
EMIF_ERROR_ISR、// 12.9 - EMIF 错误中断
RAM_corrected_error_ISR、// 12.10 - RAM 可纠正的错误中断
FLASH_corrected_error_ISR、// 12.11 -闪存可纠正的错误中断
RAM_ACCESS_violation_ISR、// 12.12 - RAM 访问冲突中断
SYS_PLL_SLIT_ISR、// 12.13 -系统 PLL 跳周中断
AUX_PLL_SLIT_ISR、// 12.14 -辅助 PLL 跳周中断
CLA_overflow_ISR、// 12.15 - CLA 溢出中断
CLA_underflow_ISR // 12.16 - CLA 下溢中断
};


//
// InitPieVectTable -此函数将 PIE 矢量表初始化为
//已知状态,必须在引导后执行。
//
空 InitPieVectTable (空)

uint16 i;
uint32 *源=(void *)&PieVectTableInit;
uint32 * dest =(void *) PieVectTable (PieVectTable);

//
//请勿在前3个32位位置上进行写操作(这些位置是
//由具有引导变量的引导 ROM 初始化)
//
Source = Source + 3;
DEST = Dest + 3;

EALLOW;
对于(I = 0;I < 221;I++)

*目的地++=*来源++;

EDIS;

//
//启用 PIE 矢量表
//
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

void ePWM_initEpwm (void)

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;//关闭 ePWM 时钟
EPwm1Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = 4;//在递增计数时选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
EPwm1Regs.CMPA.bit.CMPA = 2000;//将比较 A 值设置为2000
//计数
EPwm1Regs.TBPRD = 4000;//将周期设置为4000个计数
EPwm1Regs.TBCTL.bit.CTRMODE = 0;//冻结计数器
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//启用 SOCA
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;

EPwm2Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
EPwm2Regs.CMPA.bit.CMPA = 2048;//将比较值设置为10000
//计数
EPwm2Regs.TBPRD = 4096;//将周期设置为20000个计数
EPwm2Regs.TBCTL.bit.CTRMODE = 0;//冻结计数器
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;

EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;//清零 PWM1A
EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;

EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//清零 PWM2A
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;
GpioCtrlRegs.GPAMUX1.bit.GPIO2=1;
EDIS;

void adc_initAdcA (void)

uint16_t i;

EALLOW;

//
//写入配置
//
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);

//
//将脉冲位置设置为晚期
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;

//
//为 ADC 加电
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

//
//延迟大于1ms 以允许 ADC 加电时间
//
对于(i = 0;i < 1000;i++)

asm (" RPT#255 || NOP");

//
//选择要转换的通道和转换结束标志 ADCA
//
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0将转换引脚 A0
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 99;//采样窗口为100个 SYSCLK 周期
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
EDIS;

空 CLA_configClaMemory (空)

//extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;

EALLOW;
#ifdef _flash
//
//将代码从闪存复制到 RAM
//
memcpy (((uint32_t *)&Cla1funcsRunStart、(uint32_t *)&Cla1funcsLoadStart、
(uint32_t)和 Cla1funcsLoadSize);
#endif //_FLASH

//
//初始化并等待 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){};

//
//选择 LS5RAM 作为 CLA 的编程空间
//首先将 CLA 配置为 LS5的主器件,然后再配置
//将空间设置为程序块
//
MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
MemCfgRegs.LSxMSEL.bit.MSEL_LS4=1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;
//MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;

EDIS;


void main()
{printf ("他");
/*初始化系统*/
InitSysCtrl();//[F2806x_SYSCTRL.c]
DINT;//禁用中断
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();//初始化 PIE 控制寄存器[F2806X_PIECTRL.c]
InitPieVectTable ();//初始化 PIE 矢量表[F2806x_PieVect.c]
EALLOW;
PieVectTable.ADCA1_INT =&CONTRAL_ISR;

EDIS;

/*初始化 PI 控制器*/
PI1.KP = 5.5f;
PI1.Ki = 0.015f;
PI1.I10 = 0.0f;
PI1.i6 = 1.0f;
PI1.Umax = 10.2f;
PI1.Umin =-10.2f;
CLA_configClaMemory();
/*计算 CLA 任务矢量*/
EALLOW;
Cla1Regs.MVECT1 =(uint16)((uint32)&Cla1Task1);
Cla1Regs.MVECT2 =(uint16)((uint32)&Cla1Task2);
//Cla1Regs.MVECT3 =(uint16)((uint32)&Cla1Task3);
Cla1Regs.MVECT4 =(uint16)((uint32)&Cla1Task4);
Cla1Regs.MVECT5 =(uint16)((uint32)&Cla1Task5);
Cla1Regs.MVECT6 =(uint16)((uint32)&Cla1Task6);
Cla1Regs.MVECT7 =(uint16)((uint32)&Cla1Task7);
Cla1Regs.MVECT8 =(uint16)((uint32)&Cla1Task8);
Cla1Regs.MVECT3 =(uint16)(((uint32)&Cla1Task3 -(uint32)&Cla1Prog_Start);

/* CLA 任务触发器*/
/* Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINTSEL = CLA_INT5_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;*
Cla1Regs.MIER all = 0x00FF;

/*将 CLA 程序空间切换到 CLA 并启用软件强制
*也切换 CLA 数据 RAM 0、1和2
*注意:RAMxCPUE 位只能通过写寄存器来启用
*而不是单个位字段。 此外、这些位字段的状态
*不会反映在监视视图或寄存器视图中-它们始终如所示
*零。 这是一个已知的错误、建议用户测试 CPU 访问情况
*在继续之前
*
// Cla1Regs.MMEMCFG.ALL = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|CLARAM2_ENABLE|CLARAM2_ENABLE|CLA_RAM1CPUE;
Cla1Regs.MCTL.bit.IACKE = 1;
EDIS;

/*配置 ePWM1 */
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

ePWM_initEpwm();
adc_initAdcA();

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;

/*配置 ADC */
//[F2806x_ADC.c]

/*配置 GPIO */
//InitGpio ();//[F2806x_GPIO.c]

EALLOW;
/* CLA 设置*/
Cla1Regs.MIER 位 INT3 = 1;

// Cla1Regs.MIER 位.INT8 = 1;
//Cla1ForceTask8andWait();

/*启用中断*/
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//启用 PIE INT 1.1 (ADCINT1)-[adcisr]
IER |= M_INT1;//启用 CPU 中断1 (TINT0)
EINT;//启用全局中断屏蔽

EDIS;
printf ("%d"、rk);
/*空闲循环*/
while (1)

IdleLoopCount++;


/*控制 ISR:由 ADC EOC 触发*/
中断空 CONTRAL_ISR (空)

PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

//读取 ADC 通道
YK=((浮点) AdcaResultRegs.ADCRESULT0 - 2048.0f)/2047.0f;

//在 CLA 上触发 PI 控制器
EALLOW;
Cla1ForceTask3andWait();
//将 u (k)写入 PWM

占空比=(UK / 2.0f + 0.5f)*(float) EPwm1Regs.TBPRD;
EPwm2Regs.CMPA.bit.CMPA =(UINT16)占空比;
if (英国=5.0f)
{EALLOW;
GpioCtrlRegs.GPAMUX1.All=0;
GpioCtrlRegs.GPADIR.bit.GPIO13=1;
EDIS;

GpioDataRegs.GPACLEAR.bit.GPIO13=1;

IsrCount++;


/*文件结束*/

这是我要使用的 cmd 文件

//如果使用、用户必须在项目链接器设置中定义 CLA_C
// CLA C 编译器
//项目属性-> C2000链接器->高级选项->命令文件
//预处理->--define
#ifdef CLA_C
//为将要使用的 CLA 暂存区定义大小
//由 CLA 编译器生成局部符号和 temps
//还强制引用标记的特殊符号
//暂存区是。
CLA_ScratchPad_size = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
#endif //cla_C
_Cla1Prog_Start =_Cla1funcsRunStart;
存储器

第0页:
/* begin 用于"引导至 SARAM"引导加载程序模式*/

开始:origin = 0x000000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
RAMD0:origin = 0x00B000、length = 0x000800
RAMD1:origin = 0x00B800,length = 0x000800
/*RAMLS4:origin = 0x00A000,length = 0x000800*/
/*RAMLS5:origin = 0x00A800,length = 0x000800*/
RAMLS4_LS5:origin = 0x00A000、length = 0x001000
复位:origin = 0x3FFFC0,length = 0x000002

第1页:

BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

RAMLS0:origin = 0x008000、length = 0x000800
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 = 0x001000
RAMGS12:origin = 0x018000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
RAMGS13:origin = 0x019000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
RAMGS14:origin = 0x01A000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
RAMGS15:origin = 0x01B000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *

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

CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080

部分

codestart:> begin,page = 0
.text:>> RAMD0|RAMD1|RAMLS4_LS5,page = 0
.cinit:> RAMM0,page = 0
.pinit:> RAMM0,page = 0
switch:>RAMM0,page = 0
.reset:> reset,page = 0,type = DSECT //未使用,*/
RAMS0:>RAMGS0,PAGE = 1
ramgs1:>RAMGS1,page = 1.
.stack:>RAMM1,PAGE = 1.
.ebss:> RAMLS2,PAGE = 1
econst:>RAMLS3,page = 1.
.esysmem:>RAMLS3,page = 1.
filter_RegsFile:> RAMGS0,PAGE = 1

/* CLA 特定部分*/
Cla1Prog:> RAMLS4_LS5,
load_start (_Cla1funcsLoadStart)、
load_end (_Cla1funcsLoadEnd)、
load_size (_Cla1funcsLoadSize)、
run_start (_Cla1funcsRunStart)、
PAGE = 0
CLADataLS0:>RAMLS0,PAGE=1
Cla1DataRam1:> RAMLS1,page=1

Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.

/*以下部分定义适用于 SDFM 示例*/
filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444

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

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

暂存区:>RAMLS1,页=1
.bss_cla:> RAMLS1,page = 1.
.const_cla:> RAMLS1,PAGE = 1.
#endif //cla_C

/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*

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

    我认为您用作基础的示例是 TMS320F28069。 您可能需要重新检查示例中完成的配置是否也适用于 TMS320F28377S。 例如、我可以看到以下代码片段不适用于 TMS320F28377S。 我认为等效的有效操作由 CLA_configClaMemory() API 处理。 请告诉我删除以下代码是否可以解决该问题。

    /*将 CLA 程序空间切换到 CLA 并启用软件强制
    *也切换 CLA 数据 RAM 0、1和2
    *注意:RAMxCPUE 位只能通过写寄存器来启用
    *而不是单个位字段。 此外、这些位字段的状态
    *不会反映在监视视图或寄存器视图中-它们始终如所示
    *零。 这是一个已知的错误、建议用户测试 CPU 访问情况
    *在继续之前
    *
    // Cla1Regs.MMEMCFG.ALL = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|CLARAM2_ENABLE|CLARAM2_ENABLE|CLA_RAM1CPUE;

    谢谢
    Vasudha
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我为文本和 CLA 分配了 LS5、这导致了所有的问题、现在一切都很好