From 164fdb3b3406623b2bbedfecb52579f035b76fc6 Mon Sep 17 00:00:00 2001 From: Michal Horn Date: Wed, 5 Nov 2014 17:33:36 +0100 Subject: [PATCH] Implement simulink blocks and demo for GPIO Refs: #996, #997 --- rpp/blocks/rpp_lib.slx | Bin 18896 -> 19261 bytes rpp/blocks/sfunction_din.c | 165 ++++++++++++++++++++++++++ rpp/blocks/sfunction_dout.c | 177 ++++++++++++++++++++++++++++ rpp/blocks/tlc_c/sfunction_din.tlc | 104 ++++++++++++++++ rpp/blocks/tlc_c/sfunction_dout.tlc | 112 ++++++++++++++++++ rpp/demos/gio_demo.slx | Bin 0 -> 20358 bytes rpp/rpp/rpp_srmain.tlc | 7 +- 7 files changed, 563 insertions(+), 2 deletions(-) create mode 100644 rpp/blocks/sfunction_din.c create mode 100644 rpp/blocks/sfunction_dout.c create mode 100644 rpp/blocks/tlc_c/sfunction_din.tlc create mode 100644 rpp/blocks/tlc_c/sfunction_dout.tlc create mode 100644 rpp/demos/gio_demo.slx diff --git a/rpp/blocks/rpp_lib.slx b/rpp/blocks/rpp_lib.slx index f900a9fe584fbb0401c3606b11483a8c78b53294..1df78f61188d5a18b32fa1146ae3fcdede75e984 100644 GIT binary patch delta 18185 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 AkN^Mx delta 17775 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 G0001DcxkQx diff --git a/rpp/blocks/sfunction_din.c b/rpp/blocks/sfunction_din.c new file mode 100644 index 0000000..2b71e25 --- /dev/null +++ b/rpp/blocks/sfunction_din.c @@ -0,0 +1,165 @@ +/* Copyright (C) 2013, 2014 Czech Technical University in Prague + * + * Authors: + * - Carlos Jenkins + * + * This document contains proprietary information belonging to Czech + * Technical University in Prague. Passing on and copying of this + * document, and communication of its contents is not permitted + * without prior written authorization. + * + * File : sfunction_ain.c + * Abstract: + * C-MEX S-function block for reading from RPP GPIO ports. + * + * References: + * header.c + * trailer.c + * + * Compile with: + * /bin/mex sfunction_din.c + */ + +/* +%YAML 1.2 +--- +Name: Digital input +Category: IO blocks +Header: rpp/gio.h +Mnemonic: DIN + +Inputs: + +Outputs: + - { name: "Digital Input value", type: "bool" } +Parameters: + - { name: "Port type", type: "Choice", range: "GIOA, GIOB, NHET1" } + - { name: "Pin number", type: "int8", range: "Depends on selected port" } + - { name: "Input Type", type: "Choice", range: "Tri-state, Pull Up, Pull Down" } + +# Description is in Markdown mark-up +Description: + Reads a value from a GPIO pin. The block supports GIOA, GIOB and NHET1 ports. + Any pin can be configured as tri-state, pull up or pull down. + +Status: + Tested: + Untested: + Not working: + +RPP API functions used: + - hal_gpio_pin_get_dsc + - hal_gpio_pin_get_value + - hal_gpio_pin_conf_set + +Relevant demos: + - gio_demo +... +*/ + + +#define S_FUNCTION_NAME sfunction_din +#include "header.c" + +#define PARAM_NAME_PORT_TYPE "port_type" +#define PARAM_NAME_PIN_NUMBER "pin_number" +#define PARAM_NAME_INPUT_TYPE "input_type" + +/** Identifiers of the block parameters */ +enum params{ + PARAM_PORT_TYPE, + PARAM_PIN_NUMBER, + PARAM_INPUT_TYPE, + PARAMS_COUNT +}; + +enum port_types{ + PORT_UNKNOWN, + PORT_GIOA, + PORT_GIOB, + PORT_NHET1 +}; + +enum outputs{ + OUT_PIN_VALUE, + OUTPUTS_COUNT +}; + +static void mdlInitializeSizes(SimStruct *S) +{ + /* + * Configure parameters: 3 + * - Port type + * - Pin number + * - Input type + */ + if (!rppSetNumParams(S, PARAMS_COUNT)) { + return; + } + + /* + * Configure input ports: 0 + */ + if (!ssSetNumInputPorts(S, 0)) { + return; + } + + /* + * Configure output ports: 1 + */ + if (!ssSetNumOutputPorts(S, OUTPUTS_COUNT)) { + return; + } + rppAddOutputPort(S, OUT_PIN_VALUE, SS_BOOLEAN); + + /* Set standard options for this block */ + rppSetStandardOptions(S); +} + + +#ifdef MATLAB_MEX_FILE +#define MDL_CHECK_PARAMETERS +static void mdlCheckParameters(SimStruct *S) +{ + if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOA) { + if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) { + return; + } + } + else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOB) { + if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) { + return; + } + } + else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_NHET1) { + if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 31)) { + return; + } + } + else { + return; + } +} +#endif + + +#ifdef MATLAB_MEX_FILE +#define MDL_SET_WORK_WIDTHS +static void mdlSetWorkWidths(SimStruct *S) +{ + /* Set number of run-time parameters */ + if (!ssSetNumRunTimeParams(S, PARAMS_COUNT)) { + return; + } + /* Register the run-time parameter 1 */ + ssRegDlgParamAsRunTimeParam(S, PARAM_PORT_TYPE, PARAM_PORT_TYPE, PARAM_NAME_PORT_TYPE, SS_INT8); + ssRegDlgParamAsRunTimeParam(S, PARAM_PIN_NUMBER, PARAM_PIN_NUMBER, PARAM_NAME_PIN_NUMBER, SS_INT8); + ssRegDlgParamAsRunTimeParam(S, PARAM_INPUT_TYPE, PARAM_INPUT_TYPE, PARAM_NAME_INPUT_TYPE, SS_INT8); +} +#endif + + +#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT +#define UNUSED_MDLOUTPUTS +#define UNUSED_MDLTERMINATE +#include "trailer.c" diff --git a/rpp/blocks/sfunction_dout.c b/rpp/blocks/sfunction_dout.c new file mode 100644 index 0000000..b2f90e0 --- /dev/null +++ b/rpp/blocks/sfunction_dout.c @@ -0,0 +1,177 @@ +/* Copyright (C) 2013, 2014 Czech Technical University in Prague + * + * Authors: + * - Carlos Jenkins + * + * This document contains proprietary information belonging to Czech + * Technical University in Prague. Passing on and copying of this + * document, and communication of its contents is not permitted + * without prior written authorization. + * + * File : sfunction_ain.c + * Abstract: + * C-MEX S-function block for writting to RPP GPIO ports. + * + * References: + * header.c + * trailer.c + * + * Compile with: + * /bin/mex sfunction_dout.c + */ + +/* +%YAML 1.2 +--- +Name: Digital output +Category: IO blocks +Header: rpp/gio.h +Mnemonic: DOUT + +Inputs: + - { name: "Digital Output value", type: "bool" } +Outputs: + +Parameters: + - { name: "Port type", type: "Choice", range: "GIOA, GIOB, NHET1" } + - { name: "Pin number", type: "int8", range: "Depends on selected port" } + - { name: "Initial output value", type: "bool" } + - { name: "Output Type", type: "Choice", range: "Open Drain, Push/Pull" } + +# Description is in Markdown mark-up +Description: + Writes a value to a GPIO pin. The block supports GIOA, GIOB and NHET1 ports. + Any pin can be configured as open drain or push/pull and initial output value + can be specified. The initial value is a value, which will appear on the pin + after gpio module is initialized and persists here until the first write. + +Status: + Tested: + Untested: + Not working: + +RPP API functions used: + - hal_gpio_pin_get_dsc + - hal_gpio_pin_set_value + - hal_gpio_pin_conf_set + +Relevant demos: + - gio_demo +... +*/ + + +#define S_FUNCTION_NAME sfunction_dout +#include "header.c" + +#define PARAM_NAME_PORT_TYPE "port_type" +#define PARAM_NAME_PIN_NUMBER "pin_number" +#define PARAM_NAME_DEFAULT_OUTPUT "default_output" +#define PARAM_NAME_OUTPUT_TYPE "output_type" + +/** Identifiers of the block parameters */ +enum params{ + PARAM_PORT_TYPE, + PARAM_PIN_NUMBER, + PARAM_DEFAULT_OUTPUT, + PARAM_OUTPUT_TYPE, + PARAMS_COUNT +}; + +enum port_types{ + PORT_UNKNOWN, + PORT_GIOA, + PORT_GIOB, + PORT_NHET1 +}; + +enum inputs{ + IN_PIN_VALUE, + INPUTS_COUNT +}; + +static void mdlInitializeSizes(SimStruct *S) +{ + /* + * Configure parameters: 4 + * - Port type + * - Pin number + * - Default output value + * - Output type + */ + if (!rppSetNumParams(S, PARAMS_COUNT)) { + return; + } + + /* + * Configure output ports: 0 + */ + if (!ssSetNumOutputPorts(S, 0)) { + return; + } + + /* + * Configure input ports: 1 + */ + if (!ssSetNumInputPorts(S, INPUTS_COUNT)) { + return; + } + + rppAddInputPort(S, IN_PIN_VALUE, SS_BOOLEAN); + + /* Set standard options for this block */ + rppSetStandardOptions(S); +} + + +#ifdef MATLAB_MEX_FILE +#define MDL_CHECK_PARAMETERS +static void mdlCheckParameters(SimStruct *S) +{ + if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOA) { + if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) { + return; + } + } + else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_GIOB) { + if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 7)) { + return; + } + } + else if ((int_T)mxGetPr(ssGetSFcnParam(S, PARAM_PORT_TYPE))[0] == PORT_NHET1) { + if (!rppValidParamRange(S, PARAM_PIN_NUMBER, 0, 31)) { + return; + } + } + else { + return; + } + + if (!rppValidParamRange(S, PARAM_DEFAULT_OUTPUT, 0, 1)) { + return; + } +} +#endif + + +#ifdef MATLAB_MEX_FILE +#define MDL_SET_WORK_WIDTHS +static void mdlSetWorkWidths(SimStruct *S) +{ + /* Set number of run-time parameters */ + if (!ssSetNumRunTimeParams(S, PARAMS_COUNT)) { + return; + } + /* Register the run-time parameter 1 */ + ssRegDlgParamAsRunTimeParam(S, PARAM_PORT_TYPE, PARAM_PORT_TYPE, PARAM_NAME_PORT_TYPE, SS_INT8); + ssRegDlgParamAsRunTimeParam(S, PARAM_PIN_NUMBER, PARAM_PIN_NUMBER, PARAM_NAME_PIN_NUMBER, SS_INT8); + ssRegDlgParamAsRunTimeParam(S, PARAM_DEFAULT_OUTPUT, PARAM_DEFAULT_OUTPUT, PARAM_NAME_DEFAULT_OUTPUT, SS_BOOLEAN); + ssRegDlgParamAsRunTimeParam(S, PARAM_OUTPUT_TYPE, PARAM_OUTPUT_TYPE, PARAM_NAME_OUTPUT_TYPE, SS_INT8); +} +#endif + + +#define COMMON_MDLINITIALIZESAMPLETIMES_INHERIT +#define UNUSED_MDLOUTPUTS +#define UNUSED_MDLTERMINATE +#include "trailer.c" diff --git a/rpp/blocks/tlc_c/sfunction_din.tlc b/rpp/blocks/tlc_c/sfunction_din.tlc new file mode 100644 index 0000000..04dd10a --- /dev/null +++ b/rpp/blocks/tlc_c/sfunction_din.tlc @@ -0,0 +1,104 @@ +%% Copyright (C) 2013 Czech Technical University in Prague +%% +%% Authors: +%% - Carlos Jenkins +%% - Michal Horn +%% +%% This document contains proprietary information belonging to Czech +%% Technical University in Prague. Passing on and copying of this +%% document, and communication of its contents is not permitted +%% without prior written authorization. +%% +%% File : sfunction_din.tlc +%% Abstract: +%% TLC file for inlining RPP digital input block. +%% +%% References: +%% BlockTypeSetup() : rtw_tlc.pdf p. 277 +%% Start() : rtw_tlc.pdf p. 279 +%% Outputs() : rtw_tlc.pdf p. 281 + + +%implements sfunction_din "C" + +%include "common.tlc" + + +%% Function: BlockTypeSetup ==================================================== +%function BlockTypeSetup(block, system) void + + %% Ensure required header files are included + % + % + %assign ::rpp_din_present = 1 + +%endfunction + +%function BlockInstanceSetup(block, system) void + %assign port_par = LibBlockParameterValue(port_type, 0) + %assign pin_number_par = LibBlockParameterValue(pin_number, 0) + + %% Ensure that every pin is configured only once + %if EXISTS("::rpp_%_%_present") == 0 + %assign ::rpp_%_%_present = 1 + %else + % on port % has already been configred.")> + %endif +%endfunction + +%% Function: Start ============================================================= +%function Start(block, system) Output + %assign port_par = LibBlockParameterValue(port_type, 0) + %assign pin_number_par = LibBlockParameterValue(pin_number, 0) + %assign config = LibBlockParameterValue(input_type, 0) + + %if !SLibCodeGenForSim() + %openfile buffer + uint32_t* din_%_%_desc = NULL; + %closefile buffer + % + + uint32_t din_%_%_cfg = PORT_CONF_FNC_GPIO|PORT_CONF_DIR_IN; + %if port_par == 1 %% GIOA + %assign name = "GIOA%" + %elseif port_par == 2 %% GIOB + %assign name = "GIOB%" + %elseif port_par == 3 %% NHET1 + %assign name = "NHET1%" + %else + %")> + %endif + + din_%_%_desc = hal_gpio_pin_get_dsc("%", -1); + + %if config == 1 %% Tri-state + din_%_%_cfg |= PORT_CONF_MODE_PDIS|PORT_CONF_OD_ON; + %elseif config == 2 %% Pull up + din_%_%_cfg |= PORT_CONF_MODE_PEN|PORT_CONF_OD_OFF|PORT_CONF_MODE_PU; + %elseif config == 3 %% Pull down + din_%_%_cfg |= PORT_CONF_MODE_PEN|PORT_CONF_OD_OFF|PORT_CONF_MODE_PD; + %else %% error + %")> + %endif + + hal_gpio_pin_conf_set(*din_%_%_desc, din_%_%_cfg); + + %endif + +%endfunction + + +%% Function: Outputs =========================================================== +%function Outputs(block, system) Output + + %if !SLibCodeGenForSim() + %assign digital_in = LibBlockOutputSignal(0, "", "", 0) + %assign port_par = LibBlockParameterValue(port_type, 0) + %assign pin_number_par = LibBlockParameterValue(pin_number, 0) + uint32_t din_%_%_val = hal_gpio_pin_get_value(*din_%_%_desc); + % = din_%_%_val; + %endif + +%endfunction + +%% [EOF] diff --git a/rpp/blocks/tlc_c/sfunction_dout.tlc b/rpp/blocks/tlc_c/sfunction_dout.tlc new file mode 100644 index 0000000..27b95b8 --- /dev/null +++ b/rpp/blocks/tlc_c/sfunction_dout.tlc @@ -0,0 +1,112 @@ +%% Copyright (C) 2013 Czech Technical University in Prague +%% +%% Authors: +%% - Carlos Jenkins +%% - Michal Horn +%% +%% This document contains proprietary information belonging to Czech +%% Technical University in Prague. Passing on and copying of this +%% document, and communication of its contents is not permitted +%% without prior written authorization. +%% +%% File : sfunction_dout.tlc +%% Abstract: +%% TLC file for inlining RPP digital output block. +%% +%% References: +%% BlockTypeSetup() : rtw_tlc.pdf p. 277 +%% Start() : rtw_tlc.pdf p. 279 +%% Outputs() : rtw_tlc.pdf p. 281 + + +%implements sfunction_dout "C" + +%include "common.tlc" + + +%% Function: BlockTypeSetup ==================================================== +%function BlockTypeSetup(block, system) void + + %% Ensure required header files are included + % + % + %assign ::rpp_dout_present = 1 + +%endfunction + +%function BlockInstanceSetup(block, system) void + %assign port_par = LibBlockParameterValue(port_type, 0) + %assign pin_number_par = LibBlockParameterValue(pin_number, 0) + + %% Ensure that every pin is configured only once + %if EXISTS("::rpp_%_%_present") == 0 + %assign ::rpp_%_%_present = 1 + %else + % on port % has already been configred.")> + %endif +%endfunction + +%% Function: Start ============================================================= +%function Start(block, system) Output + %assign port_par = LibBlockParameterValue(port_type, 0) + %assign pin_number_par = LibBlockParameterValue(pin_number, 0) + %assign config = LibBlockParameterValue(output_type, 0) + %assign init_val = LibBlockParameterValue(default_output, 0) + + %if !SLibCodeGenForSim() + %openfile buffer + uint32_t* dout_%_%_desc = NULL; + %closefile buffer + % + + + + uint32_t dout_%_%_cfg = PORT_CONF_FNC_GPIO|PORT_CONF_DIR_OUT; + %if port_par == 1 %% GIOA + %assign name = "GIOA%" + %elseif port_par == 2 %% GIOB + %assign name = "GIOB%" + %elseif port_par == 3 %% NHET1 + %assign name = "NHET1%" + %else + %")> + %endif + + dout_%_%_desc = hal_gpio_pin_get_dsc("%", -1); + + %if init_val == 0 + dout_%_%_cfg |= PORT_CONF_INIT_LOW | PORT_CONF_MODE_PD; + %elseif init_val == 1 + dout_%_%_cfg |= PORT_CONF_INIT_HIGH | PORT_CONF_MODE_PU; + %else + %")> + %endif + + %if config == 1 %% Open drain + dout_%_%_cfg |= PORT_CONF_MODE_PDIS|PORT_CONF_OD_ON; + %elseif config == 2 %% push/pull + dout_%_%_cfg |= PORT_CONF_MODE_PEN|PORT_CONF_OD_OFF; + %else %% error + %")> + %endif + + hal_gpio_pin_conf_set(*dout_%_%_desc, dout_%_%_cfg); + + %endif + +%endfunction + + +%% Function: Outputs =========================================================== +%function Outputs(block, system) Output + + %if !SLibCodeGenForSim() + %assign digital_out = LibBlockInputSignal(0, "", "", 0) + %assign port_par = LibBlockParameterValue(port_type, 0) + %assign pin_number_par = LibBlockParameterValue(pin_number, 0) + hal_gpio_pin_set_value(*dout_%_%_desc, (uint32_t) %); + %endif + +%endfunction + +%% [EOF] diff --git a/rpp/demos/gio_demo.slx b/rpp/demos/gio_demo.slx new file mode 100644 index 0000000000000000000000000000000000000000..41304f4ac0a1292f860aa52705713093bd8b94bb GIT binary patch literal 20358 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 literal 0 HcmV?d00001 diff --git a/rpp/rpp/rpp_srmain.tlc b/rpp/rpp/rpp_srmain.tlc index 446e7da..93051f6 100644 --- a/rpp/rpp/rpp_srmain.tlc +++ b/rpp/rpp/rpp_srmain.tlc @@ -188,10 +188,13 @@ void main(void) { /* Initialize RPP board */ - %if EXISTS(::rpp_ain_present) + %if EXISTS(::rpp_ain_present) rpp_adc_init(); %endif - rpp_sci_init(); + %if EXISTS(::rpp_din_present) || EXISTS(::rpp_dout_present) + rpp_gio_init(RPP_GIO_PORT_ALL); + %endif + rpp_sci_init(); // Speed up the SCI rpp_sci_setup(115200); -- 2.39.2