我在手册上看到,HPI可以访问全部的RAM空间。但是我用HPI读写DSP内容DARAM,OX80~0X7FFF地址范围内能够进行正确的读写,超过0X8000读出错,PMST配置的0x7fa8,DROM=1,OVLY=1,MP/MC=0.请大家指点
Shine:
0X8000这块地址是Reserved,不能访问,请参考数据手册上的Figure 3-9. HPI Memory Map
www.ti.com/…/tms320vc5416.pdf
,
user6535822:
谢谢,我设置DROM=1,将DARAM4~7映射到0X8000~0XFFFF了;0X18000~0X1FFFF也用的物理存储器DARAM4~7,也就不能用了对吗?我访问0X18000~0X1FFFF也出错
,
Shine:
HPI Memory Map是HPI能访问的memory空间,和设不设置DROM没有关系。
,
user6535822:
那我为什么都写0X18000~0X1FFFF出错或者0X28000~0X2FFFF.第二个问题我如果设置了DROM=1和MP/MC=0,那么具体哪个物理内存映射到0X18000~~0X1FFFF.
,
Shine:
这个是针对HPI能访问的DSP memory空间,改DROM,是DSP内核能访问的DSP memory空间,两个概念不一样。
,
user6535822:
基本知道了,也就是我可以继续用HPI访问0X18000~0X1FFFF是吗?。但是我试着访问了,读出来数据是错误的。但是我读写0x8000以内的都正确呀。用HPI加载程序也能正常运行。谢谢,我最近查了好多资料不知道怎么解决。
,
Shine:
请看一下访问0x18000时,XPC寄存器值是否为1指向page1。
,
user6535822:
XPC寄存器查看的方法能告诉我吗?我加载程序用的也是HPI加载,可以加载0x28000~0x2ffff.内存分配如下
MEMORY CONFIGURATION name origin length used attr fill
———————- ——– ——— ——– —- ——–PAGE 0: IPROG 00006000 00001f80 00000b79 RWIX VECT 00007f80 00000080 00000080 RWIX EPROG 00018000 00008000 00000000 RWIX IPEOG2 00028000 00008000 00001fae RWIX IPROG3 00038000 00008000 00000000 RWIX
PAGE 1: USERREGS 00000060 0000001a 00000000 RWIX CSLREGS 0000007a 00000002 00000000 RWIX BIOSREGS 0000007c 00000004 00000004 RWIX IDATA 00000100 00005e00 00005d18 RWIX MYREGS 00005f00 00000100 000000fa RWIX EDATA 00008000 00008000 00005cda RWIX
,
Shine:
This register is memory-mapped into data space to address 001Eh. At a hardware reset, the XPC is initialized to 0.
,
user6535822:
这个我在手册上能查到,谢谢。但是我在用主机HPI访问时,如何能看到XPC值,我给HPIA[n:16]送的值是否就付给XPC了。
我再有个疑问如果我寄存器配置DROM=1,DSP访问时地址DARAM4~7,是0X8000~0XFFFF,而用HPI访问时DARAM4~7,地址是否是0X18000~1FFFF了,MP/MC=0;希望得到肯定的意见
,
Shine:
要配置HPIC寄存器里的XHPIA,HPIA寄存器的值才会送HPIA[n:16]。请参考下面的手册Figure 5−3. HPIC Register。
www.ti.com.cn/…/spru302b.pdf我的理解是,0X8000~0XFFFF和0X18000~1FFFF映射到同一块DARAM4~7物理地址。
,
user6535822:
我配置了,地址分两次配置。HPIC赋值0x10,写HPIA[n:16]也就是页地址,HPIC赋值0x00写HPIA[15:0]。BSCR配置的是0X8002,还需要配置那个寄存器?谢谢您
,
Shine:
写HPIA[n:16]页地址时,HPIC应该赋值0x20。
,
user6535822:
HPIC寄存器 XHPIA,是第4位,为什么是0x20;我换了一块DSP板,赋值0X10可以读写;0xx18000~0x1fff;正在查找这一块为什么出错的原因,您有什么好办法吗?
,
Shine:
您用的是HPI8模式是吗?这个模式XHPIA是第4位。HPI16模式是第5位。
建议比较一下两块板子的HPI写时序是否一样。
,
user6535822:
是的我用的HPI8,示波器查看吗?还是有其它的方法,我主机程序都是一样,电路也是一样的。对了0X18000配置成CODE还是DATA;有区别吗
,
Shine:
对的,用示波器查看一下。没什么区别。
,
user6535822:
谢谢,我用示波器查看一下!不过奇怪的事我用HPI加载后,程序都能正常运行~就是读写存储器不正常
,
Shine:
请问程序是通过HPI口加载到0x18000这块memory后运行的?
,
user6535822:
没有,有部分代码是加载到0X28000这块memory后运行的。
,
Shine:
看一下程序能加载到0x18000这块memory么?
,
user6535822:
我是用DSP/BIOS编程的,Memory设置了数据和程序空间,编译完成后map表的程序空间自动将程序分配给了0X28000;所以主机加载的时候只能按照map表定义的地址加载。如何改编译器的程序地址我不会,能提供方法吗?谢谢
,
Shine:
请使用#pragma CODE_SECTION (symbol, ”section name”) 伪指令把段定义到指定的memory。
reverse.0cpm.org/…/spru103g.pdf
如在c文件中定义
#pragma CODE_SECTION(funcA, ”codeA”)
int funcA(int a)
{
int i;
return (i = a);
}在cmd文件中,把codeA段定义到指定的RAM。