程序调试问题

fyj012   2007-7-20 14:56 楼主
我的TIMER控制寄存器设置为0x03c1,可是运行后变成0x0B85和0x0385,这是为何?

而且我的TIMER1的计数寄存器一直就不动,这是为什么呢?

回复评论 (16)

哪种片子?
点赞  2007-7-21 01:49
64的片子,基本解决了,Timer1还是工作的,

但是理论上还是1不明白

对应的改变是6位和2位,对应的是GO和DATOUT

我在中断序列号8程序(EDMA中断)里面对CIPR寄存器清零,可是其还是不变

这样无法响应下一次中断

资料上这么写道:发生EDMA中断,CPU的中断服务程序需要读CIPR寄存器

判断是否有通道事件发生,以及那个事件,然后进行相应的操作

在ISR中,还需要手工清除CIPR中的中断标志,以保证捕获后续发生的中断
点赞  2007-7-21 02:26
我用的是DSK6416,要用EDMA不
点赞  2007-7-23 12:26
还是没有什么进展,

在EDMA中断中,资料明明说了手动清除CIPR

可是我CIPR=0x0000;却没有用(在register window里面观察)

这样就不能相应下一次中断了,有哪位大哥知道怎么清CIPR吗?
点赞  2007-7-25 08:59
终于搞定了:)清0的时候写1
点赞  2007-7-26 03:20
     DSP 中这一类折磨人的东西多得很,写1 表示清 0 ,还有 BIT 测试指令中,bit code 为 0 表示第15 位,为 15 则表示 0 位。如此等等,稍一疏忽就入套了。解决了就好。
点赞  2007-7-26 08:55
获得x、y、z三个变量的地址后,通过菜单VIEW\\MEMORY查看相应地址即可。
点赞  2007-7-25 11:15
就是#pragma DATA_SECTION()
      #pragma CODE_SECTION()
点赞  2007-7-24 01:25
  可扩张空间意思就是有这个地址码空间。空间里的物理存储器件自然是要“扩展”上去的,也就是说DSP芯片里是没有的。 DSP芯片里集成的存储单元,手册里讲的很清楚了,就是(2407A)32k字的FLASH, 2K SARAM,加上 544字的DARAM。
点赞  2007-7-24 03:49
  把正弦函数表放到程序存储区里,我以前是用汇编语言写一段代码来实现的。按楼上网友的提示,可以用:
就是#pragma DATA_SECTION()
      #pragma CODE_SECTION()

到要试试。
点赞  2007-7-24 03:56
    我试了:  #pragma CODE_SECTION()    伪指令,好像没有达到不“把常数表放到程序地址区”的目的。比如写:
  #pragma CODE_SECTION(ChinessChar,“My_Sec\"; )
  unsigned int ChineseChar[] = {xxxx,xxxx,xxxx,xxxx,....,xxxx};

  从编译出的汇编代码来看,跟:
#pragma DATA_SECTION(ChinessChar,“My_Sec\"; )
没有区别,还是在数据空间中分配存储器,用:
  s = ChineseChar;
  读取数据时,生成的代码照样用:BLDD 指令。
该怎么做才行: true 兄可以指教一二么?
点赞  2007-7-24 08:47
    我试了:  #pragma CODE_SECTION()    伪指令,好像没有达到不“把常数表放到程序地址区”的目的。比如写:
  #pragma CODE_SECTION(ChinessChar,“My_Sec\"; )
  unsigned int ChineseChar[] = {xxxx,xxxx,xxxx,xxxx,....,xxxx};

  从编译出的汇编代码来看,跟:
#pragma DATA_SECTION(ChinessChar,“My_Sec\"; )
没有区别,还是在数据空间中分配存储器,用:
  s = ChineseChar;
  读取数据时,生成的代码照样用:BLDD 指令。
该怎么做才行: true 兄可以指教一二么?
点赞  2007-7-24 08:50
是吗?你的my_sec是指向哪里的?
如果是片内程序ram就是把你的东西放在那里
具体可以查看ccs的帮助的
点赞  2007-7-24 13:40
     我的仿真器出了毛病,只能做编译,看看目标代码,无法 DEBUG。
   我的实验是这样的:程序中写:
#pragma  CODE_SECTION(ChineseChr,\"My_Sec\";
unsigned int ChineseChr[] = {xxxx,xxxx,xxxx,...,xxx,xxx};
unsegned int s;
void GetChr(unsigned int j)
{
  r = ChineseChr[j];
}
cmd 文件中当然写了:  
   .My_Sec:{} 〉PROG  PAGE 0
    问题是, DSP  程序地址总线和数据地址总线是分开的,读取程序区与数据区,用的是不同的指令。如果编译的处理不匹配,连接时(尽管改了CMD)也无能为力。
   我看到编译出的 ASM  文件是:
_ChineseChr   .usect  \"My_Sec\",128,1
   读代码表 r = ChineseChr[j]  编译为:
  LAC    *,AR0    ; j 值取到 AR2,
   ADLK   _ChineseChr,0   ;加上 _ChineseChr ,得到地址
   SACL    *
   LAR      AR3,* ,AR3 ;经过AR0 指示的工作单元,把地址传到 AR3
   BLDD    *,#r,AR1

   用的是  BLDD  指令,还是从数据存储空间中读数。
点赞  2007-7-25 08:06
     如果用汇编语言写一个函数 GetMatrix  来读出程序存储区(开发阶段可以在扩展RAM,最终定位到片内 FLASH )中的汉字字形点阵数据,当然可以实现,手边也有类似的例子。但是用汇编语言,编程,调试,维护都比较困难,所以我也很想学一种完全用 C 语言解决这一问题的办法。
点赞  2007-7-26 01:03
     我想,你大概只需要把用到的几个(十来个?)汉字的点阵数据放在 FLASH  中,不会把 GB-2312-80 的七千多汉字统统放进去吧? 一个汉字点阵数据要16 个word,放上十来个汉字,自己另外规定一套编码:0 代表某字,1 又代表某字,...,然后写一个函数来读取点阵数据,我想是可行的。如果确实如此,可以试做做这个练习题。
点赞  2007-7-28 02:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复