你(们)好
我正在尝试使 CLA 单元正常工作。 我在每条语句的下面添加了计数器。 但奇怪的是、偶数任务不起作用。
void initCLA (void) { /*启用 CLA 时钟*/ SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_CLA1); /* CLA 硬复位*/ CLA_performHardReset (CLA1_base); // //在配置之前将程序和常量从闪存复制到 RAM 中 // CLA // #if defined (_FLASH) memcpy (((uint32_t *)&Cla1ProgRunStart、(uint32_t *)&Cla1ProgLoadStart、 (uint32_t)和 Cla1ProgLoadSize); memcpy (((uint32_t *)&Cla1ConstRunStart、(uint32_t *)&Cla1ConstLoadStart、 (uint32_t)&Cla1ConstLoadSize); #endif //defined (_flash) // // CLA 程序将驻留在 RAMLS0中,数据驻留在 RAMLS1、RAMLS2中 // MemCfg_setCLAMemType (MEMCFG_Sect_LS0、MEMCFG_CLA_MEM_program); MemCfg_setCLAMemType (MEMCFG_Sect_LS1、MEMCFG_CLA_MEM_DATA); MemCfg_setCLAMemType (MEMCFG_Sect_LS2、MEMCFG_CLA_MEM_DATA); 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); // 抑制从指针到较小整数的#770-D 转换 // CLA 地址范围为16位,因此传递到 MVECT //寄存器的地址将位于低64KW 地址空间中。 在为 MVECT 分配地址后、重新打开警告// #pragma diag_suppress=770 // //分配任务矢量并设置任务1和7的触发器 // 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_3、(uint16_t)&Cla1Task3); CLA_mapTaskVector (CLA1_base、CLA_MVECT_4、(uint16_t)&Cla1Task4); CLA_mapTaskVector (CLA1_base、CLA_MVECT_5、(uint16_t)&Cla1Task5); CLA_mapTaskVector (CLA1_base、CLA_MVECT_6、(uint16_t)&Cla1Task6); CLA_mapTaskVector (CLA1_base、CLA_MVECT_7、(uint16_t)&Cla1Task7); CLA_setTriggerSource (CLA_task_1、CLA_TRIGGER_SOFTWARE); CLA_setTriggerSource (CLA_task_2、CLA_trigger_software); CLA_setTriggerSource (CLA_task_3、CLA_trigger_software); CLA_setTriggerSource (CLA_task_4、CLA_TRIGGER_SOFTWARE); CLA_setTriggerSource (CLA_task_5、CLA_TRIGGER_SOFTWARE); CLA_setTriggerSource (CLA_task_6、CLA_TRIGGER_SOFTWARE); CLA_setTriggerSource (CLA_task_7、CLA_TRIGGER_SOFTWARE); // //启用任务1和7。 由于任务7是在软件中强制执行的、因此我们必须执行 //启用软件强制(IACKE) // CLA_enableTasks (CLA1_base、CLA_TASKFLAG_1); CLA_enableTasks (CLA1_base、CLA_TASKFLAG_2); CLA_enableTasks (CLA1_base、CLA_TASKFLAG_3); CLA_enableTasks (CLA1_base、CLA_TASKFLAG_4); CLA_enableTasks (CLA1_base、CLA_TASKFLAG_5); CLA_enableTasks (CLA1_base、CLA_TASKFLAG_6); CLA_enableTasks (CLA1_base、CLA_TASKFLAG_7); CLA_enableIACK (CLA1_base); // //后台任务将由软件触发;它共享 //与任务8相同的触发源。 禁用硬件触发 //后台任务的机制(如果已启用),然后 //将任务8的触发源设置为0,表示软件 //触发。 // //启用后台任务并启动它。 启用背景 //任务禁用任务8。 // #pragma diag_warning=770 CLA_setTriggerSource (CLA_task_8、CLA_trigger_software); CLA_enableBackgroundTask (CLA1_base); cla_startBackgroundTask (CLA1_base); }
这就是我在环路中调用的内容。
void CLA_Task (void * CLAtaskParameter) { for (;;) { if (xSemaphoreTake (testSemaphore_smph、portMAX_DELAY)) { C2000_Var.semaphorecounter_i16++; CLA_forceTasks (CLA1_base、CLA_TASKFLAG_1); vTaskDelay (100); CLA_forceTasks (CLA1_base、CLA_TASKFLAG_2); vTaskDelay (100); CLA_forceTasks (CLA1_base、CLA_TASKFLAG_3); vTaskDelay (100); CLA_forceTasks (CLA1_base、CLA_TASKFLAG_4); vTaskDelay (100); CLA_forceTasks (CLA1_base、CLA_TASKFLAG_5); vTaskDelay (100); CLA_forceTasks (CLA1_base、CLA_TASKFLAG_6); vTaskDelay (100); CLA_forceTasks (CLA1_base、CLA_TASKFLAG_7); vTaskDelay (100); } }
和我的调试屏幕。
