(图一)USB程序整体流程图
(1)USB模块初始化:
(1)硬件初始化
配置AHB总线时钟和USB Device时钟,使能PCONP
配置PLL1作为时钟信号,配置USB相关的引
(2)读测试寄存器
用来检测AHB总线时钟和USB Device时钟是否使能
(3)配置中断
主要是配置端点0~5的中断
(4)配置端点
配置端点0~5的最大包大小
(5)DMA初始化与配置
初始化UDCA表
读取端点2~5的设备描述符地址
(6)重新连接USB
通过写SIE命令使连接引脚输出高电平和低电平,PC机检测到新设备输入,进行枚举。
USB初始化的代码:UINT8 usbDevInit (void)
{
__usbDevHardwareInit(); /* 初始化硬件 */
bEPPflags.value = 0; /* 置USB事件标志为0 */
//如果USB时钟(USBCLK 和AHB slave clock)开始跑了,则返回0XA50F
if (__usbDevReadTestRegister() != 0xA50F) { /* 读测试寄存器 */
return 1; /* 初始化失败 */
}
__usbDevIntConfig();