Digital Power Starter Kit 3 Firmware
dsPIC33C Boost Converter Voltage Mode Control Example
main.c
1
/*
2
* File: main.c
3
* Author: M91406
4
*
5
* Created on July 8, 2019, 1:52 PM
6
*/
7
8
#include <xc.h>
// include processor files - each processor file is guarded.
9
#include <stdint.h>
// include standard integer data types
10
#include <stdbool.h>
// include standard boolean data types
11
12
#include "main.h"
// include main header
13
#include "config/apps.h"
14
15
/*******************************************************************************
16
* @fn int main(void)
17
* @ingroup firmware-flow
18
* @brief Application main function executed after device comes out of RESET
19
* @return Signed Integer (0=failure, 1=success)
20
* @details
21
* This function is the starting point of the firmware. It is called after the
22
* device is coming out of RESET, starting to execute code. The startup sequence
23
* is as follows:
24
*
25
* 1) Boot():
26
*
27
* Configures fundamental system components
28
*
29
* Fundamental components are peripherals which are essential for the CPU to run,
30
* such as
31
*
32
* - system oscillator
33
* - auxiliary oscillator
34
* - general purpose input/output configuration
35
* - digital signal processor configuration
36
*
37
* 2) sysUserPeriperhals_Initialize()
38
*
39
* User-defined, static peripheral configurations (optional)
40
*
41
* Specific peripheral modules required to support circuit functions
42
* of the hardware, which are not covered by any task library, such as
43
*
44
* - Digital-To-Analog Converter (DAC):
45
* This peripheral instance is used to provide an analog debugging signal which
46
* can be used to output internal high-speed signals/values on an oscilloscope.
47
*
48
* - Operational Amplifier (OPA)
49
* The analog debugging signal generated by the DAC is buffered by one of the
50
* internal operational amplifiers to stabilize the signal when probed.
51
*
52
* 3) rtos_Execute()
53
*
54
* This application executes five tasks simultaneously:
55
*
56
* - High Priority Tasks
57
* - Power Supply State Machine & Control
58
* - System Fault Monitor & Diagnostics
59
*
60
* - Low Priority Tasks
61
* - LCD Display Control & Update
62
* - On-Board Push-Button HMI Control
63
* - On-Board Debugging LED Control
64
*
65
* The operating system supports four individual task queues:
66
*
67
* - Queue Initialize
68
* - Queue Startup Sequence
69
* - Queue Execute Sequence
70
* - Queue Stop Sequence
71
*
72
* Each 'Task' is an independent process which is called at integer multiples of
73
* the execution frequency. The default frequency (OS base clock) set in this code
74
* version is 100 us (= 10 kHz).
75
*
76
* At device startup the OS will execute all tasks listed in Queue Initialize
77
* where all initialization functions of all listed user tasks will be executed
78
* in one sequence without timing control. Each of the listed tasks must make
79
* sure all required device resources are configured within its individual
80
* initialization routine.
81
*
82
* After all initialization functions have been executed, the OS executes all
83
* tasks of Queue Startup Sequence. This intermediary step allows the alignment
84
* and deterministic startup behavior of all listed user tasks.
85
*
86
* After startup the OS is continuously executing Queue Execute. In each
87
* execution cycle the task execution timing settings Period and Offset are
88
* applied.
89
*
90
* The individual, effective task execution rate is set within each user-task
91
* configuration. The operating system is managing the internal counters of each
92
* task and raises execution triggers at integer multiples of the OS base clock.
93
* Timing settings Priority and Offset can be modified during runtime allowing
94
* readjustments to the application code execution profile. When called, the
95
* OS collects statistical data about the individual task execution and attaches
96
* the results to the individual task object data structure to be observed by
97
* other software processes and allows the detection of task execution quantum
98
* violations.
99
*
100
* High- and low-priority task execution is achieved by setting the high-priority
101
* parameter when Queue Execute gets called from the high priority OS interrupt.
102
* when Queue Execute gets called from the low-priority OS routine, only low-
103
* priority tasks will get called. This allows tasks to be dynamically lifted
104
* or dropped in priority during runtime while their individual task execution
105
* range is kept unchanged during priority transitions.
106
*
107
*********************************************************************************/
108
109
int
main(
void
) {
110
111
volatile
uint16_t retval = 1;
112
113
// Initialize basic system configuration
114
retval &= Boot();
115
116
// Initialize special, application-specific peripherals
117
retval &= sysUserPeriperhals_Initialize();
118
119
// Main program execution
120
retval &= rtos_Execute();
121
122
// if the firmware ever ends up here, reset the CPU
123
CPU_RESET();
124
125
// Main program execution
126
retval &= rtos_Execute();
127
128
// When the OS is exited, a CPU RESET will be triggered
129
// This section of the code should never be reached.
130
131
return
(0);
132
}
133
134
// ______________________________________
135
// end of file
dpsk_boost_vmc.X
sources
main.c
© 2021, Microchip Technology Inc.