TDA4VH IPC

IPC

代码集成分为两个部分组成,MCAL CddIPC和 TI DrvIPC。

CddIPC

CddIPC模块导入

1.打开EB工程右击项目图标,点击Module Configurations添加CddIPC模块。

在这里插入图片描述

在这里插入图片描述

2.双击Cdd_Ipc进入模块配置。

在这里插入图片描述

CddIPC参数配置

在这里插入图片描述

在这里插入图片描述

1.下面其他选项默认勾选即可,Dem可选择关联或者修改为无效Dem事件。

在这里插入图片描述

2.共享内存起始地址以及大小,第三个配置选项没有在静态代码中使用,前两个选项要与其他核地址保持一致。

在这里插入图片描述

3.IPC本地内核选择。

在这里插入图片描述

4.参加IPC通信对方核ID,供后面CommChs使用。

在这里插入图片描述

5.这里面需要注意的是,MaxNumMsgQueued和MaxMsgSize是不能够修改的。LocalEp与RemoteEp类似UDP通信本地与对方端口号,通信双方互掉。

在这里插入图片描述

在这里插入图片描述

6.硬件MailBox的个数,TDA4每个核都有一个对应的HostProcID是自己的MailBox。

在这里插入图片描述

7.每个MailBox都有自己对所有包括自己MailBox内部使用的关系,这里我也不需要修改,默认TI就好,255为无效值。

CddIPC集成

1.SDK代码路径:mcusw\mcal_drv\mcal\CddIpc

2.ipc_baremetal_hw为DrvIPC静态代码,后面要替换为最新的TI SDK的lib文件。

在这里插入图片描述

3.CddIPC保留下述文件,DrvIPC直接集成ipc_baremental.aerf库即可。

在这里插入图片描述

4.静态lib库路径:pdk_j784s4_08_06_01_03\packages\ti\drv\sciclient\lib\j784s4\mcu1_0\release

在这里插入图片描述

CddIPC接收

用户层plling接口函数非阻塞式。


FUNC(Std_ReturnType, CDD_IPC_CODE) Cdd_IpcReceiveMsg (VAR(uint32, AUTOMATIC) chId,
														P2VAR(void, AUTOMATIC, CDD_APP_DATA) pBuf,
														P2VAR(uint32, AUTOMATIC, CDD_APP_DATA) bufLen)
{
	/*
	1. Get the associated RemoteEp & RemoteProc
	2. Initiate the transfer
	*/
	const Cdd_IpcChannelType *pChanCfg = CddIpcConfiguraions_PC.pChCfg;
	
	remoteProcId = pChanCfg[chId].remoteProcId;
	remoteEndPt = Cdd_IpcDrvObj.mapToCommId[remoteProcId][chId].remoteEp;
	
	if (IPC_SOK == (int32_t)RPMessage_recvNb(Cdd_IpcDrvObj.rpmsgHndl[chId],
												(void*)pBuf,
												(void *)bufLen,
												&remoteEndPt,
												&remoteProcId))
	{
		UART_printf("recvNb,bufLen;%d,remoteEndPt:%d,remoteProcId:%d\n",
						*((uint32*)bufLen),
						remoteEndPt,
						remoteProcId);
		
		Cdd_IpcDrvObj.mapToCommId[remoteProcId][chId].remoteEp = remoteEndPt;		
	}
}

CddIPC发送

用户发送函数。

FUNC(Std_ReturnType, CDD_IPC_CODE) Cdd_IpcSendMsg(VAR(uint32, AUTOMATIC) chId,
													P2CONST(void, AUTOMATIC, CDD_APP_DATA) pBuf,
													VAR(uint32, AUTOMATIC) bufLen)
{
	const Cdd_IpcChannelType *pChanCfg = CddIpcConfiguraions_PC.pChCfg;

	remoteProcId = pChanCfg[chId].remoteProcId;
	
	remoteEndPt = Cdd_IpcDrvObj.mapToCommId[remoteProcId][chId].remoteEp;

	ownEp = pChanCfg[chId].localEp;

	UART_printf("IpcSend,remoteProcId:%d,remoteEndPt:%d,ownEp:%d\n",remoteProcId,remoteEndPt,ownEp);

	if (IPC_SOK == RPMessage_send(Cdd_IpcDrvObj.rpmsgHndl[chId],
									remoteProcId,
									remoteEndPt,
									ownEp,
									(Ptr)pBuf, 
									(uint16)bufLen))
	{
		rtnVal = (Std_ReturnType)E_OK;
	}
}

DrvIPC

1.DrvIPC驱动链接库引用。

在这里插入图片描述

2.在CddIPC初始化过程中调用Ipc_mailboxRegister函数。

在这里插入图片描述

3.在V4版本的代码中,SCI配置中断路由,已经做在底层驱动代码,与之前手动调用已经不需要了。

4.如果系统使用Autosar的话,这里注册中断函数,也需要在AutoSar中进行配置,否则中断的入口函数不是Autosar函数的入口地址。

在这里插入图片描述

5.中断路由最终路由到MCU1_0,Main Domain映射到同一个clusterId 12,userId 0,A72映射到clusterId 0,userId 0。

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值