Thread:SYSBIOS 中讨论的其他器件
摘要:
我们现在有一个 TI-Matter 锁定应用、它通过集成的传感器控制器文件构建。 但是、在系统引导期间、与传感器控制器相关的初始化调用会锁定系统。 我们的直觉是、它似乎与就绪和事件中断相关、并且几乎让人感觉出一连串的不间断中断正在消耗系统带宽。
我注意到、在我们的工作 tirtos7系统中、*。syscfg 文件会生成具有以下逻辑的 ti_sysBIOS_config.c 文件:
void Startup_exec()
{
/*启动时的第一个功能*/
Hwi_initNVIC ();
Hwi_initStack();
BIOS_init();
TI_SysBIOS_family_arm_cc26xx_TimestampProvider_init ();
/*模块初始化函数*/
system_init();
Clock_init();
Swi_init();
task_init();
IDLE_INIT();
Hwi_init();
STARTUP_DONE = true;
}
…μ A 然而、TI-Matter chip.syscfg 的处理似乎不会生成类似的例程。 特别是,我们还想知道是否有 hwiP_init*()计数器部件需要添加某个位置来替换上面所示的 Hwi_init*()调用? 下面是我们问题的详细信息。
详细信息#1. :
我们有以下在基于 tirtos7的系统中工作的文件集合:
scif.c
scif.h
scif_framework.h
scif_framework.c
scif_osal_tirtos.h
scif_osal_tirtos.c
我们有兴趣收集这个实用资料、并将其集成到 TI-Matter 锁定应用中。 在此过程中、我们了解到、在将 scif_osal_tirtos.c 引入 TI-Matter 锁定应用程序时需要手动修改。 具体而言、我们通过如下方式手动过渡了它对功能的依赖:
#include
#include semaphore.h
…改为与此文档所描述的功能相似的功能:
#include "freertos.h"
#include "semphr.h"
#include
详情#2:
启动锁定出现在启动传感器控制器的 MCU 代码块中。 这与我们在 tirtos7系统中成功使用的块相同:
静态空设置 SensorController ()
{
scifOsalRegisterCtrlReadyCallback (scCtrlReadyCallback);
scifOsalRegisterTaskAlertCallback (scTaskAlertCallback);
scifInit (&scifDriverSetup); <——不幸的是,此调用从不返回,不知道为什么????
…μ A
…μ A
scifStartTasksNbl (BV (SCIF_ADC_DATA_logger_task_ID));
}
详细信息#3:
当我们查看 scifInit ()的内部实现时,即永远不会返回的调用 这是一个由传感器控制器开发工具自动生成的代码块、通过实验、我们注意到、在该例程中注释掉两行会允许 TI-Matter Lock-app 启动(尽管传感器控制器工作不正常)。 以下是我们添加了注释的两行(搜索"TODO"):
文件: scif_framework.c
例程:
SCIF_RESULT_T scifInit (const SCIF_DATA_T* pScifDriverSetup){
//执行完整性检查:传感器控制器不能已处于活动状态
如果(HWREG (AUX_SCE_BASE + AUX_SCE_O_CTL)& AUX_SCE_CTL_CLK_EN_M){
返回 SCIF_ILLEGAL_OPERATION;
}
//复制驱动程序设置
memcpy (&scifData、pScifDriverSetup、sizeof (SCIF_DATA_T));
//重置唤醒事件源和标志,并设置传感器控制器矢量表
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_WUGATE)= 0;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_PROGWU0CFG)= 0x0000;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_PROGWU1CFG)= 0x0000;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_PROGWU2CFG)= 0x0000;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_PROGWU3CFG)= 0x0000;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_WUFLAGSCLR)= 0x00FF;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_WUFLAGSCLR)= 0x0000;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG0)= AUX_SYSIF_VECCFG0_VEC_EV_SW_WU0;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG1)= AUX_SYSIF_VECCFG5_VEC_EV_SW_WU1;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG2)= AUX_SYSIF_VECCFG1_VEC_EV_PROG_WU0;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG3)= AUX_SYSIF_VECCFG2_VEC_EV_PROG_WU1;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG4)= AUX_SYSIF_VECCFG3_VEC_EV_PROG_WU2;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG5)= AUX_SYSIF_VECCFG4_VEC_EV_PROG_WU3;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG6)= AUX_SYSIF_VECCFG6_VEC_EV_SW_WU2;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_VECCFG7)= AUX_SYSIF_VECCFG7G_VEC_EV_NONE;
HWREG (AUX_SYSIF_BASE + AUX_SYSIF_O_WUGATE)= 1;
//上传 AUX RAM 映像
memcpy ((void*) AUX_RAM_BASE、scifData.pAuxRamImage、scifData.auxRamImageSize);
//选择 SW_WU0作为复位矢量
HWREG (AUX_SCE_BASE + AUX_SCE_O_CTL)= 0 << AUX_SCE_CTL_RESET_VECTOR_S;
//执行驱动程序设置特定的初始化
scifData.fptrDriverSetupInit();
//设置就绪事件(到 MCU 域)
HWREG (AUX_EVCTL_BASE + AUX_EVCTL_O_SWEVSET)= AUX_EVCTL_SWEVSET_SWEV0_M;
//系统 CPU 将在出现警报事件时唤醒
scifSetMcuwusel (OSAL_task_alert_MCUWUSEL_WU_EV_INDEX、AON_EVENT_MCUWUSEL_WU0_EV_AUX_SWEV1);
//启动传感器控制器
HWREG (AUX_SCE_BASE + AUX_SCE_O_CTL)|= AUX_SCE_CTL_CLK_EN_M;
//寄存器,清除并启用中断
osalRegisterCtrlReadyInt();
osalClearCtrlReadyInt();
#if 0 /* TODO:0 ==临时实验以允许完全启动。 */
osalEnableCtrlReadyInt();
#endif
osalRegisterTaskAlertInt();
osalClearTaskAlertInt();
#if 0 /* TODO:0 ==临时实验以允许完全启动。 */
scifOsalEnableTaskAlertInt();
#endif
返回 SCIF_SUCCESS;
}// scifInit
摘要:
我们感觉在开发修改后的 TI-Matter 锁定应用程序的尝试中陷入了僵局。 我们所做的与 MCU 工作相关的一切都很好、剩下的最后一件事就是使系统的传感器控制器部分正常工作。 同样、我们让它都在 tirtos7系统中工作。 有什么建议吗?
提前感谢!
Steve K.