圈圈的第四个AT91SAM7S64测试程序横空出世~~~USB键盘实现~~~

[复制链接]
 楼主| computer00 发表于 2009-3-8 21:06 | 显示全部楼层 |阅读模式
单击这里下载本实验程序:<a href="https://bbs.21ic.com/upfiles/img/20093/200938205820165.rar" target=_blank>https://bbs.21ic.com/upfiles/img/20093/200938205820165.rar</a><br /><br />让圈圈休息一下,接下来将会把以前更多的USB程序移植过来,哈哈~~~<br /><br />&nbsp;&nbsp;&nbsp;经过近2天的忙活,圈圈的第四个AT91SAM7S64程序终于跑起来拉。<br />这是一个简单的USB键盘测试程序,插到电脑上将显示一个USB键盘。<br />按键功能分布如下:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K1:Caps&nbsp;Lock键&nbsp;&nbsp;K2:Num&nbsp;Lock键&nbsp;&nbsp;K3:字母a键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K6:左Ctrl键&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K5:左Shift键&nbsp;&nbsp;&nbsp;K4:数字1键<br /><br />LED2为NUM&nbsp;LOCK灯,LED3为CAPS&nbsp;LOCK灯。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;按键使用定时器1产生5ms周期的中断进行扫描。当开关动作时,<br />同时会在LCD屏幕上显示相应的键。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;本程序所用的实验平台是21IC的古道热肠设计的“DIY优盘开发板”,<br />详细的原理图可以去古道热肠的blog下载。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;本程序由《圈圈教你玩USB》中的USB键盘程序移植而来,由于所<br />使用的USB芯片不一样,因而底层函数区别较大,很多地方做了修改。<br />程序依然使用原来的查询模式,通过查询中断寄存器来判断是否需要<br />对相应的端点做处理。当然,如果你感兴趣的话,也可以改成中断方式<br />来处理。在config.h文件中可以打开调试信息,通过串口0显示详细的<br />调试信息。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;端点1作为中断输入端点,返回按键数据;端点2作为中断输出端点,<br />用来发送LED状态。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AT91SAM7S64芯片的USB部分比较特殊,有很多地方需要注意。<br />例如UDP_CSRx寄存器,在操作时要特别注意,需要等待数据写入。<br />而UDP_FADDR(地址寄存器)的使用也要注意,应该是在发送完0长度<br />的状态数据包后才能往该地址写入实际设置的地址,然后再设置<br />UDP_GLB_STAT寄存器中的FADDEN为1。而像D12这样的USB芯片,则<br />刚好相反,应该先写地址,再返回0长度的状态包,当主机用ACK确认<br />这个状态包时,芯片会自动启用新地址。圈圈在调试这个芯片的设置<br />地址阶段时,费了很多时间...另外还要注意的是端点的使能操作。<br />应该在收到非0的设置配置请求后,才对非0端点使能。否则事先初始化<br />好的端点,在收到总线复位时,会复位到非使能的状态。圈圈在这个<br />问题上也费了不少时间,老是无法正确发送出数据(状态寄存器显示<br />发送完毕了,但是实际上主机没收到数据)。另外该芯片的端点是单<br />向,只能配置它为输入或者输出,因此总共也就只有3个非0的端点可用。<br />不像D12,端点1和端点2都是双向的,可以同时有4个非0端点。另外还<br />需要注意端点1和2的双缓冲机制,在清除端点缓冲区满标志时要自己决定。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈圈&nbsp;&nbsp;2009-03-08&nbsp;&nbsp;21:00<br /><br />图片:<img src="https://bbs.21ic.com/upfiles/img/20093/2009382112737.gif">
 楼主| computer00 发表于 2009-3-11 20:02 | 显示全部楼层

21IC DIY U盘做的USB转串口可以拉,哈哈~~~欢迎大家测试~~~~

单击这里下载USB转串口的全部源代码以及驱动程序:<br /><a href="https://bbs.21ic.com/upfiles/img/20093/2009311195553445.rar" target=_blank>https://bbs.21ic.com/upfiles/img/20093/2009311195553445.rar</a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;将程序下载到开发板中,就可以实现USB转串口的功能了。如果是第一次<br />使用,则需要安装驱动,安装驱动用的inf文件在源代码文件下的driver目录<br />下,使用硬件安装向导指定到driver目录即可。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;本串口支持波特率最大为115200pbs,停止位可设置为1、1.5、2bit,数据<br />位可设置为5、6、7、8。无校验功能。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;串口输入/输出为UART0,如果要弄成像电脑端一样的公口,则需要自己连接,<br />需要一条两头都是公的交叉串口线。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈圈&nbsp;&nbsp;2009-03-11&nbsp;&nbsp;19:48<br /><br /><br />发现新硬件图片:<br /><img src="https://bbs.21ic.com/upfiles/img/20093/2009311195519262.gif"><br /><br /><br />
huangqi412 发表于 2009-3-9 11:22 | 显示全部楼层

