⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1553_junk_bm-5_bm-5.c

📁 BU-65550M2-605 PCMCIA card (1553) 的驱动程序源代码
💻 C
字号:
// bus monitor test program
//
//

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <time.h>

#include "bu.h"

extern reg_t *reg;
extern mem_t *mem;

void bu_interrupt_handler(int16 interrupt_status);

//-----------------------------------------------------------------------------

void bu_interrupt_handler(int16 interrupt_status) {

  int16 N = 100;
  static int32 c = 0;
  static float f = 0.0;
  int16 ovf;

  ovf = (interrupt_status & 0x0C00) >> 9;

  printf("bu_interrupt_handler:c=%lu:f=%0.1f: m=0x%04X s=0x%04X",
          c++, f, reg->interrupt_mask, interrupt_status);
  if (ovf) printf("  OVF\n"); else printf("\n");

  if (c % N == 0) {
    static time_t now, then;
    now = time(NULL);
    f = (float)(N) / (float)(now-then);
    then = now;
  }
}

//-----------------------------------------------------------------------------

int main(void) {

  printf("\n##### This my Bus Monitor bm-5 demo program #####\n\n");

  buopen();

  printf("reg adr = %08lX, mem adr = %08lX\n", (int32)reg, (int32)mem);

  reg->start_reset = 0x0001;         // reset
  reg->config_1    = 0x5000;         // enable message monitor
  reg->config_2    = 0x8000;         // enable enchanced interrupts
  reg->config_2   |= 0x0010;         // auto clear int status
//reg->config_2   |= 0x0008;         // level int req
  reg->config_3    = 0x8000;         // enable enchanced mode
  reg->config_3   |= CMD256;         // command stack size
  reg->config_3   |= DATA1024;       // data stack size

  reg->config_5    = 0x0000;

//reg->interrupt_mask = 0x0C40;      // enable STK OVF & Time Roll int's
  reg->interrupt_mask = 0x0040;      // enable Time Tag Rollover int

  reg->start_reset = 0x0002;         // start MT

  while (1) {
    if (mykbhit()) {
      int16 q;
      int16 old_config_2, old_time_tag, new_time_tag, old_interrupt_mask;
      int ch = toupper(fgetc(stdin));
      if (ch == 'Q') break;
      switch (ch) {
      case 'H':
        printf("reg->interrupt_status = 0x%04X\n", reg->interrupt_status);
        break;
      case 'U':
        old_interrupt_mask = reg->interrupt_mask;
        reg->interrupt_mask |=  IRQ_TIMETAG_ROLLOVR;
        printf("Set Time Bit in Interrupt Mask Register:   0x%04X --> 0x%04X\n",
                old_interrupt_mask, reg->interrupt_mask);
        break;
      case 'D':
        old_interrupt_mask = reg->interrupt_mask;
        reg->interrupt_mask &= ~IRQ_TIMETAG_ROLLOVR;
        printf("Clear Time Bit in Interrupt Mask Register: 0x%04X --> 0x%04X\n",
                old_interrupt_mask, reg->interrupt_mask);
        break;
      case 'S':
        old_interrupt_mask = reg->interrupt_mask;
        reg->interrupt_mask |=  IRQ_END_OF_MESSAGE;
        printf("Set EOM Bit in Interrupt Mask Register:    0x%04X --> 0x%04X\n",
                old_interrupt_mask, reg->interrupt_mask);
        break;
      case 'C':
        old_interrupt_mask = reg->interrupt_mask;
        reg->interrupt_mask &= ~IRQ_END_OF_MESSAGE;
        printf("Clear EOM Bit in Interrupt Mask Register:  0x%04X --> 0x%04X\n",
                old_interrupt_mask, reg->interrupt_mask);
        break;
      case 'T':
        old_config_2 = reg->config_2;
        reg->config_2 = 0x8318;
        reg->time_tag = 0xFFFF;
        old_time_tag = reg->time_tag;
        reg->start_reset = 0x0010;
        new_time_tag = reg->time_tag;
        printf("Time Tag Rollover Test: 0x%04X --> 0x%04X: %s\n",
                old_time_tag, new_time_tag, (new_time_tag) ? "Failed" : "O.K.");
        reg->config_2 = old_config_2;
        break;
      default:
        printf(" Unassigned key pressed!\n");
        break;
      }
    }
  }
  buclose();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -