我在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;