ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2438回复:30

[求助!]关于USBN9603固件中数据结构转换的问题

楼主#
更多 发布于:2004-06-03 20:37
在9603USB_device_req_handler()函数中,有如下语句
byte *msg = control_receive_buffer.data;
USB_request_t *req = (USB_request_t *)msg;
...
(*usb_std_device_req[REQ_DEVICE(req)])(req);
...
但是我将REQ_DEVICE(req)打出来发现竟然是0
然而msg[1]却是正确的设备请求的编号,不知道这是什么原因,
导致了数据结构的转换没有成功。
我用的是arm9的芯片,ads和sdt分别编译生成了映象文件,但是结构都是一样的。不知道为什么?

如果单纯用control_receive_buffer.data来控制也可以,但是就是改动的地方太多了,有没有其他办法?
恳请liumda bbiliu 还有其他高手帮忙,多谢!
ps:
liumda,你好
前些日子在忙别的事,把usb的事放下了,现在还要麻烦你了,谢谢!
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-03 21:42
你已经做到处理请求了啊,我现在在中断这里卡住了,一直收到的都是ALT中断,没有RX和TX中断,所以枚举不能进行下去,不知道你当初有没有遇到这样的问题?后面的请求处理部分程序我还没怎么细看呢,还是希望liumda、bbiliu等牛人出来指点指点啊!
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-04 08:02
我目前中断来得也是很多的
ALT中断,我要把板子RESET多次才能出现RX中断。
我推测问题主要在于两个方面:
1,是读写时序的问题。
2,是主机端总线驱动的问题。
我想解决办法应该从配置usb读写时序入手。
我一开始用的是存控来读写usb,后来由于总总问题
就改用GPIO来模拟时序了,可以读写。但是感觉还是
不怎么好。
总线驱动方面,换一个USB端口可以加快出现RX中断
的响应时间。
目前我只能做到这些,不知对你是否管用。
常联系把,有困难一起克服!
liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-04 08:56
ip4347:你的程序本身没有问题,我想问题可能出在KEIL C51和ADS编译器对指针的处理的差别上,你仔细研究一下他两之间的差别吧?有结果了,请回复一下!
You Happy,So I Happy!
liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-04 09:02
你已经做到处理请求了啊,我现在在中断这里卡住了,一直收到的都是ALT中断,没有RX和TX中断,所以枚举不能进行下去,不知道你当初有没有遇到这样的问题?后面的请求处理部分程序我还没怎么细看呢,还是希望liumda、bbiliu等牛人出来指点指点啊!


你的这个问题我也曾经遇到过,我用的是ARM+9603,后来通过屏蔽高速缓冲就好了

FPGA+9603没有做过,不知道是不是也存在高速缓冲,但愿这个提示对你有用!
You Happy,So I Happy!
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-04 17:00
多谢两位的回答。
“屏蔽高速缓冲”是什么意思?是和9604配合的controller那边比如ARM的问题吗?我现在用示波器测到ALT中断来的频率是在65k~70k之间。
回ip4347:我好像不管怎么reset都没有RX中断,读写时序上应该没什么问题吧,我随机地读一个寄存器或者修改之后再读,数据都和预想的一样。时序上除了datasheet上讲的那些setup time、hold time之类的另外还应该注意些什么?
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-04 22:18
toLiumda:
ADS中,看了一下c的汇编代码,感觉没有什么问题。
不过,我发现是宏定义的函数的问题,REQ_DEVICE(reg)被我通过
串口打出来,发现是006,但是
(*usb_std_device_req[REQ_DEVICE(req)])(req);就是进不去,不能调用标准请求函数
明天我再看看。

toX
我想读写时序按照DATASHEET上的来就没有什么问题了
高速缓冲是CACHE,我没有打开,但是也是有很多的ALT中断,SD3类型的,一直在发各不停,只有多次RESET才能出现RX中断,
很是心烦,我再挑挑看把有劲展告诉你。
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-05 13:49
发现的问题:
1.网上给的代码中,TWO_BYTES 竟然用的是 unsigned int 类型32位,我把它改成了 unsigned short类型。
2 用SDT编译,竟然把一个8个字节的数据结构USB_request_t看作了20个字节。
  另外,REQ_DEVICE(req)这个宏,在SDT中汇编指令给的不正确。
应该是              LDRB R0,[R4,#1]
但是汇编给出的竟然是LDRB R0,[R4,#4]。
3 改用ADS编译后,可以解决上述问题。但是ads编译器选用的类型是arm7和我使用的不一致,虽然从汇编代码看不出问题,但是执行的时候却跳转不到标准请求的函数中去,见鬼了。sdt可以跳转进去,只是跳转的位置不正确。

我在想,总是出现alt中断会不会和编译器的配置相关啊?
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-05 14:59
我目前成功的完成了枚举过程,系统识别后进行了注册。
目前不足之处还是在于要多次RESET才能够有数据接受中断,
我想还是从编译器的设置,特别是处理器型号的设置入手
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-06-06 10:49
不过你遇到的这些问题好像对我来说不存在,因为我用的控制器不是MCU或者ARM这些,是要自己在FPGA上开发的。
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-06 12:05
我想fpga只不过频率低了一些吧,应该和mcu之类没什么太大差别,
你用的编译环境是什么啊?
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-06-07 09:19
是在ISE里开发的,但不是编译环境吧
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-06-07 16:04
真是受不了了啊,本来以为是给NFSR写了RESET之后没有等待那个100us,刚才试了一下还是不行....
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-06-07 19:39
哥们别放弃啊,我正在找办法呢
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-06-08 20:07
你用的fpga的频率是多少啊?
会不会和频率相关?

Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-06-08 20:16
我的FW里用的时钟是FPGA上的时钟,27M的,这有什么联系吗?
liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-06-09 08:52
我的FW里用的时钟是FPGA上的时钟,27M的,这有什么联系吗?


这个时钟应该没有问题,我想是不是和你的FPGA的地址总线有关系?比如总线的宽度是8位还是16位?还有数据总线等等。国半的DEMO程序没有问题,只要稍做修改就可以用了。你应该多考虑一下你的FPGA的程序问题。      -----个人意见

ip4347,Xranger:你们的PC部分的驱动做好了吗?用什么做的?DDK?


[编辑 -  6/9/04 by  liumda]
You Happy,So I Happy!
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-06-09 09:10
突然发现把cable拔了之后还是不断收到ALT中断,而且情况都一摸一样,难道说我的cable有问题?不会这么衰吧
Xranger
驱动牛犊
驱动牛犊
  • 注册日期2004-04-07
  • 最后登录2004-08-06
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-06-09 09:12
FPGA和9604的连接是我们自己分配的,地址/数据总线就是从FPGA里拉了8根线出来和9604相连的,这应该也没问题吧
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-06-09 09:35
liumda
我pc部分的驱动没有做好,正等固件写好了用windriver做
上一页
游客

返回顶部