Board logo

标题: cf卡测试时出现的怪现象 [打印本页]

作者: hhh_gjf    时间: 2005-8-18 15:02     标题: cf卡测试时出现的怪现象

我在测试cf卡时,main函数首先调用初始化函数
前面运行正常
但当执行到如下语句时:
/* Enable card insertion/removal interrupt */
  
  alt_irq_register(ctl_irq, 0, CTLTrapHandler);
  IOWR_ALTERA_AVALON_CF_CTL_CONTROL(ctl_base,
                                    ALTERA_AVALON_CF_CTL_STATUS_POWER_MSK +
                                    ALTERA_AVALON_CF_CTL_STATUS_IRQ_EN_MSK);
                                    
  /* Enable IDE interrupts */
alt_irq_register(ide_irq, 0, IDETrapHandler);
IOWR_ALTERA_AVALON_CF_IDE_CTL(ctl_base, ALTERA_AVALON_CF_IDE_CTL_IRQ_EN_MSK);
程序运行到
IOWR_ALTERA_AVALON_CF_IDE_CTL(ctl_base, ALTERA_AVALON_CF_IDE_CTL_IRQ_EN_MSK);
后面的code 就好象被屏蔽了
比如说我在alt_irq_register(ide_irq, 0, IDETrapHandler);和
IOWR_ALTERA_AVALON_CF_IDE_CTL(ctl_base, ALTERA_AVALON_CF_IDE_CTL_IRQ_EN_MSK);之间
加了一个printf语句能正确显示
但加在
IOWR_ALTERA_AVALON_CF_IDE_CTL(ctl_base, ALTERA_AVALON_CF_IDE_CTL_IRQ_EN_MSK);
后面就什么也不显示了。。。。。
为什么啊???????????????
作者: hhh_gjf    时间: 2005-8-18 16:50

还有一个问题就是
我想读取一下状态寄存器的值,也出现怪现象:
unsigned short usStatus;
usStatus = IORD_ALTERA_AVALON_CF_IDE_ALTERNATE_STATUS(ide_base);
  printf("%d",usStatus);
  printf("\n");
结果为:0033
寄存器为8位,这应该说明寄存器的值为33,即00110011吧
可当我设usstatus为8位时,出现结果如下:
alt_u8 usStatus;
usStatus=IORD_ALTERA_AVALON_CF_IDE_ALTERNATE_STATUS(ide_base) ;printf("%u",usStatus);
出现结果却为55,即01010101
而当我如下运算时:
usStatus=IORD_ALTERA_AVALON_CF_IDE_ALTERNATE_STATUS(ide_base) & 0x80;
  printf("%u",usStatus);
结果是22。结果应该是0或者1才对啊
为什么会这样啊






[此贴子已经被作者于2005-8-18 16:49:59编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0