// Filename : can_setup.c //-- Description : This can test first sends a can frame in basic mode //-- then it sends one can frame in extended mode. //-- after that it launches the "self-test-mode" //-- The test will report if he failed or not! //-- Author : Harald Obereder //-- Created On : Wed Okt 06 10.07 //-- //-- CVS entries: //-- $Author: hobe $ //-- $Date: 2004/10/12 12:47:19 $ //-- $Revision: 1.2 $ //-- $State: Exp $ // addressdefinition for basic can registers // tb...transmit buffer // rb...receive buffer #define basic #define extended #ifdef basic #define control_register *((unsigned char *)(0xfffc0000)) #define command_register *((unsigned char *)(0xfffc0001)) #define status_register *((unsigned char *)(0xfffc0002)) #define interrupt_register *((unsigned char *)(0xfffc0003)) #define acceptance_code_register *((unsigned char *)(0xfffc0004)) #define acceptance_mask_register *((unsigned char *)(0xfffc0005)) #define bus_timing_0_register *((unsigned char *)(0xfffc0006)) #define bus_timing_1_register *((unsigned char *)(0xfffc0007)) #define output_control_register *((unsigned char *)(0xfffc0008)) #define test_register *((unsigned char *)(0xfffc0009)) #define tb_identifier_byte_0 *((unsigned char *)(0xfffc000A)) #define tb_identifier_byte_1 *((unsigned char *)(0xfffc000B)) #define tb_data_byte_1 *((unsigned char *)(0xfffc000C)) #define tb_data_byte_2 *((unsigned char *)(0xfffc000D)) #define tb_data_byte_3 *((unsigned char *)(0xfffc000E)) #define tb_data_byte_4 *((unsigned char *)(0xfffc000F)) #define tb_data_byte_5 *((unsigned char *)(0xfffc0010)) #define tb_data_byte_6 *((unsigned char *)(0xfffc0011)) #define tb_data_byte_7 *((unsigned char *)(0xfffc0012)) #define tb_data_byte_8 *((unsigned char *)(0xfffc0013)) #define rb_identifier_byte_0 *((unsigned char *)(0xfffc0014)) #define rb_identifier_byte_1 *((unsigned char *)(0xfffc0015)) #define rb_data_byte_1 *((unsigned char *)(0xfffc0016)) #define rb_data_byte_2 *((unsigned char *)(0xfffc0017)) #define rb_data_byte_3 *((unsigned char *)(0xfffc0018)) #define rb_data_byte_4 *((unsigned char *)(0xfffc0019)) #define rb_data_byte_5 *((unsigned char *)(0xfffc001A)) #define rb_data_byte_6 *((unsigned char *)(0xfffc001B)) #define rb_data_byte_7 *((unsigned char *)(0xfffc001C)) #define rb_data_byte_8 *((unsigned char *)(0xfffc001D)) #define Extra_register *((unsigned char *)(0xfffc001E)) #define clock_divider_register *((unsigned char *)(0xfffc001F)) #endif #ifdef extended #define control_register *((unsigned char *)(0xfffc0000)) #define command_register *((unsigned char *)(0xfffc0001)) #define status_register *((unsigned char *)(0xfffc0002)) #define interrupt_register *((unsigned char *)(0xfffc0003)) #define interrupt_enable_register *((unsigned char *)(0xfffc0004)) #define reserved_register *((unsigned char *)(0xfffc0005)) #define bus_timing_0_register *((unsigned char *)(0xfffc0006)) #define bus_timing_1_register *((unsigned char *)(0xfffc0007)) #define output_control_register *((unsigned char *)(0xfffc0008)) #define test_register *((unsigned char *)(0xfffc0009)) #define reserved_1_register *((unsigned char *)(0xfffc000A)) #define arbitration_lost_capture *((unsigned char *)(0xfffc000B)) #define error_code_capture *((unsigned char *)(0xfffc000C)) #define error_warning_limit *((unsigned char *)(0xfffc000D)) #define rx_error_counter *((unsigned char *)(0xfffc000E)) #define tx_error_counter *((unsigned char *)(0xfffc000F)) #define acceptance_code_0 *((unsigned char *)(0xfffc0010)) #define acceptance_code_1 *((unsigned char *)(0xfffc0011)) #define acceptance_code_2 *((unsigned char *)(0xfffc0012)) #define acceptance_code_3 *((unsigned char *)(0xfffc0013)) #define acceptance_mask_0 *((unsigned char *)(0xfffc0014)) #define acceptance_mask_1 *((unsigned char *)(0xfffc0015)) #define acceptance_mask_2 *((unsigned char *)(0xfffc0016)) #define acceptance_mask_3 *((unsigned char *)(0xfffc0017)) #define rx_frame_information_sff *((unsigned char *)(0xfffc0010)) #define rx_identifier_1_sff *((unsigned char *)(0xfffc0011)) #define rx_identifier_2_sff *((unsigned char *)(0xfffc0012)) #define rx_data_1_sff *((unsigned char *)(0xfffc0013)) #define rx_data_2_sff *((unsigned char *)(0xfffc0014)) #define rx_data_3_sff *((unsigned char *)(0xfffc0015)) #define rx_data_4_sff *((unsigned char *)(0xfffc0016)) #define rx_data_5_sff *((unsigned char *)(0xfffc0017)) #define rx_data_6_sff *((unsigned char *)(0xfffc0018)) #define rx_data_7_sff *((unsigned char *)(0xfffc0019)) #define rx_data_8_sff *((unsigned char *)(0xfffc001A)) #define rx_frame_information_eff *((unsigned char *)(0xfffc0010)) #define rx_identifier_1_eff *((unsigned char *)(0xfffc0011)) #define rx_identifier_2_eff *((unsigned char *)(0xfffc0012)) #define rx_identifier_3_eff *((unsigned char *)(0xfffc0013)) #define rx_identifier_4_eff *((unsigned char *)(0xfffc0014)) #define rx_data_1_eff *((unsigned char *)(0xfffc0015)) #define rx_data_2_eff *((unsigned char *)(0xfffc0016)) #define rx_data_3_eff *((unsigned char *)(0xfffc0017)) #define rx_data_4_eff *((unsigned char *)(0xfffc0018)) #define rx_data_5_eff *((unsigned char *)(0xfffc0019)) #define rx_data_6_eff *((unsigned char *)(0xfffc001A)) #define rx_data_7_eff *((unsigned char *)(0xfffc001B)) #define rx_data_8_eff *((unsigned char *)(0xfffc001C)) #define tx_frame_information_sff *((unsigned char *)(0xfffc0010)) #define tx_identifier_1_sff *((unsigned char *)(0xfffc0011)) #define tx_identifier_2_sff *((unsigned char *)(0xfffc0012)) #define tx_data_1_sff *((unsigned char *)(0xfffc0013)) #define tx_data_2_sff *((unsigned char *)(0xfffc0014)) #define tx_data_3_sff *((unsigned char *)(0xfffc0015)) #define tx_data_4_sff *((unsigned char *)(0xfffc0016)) #define tx_data_5_sff *((unsigned char *)(0xfffc0017)) #define tx_data_6_sff *((unsigned char *)(0xfffc0018)) #define tx_data_7_sff *((unsigned char *)(0xfffc0019)) #define tx_data_8_sff *((unsigned char *)(0xfffc001A)) #define tx_frame_information_eff *((unsigned char *)(0xfffc0010)) #define tx_identifier_1_eff *((unsigned char *)(0xfffc0011)) #define tx_identifier_2_eff *((unsigned char *)(0xfffc0012)) #define tx_identifier_3_eff *((unsigned char *)(0xfffc0013)) #define tx_identifier_4_eff *((unsigned char *)(0xfffc0014)) #define tx_data_1_eff *((unsigned char *)(0xfffc0015)) #define tx_data_2_eff *((unsigned char *)(0xfffc0016)) #define tx_data_3_eff *((unsigned char *)(0xfffc0017)) #define tx_data_4_eff *((unsigned char *)(0xfffc0018)) #define tx_data_5_eff *((unsigned char *)(0xfffc0019)) #define tx_data_6_eff *((unsigned char *)(0xfffc001A)) #define tx_data_7_eff *((unsigned char *)(0xfffc001B)) #define tx_data_8_eff *((unsigned char *)(0xfffc001C)) #define rx_message_counter *((unsigned char *)(0xfffc001D)) #define rx_buffer_start_address *((unsigned char *)(0xfffc001E)) #define clock_divider_register *((unsigned char *)(0xfffc001F)) #endif #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 0xFF // can mode "Basic" or "Extended" //const char * mode = "Basic"; //const char * mode = "Extended"; // waits for some time void kill_time(int rep) { int i; for (i=rep; i>0; --i) asm("nop"); } void self_testing_mode() { unsigned char r_val; printf("************************************\n"); printf("***** Set to self testing mode *****\n"); printf("************************************\n"); r_val = control_register | self_test_mode; control_register = r_val; printf( "control_register 0x%X \n\n",control_register); } void reset_all_irqs() { printf("************************************\n"); printf("********** reset all irqs **********\n"); printf("************************************\n"); printf( "interrupt_register 0x%X \n\n",interrupt_register); } void disable_irq_sff() { unsigned char r_val; printf("************************************\n"); printf("*********** disable irqs ***********\n"); printf("************************************\n"); r_val = interrupt_enable_register | enable_all_int_eff; interrupt_enable_register = r_val; printf( "interrupt_enable_register 0x%X \n\n",interrupt_enable_register); } void enable_irq_sff() { unsigned char r_val; printf("************************************\n"); printf("*********** enable irqs ************\n"); printf("************************************\n"); r_val = control_register | enable_all_int; control_register = r_val; printf( "control_register 0x%X \n\n",control_register); } void disable_irq_eff() { unsigned char r_val; printf("************************************\n"); printf("*********** disable irqs ***********\n"); printf("************************************\n"); r_val = interrupt_enable_register | enable_all_int_eff; interrupt_enable_register = r_val; printf( "interrupt_enable_register 0x%X \n\n",interrupt_enable_register); } void enable_irq_eff() { unsigned char r_val; printf("************************************\n"); printf("*********** enable irqs eff ********\n"); printf("************************************\n"); r_val = interrupt_enable_register | enable_all_int_eff; interrupt_enable_register = r_val; printf( "interrupt_enable_register 0x%X \n\n",interrupt_enable_register); } void tx_request_command() { unsigned char r_val; printf("************************************\n"); printf("*********** tx requestet ***********\n"); printf("************************************\n"); printf( "Send transmit-request \n"); r_val = command_register | tx_request; command_register = r_val; printf( "command register: 0x%X \n\n",command_register); } void self_reception_request() { unsigned char r_val; printf("************************************\n"); printf("***** self reception requestet *****\n"); printf("************************************\n"); r_val = command_register | self_reception; command_register = r_val; printf( "command register : 0x%X \n\n",command_register); } void release_receive_buffer() { unsigned char r_val; printf("************************************\n"); printf("****** release receive buffer ******\n"); printf("************************************\n"); r_val = command_register | release_buffer; command_register = r_val; printf( "command register : 0x%X \n\n",command_register); } void read_receive_buffer_basic() { unsigned char r_val; printf("************************************\n"); printf("******** read receive buffer *******\n"); printf("************************************\n"); printf( "identifier 0: 0x%X \n",rb_identifier_byte_0); printf( "identifier 1: 0x%X \n",rb_identifier_byte_1); printf( "data byte 1: 0x%X \n",rb_data_byte_1); printf( "data byte 2: 0x%X \n",rb_data_byte_2); printf( "data byte 3: 0x%X \n",rb_data_byte_3); printf( "data byte 4: 0x%X \n",rb_data_byte_4); printf( "data byte 5: 0x%X \n",rb_data_byte_5); printf( "data byte 6: 0x%X \n",rb_data_byte_6); printf( "data byte 7: 0x%X \n",rb_data_byte_7); printf( "data byte 8: 0x%X \n\n",rb_data_byte_8); } void read_receive_buffer_extended() { unsigned char r_val; printf("************************************\n"); printf("******* read frame extended ********\n"); printf("************************************\n"); printf( "rx_frame_information_eff: 0x%X \n\n",rx_frame_information_eff); printf( "identifier 0: 0x%X \n",rx_identifier_1_eff); printf( "identifier 1: 0x%X \n",rx_identifier_2_eff); printf( "identifier 2: 0x%X \n",rx_identifier_3_eff); printf( "identifier 3: 0x%X \n\n",rx_identifier_4_eff); printf( "data byte 1: 0x%X \n",rx_data_1_eff); printf( "data byte 2: 0x%X \n",rx_data_2_eff); printf( "data byte 3: 0x%X \n",rx_data_3_eff); printf( "data byte 4: 0x%X \n",rx_data_4_eff); printf( "data byte 5: 0x%X \n",rx_data_5_eff); printf( "data byte 6: 0x%X \n",rx_data_6_eff); printf( "data byte 7: 0x%X \n",rx_data_7_eff); printf( "data byte 8: 0x%X \n\n",rx_data_8_eff); } /*void write_frame_basic() { unsigned char r_val; printf("************************************\n"); printf("********* Send frame basic *********\n"); printf("************************************\n"); printf( "Set identifier - 0xEA 0x28\n"); tb_identifier_byte_0 = 0xEA; printf( "identifier 0: 0x%X \n",tb_identifier_byte_0); tb_identifier_byte_1 = 0x28; printf( "identifier 1: 0x%X \n\n",tb_identifier_byte_1); printf( "Set data byte 1 \n"); tb_data_byte_1 = 0x12; printf( "data byte 1: 0x%X \n",tb_data_byte_1); printf( "Set data byte 2 \n"); tb_data_byte_2 = 0x34; printf( "data byte 2: 0x%X \n",tb_data_byte_2); printf( "Set data byte 3 \n"); tb_data_byte_3 = 0x56; printf( "data byte 3: 0x%X \n",tb_data_byte_3); printf( "Set data byte 4 \n"); tb_data_byte_4 = 0x78; printf( "data byte 4: 0x%X \n",tb_data_byte_4); printf( "Set data byte 5 \n"); tb_data_byte_5 = 0x9A; printf( "data byte 5: 0x%X \n",tb_data_byte_5); printf( "Set data byte 6 \n"); tb_data_byte_6 = 0xBC; printf( "data byte 6: 0x%X \n",tb_data_byte_6); printf( "Set data byte 7 \n"); tb_data_byte_7 = 0xDE; printf( "data byte 7: 0x%X \n",tb_data_byte_7); printf( "Set data byte 8 \n"); tb_data_byte_8 = 0xF0; printf( "data byte 8: 0x%X \n\n",tb_data_byte_8); } */ /*void write_frame_extended() { unsigned char r_val; printf("************************************\n"); printf("******* write frame extended *******\n"); printf("************************************\n"); tx_frame_information_eff = 0x88; printf( "tx_frame_information_eff: 0x%X \n\n",tx_frame_information_eff); printf( "Set identifier - 0xA6 0xB0 0x12 0x30\n"); tx_identifier_1_eff = 0xA6; printf( "identifier 0: 0x%X \n",tx_identifier_1_eff); tx_identifier_2_eff = 0xB0; printf( "identifier 1: 0x%X \n",tx_identifier_2_eff); tx_identifier_3_eff = 0x12; printf( "identifier 2: 0x%X \n",tx_identifier_3_eff); tx_identifier_4_eff = 0x30; printf( "identifier 3: 0x%X \n\n",tx_identifier_4_eff); printf( "Set data - 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0\n"); tx_data_1_eff = 0x12; printf( "data byte 1: 0x%X \n",tx_data_1_eff); tx_data_2_eff = 0x34; printf( "data byte 2: 0x%X \n",tx_data_2_eff); tx_data_3_eff = 0x56; printf( "data byte 3: 0x%X \n",tx_data_3_eff); tx_data_4_eff = 0x78; printf( "data byte 4: 0x%X \n",tx_data_4_eff); tx_data_5_eff = 0x9A; printf( "data byte 5: 0x%X \n",tx_data_5_eff); tx_data_6_eff = 0xBC; printf( "data byte 6: 0x%X \n",tx_data_6_eff); tx_data_7_eff = 0xDE; printf( "data byte 7: 0x%X \n",tx_data_7_eff); tx_data_8_eff = 0xF0; printf( "data byte 8: 0x%X \n\n",tx_data_8_eff); } */ void init_can(char * mode, char * self_test) { unsigned char r_val; if (mode == "Basic") { printf("************************************\n"); printf("********** Basic Can Mode **********\n"); printf("************************************\n"); printf( "Switch on Reset Mode\n"); r_val = control_register | reset_mode_on; control_register = r_val; printf( "control_register: 0x%X \n\n",control_register); printf( "Set clock divider register to basic can mode\n"); r_val = clock_divider_register & basic_mode | 0x07; clock_divider_register = r_val; printf( "clock_divider_register: 0x%X \n\n",clock_divider_register); //printf( "Output control register \n"); //output_control_register = 0x01; //printf( "output control register : 0x%X \n\n",output_control_register); printf( "Set bus timing register 0\n"); printf( "Sync Jump Width = 2 Baudrate Prescaler = 1\n"); bus_timing_0_register = 0xA8; printf( "bus timing register 0: 0x%X \n\n",bus_timing_0_register); printf( "Set bus timing register 1\n"); printf( "SAM = 0 ---> Single Sampling\n"); bus_timing_1_register = 0x34; printf( "bus timing register 1: 0x%X \n\n",bus_timing_1_register); printf( "Set acceptance code register\n"); acceptance_code_register = 0xEA; printf( "acceptance code register: 0x%X \n\n",acceptance_code_register); printf( "Set acceptance mask register\n"); acceptance_mask_register = 0x0F; printf( "acceptance mask register: 0x%X \n\n",acceptance_mask_register); kill_time(50); printf( "Switch off reset mode\n"); r_val = control_register & reset_mode_off; control_register = r_val; printf( "control_register 0x%X \n\n",control_register); kill_time(50); } else if (mode == "Extended") { printf("************************************\n"); printf("******** Extended Can Mode *********\n"); printf("************************************\n"); printf( "Switch on Reset Mode\n"); r_val = control_register | reset_mode_on; control_register = r_val; printf( "control_register: 0x%X \n\n",control_register); kill_time(50); printf( "Set clock divider register to extended can mode\n"); r_val = clock_divider_register | extended_mode | 0x07; clock_divider_register = r_val; printf( "clock_divider_register: 0x%X \n\n",clock_divider_register); kill_time(50); //printf( "Output control register \n"); //output_control_register = 0x01; //printf( "output control register: 0x%X \n\n",output_control_register); printf( "Set bus timing register 0\n"); printf( "Sync Jump Width = 2 Baudrate Prescaler = 1\n"); bus_timing_0_register = 0xA8; printf( "bus timing register 0: 0x%X \n\n",bus_timing_0_register); printf( "Set bus timing register 1\n"); printf( "SAM = 0 ---> Single Sampling\n"); bus_timing_1_register = 0x34; printf( "bus timing register 1: 0x%X \n\n",bus_timing_1_register); printf( "Set acceptance code register\n"); acceptance_code_0 = 0xA6; printf( "acceptance code register 0: 0x%X \n",acceptance_code_0); acceptance_code_1 = 0xB0; printf( "acceptance code register 1: 0x%X \n",acceptance_code_1); acceptance_code_2 = 0x12; printf( "acceptance code register 2: 0x%X \n",acceptance_code_2); acceptance_code_3 = 0x30; printf( "acceptance code register 3: 0x%X \n\n",acceptance_code_3); printf( "Set acceptance mask register\n"); acceptance_mask_0 = 0x00; printf( "acceptance mask register: 0x%X \n",acceptance_mask_0); acceptance_mask_1 = 0x00; printf( "acceptance mask register: 0x%X \n",acceptance_mask_1); acceptance_mask_2 = 0x00; printf( "acceptance mask register: 0x%X \n",acceptance_mask_2); acceptance_mask_3 = 0x00; printf( "acceptance mask register: 0x%X \n\n",acceptance_mask_3); if (self_test == "self_test") { self_testing_mode(); } printf( "Switch off reset mode\n"); r_val = control_register & reset_mode_off; control_register = r_val; printf( "control_register 0x%X \n\n",control_register); kill_time(50); } } void self_reception_test() { unsigned char r_val; printf( "Switch on Reset Mode\n"); control_register = 0x01; printf( "control 0x%X \n\n",control_register); // witch to extended mode clock_divider_register = 0x80; printf( "clock_divider 0x%X \n\n",clock_divider_register); // set bus timing //bus_timing_0_register = 0xBF; bus_timing_0_register = 0x80; bus_timing_1_register = 0x34; // set acceptance and mask register acceptance_code_0 = 0xA6; printf( "acceptance 0 0x%X \n",acceptance_code_0); acceptance_code_1 = 0xB0; printf( "acceptance 1 0x%X \n",acceptance_code_1); acceptance_code_2 = 0x12; printf( "acceptance 2 0x%X \n",acceptance_code_2); acceptance_code_3 = 0x30; printf( "acceptance 3 0x%X \n\n",acceptance_code_3); acceptance_mask_0 = 0x00; printf( "acceptance mask 0x%X \n",acceptance_mask_0); acceptance_mask_1 = 0x00; printf( "acceptance mask 0x%X \n",acceptance_mask_1); acceptance_mask_2 = 0x00; printf( "acceptance mask 0x%X \n",acceptance_mask_2); acceptance_mask_3 = 0x00; printf( "acceptance mask 0x%X \n\n",acceptance_mask_3); // Setting the "self test mode" control_register = 0x05; printf( "control 0x%X \n\n",control_register); kill_time(50); // Switch-off reset mode control_register = 0X04; printf( "control_register 0x%X \n\n",control_register); kill_time(150); // Send frame tx_frame_information_eff = 0x88; printf( "Set identifier - 0xA6 0xB0 0x12 0x30\n"); tx_identifier_1_eff = 0xA6; //printf( "identifier 0: 0x%X \n",tx_identifier_1_eff); tx_identifier_2_eff = 0xB0; //printf( "identifier 1: 0x%X \n",tx_identifier_2_eff); tx_identifier_3_eff = 0x12; //printf( "identifier 2: 0x%X \n",tx_identifier_3_eff); tx_identifier_4_eff = 0x30; //printf( "identifier 3: 0x%X \n\n",tx_identifier_4_eff); printf( "Set data - 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0\n"); tx_data_1_eff = 0x12; //printf( "data byte 1: 0x%X \n",tx_data_1_eff); tx_data_2_eff = 0x34; //printf( "data byte 2: 0x%X \n",tx_data_2_eff); tx_data_3_eff = 0x56; //printf( "data byte 3: 0x%X \n",tx_data_3_eff); tx_data_4_eff = 0x78; //printf( "data byte 4: 0x%X \n",tx_data_4_eff); tx_data_5_eff = 0x9A; //printf( "data byte 5: 0x%X \n",tx_data_5_eff); tx_data_6_eff = 0xBC; //printf( "data byte 6: 0x%X \n",tx_data_6_eff); tx_data_7_eff = 0xDE; //printf( "data byte 7: 0x%X \n",tx_data_7_eff); tx_data_8_eff = 0xF0; //printf( "data byte 8: 0x%X \n\n",tx_data_8_eff); // Enable ints interrupt_enable_register = 0xFF; kill_time(50); //tx_request_command(); self_reception_request(); //tx_request_command(); printf( "Finnished \n"); printf( "control_register 0x%X \n\n",control_register); //kill_time(10000); printf( "interrupt_register 0x%X \n\n",interrupt_register); printf( "control_register 0x%X \n\n",control_register); //read_receive_buffer_extended(); } void write_frame_basic(unsigned char write_field[]) { int i = 0; printf("************************************\n"); printf("******** write frame basic *********\n"); printf("************************************\n"); for (i=0; i<10; i++) { *((unsigned char *)(0xfffc000A+i)) = write_field[i]; kill_time(10); printf( "write data: %i , 0x%X , 0x%X \n",i,write_field[i],*((unsigned char *)(0xfffc000A+i))); } } void write_frame_extended(unsigned char write_field[]) { int i = 0; printf("************************************\n"); printf("******* write frame extended *******\n"); printf("************************************\n"); for (i=0; i<13; i++) { *((unsigned char *)(0xfffc0010+i)) = write_field[i]; kill_time(10); printf( "write data %i: 0x%X , 0x%X \n",i,write_field[i],*((unsigned char *)(0xfffc0010+i))); } } int test_read_frame_extended(unsigned char write_field[]) { unsigned char read_field[13]; int i = 0; for (i=0; i<13; i++) { read_field[i] = *((unsigned char *)(0xfffc0010+i)); } for (i=0; i<13; i++) { if (read_field[i] != write_field[i]) { return 0; } } return 1; } main() { unsigned char frame_basic[10] = {0xEA,0x28,0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0}; unsigned char frame_extended[13] = {0x88,0xA6,0xB0,0x12,0x30,0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0}; unsigned char r_val; // test *** 1 Basic --> send frame basic printf("************************************\n"); printf("****** Test 1 **********************\n"); printf("************************************\n"); printf("****** Send frame basic ************\n"); printf("************************************\n"); printf("************************************\n\n"); init_can("Basic","normal"); enable_irq_sff(); write_frame_basic(frame_basic); tx_request_command(); //read_receive_buffer_basic(); reset_all_irqs(); // test *** 2 Extended --> send frame extended printf("************************************\n"); printf("****** Test 1 **********************\n"); printf("************************************\n"); printf("****** Send frame extended *********\n"); printf("************************************\n"); printf("************************************\n\n"); init_can("Extended","no_self_test"); enable_irq_eff(); write_frame_extended(frame_extended); tx_request_command(); read_receive_buffer_extended(); reset_all_irqs(); // test *** 3 Extended --> self test mode printf("************************************\n"); printf("****** Test 1 **********************\n"); printf("************************************\n"); printf("****** Self test mode **************\n"); printf("****** extended ********************\n"); printf("************************************\n\n"); init_can("Extended","self_test"); enable_irq_eff(); write_frame_extended(frame_extended); self_reception_request(); read_receive_buffer_extended(); if (test_read_frame_extended(frame_extended) == 1) { printf( "Test Passed !!!\n"); } else { printf( "Test failed !!!\n"); } reset_all_irqs(); // test *** 3 Extended --> self test mode }