mirror of
https://gitee.com/Lamdonn/varch.git
synced 2026-04-30 19:09:14 +08:00
3.0 KiB
3.0 KiB
ICOM module documentation
Overview
ICOM (Internal Communication) is a simple C language internal communication module, which is used to realize efficient bidirectional data communication in embedded systems. It provides a communication mechanism based on shared memory to support multi-channel data transmission and state management.
Core features
- Bidirectional communication : Support for separate send and receive channels
- State management : Provides four channel states: initialized, idle, busy, and error
- Data length control : Supports dynamic data length setting and validation
- Live detection : Automatically detects the online state of the communication peer
- Cache control : Supports cache invalidation and writeback operations
- Multi-channel support : Multiple send and receive channels can be configured
Architectural Design
Communication protocol format
| offset | field | size | description |
|---|---|---|---|
| 0 | Flag | 4 | Channel status flag |
| 4 | Tcnt | 4 | Send channel count |
| 8 | Rcnt | 4 | Receive channel count |
| 12 | Dlen | 4 | data length |
| 16 | Data | N | actual data |
State Machine design
- INIT : The initial state
- BUSY : Busy (in data transfer)
- IDLE : Idle state (transferable)
- ERROR : An error state
API explained in detail
Initialization functions
int icom_init(ICOM *icom);
Initialize the ICOM module and configure the sending and receiving channels.
Task handlers
int icom_task(ICOM *icom);
Handle the periodic tasks of the ICOM module, including online state detection and data reception processing.
Data sending function
int icom_transmit(ICOM *icom, uint16_t channel, uint8_t *data, uint32_t length);
Send data over the specified channel.
Data receiving functions
int icom_receive(ICOM *icom, uint16_t channel, uint8_t *data, uint32_t *length);
Handle the periodic tasks of the ICOM module, including online state detection and data reception processing. Receives data from the specified channel.
Online presence checks
int icom_txchannel_online(ICOM *icom, uint16_t channel, uint8_t *online);
int icom_rxchannel_online(ICOM *icom, uint16_t channel, uint8_t *online);
Check the online status of the send/receive channel.
Instructions
- Initialize the ICOM struct and configure the channel
- Call icom_init() for initialization
- Periodic calls to icom_task() for state management and data reception processing
- Use icom_transmit() to send data
- Use icom_receive() to receive data
Advanced features
- Manual receive mode: You can manually check the receive status without using callbacks
- Cache control: Cache control via 'inv' and 'wbinv' callbacks
- Private data: Each channel maintains 4 private data words for extended functionality
Use cases
- Inter-Processor Communication (IPC)
- Data exchange between multiple cores
- Modular system component communication
- Embedded systems that require shared memory communication