这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 一些分析=经验,有误端请指正

共2条 1/1 1 跳转至

一些分析=经验,有误端请指正

工程师
2014-12-19 20:40:47     打赏

看了几天的2407,也做了点实验,给象我一样的初学者一点建议和东西。
 1、首先,请注意2407的架构,64K的程序,数据和I/O口独立寻址,关于程序就是内置32K和外扩32K,关于数据就是也同样是内置32K和外扩32K,但数据区有一点区别:内置的32K有很多不连续的非法区,就是说真正可以访问的只有3K不到,并且是非连续分布的,那I/O口呢?!只是对自己本身芯片已有的I/O口进行了控制罢了,比如A,B,C,D,E,F口而已,如果你要外扩也可,如果外扩的话,如果和芯片本身的I/O口地址重叠的话(如A口,B口等等),那到底是对内先还是对外先(这个我没有做过实验,但一般理解是对内优先了,如果你知道,望告之,谢谢!!)
-----说明一点:访问片内的外设和片外的外设,其指令是不同的。访问片外的外设有专门的指令IN和OUT,使用IN和OUT指令时,/IS引脚有效;如果访问的是片内的外设,则/IS引脚无效。因此,可以用/IS来做为片外外设的片选信号。得到的结论就是:不存在避开片内数据寄存器所映射的那些I/O空间的问题,也不存在先后问题。

 2、其次,是关于CMD文件,结构我就不说了,自己看了,找个例子就知道了,TI是对段编程的,也就是说,第-部分说明了你可以使用的环境资源,比如程序区在哪儿,数据区在哪儿等等,如果你编写了并不存在的可以使用的资源,那当你下载或编程(请注意下载RAM和编程FLASH在我表达中的意思)的时候肯定会出错,还有常见的错误是用编程的地址却在下载,那当然是不可行的了,数据是写不进去的了,只有编程才行(需要提醒的是,在下载和编程时地址时唯一的,和你后来到0000H中来运行还是8000H开始运行,那是你后来程序与系统在下载和编程完之后才去做重定位或影射的事,因为没有你先前的下载或编程,就根本没有或谈不上后来的重定位或映射。

 3、再次,是关于程序在RAM中运行的问题。如果你没有注意硬件的信号,PS,DS,IS的话,那请你注意了。。。在外扩的RAM中,往往将PS和DS都做为RAM的选通信号,这样就是说对外扩的FLASH和外扩数据区的操作其实都是对同个RAM的操作,还有可以通过对管脚MC的操控来选择内部FLASH还是外部RAM做为程序“FLASH”,其实说这么多是为了让我们大家明白其中的机理,也就是说实际8000H的程序区和8000H的数据区是重叠了,这样就可以下载了。你只要在0000H的FLASH中先写入中断向量表,我的是对应跳转到8000H开始的单元中,这样不论你的MC是0还是1,应该都没关系了,因为当你是0时,从FLASH中跳到8000H中,再跳进入程序,如是1时,则从8000H直接跳进入程序(再说明一下,从FLASH角度8000H就是0000H,MC=1。从数据区的角度8000H仍是8000H。虽然是同个RAM,PSH和DS都是片选指向同个RAM。),就说这么多了,看了这些,和我一样应该可以比较顺利点入门了。
-----仔细看过TI的说明书便可以知道,无论MP/MC为何值,2407都是从程序存储器的0000H单元读取复位向量的。若MP/MC=0,直接从片内FLASH 0000H处读取复位向量,若MP/MC=1,也是从片内FLASH 0000H处读取复位向量,但此时必须在0000H处安排跳转到片外RAM 8000H处的指令,然后程序才从8000H处开始执行。当然,程序烧写的时候,CMD文件必须将程序的下载地址定位在8000H开始的地方。
    ---另外要说明的一个问题是,因为程序寄存器的8000H-87FFH空间是映射SARAM的空间的。因此,CMD编写时,最好避开这一区间,免得SARAM有部分空间不可用。多用View/Memory和EDIT/Memory/FILL这两个功能,对问题的理解是有帮助的,CCS很强大的说,呵呵!
    这些都是我的个人见解,希望对大家有点帮助。这两天被这个东西弄得头疼,有交流才有进步,大家一起努力!


院士
2014-12-19 21:18:41     打赏
2楼
字太小,看起来好吃力,过几天再看。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]