阅读:1679回复:6
on USBN9603 &s3c44b0
我使用ARM S3c44b0 做mcu 来控制USBN9603, 我的连接采用
nGCS3 来连 9603 的cs, use non-multiplexed mode,(使用龚俊先生的原理图) 在我的 init route , void write_usb(byte adr,byte dta) { .//0x6000000 indicate nGCS3 bank start address *(unsigned char *)(0x6000000+addr) = dta; } 当我往MCNTL 写0x1, USBN9603 normal reset, 当我写CCONF 为0xb, 整块内存都变成0x0b0b0b0b(from 0x6000000), 请叫高手指点是什么原因。 是否我的write_usb 函数有问题,还是哪个地方没有初试化? |
|
沙发#
发布于:2004-04-15 11:16
老大,你的write_usb程序错了。
仔细看看usbn9603的的资料,其中关于地址和数据的输入部分。 用地址空间0x6000000以上的地址,可以控制NGCS3片选有效, 你的usbn9603的A0引脚在非复用方式下控制数据或地址线的输入,所以要看你的AO脚连到mcu的哪个地址线上,如果是连到mcu的A1脚则,如下定义: #define usbaddr_address (*(volatile unsigned char *)0x6000002) #define usbdata_address (*(volatile unsigned char *)0x6000000) void write_usb(char addr ,char data) { usbaddr_address = addr; usbdata_address = data; } |
|
板凳#
发布于:2004-04-15 11:32
十分谢谢你。
我以前做软件的,最近刚刚熟悉硬件。 你能告诉我为什么是这样吗? 我在深圳,我的手机号码是13603090659。 有空请你。 |
|
地板#
发布于:2004-04-15 12:27
十分谢谢你。
我以前做软件的,最近刚刚熟悉硬件。 你能告诉我为什么是这样吗? 我在深圳,我的手机号码是13603090659。 有空请你。 |
|
地下室#
发布于:2004-04-15 16:14
你要详细的看看usbn9603的资料。
特别是在数据输入的时候的写控制线wr,读控制线rd,片选NGCS3,A0d的电平的时序。 比如你想地址0x6000002写的时候,因为0x6000002是在片选ngcs3的地址空间内,所以会产生写信号,和ngcs3信号,6000002中2表示mcu的地址线A1为1,即与之相连的usbn9603的A0引脚为1,根据usbn9603的资料的说明,当A0为1是表示输入的数据是USBN9603的内部寄存器的地址。例如用我给的函数write_usb(0x10,12) 即为向usbn9603的内部寄存器(地址为0x10),写入数据12。 在write_usb中的输入顺序是: 第一句输入寄存器的地址给usbn9603让其知道我要操作那个寄存器。 第二句表示向第一句中的寄存器写数据。 usbn9603本身会判断这个时序的。即先输入要操作的寄存器的地址,然后在对其进行写入或读出。 |
|
5楼#
发布于:2004-04-15 16:55
真谢谢你,你在深圳吗?我请你吃饭。
我也看仔细读了时序,因为学的硬件知识基本上都忘了。看来我得 仔细读一下计算机接口原理。 希望得到你更多的指点。 |
|
6楼#
发布于:2004-04-16 10:24
深圳就不在,吃饭就免了。举手之劳而已。
|
|