您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]调试533板遇到的问题
本帖共有586个阅读者
发表帖子 发表投票 回复主题
[求助]调试533板遇到的问题
安有科技(论坛新手)
安有科技
头衔:社区公民
帮派:无帮无派
帖数:1
金钱:112
积分:2
注册时间:2011/11/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]调试533板遇到的问题

我在EDU533板上调试时,碰到下面的几个问题,求教。

我在连续读外部地址时,如果中断开了中断,会造成对外读次数增加。
1、读程序:
uint8 HDD_ReadSector(uint16 sno,uint16 *rdat)
{
。。。。。
   for(hdi=0;hdi<32;hdi++)
   {
   *(rdat+hdi)=*pHDD_DATA;
   }
  
。。。。。。
   }
  
其中:pHDD_DATA定义为#define pHDD_DATA      (volatile unsigned short *)0x20240000
   调用HDD_ReadSector()用的指针为内部地址,没有定义到SDRAM中;

2、中断用的是 CoreTimer_ISR,在中断中没有对外部地址操作;
  
uint32 ComTime=0;  
EX_INTERRUPT_HANDLER(CoreTimer_ISR)
{
static unsigned char ucActive_LED = 0x01;

// confirm interrupt handling
*pTCNTL &= 0xfffffff7;

ComTime++;
}
3、在用示波器观察时,会发现有时会对地址*pHDD_DATA产生33个读操作,而不是32个读操作,从而造成数据读错误;

4、在读循环中关闭中断(如下),则不会出错,不会造成读操作次数增加。

   *pIMASK     &= 0xffffffbf;//0x00000040;
   for(hdi=0;hdi<32;hdi++)
   {
   *(rdat+hdi)=*pHDD_DATA;
   }
  *pIMASK     |= 0x00000040;



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/11/7 11:24:11
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

uint32 ComTime=0;  
EX_INTERRUPT_HANDLER(CoreTimer_ISR)
{
static unsigned char ucActive_LED = 0x01;

// confirm interrupt handling
*pTCNTL &= 0xfffffff7;

ComTime++;
}

1.代码中每次中断后对*pTCNTL 做了重新配置,这个寄存器应该放在初始化函数中,不应该放在中断函数中,只需要配置一次即可,频繁初始化可能会产生异常。

2. 可以做一个变量放在循环读取数据的函数中,确认是否多读了一次。

3. 如果中断频率过高,可能会影响数据的读取,通常可以在读取数据前关闭中断,读取后 再打开,对中断进行保护。


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2011/11/7 14:16:47
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154596 Call, 1 Queries, Processed in 0.007813 second(s),