annotate packages/devs/can/arm/lpc2xxx/current/src/can_accfilt_lpc2xxx.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 e8eaf852a606
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1 //==========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
2 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
3 // devs/can/arm/lpc2xxx/current/src/can_accfilt_lpc2xxx.c
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
4 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
5 // Acceptance filter management for LPC2xxx CAN driver
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
6 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
7 //==========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
9 // -------------------------------------------
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
12 // Copyright (C) 2003 Gary Thomas
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
13 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
14 // eCos is free software; you can redistribute it and/or modify it under
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
15 // the terms of the GNU General Public License as published by the Free
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
16 // Software Foundation; either version 2 or (at your option) any later version.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
17 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
21 // for more details.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
22 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
23 // You should have received a copy of the GNU General Public License along
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
26 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
27 // As a special exception, if other files instantiate templates or use macros
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
28 // or inline functions from this file, or you compile this file and link it
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
29 // with other works to produce a work based on this file, this file does not
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
30 // by itself cause the resulting work to be covered by the GNU General Public
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
31 // License. However the source code for this file must still be made available
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
32 // in accordance with section (3) of the GNU General Public License.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
33 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
34 // This exception does not invalidate any other reasons why a work based on
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
35 // this file might be covered by the GNU General Public License.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
36 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
38 // at http://sources.redhat.com/ecos/ecos-license/
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
39 // -------------------------------------------
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
40 //####ECOSGPLCOPYRIGHTEND####
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
41 //==========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
42 //#####DESCRIPTIONBEGIN####
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
43 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
44 // Author(s): Uwe Kindler
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
45 // Contributors: Uwe Kindler
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
46 // Date: 2007-05-28
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
47 // Purpose: Support LPC2xxx on-chip CAN acceptance filters
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
48 // Description:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
49 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
50 //####DESCRIPTIONEND####
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
51 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
52 //==========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
53
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
54
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
55 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
56 // Data types
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
57 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
58 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
59 // Acceptance filter entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
60 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
61 typedef struct lpc2xxx_accfilt_entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
62 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
63 cyg_uint32 data; // the value inclusive channel number
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
64 cyg_uint32 id;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
65 cyg_uint32 lower_id_bound;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
66 cyg_uint32 upper_id_bound;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
67 cyg_uint8 channel_no;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
68 } lpc2xxx_accfilt_entry_t;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
69
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
70
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
71 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
72 // Declarations
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
73 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
74 //--------------------------------------------------------------------------
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
75 // On no-suffix and /00 devices, the CAN controllers are numbered 1 to n
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
76 // (n = 2 or 4) in the LUT tables. However, on /01 devices, the CAN controllers
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
77 // are numbered 0 to n�1 in the LUT tables.
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
78 //
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
79 // On the LPC2468 the LUT channel numbers are also numbered from 0 - 4.
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
80 //
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
81 #if defined(CYGHWR_HAL_ARM_LPC2XXX_SUFFIX_01) || (CYGHWR_HAL_ARM_LPC2XXX_VARIANT_VERSION == 4)
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
82 # define LPC2XXX_CAN_FIRST_IN_LUT (0)
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
83 #else
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
84 # define LPC2XXX_CAN_FIRST_IN_LUT (1)
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
85 #endif
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
86
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
87 //
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
88 // This macro calculates the chanel number from the channel info. The channel
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
89 // number is numbered from 0 - 3 but in the LUT the channel number may differ
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
90 // depending on the device suffix. For some devices the channel number in
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
91 // LUT are numbered 0 - 3 and for other devices the channels in LUT are
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
92 // numbered 1 - 4. This macro abstrats this fact from the acceptance filter
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
93 // code
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
94 //
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
95 #define CAN_CHAN_NO_LUT(_info_) (CAN_CHAN_NO(_info_) + LPC2XXX_CAN_FIRST_IN_LUT)
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
96
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
97 //--------------------------------------------------------------------------
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
98 // Lowlevel acceptance filter access
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
99 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
100 #ifdef CYGOPT_IO_CAN_RUNTIME_MBOX_CFG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
101 static bool lpc2xxx_can_accfilt_add(lpc2xxx_can_info_t *info,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
102 cyg_uint32 lower_id,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
103 cyg_uint32 upper_id,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
104 cyg_can_id_type ext);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
105 void lpc2xxx_can_accfilt_ram_insert_entry(cyg_uint32 TableAddress, cyg_uint16 EntryNo);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
106 void lpc2xxx_can_accfilt_ram_remove_entry(cyg_uint32 TableAddress, cyg_uint16 EntryNo);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
107 void lpc2xxx_can_accfilt_remove_all_ctrl_entries(lpc2xxx_can_info_t *info);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
108 #else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
109 static void lpc2xxx_can_accfilt_simple_rx_all(void);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
110 #endif // CYGOPT_IO_CAN_RUNTIME_MBOX_CFG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
111 void lpc2xxx_can_accfilt_reset(void);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
112
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
113 #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
114 void lpc2xxx_can_accfilt_dbg_dump(void);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
115 void lpc2xxx_can_reg_dump(struct cyg_devtab_entry* devtab_entry);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
116 #endif
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
117
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
118
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
119 #ifdef CYGOPT_IO_CAN_RUNTIME_MBOX_CFG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
120 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
121 // Calculate address of entry in certain table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
122 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
123 static cyg_uint32 lpc2xxx_can_accfilt_calc_entry_address(cyg_uint32 TableAddressRegister, cyg_uint16 EntryNo)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
124 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
125 cyg_uint32 EntryAddress = 0xFFFFFFFF;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
126 cyg_uint32 TableAddress;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
127
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
128 HAL_READ_UINT32(TableAddressRegister, TableAddress);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
129 switch (TableAddressRegister)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
130 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
131 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
132 case CAN_ACCFILT_SFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
133 EntryAddress = ((EntryNo / 2) << 2) + TableAddress;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
134 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
135
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
136 case CAN_ACCFILT_SFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
137 EntryAddress = TableAddress + (EntryNo << 2);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
138 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
139 #endif // CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
140
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
141 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
142 case CAN_ACCFILT_EFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
143 EntryAddress = TableAddress + (EntryNo << 2);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
144 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
145
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
146 case CAN_ACCFILT_EFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
147 EntryAddress = TableAddress + (EntryNo << 3);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
148 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
149 #endif // CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
150 default:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
151 CYG_ASSERT(0, "Wrong TableAddressRegister");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
152 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
153
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
154 return EntryAddress;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
155 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
156
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
157
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
158 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
159 // Remove one single entry from acceptance filter table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
160 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
161 void lpc2xxx_can_accfilt_ram_remove_entry(cyg_uint32 Table, cyg_uint16 EntryNo)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
162 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
163 cyg_int32 remove_address = lpc2xxx_can_accfilt_calc_entry_address(Table, EntryNo);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
164 cyg_int32 entry_address;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
165 lsc_buf_t lsc_val;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
166 cyg_uint8 entry_size = sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
167 cyg_uint32 sff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
168 cyg_uint32 sff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
169 cyg_uint32 eff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
170 cyg_uint32 eff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
171 cyg_int32 end_of_table;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
172
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
173 HAL_READ_UINT32(CAN_ACCFILT_SFF_SA, sff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
174 HAL_READ_UINT32(CAN_ACCFILT_SFF_GRP_SA, sff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
175 HAL_READ_UINT32(CAN_ACCFILT_EFF_SA, eff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
176 HAL_READ_UINT32(CAN_ACCFILT_EFF_GRP_SA, eff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
177 HAL_READ_UINT32(CAN_ACCFILT_ENDOFTABLE, end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
178
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
179 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
180 // Do not try to remove from an empty table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
181 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
182 if (!end_of_table)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
183 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
184 return;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
185 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
186
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
187 entry_address = remove_address;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
188
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
189 if ((remove_address < eff_grp_sa) && (CAN_ACCFILT_EFF_GRP_SA != Table))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
190 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
191 if ((remove_address < eff_sa) && (CAN_ACCFILT_EFF_SA != Table))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
192 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
193 if ((remove_address < sff_grp_sa) && (CAN_ACCFILT_SFF_GRP_SA != Table))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
194 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
195 lsc_buf_t nextval;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
196
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
197 if (EntryNo % 2)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
198 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
199 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + remove_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
200 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + remove_address + sizeof(cyg_uint32), nextval.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
201 lsc_val.column.upper = nextval.column.lower;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
202 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
203 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
204
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
205 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
206 // Start copy immediatelly after removed entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
207 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
208 while (entry_address < sff_grp_sa)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
209 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
210 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
211 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address + sizeof(cyg_uint32), nextval.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
212 lsc_val.column.lower = lsc_val.column.upper;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
213 lsc_val.column.upper = nextval.column.lower;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
214 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
215 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
216 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
217
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
218 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
219 // now check if the lower identifier is disabled - if it is disabled, then
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
220 // also the upper identifier is invalid and we can remove the entry completely
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
221 // if the lower identifier is not disabled, then it is valid and we need
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
222 // to disable the upper identifier because it contains an invalid entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
223 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
224 if (lsc_val.column.lower & ACCFILT_STD_DIS)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
225 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
226 sff_grp_sa -= sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
227 entry_address = sff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
228 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
229 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
230 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
231 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + sff_grp_sa - sizeof(cyg_uint32), lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
232 lsc_val.column.upper = 0xffff;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
233 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + sff_grp_sa - sizeof(cyg_uint32), lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
234 entry_size = 0; // we do not need to remove anything
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
235 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
236 } // if (pLine < pStdGrpStart)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
237
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
238 eff_sa -= entry_size;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
239 } // if (pLine < pExtIdStart)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
240
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
241 eff_grp_sa -= entry_size;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
242 } // if (pLine < pExtGrpStart)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
243
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
244 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
245 // If no entry was removed then we can leave immediately without changing any
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
246 // table pointers because we only did a change inside the sff table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
247 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
248 if (!entry_size)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
249 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
250 #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
251 lpc2xxx_can_accfilt_dbg_dump();
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
252 #endif
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
253 return;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
254 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
255
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
256 if (CAN_ACCFILT_EFF_GRP_SA == Table)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
257 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
258 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
259 // If we are in the area of extended groups then we need to remove
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
260 // 2 lines because lower and upper identifier need 1 line each
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
261 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
262 entry_size += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
263 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
264
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
265 end_of_table -= entry_size;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
266
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
267 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
268 // Move all entries one or two dword downwards - that means we remove a line
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
269 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
270 while (entry_address < end_of_table)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
271 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
272 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address + entry_size, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
273 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
274 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
275 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
276
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
277 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_SA, sff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
278 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_GRP_SA, sff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
279 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_SA, eff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
280 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_GRP_SA, eff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
281 HAL_WRITE_UINT32(CAN_ACCFILT_ENDOFTABLE, end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
282
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
283 #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
284 lpc2xxx_can_accfilt_dbg_dump();
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
285 #endif
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
286 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
287
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
288 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
289 // Insert one empty line into ram - all entries behind this line will be
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
290 // moved one entry upwards
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
291 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
292 void lpc2xxx_can_accfilt_ram_insert_entry(cyg_uint32 Table, cyg_uint16 EntryNo)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
293 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
294 cyg_int16 insert_address = lpc2xxx_can_accfilt_calc_entry_address(Table, EntryNo);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
295 cyg_int16 entry_address;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
296 cyg_int16 copy_start = insert_address;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
297 lsc_buf_t lsc_val;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
298 cyg_uint8 entry_size = sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
299 cyg_uint32 sff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
300 cyg_uint32 sff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
301 cyg_uint32 eff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
302 cyg_uint32 eff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
303 cyg_uint32 end_of_table;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
304
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
305
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
306 HAL_READ_UINT32(CAN_ACCFILT_SFF_SA, sff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
307 HAL_READ_UINT32(CAN_ACCFILT_SFF_GRP_SA, sff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
308 HAL_READ_UINT32(CAN_ACCFILT_EFF_SA, eff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
309 HAL_READ_UINT32(CAN_ACCFILT_EFF_GRP_SA, eff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
310 HAL_READ_UINT32(CAN_ACCFILT_ENDOFTABLE, end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
311
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
312 if ((insert_address <= eff_grp_sa) && (CAN_ACCFILT_EFF_GRP_SA != Table))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
313 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
314 if ((insert_address <= eff_sa) && (CAN_ACCFILT_EFF_SA != Table))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
315 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
316 if ((insert_address <= sff_grp_sa) && (CAN_ACCFILT_SFF_GRP_SA != Table))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
317 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
318 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
319 // If we are in the range of standard identifiers then we need to
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
320 // do some special copy procedure for this area because a standard entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
321 // is only 2 byte long. Copy only til start of area with standard groups
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
322 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
323 if (sff_grp_sa)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
324 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
325 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + sff_grp_sa - sizeof(cyg_uint32), lsc_val.dword); // read last entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
326 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
327 // now check if the upper identifier is disabled - if it is disabled, then
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
328 // we have an odd number of std ids in the list. Then we do not need to
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
329 // insert a new line - we simply need to copy all entries 2 bytes upwards
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
330 // that means we only need to change the std id area and do not need to touch
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
331 // any other filter id area.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
332 // If the last entry is not disabled, then we have a valid filter here.
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
333 // Then we need to insert a complete new line, that means we also have to move
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
334 // all following entries and filter tables one dword upwards.
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
335 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
336 if (lsc_val.words.low & ACCFILT_STD_DIS)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
337 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
338 copy_start = end_of_table + sizeof(cyg_uint32); // we do not need to insert a new line and do not copy anything
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
339 entry_size = 0;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
340 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
341 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
342
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
343 if (entry_size)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
344 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
345 copy_start = sff_grp_sa; // copy everything behind std id group
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
346 sff_grp_sa += entry_size;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
347 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
348 } // if (pLine < pStdGrpStart)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
349
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
350 eff_sa += entry_size;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
351 } // if (pLine < pExtIdStart)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
352
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
353 eff_grp_sa += entry_size;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
354 } // if (pLine < pExtGrpStart)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
355
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
356 if (CAN_ACCFILT_EFF_GRP_SA == Table)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
357 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
358 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
359 // If we are in the area of extended groups then we need to insert
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
360 // 2 lines because lower and upper identifier need 1 line each
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
361 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
362 entry_size += sizeof(cyg_uint32); // one entry is 2 dword long
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
363 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
364
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
365 entry_address = end_of_table - sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
366 end_of_table += entry_size; // add one additional entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
367
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
368 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
369 // Move all entries one or two dwords upwards - that means we insert a new empty line
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
370 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
371 while (entry_address >= copy_start)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
372 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
373 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)entry_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
374 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)entry_address + entry_size, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
375 entry_address -= sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
376 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
377
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
378 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
379 // For the std ID area we need a special procedure
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
380 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
381 if (CAN_ACCFILT_SFF_SA == Table)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
382 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
383 lsc_buf_t preval;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
384 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
385 // Start copy with last entry of std id table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
386 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
387 entry_address = sff_grp_sa - sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
388
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
389 while (entry_address > insert_address)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
390 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
391 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)entry_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
392 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)entry_address - sizeof(cyg_uint32), preval.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
393 lsc_val.column.upper = lsc_val.column.lower;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
394 lsc_val.column.lower = preval.column.upper;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
395 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)entry_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
396 entry_address -= sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
397 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
398
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
399 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
400 // If we insert an entry into the lower column, then we need to move the
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
401 // content of the lower column into the upper column
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
402 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
403 if (!(EntryNo % 2))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
404 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
405 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)insert_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
406 lsc_val.column.upper = lsc_val.column.lower;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
407 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + (cyg_uint32)insert_address, lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
408 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
410 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
411 // If we inserted a new line, then we have an odd number of identifiers now
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
412 // and need to disable the last (the upper) entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
413 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
414 if (entry_size)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
415 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
416 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + sff_grp_sa - sizeof(cyg_uint32) , lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
417 lsc_val.column.upper = 0xFFFF; // disable the entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
418 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + sff_grp_sa - sizeof(cyg_uint32) , lsc_val.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
419 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
420 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
421
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
422 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_SA, sff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
423 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_GRP_SA, sff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
424 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_SA, eff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
425 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_GRP_SA, eff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
426 HAL_WRITE_UINT32(CAN_ACCFILT_ENDOFTABLE, end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
427 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
428
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
429
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
430 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
431 // Query number of entries in a certain table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
432 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
433 static cyg_uint16 lpc2xxx_can_accfilt_get_table_entries(cyg_uint32 TableStartAddress)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
434 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
435 cyg_uint32 start;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
436 cyg_uint32 end;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
437
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
438 switch (TableStartAddress)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
439 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
440 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
441 case CAN_ACCFILT_SFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
442 HAL_READ_UINT32(CAN_ACCFILT_SFF_SA, start);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
443 HAL_READ_UINT32(CAN_ACCFILT_SFF_GRP_SA, end);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
444 if (end - start)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
445 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
446 lsc_buf_t data;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
447 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + end - sizeof(cyg_uint32), data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
448 if (data.column.upper & ACCFILT_STD_DIS)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
449 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
450 return (((end - start) >> 1) - 1);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
451 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
452 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
453 return (end - start) >> 1;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
454
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
455 case CAN_ACCFILT_SFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
456 HAL_READ_UINT32(CAN_ACCFILT_SFF_GRP_SA, start);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
457 HAL_READ_UINT32(CAN_ACCFILT_EFF_SA, end);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
458 return (end - start) >> 2;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
459 #endif // CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
460
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
461 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
462 case CAN_ACCFILT_EFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
463 HAL_READ_UINT32(CAN_ACCFILT_EFF_SA, start);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
464 HAL_READ_UINT32(CAN_ACCFILT_EFF_GRP_SA, end);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
465 return (end - start) >> 2;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
466
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
467 case CAN_ACCFILT_EFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
468 HAL_READ_UINT32(CAN_ACCFILT_EFF_GRP_SA, start);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
469 HAL_READ_UINT32(CAN_ACCFILT_ENDOFTABLE, end);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
470 return (end - start) >> 3;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
471 #endif // CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
472 default:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
473 CYG_FAIL("Invalid identifier table address");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
474 return 0;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
475 } // switch (TableStartAddress)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
476 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
477
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
478 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
479 // Query certain entry from table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
480 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
481 static void lpc2xxx_can_accfilt_get_entry(cyg_uint32 TableStartAddress, cyg_uint16 EntryNo, lpc2xxx_accfilt_entry_t *pEntry)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
482 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
483 cyg_uint32 EntryAddress = lpc2xxx_can_accfilt_calc_entry_address(TableStartAddress, EntryNo);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
484 lsc_buf_t Data;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
485
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
486 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + EntryAddress, Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
487 pEntry->data = Data.dword;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
488 switch (TableStartAddress)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
489 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
490 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
491 case CAN_ACCFILT_SFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
492 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
493 cyg_uint16 column;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
494 if (EntryNo % 2)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
495 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
496 column = Data.column.upper;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
497 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
498 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
499 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
500 column = Data.column.lower;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
501 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
502 pEntry->id = ACCFILT_STD_GET_ID(column);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
503 pEntry->channel_no = ACCFILT_STD_GET_CTRL(column);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
504 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
505 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
506
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
507 case CAN_ACCFILT_SFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
508 pEntry->lower_id_bound = ACCFILT_STD_GET_ID(Data.column.lower);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
509 pEntry->upper_id_bound = ACCFILT_STD_GET_ID(Data.column.upper);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
510 pEntry->channel_no = ACCFILT_STD_GET_CTRL(Data.column.lower);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
511 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
512 #endif // #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
513
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
514 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
515 case CAN_ACCFILT_EFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
516 pEntry->id = ACCFILT_EXT_GET_ID(Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
517 pEntry->channel_no = ACCFILT_EXT_GET_CTRL(Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
518 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
519
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
520 case CAN_ACCFILT_EFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
521 pEntry->lower_id_bound = ACCFILT_EXT_GET_ID(Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
522 pEntry->channel_no = ACCFILT_EXT_GET_CTRL(Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
523 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE+ EntryAddress + sizeof(cyg_uint32), Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
524 pEntry->upper_id_bound = ACCFILT_EXT_GET_ID(Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
525 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
526 #endif // #ifedf CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
527 default:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
528 CYG_FAIL("Invalid identifier table address");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
529 } // switch ()
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
530 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
531
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
532
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
533 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
534 // Set certain entry in table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
535 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
536 static void lpc2xxx_can_accfilt_set_entry(cyg_uint32 TableStartAddress, cyg_uint16 EntryNo, lpc2xxx_accfilt_entry_t *pEntry)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
537 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
538 cyg_uint32 EntryAddress = lpc2xxx_can_accfilt_calc_entry_address(TableStartAddress, EntryNo);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
539 lsc_buf_t Data;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
540
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
541 switch (TableStartAddress)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
542 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
543 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
544 case CAN_ACCFILT_SFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
545 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
546 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + EntryAddress, Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
547 if (EntryNo % 2)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
548 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
549 Data.column.upper = (pEntry->channel_no << 13) | (pEntry->id & ACCFILT_STD_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
550 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
551 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
552 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
553 Data.column.lower = (pEntry->channel_no << 13) | (pEntry->id & ACCFILT_STD_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
554 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
555 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
556 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
557
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
558 case CAN_ACCFILT_SFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
559 Data.column.lower = (pEntry->channel_no << 13) | (pEntry->lower_id_bound & ACCFILT_STD_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
560 Data.column.upper = (pEntry->channel_no << 13) | (pEntry->upper_id_bound & ACCFILT_STD_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
561 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
562 #endif // #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
563
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
564 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
565 case CAN_ACCFILT_EFF_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
566 Data.dword = (pEntry->channel_no << 29) | (pEntry->id & ACCFILT_EXT_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
567 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
568
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
569 case CAN_ACCFILT_EFF_GRP_SA:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
570 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
571 lsc_buf_t Data2;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
572
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
573 Data.dword = (pEntry->channel_no << 29) | (pEntry->lower_id_bound & ACCFILT_EXT_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
574 Data2.dword = (pEntry->channel_no << 29) | (pEntry->upper_id_bound & ACCFILT_EXT_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
575 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + EntryAddress + sizeof(cyg_uint32), Data2.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
576 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
577 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
578 #endif // #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
579
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
580 default:
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
581 CYG_FAIL("Invalid identifier table address");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
582 } // switch ()
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
583
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
584 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + EntryAddress, Data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
585 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
586
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
587
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
588 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
589 // Add one entry to acceptance filter RAM
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
590 // If upper ID is > lower ID then we have to add a group filter - else we
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
591 // have to add a single message filter here
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
592 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
593 static bool lpc2xxx_can_accfilt_add(lpc2xxx_can_info_t *info,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
594 cyg_uint32 lower_id,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
595 cyg_uint32 upper_id,
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
596 cyg_can_id_type ext)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
597 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
598 cyg_uint32 accfilt_bck; // acceptance filter backup
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
599 cyg_uint32 end_of_table;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
600 cyg_uint32 table;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
601 lpc2xxx_accfilt_entry_t entry;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
602 lpc2xxx_accfilt_entry_t new_entry;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
603
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
604
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
605 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
606 // first step: disable acceptance filter and prepare it for modification
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
607 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
608 HAL_READ_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
609 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, AFMR_OFF | AFMR_BYPASS);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
610
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
611 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
612 // Check if table is full
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
613 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
614 HAL_READ_UINT32(CAN_ACCFILT_ENDOFTABLE, end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
615 if (end_of_table >= ACCFILT_RAM_SIZE)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
616 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
617 return false;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
618 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
619
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
620 new_entry.id = lower_id;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
621 new_entry.lower_id_bound = lower_id;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
622 new_entry.upper_id_bound = upper_id;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
623
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
624 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
625 // Here we rely on the ISR vector ordering for calculation of channel number
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
626 // Maybe this is not the right way for newer LPC parts
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
627 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
628 new_entry.channel_no = CAN_CHAN_NO_LUT(info);
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
629
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
630 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
631 // If lower_id == upper_id then we know that we have to setup a single message filter
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
632 // here. If it is not equal the it is group of identifiers to receive
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
633 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
634 if ((lower_id == upper_id) || (lower_id > upper_id))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
635 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
636 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
637 // setup single message filter (standard or extended) here
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
638 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
639 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
640 if (ext)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
641 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
642 table = CAN_ACCFILT_EFF_SA;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
643 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
644 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
645 #endif // #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
646 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
647 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
648 table = CAN_ACCFILT_SFF_SA;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
649 #endif // CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
650 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
651 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
652 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
653 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
654 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
655 // setup single message filter (standard or extended) here
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
656 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
657 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
658 if (ext)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
659 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
660 table = CAN_ACCFILT_EFF_GRP_SA;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
661 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
662 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
663 #endif // #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
664 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
665 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
666 table = CAN_ACCFILT_SFF_GRP_SA;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
667 #endif // #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
668 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
669 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
670
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
671 cyg_uint16 entries = lpc2xxx_can_accfilt_get_table_entries(table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
672 cyg_uint16 i;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
673
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
674
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
675 for (i = 0; i < entries; ++i)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
676 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
677 lpc2xxx_can_accfilt_get_entry(table, i, &entry);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
678
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
679 if (entry.channel_no > new_entry.channel_no)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
680 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
681 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
682 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
683
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
684 if ((entry.channel_no == new_entry.channel_no)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
685 && (entry.id > new_entry.id))
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
686 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
687 break;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
688 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
689 } // for (i = 0; i < entries; ++i)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
690
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
691 lpc2xxx_can_accfilt_ram_insert_entry(table, i);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
692 lpc2xxx_can_accfilt_set_entry(table, i, &new_entry);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
693
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
694 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
695 // finally restore the previous state of the acceptance filter
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
696 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
697 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
698 return true;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
699 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
700
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
701
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
702 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
703 // Remove all entries from a certain controller
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
704 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
705 void lpc2xxx_can_accfilt_remove_all_ctrl_entries(lpc2xxx_can_info_t *info)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
706 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
707 cyg_uint32 accfilt_bck; // acceptance filter backup
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
708 cyg_uint16 i;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
709 cyg_uint16 entries;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
710 cyg_uint32 TableStartAddress = CAN_ACCFILT_SFF_SA;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
711 lpc2xxx_accfilt_entry_t Entry;
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
712 cyg_uint8 channel_no = CAN_CHAN_NO_LUT(info);
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
713 cyg_uint16 entry_idx;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
714
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
715 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
716 // first step: disable acceptance filter and prepare it for modification
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
717 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
718 HAL_READ_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
719 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, AFMR_OFF | AFMR_BYPASS);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
720
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
721 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
722 // now remove all entries for a certain controller
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
723 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
724 for (TableStartAddress = CAN_ACCFILT_SFF_SA; TableStartAddress < CAN_ACCFILT_ENDOFTABLE; TableStartAddress += 4)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
725 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
726 entries = lpc2xxx_can_accfilt_get_table_entries(TableStartAddress);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
727 entry_idx = 0;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
728 for (i = 0; i < entries; ++i)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
729 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
730 lpc2xxx_can_accfilt_get_entry(TableStartAddress, entry_idx, &Entry);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
731 if (Entry.channel_no == channel_no)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
732 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
733 lpc2xxx_can_accfilt_ram_remove_entry(TableStartAddress, entry_idx);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
734 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
735 else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
736 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
737 entry_idx++;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
738 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
739 } // for (i = 0; i < entries; ++i)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
740 } // for (TableStartAddress = CAN_ACCFILT_SFF_SA ...
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
741
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
742 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
743 // finally restore the previous state of the acceptance filter
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
744 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
745 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
746 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
747 #endif // CYGOPT_IO_CAN_RUNTIME_MBOX_CFG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
748
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
749
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
750 #ifndef CYGOPT_IO_CAN_RUNTIME_MBOX_CFG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
751 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
752 // Setup reception of all CAN identifiers
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
753 // If runtime acceptance filter configuration is not required then we simply
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
754 // setup the acceptance filter here to receive all CAN identifiers
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
755 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
756 static void lpc2xxx_can_accfilt_simple_rx_all(void)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
757 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
758 cyg_uint32 regval;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
759
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
760 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
761 // First check if it is really necessary to setup filters. If end of table is
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
762 // != 0 then the acceptance filter is already setup properly
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
763 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
764 HAL_READ_UINT32(CAN_ACCFILT_ENDOFTABLE, regval);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
765 if (regval)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
766 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
767 return;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
768 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
769
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
770 cyg_uint32 accfilt_bck; // acceptance filter backup
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
771 cyg_uint8 i = 0; // loop counter
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
772 lsc_buf_t accfilt_entry; // std group entry
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
773 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
774 cyg_uint8 std_address = 0; // std group entry address
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
775 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
776 cyg_uint8 ext_address = lpc2xxx_global_can_info.init_cnt << 2;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
777 #endif
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
778 #else
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
779 cyg_uint8 ext_address = 0;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
780 #endif
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
781
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
782 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
783 // first step: disable acceptance filter and prepare it for modification
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
784 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
785 HAL_READ_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
786 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, AFMR_OFF | AFMR_BYPASS);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
787
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
788 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
789 // Write table start adresses - we use only standard group and extended filter
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
790 // group
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
791 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
792 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_SA, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
793 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_GRP_SA, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
794 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_SA, ext_address);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
795 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_GRP_SA, ext_address);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
796
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
797 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
798 // Now loop through all active CAN channels and setup the acceptance filter for
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
799 // each channel to receive all standard and extended CAN identifiers
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
800 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
801 while (lpc2xxx_global_can_info.active_channels[i])
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
802 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
803 lpc2xxx_can_info_t *info = (lpc2xxx_can_info_t *)lpc2xxx_global_can_info.active_channels[i++]->dev_priv;
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
804 cyg_uint8 channel_no = CAN_CHAN_NO_LUT(info);
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
805
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
806 #ifdef CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
807 accfilt_entry.column.lower = (channel_no << 13) | (0x000 & ACCFILT_STD_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
808 accfilt_entry.column.upper = (channel_no << 13) | (0x7FF & ACCFILT_STD_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
809 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + std_address, accfilt_entry.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
810 std_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
811 #endif // CYGOPT_IO_CAN_STD_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
812
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
813 #ifdef CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
814 accfilt_entry.dword = (channel_no << 29) | (0x00000000 & ACCFILT_EXT_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
815 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + ext_address, accfilt_entry.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
816 ext_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
817 accfilt_entry.dword = (channel_no << 29) | (0x1FFFFFFF & ACCFILT_EXT_ID_MASK);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
818 HAL_WRITE_UINT32(CAN_ACCFILT_RAM_BASE + ext_address, accfilt_entry.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
819 ext_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
820 #endif // CYGOPT_IO_CAN_EXT_CAN_ID
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
821 } // while (lpc2xxx_global_can_info.active_channels[i])
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
822
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
823 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
824 // finally store end of table value and restore the previous state of the
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
825 // acceptance filter
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
826 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
827 HAL_WRITE_UINT32(CAN_ACCFILT_ENDOFTABLE, ext_address);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
828 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
829 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
830 #endif // CYGOPT_IO_CAN_RUNTIME_MBOX_CFG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
831
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
832
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
833 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
834 // Reset acceptance filter to poweron defaults
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
835 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
836 void lpc2xxx_can_accfilt_reset(void)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
837 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
838 cyg_uint32 accfilt_bck; // acceptance filter backup
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
839 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
840 // first step: disable acceptance filter and prepare it for modification
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
841 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
842 HAL_READ_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
843 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, AFMR_OFF | AFMR_BYPASS);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
844
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
845 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
846 // Now write zero to all addresses of acceptance filter table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
847 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
848 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_SA, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
849 HAL_WRITE_UINT32(CAN_ACCFILT_SFF_GRP_SA, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
850 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_SA, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
851 HAL_WRITE_UINT32(CAN_ACCFILT_EFF_GRP_SA, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
852 HAL_WRITE_UINT32(CAN_ACCFILT_ENDOFTABLE, 0);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
853
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
854 //
2509
a52d470bc691 * cdl/can_lpc2xxx.cdl: Added CYGOPT_DEVS_CAN_LPC2XXX_ALIE to make
asl
parents: 2409
diff changeset
855 // finally restore the previous state of the acceptance filter
2409
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
856 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
857 HAL_WRITE_UINT32(CAN_ACCFILT_AFMR, accfilt_bck);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
858 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
859
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
860
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
861 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
862 // Dump content of acceptance filter lookup table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
863 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
864 #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
865 void lpc2xxx_can_accfilt_dbg_dump(void)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
866 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
867 cyg_uint32 sff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
868 cyg_uint32 sff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
869 cyg_uint32 eff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
870 cyg_uint32 eff_grp_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
871 cyg_uint32 end_of_table;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
872 cyg_uint32 entry_address;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
873 lsc_buf_t data;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
874
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
875
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
876 HAL_READ_UINT32(CAN_ACCFILT_SFF_SA, sff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
877 HAL_READ_UINT32(CAN_ACCFILT_SFF_GRP_SA, sff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
878 HAL_READ_UINT32(CAN_ACCFILT_EFF_SA, eff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
879 HAL_READ_UINT32(CAN_ACCFILT_EFF_GRP_SA, eff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
880 HAL_READ_UINT32(CAN_ACCFILT_ENDOFTABLE, end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
881
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
882 entry_address = sff_sa;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
883
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
884 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
885 // Print lookup table registers
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
886 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
887 diag_printf("\n\nDUMP CAN ACCEPTANCE FILTER REGISTERS\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
888 diag_printf("----------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
889 diag_printf("SFF_sa:\t\t0x%08x\n", sff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
890 diag_printf("SFF_GRP_sa:\t0x%08x\n", sff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
891 diag_printf("EFF_sa:\t\t0x%08x\n", eff_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
892 diag_printf("EFF_GRP_sa:\t0x%08x\n", eff_grp_sa);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
893 diag_printf("EOT:\t\t0x%08x\n", end_of_table);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
894
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
895 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
896 // Print table of standard identifiers
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
897 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
898 diag_printf("\n\nDUMP CAN LOOKUP TABLE RAM");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
899 diag_printf("\nSFF_sa\t\tcolumn_lower\tcolumn_upper\traw_data\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
900 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
901 while (entry_address < sff_grp_sa)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
902 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
903 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
904 diag_printf("0x%04x:\t\t0x%x\t\t0x%x\t\t0x%x\n", entry_address, data.column.lower, data.column.upper, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
905 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
906 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
907
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
908 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
909 // Print table of standard identifier groups
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
910 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
911 diag_printf("\nSFF_GRP_sa\tcolumn_lower\tcolumn_upper\traw_data\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
912 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
913 while (entry_address < eff_sa)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
914 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
915 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
916 diag_printf("0x%04x:\t\t0x%x\t\t0x%x\t\t0x%x\n", entry_address, data.column.lower, data.column.upper, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
917 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
918 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
919
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
920 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
921 // Print table of extended identifiers
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
922 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
923 diag_printf("\nEFF_sa\t\t-\t\t-\t\traw_data\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
924 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
925 while (entry_address < eff_grp_sa)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
926 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
927 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
928 diag_printf("0x%04x:\t\t\t\t\t\t0x%x\n", entry_address, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
929 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
930 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
931
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
932 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
933 // Print table of extended identifier groups
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
934 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
935 diag_printf("\nEFF_GRP_sa\t-\t\t-\t\traw_data\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
936 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
937 while (entry_address < end_of_table)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
938 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
939 HAL_READ_UINT32(CAN_ACCFILT_RAM_BASE + entry_address, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
940 diag_printf("0x%04x:\t\t\t\t\t\t0x%x\n", entry_address, data.dword);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
941 entry_address += sizeof(cyg_uint32);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
942 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
943 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
944 #endif // CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
945
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
946 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
947 // Dump content of acceptance filter lookup table
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
948 //===========================================================================
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
949 #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
950 void lpc2xxx_can_reg_dump(struct cyg_devtab_entry* devtab_entry)
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
951 {
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
952 can_channel *chan = (can_channel*)devtab_entry->priv;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
953 cyg_uint32 reg_val;
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
954 CAN_DECLARE_INFO(chan);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
955
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
956 chan = chan; // avoid compiler warnings for unused variables
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
957 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
958 // Print table of extended identifier groups
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
959 //
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
960 diag_printf("\n\nCAN REGISTER DUMP\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
961 diag_printf("\nRegister\tValue\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
962 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
963 HAL_READ_UINT32(CAN_CTRL_MOD(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
964 diag_printf("CANMOD\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
965 HAL_READ_UINT32(CAN_CTRL_CMR(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
966 diag_printf("CANCMR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
967 HAL_READ_UINT32(CAN_CTRL_GSR(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
968 diag_printf("CANGSR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
969 HAL_READ_UINT32(CAN_CTRL_ICR(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
970 diag_printf("CANICR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
971 HAL_READ_UINT32(CAN_CTRL_IER(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
972 diag_printf("CANIER\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
973 HAL_READ_UINT32(CAN_CTRL_BTR(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
974 diag_printf("CANBTR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
975 HAL_READ_UINT32(CAN_CTRL_EWL(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
976 diag_printf("CANEWL\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
977 HAL_READ_UINT32(CAN_CTRL_SR(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
978 diag_printf("CANSR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
979 HAL_READ_UINT32(CAN_CTRL_RFS(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
980 diag_printf("CANRFS\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
981 HAL_READ_UINT32(CAN_CTRL_RID(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
982 diag_printf("CANRID\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
983 HAL_READ_UINT32(CAN_CTRL_RDA(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
984 diag_printf("CANRDA\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
985 HAL_READ_UINT32(CAN_CTRL_RDB(info), reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
986 diag_printf("CANRDB\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
987
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
988 diag_printf("\n\nCAN CENTRAL REGISTER DUMP\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
989 diag_printf("\nRegister\tValue\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
990 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
991 HAL_READ_UINT32(CAN_CENTRAL_TXSR, reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
992 diag_printf("CANTxSR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
993 HAL_READ_UINT32(CAN_CENTRAL_RXSR, reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
994 diag_printf("CANRxSR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
995 HAL_READ_UINT32(CAN_CENTRAL_MSR, reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
996 diag_printf("CANMSR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
997
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
998 diag_printf("\n\nCAN ACCEPTANCE FILTER REGISTER DUMP\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
999 diag_printf("\nRegister\tValue\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1000 diag_printf("----------------------------------------------------------\n");
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1001 HAL_READ_UINT32(CAN_ACCFILT_AFMR, reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1002 diag_printf("AFMR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1003 HAL_READ_UINT32(CAN_ACCFILT_LUT_ERR, reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1004 diag_printf("LUTERR\t\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1005 HAL_READ_UINT32(CAN_ACCFILT_LUT_ERR_ADDR, reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1006 diag_printf("LUTERRADDR\t0x%08x\n", reg_val);
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1007 }
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1008 #endif // #ifdef CYGDBG_DEVS_CAN_LPC2XXX_DEBUG
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1009
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1010 //---------------------------------------------------------------------------
e8eaf852a606 2007-07-07 Alexey Shusharin <mrfinch@mail.ru>
asl
parents: 2406
diff changeset
1011 // EOF can_accfilt_lpc2xxx.c