您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF533调试求助
本帖共有560个阅读者
发表帖子 发表投票 回复主题
BF533调试求助
429833唐(论坛新手)
429833唐
头衔:社区公民
帮派:无帮无派
帖数:3
金钱:122
积分:4
注册时间:2012/2/9
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF533调试求助

朋友介绍来这里求助,调试BF533时遇到如下问题,能否帮分析一下:

我在连续读外部地址时,如果中断开了中断,会造成对外读次数增加
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地址:*.*.*.*
2012/2/9 10:10:18
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

之前我有一个客户遇到和你同样的问题,也是在开核定时器后,读取硬盘数据会多一次,我给他的建议是使用系统定时器,他说系统定时器已经有其他资源使用了,所以才用核。我让他在系统定时器中加一个判断,定时到后,判断是哪个模块的定时中断,然后执行。如果需要精确定时,可以利用最大公约数,然后在定时器里面做计数,如10和15最大公约数为5,10的定时计数是2,15的为3,每次计数为2的倍数为10的中断,3的倍数为15的中断。不知道那个客户是否采用这个方法,也不知道解决没。

如果精度不高的话,可以试试这个方法。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/9 11:12:52
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154410 Call, 1 Queries, Processed in 0.015625 second(s),