厉害

  
古道热肠 发表于 2009-3-9 11:31 | 显示全部楼层

嗯,不错,好样的.

  
 楼主| computer00 发表于 2009-3-9 13:38 | 显示全部楼层

嘿嘿,中午回来把以前的USB多媒体键盘移植了上去~~~

单击此处下载本实验程序包:<a href="https://bbs.21ic.com/upfiles/img/20093/200939135910242.rar" target=_blank>https://bbs.21ic.com/upfiles/img/20093/200939135910242.rar</a><br /><br /><br />&nbsp;&nbsp;&nbsp;USB多媒体键盘,按键分布如下:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K1:音量加&nbsp;&nbsp;K2:静音&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K3:一键上网<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K6:音量减&nbsp;&nbsp;K5:播放/停止&nbsp;&nbsp;&nbsp;K4:待机<br /><br />LED2为NUM&nbsp;LOCK灯,LED3为CAPS&nbsp;LOCK灯。<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈圈&nbsp;&nbsp;2009-03-09&nbsp;&nbsp;13:30<br /><br /><br />发现新硬件图:<img src="https://bbs.21ic.com/upfiles/img/20093/200939133316529.gif"><br />
 楼主| computer00 发表于 2009-3-9 14:54 | 显示全部楼层

又改了一个USB鼠标程序出来,嘿嘿~~~

单击这里下载USB鼠标程序:<a href="https://bbs.21ic.com/upfiles/img/20093/200939144829168.rar" target=_blank>https://bbs.21ic.com/upfiles/img/20093/200939144829168.rar</a><br /><br />&nbsp;&nbsp;&nbsp;USB鼠标,按键分布如下:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K1:鼠标上移&nbsp;&nbsp;K2:鼠标下移&nbsp;&nbsp;K3:鼠标左键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K6:鼠标左移&nbsp;&nbsp;K5:鼠标右移&nbsp;&nbsp;K4:鼠标右键<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈圈&nbsp;&nbsp;2009-03-09&nbsp;&nbsp;14:46<br /><br /><br />新硬件图:<br /><img src="https://bbs.21ic.com/upfiles/img/20093/200939144924415.gif">
21ic 发表于 2009-3-10 16:45 | 显示全部楼层

赞一个!

呵呵,牛
 楼主| computer00 发表于 2009-3-10 20:36 | 显示全部楼层

牛个屁啊...今天本来想移植一个USB转串口程序,结果卡住了..

程序很快就修改好了,可是驱动装上后,就是无法打开端口。后来发现是控制端点0没有响应了,<br />是在过了设置控制线状态后控制端点0就挂了,不知道为什么...以前的设置地址和设置config都是同样的代码,<br />为啥到了这里就挂掉了,想不通...哎,人生真是坎坷啊...还有一部电影等着我去看哪...
 楼主| computer00 发表于 2009-3-11 10:57 | 显示全部楼层

恩,中午回去继续痛苦...一定要把问题找出来。

  
a_ki 发表于 2009-3-11 12:55 | 显示全部楼层

不错,支持楼主的精神。

  
xwj 发表于 2009-3-11 12:59 | 显示全部楼层

呵呵,不错! 偶也等着蛋蛋把USB串口改出来

这样就可以玩超级终端了
 楼主| computer00 发表于 2009-3-11 15:41 | 显示全部楼层

我顶他个肺!被数据手册害死了,浪费了我宝贵的看电影时

