cb615cb
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-01-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1504回复:4

通过PCI2040对DSP:5409的程序上载问题

楼主#
更多 发布于:2003-08-03 16:46
各位大侠,我在做PCI2040与DSP5409的数据采集卡,可是现在我的程序怎么也无法加载上去,请各位集思广益,给点意见想法帮帮忙!谢谢。
部分相关程序如下:
(其中调用程序传输的是32位数据,但是只有低16位有效,是通过CCS EVM中的save memory data得到.dat数据的。且在我的测试中从DSP读取数据,发现所有数据均写入DSP。DSP程序起始地址:0x1000。)
ULONG    *pBuffer = NULL;
USHORT     StartPos = 0;
ULONG     wLength = 0 ;
pBuffer = (PULONG)I.IoctlBuffer();

// HRST0#产生中断,使对应的DSP复位
m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_rst_OFFSET,0x0001);
// HPIError报告,若错误发生,则置位中断寄存器的第30位,产生中断,与默认一致
m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_err_rpt_OFFSET,0x0000);
// 选择DSP0
m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_dsp_impl_OFFSET,0x0001);
// 为54X,位宽为8位,与默认情况一致,没有必要但保留
m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_data_width_OFFSET,0x0000);
// 设置没有中断事件,与默认情况一致,没有必要但保留
m_Hpi_Csr_MemoryRange.outd(PCI_Irp_event_set_OFFSET,0x00000000);
// 关闭中断事件,与默认情况一致,没有必要但保留
m_Hpi_Csr_MemoryRange.outd(PCI_Irp_event_clr_OFFSET,0x00000001);
// 复位时不设置中断,与默认情况一致,没有必要但保留
m_Hpi_Csr_MemoryRange.outd(PCI_Irp_msk_set_OFFSET,0x00000000);
// 关闭所有可能的中断,包括31位:总开关;30位:HPIError;0位:IntDSP0;
m_Hpi_Csr_MemoryRange.outd(PCI_Irp_msk_clr_OFFSET,0x00000001);

//延时等待稳定
_asm{
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
}
m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_rst_OFFSET,0x0000);
_asm{
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
}
wLength  = I.IoctlInputBufferSize(); //单位为字节
StartPos = 0x1000; //中断向量首地址


m_Ctl_MemoryRange.outw(PCI_DSP_HPIC_OFFSET,0x0101);

m_Ctl_MemoryRange.outw(PCI_DSP_HPIA_OFFSET,(StartPos-1));

for(USHORT i=0;i<wLength/4;i++)
{
m_Ctl_MemoryRange.outw(PCI_DSP_HPID0_OFFSET,(USHORT)pBuffer);

}

m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_rst_OFFSET,0x0001); // 再次复位

Delay();//100cycles
m_Hpi_Csr_MemoryRange.outw(PCI_Hpi_rst_OFFSET,0x0000); // 再次置位
m_Ctl_MemoryRange.outw(PCI_DSP_HPIC_OFFSET,0x0101);

m_Ctl_MemoryRange.outw(PCI_DSP_HPIA_OFFSET,0x007f);
m_Ctl_MemoryRange.outw(PCI_DSP_HPID1_OFFSET,0x1000);

现在这样,可以查看到数据写入DSP,但是程序仍不动。将最后对0x007f置数的步骤放在reset之前也不对,请问究竟有什么我没有考虑到的问题??
若有作过的前人还可以将正确的参考程序发到:cb615cb@163.com。
感谢不尽。

cb615cb
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-01-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-03 16:50
解决实际问题是最大的乐趣。但是分数也不是问题。
xuy_thy
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-05 09:22
StartPos 有必要减去1吗?
cb615cb
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-01-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-05 14:39
StartPos 有必要减去1吗?
数据读是后变地址,数据写是先变地址自增。
该问题已经解决!
谢谢!
naoshou
驱动牛犊
驱动牛犊
  • 注册日期2004-03-23
  • 最后登录2018-05-26
  • 粉丝0
  • 关注0
  • 积分38分
  • 威望43点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-09-18 09:46
大虾,能不能吧你的电路图附一张,小弟正为这个发愁了好长时间
邮箱:naoshou@sohu.com
多谢了:)
naoshou
游客

返回顶部