这几天在学习arm芯片,s3c2410.我把我学到的知识,条理理顺一下。仅记录了我学习的点点滴滴,若有不对的地方,请各位提出来,本人不胜感激,先谢谢各位了。
1.存储控制器
s3c2410的地址空间为1GB,而只有ADDR0~ADDR26这27根地址线,它的寻址范围是128M.所以就提供了8根片选信号nGCS0~nGCS7,当访问0~128M-1的空间时,nGCS0为低电平。其他的类推,就达到了访问空间为1GB。这128M空间就是一个Bank,所以有8个Bank。对于Bank0~Bank5都比较好连接,而Bank6~Bank7的连接稍微复杂一些,常用来连接SDRAM。s3c2410提供了一些引脚来连接SDRAM,如时钟有效信号SCKE,时钟信号SCLK0、SCLK1,片选信号nSCS0(与nGCS6相连),行列地址选通脉冲信号,写使能信号等。对于SDRAM的访问,首先得使nSCS0有效,SDRAM中有4个Bank,所以需要两个地址线来进行选择。SDRAM是一个存储阵列,只要知道了多少行,多少列就可以访问了。在设置了相关的寄存器之后,S3C2410就会自动分出Bank选择信号,行地址信号,列地址信号。行列地址信号是通过行列地址选通脉冲信号来区分的。找到了地址,就可以通过32根数据线进行数据传输了。
2.UART(通用异步收发器)
UART用来传输串行数据,它的传输原理是:平时数据线处于空闲状态(1状态),当要传输数据时,拉低数据线变为0状态,保持一位的时间,接收方就可检测到此起始位。之后发送数据位,从低位到高位,发送的位数是可编程的(5、6、7、8位),之后就是发送校验位(也是可编程的,是否发送,是奇校验还是偶校验),最后就是停止位1,保持一位或者两位的时间。S3c2410的UART与此类似,要传输数据,必须要设置选择时钟源、波特率、传输格式(几位传输、是否校验,奇校验还是偶校验,停止位,是否使用停止位),还要设置是否使用FIFO模式。数据传输怎么知道是否传输完成,所以就提供了UCONn寄存器,设置发送模式,接受模式,中断模式等。还有一些状态寄存器可以读了解当前状态,错误中断等。
3.s3c2410的时钟体系
S3c2410的时钟控制逻辑既可以外接晶振,然后通过内部电路产生时钟源;也可以直接使用外部提供的时钟源。他们通过引脚的选择来设置(OM[3:2])。时钟控制逻辑给CPU提供了三种时钟,FCLK、HCLK、PCLK.
FCLK用于CPU核,HCLK用于AHB总线上的设备,PCLK用于APB总线上的设备。通常都是外接晶振频率比较低的
晶振,通过PLL提高系统时钟。在上电时,PLL没有启动,FCLK的频率等于外部输入的时钟。在nRESET信号恢复高电平后,CPU开始执行指令,在程序在开头处,设置MPLL的几个寄存器后,需要等待LOCKTIME时间之后,MPLL的输出才稳定,而LOCKTIME等待的时间是可以设置的。需要设置的寄存器有MPLLCON(main pll
control)。主要是设置FCLK与外接晶振的关系。CLKDIVN用于设置FCLK、HCLK、PCLK的关系。当CLKDIVN的HDIVN非0时,CPU总线模式应该从“fast bus mode”变为“asynchronous bus mode”
4.PWM定时器
s3c2410共有5个16位的定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。在程序开始处,设定TCMPBn和TCNTBn这两个寄存器的值,表示定时器n的初始计数值和比较值。启动定时器,在定时器n的时钟频率下,开始减一计数。他的值可以通过TCNTOn寄存器得知。当TCMPn和TCNTn的值相等时,定时器输出引脚反转,TCNTn继续减一计数,当等于0时,并触发定时器n中断(若使能的话)。若设置有自动加载的话,就可以自动的把TCMPBn和TCNTBn的值再次加载进内部的TCMPn和TCNTn的寄存器。从上面可以知道,若频率和TCNTBn的值定了,则这个定时器产生的波形的周期就一定了,而TCMPBn的值是调节脉宽的。总结一下定时器的使用方法:1.得设置TCFG0和TCFG1寄存器,用来设置定时器的工作频率。2.设置TCMPBn和TCNTBn的值,3.设置TCON寄存器,用来设置启动和停止定时器,输出是否反转,是否自动加载,手动更新。
阅读(1837) | 评论(2) | 转发(0) |