打印
[Kinetis]

K60 USB 停止工作

[复制链接]
995|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我遇到了一个比较棘手的问题,就是在USB读写的时候发现K60的USB运行一段时间后不工作了,经过大量的调试后发现USBx_CTL TXSUSPEND 位被写1了,我的K60 USB是插在PC上的,手册上关于这个位的定义是 “在目标机模式下,当 SIE 关闭包传输与接受功能时, TXD_SUSPEND 位被置 1。清除该位将允许 SIE 继续令牌操作。当接收到 SETUP 令牌时,允许在回复令牌操作之前,使用软件的方法将在 BDT 表中的未处理的 包出队,此时该位被置位” 这是别人翻译的,我想知道这个位时什么条件被写1的,我怎么避免发生这种事呢,比较急,大神嚒还在不????

相关帖子

沙发
leihen0525|  楼主 | 2016-3-25 11:28 | 只看该作者
我又追溯到JM60 的USB上,TXSUSPEND 这个位只有收到SETUP包才会自动写1,但是奇怪的是我在断点0中的清掉了这个位啊,
有没有可能收到了SETUP包,但是没有进入TOKDNE中断呢,我清这个位是在TOKDNE中断的端点0上的,
有没有可能https://bbs.21ic.com/icview-1389302-1-1.html 这个里面产生的问题呢,我用了控制端点0做查询的,如果USB的中断被延迟处理了,而端点0又是一个乒乓缓冲区,上一次的请求和下一次的请求都被传输进来了呢,话说端点0为什么要设计成乒乓呢,搞死了,

使用特权

评论回复
板凳
leihen0525|  楼主 | 2016-3-29 11:17 | 只看该作者
这个问题花了近一个星期来找这个问题,终于解决了,为了别人不会再这个坑上挂了,这个https://community.freescale.com/message/115016#comment-115016中的第四条提醒了我。
原来我犯了个常识错误,清除中断标志位是写1,从汇编中可以看出,如果用位操作的话,会先读出,然后改掉自己想改的那位,最后会回写,如果读出来的里面有1的那回写就把别人的中断给清了,所以坑爹的就是自己以为只清除了自己,其实可能清除了一大堆中断,然后就都挂了,唉,我花了一个星期学了一个常识。

2016-03-29_105533.png (139.25 KB )

2016-03-29_105533.png

2016-03-29_105624.png (117.31 KB )

2016-03-29_105624.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

55

帖子

3

粉丝