模块所在位置

image.png
不要忘记另存为模型,然后打开
image.png

修改配置文件

image.png

生成代码

image.png
image.png
这个代码的效果是通过ADC的软件触发,实现GPIO(LED)的翻转。
66a56dd2df78a100f32523063db553c.jpg

  1. /*
  2. * File: adc_software_trigger_s32k14x.c
  3. *
  4. * Code generated for Simulink model 'adc_software_trigger_s32k14x'.
  5. *
  6. * Model version : 1.102
  7. * Simulink Coder version : 9.3 (R2020a) 18-Nov-2019
  8. * C/C++ source code generated on : Sat Nov 12 15:27:28 2022
  9. *
  10. * Target selection: mbd_s32k.tlc
  11. * Embedded hardware selection: ARM Compatible->ARM Cortex
  12. * Code generation objectives: Unspecified
  13. * Validation result: Not run
  14. */
  15. #include "adc_software_trigger_s32k14x.h"
  16. #include "adc_software_trigger_s32k14x_private.h"
  17. /* Named constants for Chart: '<Root>/Chart' */
  18. #define adc_software_IN_NO_ACTIVE_CHILD ((uint8_T)0U)
  19. #define adc_software_trigger_s32k1_IN_A ((uint8_T)1U)
  20. #define adc_software_trigger_s32k_IN_A1 ((uint8_T)2U)
  21. /* Exported data definition */
  22. /* Volatile memory section */
  23. /* Definition for custom storage class: Volatile */
  24. volatile uint32_T Potentiometer_Value; /* '<Root>/Data Store Memory' */
  25. /* Block signals (default storage) */
  26. B_adc_software_trigger_s32k14_T adc_software_trigger_s32k14x_B;
  27. /* Block states (default storage) */
  28. DW_adc_software_trigger_s32k1_T adc_software_trigger_s32k14x_DW;
  29. /* Real-time model */
  30. RT_MODEL_adc_software_trigger_T adc_software_trigger_s32k14x_M_;
  31. RT_MODEL_adc_software_trigger_T *const adc_software_trigger_s32k14x_M =
  32. &adc_software_trigger_s32k14x_M_;
  33. /* Model step function */
  34. void adc_software_trigger_s32k14x_step(void)
  35. {
  36. /* S-Function (adc_s32k_start): '<Root>/ADC_Start' */
  37. {
  38. adc_chan_config_t adc0_chan_cfg = {
  39. .interruptEnable = false,
  40. .channel = ADC_INPUTCHAN_EXT12
  41. };
  42. /* Initialize channel configuration of ADC0. */
  43. ADC_DRV_ConfigChan(0, 0, &adc0_chan_cfg);
  44. uint16_t result;
  45. /* Get conversion result of ADC0 */
  46. ADC_DRV_WaitConvDone(0);
  47. ADC_DRV_GetChanResult(0, 0, &result);
  48. adc_software_trigger_s32k14x_B.ADC_Start = result;
  49. }
  50. /* DataStoreWrite: '<Root>/Data Store Write' */
  51. Potentiometer_Value = adc_software_trigger_s32k14x_B.ADC_Start;
  52. /* Chart: '<Root>/Chart' */
  53. /* Gateway: Chart */
  54. /* During: Chart */
  55. if (adc_software_trigger_s32k14x_DW.is_active_c3_adc_software_trigg == 0U) {
  56. /* Entry: Chart */
  57. adc_software_trigger_s32k14x_DW.is_active_c3_adc_software_trigg = 1U;
  58. /* Entry Internal: Chart */
  59. /* Transition: '<S1>:1' */
  60. adc_software_trigger_s32k14x_DW.is_c3_adc_software_trigger_s32k =
  61. adc_software_trigger_s32k1_IN_A;
  62. adc_software_trigger_s32k14x_B.A = true;
  63. } else if (adc_software_trigger_s32k14x_DW.is_c3_adc_software_trigger_s32k ==
  64. adc_software_trigger_s32k1_IN_A) {
  65. /* During 'A': '<S1>:3' */
  66. /* Transition: '<S1>:7' */
  67. adc_software_trigger_s32k14x_B.A = false;
  68. adc_software_trigger_s32k14x_DW.is_c3_adc_software_trigger_s32k =
  69. adc_software_trigger_s32k_IN_A1;
  70. } else {
  71. /* During 'A1': '<S1>:6' */
  72. /* Transition: '<S1>:8' */
  73. adc_software_trigger_s32k14x_DW.is_c3_adc_software_trigger_s32k =
  74. adc_software_trigger_s32k1_IN_A;
  75. adc_software_trigger_s32k14x_B.A = true;
  76. }
  77. /* End of Chart: '<Root>/Chart' */
  78. /* S-Function (gpio_s32k_output): '<Root>/Digital_Output' */
  79. /* GPOPORTD0 Data Signal Update */
  80. if (adc_software_trigger_s32k14x_B.A) {
  81. PINS_DRV_SetPins(PTD, 1UL<<0);
  82. } else {
  83. PINS_DRV_ClearPins(PTD, 1UL<<0);
  84. }
  85. }
  86. /* Model initialize function */
  87. void adc_software_trigger_s32k14x_initialize(void)
  88. {
  89. /* Registration code */
  90. /* initialize error status */
  91. rtmSetErrorStatus(adc_software_trigger_s32k14x_M, (NULL));
  92. /* block I/O */
  93. (void) memset(((void *) &adc_software_trigger_s32k14x_B), 0,
  94. sizeof(B_adc_software_trigger_s32k14_T));
  95. /* states (dwork) */
  96. (void) memset((void *)&adc_software_trigger_s32k14x_DW, 0,
  97. sizeof(DW_adc_software_trigger_s32k1_T));
  98. /* custom states */
  99. Potentiometer_Value = 0U;
  100. /* Start for S-Function (adc_s32k_config): '<Root>/ADC_Config' */
  101. {
  102. const adc_converter_config_t adc0_cfg = {
  103. .clockDivide = ADC_CLK_DIVIDE_1,
  104. .sampleTime = 28.0,
  105. .resolution = ADC_RESOLUTION_12BIT,
  106. .inputClock = ADC_CLK_ALT_1,
  107. .trigger = ADC_TRIGGER_SOFTWARE,
  108. .pretriggerSel = ADC_PRETRIGGER_SEL_SW,
  109. .triggerSel = ADC_TRIGGER_SEL_PDB,
  110. .dmaEnable = false,
  111. .voltageRef = ADC_VOLTAGEREF_VREF,
  112. .continuousConvEnable = false,
  113. .supplyMonitoringEnable = false
  114. };
  115. const adc_compare_config_t adc0_cmp_cfg = {
  116. .compareEnable = false,
  117. .compareGreaterThanEnable = false,
  118. .compareRangeFuncEnable = false,
  119. .compVal1 = 0,
  120. .compVal2 = 0
  121. };
  122. const adc_average_config_t adc0_avrg_cfg = {
  123. .hwAvgEnable = false,
  124. .hwAverage = ADC_AVERAGE_4
  125. };
  126. /* Enable ADC0 clock */
  127. PCC_SetClockMode(PCC, PCC_ADC0_CLOCK, false);
  128. /* Set ADC0 clock source */
  129. PCC_SetPeripheralClockControl(PCC, PCC_ADC0_CLOCK, true, CLK_SRC_SPLL, 0, 0);
  130. /* Enable ADC0 clock */
  131. PCC_SetClockMode(PCC, PCC_ADC0_CLOCK, true);
  132. ADC_DRV_Reset(0);
  133. /* Configure ADC0 */
  134. ADC_DRV_ConfigConverter(0, &adc0_cfg);
  135. ADC_DRV_SetSwPretrigger(0,ADC_SW_PRETRIGGER_DISABLED);
  136. ADC_DRV_ConfigHwCompare(0, &adc0_cmp_cfg);
  137. ADC_DRV_ConfigHwAverage(0, &adc0_avrg_cfg);
  138. /* Do calibration before initialize the ADC0. */
  139. ADC_DRV_AutoCalibration(0);
  140. }
  141. /* Start for S-Function (gpio_s32k_output): '<Root>/Digital_Output' */
  142. {
  143. /* Enable clock for PORTD */
  144. PCC_SetClockMode(PCC, PCC_PORTD_CLOCK, true);
  145. /* Configure the output port init structure. */
  146. const pin_settings_config_t gpioPORTDPin0 = {
  147. .base = PORTD,
  148. .pinPortIdx = 0,
  149. .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED,
  150. .passiveFilter = false,
  151. .driveSelect = PORT_LOW_DRIVE_STRENGTH,
  152. .mux = PORT_MUX_AS_GPIO,
  153. .pinLock = false,
  154. .intConfig = PORT_DMA_INT_DISABLED,
  155. .clearIntFlag = true,
  156. .gpioBase = PTD,
  157. .direction = GPIO_OUTPUT_DIRECTION,
  158. .initValue = 0U
  159. };
  160. /* Initialize GPIPORTD0. */
  161. PINS_DRV_Init(1, &gpioPORTDPin0);
  162. }
  163. /* Start for S-Function (fm_s32k_config): '<Root>/FreeMaster_Config' */
  164. /* Initialize FreeMaster. */
  165. freemaster_interface_init();
  166. freemaster_interface_isr_init();
  167. FMSTR_Init();
  168. /* SystemInitialize for Chart: '<Root>/Chart' */
  169. adc_software_trigger_s32k14x_DW.is_active_c3_adc_software_trigg = 0U;
  170. adc_software_trigger_s32k14x_DW.is_c3_adc_software_trigger_s32k =
  171. adc_software_IN_NO_ACTIVE_CHILD;
  172. adc_software_trigger_s32k14x_B.A = false;
  173. }
  174. /* Model terminate function */
  175. void adc_software_trigger_s32k14x_terminate(void)
  176. {
  177. /* (no terminate code required) */
  178. }
  179. /*
  180. * File trailer for generated code.
  181. *
  182. * [EOF]
  183. */