mirror of
https://github.com/lcbcFoo/ReonV.git
synced 2025-04-22 04:27:08 -04:00
830 lines
25 KiB
C
Executable file
830 lines
25 KiB
C
Executable file
// 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
|
|
|
|
}
|