annotate packages/devs/can/arm/lpc2xxx/current/tests/can_rx_tx.c @ 2509:a52d470bc691

* cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make arbitration lost interrupt optional. Added option CYGNUM_DEVS_CAN_LPC2XXX_INT_PRIORITY to configure the interrupt priority for global CAN interrupt in LPC24xx variants. * include/can_lpc2xxx_baudrates.h: Replaced CYGNUM_CAN_LPC2XXX_VPB_CLK by CYGNUM_HAL_ARM_LPC2XXX_CAN_CLK because newer variants like LPC24xx do not have a global VPB_CLK. * src/can_accfilt_lpc2xxx.c: Adjusted LPC2XXX_CAN_FIRST_IN_LUT to be 0 for LPC24xxx variants. Added macro CAN_CHAN_NO_LUT(_info_) to abstract channel numbering from acceptance filter code. * src/can_lpc2xxx.c: Removed icr data field from lpc2xxx_can_info_st structure because it is not required any longer. A lot of small modifications to make the driver usable with newer LPC2xxx variants like LPC24xx. ISR and DSR code changed - instead of disabling interrupts in IER register they are disabled in VIC by using cyg_drv_interrupt_mask() function calls. Added global CAN ISR and DSR for LPC24xx variants (they do not support individual interrupt vectors for RX and TX interrupts). Moved LUT error checking code from ISR into DSR to keep ISR as short as possible and made LUT error checking code optional. * cdl/can_lpc2xxx.cdl: add CAN interrupt priorities * src/can_lpc2xxx.c: add CAN interrupt priorities, repair "chan" definition missing in rx_ISR * src/can_accfilt_lpc2xxx.c: add various types of CAN controllers numbering (depends on LPC2XXX version)
author asl
date Tue, 22 Jul 2008 19:40:02 +0000
parents 05280737f180
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2406
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
1 //==========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
2 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
3 // can_rx_tx.c
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
4 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
5 // CAN RX / TX test
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
6 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
7 //==========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
9 // -------------------------------------------
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
12 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
14 // the terms of the GNU General Public License as published by the Free
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
16 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
20 // for more details.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
21 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
22 // You should have received a copy of the GNU General Public License along
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
25 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
27 // or inline functions from this file, or you compile this file and link it
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
28 // with other works to produce a work based on this file, this file does not
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
30 // License. However the source code for this file must still be made available
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
32 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
34 // this file might be covered by the GNU General Public License.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
35 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license/
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
38 // -------------------------------------------
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
40 //==========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
41 //#####DESCRIPTIONBEGIN####
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
42 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
43 // Author(s): Uwe Kindler
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
44 // Contributors: Uwe Kindler
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
45 // Date: 2007-06-26
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
46 // Description: CAN RX/TX test for 2 CAN channels
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
47 //####DESCRIPTIONEND####
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
48
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
49
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
50 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
51 // INCLUDES
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
52 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
53 #include <pkgconf/system.h>
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
54
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
55 #include <cyg/infra/testcase.h> // test macros
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
56 #include <cyg/infra/cyg_ass.h> // assertion macros
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
57 #include <cyg/infra/diag.h>
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
58
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
59 // Package requirements
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
60 #if defined(CYGPKG_IO_CAN) && defined(CYGPKG_KERNEL)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
61
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
62 #include <pkgconf/kernel.h>
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
63 #include <cyg/io/io.h>
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
64 #include <cyg/io/canio.h>
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
65
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
66
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
67 // Package option requirements
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
68 #if defined(CYGFUN_KERNEL_API_C)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
69
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
70 #include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
71 #include <cyg/kernel/kapi.h>
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
72
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
73 // We need two CAN channels
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
74 #if defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN0) && defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN1)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
75
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
76
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
77 // The same baud rates are required because we send from one channel to the other one
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
78 #if CYGNUM_DEVS_CAN_LPC2XXX_CAN0_KBAUD == CYGNUM_DEVS_CAN_LPC2XXX_CAN1_KBAUD
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
79
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
80
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
81 // We need the loop can driver
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2417
diff changeset
82 #if defined(CYGPKG_DEVS_CAN_LOOP)
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2417
diff changeset
83 #include <pkgconf/devs_can_loop.h>
2406
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
84
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
85 #include "can_test_aux.inl" // include CAN test auxiliary functions
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
86 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
87 // DATA TYPES
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
88 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
89 typedef struct st_thread_data
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
90 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
91 cyg_thread obj;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
92 long stack[CYGNUM_HAL_STACK_SIZE_TYPICAL];
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
93 cyg_handle_t hdl;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
94 } thread_data_t;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
95
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
96
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
97 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
98 // LOCAL DATA
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
99 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
100 cyg_thread_entry_t can_tx_thread;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
101 thread_data_t can0_thread_data;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
102 cyg_thread_entry_t can_rx_thread;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
103 thread_data_t can1_thread_data;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
104 cyg_io_handle_t hCAN_Tbl[2];
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
105 cyg_io_handle_t hLoopCAN_Tbl[2];
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
106
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
107
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
108 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
109 // Thread 0
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
110 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
111 void can_rx_thread(cyg_addrword_t data)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
112 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
113 cyg_uint32 len;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
114 cyg_can_event rx_event;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
115 cyg_can_event loop_rx_event;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
116 cyg_uint32 msg_cnt = 0;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
117 cyg_uint8 i;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
118
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
119 while (msg_cnt < 0xF0)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
120 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
121
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
122 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
123 // First receive CAN event from real CAN hardware
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
124 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
125 len = sizeof(rx_event);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
126 if (ENOERR != cyg_io_read(hCAN_Tbl[1], &rx_event, &len))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
127 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
128 CYG_TEST_FAIL_FINISH("Error reading from channel 1");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
129 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
130
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
131 if (rx_event.flags & CYGNUM_CAN_EVENT_RX)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
132 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
133 print_can_msg(&rx_event.msg, "RX chan 1:");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
134 } // if (rx_event.flags & CYGNUM_CAN_EVENT_RX)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
135 else
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
136 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
137 print_can_flags(rx_event.flags, "");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
138 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
139
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
140 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
141 // Now receive CAN event from loop CAN driver
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
142 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
143 len = sizeof(loop_rx_event);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
144 if (ENOERR != cyg_io_read(hLoopCAN_Tbl[1], &loop_rx_event, &len))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
145 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
146 CYG_TEST_FAIL_FINISH("Error reading from loop channel 1");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
147 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
148
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
149 if (rx_event.flags & CYGNUM_CAN_EVENT_RX)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
150 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
151 print_can_msg(&rx_event.msg, "RX loop 1:");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
152 } // if (rx_event.flags & CYGNUM_CAN_EVENT_RX)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
153 else
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
154 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
155 print_can_flags(rx_event.flags, "");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
156 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
157
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
158 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
159 // Chaeck message ID and DLC of HW CAN message and CAN message from loop driver
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
160 // booth should be the same
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
161 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
162 if (rx_event.msg.id != loop_rx_event.msg.id)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
163 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
164 CYG_TEST_FAIL_FINISH("Received message IDs of hw CAN channel and loop CAN channel are not equal");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
165 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
166
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
167 if (rx_event.msg.dlc != loop_rx_event.msg.dlc)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
168 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
169 CYG_TEST_FAIL_FINISH("Received DLCs of hw CAN msg and loop CAN msg are not equal");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
170 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
171
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
172 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
173 // Now check each data byte of the receive message
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
174 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
175 for (i = 0; i < rx_event.msg.dlc; ++i)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
176 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
177 if (rx_event.msg.data.bytes[i] != loop_rx_event.msg.data.bytes[i])
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
178 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
179 CYG_TEST_FAIL_FINISH("Data of hw CAN msg and loop CAN msg are not equal");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
180 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
181
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
182 if (rx_event.msg.data.bytes[i] != (i + msg_cnt))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
183 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
184 CYG_TEST_FAIL_FINISH("CAN message contains unexpected data");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
185 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
186 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
187
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
188 msg_cnt++;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
189 } // while (1)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
190
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
191 CYG_TEST_PASS_FINISH("CAN rx/tx test OK");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
192 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
193
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
194
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
195 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
196 // Thread 1
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
197 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
198 void can_tx_thread(cyg_addrword_t data)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
199 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
200 cyg_uint32 len;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
201 cyg_can_message tx_msg;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
202 cyg_uint32 msg_cnt = 0;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
203 cyg_uint8 i;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
204
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
205
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
206 CYG_CAN_MSG_SET_PARAM(tx_msg, 0, CYGNUM_CAN_ID_STD, 0, CYGNUM_CAN_FRAME_DATA);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
207
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
208 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
209 // Prepare CAN message with a known CAN state
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
210 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
211 for (i = 0; i < 8; ++i)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
212 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
213 tx_msg.data.bytes[i] = i;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
214 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
215
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
216 while (msg_cnt < 0xF0)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
217 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
218 tx_msg.id = msg_cnt;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
219 len = sizeof(tx_msg);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
220 if (ENOERR != cyg_io_write(hCAN_Tbl[0], &tx_msg, &len))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
221 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
222 CYG_TEST_FAIL_FINISH("Error writing to channel 0");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
223 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
224
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
225
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
226 tx_msg.id = msg_cnt;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
227 len = sizeof(tx_msg);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
228 if (ENOERR != cyg_io_write(hLoopCAN_Tbl[0], &tx_msg, &len))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
229 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
230 CYG_TEST_FAIL_FINISH("Error writing to channel 1");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
231 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
232
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
233 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
234 // Increment data in each single data byte
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
235 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
236 for (i = 0; i < 8; ++i)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
237 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
238 tx_msg.data.bytes[i] += 1;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
239 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
240
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
241 msg_cnt++;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
242 tx_msg.dlc = (tx_msg.dlc + 1) % 9;
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
243 } // while (msg_cnt < 0x100)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
244 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
245
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
246
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
247 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
248 // Entry point
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
249 //===========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
250 void cyg_start(void)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
251 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
252 CYG_TEST_INIT();
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
253
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
254 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
255 // open CAN device driver channel 1
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
256 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
257 if (ENOERR != cyg_io_lookup(CYGPKG_DEVS_CAN_LPC2XXX_CAN0_NAME, &hCAN_Tbl[0]))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
258 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
259 CYG_TEST_FAIL_FINISH("Error opening CAN channel 0");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
260 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
261
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
262
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
263 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
264 // open CAN device driver channel 2
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
265 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
266 if (ENOERR != cyg_io_lookup(CYGPKG_DEVS_CAN_LPC2XXX_CAN1_NAME, &hCAN_Tbl[1]))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
267 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
268 CYG_TEST_FAIL_FINISH("Error opening CAN channel 1");
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
269 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
270
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
271 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
272 // open Loop CAN device driver channel 1
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
273 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
274 if (ENOERR != cyg_io_lookup(CYGDAT_DEVS_CAN_LOOP_CAN0_NAME, &hLoopCAN_Tbl[0]))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
275 {
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2417
diff changeset
276 CYG_TEST_FAIL_FINISH("Error opening loop CAN channel 0");
2406
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
277 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
278
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
279
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
280 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
281 // open Loop CAN device driver channel 2
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
282 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
283 if (ENOERR != cyg_io_lookup(CYGDAT_DEVS_CAN_LOOP_CAN1_NAME, &hLoopCAN_Tbl[1]))
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
284 {
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2417
diff changeset
285 CYG_TEST_FAIL_FINISH("Error opening loop CAN channel 1");
2406
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
286 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
287
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
288
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
289
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
290
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
291
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
292 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
293 // create the first thread that access the CAN device driver
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
294 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
295 cyg_thread_create(5, can_tx_thread,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
296 (cyg_addrword_t) 0,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
297 "can_tx_thread",
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
298 (void *) can0_thread_data.stack,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
299 1024 * sizeof(long),
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
300 &can0_thread_data.hdl,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
301 &can0_thread_data.obj);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
302
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
303 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
304 // create the second thread that access the CAN device driver
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
305 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
306 cyg_thread_create(4, can_rx_thread,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
307 (cyg_addrword_t) 0,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
308 "can_rx_thread",
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
309 (void *) can1_thread_data.stack,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
310 1024 * sizeof(long),
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
311 &can1_thread_data.hdl,
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
312 &can1_thread_data.obj);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
313
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
314 cyg_thread_resume(can0_thread_data.hdl);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
315 cyg_thread_resume(can1_thread_data.hdl);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
316
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
317 cyg_scheduler_start();
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
318 }
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2417
diff changeset
319 #else // defined(CYGPKG_DEVS_CAN_LOOP)
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2417
diff changeset
320 #define N_A_MSG "Needs support for loop CAN device driver"
2406
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
321 #endif
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
322
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
323 #else // CYGNUM_DEVS_CAN_LPC2XXX_CAN0_KBAUD == CYGNUM_DEVS_CAN_LPC2XXX_CAN1_KBAUD
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
324 #define N_A_MSG "Baudrate of channel 0 and 1 need to be equal"
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
325 #endif
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
326
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
327 #else // defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN0) && defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN1)
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
328 #define N_A_MSG "Needs support for CAN channel 1 and 2"
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
329 #endif
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
330
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
331 #else // CYGFUN_KERNEL_API_C
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
332 #define N_A_MSG "Needs kernel C API"
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
333 #endif
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
334
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
335 #else // CYGPKG_IO_CAN && CYGPKG_KERNEL
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
336 #define N_A_MSG "Needs Kernel"
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
337 #endif
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
338
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
339 #ifdef N_A_MSG
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
340 void
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
341 cyg_start( void )
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
342 {
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
343 CYG_TEST_INIT();
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
344 CYG_TEST_NA(N_A_MSG);
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
345 }
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
346 #endif // N_A_MSG
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
347
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
348 //---------------------------------------------------------------------------
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
349 // EOF can_rx_tx.c