当前位置:首页 > ARM学习笔记
CPU与NOR flash相接,因为pc需要的若为32位的数据,则nor flash里存储的数据是由0x00到0x03的内容读出,下一个数据从0x04开始,而地址总线的addr0和addr1永远为0,所以就在cpu和nor flash里有了约定,不再需要最低两位的数据,在nor flash也不需要自己的addr0与addr1脚.CPU的addr2与flash的addr0相接即可.(注意区分8位数据,16位数据)P193最末
SRAM在途中也有规定地址
0x4800 0000~0x6000 0000专门留给外设的SFR用的
OM[1:0]由两个位组成.我们的板子OM1直接通过0欧电阻短路到了地,不用NAND flash引导,OM内的组合为01或10[用于板子设计,10组合不可能实现],也就是nor flash引导的,所以我们板子上插上跳线帽,则OM0也为0,则为NAND flash引导,看原理图P3左中部分,OM1,0的的模式作用在P193,我们用的是16位的nor flash
使用nor flash引导,nor flash与nand flash看P192的区别. S 价格 读取速度 写入速度 容量 访问方式 nor 高 快 慢 一般16m以内,不能做大 并行访问(说明有自己独立的3大总线)在4个G内,占用了固定的空间bank0,将SRAM映射到0x4000 0000~0x4000 0FFF 低 慢 快 能达到32m以上 串行访问,不参加4个G的范围内,必须借助nand flash控制器,间接的访问flash()若CPU上电时检测到OM为00组合,不会先执行代码,而是三星提供的固件程序通过操作flash控制器,搬移nand flash前面4k的内容到0x00的SRAM内,将SRAM映射到0x00地址,将PC指向0x00地址,在这段控制代码中,实现的功能是将NAND FLASH到SDRAM中(内核压缩一般2M,到SDRAM后解压4M) P204
BWSCON存储器的控制寄存器
DW0:bank0的数据宽度,16bit或32bit,并且是由OM[1:0]位来选择,而不是编程改变,
是readonly
DW1:对bank1的数据宽度
WS1:bank1的等待周期,因为bank存储器访问很慢,设置要不要等待,一般选择是等待,是存储器控制CPU,因为访问时间是存储器知道的 ST1:控制总线的特定时序 bank2………7
BANKCON0~5有专门的特殊寄存器
BANKCON6~7也是特殊的,因为他们还能接SDRAM
3大总线:数据,地址,控制总线
PWM timer:
CPU内部有5个16位的定时器,0,1,2,3分别具有脉冲宽度调制功能(PWM),4不能用来产生PWM,timer0具有死区发生器,可以用于大电流的器件,否则不能控制大电流器件的. timer0,1共享8位的预分频器,P284,但是分频位却是独立的,不要被图所误导.输出管脚与GPIO共用的.
timer2,3,4共享另外一个8位的预分频器.
在定时器计数缓冲寄存器(TCNTBn)中有一个初始值,当定时器使能后,这个值就被装载到递减计数器中.而在定时器比较缓冲寄存器(TCMPBn)中也有一个初始值,这一值被装载到比较寄存器中,用来与递减计数器进行比较(当等于比较寄存器中的值时,电平发生反转,当计数器的值变为0时,会再次进行反转).这两个缓冲器使得在频率和占空比发生改变时仍能产生一个稳定的输出.
2012-2-15
网卡也占用了4个G的固定寻址范围,原理图P3 CS8900A 占用了nGCS3,Kiel(Ulink)不支持NAND Flash的烧写与仿真
接PWM
赋值方式,读,改,写,对SFR的改写推荐使用此方法 TCFG0:配置两个8位预分频器,P307
Timer input clock Frequency = Pclk / (预分频+1) / (分频) TCFG1:管理5个timer的分频器的. TCON:timer的控制寄存器
0启动或停止位,1启动
1手动更新位,1手动更新TCNTB0与TCMPB0,第一次使用时必须写1 2反转位,起始电平,0为默认状态,是高电平,1为反转,起始值为低电平 3自动装载位,1自动装载 4timer0独有,死区使能位
死区P305,电平跳变的一瞬间,有一个高阻态.用来避免三级管在(截止区?放大区?饱和导通区)切换状态时避免进入放大区.
DMA控制器对单总线的CPU没有什么优势.因为DMA虽然不占用CPU的时间,但是会占用总线(总线是若干条线组成),内核虽然闲着,但是因为总线在被占用,闲着依然是闲着,现在有分层的矩阵式总线,DMA与CPU工作使用总线可以并发的进行.
电磁铁是个线圈,是个电感,有很强的电感特性,在截止时有反电势产生,对IO口放电,有可能把IO口烧坏,三极管做隔离作用,
中断:
有子中断的中断源:从SUBSRCPND(子中断源挂起中断寄存器)P379,0表示没有中断请求,为1则有中断,1是外设置一.对应位对应相应的中断
无子中断:外中断(从硅片的角度),给特定电平就会触发,从SRCPND开始提交
SUBSRCPND:在中断处理函数之后需要对对应位写1,来清除状态,带PND结尾的SFR都是对对应位写1清除,一般是在中断处理函数结束前,否则会再次进入中断处理函数. 0~2:2为串口错误中断,即若奇偶校验不符,则产生此中断 9~10:9TC为触摸屏中断,10为普通AD中断
SUBMSK:中断屏蔽寄存器,位数与SUBSRCPND一一对应,0表示中断服务可用,1表示中断服务被屏蔽掉的,但是SUBSRCPND依然会被置1,给程序员检测.此时仅仅起标识作用.默认的复位值全高
SRCPND:与SUBSRPND基本相同,总共有24个外中断段,串口0中断在SUBSRCPND也有,在里边才能区别是哪种类型的中断,而在SRCPND里只有1位,不能区分.P369 INTMSK:P372,类似SUBMASK,同样与SRCPND一一对应,默认的复位值为全高
INTMOD:这个寄存器只有1个位能被置为1,0为IRQ,1为FIQ,设为1后,则优先级选择寄存器(PRIORITY)不再能管理对应的中断,优先级寄存器只能管理IRQ中断,而设置FIQ后此中断不再经过优先级.
PRIORITY:P374,分为了6个小组,第0号小组的中断高于其他的所有中断, ARB_SEL6 [20:19]管理小组间优先级的位. [18:7]位为管理组内的优先级
INTPND:0表示无中断产生,1表示有中断产生,是离内核最近的中断管理寄存器,只能有1个位被置一,这个位是由PRIORITY寄存器仲裁后得到的唯一能执行的中断,依然写1清除 清楚寄存器的过程必须从源头开始清,这个规定是与我们用的三星芯片相关的,也就是从SUBSRCPND,是不能打乱的
2410的外中断有几种触发方式: 低电平 高电平 下降沿 上升沿 双边沿
通过设置SFR来5选1,我们板子的设计决定了高电平是不能用来触发中断的
GPFCON,GPF0可作为外中断0 P284 GPGCON,GPG3可作为外中断11 P285
GPECON把列线清0,查原理图知道KSCAN0对应GPE11,设为输出,GPEDAT对应位写0
EINTPEND:用来区别4~7,8~23是哪一个中断,P295,外部中断挂起寄存器,写全高清0(没听),是属于外中断源自己的子中断管理寄存器,所以进到外中断程序处理之后,要从这个源开始复位
EXTINT0(0~2):外中断的触发方式P290,
EINTMASK:里边没有的表示直接对核内负责,有的对应位为外中断管理位.
pISR_EINT0 是
0x33ffff00:位于SDRAM,nGCS6的最顶端,把一个函数名(函数的入口地址,就如汇编语言的标号),将函数的入口地址放入了宏表示的地址内.
IF IntVT_SETUP <>1 不等于1
IF IntVT_SETUP <>0 不等于0,预编译,(在之前的代码有EQU为1) IRQ_Entry:
sub sp,sp,#4 将sp-4,向下走
stmfd sp!,{r8-r9} 满减栈,再向下走,R9先入栈,最后SP指向R8
ldr r9,=INTOFFSET 0x4A000014,这是一个INTOFFSET寄存器的地址P364,中断偏移寄存器,当有外设提出中断请求,此寄存器内就会出现不同的值,并且这些值是10进制的,
ldr r9,[r9] 将此寄存器的值取出
ldr r8,=HandleEINT0 也就是将R8赋值为0x33ffff00
add r8,r8,r9,lsl #2 讲R9的值左移两位后,加R8并保存到R8中,这是为了字对齐,因为通过INTOFFSET得到的哪个外设提出的中断,然后把此值左移两位,保证每个中断号都能对应一个4字节的地址,这个地址可以放如一个对应的入口地址 ldr r8,[r8] 读取此地址内存放的入口程序地址到R8 str r8,[sp,#8] 存入SP中R9的高位地址
ldmfd sp!,{r8-r9,pc}还原原来的r8,r9,并跳转到对应的中断入口函数 ?sp ?sp R9 ?sp R9 R8 ?sp 入口 R9 R8 ?sp
此处使用的是非向量中断
2012-2-16
在键盘扫描程序编写的时候,了解到,端口本身有上拉电阻可以被配置,没有输入时为高电平,也就是原理图上边自己硬件电路添加的上拉电阻部分可以去掉.
串口,提供了3个独立的异步的收发串口,每个口都能工作与中断或DMA,串口可以产生
共分享92篇相关文档