USB主机检测及主机初始化程序
0赞
发表于 2012/7/13 23:52:18
阅读(1977)
****************************************************************************/ int isp1362_hc_probe(struct isp1362 *isp1362) { int id = 0; int tmp = 0; id = isp1362_read_reg16(isp1362, HC_RD_CHIP_ID_REG); if (HC_CHIP_ID != id) return -1; isp1362_write_reg16(isp1362, HC_WR_SCRATCH_REG, 0x55aa); tmp = isp1362_read_reg16(isp1362, HC_RD_SCRATCH_REG); if (0x55aa != tmp) return -1; return 0; } /********************************************************************************** * 名称 :isp1362_hc_init * 功能 :USB主机初始化 * 入口参数 :无 * 出口参数 :无 ***********************************************************************************/ int isp1362_hc_init(struct isp1362 *isp1362) { int tmp = 0; hc_reset(isp1362); hc_set_istl_buff_size(isp1362, 0x400); hc_set_intl_buff_size(isp1362, 0x200); hc_set_atl_buff_size(isp1362, 0x400); hc_set_atl_blk_size(isp1362, 0x40); isp1362_write_reg16(isp1362, HC_WR_CTRL_REG, 0x0680);//0x801f0780 isp1362_write_reg32(isp1362, HC_WR_FRM_INT_REG, 0x27782edf); isp1362_write_reg32(isp1362, HC_WR_RH_DTA_REG, 0x80000102);//0x05000b01// isp1362_write_reg32(isp1362, HC_WR_RH_DTB_REG, 0x00000000);//0x00060000 isp1362_write_reg32(isp1362, HC_WR_RH_PSTAT2_REG, 0x00000100);//reset root hub tmp = isp1362_read_reg32(isp1362, HC_RD_RH_PSTAT2_REG); isp1362_write_reg32(isp1362, HC_WR_RH_PSTAT2_REG, 0x00000002);//0x801f0169 tmp = isp1362_read_reg32(isp1362, HC_RD_RH_PSTAT2_REG); } struct isp1362 usb_isp1362_dc = {1, DC_CMD_PORT, DC_DATA_PORT}; struct isp1362 usb_isp1362_hc = {1, HC_CMD_PORT, HC_DATA_PORT}; volatile long flag = 0; unsigned char buff[512]; /********************************************************************************** * 名称 :EX_INTERRUPT_HANDLER(PFB_ISR) * 功能 :外部中断函数 * 入口参数 :无 * 出口参数 :无 ***********************************************************************************/ EX_INTERRUPT_HANDLER(PFB_ISR) // <--|declaration in exception.h --> { // |declaration with _pragma(interrupt) the ISR Startaddress //close Interrupt *pFIO_FLAG_C = IRQ_PF; // NIC_INT connected to PFx usb_isr(); int_cnt++; if (int_cnt%2) Led4_On(); else Led4_Off(); } /********************************************************************************** * 名称 :irq_init * 功能 :初始化中断函数 * 入口参数 :无 * 出口参数 :无 ***********************************************************************************/ void irq_init(void) { // configure interrupt *pSIC_IAR0 = *pSIC_IAR0 & 0x0fffffff | 0x30000000; *pSIC_IAR1 = *pSIC_IAR1 & 0xffffffff | 0x00000000; *pSIC_IAR2 = *pSIC_IAR2 & 0xfff0fff0 | 0x00040006; // map PFB -> ID5 IVG12 ;Timer0 -> ID4 IVG11; register_handler(ik_ivg11, PFB_ISR); // register_handler(ik_ivg13, Timer0_ISR); // Timer0 ISR -> IVG 11 *pSIC_IMASK=*pSIC_IMASK | 0x00110000; }