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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2406
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
1 //==========================================================================
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
2 //
641c0b821739 CAN driver for LPC2xxx, plus misc CAN improvements - from Uwe Kindler
gthomas
parents:
diff changeset
3 // can_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