📄 d12ci.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 + -