Part Number:TMS320F28388D
我用测试C28核和CLA并行处理时(进行同样的代码),发现软件采用CLA_forceTasks(CLA1_BASE,CLA_TASKFLAG_1)启动TASK1时,并没有立即进入CLA_tas(),延时了1us才进入task。
__interrupt void Cla1Task1 ( void ) {////Local Variables//// num = 0;GPIO_writePin(78,1); //GpioDataRegs.GPBSET.bit.GPIO33 = 1;int xTblIdx; //integer valued Table indexfloat A0,A1,A2; //Table coefficientsfloat *entry;float result;int i;////Preprocessing////__mdebugstop();xTblIdx = fVal * TABLE_SIZE_M_1; //convert table index to u16-bitsxTblIdx = xTblIdx * 3; //Table is ordered as 3 32-bit coefficients, the//index points to these triplets, hence the *3*sizeof(float) //entry = &CLAasinTable[xTblIdx]; //A0 = *entry++; //A1 = *entry++; //A2 = *entry; //result = A0 + fVal*(A1 + A2*fVal); // //// ////Post processing //// //if(fVal < 0) //{ //result = - result; //}xTblIdx = xTblIdx * 3333;xTblIdx = xTblIdx * 3234 + xTblIdx * 367 ;fResult = xTblIdx; //GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1;GPIO_writePin(78,0); }
void main(void) {//// Intialize device clock and peripherals//Device_init();//// Initialize GPIO and configure the GPIO pin as a push-pull output//GPIO_setPadConfig(78, GPIO_PIN_TYPE_STD);GPIO_setPinConfig(GPIO_78_GPIO78);GPIO_setDirectionMode(78, GPIO_DIR_MODE_OUT);GPIO_setMasterCore(78, GPIO_CORE_CPU1_CLA1);GPIO_setDirectionMode(80, GPIO_DIR_MODE_OUT);GPIO_setPinConfig(80);//// Disable pin locks and enable internal pullups.////Device_initGPIO(); //skipped for this example//// Initialize PIE and clear PIE registers. Disables CPU interrupts//Interrupt_initModule();//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).//Interrupt_initVectorTable();//// Configure the CLA memory spaces first followed by// the CLA task vectors//CLA_configClaMemory();CLA_initCpu1Cla1();//// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)//EINT;ERTM;//// Run the test////CLA_runTest();for(;;){int xTblIdx1; //integer valued Table indexfloat result1;int i;GPIO_writePin(80,1);CLA_forceTasks(CLA1_BASE,CLA_TASKFLAG_1);xTblIdx1 = fVal * TABLE_SIZE_M_1; //convert table index to u16-bitsxTblIdx1 = xTblIdx1 * 3; //Table is ordered as 3 32-bit coefficients, the//index points to these triplets, hence the *3*sizeof(float)xTblIdx1 = xTblIdx1 * 3333;xTblIdx1 = xTblIdx1 * 3234 + xTblIdx1 * 367 ;fResult = xTblIdx1;GPIO_writePin(80,0);DEVICE_DELAY_US(50);} }
测试发现GPIO78引脚都是再GPIO80拉高后1us才被拉高,而且主函数执行时间才750ns,而CLA执行了4.2us,
蓝色为CPIO80,红色为GPIO78.
按我的理解,CLA跟CPU应该是并行处理,触发AICK1,进入TASK1执行代码,CPU继续继续z主程序代码,然后等待task完成,但实测并没有得到这个结果。
Green Deng:
你好,问题已经收到,我会咨询一下CLA方面的专家之后回复你,还请耐心等待