arm和dsp内存访问冲突问题?

Arm和运行linux系统,dsp核运行ti-rtos系统,系统中有一块共享的内存如:0x95800000,范围1MB。DSP对此内存启用了cache。假设有如下结构体:

 typedef union
 {
  struct
  {
   volatile UINT32 ptrSender;//64~1M
   volatile UINT32 ptrReader;//64~1M
  };
  volatile UINT32 CtrlHdr[16];
 } AmMsgCtrl;

定义在内存0x95800000位置。

权限定义:

1、ARM对ptrReader有读、写权限,对ptrSender只有读权限;

2、DSP对ptrSender有读、写权限,对ptrReader只有读权限;

消息通讯:

1、DSP有新消息发给ARM时,修改ptrSender指针,同时对ptrSender和消息存放区使用cache_writeback函数,然后使用MsgQ通知ARM有新数据;

2、ARM接收到MsgQ通知后,读取ptrSender、ptrReader指针(打印此两指针的值),然后判断这两个指针来处理消息,当消息处理完成后,ARM修改(递增)ptrReader(通过打印消息看,ptrReader已经修改了),然后等待新的MsgQ通知。

出现的问题:

1、ARM接收到MsgQ通知后,打印ptrSender、ptrReader指针的值,出现ptrReader值回退现象,明明上次递增后打印的ptrReader已经改变,但是此时打印的ptrReader比上次打印的值小;而ptrSender值是一直正常递增的。

请问怎么确保ARM修改的值真实的写到内存?怎么解决这个异常问题?

2、DSP发送的消息比较频繁时,以上错误出现的几率比较大。难道是DSP使用cache_writeback时对ptrSender(dsp不会修改此指针)指针有影响?