When configured with hardware packet transmission the receive interface can be enabled to transfer packets due to rising edges on a channel's corresponding RX_HW_TRIG[7:0] input. Each channel has a corresponding independent internal sent_cnt[15:0] counter. To enable hardware controlled packet transmission for a channel, software sets the channel's corresponding bit in the rx_hw_trig_en[7:0] field in the CPDMA_RX_Control2 register. Hardware packet transmission then operates as described below:
- The channel send_cnt[15:0] is cleared to zero when the channel HDP is zero (IDLE).
- Software writes the channel HDP to begin the packet chain operation.
- An asserted RX_HW_TRIG[7:0] input increments the associated channel sent_cnt[15:0] when the channel's HDP is non-zero.
- A single packet is transferred when send_cnt is greater than 0 and then the send_cnt is decremented.
- Go to IDLE (#1) on EOQ (which also zeroes the HDP), otherwise continue with packet transmission (#4).
Note:
- Each channel has an associate send_cnt[15:0]. the send_cnt[15:0] register will not overflow or underflow.
- The RX_HW_TRIG[7:0] inputs are asynchronous. They are synchronized and rising edge detected by the CPTS_RFTCLK. The pulse must be asserted high long enough for the high to be seen by the synchronizer, and asserted low long enough for the low to be seen by the synchronizer.
- A rising edge on the RX_HW_TRIG bit increments the count regardless of the status of any previous packet transfer when the head descriptor pointer is nonzero.