数据手册中明确写着控制端点一直是使能的,并且对其使能位写入也是没有影响的。<br />俺鬼使成差地居然信了它的话,结果过了set&nbsp;ctr&nbsp;line&nbsp;stat之后,控制端点就不再响应了...<br />我开始还怀疑是不是驱动的问题,因为之前几个程序我也是这么搞的啊,的确没有<br />去使能它,而且前面的枚举也通过了。真是怪了!不断地卸载、安装驱动还是不行,<br />换台电脑还是不行!用bus&nbsp;hound看到,往控制端点0再发数据已经无响应了!然后<br />我就在端点使能中加上一条对端点0使能的语句,**,控制端点0居然神奇般的复活<br />了!这时再发送请求已经能够得到响应。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;可接着问题又来了,在set&nbsp;line&nbsp;coding之后,主机无法收到端点0返回的状态数据包。<br />然后尝试在返回0长度的状态包之前,将DIR设置为0,**,居然神奇般地可以收到状态包了!<br />这一下就全通了,可以正常打开串口,并且可以收发数据了。可数据手册中明明写着,<br />在收到SETUP包之后,清除SETUP标志之前,将DIR位设置为1,然后就可以不用管它了。<br />我按照这个操作前面的都没问题,到了有数据输出的set&nbsp;line&nbsp;coding请求时,就不行了,<br />将DIR改为0才行。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;就被这么两个小小的地方耽搁了一天,哎...真想把ATMEL写数据手册的人揍一顿...<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;现在程序基本上是可以了,不过用另外一个串口给它一阵狂发之后,就复位了!<br />这个应该是串口接收部分哪里有点小问题,傍晚回去继续调调看。等弄好后就把程序<br />发上来,可以当USB转串口使用了~~~~~也可以直接自己产生数据返回~~~~
xwj 发表于 2009-3-11 16:08 | 显示全部楼层

呵呵,好!

  
 楼主| computer00 发表于 2009-3-11 19:16 | 显示全部楼层

跑飞的问题找到了,是因为修改中断屏蔽引起的

原来的程序我是通过操作寄存器AIC_IECR和AIC_IDCR来控制整个串口通道的中断的,结果频繁开关就跑飞了,不知道为什么...<br />然后我直接修改串口的中断使能寄存器US_IER0和US_IDR0来使能和打开串口的接收中断,就没事了,这个芯片真是TMD怪问题多得很~~~~<br />现在把程序整理一下,等一下贴上来,嘿嘿~~~老X你就等着吧~~~~
古道热肠 发表于 2009-3-12 11:28 | 显示全部楼层

呵呵,不错,俺叫电脑的串口是公口,插座中是9根针所以叫公口

圈圈为何叫它母口,是否另有它解,愿闻其详.
 楼主| computer00 发表于 2009-3-12 12:25 | 显示全部楼层

晕...当时头晕...笔误...是公口来着~~~~

已经改正过来了。
 楼主| computer00 发表于 2009-3-12 14:32 | 显示全部楼层

再来一个用户自定义HID设备的程序~~~~

单击此处下载本实验程序代码包:<a href="https://bbs.21ic.com/upfiles/img/20093/2009312142517256.rar" target=_blank>https://bbs.21ic.com/upfiles/img/20093/2009312142517256.rar</a><br /><br />单击此处下载上位机测试程序:<a href="https://bbs.21ic.com/upfiles/img/20093/2009312142745364.rar" target=_blank>https://bbs.21ic.com/upfiles/img/20093/2009312142745364.rar</a><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;本程序实现用户自定义HID设备的功能。用户自定义的HID设备在<br />windows下自带了驱动,因此用户无需自行开发驱动,可以直接操作设备。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;将程序载到学习板中,然后插到电脑上就可以出现用户自定义的HID<br />设备了。使用圈圈提供的上位机软件,可以显示学习板上按键的情况,<br />以及通过程序控制学习板上LED的亮/灭。由于该学习板只有3个LED,因此<br />只能控制LED2~LED4。另外也可以插上LCD,在LCD上看到更详细的情况,<br />可以显示LED1~LED7的状态,同时显示按键状态。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;应用程序的源代码包可以去圈圈的blog中下载:<br />http://blog.21ic.com/user1/2198/archives/2008/54260.html<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈圈&nbsp;&nbsp;2009-03-12&nbsp;&nbsp;14:25<br /><br />相关图片:<br /><img src="https://bbs.21ic.com/upfiles/img/20093/2009312142634347.gif">
古道热肠 发表于 2009-3-14 10:36 | 显示全部楼层

哈哈,楼主突飞猛进呀,好棒!

转了一圈,发现王会计(wangkj)正在设计的TFT屏学习板比俺这板还花哨,DIY优盘组成员们要警钟长鸣,不忘进取,向圈圈学习,宜在软件开发上多下功夫,别被老W比下去了.
 楼主| computer00 发表于 2009-3-14 10:54 | 显示全部楼层

呵呵,下周再把俺的USB MIDI键盘移植上去~~~

  
宇宙飞船 发表于 2009-3-15 18:50 | 显示全部楼层

00 非等闲之辈,潜力无限,

天蝎星座出生的人果然是搞技术的料!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

247

主题

14712

帖子

212

粉丝
快速回复 在线客服 返回列表 返回顶部