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

📄 d12ci.c

📁 vC++读写HID_USB设备,包含hid_usb的固件程序和上位机程序
💻 C
字号:
#include "D12HAL.h"
#include "d12ci.h"
#include "mytype.h"
#include "uart0.h"

/************************************************************
** 函数名称: uint16 readchipid(void)
** 功能描述: 读取芯片ID
** 输   入: 无
** 输   出: 芯片的ID号
************************************************************/
uint16 readchipid(void)
{
	uint8 idata i;
	uint16 idata chipid;
	
	WriteUsbCommand(0xfd);				//发送读PDIUSBD12芯片ID号命令			
	i = ReadUsbData();				//读取ID号低字节
	chipid = ReadUsbData();			//读取ID号高位字节
	chipid = (chipid << 8) + i;		//组成16位的PDIUSBD12芯片ID号
#ifdef debug
	PutString0("Read D12's ChipID. ID is: 0x",200);
	PutUint320((uint32)chipid,16);
	if(0 == chipid)
		PutString0("0000. Error!",12);
	NextLine0();
#endif
	return chipid;
}

	/*****************************************
		与CPU 无关, 与 USB相关的函数
	*****************************************/


/************************************************************
** 函数名称: void D12_SetAddressEnable(uint8 bAddress,uint8 bEnable)
** 功能描述: 设置地址/使能
** 输   入: uint8 bAddress:  地址
	     	 uint8 bEnable :  0 --- 禁止
	     		     		  1 --- 使能
** 输   出: 无
************************************************************/
void D12_SetAddressEnable(uint8 idata bAddress, uint8 idata bEnable)
{
	WriteUsbCommand(0xD0);				//输出设置地址/使能指令
	if(bEnable)
	{
		bAddress |= 0x80;		//bit7置1,使能
	#ifdef debug
		PutString0("Set Address. Address : ",200);
		if(bAddress != 0x80)
			PutUint320((uint32)(bAddress & 0x7f),10);
		else
			PutChar0('0');
		NextLine0();
	#endif
	}
	WriteUsbData(bAddress);			//输出设置值
}


/************************************************************
** 函数名称: void D12_SetEndpointEnable(uint8 bEnable)
** 功能描述: 设置端点使能
** 输   入: uint8 bEnable :  0 --- 禁止
	     		     		  1 --- 允许
** 输   出: 无
************************************************************/
void D12_SetEndpointEnable(uint8 idata bEnable)
{
	WriteUsbCommand(0xD8);				//输出设置端点使能指令
	if(bEnable)
	{
		WriteUsbData(0x01);			//设置端点允许
	#ifdef debug
		PutString0("Set Endpoint enable.\r\n",200);
	#endif
	}
	else
	{
		WriteUsbData(0x00);			//设置端点禁止
	#ifdef debug
		PutString0("Set Endpoint disable.\r\n",200);
	#endif
	}
}

/************************************************************
** 函数名称: void D12_SetMode(uint8 bConfig,uint8 bClkDiv)
** 功能描述: 模式设置
** 输   入: uint8 bConfig:  配置字节信息
	     	 uint8 bClkDiv:  分频系数
** 输   出: 无
************************************************************/
void D12_SetMode(uint8 idata bConfig,uint8 idata bClkDiv)
{
	WriteUsbCommand(0xF3);			//输出设置模式指令
	WriteUsbData(bConfig);			//输出配置字节信息
	WriteUsbData(bClkDiv);			//输出时钟分频因数字节
}

/************************************************************
** 函数名称: void D12_SetDMA(uint8 bMode)
** 功能描述: 设置DMA工作方式设置
** 输   入: uint8 bMode: 	设置值
** 输   出: 无
************************************************************/
void D12_SetDMA(uint8 idata bMode)
{
	WriteUsbCommand(0xFB);				//设置DMA工作方命令
	WriteUsbData(bMode);			//输出设置值
}

/************************************************************
** 函数名称: uint16 D12_ReadInterruptRegister(void)
** 功能描述: 读取中断寄存器值
** 输   入: 无
** 输   出: 中断寄存器值
************************************************************/
uint16 D12_ReadInterruptRegister(void)
{
	uint8 idata b1;
	uint16 idata j;

	WriteUsbCommand(0xF4);				//读取中断寄存器命令
	b1 = ReadUsbData();				//读取低8位字节
	j = ReadUsbData();				//读取高8位字节

	j = j << 8;			
	j += b1;					//组合为16位
#ifdef debug
	PutString0("Interrupt Register : 0x",200);
	PutUint320((uint32)j,16);	//以16进制显示中断寄存器
	NextLine0();
#endif
	return j;
}

/************************************************************
** 函数名称: uint8 D12_SelectEndpoint(uint8 bEndp)
** 功能描述: 端点选择,将内部指针初始化到选择的缓冲区起始位置
** 输   入: uint8 bEndp:   端点索引号,取值0 ~ 5
** 输   出: 读出的字节
************************************************************/
uint8 D12_SelectEndpoint(uint8 idata bEndp)
{
	uint8 idata c;

	WriteUsbCommand(bEndp);			//端点选择
	c = ReadUsbData();				//读出一个字节

	return c;
}

/************************************************************
** 函数名称: uint8 D12_ReadEndpointStatus(uint8 bEndp)
** 功能描述: 读取端点状态
** 输   入: uint8 bEndp:   端点索引号,取值0 ~ 5
** 输   出: 端点状态
************************************************************/
uint8 D12_ReadEndpointStatus(uint8 idata bEndp)
{
	uint8 c;

	WriteUsbCommand(0x80 + bEndp);		//读取端点状态命令
	c = ReadUsbData();				//读取端点状态
	return c;
}

/************************************************************
** 函数名称: uint8 D12_ReadLastTransactionStatus(uint8 bEndp)
** 功能描述: 读取最后处理状态寄存器

⌨️ 快捷键说明

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