阅读:2131回复:7
求助:周立功89C51+D12,把89C51固件改到ADUC812??
我买了周立功的SMART USB 开发板,我自己现在在做的是ADUC812+D12的数据采集,看周立功写的一书《PDIUSBD12固件编程与驱动开发》上所说,他所提供的固件移植到其他CPU上只需修改EPPHAL。C和MAINLOOP。C,我想问一下对EPPHAL。C具体改是该怎么改啊,我用的是KEIL C写。。请大侠多多指教,急中。。。。
|
|
沙发#
发布于:2004-05-22 12:40
硬件抽象层的作用是向上层提供统一的接口,这个要根据你的硬件来改,这个程序里提供了端口访问和FLASH读写的部分,拿端口访问来说,就是内存读写,但是有的机型或设计上面使用的I/O访问,就要改成I/O访问的。
主程序部分,他用的循环而且也没有作任何计算,应该根据自己的需要改一下,而且它没有提供USB协议之外的数据响应,这个也要加上 |
|
|
板凳#
发布于:2004-05-26 12:07
aquariuscamus
你好,谢谢,我昨天晚上把固件照着自己的电路图改了一下,发现在用周立功的驱动竟然也能用,用D12_TEST也可以读写端点,我现在不明白的是:你说它没有提供USB协议之外的数据响应,这个要加上。 我现在是要在MCU外加一块存储器,然后通过D12来让PC机读存储器的数据,我想问一下,这样的话我该怎么做呢,还有就是PC机的应用程序读数据时只要用READFILE就行了吗! 请多多指教! 如果方便的话,请加我QQ:11624074 |
|
地板#
发布于:2004-05-27 20:21
没有USB协议之外的响应是指:没有SCSI命令响应(在USB数据包中可以包含),诸如此类的命令(如果要兼容U盘的海量存储器标准,SCSI命令可能是对你比较有用的)。也就是说,就像网络打包一样,USB内部包含有数据,这些数据可以是数据也可以使相关命令。
推荐你看FRANK的USB研究报告(在这里感谢FRANK以及他的共享精神,他的相关报告让我在一个星期内搞定U盘软件设计)。 我不是很清楚你的控制器是什么,如果是DSP,可以将Flash直接映射到存储空间,通过响应SCSI命令读写,实现一个U盘。 当然,如果你自己有自己的协议,使用自己做的驱动程序,那么只需要响应自己规定的命令即可。 |
|
|
地下室#
发布于:2004-06-02 19:30
aquariuscamus
谢谢 FRANK的USB研究报告我以前看过了,当时我看的时候觉的他用的读写U盘我就没仔细看了,:),觉的自己的跟他还是有比较大的不同 这几天忙着自己如何改固件,已经有几天没来了,现在我已经弄懂了如何读写端点2的原理,但是有个问题没法解决 我先说一下我的问题吧: 我做的是数据采集,用的是ADUC812+D12,还扩展了一个RAM,没有 加RAM时,我用周立功的WRITEPORT2()和READPORT2()读写都正常,但是当我加了一个RAM,PC读数据就失败了,而且我用示波器看发现RAM的片选就一直没有有效过,我的端点2IN固件如下: //主端点IN控制 void main_txdone(void) { unsigned char i; D12_ReadLastTransactionStatus(5); //清中断标志位 MCU_D12CS = 0x1; MCU_RAMCS = 0x0; //外部RAM片选 databuff=0x0000; for(i=0;i<64;i++) { EpBuf = *databuff; databuff++; } MCU_RAMCS =0x1; MCU_D12CS = 0x0; D12_WriteEndpoint(5, 64, EpBuf); } 知我的固件这样写有没有问题? 还有一个问题就是我用USBHOUND监视只能监视到枚举过程,其他的数据 就没了,我用的是5.0版的,这是怎么回事啊! 我的QQ:11624074,希望多多指教。。。 |
|
5楼#
发布于:2004-06-05 00:06
在C语言里下面这段代码访问了绝对空间0x0000其实的内存,不论你的片选是否有效,你都没有选中需要的RAM,不论你使用单片机或是DSP,下面的这段代码都是有问题的。但是你的MCU我没有接触过,不能给你什么建议。
databuff=0x0000; for(i=0;i<64;i++) { EpBuf = *databuff; databuff++; } FRANK还有一篇调试的心得,你可以参考一下 |
|
|
6楼#
发布于:2004-06-06 21:18
aquariuscamus,谢谢
引用--------------------------------------------- 在C语言里下面这段代码访问了绝对空间0x0000其实的内存,不论你的片选是否有效,你都没有选中需要的RAM,不论你使用单片机或是DSP,下面的这段代码都是有问题的。但是你的MCU我没有接触过,不能给你什么建议。 databuff=0x0000; for(i=0;i<64;i++) { EpBuf = *databuff; databuff++; } ------------------------------------------------------- aquariuscamus,就你用过的单片机,如果用上面这段代码,会有什么问题呢,说来让我参考一下吧,说不定我能得到什么启发呢,谢谢!! |
|
7楼#
发布于:2004-06-08 22:09
就拿51单片机来说,单片机大同小异,访问片内地址和片外地址是需要定义不同的数据类型的。使用汇编当然可以拉低或者拉高某一个引脚使选通有效,但是对于高级语言来说,通常都是由一些愈发扩展完成这个任务。你还是仔细看看芯片手册,或许会有帮助
|
|
|