Mercurial > ecos-v3_0-branch
annotate packages/devs/can/arm/lpc2xxx/current/tests/can_multichan_rx.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 | 641c0b821739 |
| 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_multichan_rx.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 test for multiple CAN channels |
|
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 test for multiple CAN controller 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 // Package option requirements |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
74 #if defined(CYGOPT_IO_CAN_SUPPORT_NONBLOCKING) |
|
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 #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
|
77 //=========================================================================== |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
78 // DATA TYPES |
|
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 typedef struct st_thread_data |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
81 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
82 cyg_thread obj; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
83 long stack[CYGNUM_HAL_STACK_SIZE_TYPICAL]; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
84 cyg_handle_t hdl; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
85 } thread_data_t; |
|
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 |
|
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 // LOCAL 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_entry_t can_thread; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
92 thread_data_t can0_thread_data; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
93 cyg_io_handle_t hCAN_Tbl[4]; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
94 |
|
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 // Setup acceptance filter |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
98 //=========================================================================== |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
99 void can_setup_channel(cyg_io_handle_t hCAN, unsigned char Channel) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
100 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
101 cyg_uint32 len; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
102 cyg_can_msgbuf_cfg msgbox_cfg; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
103 cyg_uint8 i; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
104 cyg_uint32 blocking; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
105 |
|
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 // First we reset message buffer configuration - this is mandatory bevore starting |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
108 // message buffer runtime configuration. This call clears/frees all message buffers |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
109 // The CAN controller cannot receive any further CAN message after this call |
|
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 msgbox_cfg.cfg_id = CYGNUM_CAN_MSGBUF_RESET_ALL; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
112 len = sizeof(msgbox_cfg); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
113 if (ENOERR != cyg_io_set_config(hCAN, CYG_IO_SET_CONFIG_CAN_MSGBUF ,&msgbox_cfg, &len)) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
114 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
115 CYG_TEST_FAIL_FINISH("Error resetting message buffer configuration of /dev/can0"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
116 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
117 |
|
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 // Now setup 10 message filters for this channel |
|
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 for (i = 0; i < 10; ++i) |
|
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 cyg_can_filter rx_filter; |
|
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 rx_filter.cfg_id = CYGNUM_CAN_MSGBUF_RX_FILTER_ADD; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
126 rx_filter.msg.id = Channel * 0x100 + i; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
127 rx_filter.msg.ext = CYGNUM_CAN_ID_STD; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
128 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
129 len = sizeof(rx_filter); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
130 if (ENOERR != cyg_io_set_config(hCAN, CYG_IO_SET_CONFIG_CAN_MSGBUF ,&rx_filter, &len)) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
131 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
132 CYG_TEST_FAIL_FINISH("Error writing config"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
133 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
134 else if (CYGNUM_CAN_MSGBUF_NA == rx_filter.handle) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
135 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
136 CYG_TEST_FAIL_FINISH("Error setting up message filter"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
137 } |
|
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 set driver into nonblocking mode because the receiver thread will |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
142 // receive the messages from all channels |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
143 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
144 blocking = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
145 len = sizeof(blocking); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
146 if (ENOERR != cyg_io_set_config(hCAN, CYG_IO_SET_CONFIG_READ_BLOCKING ,&blocking, &len)) |
|
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 CYG_TEST_FAIL_FINISH("Error setting channel into nonblocking mode"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
149 } |
|
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 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
152 // If timeouts are supported we need to setup a timeout value of 0 because |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
153 // the driver should return immediatelly if no message is available |
|
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 #ifdef CYGOPT_IO_CAN_SUPPORT_TIMEOUTS |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
156 cyg_can_timeout_info_t timeouts; |
|
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 timeouts.rx_timeout = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
159 timeouts.tx_timeout = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
160 len = sizeof(timeouts); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
161 if (ENOERR != cyg_io_set_config(hCAN, CYG_IO_SET_CONFIG_CAN_TIMEOUT ,&timeouts, &len)) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
162 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
163 CYG_TEST_FAIL_FINISH("Error setting timeout for channel"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
164 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
165 #endif |
|
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 |
|
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 //=========================================================================== |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
170 // READER THREAD |
|
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 void can_thread(cyg_addrword_t data) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
173 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
174 cyg_uint32 len; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
175 cyg_uint8 i = 0; |
|
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 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
178 // Check that all cannels have the same baudrate |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
179 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
180 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN0 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
181 can_setup_channel(hCAN_Tbl[0], 0); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
182 #endif |
|
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 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN1 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
185 can_setup_channel(hCAN_Tbl[1], 1); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
186 #endif |
|
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 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN2 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
189 can_setup_channel(hCAN_Tbl[2], 2); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
190 #endif |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
191 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
192 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN3 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
193 can_setup_channel(hCAN_Tbl[3], 3); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
194 #endif |
|
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 diag_printf("\n\nThis test uses all available CAN channels for reception\n" |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
197 "of CAN standard messages. The following messages will be received:\n\n"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
198 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
199 for (i = 0; i < 4; ++i) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
200 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
201 if (hCAN_Tbl[i]) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
202 { |
|
2509
a52d470bc691
* cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents:
2406
diff
changeset
|
203 diag_printf("CAN channel %d: msg: 0x%03x - 0x%03x\n", i, i * 0x100, i * 0x100 + 9); |
|
2406
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 |
|
2509
a52d470bc691
* cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents:
2406
diff
changeset
|
207 diag_printf("\n\nYou can stop this test by sending a message with ID 0xX09\n"); |
|
2406
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 while (1) |
|
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 < 4; ++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 if (hCAN_Tbl[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 Cyg_ErrNo ret; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
216 cyg_can_event rx_event; |
|
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 len = sizeof(rx_event); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
219 ret = cyg_io_read(hCAN_Tbl[i], &rx_event, &len); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
220 if ((ret == -EAGAIN) || (ret == -EINTR)) |
|
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 continue; |
|
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 if (ENOERR != ret) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
226 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
227 CYG_TEST_FAIL_FINISH("Error reading from channel"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
228 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
229 else |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
230 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
231 diag_printf("Channel %d events: ", i); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
232 print_can_flags(rx_event.flags, ""); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
233 if (rx_event.flags & CYGNUM_CAN_EVENT_RX) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
234 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
235 print_can_msg(&rx_event.msg, ""); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
236 if ((rx_event.msg.id & 9) == 9) |
|
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 CYG_TEST_PASS_FINISH("LPC2xxx CAN multi channel RX test OK"); |
|
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 } // if (rx_event.flags & CYGNUM_CAN_EVENT_RX) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
241 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
242 } // if (hCAN_Tbl[i]) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
243 } // for (i = 0; i < 4; ++i) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
244 } // while (1) |
|
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 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
249 void |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
250 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 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN0 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
255 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
256 // open CAN device driver |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
257 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
258 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
|
259 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
260 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
|
261 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
262 #else |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
263 hCAN_Tbl[0] = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
264 #endif |
|
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 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN1 |
|
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 // open CAN device driver |
|
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 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
|
271 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
272 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
|
273 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
274 #else |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
275 hCAN_Tbl[1] = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
276 #endif |
|
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 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN2 |
|
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 // open CAN device driver |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
281 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
282 if (ENOERR != cyg_io_lookup(CYGPKG_DEVS_CAN_LPC2XXX_CAN2_NAME, &hCAN_Tbl[2])) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
283 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
284 CYG_TEST_FAIL_FINISH("Error opening CAN channel 2"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
285 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
286 #else |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
287 hCAN_Tbl[2] = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
288 #endif |
|
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 #ifdef CYGPKG_DEVS_CAN_LPC2XXX_CAN3 |
|
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 // open CAN device driver |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
293 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
294 if (ENOERR != cyg_io_lookup(CYGPKG_DEVS_CAN_LPC2XXX_CAN3_NAME, &hCAN_Tbl[3])) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
295 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
296 CYG_TEST_FAIL_FINISH("Error opening CAN channel 3"); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
297 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
298 #else |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
299 hCAN_Tbl[3] = 0; |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
300 #endif |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
301 |
|
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 // create the thread that accesses the CAN device driver |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
304 // |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
305 cyg_thread_create(4, can_thread, |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
306 (cyg_addrword_t) 0, |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
307 "can0_thread", |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
308 (void *) can0_thread_data.stack, |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
309 1024 * sizeof(long), |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
310 &can0_thread_data.hdl, |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
311 &can0_thread_data.obj); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
312 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
313 cyg_thread_resume(can0_thread_data.hdl); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
314 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
315 cyg_scheduler_start(); |
|
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 #else // CYGOPT_IO_CAN_SUPPORT_NONBLOCKING |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
318 #define N_A_MSG "Needs support for nonblocking calls" |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
319 #endif |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
320 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
321 #else // CYGFUN_KERNEL_API_C |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
322 #define N_A_MSG "Needs kernel C API" |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
323 #endif |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
324 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
325 #else // CYGPKG_IO_CAN && CYGPKG_KERNEL |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
326 #define N_A_MSG "Needs Kernel" |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
327 #endif |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
328 |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
329 #ifdef N_A_MSG |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
330 void |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
331 cyg_start( void ) |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
332 { |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
333 CYG_TEST_INIT(); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
334 CYG_TEST_NA(N_A_MSG); |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
335 } |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
336 #endif // N_A_MSG |
|
641c0b821739
CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff
changeset
|
337 |
|
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 // EOF can_multichan_rx.c |
