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

📄 can_oc.c

📁 sun公司的sparc v8处理器的配置代码。
💻 C
字号:
/* -------------------------------------------------------------------------- *//* Gaisler Research AB, 2007                                                  *//* -------------------------------------------------------------------------- *//* Simple self reception test for OpenCore CAN_OC Controller, with DMA        *//* -------------------------------------------------------------------------- *///struct can_oc_basic {//   volatile unsigned char control_register;            /* 0000 *///   volatile unsigned char command_register;            /* 0001 *///   volatile unsigned char status_register;             /* 0002 *///   volatile unsigned char interrupt_register;          /* 0003 *///   volatile unsigned char acceptance_code_register;    /* 0004 *///   volatile unsigned char acceptance_mask_register;    /* 0005 *///   volatile unsigned char bus_timing_0_register;       /* 0006 *///   volatile unsigned char bus_timing_1_register;       /* 0007 *///   volatile unsigned char output_control_register;     /* 0008 *///   volatile unsigned char test_register;               /* 0009 *///   volatile unsigned char tb_identifier_byte_0;        /* 000A *///   volatile unsigned char tb_identifier_byte_1;        /* 000B *///   volatile unsigned char tb_data_byte_1;              /* 000C *///   volatile unsigned char tb_data_byte_2;              /* 000D *///   volatile unsigned char tb_data_byte_3;              /* 000E *///   volatile unsigned char tb_data_byte_4;              /* 000F *///   volatile unsigned char tb_data_byte_5;              /* 0010 *///   volatile unsigned char tb_data_byte_6;              /* 0011 *///   volatile unsigned char tb_data_byte_7;              /* 0012 *///   volatile unsigned char tb_data_byte_8;              /* 0013 *///   volatile unsigned char rb_identifier_byte_0;        /* 0014 *///   volatile unsigned char rb_identifier_byte_1;        /* 0015 *///   volatile unsigned char rb_data_byte_1;              /* 0016 *///   volatile unsigned char rb_data_byte_2;              /* 0017 *///   volatile unsigned char rb_data_byte_3;              /* 0018 *///   volatile unsigned char rb_data_byte_4;              /* 0019 *///   volatile unsigned char rb_data_byte_5;              /* 001A *///   volatile unsigned char rb_data_byte_6;              /* 001B *///   volatile unsigned char rb_data_byte_7;              /* 001C *///   volatile unsigned char rb_data_byte_8;              /* 001D *///   volatile unsigned char extra_register;              /* 001E *///   volatile unsigned char clock_divider_register;      /* 001F *///};struct can_oc_extended {   volatile unsigned char control_register;            /* 0000 */   volatile unsigned char command_register;            /* 0001 */   volatile unsigned char status_register;             /* 0002 */   volatile unsigned char interrupt_register;          /* 0003 */   volatile unsigned char interrupt_enable_register;   /* 0004 */   volatile unsigned char reserved_register;           /* 0005 */   volatile unsigned char bus_timing_0_register;       /* 0006 */   volatile unsigned char bus_timing_1_register;       /* 0007 */   volatile unsigned char output_control_register;     /* 0008 */   volatile unsigned char test_register;               /* 0009 */   volatile unsigned char reserved_1_register;         /* 000A */   volatile unsigned char arbitration_lost_capture;    /* 000B */   volatile unsigned char error_code_capture;          /* 000C */   volatile unsigned char error_warning_limit;         /* 000D */   volatile unsigned char rx_error_counter;            /* 000E */   volatile unsigned char tx_error_counter;            /* 000F */   volatile unsigned char acceptance_code_0;           /* 0010 */   volatile unsigned char acceptance_code_1;           /* 0011 */   volatile unsigned char acceptance_code_2;           /* 0012 */   volatile unsigned char acceptance_code_3;           /* 0013 */   volatile unsigned char acceptance_mask_0;           /* 0014 */   volatile unsigned char acceptance_mask_1;           /* 0015 */   volatile unsigned char acceptance_mask_2;           /* 0016 */   volatile unsigned char acceptance_mask_3;           /* 0017 */   volatile unsigned char dummy0;                      /* 0018 */   volatile unsigned char dummy1;                      /* 0019 */   volatile unsigned char dummy2;                      /* 001A */   volatile unsigned char dummy3;                      /* 001B */   volatile unsigned char dummy4;                      /* 001C */   volatile unsigned char rx_message_counter;          /* 001D */   volatile unsigned char rx_buffer_start_address;     /* 001E */   volatile unsigned char clock_divider_register;      /* 001F */};//struct can_oc_extended_rx_sff {//   volatile unsigned char rx_frame_information_sff;    /* 0010 *///   volatile unsigned char rx_identifier_1_sff;         /* 0011 *///   volatile unsigned char rx_identifier_2_sff;         /* 0012 *///   volatile unsigned char rx_data_1_sff;               /* 0013 *///   volatile unsigned char rx_data_2_sff;               /* 0014 *///   volatile unsigned char rx_data_3_sff;               /* 0015 *///   volatile unsigned char rx_data_4_sff;               /* 0016 *///   volatile unsigned char rx_data_5_sff;               /* 0017 *///   volatile unsigned char rx_data_6_sff;               /* 0018 *///   volatile unsigned char rx_data_7_sff;               /* 0019 *///   volatile unsigned char rx_data_8_sff;               /* 001A *///};////struct can_oc_extended_rx_eff {//   volatile unsigned char rx_frame_information_eff;    /* 0010 *///   volatile unsigned char rx_identifier_1_eff;         /* 0011 *///   volatile unsigned char rx_identifier_2_eff;         /* 0012 *///   volatile unsigned char rx_identifier_3_eff;         /* 0013 *///   volatile unsigned char rx_identifier_4_eff;         /* 0014 *///   volatile unsigned char rx_data_1_eff;               /* 0015 *///   volatile unsigned char rx_data_2_eff;               /* 0016 *///   volatile unsigned char rx_data_3_eff;               /* 0017 *///   volatile unsigned char rx_data_4_eff;               /* 0018 *///   volatile unsigned char rx_data_5_eff;               /* 0019 *///   volatile unsigned char rx_data_6_eff;               /* 001A *///   volatile unsigned char rx_data_7_eff;               /* 001B *///   volatile unsigned char rx_data_8_eff;               /* 001C *///};//struct can_oc_extended_tx_sff {//   volatile unsigned char tx_frame_information_sff;    /* 0010 *///   volatile unsigned char tx_identifier_1_sff;         /* 0011 *///   volatile unsigned char tx_identifier_2_sff;         /* 0012 *///   volatile unsigned char tx_data_1_sff;               /* 0013 *///   volatile unsigned char tx_data_2_sff;               /* 0014 *///   volatile unsigned char tx_data_3_sff;               /* 0015 *///   volatile unsigned char tx_data_4_sff;               /* 0016 *///   volatile unsigned char tx_data_5_sff;               /* 0017 *///   volatile unsigned char tx_data_6_sff;               /* 0018 *///   volatile unsigned char tx_data_7_sff;               /* 0019 *///   volatile unsigned char tx_data_8_sff;               /* 001A *///};////struct can_oc_extended_tx_eff {//   volatile unsigned char tx_frame_information_eff;    /* 0010 *///   volatile unsigned char tx_identifier_1_eff;         /* 0011 *///   volatile unsigned char tx_identifier_2_eff;         /* 0012 *///   volatile unsigned char tx_identifier_3_eff;         /* 0013 *///   volatile unsigned char tx_identifier_4_eff;         /* 0014 *///   volatile unsigned char tx_data_1_eff;               /* 0015 *///   volatile unsigned char tx_data_2_eff;               /* 0016 *///   volatile unsigned char tx_data_3_eff;               /* 0017 *///   volatile unsigned char tx_data_4_eff;               /* 0018 *///   volatile unsigned char tx_data_5_eff;               /* 0019 *///   volatile unsigned char tx_data_6_eff;               /* 001A *///   volatile unsigned char tx_data_7_eff;               /* 001B *///   volatile unsigned char tx_data_8_eff;               /* 001C *///};#define reset_mode_on 0x01#define reset_mode_off 0xFE//#define enable_all_int 0x1E//#define tx_request 0x01//#define basic_mode 0x7F#define extended_mode 0x80#define release_buffer 0x04#define self_test_mode 0x04#define self_reception 0x10//#define enable_all_int_eff 0xFFint can_oc_test(int addr){   struct can_oc_extended *ce = (struct can_oc_extended *) addr;   volatile unsigned char *buf = (volatile unsigned char *) (addr + 0x0010);   int tmp, i;   report_device(0x01019000);   // switch on reset mode   ce->control_register = reset_mode_on;   // switch to extended mode   ce->clock_divider_register = extended_mode;   // set bus timing   ce->bus_timing_0_register = 0x80;   ce->bus_timing_1_register = 0x00;   // set acceptance and mask register   buf[0] = 0x05;   buf[1] = 0x06;   buf[2] = 0x07;   buf[3] = 0x08;   buf[4] = 0x70;   buf[5] = 0xe0;   buf[6] = 0xf0;   buf[7] = 0xc0;   // Setting the self test mode   ce->control_register = reset_mode_on | self_test_mode;   // Switch-off reset mode   ce->control_register = self_test_mode;   // ---------- transmit and check frame data ----------   // send first frame//   report_subtest(0);   buf[0] = 0x88;   for (tmp=1; tmp < 13; tmp++)      buf[tmp] = (unsigned char) ((tmp+4 + 16*tmp*0) & 0xFF);   ce->command_register = self_reception;   while (!ce->rx_message_counter);   for (i=1; i < 5; i++) {      // send frame//      report_subtest(i);      buf[0] = 0x88;      for (tmp=1; tmp < 13; tmp++)         buf[tmp] = (unsigned char) ((tmp+4 + 16*tmp*i) & 0xFF);      ce->command_register = self_reception;      // check frame//      report_subtest(10+i-1);      if (buf[0] != 0x88) fail(0);      for (tmp=1; tmp < 13; tmp++)         if (buf[tmp] != (unsigned char) ((tmp+4 + 16*tmp*(i-1)) & 0xFF))  fail (tmp);      ce->command_register = release_buffer;      while (!ce->rx_message_counter);   }   // check last frame//   report_subtest(10+4);   if (buf[0] != 0x88) fail(0);   for (tmp=1; tmp < 13; tmp++)      if (buf[tmp] != (unsigned char) ((tmp+4 + 16*tmp*(4)) & 0xFF))  fail (tmp);   ce->command_register = release_buffer;   ce->control_register = reset_mode_on;}

⌨️ 快捷键说明

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