打印

TMS320C5402的I/O口存储空间

[复制链接]
2221|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinhuaH|  楼主 | 2012-12-17 18:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
TMS320C5402的I/O口存储空间是怎么寻址的啊?下面是我用的TMS320C5402的板子的部分电路图,

其中U17是74LS244,U16是74LS273,N15是XILIMX XC9536(复杂的可编程逻辑器件),D0到D7接的是DSP的D0到D7口
I/O口的实验程序如下:
.mmregs
        .global        _main
        .text
_main:
        stm                3100h,sp
        stm                1000h,ar1  ;define the address
        portr        8000h,*ar1   
        nop
        nop

        portw        *ar1,8001h
        nop
        nop     
    b                 _main
    nop
    nop   
    .end


CMD文件内容如下:
MEMORY
{
    PAGE 0: PROG:      origin = 0x2000,          len = 0x980
    PAGE 1: DATA:      origin = 0x2a00,        len = 0x0300
}
SECTIONS
{
    .text:    {} > PROG PAGE 0
    .cinit:   {} > PROG PAGE 0
    .switch:  {} > PROG PAGE 0
    .bss:     {} > DATA PAGE 1
    .const:   {} > DATA PAGE 1
    .sysmem:  {} > DATA PAGE 1
    .stack:   {} > DATA PAGE 1
    .data:    {} > DATA PAGE 1
}


请问各位:I/O口是怎么寻址的啊?谢谢。


相关帖子

沙发
jlass| | 2012-12-17 19:29 | 只看该作者
本帖最后由 jlass 于 2012-12-17 19:35 编辑

可能是代码的问题,你把ar1的结果写出来,我明天给你看一下

使用特权

评论回复
板凳
xinhuaH|  楼主 | 2012-12-17 20:52 | 只看该作者
jlass 发表于 2012-12-17 19:29
可能是代码的问题,你把ar1的结果写出来,我明天给你看一下

ar1=1000h,地址1000h里面的值是和8个开关的电平值一致的。
下面是CCS上截取的数据

谢谢啦!

使用特权

评论回复
地板
jlass| | 2012-12-18 09:12 | 只看该作者
地址1000h里面的值是和8个开关的电平值一致的

这不就对了吗?你的问题是什么?

使用特权

评论回复
5
xinhuaH|  楼主 | 2012-12-18 11:36 | 只看该作者
jlass 发表于 2012-12-17 19:29
可能是代码的问题,你把ar1的结果写出来,我明天给你看一下

我的问题是:U16和U17接的都是D0—D7,为什么读I/O口的时候,读的地址是8000h,而在写I/O口的时候,写的地址却是8001h,我觉得应该都是8000h或者都是8001h,所以我想问一下:I/O口的地址是怎么确定的?谢谢。

使用特权

评论回复
6
jlass| | 2012-12-18 12:38 | 只看该作者
本帖最后由 jlass 于 2012-12-18 12:52 编辑

你又没有外接设备,写什么地址都是一样的,无论是8000h,8001h结果都是操作D0~D7。
另外:你的图不全,我不好判断,如果你的程序读操作时必须是8000h,而写时必须是8001h,很可能是地址线A0被当做读写的判断线了。

使用特权

评论回复
7
xinhuaH|  楼主 | 2012-12-19 10:06 | 只看该作者
jlass 发表于 2012-12-18 12:38
你又没有外接设备,写什么地址都是一样的,无论是8000h,8001h结果都是操作D0~D7。
另外:你的图不 ...

多谢大哥指教,小弟这才明白。
D0-D15是数据口,如果你的数据是8位的,那么你无论写到哪个地址去,有效的位都是D0-D7;如果你的数据是16位的,那么无论写到哪个地址去,有效的位都是D0-D15。下面是部分电路图


CPLD控制着什么时候选通74LS244和74LS273,也就是控制着在哪个地址对I/O口进行操作。
那么照这么说,外部的程序存储器和I/O寻址空间共用着相同范围的地址空间。不知我的理解对不对?

使用特权

评论回复
8
jlass| | 2012-12-19 13:06 | 只看该作者
本帖最后由 jlass 于 2012-12-19 15:47 编辑

你这么理解也行
外部的程序存储器需要你在空间分配时,配置成外部空间才行
D0~D15引脚的数据,只要调用portr就可以取到,地址随便写,理论上0~ffff都可以

使用特权

评论回复
9
xinhuaH|  楼主 | 2012-12-19 20:29 | 只看该作者
jlass 发表于 2012-12-19 13:06
你这么理解也行
外部的程序存储器需要你在空间分配时,配置成外部空间才行
D0~D15引脚的数据,只要 ...

多谢指教。

上面的是TMS320C5402的内存分布图,我对你所说的“配置成外部空间”是这样理解的:
①假如说我要将某个内容写到地址为0X0080—0X4000的空间,且要将它写在外部存储器,那么我就得将OVLY1
②假如说我要将某个内容写到地址为0X4000—0XEFFF的空间,且要将它写在外部存储器,这个时候我不需要特殊的配置,因为地址为0X4000—0XEFFF的空间本身就是外部空间。
请问这样理解对吗?

使用特权

评论回复
10
jlass| | 2012-12-20 08:25 | 只看该作者
本帖最后由 jlass 于 2012-12-20 08:29 编辑

1、看仔细了,OVLY=0
2、正确

使用特权

评论回复
11
xinhuaH|  楼主 | 2012-12-20 10:06 | 只看该作者
jlass 发表于 2012-12-20 08:25
1、看仔细了,OVLY=0
2、正确

哦,谢谢:P

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

60

帖子

0

粉丝