candemo.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00053
00054 #include <stdlib.h>
00055 #include <stdio.h>
00056 #include <string.h>
00057 #include <io.h>
00058 #include <fcntl.h>
00059 #include <sys/timer.h>
00060 #include <sys/thread.h>
00061 #include <dev/debug.h>
00062 #include <dev/uartavr.h>
00063 #include <dev/can_dev.h>
00064 #include <dev/board.h>
00065
00066 #if defined(MCU_AT90CAN128) // Internal AVR MCU CAN controller
00067 # include <dev/atcan.h>
00068 # define DEV_CAN devAtCan
00069 #else
00070 # include <dev/sja1000.h>
00071 # define DEV_CAN devSJA1000
00072 #endif
00073
00074
00075
00076
00077
00078
00079 CANFRAME canFrame;
00080 CANINFO *canInfoPtr;
00081
00082
00086 int main(void)
00087 {
00088 #if defined(__AVR__) && defined(__GNUC__)
00089 unsigned long i;
00090 int result;
00091 #endif
00092 uint32_t baud = 115200;
00093
00094 NutRegisterDevice(&DEV_DEBUG, 0, 0);
00095 freopen(DEV_DEBUG_NAME, "w", stdout);
00096 _ioctl(_fileno(stdout), UART_SETSPEED, &baud);
00097
00098 printf("CAN driver test program\n");
00099
00100 #if defined(__AVR__) && defined(__GNUC__)
00101
00102
00103 result = NutRegisterDevice(&DEV_CAN, 0, 0);
00104 canInfoPtr = (CANINFO *) DEV_CAN.dev_dcb;
00105
00106 #if defined(MCU_AT90CAN128)
00107
00108 AtCanEnableRx(8,
00109 0,
00110 1,
00111 0,
00112 0,
00113 0,
00114 0
00115 );
00116 #endif
00117
00118
00119 CAN_SetSpeed(&DEV_CAN, CAN_SPEED_125K);
00120
00121 printf("Starting CAN RX/TX loop...\n");
00122 for (i = 0;;i++)
00123 {
00124
00125 memset(&canFrame, 0, sizeof(canFrame));
00126 canFrame.id = 0x123;
00127 canFrame.len = 8;
00128 canFrame.ext = 0;
00129 canFrame.byte[0] = 0x11;
00130 canFrame.byte[1] = 0x22;
00131 canFrame.byte[2] = 0x33;
00132 canFrame.byte[3] = 0x44;
00133 canFrame.byte[4] = 0x55;
00134 canFrame.byte[5] = 0x66;
00135 canFrame.byte[6] = 0x77;
00136 canFrame.byte[7] = 0x88;
00137 CAN_TxFrame(&DEV_CAN, &canFrame);
00138
00139
00140 if (CAN_TryRxFrame(&DEV_CAN, &canFrame) == 0)
00141 {
00142 uint8_t j;
00143
00144 printf("%ld ", canFrame.id);
00145 for (j = 0; j < canFrame.len; j++)
00146 printf("%02X ", canFrame.byte[j]);
00147 printf(" Stats: %lu %lu %lu %lu\n", canInfoPtr->can_interrupts,
00148 canInfoPtr->can_rx_frames,
00149 canInfoPtr->can_tx_frames,
00150 canInfoPtr->can_overruns);
00151 }
00152 NutSleep(10);
00153 }
00154 #else
00155 puts("No CAN device available");
00156 #endif
00157 return 0;
00158 }
00159