首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教:关于地址数据总线扩展的问题?

请教:关于地址数据总线扩展的问题?

请教:关于地址数据总线扩展的问题?
请问(MC9S12H256):我想利用地址数据总线复用口进行I/O口的扩展,如加一片8155扩展I/O口,或者是加一片8019扩展一个网卡之类的,我在CODE WARRIOR中应该怎样声明?这样的话在MEMORY MAP中是映射在那里呢?
TX
总的来说,只要配置MODA, MODB和MODC的电平,就能使芯片复位后进入扩展模式,数据和地址总线即可扩展出来。另外,要在PRM文件中定义扩展空间的地址。对于CodeWarrior来说,不需要再作特别的声明。至于Memory Map的映射,请参见《S12MMCV4.PDF》的第12页。
海纳百川  有容乃大
多谢版主。对于PRM文件一点也不懂。每一个都是用CodeWarrior的向导来建的工程的,从来就没有修改过PRM文件。
麻烦版主解释下PRM文件的作用?该怎么个改?
能不能举个例子讲讲?
PRM文件其实很简单,你把CodeWarrior自动生成的PRM文件仔细看一下就会明白了。比如你要扩展外部存储区,只需将你要扩展的地址加到PRM文件中即可,可以是read only,也可以是read-write,根据你扩展的存储芯片类型来定。
海纳百川  有容乃大
NAMES END

SEGMENTS
    RAM = READ_WRITE 0x1000 TO 0x3FFF;
    /* unbanked FLASH ROM */
    ROM_4000 = READ_ONLY  0x4000 TO 0x7FFF;
    ROM_C000 = READ_ONLY  0xC000 TO 0xFEFF;
    /* banked FLASH ROM */
    PAGE_30 = READ_ONLY  0x308000 TO 0x30BFFF;
    PAGE_31 = READ_ONLY  0x318000 TO 0x31BFFF;
    PAGE_32 = READ_ONLY  0x328000 TO 0x32BFFF;
    PAGE_33 = READ_ONLY  0x338000 TO 0x33BFFF;
    PAGE_34 = READ_ONLY  0x348000 TO 0x34BFFF;
    PAGE_35 = READ_ONLY  0x358000 TO 0x35BFFF;
    PAGE_36 = READ_ONLY  0x368000 TO 0x36BFFF;
    PAGE_37 = READ_ONLY  0x378000 TO 0x37BFFF;
    PAGE_38 = READ_ONLY  0x388000 TO 0x38BFFF;
    PAGE_39 = READ_ONLY  0x398000 TO 0x39BFFF;
    PAGE_3A = READ_ONLY  0x3A8000 TO 0x3ABFFF;
    PAGE_3B = READ_ONLY  0x3B8000 TO 0x3BBFFF;
    PAGE_3C = READ_ONLY  0x3C8000 TO 0x3CBFFF;
    PAGE_3D = READ_ONLY  0x3D8000 TO 0x3DBFFF;
/*    PAGE_3E = READ_ONLY  0x3E8000 TO 0x3EBFFF; not used: equivalent to ROM_4000 */
/*    PAGE_3F = READ_ONLY  0x3F8000 TO 0x3FBFFF; not used: equivalent to ROM_C000 */
END

PLACEMENT
    _PRESTART,                   /* Used in HIWARE format: jump to _Startup at the code start */
    STARTUP,                     /* startup data structures */
    ROM_VAR,                     /* constant variables */
    STRINGS,                     /* string literals */
    VIRTUAL_TABLE_SEGMENT,       /* C++ virtual table segment */
    NON_BANKED,                  /* runtime routines which must not be banked */
    COPY                         /* copy down information: how to initialize variables */
                                 /* in case you want to use ROM_4000 here as well, make sure
                                    that all files (incl. library files) are compiled with the
                                    option: -OnB=b */
                                 INTO  ROM_C000/*, ROM_4000*/;
    DEFAULT_ROM                  INTO  PAGE_30,PAGE_31,PAGE_32,PAGE_33,PAGE_34,PAGE_35,PAGE_36,PAGE_37,
                                       PAGE_38,PAGE_39,PAGE_3A,PAGE_3B,PAGE_3C,PAGE_3D;
    DEFAULT_RAM                  INTO  RAM;
END

STACKSIZE 0x100

VECTOR 0 _Startup /* reset vector: this is the default entry point for a C/C++ application. */
//VECTOR 0 Entry  /* reset vector: this is the default entry point for a Assembly application. */
//INIT Entry      /* for assembly applications: that this is as well the initialisation entry point */


多谢版主。上面是CodeWarrior自动生成的PRM文件,现在我想地址线全为0的时候选定我的外围芯片的一个寄存器A,地址线最低位为1其它位为0的时候选定我的外围芯片的一个寄存器B。两个寄存器都是可以读写的,我现在想在CodeWarrior里写程序访问这两个寄存器。
我应该怎么改?我不知道该把这两个地址安排在那个部分?
也就是说影射在MEMORY的哪里?多谢!
建议你先看看这两个文档:

AN2287_HCS12 External Bus Design
AN2408_Examples of HCS12 External Bus Design
海纳百川  有容乃大
返回列表