Other Parts Discussed in Thread: C2000WARE
主题中讨论的其他器件:C2000WARE
您好!
我将双核代码与两个 CPU 以及 CPU1.CLA1一起使用。 我正在使用 INT 1的软件触发器。 只是一个试验、我尝试通过 CPU1.CLA1切换 GPIO16。 该方案的主要部分如下所示。
void main()
{
DINT;//中断屏蔽
/$$$$$$$$$$$$$$$$$$$$ 主 CPU 初始化$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
InitSysCtrl(); //系统初始化
InitPwm(); //初始化 PWM
InitAdc(); //初始化 ADC
GPIO_Init(); //初始化 GPIO 16。 CPU1.cla1的所有权
EALLOW;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 EPIE 块
PieVectTable.ADCA1_INT =&adca1_ISR;//将 ADC ISR 定向到矢量表
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;// ADC 中断为1.1
IER |=1; //启用第一个组
EINT; //删除中断屏蔽
/$$$$$$$$$$$$$$$$$$$$ 清除 CLA1的中断标志寄存器$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
CpuSysRegs.PCLKCR3.ALL=1;
Cla1Regs.MICLR.all = 0xFF; //清除所有旧的中断标志
Cla1Regs.MICROVF.ALL = 0xFF; //清除旧溢出标志
/$$$$$$$$$$$$$$$$$$$$ CPU 1、CPU 2和 CPU1.CLA1之间的 RAM 分配$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//Cla1Regs.MCTL.bit.SOFTRESET = 1; //针对 INT 源的电平转换
MemCfgRegs.GSxMSEL.bit.MSEL_GS0 = 1; //CPU2是 GSO RAM 的主器件
MemCfgRegs.GSxMSEL.bit.MSEL_GS1 = 0; //CPU1是 GS1 RAM 的主器件
//将 LS0、LS1、LS2和 LS3配置为 CLA 的程序存储器
MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 1;
MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 1;
MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 1;
MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 1;
//接下来将 LS4RAM 配置为 CLA 的数据空间
//首先将 CLA 配置为 LS0 (1)的主器件、然后
//将空格设置为代码块
MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1;
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 0;
/$$$$$$$$$$$$$$$$$$$$ CLA 中断设置$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.task1=0; //为任务1选择软件触发器
Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1); //MVECT1加载了 Cla1Task1的地址
EDIS;
while (1);
}
_interrupt void cla1Isr1 ()
{
//
//确认任务1的任务结束中断
//
PieCtrlRegs.PIEACK.ALL = M_INT11;
//
//取消注释以停止调试器并在此处停止
//
// asm (" ESTOP0");
}
#include
extern int SA[13]、SB[13]、SC[13]、SACOMP[13]、SBCOMP[13]、SCCOMP[13]、S1[13];
#include "F28x_Project.h"
extern int q;
_interrupt void Cla1Task1 (void); //Cla1Task1
_interrupt void Cla1Task1 () //Cla1Task1
{
_mdebugstop();
SA[0]= S1[0];
GpioDataRegs.GPATOGGLE.bit.GPIO16=1;
//Cla1Regs.MCTL.bit.SOFTRESET = 1;
Cla1Regs.MIRUN.bit.INT1=0;
//GPIO_TOGLEPin (16);
}
ADC ISR
中断 void adca1_ISR (void)
{
EALLOW;
Cla1Regs.MIFRC.bit.INT1=1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 ADC A 中的中断标志
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 ADC B 中的中断标志
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 ADC C 中的中断标志
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//确认中断组
EDIS;
}
我使用来自 ADC ISR 的 CLA 软件触发器。 我看到 、即使我通过 adcisr1强制 MIFRC.int1位也不会变为1。 执行也不会到达 MDEBUGSTOP 命令。
请帮助。