单片机端USB-API函数库说明
(1)USB_Ck_Start功能:初始化USB总线时钟。包括使能内部、初始化时钟器,以及设置USB时钟为48M,以便USB全速工作。此功能必须在调用USB_lnit函数或访问任何可变的XRAM高1024字节(USB时钟范围)之前调用。
说明:在调用USB_Clock_Start或USB_lnit函数之后不应该修改的特殊功能寄存器
1)不应该修改的USB特殊功能寄存器有:
USBOXCN、USBOADR和USBODAT。
2)不应该修改的其他特殊功能寄存器有:
CLKMUL、OSCN的5~7位、CLKSEL的4~6位,即用于使能内部振荡器、建立4倍频时钟为48MHz,以及将该时钟作为USB模块的时钟的特殊功能寄存器。为确保API的正常运行,它们不得被修改。API用户共享特殊功能寄存器:特殊功能寄存器CLKSEL用于系统时钟源和USB时钟源的选择。需要注意的是:在为获得所需系统时钟而对其位1~0置位时,要使用或(OR)指令,以免改变其6~4位(即USB时钟选择位)的值。特殊功能寄存器OSCICN用来控制内部振荡器。其IFCN位不会影响12MHz时钟倍频输入或USB时钟,用户可以根据对系统时钟的需要对IFCN[1:0]位进行修改。只是在修改IFCN[1:0]位时,应注意保护其5~7位不被改变。
(2)Block_Write功能:块写入。即通过USB将缓冲区中的数据传给主机。其最大可传数据块为4096字节。返回的数字是实际写入的字节数。除非错误条件发生,否则应与参数NumBytes完全相符。NumBytes的有效数值为1~4096。如果调用Block_Write,而NumBytes大于4096字节,返回值为零。如果NumBytes大于64字节,所传输得数据将被分成多个数据包,每个数据包64字节(除最后一个数据包外)。在将最后一个数据包复制到设备的USB发送缓冲区后,Block_Write函数返回。
(3)Block_Read功能:块读出,即通过USB将主机发来的数据读到单片机的缓冲区中。其最大可接收的数据块为64字节。返回时,无论全部缓冲区是否被Block_Read函数读取过,器件的USB接收缓冲区都将清空。从器件的USB接收缓冲区读取的最大字节数由NumBytes指定。实际读取的字节数(即复制到缓冲区的字节数)由函数返回。如果没有要读取的字节,返回零。通常,Block_Read函数是在接收一个数据包后被调用,由RX_COMPLETEUSBAPI中断指示。
当发送到SI_Write的缓冲区大于64字节,则通过一次SI_Write函数调用传送的数据,将需要多次调用Biock_Read函数来读取。
(4)Get_lnterrupt_Source功能:获取中断源,即返回一个表示USB-API中断源的8位数,同时清除USB-API待处理中断标志。Get_lnterrupt_Source函数应在用户中断服务程序开始时调用,以判定发生了哪些事件。
返回值如下:
功能:允许USBAPI中断。调用USB_lnt_Enable函数后,下述API事件均可产生USBAPI中断。
1)发生USB复位。
2)一个调用Block_Write(块写入)函数的传送完成。
3)收发缓冲区已准备好为调用Block_Read(块读出)服务。
4)来自主机的命令使USB缓冲区被刷新。
5)设备实例已被主机打开或关闭。
USBAPI的中断源,可以通过调用Get_Interrupt_Source函数得到。如果USBAPI中断被允许,用户必须提供一个中断服务程序,其程序入口为中断向量16(地址=0x0083)。当此函数被调用时,如果已有任何USBAPI中断申请,则在1毫秒内程序会响应该中断,进入中断16处理程序。