sja1000写寄存器的方法_第1页
sja1000写寄存器的方法_第2页
sja1000写寄存器的方法_第3页
sja1000写寄存器的方法_第4页
sja1000写寄存器的方法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、sja1000写寄存器的方法ADDR_SJA1000_ADDR = ioremap(0x,0xf);ADDR_SJA1000_DATA = ADDR_SJA1000_ADDR + (0x12);void write_can_reg(char value, int reg) outb(reg, ADDR_SJA1000_ADDR); udelay(5); outb(value, ADDR_SJA1000_DATA); 至于为什么是addr然后data,这是芯片制造者的事,可以参考数据手册。同时这与dma9000网卡驱动类似。-关键是sja1000的地址/数据信号线复用,而2410地址数据线分离,

2、所以要模拟ale控制。(说到底还是时序,模拟地址)由于ARM总线非复用,而SJA1000总线复用,所以必须通过逻辑产生地址锁存信号ALE,假设该信号由芯片GAL22V10产生。SJA1000的片选、读写信号均采用ARM总线信号,ALE信号由读写信号和地址信号通过GAL产生。在写SJA1000寄存器时,首先往总线的一个地址写数据,作为地址,读写信号无效,ALE变化产生锁存信号;然后写另外一个地址,读写信号有效,作为数据。上述逻辑完全通过GAL产生。此外,CAN总线需要在两线问加一个120欧电阻。2410+sja1000简单接法1、sja1000的数据总线和arm的数据总线直接连接,arm的地址线

3、a0与sja1000的ale连接,sja1000的片选信号通过由arm的bank片选信号与地址a0取或信号。2、写数据时,先通过arm的数据总线往sja1000送地址信号,此时a0置1;然后将a0置0,再由arm的数据总线往sja1000送数据信号。3、读数据时,同样先通过arm的数据总线往sja1000送地址信号,然后取数。CAN 总线通信控制芯片SJA1000 的读写 CAN 总线通信控制芯片SJA1000 没有提供单独的地址线,而使用可以与Intel 和Motorola系列微控制器兼容的分时复用地址/ 数据线。在一个读写周期内,微控制器首先输出操作地址并使地址锁存信号ALE 有效,SJA

4、1000 在ALE 信号的下降沿将操作地址锁在片内;之后微处理器发出读写信号进行数据传输。但S3C44B0x 的数据线和地址线是分离的,对SJA1000 的读写操作需要模拟微控制器,先在数据线上写一个操作地址,并模拟产生一个ALE 信号锁存这个地址,之后进行正常的读写操作。系统使用地址线ADDR0 区分地址传输和数据传输:写奇地址时,不选通SJA1000 芯片,但给出一个有效的模拟ALE 信号;读写偶地址时,选通SJA1000 读写数据。另外,系统同时有两路CAN 总线接口,读写操作根据地址线ADDR1 区分两个SJA1000 芯片,两个片选信号和ALE 信号都要通过GAL 芯片产生,各信号如

5、图所示。 图 SJA1000 控制信号的产生 图中虚线是向SJA1000 传输和锁存地址的过程,实线是读写操作的过程。用ABEL 语言书写的各信号产生逻辑式为: CAN-CS = nGCS4 # ADDR0 ; (#-或)ALE = ! nWE &ADDR0 & ! nGCS4 ; 对SJA1000 的操作地址如下:地址锁存向0x端口写地址;数据读写通过地址0x。(地址如何计算,2410 32位地址总线,用到30位,由addr29:27选通ngcsx)Sja1000重要寄存器:输出控制寄存器(OCR)-复位模式下可读写b1b010-正常模式对于输出控制寄存器的位和输出引脚 TX0 和 TX1

6、的关系,我的理解是OCTPx,OCTNx编程驱动器特性:00悬空,01上拉,10下拉,11-推挽;OCPOLx编程输出端极性,TX的输出由TXD(输入)和OCTPx,OCTNx,OCPOLx决定,网上有人根据表格画出卡诺图求出了输入输出的关系。OCPOLx为0,当TPX与TNX并非全关状态时候,OCPOLx为0,输出电平与TXD一致,为1翻转。TPX与TNX全关状态输出管脚悬空。所以电路中要用到TX0(使TX0与TXD输入相同,为什么?)并使TX1设置悬空,OCTP0,OCTN0,OCPOL0要设为110,OCTP1,OCTN1,OCPOL1就设为000,则输出控制寄存器设置应该为0x1a时钟

