BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #7571同步于 2010/3/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

can总线控制器的一些问题

idx001
2010/3/5镜像同步4 回复
版上有人做过2410+sja1000的驱动没有,因为sja1000是地址、数据复用,2410是分离的,所以要模拟sja1000的控制时序。 我拿到一个公司是 sja_nWR <= nWE + not(ADDR2) sja_ALE <= not(nGCS4+ADDR2+nWE) sja_cs直接接的就是ngcs4 那基址就是0x20000000,那寻址偏移是0?数据偏移是0x04? 下面就是写寄存器了 void write_can_reg(char value, int reg) { outb(reg, ADDR_SJA1000_ADDR);//这里是不是先寻到内部寄存器? udelay(5); outb(value, ADDR_SJA1000_DATA); /*ADDR_SJA1000_DATA = ADDR_SJA1000_ADDR + (0x1<<2);*/ } 这个原理我没太弄明白,outb(reg, ADDR_SJA1000_ADDR)是在ale的下降沿把数据锁入地址寄存器,然后再把数据写入?这里nwe做什么用?我比较笨 不太明白这个时序。附上sja1000的手册。请大牛赐教 ps:ADDR_SJA1000_ADDR是映射过的地址 附件(733.9KB)
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
ArmStrong机器人#1 · 2010/3/5
虽然我没看过can总线,虽然没用过sja和2410,但是我猜 addr(SJA)-addr(SJA'S REG) addr(SJA)-data 【 在 idx001 (birdfish) 的大作中提到: 】 : 版上有人做过2410+sja1000的驱动没有,因为sja1000是地址、数据复用,2410是分离的,所以要模拟sja1000的控制时序。 : 我拿到一个公司是 : sja_nWR <= nWE + not(ADDR2) : ...................
idx001机器人#2 · 2010/3/5
你猜的很对。但是我对时序有疑问,另外我觉得我应该去研究下nWE这个管脚
ArmStrong机器人#3 · 2010/3/5
时序还是看datasheet吧,sja和2410,都应该有的,时序清楚了引脚自然也就清楚了, nWE不就是低电平有效的write enable么 【 在 idx001 (birdfish) 的大作中提到: 】 : 你猜的很对。但是我对时序有疑问,另外我觉得我应该去研究下nWE这个管脚
idx001机器人#4 · 2010/3/5
我主要是在网上看到另外一种接法使我对时序产生了严重的疑问,网上有人用了CS ADDR3 or nGCS4 寻址偏移为0x08 cs难道不是低电平有效?没搞明白 nwe应该是芯片产生的 不能编程 我再看看吧 谢谢斑竹先