📄 drvpdma.c
字号:
{
tPDMA->ISR.TABORT_IF=1;
if (g_pfnPDMACallback[i32Channel][0] != 0)
(*g_pfnPDMACallback[i32Channel][0])(0); /* Target Abort callback funtion */
}
else if(tPDMA->ISR.BLKD_IF==1)
{ /* Transfer Done INT and clear */
tPDMA->ISR.BLKD_IF=1;
if (g_pfnPDMACallback[i32Channel][1] != 0)
(*g_pfnPDMACallback[i32Channel][1])(0);
}
}
}
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_InstallCallBack */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* E_DRVPDMA_INT_ENABLE -[in] Intterrupt source :eDRVPDMA_TABORT/eDRVPDMA_BLKD */
/* pfncallback -[in] The callback function pointer */
/* Returns: */
/* E_SUCCESS Success */
/* E_DRVPDMA_FALSE_INPUT invalid Argument */
/* Description: */
/* The function is used to install call back function for Channelx & Interrupt source */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvPDMA_InstallCallBack(
E_DRVPDMA_CHANNEL_INDEX eChannel,
E_DRVPDMA_INT_ENABLE eIntSource,
PFN_DRVPDMA_CALLBACK pfncallback
)
{
if (eChannel > MAX_CHANNEL_NUM ) /* Check Channel is valid */
return E_DRVPDMA_ERR_PORT_INVALID;
g_pfnPDMACallback[eChannel][eIntSource>>1] = pfncallback; /* Install Callback funtion */
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_GetCurrentSourceAddr */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* Returns: */
/* Current Source Address from channelx */
/* Description: */
/* The function is used to get current source address from channelx */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvPDMA_GetCurrentSourceAddr(E_DRVPDMA_CHANNEL_INDEX eChannel)
{
volatile uint32_t u32SFR;
u32SFR = (uint32_t)&PDMA0->CSAR + eChannel * CHANNEL_OFFSET;
return inpw(u32SFR);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_GetCurrentDestAddr */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* Returns: */
/* Current destination address form channelx */
/* Description: */
/* The function is used to get current destination address from channelx */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvPDMA_GetCurrentDestAddr(E_DRVPDMA_CHANNEL_INDEX eChannel)
{
volatile uint32_t u32SFR;
u32SFR = (uint32_t)&PDMA0->CDAR + eChannel * CHANNEL_OFFSET;
return inpw(u32SFR);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_GetRemainTransferCount */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* Returns: */
/* Current remained byte count. */
/* Description: */
/* The function is used to get current remained byte count of channelx PDMA */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvPDMA_GetRemainTransferCount(E_DRVPDMA_CHANNEL_INDEX eChannel)
{
volatile uint32_t u32SFR;
u32SFR = (uint32_t)&PDMA0->CBCR + eChannel * CHANNEL_OFFSET;
return inpw(u32SFR);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_SetSourceAddress */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* u32SourceAddr -[in] Source address */
/* Returns: */
/* E_SUCCESS Success */
/* E_DRVPDMA_ERR_PORT_INVALID Invalid port number */
/* Description: */
/* The function is used to set source address for channelx */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvPDMA_SetSourceAddress(E_DRVPDMA_CHANNEL_INDEX eChannel,uint32_t u32SourceAddr)
{
PDMA_T * tPDMA;
if (eChannel > MAX_CHANNEL_NUM ) /* Check Channel is valid */
return E_DRVPDMA_ERR_PORT_INVALID;
tPDMA = (PDMA_T *)((uint32_t)PDMA0 + eChannel * CHANNEL_OFFSET);
tPDMA->SAR = u32SourceAddr; /* Set PDMA Channelx Source Address */
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_GetSourceAddress */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* Returns: */
/* Source address for channelx. */
/* */
/* Description: */
/* The function is used to get source address for channelx */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvPDMA_GetSourceAddress(E_DRVPDMA_CHANNEL_INDEX eChannel)
{
PDMA_T * tPDMA;
/* Check Channel is valid */
if (eChannel > MAX_CHANNEL_NUM )
return E_DRVPDMA_ERR_PORT_INVALID;
tPDMA = (PDMA_T *)((uint32_t)PDMA0 + eChannel * CHANNEL_OFFSET);
return (uint32_t)(tPDMA->SAR); /* Get PDMA Channelx Source Address */
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_SetDestAddress */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* u32DestAddr -[in] Destination address */
/* Returns: */
/* E_SUCCESS Success */
/* E_DRVPDMA_ERR_PORT_INVALID Invalid port number */
/* Description: */
/* The function is used to set destination address for channelx */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvPDMA_SetDestAddress(E_DRVPDMA_CHANNEL_INDEX eChannel,uint32_t u32DestAddr)
{
PDMA_T * tPDMA;
if (eChannel > MAX_CHANNEL_NUM ) /* Check Channel is valid */
return E_DRVPDMA_ERR_PORT_INVALID;
tPDMA = (PDMA_T *)((uint32_t)PDMA0 + eChannel * CHANNEL_OFFSET);
tPDMA->DAR = u32DestAddr; /* Set PDMA Channelx Destination Address */
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_GetDestAddress */
/* */
/* Parameter: */
/* eChannel -[in] PDMA Source: eDRVPDMA_CHANNEL_0 ~ 8 */
/* Returns: */
/* Destination address for channelx. */
/* */
/* Description: */
/* The function is used to get destination address for channelx */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvPDMA_GetDestAddress(E_DRVPDMA_CHANNEL_INDEX eChannel)
{
PDMA_T * tPDMA;
/* Check Channel is valid */
if (eChannel > MAX_CHANNEL_NUM )
return E_DRVPDMA_ERR_PORT_INVALID;
tPDMA = (PDMA_T *)((uint32_t)PDMA0 + eChannel * CHANNEL_OFFSET);
return (uint32_t)(tPDMA->DAR); /* Get PDMA Channelx Destination Address */
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPDMA_GetVersion */
/* */
/* Parameter: */
/* None */
/* Returns: */
/* Version Number */
/* Description: */
/* The function is used to get DrvPDMA Version Number */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvPDMA_GetVersion(void)
{
return DRVPDMA_VERSION_NUM;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -