1 %% Copyright (C) 2013-2015 Czech Technical University in Prague
4 %% - Michal Horn <hornmich@fel.cvut.cz>
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.
11 %% File : sfunction_hydctr_init.tlc
13 %% TLC file for inlining RPP HYDCTR board init block.
16 %% BlockTypeSetup() : refs/rtw_tlc.pdf p. 277
17 %% Outputs() : refs/rtw_tlc.pdf p. 281
20 %implements sfunction_hydctr_init "C"
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")>
31 %<LibBlockReportError(block, "Only one Board Init block is allowed in the model.")>
35 %% Function: BlockTypeSetup ====================================================
36 %function BlockTypeSetup(block, system) void
38 %% Ensure required header files are included
39 %<RppCommonBlockTypeSetup(block, system)>
40 %<LibAddToCommonIncludes("rpp/rpp.h")>
41 %<LibAddToCommonIncludes("drv/endian.h")>
45 %% Function: Start =============================================================
46 %function Start(block, system) Output
48 %if !SLibCodeGenForSim()
50 %assign err_flag = LibBlockOutputSignal(0, "", "", 0)
54 boolean_t err = FALSE;
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"]
61 %foreach dev = SIZE(dev_id, 1)
62 %assign count = LibBlockParameterWidth(%<par_name[dev]>)
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);
70 /% Daisy chained device %/
71 %assign size = LibBlockParameterDimensions(adcs)
72 %foreach command = size[0]
74 uint16_t data[%<size[1]>] = {
75 %foreach data = size[1]
76 cpu_to_be16(%<LibBlockParameterValue(adcs, size[0]*data + command)>),
79 err |= (rpp_spi_transfer(SPIDEV_MCP6S93_6ADC, sizeof(data), &data, NULL) != SUCCESS);