]> rtime.felk.cvut.cz Git - jenkicar/rpp-simulink.git/blob - rpp/blocks/tlc_c/sfunction_hydctr_init.tlc
293b550f3b51daedab9bf5958eb80b0df2375cf4
[jenkicar/rpp-simulink.git] / rpp / blocks / tlc_c / sfunction_hydctr_init.tlc
1 %% Copyright (C) 2013-2015 Czech Technical University in Prague
2 %%
3 %% Authors:
4 %%     - Michal Horn <hornmich@fel.cvut.cz>
5 %%
6 %% This document contains proprietary information belonging to Czech
7 %% Technical University in Prague. Passing on and copying of this
8 %% document, and communication of its contents is not permitted
9 %% without prior written authorization.
10 %%
11 %% File : sfunction_hydctr_init.tlc
12 %% Abstract:
13 %%     TLC file for inlining RPP HYDCTR board init block.
14 %%
15 %% References:
16 %%     BlockTypeSetup() : refs/rtw_tlc.pdf p. 277
17 %%     Outputs()        : refs/rtw_tlc.pdf p. 281
18
19
20 %implements sfunction_hydctr_init "C"
21
22 %include "common.tlc"
23
24
25 %% Function: BlockInstanceSetup ================================================
26 %function BlockInstanceSetup(block, system) void
27     %if EXISTS("rpp_hydctrinit_in_model") == 0
28         %assign ::rpp_hydctrinit_in_model = 1
29         %<LibAddToCommonIncludes("rpp/spi.h")>
30     %else
31         %<LibBlockReportError(block, "Only one Board Init block is allowed in the model.")>
32     %endif
33 %endfunction
34
35 %% Function: BlockTypeSetup ====================================================
36 %function BlockTypeSetup(block, system) void
37
38     %% Ensure required header files are included
39     %<RppCommonBlockTypeSetup(block, system)>
40     %<LibAddToCommonIncludes("rpp/rpp.h")>
41     %<LibAddToCommonIncludes("drv/endian.h")>
42 %endfunction
43
44
45 %% Function: Start =============================================================
46 %function Start(block, system) Output
47
48     %if !SLibCodeGenForSim()
49
50         %assign err_flag = LibBlockOutputSignal(0, "", "", 0)
51
52         rpp_spi_init();
53         {
54           boolean_t err = FALSE;
55           uint16_t rx;
56
57           /% Single-value devices %/
58            %assign dev_id   = ["SPIDEV_MCP6S93_TH1", "SPIDEV_MCP6S93_TH2", "SPIDEV_TPS65381_PWR", "SPIDEV_MCP6S93_SENSUP", "SPIDEV_MCP6S93_DAC"]
59            %assign par_name = ["thermistor1",        "thermistor2",        "powersupply",         "sensorsupply",          "dacloopback"]
60
61            %foreach dev = SIZE(dev_id, 1)
62              %assign count = LibBlockParameterWidth(%<par_name[dev]>)
63              %foreach idx = count
64                %assign val = LibBlockParameterValue(%<par_name[dev]>, idx)
65                err |= (rpp_spi_transfer16(%<dev_id[dev]>, %<val>, &rx) != SUCCESS);
66                %%rpp_sci_printf("%<dev_id[dev]> %<val> -> 0x%04x\n", rx);
67              %endforeach
68            %endforeach
69
70            /% Daisy chained device %/
71             %assign size = LibBlockParameterDimensions(adcs)
72             %foreach command = size[0]
73               {
74                 uint16_t data[%<size[1]>] = {
75                   %foreach data = size[1]
76                     cpu_to_be16(%<LibBlockParameterValue(adcs, size[0]*data + command)>),
77                   %endforeach
78                 };
79                 err |= (rpp_spi_transfer(SPIDEV_MCP6S93_6ADC, sizeof(data), &data, NULL) != SUCCESS);
80               }
81         %endforeach
82         %<err_flag> = err;
83       }
84     %endif
85
86 %endfunction
87
88
89 %% [EOF]