7、分频寄存器(CDR)一般用不到sja1000的clkout管脚,所有bit3置1,CD.2CD.0用来设置clkout管脚上的频率,这里也用不上。Bit5是允许接受中断输出,当一条已接收的信息成功的通过验收滤波器一位时间长度的接收中断脉冲就会在 TX1 引脚输出(帧的最后一位期间),发送输出阶段应该工作在正常输出模式。BIT6,CBP置位,激活 SJA1000 的比较器旁路功能,如果这个功能被使能,施密特触发器有效,内部的传播延迟 tD2 比接收比较器延迟的 tD1 要小得多 这在最大总线长度(can协议规约)上有积极的影响Bit7:0basic模式,1pelican总线定时寄存器(BTR):

8、该寄存器很重要,要设定can总线的位定时参数,这个要从总线原理入手,不是一下就能理解的,但给定了需要的参数后要会怎么编程设定。BRP:波特率预分频值CAN 系统时钟 tSCL 的周期是可编程的 而且决定了相应的位时序 CAN 系统时钟.由如下公式计算tSCL=2 tCLK (32 BRP.5+16 BRP.4+8 BRP.3+4 BRP.2+2 BRP.1+BRP.0+1) 这里 tCLK =XTAL 的频率周期=1/fXTAL(Sja1000内部频率基准源F_BASE = Fclk2,即外部晶振频率Fclk的2分频。注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的。)一

9、个位时间(位速率就是其倒数):如下图:tSYNCSEG=1*tSCL (固定长度)tTSEG1=tSCL*(8 TSEG1.3+4 TSEG1.2+2 TSEG1.1+TSEG1.0+1)tTSEG2=tSCL*(4 TSEG2.2+2 TSEG2.1+TSEG2.1+1)同步跳转宽度(sjw)定义了每一位周期可以被重新同步缩短或延长的时钟周期的最大数目:tSJW=tSCL (2 SJW.1+SJW.0+1)【总结】:就以上关系式来看,首先可以设定一个位周期由几个段组成,这样1/((TEG1+TEG2+1)*tSCL)=1/tBit=波特率(注意TEG的值是十六进制换算后加1,见上表)其中tS

10、CL=2tCLK*BRP(tCLK为sja1000外部晶振)(同上,BRP也是换算后加1),由此可由指定波特率及给定can总线频率去定BRP及TEG的设定。问题在于:不知道TEG(即相位缓冲段)的分配不同有何影响,和同步跳转宽度设定的实际意义。查找资料得出,以上的计算是理论值。“在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以 更好的解决这些问题。这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN 的波特率实际上有一个范围:

11、1/(Tbit+Tsjw) CANbps1/(Tbit-Tsjw)”“而 TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。其中 TSEG1用来调整数据传输延迟时间造成的误差,而TSEG2则用来调整不同点节点晶体频率的误差。但是他们由于过于灵活,而使初次接触CAN的人有点无 所适从。TSEG1与TSEG2的是分大体遵循以下规则: Tseg2Tscl2,Tseg22TSJW,Tseg1Tseg2”/u3/93821/showart_.html【举例说明】:外部

12、晶振24M 要求波特率133k,can总线频率1.33M(时间冲量长度751.87ns),同步跳转宽度3,时间段1长度为6,时间段2长度为3,每位采样一次。显然这是一个位周期十个段的,可设置好TEG1 TEG2 及TJW 和SAW,接下来就是计算BRP。根据tBit/10=2tCLK*BRP得BRP=fClk/(2*10fBit)=24/(2*10*1.33)验收代码及验收屏蔽寄存器(ACR、AMR)满足 ID.10-ID.3=AC.7-AC.0 |AM.7-AM.0= 方程的即可接收。命令寄存器 CMR(PeliCAN模式下没有这个寄存器)一般情况:执行读取命令-0x04,即释放接收缓冲器。

13、读接收缓冲器之后 CPU 可以通过设置释放接收缓冲器位为 1 来释放 RXFIFO 的内存空间,这样就会导致接收缓冲器内的另一条信息立即有效,如果没有其它有用的信息,就复位接收中断执行写入命令0x01,即发送请求位置1.可通过CMR.1中止发送位置1取消发送;控制寄存器(CR)(PeliCAN模式下没有这个寄存器)0x01进入复位模式。进入工作模式要将CR.0置0, 复位请求位接收到一个下降沿后,SJA1000回到工作模式。该寄存器还设置使能中断等位,详见datasheet。ps: CAN协议规定的最小时间128 个总线空闲信号(总线空闲信号是什么?)中断寄存器(IR)中断寄存器中我们主要关注接收中断RI-接收FIFO不空且中断寄存器的RIE位被置位时此位被置1。注意,CPU读中断寄存器的时候,除了接收中断外的所有位都被复

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论