⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drvpdma.c

📁 cortex-m0 LCD1602程序
💻 C
📖 第 1 页 / 共 4 页
字号:
			{
			  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 + -