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

📄 adc.c

📁 周立功 开发包 ARM9
💻 C
📖 第 1 页 / 共 2 页
字号:
输出参数:
返    回: 
*******************************************************************************************/
PUBLIC BOOL WINAPI
DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
    switch ( dwReason ) 
	{
		case DLL_PROCESS_ATTACH:
			RETAILMSG(1, (TEXT("ADC : DLL_PROCESS_ATTACH\r\n")));
			DisableThreadLibraryCalls((HMODULE) hInstDll);
			break;

		case DLL_PROCESS_DETACH:
			RETAILMSG(1, (TEXT("ADC: DLL_PROCESS_DETACH\r\n")));
			break;
    }

    return (TRUE);
}


/*******************************************************************************************
函数名称: ADC_Close
描    述: 驱动程序关闭函数
输入参数: DWORD Handle:驱动程序引用事例句柄
输出参数: 无
返    回: FALSE: 失败    TRUE: 成功 
*******************************************************************************************/
BOOL ADC_Close(DWORD Handle)
{
	if (m_ADC_OpenCout > 0)
	{
		// 恢复 ADC 寄存器原来的设置值
		v_pADCregs->ADCCON = m_tmp_ADCCON;
		v_pADCregs->ADCTSC = m_tmp_ADCTSC; 
		v_pADCregs->ADCDLY = m_tmp_ADCDLY;
	}

	m_ADC_OpenCout = 0;								/* 打开计数器恢复为0 */

    return TRUE;
}   // ADC_Close



/*******************************************************************************************
函数名称: ADC_Deinit
描    述: 驱动程序卸载函数
输入参数: DWORD dwContext: 驱动程序句柄
输出参数: 无
返    回: FALSE: 失败    TRUE: 成功
*******************************************************************************************/
BOOL ADC_Deinit(DWORD dwContext)
{
	m_ADC_OpenCout = 0;										/* 打开计数器恢复为0 */

	if (v_pADCregs) 
		VirtualFree((PVOID) v_pADCregs, 0, MEM_RELEASE);	/* 释放申请的虚拟空间 */

    return TRUE;
}   // ADC_Deinit


/*******************************************************************************************
函数名称: ADC_Open
描    述: 打开驱动程序
输入参数: DWORD dwData     : 设备驱动程序句柄
          DWORD dwAccess   : 访问请求代码,是读和写的组合
          DWORD dwShareMode: 共享模式  
输出参数:
返    回: 驱动程序引用事例句柄
*******************************************************************************************/
DWORD ADC_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
	if (m_ADC_OpenCout > 0)
		return 0;										/* 本驱动只允许单访问 */

	m_ADC_OpenCout++;									/* 打开计数器计数 */

	// 初始化 ADC 寄存器 
	ADC_InitializeRegister(m_s3c2410_pclk);						

	// 获取 ADC 转换最大/小频率
	ADC_GetLimitFreqency(m_s3c2410_pclk, &m_ADC_MaxFreq, &m_ADC_MinFreq);

    return m_ADC_OpenCout;
}   // ADC_Open


/*******************************************************************************************
函数名称: ADC_IOControl
描    述: 驱动程序 I/O 请求
输入参数: 
输出参数:
返    回: 本驱动不支持该请求,返回 FALSE
*******************************************************************************************/
BOOL
ADC_IOControl(
    DWORD Handle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
	BOOL bErr = FALSE;  
	
	switch (dwIoControlCode)
	{
		case IOCTL_SET_ADC_CHANNEL:					          /* 设置ADC转换通道 */
			if ((nInBufSize > 0) && (pInBuf[0] <= ADC_CHANNEL_NUM))
			{
				v_pADCregs-> ADCCON &= ~(ADCCON_CHANNEL_MSK);
				v_pADCregs-> ADCCON |= (pInBuf[0] << 3);	  /* 写入通道号 */	
				bErr = TRUE;	
			}
		break;
		
		case IOCTL_SET_ADC_FREQUENCY:	                      /* pInBuf和pOutBuf都为DWORD型 */
			if ((nInBufSize > 0) && (nOutBufSize > 0))
			{
				/* 设置 ADC 转换频率(Hz) */
				*(DWORD *)pOutBuf = ADC_SetFreqency(m_s3c2410_pclk, *(DWORD *)pInBuf);
				*pBytesReturned = 1;
				bErr = TRUE;
			}
		break;
		
		case IOCTL_GET_ADC_CURFREQ:                           /* pOutBuf 为 DWORD */
			if (nOutBufSize > 0)
			{
				/* 取得 ADC 当前转换频率(Hz) */
				*(DWORD *)pOutBuf = ADC_GetCurFreqency(m_s3c2410_pclk);
				*pBytesReturned = 1;
				bErr = TRUE;
			}
		break;
		
		case IOCTL_SET_ADC_MAXFREQ:                           /* pOutBuf 为 DWORD */
			if (nOutBufSize > 0)
			{
				/* 取得 ADC 最高转换频率(Hz) */
				*(DWORD *)pOutBuf = m_ADC_MaxFreq;
				*pBytesReturned = 1;
				bErr = TRUE;
			}
		break;		
		
		case IOCTL_SET_ADC_MINFREQ:                           /* pOutBuf 为 DWORD */
			if (nOutBufSize > 0)
			{
				/* 取得 ADC 最低转换频率(Hz) */
				*(DWORD *)pOutBuf = m_ADC_MinFreq; 	
				*pBytesReturned = 1;
				bErr = TRUE;
			}
		break;			
					
		default:
		break;
	}
	
    return bErr;
}   // ADC_IOControl




/*******************************************************************************************
函数名称: ADC_Read
描    述: 读取当前通道的 ADC 转换值 
输入参数: DWORD Handle    : 驱动程序引用事例句柄
          LPVOID pBuffer  : 接收缓冲区
          DWORD dwNumBytes: 要读的字节数
输出参数: 无
返    回: 实际读到字节数
*******************************************************************************************/
DWORD ADC_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
	ushort *pReadBuffer;
	UINT32 i;

	if ((pBuffer == NULL) || (dwNumBytes == 0))
		return 0;

	pReadBuffer = MapPtrToProcess(pBuffer, GetCallerProcess());
	
	v_pADCregs->ADCCON |= ADCCON_EN_READSTART; 
	v_pADCregs->ADCDAT0;											/* 读启动转换 */

	for (i = 0; i < dwNumBytes; i++)
	{
		while(!(v_pADCregs->ADCCON & ADCCIN_CONVERT_END));			/* 等待 ADC 转换结束*/

		*pReadBuffer = v_pADCregs->ADCDAT0 & 0x3ff;
		pReadBuffer++;
	}

	return i;
}


/*******************************************************************************************
函数名称: ADC_Write
描    述: 写函数,本驱动不支持
输入参数: 
输出参数:
返    回:
*******************************************************************************************/
DWORD ADC_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{
	return 0;
}


/*******************************************************************************************
函数名称: ADC_Seek
描    述: 对设备的数据指针进行操作,本驱动不支持该函数
输入参数: 
输出参数:
返    回:
*******************************************************************************************/
DWORD ADC_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod)
{
	return 0;
}


/*******************************************************************************************
函数名称: ADC_PowerUp
描    述: 电源上电驱动处理函数
输入参数: 
输出参数:
返    回: 无
*******************************************************************************************/
void ADC_PowerUp(void)
{
	return;
}


/*******************************************************************************************
函数名称: ADC_PowerDown
描    述: 电源下电驱动处理函数
输入参数: 
输出参数:
返    回: 无
*******************************************************************************************/
void
ADC_PowerDown(void)
{
	return;
}
                         

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -