阅读:1386回复:11
高手们来帮忙阿(isp1581)
我做好固件程序了,但是现在设置好isp1581的寄存器后,能够接到多次busreset中断,每次都很多,大家看看我的寄存器设置,看看有什么问题
void Init_D14_SFR(void) { //enable Global Interrupt enable //enable soft connect and other feature //enable wakeup on chip select //disable soft connect //设置模式:时钟始终有效,全局中断使能,片选唤醒 Usb_driver_wr(0x0c,0x8); //set all interrupt source to mode 1 //设置全部中断为模式1,电平触发,低电平有效 Usb_driver_wr(0x10,0x62); Usb_driver_wr(0x14,0x3901); Usb_driver_wr(0x16,0x0000); } 特别是jinghuiren,请帮我看看啊,我发给您程序了 |
|
沙发#
发布于:2004-07-24 12:40
Usb_driver_wr(0x0c,0x8);
你是把0X08写到00X0C寄存器里了吧?那不又把SOFTCONNET关了? |
|
|
板凳#
发布于:2004-07-24 12:44
Usb_driver_wr(0x14,0x3901);
Usb_driver_wr(0x16,0x0000); 0X14,0X16中断ENABLE寄存器置位,那0X15呢?不置位你怎么知道来了 SETUP中断?不是通过中断触发?轮询0X19? |
|
|
地板#
发布于:2004-07-24 17:04
我用的是dsp 5409 16位总线,所以寻址的时候只对14和16两个地址操作就能够对中断enable置位了,不象单片机8位的,
而且先阶段只是初始化,对0ch地址写入08,还没有连接usb Usb_driver_wr(0x0c,0x8);所以,没有问题吧 现在我用bushond捕捉到下面的情况,好像到GET DESCRIPTOR没反应 高手帮我看看,到那个步骤了?大概是什么出问题了? 13.1 DI . 1.1.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 2.1.0(2) 13.0 DI 01 01 01 00 .... 2.2.0 13.0 CTL 23 01 10 00 01 00 00 00 CLEAR FEATURE 4.1.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 5.1.0(2) 13.0 DI 01 01 00 00 .... 5.2.0 13.0 CTL 23 03 04 00 01 00 00 00 SET FEATURE 7.1.0 13.1 DI 02 . 8.1.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 9.1.0 13.0 DI 00 01 10 00 .... 9.2.0 13.0 CTL 23 01 14 00 01 00 00 00 CLEAR FEATURE 10.1.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 11.1.0 13.0 DI 00 01 00 00 .... 11.2.0 13.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 12.1.0 13.0 USTS 05 00 00 80 no response 12.2.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 13.1.0 13.0 DI 00 01 00 00 .... 13.2.0 13.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 14.1.0 13.0 USTS 05 00 00 80 no response 14.2.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 15.1.0 13.0 DI 00 01 00 00 .... 15.2.0 13.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 16.1.0 13.0 USTS 05 00 00 80 no response 16.2.0 13.0 CTL 23 01 01 00 01 00 00 00 CLEAR FEATURE 17.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 18.1.0 13.0 DI 00 01 00 00 .... 18.2.0 |
|
地下室#
发布于:2004-07-25 09:38
从现象上看,是设备没连上(0X0C的最低位没置1),它的数据是USBD向
HUB发的HUB类REQUEST,具体的意思你可以看USB2.0协议的第11.24. 你的BUSHOUND的13是HUB吧?没进到设备里(或你没采设备信息). |
|
|
5楼#
发布于:2004-07-25 09:51
在23 01 14 00 01 00 00 00之后,BUSHOUND应该能看到你的设备描述符:12 01 ....,而你的好象没有返回这个,你看看你的固件程序,最好跟一下,看它是否进到发送设备描述符里去了,并看是否发送设备描述符了.
|
|
|
6楼#
发布于:2004-07-25 10:25
谢谢,我已经连上usbconnect了,0c->1,
已经有usb的图表了,但是我现在能够收到很多次busreset中断,我感觉就不太对了吧,别的中断没有啊,一直都是这个 |
|
7楼#
发布于:2004-07-25 12:37
是啊,应该只有一次BUSREST中断.你看一下,是否你在BUSRESET里将
0X0C寄存器又重新置位了?在BUSRESET处理过程中,不需要将它置位. 特别是SOFTCONNET.不知是不是这个原因. |
|
|
8楼#
发布于:2004-07-25 16:27
对的,我是在isr的中断子程序中将connectsof置1了
但是没有重新写0,再写1,周立功的程序,和philips公司的程序都是这样做的, if(USB_Int_Flag.BITS.RESET) { //清除总线复位中断位 USB_Int_Flag.BITS.RESET = 0; //设置总线复位标志 Kernel_Flag.BITS.Bus_Reset = 1; PIO_Count = 64; //切换到全速模式 HS_FS_LED = FULL_SPEED_LED; Kernel_Flag.BITS.HS_FS_State = FULL_SPEED; //初始化ISP1581 Init_D14(); //设置softconnect D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 1; } 您看看是什么问题啊? |
|
9楼#
发布于:2004-07-25 16:45
BUSRESET过程不会对SOFTCONNET有影响,所以你可以不去管它,既不置位,也不清除,试试看.(你初始化1581是否对SOFTCONNET作了什么?)
另:在总线复位后,你应当收到STANDARD REQUEST,你看你收到没有. |
|
|
10楼#
发布于:2004-07-25 21:09
非常感谢metalwing
我找到了问题了,是我在busreset中断中对softconnect进行从新赋值,并不是做与操作,导致softconnect断开,所以再联上的时候又受到busreset中断,现在能够枚举成功了,下一步好好的消化程序,然后编写驱动,能不能指导一下如何进行数据传输,如何写驱动,放分啦 |
|
11楼#
发布于:2004-07-26 09:09
首先祝贺你的进展.
不用谢,互相帮助才能共同进步. 你要进行什么样的数据传输?写驱动找本书先看看,DS,WINDRV,等等, 可以先看看WDM方面的书.有一个概念后再动手. 祝你早日成功. |
|
|