USB主机检测及主机初始化程序
0赞
发表于 7/13/2012 11:52:18 PM
阅读(3189)
****************************************************************************/
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;
}
