核间通信(IPC)
简介
芯片内集成了多个处理器。核间通信(IPC)硬件在每两个处理器之间建立专用的通信通道。
IPC 为每个处理器提供一组寄存器,并通过中断实现处理器间通信。此外,每个处理器可以独立屏蔽中断以支持轮询模式操作。
IPC 通信数据必须位于公共内存中,该内存不属于 IPC 模块。
特性
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
每两个处理器之间
{{IC_PARAM_IPC_CH}}组 TRx 通道
独立的收发通道
通道独立的中断控制
支持 Rx 通道满中断
支持 Tx 通道空中断
共享内存
框图
IPC 提供了每两个处理器之间的简单通信机制。它可以使用共享 SRAM 向其他 CPU 传输信息。IPC 的系统框图如下所示。
每个处理器的 IPC 子模块结构是相同的。下图总结了 IPC_CPUm 的子模块结构。
在每两个处理器之间,一个处理器拥有 2 组通信通道,1 组用于通过写入 Tx 数据寄存器向另一个处理器发送数据,另一组用于通过读取 Rx 数据寄存器从另一个处理器接收数据。
除了数据寄存器外,还有中断相关的寄存器。
中断状态寄存器(ISR)用于呈现当前通道 Tx 空或 Rx 满状态变化。
中断屏蔽寄存器(IMR)用于使能 Tx 空或 Rx 满中断。
中断清除寄存器(ICR)用于清除相应的中断状态。
下图展示了从 CPUn 到 CPUm 的消息传输。
功能描述
信息收发
在每两个处理器之间,一个处理器有 2 组通道与另一个处理器进行通信。Tx 通道的通道索引与相应的 Rx 通道是一对一映射。
IPC 消息发送映射 显示了从 CPUn 到 CPUm 的 IPC 发送映射,IPC 消息接收映射 显示了接收数据后从 CPUm 到 CPUn 的 IPC 映射。
CPUn 的 REG_TX_DATA 供 CPUn 用于向 CPUm 发送数据,一旦向通道 x(x 可以是 0 ~ M,其中 M 表示最大通道索引)写入
1,CPUm 的 REG_RX_DATA 中的相应位将被设置。同时,CPUm 的 REG_ISR 中通道 x 的 Rx 满位将被设置。向 CPUm 的 REG_ISR 中的通道 x 写入
1可清除通道 x 的 Rx 满中断,CPUn 的 REG_ISR 中相应的通道 x Tx 空中断位将自动设置。
IPC 消息发送映射
IPC 消息接收映射
无握手的 IPC
由于每个处理器都有 Rx 满和 Tx 空中断,这些功能可用于实现消息传输和握手。
无握手的 IPC 消息传输流程 显示了不等待接收方握手的 IPC 中断消息协议,发送端不等待接收端的确认信号。步骤总结在 无握手的 IPC 消息传输步骤 中。它以从 CPUn 到 CPUm 的消息传输为例。
无握手的 IPC 消息传输流程
步骤 |
描述 |
|---|---|
1 |
检查 CPUn IPC Tx 数据寄存器中通道 0 的 Tx 数据状态 |
2 |
CPUn 将数据写入公共内存 |
3 |
向 IPC Tx 数据寄存器中的空闲通道 0 写入 |
4 |
CPUn IPC Tx 数据寄存器写操作
|
5 |
如果在 CPUm 中断屏蔽寄存器中使能了 Rx 满中断,将向 CPUm 生成 Rx 满中断请求。 |
6 |
检查 Rx 满通道后,CPUm 从相应的公共内存执行数据读取 |
7 |
完成中断处理后,CPUm 向 CPUm 中断状态寄存器写入 |
8 |
CPUm 中断状态寄存器写操作
|
9 |
自动清除 CPUm IPC Rx 数据寄存器和 CPUn IPC Tx 数据寄存器中的通道 0 位 |
有握手的 IPC
有握手的 IPC 消息传输流程 显示了等待接收方握手的 IPC 中断消息协议,发送端等待接收端的确认信号。步骤总结在 有握手的 IPC 消息传输步骤 中。它以从 CPUn 到 CPUm 的消息传输为例。
有握手的 IPC 消息传输流程
步骤 |
描述 |
|---|---|
1 |
检查 CPUn IPC Tx 数据寄存器中通道 0 的 Tx 数据状态 |
2 |
CPUn 将数据写入公共内存 |
3 |
向 IPC Tx 数据寄存器中的空闲通道 0 写入 |
4 |
CPUn IPC Tx 数据寄存器写操作
|
5 |
如果在 CPUm 中断屏蔽寄存器中使能了 Rx 满中断,将向 CPUm 生成 Rx 满中断请求。 |
6 |
检查 Rx 满通道后,CPUm 从相应的公共内存执行数据读取 |
7 |
完成中断处理后,CPUm 向 CPUm 中断状态寄存器写入 |
8 |
IPC 中断状态寄存器写操作
|
9 |
自动清除 CPUm IPC Rx 数据寄存器和 CPUn IPC Tx 数据寄存器中的通道 0 位 |
10 |
如果在 CPUn 中断屏蔽寄存器中使能了 Tx 空中断,CPUn 状态寄存器中 Tx 空位的设置将向 CPUn 生成 Tx 空中断 |
11 |
CPUn 向 CPUn 中断状态寄存器写入 |
硬件信号量
概览
硬件信号量用于互斥机制。它可以通过原子操作被核心访问。
传统上,软件使用信号量需要三个步骤:读取 -> 写入 -> 读取。
CPU 的第一次读取操作是轮询当前信号量以检查它是否被占用。
如果该信号量是空闲的,CPU 将通过写入来竞争它。
最后的读取操作是检查 CPU 是否已经占用了该信号量,因为可能有多个 CPU 或线程同时写入以竞争同一个信号量。
上述原本由软件执行的流程现已交由硬件处理。下图说明了硬件信号量机制。
地址映射负责将
N位信号量状态映射到Nx 4 地址空间,其中N表示硬件信号量的总数。读取设置逻辑负责在接收到读取请求后确定要读取的信号量状态。如果相应的信号量寄存器为 0,读取设置逻辑将首先设置信号量寄存器,然后向读取请求返回 0。
写入清除逻辑负责在接收到写入请求后将信号量的状态清除为 0。
信号量寄存器有
N位,寄存器中的每一位代表一个信号量。该寄存器可以直接读取,也可以通过地址映射寄存器读取/写入。如果通过地址映射寄存器读取信号量寄存器,一次只能读取 1bit 的状态,并且当该 bit 为 0 时会同步设置该位。
如果直接读取信号量寄存器,读取不会改变信号量的状态,并且可以一次读取所有
N位。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
N 等于 {{IC_PARAM_IPC_SEMA}}。
地址映射
如果通过地址映射的基地址可以获取和释放 semaphore 寄存器的 bit[0],那么 bit[1] 可以通过(基地址 + 4)相应地获取和释放。因此整个访问窗口的地址范围从 0 到(N x 4 - 1),其中 N 是硬件 semaphore 的总数。
获取流程
如果软件想要请求 semaphore 0,它可以直接读取访问窗口寄存器的基地址。
当硬件接收到读取请求时,如果该位为 0,硬件将设置该位并同步返回 0。此时,软件将认为获取流程成功。
当硬件接收到读取请求时,如果该位为 1,硬件将直接返回 1。此时,软件将认为获取流程失败。
释放流程
如果软件想要释放 semaphore 0,它可以直接写入访问窗口寄存器的基地址。硬件在接收到写命令后将清除该位。
查询流程
如果软件想要查询 semaphore 状态,它可以直接读取 semaphore 寄存器(不通过地址映射)。此操作仅返回 semaphore 状态,但不会改变它。
寄存器
Base Address:
IPC0_REG : 0x41014000
IPC1_REG : 0x41014080
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
Take NP's IPC as an example to describe the function of IPC's internal registers. The REG_TX_DATA is used to transmit message from NP to AP. (The logic cannot be generated automatically.) |
|
004h |
R/W |
This register is used to record Tx empty. |
|
008h |
R/W |
||
00Ch |
R/W |
This register can ensure that the software can manually clear the Tx register in an emergency. |
|
010h |
R |
||
014h |
R |
||
018h |
R/W |
REG_IPC_DATA
Name: Tx_Rx Register
Size: 32
Address offset: 000h
Read/write access: R/W
Take NP's IPC as an example to describe the function of IPC's internal registers. The REG_TX_DATA is
used to transmit message from NP to AP. (The logic cannot be generated automatically.)
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
TX0_DATA |
R/W |
0x0 |
After preparing descriptor, data and corresponding memory.
If the corresponding Rx full status bit in REG_ISR_CPU0 (e.g. isr_rx0_full_status6) is cleared, the corresponding bit in tx0_data will be cleaned automatically. |
15:0 |
RX0_DATA |
R |
0x0 |
Rx data automatically maps data from tx0_data of CPU0 |
REG_IPC_ISR
Name: Interrupt Empty Full Status Register
Size: 32
Address offset: 004h
Read/write access: R/W
This register is used to record Tx empty.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ISR_TX0_EMPTY_STATUS15 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
30 |
ISR_TX0_EMPTY_STATUS14 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
29 |
ISR_TX0_EMPTY_STATUS13 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
28 |
ISR_TX0_EMPTY_STATUS12 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
27 |
ISR_TX0_EMPTY_STATUS11 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
26 |
ISR_TX0_EMPTY_STATUS10 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
25 |
ISR_TX0_EMPTY_STATUS9 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
24 |
ISR_TX0_EMPTY_STATUS8 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
23 |
ISR_TX0_EMPTY_STATUS7 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
22 |
ISR_TX0_EMPTY_STATUS6 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
21 |
ISR_TX0_EMPTY_STATUS5 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
20 |
ISR_TX0_EMPTY_STATUS4 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
19 |
ISR_TX0_EMPTY_STATUS3 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
18 |
ISR_TX0_EMPTY_STATUS2 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
17 |
ISR_TX0_EMPTY_STATUS1 |
R/W |
0x0 |
Refer to the description of isr_tx0_empty_status0 |
16 |
ISR_TX0_EMPTY_STATUS0 |
R/W |
0x0 |
Tx channel 0 empty interrupt status of CPU1 transmit to CPU0. If the corresponding Rx full status bit in REG_ISR_CPU0 (e.g. isr_rx0_full_status0) is cleared, the corresponding Tx empty status bit will be set automatically. It will be cleared by software writing 1. |
15 |
ISR_RX0_FULL_STATUS15 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
14 |
ISR_RX0_FULL_STATUS14 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
13 |
ISR_RX0_FULL_STATUS13 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
12 |
ISR_RX0_FULL_STATUS12 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
11 |
ISR_RX0_FULL_STATUS11 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
10 |
ISR_RX0_FULL_STATUS10 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
9 |
ISR_RX0_FULL_STATUS9 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
8 |
ISR_RX0_FULL_STATUS8 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
7 |
ISR_RX0_FULL_STATUS7 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
6 |
ISR_RX0_FULL_STATUS6 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
5 |
ISR_RX0_FULL_STATUS5 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
4 |
ISR_RX0_FULL_STATUS4 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
3 |
ISR_RX0_FULL_STATUS3 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
2 |
ISR_RX0_FULL_STATUS2 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
1 |
ISR_RX0_FULL_STATUS1 |
R/W |
0x0 |
Refer to the description of isr_rx0_full_status0 |
0 |
ISR_RX0_FULL_STATUS0 |
R/W |
0x0 |
Rx channel 0 full interrupt status of CPU1. The corresponding Rx full status bit will be set by CPU0's Tx data register (tx0_data) channel 0. It will be cleared by software writing 1. |
REG_IPC_IMR
Name: Interrupt Empty Full Mask Register
Size: 32
Address offset: 008h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
IMR_TX0_EMPTY_MASK |
R/W |
0x0 |
|
15:0 |
IMR_RX0_FULL_MASK |
R/W |
0x0 |
|
REG_IPC_ICR
Name: Clear Tx Register
Size: 32
Address offset: 00Ch
Read/write access: R/W
This register can ensure that the software can manually clear the Tx register in an emergency.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ICR_TX0_DATA_CLEAR15 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
30 |
ICR_TX0_DATA_CLEAR14 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
29 |
ICR_TX0_DATA_CLEAR13 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
28 |
ICR_TX0_DATA_CLEAR12 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
27 |
ICR_TX0_DATA_CLEAR11 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
26 |
ICR_TX0_DATA_CLEAR10 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
25 |
ICR_TX0_DATA_CLEAR9 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
24 |
ICR_TX0_DATA_CLEAR8 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
23 |
ICR_TX0_DATA_CLEAR7 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
22 |
ICR_TX0_DATA_CLEAR6 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
21 |
ICR_TX0_DATA_CLEAR5 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
20 |
ICR_TX0_DATA_CLEAR4 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
19 |
ICR_TX0_DATA_CLEAR3 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
18 |
ICR_TX0_DATA_CLEAR2 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
17 |
ICR_TX0_DATA_CLEAR1 |
R/W |
0x0 |
Refer to the description of icr_tx0_data_clear0 |
16 |
ICR_TX0_DATA_CLEAR0 |
R/W |
0x0 |
|
15:0 |
RSVD0 |
R/W |
0x0 |
REG_IPC_SEM_0
Size: 32
Address offset: 010h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_0_DATA |
R |
0x0 |
It is used to indicate whether this semaphore is occupied. 0: Not occupied; 1: Occupied. |
REG_IPC_SEM_1
Size: 32
Address offset: 014h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_1_DATA |
R |
0x0 |
It is used to indicate whether this semaphore is occupied. 0: Not occupied; 1: Occupied. |
REG_IPC_DUMMY
Name: Dummy Register
Size: 32
Address offset: 018h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:0 |
DUMMY |
R/W |
0x0 |
Dummy register |
Base Address:
IPC0_REG : 0x41020000
IPC1_REG : 0x41020080
IPC2_REG : 0x41020100
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
Take LP's IPC as an example to describe the function of IPC's internal registers. The REG_TX_DATA is used to transmit message from LP to NP or AP. (The logic cannot be generated automatically) |
|
004h |
R |
The REG_RX_DATA is used to receive message from NP or AP. |
|
008h |
R/W |
This register is used to record Tx empty and Rx full status. |
|
00Ch |
R/W |
These bits mask their corresponding interrupt status bits. |
|
010h |
R/W |
This register can ensure that the software can manually clear the Tx register in an emergency. |
|
014h |
R/W |
||
018h |
R/W |
||
01Ch |
R/W |
||
020h |
R/W |
||
024h |
R/W |
REG_IPC_TX_DATA
Name: Tx Register
Size: 32
Address offset: 000h
Read/write access: R/W
Take LP's IPC as an example to describe the function of IPC's internal registers. The REG_TX_DATA is
used to transmit message from LP to NP or AP. (The logic cannot be generated automatically)
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:8 |
TX0_DATA |
R/W |
0x0 |
After preparing descriptor, data and corresponding memory,
If the corresponding Rx full status bit in REG_ISR_CPU0 (eg. ISR_RX0_FULL_STATUS6) is cleared, the corresponding bit in tx0_data will be cleaned automatically. |
7:0 |
TX1_DATA |
R/W |
0x0 |
After preparing descriptor, data and corresponding memory,
If the corresponding Rx full status bit in REG_ISR_CPU1 (eg. ISR_RX1_FULL_STATUS6) is cleared, the corresponding bit in tx_data_ln will be cleaned automatically. |
REG_IPC_RX_DATA
Name: Rx Register
Size: 32
Address offset: 004h
Read/write access: R
The REG_RX_DATA is used to receive message from NP or AP.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:8 |
RX0_DATA |
R |
0x0 |
Rx data automatically maps data from TX0_DATA of CPU0 |
7:0 |
RX1_DATA |
R |
0x0 |
Rx data automatically maps data from TX1_DATA of CPU1 |
REG_IPC_ISR
Name: Interrupt Status Register
Size: 32
Address offset: 008h
Read/write access: R/W
This register is used to record Tx empty and Rx full status.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ISR_RX0_FULL_STATUS7 |
R/W |
0x0 |
Rx channel 7 full interrupt status of CPU3. The corresponding Rx full status bit will be set by CPU0's Tx data register (tx0_data) channel 7. It will be cleared by software writing 1. |
30 |
ISR_RX0_FULL_STATUS6 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
29 |
ISR_RX0_FULL_STATUS5 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
28 |
ISR_RX0_FULL_STATUS4 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
27 |
ISR_RX0_FULL_STATUS3 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
26 |
ISR_RX0_FULL_STATUS2 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
25 |
ISR_RX0_FULL_STATUS1 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
24 |
ISR_RX0_FULL_STATUS0 |
R/W |
0x0 |
Refer to the description of the ISR_RX0_FULL_STATUS7. |
23 |
ISR_RX1_FULL_STATUS7 |
R/W |
0x0 |
Rx channel 7 full interrupt status of CPU3. The corresponding Rx full status bit will be set by CPU1's Tx data register (tx1_data) channel 7. It will be cleared by software writing 1. |
22 |
ISR_RX1_FULL_STATUS6 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
21 |
ISR_RX1_FULL_STATUS5 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
20 |
ISR_RX1_FULL_STATUS4 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
19 |
ISR_RX1_FULL_STATUS3 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
18 |
ISR_RX1_FULL_STATUS2 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
17 |
ISR_RX1_FULL_STATUS1 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
16 |
ISR_RX1_FULL_STATUS0 |
R/W |
0x0 |
Refer to the description of the ISR_RX1_FULL_STATUS7. |
15 |
ISR_TX0_EMPTY_STATUS7 |
R/W |
0x0 |
Tx channel 7 empty interrupt status of CPU3 transmit to CPU0. If the corresponding Rx full status bit in REG_ISR_CPU0 (eg. ISR_RX0_FULL_STATUS7) is cleared, the corresponding Tx empty status bit will be set automatically. It will be cleared by software writing 1. |
14 |
ISR_TX0_EMPTY_STATUS6 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
13 |
ISR_TX0_EMPTY_STATUS5 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
12 |
ISR_TX0_EMPTY_STATUS4 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
11 |
ISR_TX0_EMPTY_STATUS3 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
10 |
ISR_TX0_EMPTY_STATUS2 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
9 |
ISR_TX0_EMPTY_STATUS1 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
8 |
ISR_TX0_EMPTY_STATUS0 |
R/W |
0x0 |
Refer to the description of the ISR_TX0_EMPTY_STATUS7. |
7 |
ISR_TX1_EMPTY_STATUS7 |
R/W |
0x0 |
Tx channel 7 empty interrupt status of CPU3 transmit to CPU1. If the corresponding Rx full status bit in REG_ISR_CPU1 (eg. ISR_RX1_FULL_STATUS7) is cleared, the corresponding Tx empty status bit will be set automatically. It will be cleared by software writing 1. |
6 |
ISR_TX1_EMPTY_STATUS6 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
5 |
ISR_TX1_EMPTY_STATUS5 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
4 |
ISR_TX1_EMPTY_STATUS4 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
3 |
ISR_TX1_EMPTY_STATUS3 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
2 |
ISR_TX1_EMPTY_STATUS2 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
1 |
ISR_TX1_EMPTY_STATUS1 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
0 |
ISR_TX1_EMPTY_STATUS0 |
R/W |
0x0 |
Refer to the description of the ISR_TX1_EMPTY_STATUS7. |
REG_IPC_IMR
Name: Interrupt Mask Register
Size: 32
Address offset: 00Ch
Read/write access: R/W
These bits mask their corresponding interrupt status bits.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:24 |
IMR_RX0_FULL_MASK |
R/W |
0x0 |
|
23:16 |
IMR_RX1_FULL_MASK |
R/W |
0x0 |
|
15:8 |
IMR_TX0_EMPTY_MASK |
R/W |
0x0 |
|
7:0 |
IMR_TX1_EMPTY_MASK |
R/W |
0x0 |
|
REG_IPC_ICR
Name: Clear Tx Register
Size: 32
Address offset: 010h
Read/write access: R/W
This register can ensure that the software can manually clear the Tx register in an emergency.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15 |
ICR_TX0_DATA_CLEAR7 |
R/W |
0x0 |
|
14 |
ICR_TX0_DATA_CLEAR6 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
13 |
ICR_TX0_DATA_CLEAR5 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
12 |
ICR_TX0_DATA_CLEAR4 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
11 |
ICR_TX0_DATA_CLEAR3 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
10 |
ICR_TX0_DATA_CLEAR2 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
9 |
ICR_TX0_DATA_CLEAR1 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
8 |
ICR_TX0_DATA_CLEAR0 |
R/W |
0x0 |
Refer to the description of the ICR_TX0_DATA_CLEAR7. |
7 |
ICR_TX1_DATA_CLEAR7 |
R/W |
0x0 |
|
6 |
ICR_TX1_DATA_CLEAR6 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
5 |
ICR_TX1_DATA_CLEAR5 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
4 |
ICR_TX1_DATA_CLEAR4 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
3 |
ICR_TX1_DATA_CLEAR3 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
2 |
ICR_TX1_DATA_CLEAR2 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
1 |
ICR_TX1_DATA_CLEAR1 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
0 |
ICR_TX1_DATA_CLEAR0 |
R/W |
0x0 |
Refer to the description of the ICR_TX1_DATA_CLEAR7. |
REG_IPC_SEM_x
Name: Semaphore x Register
Size: 32
Address offset: 014h + 04h * x (x=0, 1, 2, 3)
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:12 |
RSVD |
R |
- |
Reserved |
11 |
SEMx_CLR |
R/W |
0x0 |
The bit can clear 'CPUID ' & 'PXID' when owner CPU writes 1. |
10 |
SEMx_SET_CPUID |
R/W |
0x0 |
The bit can set CPUID, It must be written at the same time as SEMx_PXID. |
9:8 |
SEMx_CPUID |
R |
0x0 |
‘CPUID’ bit is a read-only bit.
|
7:0 |
SEMx_PXID |
R/W |
0x0 |
CPUID_PXID, which is used to indicate who owns this semaphore when the CPUID is the same. |
REG_IPC_DUMMY
Name: Dummy Register
Size: 32
Address offset: 024h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:0 |
DUMMY |
R/W |
0x0 |
Dummy register |
REGISTER_CONTENTS=RTL8720E
REGISTER_CONTENTS=RTL8720E
REGISTER_CONTENTS=RTL8720E
Base Address:
IPCAP_REG : 0x41000580
IPCLP_REG : 0x42008600
IPCNP_REG : 0x41000500
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
Take LP's IPC as an example to describe the function of IPC's internal registers.The REG_TX_DATA is used to transmit message from LP to NP or AP. |
|
004h |
R |
The REG_RX_DATA is used to receive message from NP or AP. |
|
008h |
R/W |
This register is used to record Tx empty and Rx full status. |
|
00Ch |
R/W |
These bits mask their corresponding interrupt status bits. |
|
010h |
R/W |
This register can ensure that the software can manually clear the Tx register in an emergency. |
REG_IPC_TX_DATA
Name: Tx Register
Size: 32
Address offset: 000h
Read/write access: R/W
Take LP's IPC as an example to describe the function of IPC's internal registers.The REG_TX_DATA is
used to transmit message from LP to NP or AP.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:8 |
TX0_DATA |
R/W |
0x0 |
After preparing descriptor, data and corresponding memory,
If the corresponding Rx full status bit in REG_ISR_CPU0 (eg.isr_rx0_full_status6) is cleared, the corresponding bit in tx0_data will be cleaned automatically. |
7:0 |
TX1_DATA |
R/W |
0x0 |
After preparing descriptor, data and corresponding memory,
If the corresponding Rx full status bit in REG_ISR_CPU1 (eg.isr_rx1_full_status6) is cleared, the corresponding bit in tx_data_ln will be cleaned automatically. |
REG_IPC_RX_DATA
Name: Rx Register
Size: 32
Address offset: 004h
Read/write access: R
The REG_RX_DATA is used to receive message from NP or AP.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:8 |
RX0_DATA |
R |
0x0 |
Rx data automatically maps data from tx0_data of CPU0 |
7:0 |
RX1_DATA |
R |
0x0 |
Rx data automatically maps data from tx1_data of CPU1 |
REG_IPC_ISR
Name: Interrupt Status Register
Size: 32
Address offset: 008h
Read/write access: R/W
This register is used to record Tx empty and Rx full status.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ISR_RX0_FULL_STATUS7 |
R/W |
0x0 |
Rx channel 7 full interrupt status of CPU3. The corresponding Rx full status bit will be set by CPU0's Tx data register (tx0_data) channel 7. It will be cleared by software writing 1. |
30 |
ISR_RX0_FULL_STATUS6 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
29 |
ISR_RX0_FULL_STATUS5 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
28 |
ISR_RX0_FULL_STATUS4 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
27 |
ISR_RX0_FULL_STATUS3 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
26 |
ISR_RX0_FULL_STATUS2 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
25 |
ISR_RX0_FULL_STATUS1 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
24 |
ISR_RX0_FULL_STATUS0 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status7. |
23 |
ISR_RX1_FULL_STATUS7 |
R/W |
0x0 |
Rx channel 7 full interrupt status of CPU3. The corresponding Rx full status bit will be set by CPU1's Tx data register (tx1_data) channel 7. It will be cleared by software writing 1. |
22 |
ISR_RX1_FULL_STATUS6 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
21 |
ISR_RX1_FULL_STATUS5 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
20 |
ISR_RX1_FULL_STATUS4 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
19 |
ISR_RX1_FULL_STATUS3 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
18 |
ISR_RX1_FULL_STATUS2 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
17 |
ISR_RX1_FULL_STATUS1 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
16 |
ISR_RX1_FULL_STATUS0 |
R/W |
0x0 |
Refer to the description of the isr_rx1_full_status7. |
15 |
ISR_TX0_EMPTY_STATUS7 |
R/W |
0x0 |
Tx channel 7 empty interrupt status of CPU3 transmit to CPU0. If the corresponding Rx full status bit in REG_ISR_CPU0 (eg.isr_rx0_full_status7) is cleared, the corresponding Tx empty status bit will be set automatically. It will be cleared by software writing 1. |
14 |
ISR_TX0_EMPTY_STATUS6 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
13 |
ISR_TX0_EMPTY_STATUS5 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
12 |
ISR_TX0_EMPTY_STATUS4 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
11 |
ISR_TX0_EMPTY_STATUS3 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
10 |
ISR_TX0_EMPTY_STATUS2 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
9 |
ISR_TX0_EMPTY_STATUS1 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
8 |
ISR_TX0_EMPTY_STATUS0 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status7. |
7 |
ISR_TX1_EMPTY_STATUS7 |
R/W |
0x0 |
Tx channel 7 empty interrupt status of CPU3 transmit to CPU1. If the corresponding Rx full status bit in REG_ISR_CPU1 (eg.isr_rx1_full_status7) is cleared, the corresponding Tx empty status bit will be set automatically. It will be cleared by software writing 1. |
6 |
ISR_TX1_EMPTY_STATUS6 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
5 |
ISR_TX1_EMPTY_STATUS5 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
4 |
ISR_TX1_EMPTY_STATUS4 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
3 |
ISR_TX1_EMPTY_STATUS3 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
2 |
ISR_TX1_EMPTY_STATUS2 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
1 |
ISR_TX1_EMPTY_STATUS1 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
0 |
ISR_TX1_EMPTY_STATUS0 |
R/W |
0x0 |
Refer to the description of the isr_tx1_empty_status7. |
REG_IPC_IMR
Name: Interrupt Mask Register
Size: 32
Address offset: 00Ch
Read/write access: R/W
These bits mask their corresponding interrupt status bits.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:24 |
IMR_RX0_FULL_MASK |
R/W |
0x0 |
|
23:16 |
IMR_RX1_FULL_MASK |
R/W |
0x0 |
|
15:8 |
IMR_TX0_EMPTY_MASK |
R/W |
0x0 |
|
7:0 |
IMR_TX1_EMPTY_MASK |
R/W |
0x0 |
|
REG_IPC_ICR
Name: Clear Tx Register
Size: 32
Address offset: 010h
Read/write access: R/W
This register can ensure that the software can manually clear the Tx register in an emergency.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15 |
ICR_TX0_DATA_CLEAR7 |
R/W |
0x0 |
|
14 |
ICR_TX0_DATA_CLEAR6 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
13 |
ICR_TX0_DATA_CLEAR5 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
12 |
ICR_TX0_DATA_CLEAR4 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
11 |
ICR_TX0_DATA_CLEAR3 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
10 |
ICR_TX0_DATA_CLEAR2 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
9 |
ICR_TX0_DATA_CLEAR1 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
8 |
ICR_TX0_DATA_CLEAR0 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear7. |
7 |
ICR_TX1_DATA_CLEAR7 |
R/W |
0x0 |
|
6 |
ICR_TX1_DATA_CLEAR6 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
5 |
ICR_TX1_DATA_CLEAR5 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
4 |
ICR_TX1_DATA_CLEAR4 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
3 |
ICR_TX1_DATA_CLEAR3 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
2 |
ICR_TX1_DATA_CLEAR2 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
1 |
ICR_TX1_DATA_CLEAR1 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
0 |
ICR_TX1_DATA_CLEAR0 |
R/W |
0x0 |
Refer to the description of the icr_tx1_data_clear7. |
Base Address:
IPC0_REG : 0x40815000
IPC1_REG : 0x40815080
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
Take LP's IPC as an example to describe the function of IPC's internal registers.The REG_TX_DATA is used to transmit message from LP to NP or AP. (The logic cannot be generated automatically) |
|
004h |
R/W |
This register is used to record Tx empty |
|
008h |
R/W |
||
00Ch |
R/W |
This register can ensure that the software can manually clear the Tx register in an emergency. |
|
020h |
R |
||
024h |
R |
||
028h |
R |
||
02Ch |
R |
||
030h |
R |
||
034h |
R |
||
038h |
R/W |
REG_IPC_DATA
Name: Tx_Rx Register
Size: 32
Address offset: 000h
Read/write access: R/W
Take LP's IPC as an example to describe the function of IPC's internal registers.The REG_TX_DATA is
used to transmit message from LP to NP or AP.
(The logic cannot be generated automatically)
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
TX0_DATA |
R/W |
0x0 |
After preparing descriptor, data and corresponding memory,
If the corresponding Rx full status bit in REG_ISR_CPU0 (eg.isr_rx0_full_status6) is cleared, the corresponding bit in tx0_data will be cleaned automatically. |
15:0 |
RX0_DATA |
R |
0x0 |
Rx data automatically maps data from tx0_data of CPU0 |
REG_IPC_ISR
Name: Interrupt Empty Full Status Register
Size: 32
Address offset: 004h
Read/write access: R/W
This register is used to record Tx empty
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ISR_TX0_EMPTY_STATUS15 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
30 |
ISR_TX0_EMPTY_STATUS14 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
29 |
ISR_TX0_EMPTY_STATUS13 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
28 |
ISR_TX0_EMPTY_STATUS12 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
27 |
ISR_TX0_EMPTY_STATUS11 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
26 |
ISR_TX0_EMPTY_STATUS10 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
25 |
ISR_TX0_EMPTY_STATUS9 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
24 |
ISR_TX0_EMPTY_STATUS8 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
23 |
ISR_TX0_EMPTY_STATUS7 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
22 |
ISR_TX0_EMPTY_STATUS6 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
21 |
ISR_TX0_EMPTY_STATUS5 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
20 |
ISR_TX0_EMPTY_STATUS4 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
19 |
ISR_TX0_EMPTY_STATUS3 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
18 |
ISR_TX0_EMPTY_STATUS2 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
17 |
ISR_TX0_EMPTY_STATUS1 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_status0 |
16 |
ISR_TX0_EMPTY_STATUS0 |
R/W |
0x0 |
Tx channel 0 empty interrupt status of CPU1 transmit to CPU0. If the corresponding Rx full status bit in REG_ISR_CPU0 (eg.isr_rx0_full_status0) is cleared, the corresponding Tx empty status bit will be set automatically. It will be cleared by software writing 1. |
15 |
ISR_RX0_FULL_STATUS15 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
14 |
ISR_RX0_FULL_STATUS14 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
13 |
ISR_RX0_FULL_STATUS13 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
12 |
ISR_RX0_FULL_STATUS12 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
11 |
ISR_RX0_FULL_STATUS11 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
10 |
ISR_RX0_FULL_STATUS10 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
9 |
ISR_RX0_FULL_STATUS9 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
8 |
ISR_RX0_FULL_STATUS8 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
7 |
ISR_RX0_FULL_STATUS7 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
6 |
ISR_RX0_FULL_STATUS6 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
5 |
ISR_RX0_FULL_STATUS5 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
4 |
ISR_RX0_FULL_STATUS4 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
3 |
ISR_RX0_FULL_STATUS3 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
2 |
ISR_RX0_FULL_STATUS2 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
1 |
ISR_RX0_FULL_STATUS1 |
R/W |
0x0 |
Refer to the description of the isr_rx0_full_status0. |
0 |
ISR_RX0_FULL_STATUS0 |
R/W |
0x0 |
Rx channel 0 full interrupt status of CPU1. The corresponding Rx full status bit will be set by CPU0's Tx data register (tx0_data) channel 0. It will be cleared by software writing 1. |
REG_IPC_IMR
Name: Interrupt Empty Full Mask Register
Size: 32
Address offset: 008h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
IMR_TX0_EMPTY_MASK |
R/W |
0x0 |
|
15:0 |
IMR_RX0_FULL_MASK |
R/W |
0x0 |
|
REG_IPC_ICR
Name: Clear Tx Register
Size: 32
Address offset: 00Ch
Read/write access: R/W
This register can ensure that the software can manually clear the Tx register in an emergency.
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ICR_TX0_DATA_CLEAR15 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
30 |
ICR_TX0_DATA_CLEAR14 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
29 |
ICR_TX0_DATA_CLEAR13 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
28 |
ICR_TX0_DATA_CLEAR12 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
27 |
ICR_TX0_DATA_CLEAR11 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
26 |
ICR_TX0_DATA_CLEAR10 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
25 |
ICR_TX0_DATA_CLEAR9 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
24 |
ICR_TX0_DATA_CLEAR8 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
23 |
ICR_TX0_DATA_CLEAR7 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
22 |
ICR_TX0_DATA_CLEAR6 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
21 |
ICR_TX0_DATA_CLEAR5 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
20 |
ICR_TX0_DATA_CLEAR4 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
19 |
ICR_TX0_DATA_CLEAR3 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
18 |
ICR_TX0_DATA_CLEAR2 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
17 |
ICR_TX0_DATA_CLEAR1 |
R/W |
0x0 |
Refer to the description of the icr_tx0_data_clear0. |
16 |
ICR_TX0_DATA_CLEAR0 |
R/W |
0x0 |
|
15:0 |
RSVD0 |
R/W |
0x0 |
REG_IPC_SEM_0
Size: 32
Address offset: 020h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_0_DATA |
R |
0x0 |
It is used to indicate whether this semaphore is occupied. 0: Not occupied; 1: Occupied. |
REG_IPC_SEM_1
Size: 32
Address offset: 024h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_1_DATA |
R |
0x0 |
It is used to indicate whether this semaphore is occupied. 0: Not occupied; 1: Occupied. |
REG_IPC_SEM_CPUID0
Size: 32
Address offset: 028h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID0_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_SEM_CPUID1
Size: 32
Address offset: 02Ch
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID1_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_SEM_CPUID2
Size: 32
Address offset: 030h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID2_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_SEM_CPUID3
Size: 32
Address offset: 034h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID3_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_DUMMY
Size: 32
Address offset: 038h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:0 |
DUMMY |
R/W |
0x0 |
Dummy reg |
Base Address:
IPC0_REG : 0x40804000
IPC1_REG : 0x40805000
Name |
Address offset |
Access |
Description |
|---|---|---|---|
000h |
R/W |
||
004h |
R/W |
||
008h |
R/W |
||
00Ch |
R/W |
||
010h |
R/W |
||
014h |
R/W |
||
018h |
R/W |
||
01Ch |
R/W |
||
020h |
R/W |
||
024h |
R/W |
||
028h |
R/W |
||
02Ch |
R/W |
||
030h |
R/W |
||
034h |
R/W |
||
038h |
R/W |
||
03Ch |
R/W |
||
040h |
R/W |
||
044h |
R/W |
||
048h |
R/W |
||
04Ch |
R/W |
||
050h |
R |
||
054h |
R |
||
058h |
R/W |
||
05Ch |
R/W |
||
060h |
R/W |
||
070h |
R |
||
074h |
R |
||
078h |
R |
||
07Ch |
R |
||
080h |
R |
||
084h |
R |
||
088h |
R/W |
REG_IPC_TX_DATA_CH0
Size: 32
Address offset: 000h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH0_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH1
Size: 32
Address offset: 004h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH1_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH2
Size: 32
Address offset: 008h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH2_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH3
Size: 32
Address offset: 00Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH3_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH4
Size: 32
Address offset: 010h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH4_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH5
Size: 32
Address offset: 014h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH5_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH6
Size: 32
Address offset: 018h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH6_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH7
Size: 32
Address offset: 01Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH7_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH8
Size: 32
Address offset: 020h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH8_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH9
Size: 32
Address offset: 024h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH9_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH10
Size: 32
Address offset: 028h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH10_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH11
Size: 32
Address offset: 02Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH11_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH12
Size: 32
Address offset: 030h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH12_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH13
Size: 32
Address offset: 034h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH13_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH14
Size: 32
Address offset: 038h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH14_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_DATA_CH15
Size: 32
Address offset: 03Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
TX0_CH15_DATA |
R/W |
0x0 |
Different data have their own dedicated channels for writing data, for example, IPC_TX_DATA_CH0 is the position for writing data to channel 0. |
REG_IPC_TX_CH_ST
Size: 32
Address offset: 040h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ICR_TX0_CH_ST15 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
30 |
ICR_TX0_CH_ST14 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
29 |
ICR_TX0_CH_ST13 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
28 |
ICR_TX0_CH_ST12 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
27 |
ICR_TX0_CH_ST11 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
26 |
ICR_TX0_CH_ST10 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
25 |
ICR_TX0_CH_ST9 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
24 |
ICR_TX0_CH_ST8 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
23 |
ICR_TX0_CH_ST7 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
22 |
ICR_TX0_CH_ST6 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
21 |
ICR_TX0_CH_ST5 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
20 |
ICR_TX0_CH_ST4 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
19 |
ICR_TX0_CH_ST3 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
18 |
ICR_TX0_CH_ST2 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
17 |
ICR_TX0_CH_ST1 |
R/W |
0x0 |
Refer to the description of the icr_tx0_ch_st0. |
16 |
ICR_TX0_CH_ST0 |
R/W |
0x0 |
|
15:0 |
TX0_CH_ST |
R/W |
0x0 |
Each bit represents the state of a channel.For example,when sw write all ch0 data, sw will pull 1. When cpu1 receives all ch0 data,it will be automatically cleared.
|
REG_IPC_ISR
Size: 32
Address offset: 044h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
ISR_TX0_EMPTY_INT15 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
30 |
ISR_TX0_EMPTY_INT14 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
29 |
ISR_TX0_EMPTY_INT13 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
28 |
ISR_TX0_EMPTY_INT12 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
27 |
ISR_TX0_EMPTY_INT11 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
26 |
ISR_TX0_EMPTY_INT10 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
25 |
ISR_TX0_EMPTY_INT9 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
24 |
ISR_TX0_EMPTY_INT8 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
23 |
ISR_TX0_EMPTY_INT7 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
22 |
ISR_TX0_EMPTY_INT6 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
21 |
ISR_TX0_EMPTY_INT5 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
20 |
ISR_TX0_EMPTY_INT4 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
19 |
ISR_TX0_EMPTY_INT3 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
18 |
ISR_TX0_EMPTY_INT2 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
17 |
ISR_TX0_EMPTY_INT1 |
R/W |
0x0 |
Refer to the description of the isr_tx0_empty_int0 |
16 |
ISR_TX0_EMPTY_INT0 |
R/W |
0x0 |
When all the data in ch0 is read by cpu1,it will be set to 1 |
15 |
ISR_RX0_INT15 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
14 |
ISR_RX0_INT14 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
13 |
ISR_RX0_INT13 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
12 |
ISR_RX0_INT12 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
11 |
ISR_RX0_INT11 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
10 |
ISR_RX0_INT10 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
9 |
ISR_RX0_INT9 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
8 |
ISR_RX0_INT8 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
7 |
ISR_RX0_INT7 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
6 |
ISR_RX0_INT6 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
5 |
ISR_RX0_INT5 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
4 |
ISR_RX0_INT4 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
3 |
ISR_RX0_INT3 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
2 |
ISR_RX0_INT2 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
1 |
ISR_RX0_INT1 |
R/W |
0x0 |
Refer to the description of the isr_rx0_int0 |
0 |
ISR_RX0_INT0 |
R/W |
0x0 |
Fifo next pop chn0 data.when all the data in ch0 is read,it will be cleard |
REG_IPC_IMR
Size: 32
Address offset: 048h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
IMR_TX0_EMPTY |
R/W |
0x0 |
|
15:0 |
IMR_RX0 |
R/W |
0x0 |
Just useful when ipc_work_mode is 1.
|
REG_IPC_TX_ST
Size: 32
Address offset: 04Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31 |
RSVD |
R |
- |
Reserved |
30:12 |
TX0_FIFO_TIMEOUT_TH |
R/W |
19'h9c40 |
If the number of data in the FIFO is below the threshold for a period longer than that set by this register, an interrupt will be triggered. |
11:7 |
TX0_FIFO_AF_LEVEL |
R/W |
5'h1 |
User define the full level for afifo.Interrupt will arise when the fifo data number reaches (FIFO_DEPTH - tx_fifio_af_level). The vaule must >=1. |
6 |
TX0_FIFO_CLR |
R/W |
0x0 |
Clear the FIFO data |
5 |
TX0_FIFO_WFULL |
R |
0x0 |
Fifo full state |
4:0 |
TX0_FIFO_WSPACE |
R |
0x0 |
The remaining writable space for the current fifo |
REG_IPC_RX_ST
Size: 32
Address offset: 050h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:1 |
RSVD |
R |
- |
Reserved |
0 |
RX0_FIFO_EMPTY |
R |
1'b1 |
When fifo is empty, rx0 _ch,rx0_data is invalid |
REG_IPC_RX_DATA
Size: 32
Address offset: 054h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
RX0_DATA |
R |
0x0 |
Fifo rdata |
REG_IPC_SW
Size: 32
Address offset: 058h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:0 |
RSVD_SW1 |
R/W |
0x0 |
Rsvd for sw |
REG_IPC_MODE
Size: 32
Address offset: 05Ch
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:1 |
RSVD |
R |
- |
Reserved |
0 |
IPC_WORK_MODE |
R/W |
0x0 |
|
REG_IPC_TIM
Size: 32
Address offset: 060h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:9 |
RSVD |
R |
- |
Reserved |
8 |
APB_TIMEOUT_FLAG |
R/W |
0x0 |
If apb_rdy does not reply within a certain period of time, it will be pulled. |
7:0 |
APB_TIMEOUT_TH |
R/W |
8'h3f |
If apb_rdy does not reply within a certain period of time, it will automatically reply. The counting clock : ipc clk |
REG_IPC_SEM_0
Size: 32
Address offset: 070h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_0_DATA |
R |
0x0 |
It is used to indicate whether this semaphore is occupied. 0: Not occupied; 1: Occupied. |
REG_IPC_SEM_1
Size: 32
Address offset: 074h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_1_DATA |
R |
0x0 |
It is used to indicate whether this semaphore is occupied. 0: Not occupied; 1: Occupied. |
REG_IPC_SEM_CPUID0
Size: 32
Address offset: 078h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID0_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_SEM_CPUID1
Size: 32
Address offset: 07Ch
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID1_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_SEM_CPUID2
Size: 32
Address offset: 080h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID2_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_SEM_CPUID3
Size: 32
Address offset: 084h
Read/write access: R
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:0 |
SEM_CPUID3_DATA |
R |
0x0 |
It is used to indicate cpuid of this semaphore . |
REG_IPC_DUMMY
Size: 32
Address offset: 088h
Read/write access: R/W
Bit |
Symbol |
Access |
INI |
Description |
|---|---|---|---|---|
31:16 |
RSVD |
R |
- |
Reserved |
15:0 |
DUMMY |
R/W |
0x0 |
Dummy reg |