📄 1553_junk_bm-5_bm-5.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 + -