在线时间0 小时
UID2091856
注册时间2014-5-8
NXP金币0
该用户从未签到
新手上路

- 积分
- 25
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2014-5-8 14:29:32
|
显示全部楼层
回复:基于arm的USB通信
回复第 4 楼 于2014-05-08 14:08:19发表:
恩,那个英文资料看到了,可能中文资料翻译还是有问题吧,那例程里面那个语句是无意义的啊,你有标准的USB初始化函数吗?我用的初始化函数是这样的,有问题不
void hw_usb_init(void)
{
tBDTtable = (tBDT *)((( uint32 ) tBDT_unaligned & 0xFFFFFE00UL) + 0x200UL);
Setup_Pkt=(tUSB_Setup*)BufferPointer[bEP0OUT_ODD];
gu8USB_State=uPOWER;
USB_FMC_ACC_ENABLE;
USB_REG_SET_ENABLE;
USB_REG_CLEAR_STDBY;
MPU_CESR=0;//禁止MPU
FLAG_SET(SIM_SOPT2_USBSRC_SHIFT,SIM_SOPT2); // 使能PLL/FLL为时钟源
FLAG_SET(SIM_SOPT2_PLLFLLSEL_SHIFT,SIM_SOPT2); // 使能PLL输出
SIM_CLKDIV2|=USB_FARCTIONAL_VALUE; //USB分频因子设置
SIM_SCGC4|=(SIM_SCGC4_USBFS_MASK); //USB模块时钟门使能
enable_irq(USB_INTERRUPT_IRQ); //使能USB模块IRQ中断
//USB模块寄存器配置
USB0_USBTRC0|=USB_USBTRC0_USBRESET_MASK; //复位USB模块 //USB收发控制器0最高位置1
while(FLAG_CHK(USB_USBTRC0_USBRESET_SHIFT,USB0_USBTRC0)){};//等待USB模块复位完成
//设置BDT基址寄存器
//( 低9 位是默认512 字节的偏移) 512 = 16 * 4 * 8 。
//8 位表示: 4 个字节的控制状态,4 个字节的缓冲区地址 。
USB0_BDTPAGE1=(uint8)((uint32)tBDTtable>>8);
USB0_BDTPAGE2=(uint8)((uint32)tBDTtable>>16);
USB0_BDTPAGE3=(uint8)((uint32)tBDTtable>>24);
//清除USB模块复位标志
FLAG_SET(USB_ISTAT_USBRST_MASK,USB0_ISTAT);//USB0_ISTAT中断状态寄存器
//使能USB模块复位中断
FLAG_SET(USB_INTEN_USBRSTEN_SHIFT,USB0_INTEN);//USB0_INTEN中断使能寄存器
USB0_USBCTRL=0x40; //D- D+ 下拉
USB0_USBTRC0|=0x40; //强制设置第6位为1
USB0_CTL|=0x01; //控制寄存器 USB模块使能
//上拉使能
FLAG_SET(USB_CONTROL_DPPULLUPNONOTG_SHIFT,USB0_CONTROL);
}
|
|