jim.xu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-13
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1678回复:6

on USBN9603 &s3c44b0

楼主#
更多 发布于:2004-04-14 21:57
我使用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 函数有问题,还是哪个地方没有初试化?


bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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;
}
jim.xu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-13
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-15 11:32
十分谢谢你。
我以前做软件的,最近刚刚熟悉硬件。
你能告诉我为什么是这样吗?
我在深圳,我的手机号码是13603090659。
有空请你。
jim.xu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-13
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-15 12:27
十分谢谢你。
我以前做软件的,最近刚刚熟悉硬件。
你能告诉我为什么是这样吗?
我在深圳,我的手机号码是13603090659。
有空请你。
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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本身会判断这个时序的。即先输入要操作的寄存器的地址,然后在对其进行写入或读出。
jim.xu
驱动牛犊
驱动牛犊
  • 注册日期2004-04-13
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-15 16:55
真谢谢你,你在深圳吗?我请你吃饭。
我也看仔细读了时序,因为学的硬件知识基本上都忘了。看来我得
仔细读一下计算机接口原理。
希望得到你更多的指点。
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-16 10:24
深圳就不在,吃饭就免了。举手之劳而已。
游客

返回顶部