首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

cf卡测试时出现的怪现象

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);
后面就什么也不显示了。。。。。
为什么啊???????????????
还有一个问题就是
我想读取一下状态寄存器的值,也出现怪现象:
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编辑过]

返回列表