1 %% Copyright (C) 2014 Czech Technical University in Prague
4 %% Michal Horn <hornmich@fel.cvut.cz>
5 %% Michal Sojka <sojkam1@fel.cvut.cz>
7 %% Redistribution and use in source and binary forms, with or without
8 %% modification, are permitted provided that the following conditions are
11 %% 1. Redistributions of source code must retain the above copyright
12 %% notice, this list of conditions and the following disclaimer.
14 %% 2. Redistributions in binary form must reproduce the above copyright
15 %% notice, this list of conditions and the following disclaimer in the
16 %% documentation and/or other materials provided with the
19 %% 3. Neither the name of the copyright holder nor the names of its
20 %% contributors may be used to endorse or promote products derived
21 %% from this software without specific prior written permission.
23 %% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 %% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 %% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 %% A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 %% HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 %% SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29 %% LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 %% DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 %% THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 %% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 %% OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 %% File : sfunction_cansetup.tlc
37 %% TLC file for configuring the CAN modules on the TI TMS570LS3137 MCU
40 %% BlockTypeSetup() : refs/rtw_tlc.pdf p. 277
41 %% Outputs() : refs/rtw_tlc.pdf p. 281
44 %implements sfunction_cansetup "C"
47 %include "rpp_can_common.tlc"
49 %% Function: BlockTypeSetup ====================================================
50 %function BlockTypeSetup(block, system) void
52 %% Ensure required header files are included
53 %<RppCommonBlockTypeSetup(block, system)>
54 %% %<LibAddToCommonIncludes("<sys/ti_drv_dmm.h>")>
56 %assign ::rpp_can_config_present = 1
58 %<RppCANCommonBlockTypeSetup()>
61 %function BlockInstanceSetup(block, system) void
62 %if EXISTS("rpp_canc_in_model") == 0
63 %assign ::rpp_canc_in_model = 1
65 %<LibBlockReportError(block, "Only one CAN Setup block is allowed in the model.")>
70 %% Function: Start =============================================================
71 %function Start(block, system) Output
74 enum ert_can_msg_types {
80 struct ert_can_channel_config {
81 unsigned int baudrate;
82 const char *net_dev_name;
85 struct ert_can_tx_config {
92 struct ert_can_rx_config {
100 struct ert_can_config {
103 struct ert_can_tx_config *tx_config;
104 struct ert_can_rx_config *rx_config;
105 struct ert_can_channel_config *channel_config;
108 #define CAN_TX_COUNT %<Rpp.Can.Tx.NumBlocks>
109 #define CAN_RX_COUNT %<Rpp.Can.Rx.NumBlocks>
111 struct ert_can_channel_config can_channel_config[3] = {
113 .baudrate = %<LibBlockParameterValue(baudrate_can1, 0)>
116 .baudrate = %<LibBlockParameterValue(baudrate_can2, 0)>
119 .baudrate = %<LibBlockParameterValue(baudrate_can3, 0)>
123 struct ert_can_tx_config tx_config[CAN_TX_COUNT] = {
124 %foreach id = Rpp.Can.Tx.NumBlocks
125 %with Rpp.Can.Tx.Block[id]
129 .id_type = ERT_CAN_STANDARD,
131 .id_type = ERT_CAN_EXTENDED,
133 .id_type = ERT_CAN_MIXED,
136 .channel = %<Controller>,
137 .msg_obj = %<MsgObj>,
143 struct ert_can_rx_config rx_config[CAN_RX_COUNT] = {
144 %foreach id = Rpp.Can.Rx.NumBlocks
145 %with Rpp.Can.Rx.Block[id]
149 .id_type = ERT_CAN_STANDARD,
151 .id_type = ERT_CAN_EXTENDED,
153 .id_type = ERT_CAN_MIXED,
156 .mask = %<SPRINTF("%#x", Mask)>,
157 .channel = %<Controller>,
158 .msg_obj = %<MsgObj>,
164 const struct ert_can_config can_config = {
165 .num_tx_obj = CAN_TX_COUNT,
166 .num_rx_obj = CAN_RX_COUNT,
167 .tx_config = tx_config,
168 .rx_config = rx_config,
169 .channel_config = can_channel_config
172 int can_rx_handles[CAN_RX_COUNT];
174 int can_tx_handles[CAN_RX_COUNT];
177 %<LibSetSourceFileSection(LibGetModelDotCFile(), "Declarations", buffer)>
180 returnstatus = rpp_can_init(&can_config);
181 if (returnstatus < 0) {
182 printf("CAN driver initialization error.\n");
185 %% printf("CAN communication initialized.\n");