Mercurial > ecos-v3_0-branch
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 |
| 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 |
