返回信息流版上有人做过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)
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #7571同步于 2010/3/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
can总线控制器的一些问题
idx001
2010/3/5镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
虽然我没看过can总线,虽然没用过sja和2410,但是我猜
addr(SJA)-addr(SJA'S REG) addr(SJA)-data
【 在 idx001 (birdfish) 的大作中提到: 】
: 版上有人做过2410+sja1000的驱动没有,因为sja1000是地址、数据复用,2410是分离的,所以要模拟sja1000的控制时序。
: 我拿到一个公司是
: sja_nWR <= nWE + not(ADDR2)
: ...................
时序还是看datasheet吧,sja和2410,都应该有的,时序清楚了引脚自然也就清楚了,
nWE不就是低电平有效的write enable么
【 在 idx001 (birdfish) 的大作中提到: 】
: 你猜的很对。但是我对时序有疑问,另外我觉得我应该去研究下nWE这个管脚
我主要是在网上看到另外一种接法使我对时序产生了严重的疑问,网上有人用了CS ADDR3 or nGCS4 寻址偏移为0x08 cs难道不是低电平有效?没搞明白
nwe应该是芯片产生的 不能编程
我再看看吧 谢谢斑竹先