This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28P650DK:IPC 寄存器在 CPU2 中无法正常工作

Guru**** 2847400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1588968/tms320f28p650dk-ipc-register-not-working-in-cpu2

器件型号: TMS320F28P650DK

您好、

我尝试从 CPU1 向 CPU2 发送消息。 每当从 CPU1 发送消息时、CPU2 中都会引发中断。 要在 CPU2 中接收更多消息、我需要确认 CPU2 中的 IPC 标志。 在 CPU2 中使用以确认 IPC 标志的命令 I 如下所示:

Cpu2toCpu1IpcRegs.CPU2TOCPU1IPCACK.all |= ipcflag1;
 
但是、上面的行没有达到目的、也没有收到后续中断。
 
但是、如果我使用以下行:
IPC_ackFlagRtoL (IPC_CPU2_L_CPU1_R、IPC_Flag1);
我收到后续的中断。
 
我想了解这两条线之间的区别。
 
我方面的一些观察:
>(在 CCS 中)、& Cpu2TOCpu1IpcRegs 给出 0x000002
但在使用 driverlib API 时、我会看到内存位置 0x5cE00(实际 IPC 基地址)发生了更改。
 
在 CPU2Menory 映射文件中、我看到以下代码块:
Cpu2toCpu1IpcRegsFile 
*          1    00000002    00000026     UNINITIALIZED
                  00000002    00000026     f28p65x_globalvariabledefs.obj (Cpu2toCpu1IpcRegsFile)

.cinit     0    00012000    00000068     
                  00012000    0000000d     (.cinit..data.load) [load image, compression = lzss]
                  0001200d    00000006     (.cinit.READFLAG1CPU2.load) [load image, compression = lzss]
                  00012013    00000006     (.cinit.READFLAG2CPU2.load) [load image, compression = lzss]
                  00012019    00000006     (.cinit.WRITEFLAG1CPU2.load) [load image, compression = lzss]
                  0001201f    00000006     (.cinit.WRITEFLAG2CPU2.load) [load image, compression = lzss]
                  00012025    00000001     --HOLE-- [fill = 0]
                  00012026    00000006     (__TI_handler_table)
                  0001202c    00000004     (.cinit..bss.load) [load image, compression = zero_init]
                  00012030    00000004     (.cinit.Cpu2toCpu1IpcRegsFile.load) [load image, compression = zero_init]
                  00012034    00000004     (.cinit.GETREADIDX.load) [load image, compression = zero_init]
                  00012038    00000004     (.cinit.PUTBUFFER.load) [load image, compression = zero_init]
                  0001203c    00000004     (.cinit.PUTWRITEIDX.load) [load image, compression = zero_init]
                  00012040    00000028     (__TI_cinit_table)


__TI_cinit_table @ 00012040 records: 10, size/record: 4, table size: 40
	.data: load addr=00012000, load size=0000000d bytes, run addr=00010262, run size=00000011 bytes, compression=lzss
	READFLAG1CPU2: load addr=0001200d, load size=00000006 bytes, run addr=0003b180, run size=00000020 bytes, compression=lzss
	READFLAG2CPU2: load addr=00012013, load size=00000006 bytes, run addr=0003b1a0, run size=00000020 bytes, compression=lzss
	WRITEFLAG1CPU2: load addr=00012019, load size=00000006 bytes, run addr=0003b140, run size=00000020 bytes, compression=lzss
	WRITEFLAG2CPU2: load addr=0001201f, load size=00000006 bytes, run addr=0003b160, run size=00000020 bytes, compression=lzss
	.bss: load addr=0001202c, load size=00000004 bytes, run addr=00010000, run size=00000262 bytes, compression=zero_init
	Cpu2toCpu1IpcRegsFile: load addr=00012030, load size=00000004 bytes, run addr=00000002, run size=00000026 bytes, compression=zero_init
	GETREADIDX: load addr=00012034, load size=00000004 bytes, run addr=0003b120, run size=00000020 bytes, compression=zero_init
	PUTBUFFER: load addr=00012038, load size=00000004 bytes, run addr=0003b000, run size=00000100 bytes, compression=zero_init
	PUTWRITEIDX: load addr=0001203c, load size=00000004 bytes, run addr=0003b100, run size=00000020 bytes, compression=zero_init
如果您需要更多详细信息、请告诉我。
谢谢、
Mukul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Mukul、

    您观察到两个命令都应该起作用的情况是正确的、但是您使用的第一个命令表示法似乎不正确。 当前您正在使用  Cpu2toCpu1IpcRegs.CPU2TOCPU1IPCACK、这会确认为 CPU1 设置的标志。 但是、由于您使用 CPU1 将数据发送到 CPU2、因此应确认 CPU2 的标志。 要使用的正确命令是 Cpu1toCpu2IpcRegs.CPU1TOCPU2IPCACK。

    此致、

    Aj Favela.