你好,在C6655手册中提到EDMA有三种触发方式,分别为event-triggered,mannualy-trigggered,chained-triggered。
但是在TI的测试驱动库edma.c的驱动接口函数中没有Chained-triggered驱动方式的配置:
/**
* \brief Start EDMA transfer on the specified channel.
*
* There are multiple ways to trigger an EDMA3 transfer. The triggering mode
* option allows choosing from the available triggering modes: Event,
* Manual or QDMA.
*
* In event triggered, a peripheral or an externally generated event triggers
* the transfer. This API clears the Event and Event Miss Register and then
* enables the DMA channel by writing to the EESR.
*
* In manual triggered mode, CPU manually triggers a transfer by writing a 1
* in the Event Set Register ESR. This API writes to the ESR to start the
* transfer.
*
* In QDMA triggered mode, a QDMA transfer is triggered when a CPU (or other
* EDMA3 programmer) writes to the trigger word of the QDMA channel PaRAM set
* (auto-triggered) or when the EDMA3CC performs a link update on a PaRAM set
* that has been mapped to a QDMA channel (link triggered). This API enables
* the QDMA channel by writing to the QEESR register.
*
* \param baseAdd Memory address of the EDMA instance used.\n
*
* \param chNum Channel being used to enable transfer.\n
*
* \param trigMode Mode of triggering start of transfer (Manual,
* QDMA or Event).\n
*
* trigMode can have values:
* EDMA3_TRIG_MODE_MANUAL\n
* EDMA3_TRIG_MODE_QDMA\n
* EDMA3_TRIG_MODE_EVENT\n
*
* \return retVal TRUE or FALSE depending on the param passed.\n
*
*/
unsigned int EDMA3EnableTransfer(unsigned int baseAdd,
unsigned int chNum,
unsigned int trigMode)
{
unsigned int retVal = FALSE;
switch (trigMode)
{
case EDMA3_TRIG_MODE_MANUAL :
if (chNum < SOC_EDMA3_NUM_DMACH)
{
EDMA3SetEvt(baseAdd, chNum);
retVal = TRUE;
}
break;
case EDMA3_TRIG_MODE_QDMA :
if (chNum < SOC_EDMA3_NUM_QDMACH)
{
EDMA3EnableQdmaEvt(baseAdd, chNum);
retVal = TRUE;
}
break;
case EDMA3_TRIG_MODE_EVENT :
if (chNum < SOC_EDMA3_NUM_DMACH)
{
/*clear SECR & EMCR to clean any previous NULL request */
EDMA3ClrMissEvt(baseAdd, chNum);
/* Set EESR to enable event */
EDMA3EnableDmaEvt(baseAdd, chNum);
retVal = TRUE;
}
break;
default :
retVal = FALSE;
break;
}
return retVal;
}
可以看到上面只有EDMA的Manully-triggered和Event-triggered,第三种是QDMA的EVENT-QDMA触发方式,并没有EDMA的Chained-triggered触发方式,请问是什么原因?
如何使用Chained-triggered触发方式实现每一次传输完成后实现EDMA的link-transfer?(不是QDMA的link-tranfer)