DSP

初探TI SYSLINK模块下Notify使用

2019-07-13 10:57发布

       SYSLINK模块是TI提供的给异构核心(ARM和DSP)通讯的基础软件模块,用户可以根据自身的应用来对SYSLINK模块进行再封装,达到简化应用程序编写的目的。TI也根据不同架构的SOC对其进行针对性的封装,如DAVINCE类处理器所使用的CODEC ENGINE-SERVER的通讯方式,NETRA平台MCFW框架的LINK通讯机制等。
        SYSLINK模块主要提供的功能:Processor Manager,Inter-Processor Communication,Utility module;详细信息见SysLink UserGuide:http://processors.wiki.ti.com/index.php/SysLink_UserGuide。     本文主要总结SYSLINK模块Inter-Processor Communication下Notify的使用(notify example):     1)主机(HOST)端调用流程:SysLink_setup()--> MultiProc_getId(Main_remoteProcName)--> Ipc_control(remoteProcId, Ipc_CONTROLCMD_LOADCALLBACK, NULL)-->Ipc_control(remoteProcId, Ipc_CONTROLCMD_STARTCALLBACK, NULL) -->App_exec() -->Ipc_control(remoteProcId, Ipc_CONTROLCMD_STOPCALLBACK, NULL) -->SysLink_destroy()     2)客户机(C674X或M3)端调用流程:Server_init()--> Ipc_start()--> MultiProc_getId("HOST")-->Ipc_attach(remoteProcId) -->Server_run(remoteProcId) -->Ipc_detach(remoteProcId) -->Ipc_stop() --> Server_exit()
    HOST和C674X或M3通讯执行分别在App_exec()和Server_run(remoteProcId)中执行: App_exec():
    /* register notify callback */
    status = Notify_registerEventSingle(remoteProcId,
        SystemCfg_LineId, SystemCfg_EventId, App_notifyCB, (UArg)NULL);

Server_run(remoteProcId):
    /* wait until remote core has registered notify callback */
    do {
        status = Notify_sendEvent(remoteProcId, SystemCfg_LineId,
            SystemCfg_EventId, 0, TRUE);
        if (status == Notify_E_EVTNOTREGISTERED) {
            Task_sleep(200);
        }
    } while (status == Notify_E_EVTNOTREGISTERED);
    通讯关键在于Notify通道控制函数Notify_registerEventSingle和Notify_sendEvent。通道配置参数为SystemCfg_LineId, SystemCfg_EventId。