├── .gitignore
├── LICENSE.md
├── README.md
├── TODO.md
├── ccs_configs
└── 28335ModbusCSettings.xml
├── contrib
├── DSP2833x
│ ├── DSP2833x_common
│ │ ├── cmd
│ │ │ ├── 28332_RAM_lnk.cmd
│ │ │ ├── 28334_RAM_lnk.cmd
│ │ │ ├── 28335_RAM_lnk.cmd
│ │ │ ├── F28332.cmd
│ │ │ ├── F28334.cmd
│ │ │ └── F28335.cmd
│ │ ├── gel
│ │ │ ├── ccsv4
│ │ │ │ ├── f28232.gel
│ │ │ │ ├── f28234.gel
│ │ │ │ ├── f28235.gel
│ │ │ │ ├── f28332.gel
│ │ │ │ ├── f28334.gel
│ │ │ │ └── f28335.gel
│ │ │ ├── f28232.gel
│ │ │ ├── f28234.gel
│ │ │ ├── f28235.gel
│ │ │ ├── f28332.gel
│ │ │ ├── f28334.gel
│ │ │ └── f28335.gel
│ │ ├── include
│ │ │ ├── DSP2833x_DefaultISR.h
│ │ │ ├── DSP2833x_Dma_defines.h
│ │ │ ├── DSP2833x_Examples.h
│ │ │ ├── DSP2833x_GlobalPrototypes.h
│ │ │ ├── DSP2833x_I2C_defines.h
│ │ │ ├── DSP2833x_SWPrioritizedIsrLevels.h
│ │ │ ├── DSP2833x_ePwm_defines.h
│ │ │ ├── DSP28x_Project.h
│ │ │ ├── IQmathLib.h
│ │ │ ├── SFO.h
│ │ │ └── SFO_V5.h
│ │ ├── lib
│ │ │ ├── IQmath.lib
│ │ │ ├── IQmath_fpu32.lib
│ │ │ ├── SFO_TI_Build.lib
│ │ │ ├── SFO_TI_Build_V5.lib
│ │ │ ├── SFO_TI_Build_V5B.lib
│ │ │ ├── SFO_TI_Build_V5B_fpu.lib
│ │ │ ├── SFO_TI_Build_V5_fpu.lib
│ │ │ └── SFO_TI_Build_fpu.lib
│ │ └── source
│ │ │ ├── DSP2833x_ADC_cal.asm
│ │ │ ├── DSP2833x_Adc.c
│ │ │ ├── DSP2833x_CSMPasswords.asm
│ │ │ ├── DSP2833x_CodeStartBranch.asm
│ │ │ ├── DSP2833x_CpuTimers.c
│ │ │ ├── DSP2833x_DBGIER.asm
│ │ │ ├── DSP2833x_DMA.c
│ │ │ ├── DSP2833x_DefaultIsr.c
│ │ │ ├── DSP2833x_DisInt.asm
│ │ │ ├── DSP2833x_ECan.c
│ │ │ ├── DSP2833x_ECap.c
│ │ │ ├── DSP2833x_EPwm.c
│ │ │ ├── DSP2833x_EQep.c
│ │ │ ├── DSP2833x_Gpio.c
│ │ │ ├── DSP2833x_I2C.c
│ │ │ ├── DSP2833x_McBSP.c
│ │ │ ├── DSP2833x_MemCopy.c
│ │ │ ├── DSP2833x_PieCtrl.c
│ │ │ ├── DSP2833x_PieVect.c
│ │ │ ├── DSP2833x_SWPrioritizedDefaultIsr.c
│ │ │ ├── DSP2833x_SWPrioritizedPieVect.c
│ │ │ ├── DSP2833x_Sci.c
│ │ │ ├── DSP2833x_Spi.c
│ │ │ ├── DSP2833x_SysCtrl.c
│ │ │ ├── DSP2833x_Xintf.c
│ │ │ └── DSP2833x_usDelay.asm
│ └── DSP2833x_headers
│ │ ├── cmd
│ │ ├── DSP2833x_Headers_BIOS.cmd
│ │ └── DSP2833x_Headers_nonBIOS.cmd
│ │ ├── gel
│ │ ├── DSP2833x_DualMap_EPWM.gel
│ │ └── DSP2833x_Peripheral.gel
│ │ ├── include
│ │ ├── DSP2833x_Adc.h
│ │ ├── DSP2833x_CpuTimers.h
│ │ ├── DSP2833x_DMA.h
│ │ ├── DSP2833x_DevEmu.h
│ │ ├── DSP2833x_Device.h
│ │ ├── DSP2833x_ECan.h
│ │ ├── DSP2833x_ECap.h
│ │ ├── DSP2833x_EPwm.h
│ │ ├── DSP2833x_EQep.h
│ │ ├── DSP2833x_Gpio.h
│ │ ├── DSP2833x_I2c.h
│ │ ├── DSP2833x_McBSP.h
│ │ ├── DSP2833x_PieCtrl.h
│ │ ├── DSP2833x_PieVect.h
│ │ ├── DSP2833x_Sci.h
│ │ ├── DSP2833x_Spi.h
│ │ ├── DSP2833x_SysCtrl.h
│ │ ├── DSP2833x_XIntrupt.h
│ │ └── DSP2833x_Xintf.h
│ │ └── source
│ │ └── DSP2833x_GlobalVariableDefs.c
├── dspProfiling
│ ├── Profiling.c
│ └── Profiling.h
└── modbus
│ ├── Crc.c
│ ├── ModbusData.c
│ ├── ModbusDataHandler.c
│ ├── ModbusDataMap.c
│ ├── ModbusSlave.c
│ ├── include
│ ├── Crc.h
│ ├── DataTypes.h
│ ├── Log.h
│ ├── ModbusData.h
│ ├── ModbusDataHandler.h
│ ├── ModbusDataMap.h
│ ├── ModbusDataMapTests.h
│ ├── ModbusDefinitions.h
│ ├── ModbusSettings.h
│ ├── ModbusSlave.h
│ ├── Serial.h
│ └── Timer.h
│ └── plataform
│ └── DSP2833x
│ ├── Serial.c
│ ├── Timer.c
│ └── include
│ ├── DSP2833x_CpuTimers.h
│ └── DSP2833x_Sci.h
├── makeCCSv3.bat
├── makeCCSv3.sh
├── src
├── 28335_RAM_lnk.cmd
├── DSP2833x_ADC_cal.asm
├── DSP2833x_CodeStartBranch.asm
├── DSP2833x_DefaultIsr.c
├── DSP2833x_GlobalVariableDefs.c
├── DSP2833x_Headers_nonBIOS.cmd
├── DSP2833x_SysCtrl.c
├── DSP2833x_usDelay.asm
└── main.c
└── tests
├── README.md
├── unit-test-client
├── unit-test-client.c
└── unit-test.h
/.gitignore:
--------------------------------------------------------------------------------
1 | *.pydevproject
2 | .metadata
3 | .ccsproject
4 | .project
5 | .gradle
6 | bin/
7 | tmp/
8 | *.tmp
9 | *.bak
10 | *.swp
11 | *~.nib
12 | local.properties
13 | .settings/
14 | Debug/
15 | .loadpath
16 | *~
17 |
18 | # External tool builders
19 | .externalToolBuilders/
20 |
21 | # Locally stored "Eclipse launch configurations"
22 | *.launch
23 |
24 | # CDT-specific
25 | .cproject
26 |
27 | # PDT-specific
28 | .buildpath
29 |
30 | # sbteclipse plugin
31 | .target
32 |
33 | # TeXlipse plugin
34 | .texlipse
35 |
36 | # CCSv3 Output folder
37 | CCSv3/
38 | CCSv3.zip
39 |
40 | # Project Specific
41 | ModbusDataMap*.h
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 28335ModbusSlave
2 | ================
3 |
4 | MODBUS implementation for F28335 DSP. This was developed by Bruno Luiz (@brunoluiz) to a project for TRACTEBEL in partnership with CERTI Foundation.
5 |
6 | Installing
7 | ==========
8 |
9 | Structure
10 | ---------
11 | All modbus implementation are at ```contrib/modbus``` folder. We suggest you to put all your code at source folder.
12 |
13 | If you need any DSP2833x header file you can find it at ```contrib/DSP2833x```
14 |
15 | Include paths
16 | -------------
17 | If you use Code Composer 4 (or later), import the C/C++ Project Settings from ```ccs_configs/28335ModbusCSettings.xml``` file.
18 |
19 | Another way to include the right paths is changing the "Include Options". At CCS 6.x you have to go to Project Settings (ALT+ENTER), then Build ``` C200 Compiler ``` Include Options. You've to include the following paths:
20 |
21 | * ```contrib/modbus/include```
22 | * ```contrib/modbus/plataform/ DSP2833x/include```
23 | * ```contrib/DSP2833x/DSP2833x_common/include```
24 | * ```contrib/DSP2833x/DSP2833x_headers/include```
25 |
26 | If your project uses custom DSP2833x headers/files you don't need the two last paths.
27 |
28 | Don't forget to exclude from compilation the ```contrib/dspProfiling``` and ```contrib/DSP2833x``` (right mouse click ``` Exclude from Build).
29 |
30 | Code Composers 3 or ealier versions
31 | -----------------------------------
32 | If you use CodeComposer v3.x or earlier, probably your directory structure uses PROJECT/Source and PROJECT/Include to control the src and header files. To make it more easier for your use, you can run makeCSSv3.bat (or makeCSSv3.sh if you use Linux) to create a folder with the same structure of CCSv3.
33 |
34 | At the batch file you can configure a different folder (CCSv3OutputDir), but the default action is create a "CCSv3" folder at the MODBUS root folder. If you don't have the serial and timer headers from Texas, I suggest you to enable their copy process changing the "CopySerialTimerHeader" variable.
35 |
36 | Implementing
37 | ============
38 |
39 | Normally this code will be implemented at ```main.c```
40 |
41 | 1. Include the ModbusSlave.h header
42 | 2. Change the configuration files:
43 | a. ```ModbusSettings.h```: baudrate, parity, debug modes, buffer size (the max size of a frame)...
44 | b. ```Serial.c``` & ```Timer.c```: if your CLOCK or LSPCLK are different from 150 e 37500000, change those files
45 | 3. Declare the modbus object with ```ModbusSlave mb;```
46 | 4. Initialize modbus object with ```mb = construct_ModbusSlave();```
47 | 5. At some loop, call modbus object with ```mb.loopStates(&mb);```
48 |
49 | Using memory map
50 | ================
51 |
52 | To use the memory map you will need to change the ```ModbusDataMap.h``` file with the variables that you want.
53 |
54 | Don't forget that coils/inputs are Uint8 values! By default, the holding registers are meant to be 32 bits (long or float). If you want to use 16 bits variables you can enable that disabling MB_32_BITS_REGISTERS on ```ModbusSettings.h```.
55 |
56 | Observation: the data map is specified at ```ModbusDataMap.h``` but if you want to hold different data maps and just change them before compile the code, you can change the ```MB_DATA_MAP``` constant at ```ModbusSettings.h```. By default it is ```ModbusDataMap.h```.
57 |
--------------------------------------------------------------------------------
/TODO.md:
--------------------------------------------------------------------------------
1 | - Check why Modbus Data maps are not changing (need a make clean before anything)
2 | - Comment the code
3 | - Build a better documentation (explaining the lifecycle)
4 |
--------------------------------------------------------------------------------
/ccs_configs/28335ModbusCSettings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | /${ProjName}/contrib/DSP2833x/DSP2833x_common/include
6 | /${ProjName}/contrib/DSP2833x/DSP2833x_headers/include
7 | /${ProjName}/contrib/modbus/plataform/DSP2833x/include
8 | /${ProjName}/contrib/modbus/include
9 | c:/ti/ccsv6/tools/compiler/c2000_6.2.7/include
10 |
11 |
12 |
13 | /${ProjName}/contrib/DSP2833x/DSP2833x_common/include
14 | /${ProjName}/contrib/DSP2833x/DSP2833x_headers/include
15 | /${ProjName}/contrib/modbus/plataform/DSP2833x/include
16 | /${ProjName}/contrib/modbus/include
17 | c:/ti/ccsv6/tools/compiler/c2000_6.2.7/include
18 |
19 |
20 |
21 | /${ProjName}/contrib/DSP2833x/DSP2833x_common/include
22 | /${ProjName}/contrib/DSP2833x/DSP2833x_headers/include
23 | /${ProjName}/contrib/modbus/plataform/DSP2833x/include
24 | /${ProjName}/contrib/modbus/include
25 | c:/ti/ccsv6/tools/compiler/c2000_6.2.7/include
26 |
27 |
28 |
29 | /${ProjName}/contrib/DSP2833x/DSP2833x_common/include
30 | /${ProjName}/contrib/DSP2833x/DSP2833x_headers/include
31 | /${ProjName}/contrib/modbus/plataform/DSP2833x/include
32 | /${ProjName}/contrib/modbus/include
33 | c:/ti/ccsv6/tools/compiler/c2000_6.2.7/include
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/cmd/28332_RAM_lnk.cmd:
--------------------------------------------------------------------------------
1 | /*
2 | // TI File $Revision: /main/10 $
3 | // Checkin $Date: April 15, 2009 09:57:22 $
4 | //###########################################################################
5 | //
6 | // FILE: 28332_RAM_lnk.cmd
7 | //
8 | // TITLE: Linker Command File For 28332 examples that run out of RAM
9 | //
10 | // This ONLY includes all SARAM blocks on the 28332 device.
11 | // This does not include flash or OTP.
12 | //
13 | // Keep in mind that L0 and L1 are protected by the code
14 | // security module.
15 | //
16 | // What this means is in most cases you will want to move to
17 | // another memory map file which has more memory defined.
18 | //
19 | //###########################################################################
20 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
21 | // $Release Date: August 4, 2009 $
22 | //###########################################################################
23 | */
24 |
25 | /* ======================================================
26 | // For Code Composer Studio V2.2 and later
27 | // ---------------------------------------
28 | // In addition to this memory linker command file,
29 | // add the header linker command file directly to the project.
30 | // The header linker command file is required to link the
31 | // peripheral structures to the proper locations within
32 | // the memory map.
33 | //
34 | // The header linker files are found in \DSP2833x_Headers\cmd
35 | //
36 | // For BIOS applications add: DSP2833x_Headers_BIOS.cmd
37 | // For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd
38 | ========================================================= */
39 |
40 | /* ======================================================
41 | // For Code Composer Studio prior to V2.2
42 | // --------------------------------------
43 | // 1) Use one of the following -l statements to include the
44 | // header linker command file in the project. The header linker
45 | // file is required to link the peripheral structures to the proper
46 | // locations within the memory map */
47 |
48 | /* Uncomment this line to include file only for non-BIOS applications */
49 | /* -l DSP2833x_Headers_nonBIOS.cmd */
50 |
51 | /* Uncomment this line to include file only for BIOS applications */
52 | /* -l DSP2833x_Headers_BIOS.cmd */
53 |
54 | /* 2) In your project add the path to \DSP2833x_headers\cmd to the
55 | library search path under project->build options, linker tab,
56 | library search path (-i).
57 | /*========================================================= */
58 |
59 | /* Define the memory block start/length for the F28332
60 | PAGE 0 will be used to organize program sections
61 | PAGE 1 will be used to organize data sections
62 |
63 | Notes:
64 | Memory blocks on F28332 are uniform (ie same
65 | physical memory) in both PAGE 0 and PAGE 1.
66 | That is the same memory region should not be
67 | defined for both PAGE 0 and PAGE 1.
68 | Doing so will result in corruption of program
69 | and/or data.
70 |
71 | L0/L1/L2 and L3 memory blocks are mirrored - that is
72 | they can be accessed in high memory or low memory.
73 | For simplicity only one instance is used in this
74 | linker file.
75 |
76 | Contiguous SARAM memory blocks can be combined
77 | if required to create a larger memory block.
78 | */
79 |
80 |
81 | MEMORY
82 | {
83 | PAGE 0 :
84 | /* BEGIN is used for the "boot to SARAM" bootloader mode */
85 |
86 | BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */
87 | RAMM0 : origin = 0x000050, length = 0x0003B0
88 |
89 | RAML0 : origin = 0x008000, length = 0x001000
90 | RAML1 : origin = 0x009000, length = 0x001000
91 | RAML2 : origin = 0x00A000, length = 0x001000
92 | RAML3 : origin = 0x00B000, length = 0x001000
93 | ZONE7A : origin = 0x200000, length = 0x00FC00 /* XINTF zone 7 - program space */
94 | CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
95 | CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
96 | ADC_CAL : origin = 0x380080, length = 0x000009
97 | RESET : origin = 0x3FFFC0, length = 0x000002
98 | IQTABLES : origin = 0x3FE000, length = 0x000b50
99 | IQTABLES2 : origin = 0x3FEB50, length = 0x00008c
100 | FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0
101 | BOOTROM : origin = 0x3FF27C, length = 0x000D44
102 |
103 |
104 |
105 |
106 | PAGE 1 :
107 | /* BOOT_RSVD is used by the boot ROM for stack. */
108 | /* This section is only reserved to keep the BOOT ROM from */
109 | /* corrupting this area during the debug process */
110 |
111 | BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */
112 | RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
113 | RAML4 : origin = 0x00C000, length = 0x001000
114 | RAML5 : origin = 0x00D000, length = 0x001000
115 | ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */
116 | }
117 |
118 |
119 | SECTIONS
120 | {
121 | /* Setup for "boot to SARAM" mode:
122 | The codestart section (found in DSP28_CodeStartBranch.asm)
123 | re-directs execution to the start of user code. */
124 | codestart : > BEGIN, PAGE = 0
125 | ramfuncs : > RAML0, PAGE = 0
126 | .text : > RAML1, PAGE = 0
127 | .cinit : > RAML0, PAGE = 0
128 | .pinit : > RAML0, PAGE = 0
129 | .switch : > RAML0, PAGE = 0
130 |
131 | .stack : > RAMM1, PAGE = 1
132 | .ebss : > RAML4, PAGE = 1
133 | .econst : > RAML5, PAGE = 1
134 | .esysmem : > RAMM1, PAGE = 1
135 |
136 | IQmath : > RAML1, PAGE = 0
137 | IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
138 |
139 | /* Uncomment the section below if calling the IQNexp() or IQexp()
140 | functions from the IQMath.lib library in order to utilize the
141 | relevant IQ Math table in Boot ROM (This saves space and Boot ROM
142 | is 1 wait-state). If this section is not uncommented, IQmathTables2
143 | will be loaded into other memory (SARAM, Flash, etc.) and will take
144 | up space, but 0 wait-state is possible.
145 | */
146 | /*
147 | IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
148 | {
149 |
150 | IQmath.lib (IQmathTablesRam)
151 |
152 | }
153 | */
154 |
155 | FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
156 |
157 | DMARAML4 : > RAML4, PAGE = 1
158 | DMARAML5 : > RAML5, PAGE = 1
159 |
160 | ZONE7DATA : > ZONE7B, PAGE = 1
161 |
162 |
163 | .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */
164 | csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
165 | csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT /* not used for SARAM examples */
166 |
167 | /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
168 | .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD
169 |
170 |
171 | }
172 |
173 | /*
174 | //===========================================================================
175 | // End of file.
176 | //===========================================================================
177 | */
178 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/DSP2833x_DefaultISR.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:45:37 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_DefaultIsr.h
6 | //
7 | // TITLE: DSP2833x Devices Default Interrupt Service Routines Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_DEFAULT_ISR_H
15 | #define DSP2833x_DEFAULT_ISR_H
16 |
17 | #ifdef __cplusplus
18 | extern "C" {
19 | #endif
20 |
21 |
22 | //---------------------------------------------------------------------------
23 | // Default Interrupt Service Routine Declarations:
24 | //
25 | // The following function prototypes are for the
26 | // default ISR routines used with the default PIE vector table.
27 | // This default vector table is found in the DSP2833x_PieVect.h
28 | // file.
29 | //
30 |
31 | // Non-Peripheral Interrupts:
32 | interrupt void INT13_ISR(void); // XINT13 or CPU-Timer 1
33 | interrupt void INT14_ISR(void); // CPU-Timer2
34 | interrupt void DATALOG_ISR(void); // Datalogging interrupt
35 | interrupt void RTOSINT_ISR(void); // RTOS interrupt
36 | interrupt void EMUINT_ISR(void); // Emulation interrupt
37 | interrupt void NMI_ISR(void); // Non-maskable interrupt
38 | interrupt void ILLEGAL_ISR(void); // Illegal operation TRAP
39 | interrupt void USER1_ISR(void); // User Defined trap 1
40 | interrupt void USER2_ISR(void); // User Defined trap 2
41 | interrupt void USER3_ISR(void); // User Defined trap 3
42 | interrupt void USER4_ISR(void); // User Defined trap 4
43 | interrupt void USER5_ISR(void); // User Defined trap 5
44 | interrupt void USER6_ISR(void); // User Defined trap 6
45 | interrupt void USER7_ISR(void); // User Defined trap 7
46 | interrupt void USER8_ISR(void); // User Defined trap 8
47 | interrupt void USER9_ISR(void); // User Defined trap 9
48 | interrupt void USER10_ISR(void); // User Defined trap 10
49 | interrupt void USER11_ISR(void); // User Defined trap 11
50 | interrupt void USER12_ISR(void); // User Defined trap 12
51 |
52 | // Group 1 PIE Interrupt Service Routines:
53 | interrupt void SEQ1INT_ISR(void); // ADC Sequencer 1 ISR
54 | interrupt void SEQ2INT_ISR(void); // ADC Sequencer 2 ISR
55 | interrupt void XINT1_ISR(void); // External interrupt 1
56 | interrupt void XINT2_ISR(void); // External interrupt 2
57 | interrupt void ADCINT_ISR(void); // ADC
58 | interrupt void TINT0_ISR(void); // Timer 0
59 | interrupt void WAKEINT_ISR(void); // WD
60 |
61 | // Group 2 PIE Interrupt Service Routines:
62 | interrupt void EPWM1_TZINT_ISR(void); // EPWM-1
63 | interrupt void EPWM2_TZINT_ISR(void); // EPWM-2
64 | interrupt void EPWM3_TZINT_ISR(void); // EPWM-3
65 | interrupt void EPWM4_TZINT_ISR(void); // EPWM-4
66 | interrupt void EPWM5_TZINT_ISR(void); // EPWM-5
67 | interrupt void EPWM6_TZINT_ISR(void); // EPWM-6
68 |
69 | // Group 3 PIE Interrupt Service Routines:
70 | interrupt void EPWM1_INT_ISR(void); // EPWM-1
71 | interrupt void EPWM2_INT_ISR(void); // EPWM-2
72 | interrupt void EPWM3_INT_ISR(void); // EPWM-3
73 | interrupt void EPWM4_INT_ISR(void); // EPWM-4
74 | interrupt void EPWM5_INT_ISR(void); // EPWM-5
75 | interrupt void EPWM6_INT_ISR(void); // EPWM-6
76 |
77 | // Group 4 PIE Interrupt Service Routines:
78 | interrupt void ECAP1_INT_ISR(void); // ECAP-1
79 | interrupt void ECAP2_INT_ISR(void); // ECAP-2
80 | interrupt void ECAP3_INT_ISR(void); // ECAP-3
81 | interrupt void ECAP4_INT_ISR(void); // ECAP-4
82 | interrupt void ECAP5_INT_ISR(void); // ECAP-5
83 | interrupt void ECAP6_INT_ISR(void); // ECAP-6
84 |
85 | // Group 5 PIE Interrupt Service Routines:
86 | interrupt void EQEP1_INT_ISR(void); // EQEP-1
87 | interrupt void EQEP2_INT_ISR(void); // EQEP-2
88 |
89 | // Group 6 PIE Interrupt Service Routines:
90 | interrupt void SPIRXINTA_ISR(void); // SPI-A
91 | interrupt void SPITXINTA_ISR(void); // SPI-A
92 | interrupt void MRINTA_ISR(void); // McBSP-A
93 | interrupt void MXINTA_ISR(void); // McBSP-A
94 | interrupt void MRINTB_ISR(void); // McBSP-B
95 | interrupt void MXINTB_ISR(void); // McBSP-B
96 |
97 | // Group 7 PIE Interrupt Service Routines:
98 | interrupt void DINTCH1_ISR(void); // DMA-Channel 1
99 | interrupt void DINTCH2_ISR(void); // DMA-Channel 2
100 | interrupt void DINTCH3_ISR(void); // DMA-Channel 3
101 | interrupt void DINTCH4_ISR(void); // DMA-Channel 4
102 | interrupt void DINTCH5_ISR(void); // DMA-Channel 5
103 | interrupt void DINTCH6_ISR(void); // DMA-Channel 6
104 |
105 | // Group 8 PIE Interrupt Service Routines:
106 | interrupt void I2CINT1A_ISR(void); // I2C-A
107 | interrupt void I2CINT2A_ISR(void); // I2C-A
108 | interrupt void SCIRXINTC_ISR(void); // SCI-C
109 | interrupt void SCITXINTC_ISR(void); // SCI-C
110 |
111 | // Group 9 PIE Interrupt Service Routines:
112 | interrupt void SCIRXINTA_ISR(void); // SCI-A
113 | interrupt void SCITXINTA_ISR(void); // SCI-A
114 | interrupt void SCIRXINTB_ISR(void); // SCI-B
115 | interrupt void SCITXINTB_ISR(void); // SCI-B
116 | interrupt void ECAN0INTA_ISR(void); // eCAN-A
117 | interrupt void ECAN1INTA_ISR(void); // eCAN-A
118 | interrupt void ECAN0INTB_ISR(void); // eCAN-B
119 | interrupt void ECAN1INTB_ISR(void); // eCAN-B
120 |
121 | // Group 10 PIE Interrupt Service Routines:
122 |
123 | // Group 11 PIE Interrupt Service Routines:
124 |
125 | // Group 12 PIE Interrupt Service Routines:
126 | interrupt void XINT3_ISR(void); // External interrupt 3
127 | interrupt void XINT4_ISR(void); // External interrupt 4
128 | interrupt void XINT5_ISR(void); // External interrupt 5
129 | interrupt void XINT6_ISR(void); // External interrupt 6
130 | interrupt void XINT7_ISR(void); // External interrupt 7
131 | interrupt void LVF_ISR(void); // Latched overflow flag
132 | interrupt void LUF_ISR(void); // Latched underflow flag
133 |
134 | // Catch-all for Reserved Locations For testing purposes:
135 | interrupt void PIE_RESERVED(void); // Reserved for test
136 | interrupt void rsvd_ISR(void); // for test
137 | interrupt void INT_NOTUSED_ISR(void); // for unused interrupts
138 |
139 | #ifdef __cplusplus
140 | }
141 | #endif /* extern "C" */
142 |
143 | #endif // end of DSP2833x_DEFAULT_ISR_H definition
144 |
145 | //===========================================================================
146 | // End of file.
147 | //===========================================================================
148 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/DSP2833x_Dma_defines.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/2 $
2 | // Checkin $Date: August 14, 2007 16:32:29 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Dma_defines.h
6 | //
7 | // TITLE: #defines used in DMA examples
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_DMA_DEFINES_H
15 | #define DSP2833x_DMA_DEFINES_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | // MODE
23 | //==========================
24 | // PERINTSEL bits
25 | #define DMA_SEQ1INT 1
26 | #define DMA_SEQ2INT 2
27 | #define DMA_XINT1 3
28 | #define DMA_XINT2 4
29 | #define DMA_XINT3 5
30 | #define DMA_XINT4 6
31 | #define DMA_XINT5 7
32 | #define DMA_XINT6 8
33 | #define DMA_XINT7 9
34 | #define DMA_XINT13 10
35 | #define DMA_TINT0 11
36 | #define DMA_TINT1 12
37 | #define DMA_TINT2 13
38 | #define DMA_MXEVTA 14
39 | #define DMA_MREVTA 15
40 | #define DMA_MXREVTB 16
41 | #define DMA_MREVTB 17
42 | // OVERINTE bit
43 | #define OVRFLOW_DISABLE 0x0
44 | #define OVEFLOW_ENABLE 0x1
45 | // PERINTE bit
46 | #define PERINT_DISABLE 0x0
47 | #define PERINT_ENABLE 0x1
48 | // CHINTMODE bits
49 | #define CHINT_BEGIN 0x0
50 | #define CHINT_END 0x1
51 | // ONESHOT bits
52 | #define ONESHOT_DISABLE 0x0
53 | #define ONESHOT_ENABLE 0x1
54 | // CONTINOUS bit
55 | #define CONT_DISABLE 0x0
56 | #define CONT_ENABLE 0x1
57 | // SYNCE bit
58 | #define SYNC_DISABLE 0x0
59 | #define SYNC_ENABLE 0x1
60 | // SYNCSEL bit
61 | #define SYNC_SRC 0x0
62 | #define SYNC_DST 0x1
63 | // DATASIZE bit
64 | #define SIXTEEN_BIT 0x0
65 | #define THIRTYTWO_BIT 0x1
66 | // CHINTE bit
67 | #define CHINT_DISABLE 0x0
68 | #define CHINT_ENABLE 0x1
69 |
70 |
71 |
72 |
73 | #ifdef __cplusplus
74 | }
75 | #endif /* extern "C" */
76 |
77 | #endif // - end of DSP2833x_EPWM_DEFINES_H
78 |
79 | //===========================================================================
80 | // End of file.
81 | //===========================================================================
82 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/DSP2833x_Examples.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/9 $
2 | // Checkin $Date: July 2, 2008 14:31:12 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Examples.h
6 | //
7 | // TITLE: DSP2833x Device Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_EXAMPLES_H
15 | #define DSP2833x_EXAMPLES_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 |
23 | /*-----------------------------------------------------------------------------
24 | Specify the PLL control register (PLLCR) and divide select (DIVSEL) value.
25 | -----------------------------------------------------------------------------*/
26 | //#define DSP28_DIVSEL 0 // Enable /4 for SYSCLKOUT
27 | //#define DSP28_DIVSEL 1 // Enable /4 for SYSCKOUT
28 | #define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT
29 | //#define DSP28_DIVSEL 3 // Enable /1 for SYSCLKOUT
30 |
31 | #define DSP28_PLLCR 10
32 | //#define DSP28_PLLCR 9
33 | //#define DSP28_PLLCR 8
34 | //#define DSP28_PLLCR 7
35 | //#define DSP28_PLLCR 6
36 | //#define DSP28_PLLCR 5
37 | //#define DSP28_PLLCR 4
38 | //#define DSP28_PLLCR 3
39 | //#define DSP28_PLLCR 2
40 | //#define DSP28_PLLCR 1
41 | //#define DSP28_PLLCR 0 // PLL is bypassed in this mode
42 | //----------------------------------------------------------------------------
43 |
44 |
45 | /*-----------------------------------------------------------------------------
46 | Specify the clock rate of the CPU (SYSCLKOUT) in nS.
47 |
48 | Take into account the input clock frequency and the PLL multiplier
49 | selected in step 1.
50 |
51 | Use one of the values provided, or define your own.
52 | The trailing L is required tells the compiler to treat
53 | the number as a 64-bit value.
54 |
55 | Only one statement should be uncommented.
56 |
57 | Example 1:150 MHz devices:
58 | CLKIN is a 30MHz crystal.
59 |
60 | In step 1 the user specified PLLCR = 0xA for a
61 | 150Mhz CPU clock (SYSCLKOUT = 150MHz).
62 |
63 | In this case, the CPU_RATE will be 6.667L
64 | Uncomment the line: #define CPU_RATE 6.667L
65 |
66 | Example 2: 100 MHz devices:
67 | CLKIN is a 20MHz crystal.
68 |
69 | In step 1 the user specified PLLCR = 0xA for a
70 | 100Mhz CPU clock (SYSCLKOUT = 100MHz).
71 |
72 | In this case, the CPU_RATE will be 10.000L
73 | Uncomment the line: #define CPU_RATE 10.000L
74 | -----------------------------------------------------------------------------*/
75 | #define CPU_RATE 6.667L // for a 150MHz CPU clock speed (SYSCLKOUT)
76 | //#define CPU_RATE 7.143L // for a 140MHz CPU clock speed (SYSCLKOUT)
77 | //#define CPU_RATE 8.333L // for a 120MHz CPU clock speed (SYSCLKOUT)
78 | //#define CPU_RATE 10.000L // for a 100MHz CPU clock speed (SYSCLKOUT)
79 | //#define CPU_RATE 13.330L // for a 75MHz CPU clock speed (SYSCLKOUT)
80 | //#define CPU_RATE 20.000L // for a 50MHz CPU clock speed (SYSCLKOUT)
81 | //#define CPU_RATE 33.333L // for a 30MHz CPU clock speed (SYSCLKOUT)
82 | //#define CPU_RATE 41.667L // for a 24MHz CPU clock speed (SYSCLKOUT)
83 | //#define CPU_RATE 50.000L // for a 20MHz CPU clock speed (SYSCLKOUT)
84 | //#define CPU_RATE 66.667L // for a 15MHz CPU clock speed (SYSCLKOUT)
85 | //#define CPU_RATE 100.000L // for a 10MHz CPU clock speed (SYSCLKOUT)
86 |
87 | //----------------------------------------------------------------------------
88 |
89 | /*-----------------------------------------------------------------------------
90 | Target device (in DSP2833x_Device.h) determines CPU frequency
91 | (for examples) - either 150 MHz (for 28335 and 28334) or 100 MHz
92 | (for 28332). User does not have to change anything here.
93 | -----------------------------------------------------------------------------*/
94 | #if DSP28_28332 // DSP28_28332 device only
95 | #define CPU_FRQ_100MHZ 1 // 100 Mhz CPU Freq (20 MHz input freq)
96 | #define CPU_FRQ_150MHZ 0
97 | #else
98 | #define CPU_FRQ_100MHZ 0 // DSP28_28335||DSP28_28334
99 | #define CPU_FRQ_150MHZ 1 // 150 MHz CPU Freq (30 MHz input freq) by DEFAULT
100 | #endif
101 |
102 |
103 | //---------------------------------------------------------------------------
104 | // Include Example Header Files:
105 | //
106 |
107 | #include "DSP2833x_GlobalPrototypes.h" // Prototypes for global functions within the
108 | // .c files.
109 |
110 | #include "DSP2833x_ePwm_defines.h" // Macros used for PWM examples.
111 | #include "DSP2833x_Dma_defines.h" // Macros used for DMA examples.
112 | #include "DSP2833x_I2C_defines.h" // Macros used for I2C examples.
113 |
114 | #define PARTNO_28335 0xEF
115 | #define PARTNO_28334 0xEE
116 | #define PARTNO_28332 0xED
117 | #define PARTNO_28235 0xE8
118 | #define PARTNO_28234 0xE7
119 | #define PARTNO_28232 0xE6
120 |
121 |
122 | // Include files not used with DSP/BIOS
123 | #ifndef DSP28_BIOS
124 | #include "DSP2833x_DefaultISR.h"
125 | #endif
126 |
127 |
128 | // DO NOT MODIFY THIS LINE.
129 | #define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
130 |
131 |
132 | #ifdef __cplusplus
133 | }
134 | #endif /* extern "C" */
135 |
136 | #endif // end of DSP2833x_EXAMPLES_H definition
137 |
138 |
139 | //===========================================================================
140 | // End of file.
141 | //===========================================================================
142 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/DSP2833x_I2C_defines.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/2 $
2 | // Checkin $Date: April 16, 2008 17:16:47 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_I2cExample.h
6 | //
7 | // TITLE: 2833x I2C Example Code Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_I2C_DEFINES_H
15 | #define DSP2833x_I2C_DEFINES_H
16 |
17 | //--------------------------------------------
18 | // Defines
19 | //--------------------------------------------
20 |
21 | // Error Messages
22 | #define I2C_ERROR 0xFFFF
23 | #define I2C_ARB_LOST_ERROR 0x0001
24 | #define I2C_NACK_ERROR 0x0002
25 | #define I2C_BUS_BUSY_ERROR 0x1000
26 | #define I2C_STP_NOT_READY_ERROR 0x5555
27 | #define I2C_NO_FLAGS 0xAAAA
28 | #define I2C_SUCCESS 0x0000
29 |
30 | // Clear Status Flags
31 | #define I2C_CLR_AL_BIT 0x0001
32 | #define I2C_CLR_NACK_BIT 0x0002
33 | #define I2C_CLR_ARDY_BIT 0x0004
34 | #define I2C_CLR_RRDY_BIT 0x0008
35 | #define I2C_CLR_SCD_BIT 0x0020
36 |
37 | // Interrupt Source Messages
38 | #define I2C_NO_ISRC 0x0000
39 | #define I2C_ARB_ISRC 0x0001
40 | #define I2C_NACK_ISRC 0x0002
41 | #define I2C_ARDY_ISRC 0x0003
42 | #define I2C_RX_ISRC 0x0004
43 | #define I2C_TX_ISRC 0x0005
44 | #define I2C_SCD_ISRC 0x0006
45 | #define I2C_AAS_ISRC 0x0007
46 |
47 | // I2CMSG structure defines
48 | #define I2C_NO_STOP 0
49 | #define I2C_YES_STOP 1
50 | #define I2C_RECEIVE 0
51 | #define I2C_TRANSMIT 1
52 | #define I2C_MAX_BUFFER_SIZE 16
53 |
54 | // I2C Slave State defines
55 | #define I2C_NOTSLAVE 0
56 | #define I2C_ADDR_AS_SLAVE 1
57 | #define I2C_ST_MSG_READY 2
58 |
59 | // I2C Slave Receiver messages defines
60 | #define I2C_SND_MSG1 1
61 | #define I2C_SND_MSG2 2
62 |
63 | // I2C State defines
64 | #define I2C_IDLE 0
65 | #define I2C_SLAVE_RECEIVER 1
66 | #define I2C_SLAVE_TRANSMITTER 2
67 | #define I2C_MASTER_RECEIVER 3
68 | #define I2C_MASTER_TRANSMITTER 4
69 |
70 | // I2C Message Commands for I2CMSG struct
71 | #define I2C_MSGSTAT_INACTIVE 0x0000
72 | #define I2C_MSGSTAT_SEND_WITHSTOP 0x0010
73 | #define I2C_MSGSTAT_WRITE_BUSY 0x0011
74 | #define I2C_MSGSTAT_SEND_NOSTOP 0x0020
75 | #define I2C_MSGSTAT_SEND_NOSTOP_BUSY 0x0021
76 | #define I2C_MSGSTAT_RESTART 0x0022
77 | #define I2C_MSGSTAT_READ_BUSY 0x0023
78 |
79 | // Generic defines
80 | #define I2C_TRUE 1
81 | #define I2C_FALSE 0
82 | #define I2C_YES 1
83 | #define I2C_NO 0
84 | #define I2C_DUMMY_BYTE 0
85 |
86 |
87 | //--------------------------------------------
88 | // Structures
89 | //--------------------------------------------
90 |
91 | // I2C Message Structure
92 | struct I2CMSG {
93 | Uint16 MsgStatus; // Word stating what state msg is in:
94 | // I2C_MSGCMD_INACTIVE = do not send msg
95 | // I2C_MSGCMD_BUSY = msg start has been sent,
96 | // awaiting stop
97 | // I2C_MSGCMD_SEND_WITHSTOP = command to send
98 | // master trans msg complete with a stop bit
99 | // I2C_MSGCMD_SEND_NOSTOP = command to send
100 | // master trans msg without the stop bit
101 | // I2C_MSGCMD_RESTART = command to send a restart
102 | // as a master receiver with a stop bit
103 | Uint16 SlaveAddress; // I2C address of slave msg is intended for
104 | Uint16 NumOfBytes; // Num of valid bytes in (or to be put in MsgBuffer)
105 | Uint16 MemoryHighAddr; // EEPROM address of data associated with msg (high byte)
106 | Uint16 MemoryLowAddr; // EEPROM address of data associated with msg (low byte)
107 | Uint16 MsgBuffer[I2C_MAX_BUFFER_SIZE]; // Array holding msg data - max that
108 | // MAX_BUFFER_SIZE can be is 16 due to
109 | // the FIFO's
110 | };
111 |
112 |
113 | #endif // end of DSP2833x_I2C_DEFINES_H definition
114 |
115 | //===========================================================================
116 | // End of file.
117 | //===========================================================================
118 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/DSP2833x_ePwm_defines.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:45:39 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_EPwm_defines.h
6 | //
7 | // TITLE: #defines used in ePWM examples examples
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_EPWM_DEFINES_H
15 | #define DSP2833x_EPWM_DEFINES_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | // TBCTL (Time-Base Control)
23 | //==========================
24 | // CTRMODE bits
25 | #define TB_COUNT_UP 0x0
26 | #define TB_COUNT_DOWN 0x1
27 | #define TB_COUNT_UPDOWN 0x2
28 | #define TB_FREEZE 0x3
29 | // PHSEN bit
30 | #define TB_DISABLE 0x0
31 | #define TB_ENABLE 0x1
32 | // PRDLD bit
33 | #define TB_SHADOW 0x0
34 | #define TB_IMMEDIATE 0x1
35 | // SYNCOSEL bits
36 | #define TB_SYNC_IN 0x0
37 | #define TB_CTR_ZERO 0x1
38 | #define TB_CTR_CMPB 0x2
39 | #define TB_SYNC_DISABLE 0x3
40 | // HSPCLKDIV and CLKDIV bits
41 | #define TB_DIV1 0x0
42 | #define TB_DIV2 0x1
43 | #define TB_DIV4 0x2
44 | // PHSDIR bit
45 | #define TB_DOWN 0x0
46 | #define TB_UP 0x1
47 |
48 | // CMPCTL (Compare Control)
49 | //==========================
50 | // LOADAMODE and LOADBMODE bits
51 | #define CC_CTR_ZERO 0x0
52 | #define CC_CTR_PRD 0x1
53 | #define CC_CTR_ZERO_PRD 0x2
54 | #define CC_LD_DISABLE 0x3
55 | // SHDWAMODE and SHDWBMODE bits
56 | #define CC_SHADOW 0x0
57 | #define CC_IMMEDIATE 0x1
58 |
59 | // AQCTLA and AQCTLB (Action Qualifier Control)
60 | //=============================================
61 | // ZRO, PRD, CAU, CAD, CBU, CBD bits
62 | #define AQ_NO_ACTION 0x0
63 | #define AQ_CLEAR 0x1
64 | #define AQ_SET 0x2
65 | #define AQ_TOGGLE 0x3
66 |
67 | // DBCTL (Dead-Band Control)
68 | //==========================
69 | // OUT MODE bits
70 | #define DB_DISABLE 0x0
71 | #define DBA_ENABLE 0x1
72 | #define DBB_ENABLE 0x2
73 | #define DB_FULL_ENABLE 0x3
74 | // POLSEL bits
75 | #define DB_ACTV_HI 0x0
76 | #define DB_ACTV_LOC 0x1
77 | #define DB_ACTV_HIC 0x2
78 | #define DB_ACTV_LO 0x3
79 | // IN MODE
80 | #define DBA_ALL 0x0
81 | #define DBB_RED_DBA_FED 0x1
82 | #define DBA_RED_DBB_FED 0x2
83 | #define DBB_ALL 0x3
84 |
85 | // CHPCTL (chopper control)
86 | //==========================
87 | // CHPEN bit
88 | #define CHP_DISABLE 0x0
89 | #define CHP_ENABLE 0x1
90 | // CHPFREQ bits
91 | #define CHP_DIV1 0x0
92 | #define CHP_DIV2 0x1
93 | #define CHP_DIV3 0x2
94 | #define CHP_DIV4 0x3
95 | #define CHP_DIV5 0x4
96 | #define CHP_DIV6 0x5
97 | #define CHP_DIV7 0x6
98 | #define CHP_DIV8 0x7
99 | // CHPDUTY bits
100 | #define CHP1_8TH 0x0
101 | #define CHP2_8TH 0x1
102 | #define CHP3_8TH 0x2
103 | #define CHP4_8TH 0x3
104 | #define CHP5_8TH 0x4
105 | #define CHP6_8TH 0x5
106 | #define CHP7_8TH 0x6
107 |
108 | // TZSEL (Trip Zone Select)
109 | //==========================
110 | // CBCn and OSHTn bits
111 | #define TZ_DISABLE 0x0
112 | #define TZ_ENABLE 0x1
113 |
114 | // TZCTL (Trip Zone Control)
115 | //==========================
116 | // TZA and TZB bits
117 | #define TZ_HIZ 0x0
118 | #define TZ_FORCE_HI 0x1
119 | #define TZ_FORCE_LO 0x2
120 | #define TZ_NO_CHANGE 0x3
121 |
122 | // ETSEL (Event Trigger Select)
123 | //=============================
124 | #define ET_CTR_ZERO 0x1
125 | #define ET_CTR_PRD 0x2
126 | #define ET_CTRU_CMPA 0x4
127 | #define ET_CTRD_CMPA 0x5
128 | #define ET_CTRU_CMPB 0x6
129 | #define ET_CTRD_CMPB 0x7
130 |
131 | // ETPS (Event Trigger Pre-scale)
132 | //===============================
133 | // INTPRD, SOCAPRD, SOCBPRD bits
134 | #define ET_DISABLE 0x0
135 | #define ET_1ST 0x1
136 | #define ET_2ND 0x2
137 | #define ET_3RD 0x3
138 |
139 |
140 | //--------------------------------
141 | // HRPWM (High Resolution PWM)
142 | //================================
143 | // HRCNFG
144 | #define HR_Disable 0x0
145 | #define HR_REP 0x1
146 | #define HR_FEP 0x2
147 | #define HR_BEP 0x3
148 |
149 | #define HR_CMP 0x0
150 | #define HR_PHS 0x1
151 |
152 | #define HR_CTR_ZERO 0x0
153 | #define HR_CTR_PRD 0x1
154 |
155 |
156 | #ifdef __cplusplus
157 | }
158 | #endif /* extern "C" */
159 |
160 | #endif // - end of DSP2833x_EPWM_DEFINES_H
161 |
162 | //===========================================================================
163 | // End of file.
164 | //===========================================================================
165 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/DSP28x_Project.h:
--------------------------------------------------------------------------------
1 |
2 | // TI File $Revision: /main/1 $
3 | // Checkin $Date: April 22, 2008 14:35:56 $
4 | //###########################################################################
5 | //
6 | // FILE: DSP28x_Project.h
7 | //
8 | // TITLE: DSP28x Project Headerfile and Examples Include File
9 | //
10 | //###########################################################################
11 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
12 | // $Release Date: August 4, 2009 $
13 | //###########################################################################
14 |
15 | #ifndef DSP28x_PROJECT_H
16 | #define DSP28x_PROJECT_H
17 |
18 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
19 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
20 |
21 | #endif // end of DSP28x_PROJECT_H definition
22 |
23 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/SFO.h:
--------------------------------------------------------------------------------
1 | //###########################################################################
2 | //
3 | // FILE: SFO.H
4 | //
5 | // TITLE: Scale Factor Optimizer Library Interface Header
6 | //
7 | //
8 | //###########################################################################
9 | //
10 | // Ver | dd mmm yyyy | Who | Description of changes
11 | // =====|=============|======|===============================================
12 | // 0.01| 09 Jan 2004 | TI | New module
13 | //###########################################################################
14 |
15 |
16 | //============================================================================
17 | // Description: This header provides the function call interface
18 | // for the scale factor optimizer for the 'F2833x.
19 | //============================================================================
20 |
21 |
22 | //============================================================================
23 | // Multiple include Guard
24 | //============================================================================
25 | #ifndef __4090522384024n8273240x3438jx43087401r34ru32r0___
26 | #define __4090522384024n8273240x3438jx43087401r34ru32r0___
27 |
28 | //============================================================================
29 | // C++ namespace
30 | //============================================================================
31 | #ifdef __cplusplus
32 | extern "C" {
33 | #endif
34 |
35 |
36 | //============================================================================
37 | // Function prototypes for MEP SFO
38 | //============================================================================
39 | void SFO_MepEn(int nEpwmModule);
40 | void SFO_MepDis(int nEpwmModule);
41 |
42 | //============================================================================
43 | // Multiple include Guard
44 | //============================================================================
45 | #endif // End: Multiple include Guard
46 |
47 | //============================================================================
48 | // C++ namespace
49 | //============================================================================
50 | #ifdef __cplusplus
51 | }
52 | #endif /* extern "C" */
53 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/include/SFO_V5.h:
--------------------------------------------------------------------------------
1 |
2 | //###########################################################################
3 | //
4 | // FILE: SFO_V5.H
5 | //
6 | // TITLE: Scale Factor Optimizer Library V5 Interface Header
7 | //
8 | //
9 | //###########################################################################
10 | //
11 | // Ver | dd mmm yyyy | Who | Description of changes
12 | // =====|=============|======|===============================================
13 | // 0.01| 09 Jan 2004 | TI | New module
14 | // 0.02| 22 Jun 2007 | TI | New version (V5) with support for more channels
15 | //###########################################################################
16 |
17 |
18 | //============================================================================
19 | // Description: This header provides the function call interface
20 | // for the scale factor optimizer V5. For more
21 | // information on the SFO function usage and
22 | // limitations, see the HRPWM Reference Guide
23 | // (spru924) on the TI website.
24 | //============================================================================
25 |
26 |
27 | //============================================================================
28 | // Multiple include Guard
29 | //============================================================================
30 | #ifndef _SFO_V5_H
31 | #define _SFO_V5_H
32 |
33 | //============================================================================
34 | // C++ namespace
35 | //============================================================================
36 | #ifdef __cplusplus
37 | extern "C" {
38 | #endif
39 |
40 | //============================================================================
41 | // USER MUST UPDATE THIS CONSTANT FOR NUMBER OF HRPWM CHANNELS USED + 1
42 | //============================================================================
43 | #define PWM_CH 7 // Equal # of HRPWM channels PLUS 1
44 | // i.e. PWM_CH is 7 for 6 channels, 5 for 4 channels etc.
45 |
46 | //============================================================================
47 | // Function prototypes for MEP SFO
48 | //============================================================================
49 |
50 | int SFO_MepEn_V5(int nEpwmModule); // MEP-Enable V5 Calibration Function
51 | int SFO_MepDis_V5(int nEpwmModule); // MEP-Disable V5 Calibration Function
52 |
53 | //============================================================================
54 | // Useful Defines when Using SFO Functions
55 | //============================================================================
56 | #define SFO_INCOMPLETE 0
57 | #define SFO_COMPLETE 1
58 | #define SFO_OUTRANGE_ERROR 2
59 |
60 | //============================================================================
61 | // Multiple include Guard
62 | //============================================================================
63 | #endif // End: Multiple include Guard
64 |
65 | //============================================================================
66 | // C++ namespace
67 | //============================================================================
68 | #ifdef __cplusplus
69 | }
70 | #endif /* extern "C" */
71 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/IQmath.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/IQmath.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/IQmath_fpu32.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/IQmath_fpu32.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5B.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5B.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5B_fpu.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5B_fpu.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5_fpu.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_V5_fpu.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_fpu.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/brunoluiz/28335ModbusSlave/fcd667766fceb7e83c13579c613a4cfc3ee0d120/contrib/DSP2833x/DSP2833x_common/lib/SFO_TI_Build_fpu.lib
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_ADC_cal.asm:
--------------------------------------------------------------------------------
1 | ;; TI File $Revision: /main/1 $
2 | ;; Checkin $Date: July 30, 2007 10:29:23 $
3 | ;;###########################################################################
4 | ;;
5 | ;; FILE: ADC_cal.asm
6 | ;;
7 | ;; TITLE: 2833x Boot Rom ADC Cal routine.
8 | ;;
9 | ;; Functions:
10 | ;;
11 | ;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and ADCOFFTRIM registers
12 | ;; Notes:
13 | ;;
14 | ;;###########################################################################
15 | ;; $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
16 | ;; $Release Date: August 4, 2009 $
17 | ;;###########################################################################
18 |
19 | .def _ADC_cal
20 | .asg "0x711C", ADCREFSEL_LOC
21 |
22 | ;-----------------------------------------------
23 | ; _ADC_cal
24 | ;-----------------------------------------------
25 | ;-----------------------------------------------
26 | ; This is the ADC cal routine.This routine is programmed into
27 | ; reserved memory by the factory. 0xAAAA and 0xBBBB are place-
28 | ; holders for calibration data.
29 | ;The actual values programmed by TI are device specific.
30 | ;
31 | ; This function assumes that the clocks have been
32 | ; enabled to the ADC module.
33 | ;-----------------------------------------------
34 |
35 | .sect ".adc_cal"
36 |
37 | _ADC_cal
38 | MOVW DP, #ADCREFSEL_LOC >> 6
39 | MOV @28, #0xAAAA ; actual value may not be 0xAAAA
40 | MOV @29, #0xBBBB ; actual value may not be 0xBBBB
41 | LRETR
42 | ;eof ----------
43 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_Adc.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/5 $
2 | // Checkin $Date: October 23, 2007 13:34:09 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Adc.c
6 | //
7 | // TITLE: DSP2833x ADC Initialization & Support Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | #define ADC_usDELAY 5000L
18 |
19 | //---------------------------------------------------------------------------
20 | // InitAdc:
21 | //---------------------------------------------------------------------------
22 | // This function initializes ADC to a known state.
23 | //
24 | void InitAdc(void)
25 | {
26 | extern void DSP28x_usDelay(Uint32 Count);
27 |
28 |
29 | // *IMPORTANT*
30 | // The ADC_cal function, which copies the ADC calibration values from TI reserved
31 | // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the
32 | // Boot ROM. If the boot ROM code is bypassed during the debug process, the
33 | // following function MUST be called for the ADC to function according
34 | // to specification. The clocks to the ADC MUST be enabled before calling this
35 | // function.
36 | // See the device data manual and/or the ADC Reference
37 | // Manual for more information.
38 |
39 | EALLOW;
40 | SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
41 | ADC_cal();
42 | EDIS;
43 |
44 |
45 |
46 |
47 | // To powerup the ADC the ADCENCLK bit should be set first to enable
48 | // clocks, followed by powering up the bandgap, reference circuitry, and ADC core.
49 | // Before the first conversion is performed a 5ms delay must be observed
50 | // after power up to give all analog circuits time to power up and settle
51 |
52 | // Please note that for the delay function below to operate correctly the
53 | // CPU_RATE define statement in the DSP2833x_Examples.h file must
54 | // contain the correct CPU clock period in nanoseconds.
55 |
56 | AdcRegs.ADCTRL3.all = 0x00E0; // Power up bandgap/reference/ADC circuits
57 | DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
58 | }
59 |
60 | //===========================================================================
61 | // End of file.
62 | //===========================================================================
63 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_CSMPasswords.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/3 $
2 | ;// Checkin $Date: June 26, 2007 16:41:07 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_CSMPasswords.asm
6 | ;//
7 | ;// TITLE: DSP2833x Code Security Module Passwords.
8 | ;//
9 | ;// DESCRIPTION:
10 | ;//
11 | ;// This file is used to specify password values to
12 | ;// program into the CSM password locations in Flash
13 | ;// at 0x33FFF8 - 0x33FFFF.
14 | ;//
15 | ;// In addition, the reserved locations 0x33FF80 - 0X33fff5 are
16 | ;// all programmed to 0x0000
17 | ;//
18 | ;//###########################################################################
19 | ;//
20 | ;// Original source based on D.A.
21 | ;//
22 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
23 | ;// $Release Date: August 4, 2009 $
24 | ;//###########################################################################
25 |
26 | ; The "csmpasswords" section contains the actual CSM passwords that will be
27 | ; linked and programmed into to the CSM password locations (PWL) in flash.
28 | ; These passwords must be known in order to unlock the CSM module.
29 | ; All 0xFFFF's (erased) is the default value for the password locations (PWL).
30 |
31 | ; It is recommended that all passwords be left as 0xFFFF during code
32 | ; development. Passwords of 0xFFFF do not activate code security and dummy
33 | ; reads of the CSM PWL registers is all that is required to unlock the CSM.
34 | ; When code development is complete, modify the passwords to activate the
35 | ; code security module.
36 |
37 | .sect "csmpasswds"
38 |
39 | .int 0xFFFF ;PWL0 (LSW of 128-bit password)
40 | .int 0xFFFF ;PWL1
41 | .int 0xFFFF ;PWL2
42 | .int 0xFFFF ;PWL3
43 | .int 0xFFFF ;PWL4
44 | .int 0xFFFF ;PWL5
45 | .int 0xFFFF ;PWL6
46 | .int 0xFFFF ;PWL7 (MSW of 128-bit password)
47 |
48 | ;----------------------------------------------------------------------
49 |
50 | ; For code security operation, all addresses between 0x33FF80 and
51 | ; 0X33fff5 cannot be used as program code or data. These locations
52 | ; must be programmed to 0x0000 when the code security password locations
53 | ; (PWL) are programmed. If security is not a concern, then these addresses
54 | ; can be used for code or data.
55 |
56 | ; The section "csm_rsvd" can be used to program these locations to 0x0000.
57 |
58 | .sect "csm_rsvd"
59 | .loop (33FFF5h - 33FF80h + 1)
60 | .int 0x0000
61 | .endloop
62 |
63 | ;//===========================================================================
64 | ;// End of file.
65 | ;//===========================================================================
66 |
67 |
68 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_CodeStartBranch.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/1 $
2 | ;// Checkin $Date: August 18, 2006 13:45:55 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_CodeStartBranch.asm
6 | ;//
7 | ;// TITLE: Branch for redirecting code execution after boot.
8 | ;//
9 | ;// For these examples, code_start is the first code that is executed after
10 | ;// exiting the boot ROM code.
11 | ;//
12 | ;// The codestart section in the linker cmd file is used to physically place
13 | ;// this code at the correct memory location. This section should be placed
14 | ;// at the location the BOOT ROM will re-direct the code to. For example,
15 | ;// for boot to FLASH this code will be located at 0x3f7ff6.
16 | ;//
17 | ;// In addition, the example DSP2833x projects are setup such that the codegen
18 | ;// entry point is also set to the code_start label. This is done by linker
19 | ;// option -e in the project build options. When the debugger loads the code,
20 | ;// it will automatically set the PC to the "entry point" address indicated by
21 | ;// the -e linker option. In this case the debugger is simply assigning the PC,
22 | ;// it is not the same as a full reset of the device.
23 | ;//
24 | ;// The compiler may warn that the entry point for the project is other then
25 | ;// _c_init00. _c_init00 is the C environment setup and is run before
26 | ;// main() is entered. The code_start code will re-direct the execution
27 | ;// to _c_init00 and thus there is no worry and this warning can be ignored.
28 | ;//
29 | ;//###########################################################################
30 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
31 | ;// $Release Date: August 4, 2009 $
32 | ;//###########################################################################
33 |
34 |
35 | ***********************************************************************
36 |
37 | WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0
38 |
39 | .ref _c_int00
40 | .global code_start
41 |
42 | ***********************************************************************
43 | * Function: codestart section
44 | *
45 | * Description: Branch to code starting point
46 | ***********************************************************************
47 |
48 | .sect "codestart"
49 |
50 | code_start:
51 | .if WD_DISABLE == 1
52 | LB wd_disable ;Branch to watchdog disable code
53 | .else
54 | LB _c_int00 ;Branch to start of boot.asm in RTS library
55 | .endif
56 |
57 | ;end codestart section
58 |
59 |
60 | ***********************************************************************
61 | * Function: wd_disable
62 | *
63 | * Description: Disables the watchdog timer
64 | ***********************************************************************
65 | .if WD_DISABLE == 1
66 |
67 | .text
68 | wd_disable:
69 | SETC OBJMODE ;Set OBJMODE for 28x object code
70 | EALLOW ;Enable EALLOW protected register access
71 | MOVZ DP, #7029h>>6 ;Set data page for WDCR register
72 | MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD
73 | EDIS ;Disable EALLOW protected register access
74 | LB _c_int00 ;Branch to start of boot.asm in RTS library
75 |
76 | .endif
77 |
78 | ;end wd_disable
79 |
80 |
81 |
82 | .end
83 |
84 | ;//===========================================================================
85 | ;// End of file.
86 | ;//===========================================================================
87 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_CpuTimers.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/4 $
2 | // Checkin $Date: July 9, 2009 10:51:59 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_CpuTimers.c
6 | //
7 | // TITLE: CPU 32-bit Timers Initialization & Support Functions.
8 | //
9 | // NOTES: CpuTimer2 is reserved for use with DSP BIOS and
10 | // other realtime operating systems.
11 | //
12 | // Do not use these this timer in your application if you ever plan
13 | // on integrating DSP-BIOS or another realtime OS.
14 | //
15 | //###########################################################################
16 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
17 | // $Release Date: August 4, 2009 $
18 | //###########################################################################
19 |
20 | #include "DSP2833x_Device.h" // Headerfile Include File
21 | #include "DSP2833x_Examples.h" // Examples Include File
22 |
23 | struct CPUTIMER_VARS CpuTimer0;
24 |
25 | // When using DSP BIOS & other RTOS, comment out CPU Timer 2 code.
26 | struct CPUTIMER_VARS CpuTimer1;
27 | struct CPUTIMER_VARS CpuTimer2;
28 |
29 | //---------------------------------------------------------------------------
30 | // InitCpuTimers:
31 | //---------------------------------------------------------------------------
32 | // This function initializes all three CPU timers to a known state.
33 | //
34 | void InitCpuTimers(void)
35 | {
36 | // CPU Timer 0
37 | // Initialize address pointers to respective timer registers:
38 | CpuTimer0.RegsAddr = &CpuTimer0Regs;
39 | // Initialize timer period to maximum:
40 | CpuTimer0Regs.PRD.all = 0xFFFFFFFF;
41 | // Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
42 | CpuTimer0Regs.TPR.all = 0;
43 | CpuTimer0Regs.TPRH.all = 0;
44 | // Make sure timer is stopped:
45 | CpuTimer0Regs.TCR.bit.TSS = 1;
46 | // Reload all counter register with period value:
47 | CpuTimer0Regs.TCR.bit.TRB = 1;
48 | // Reset interrupt counters:
49 | CpuTimer0.InterruptCount = 0;
50 |
51 |
52 | // CpuTimer2 is reserved for DSP BIOS & other RTOS
53 | // Do not use this timer if you ever plan on integrating
54 | // DSP-BIOS or another realtime OS.
55 |
56 | // Initialize address pointers to respective timer registers:
57 | CpuTimer1.RegsAddr = &CpuTimer1Regs;
58 | CpuTimer2.RegsAddr = &CpuTimer2Regs;
59 | // Initialize timer period to maximum:
60 | CpuTimer1Regs.PRD.all = 0xFFFFFFFF;
61 | CpuTimer2Regs.PRD.all = 0xFFFFFFFF;
62 | // Make sure timers are stopped:
63 | CpuTimer1Regs.TCR.bit.TSS = 1;
64 | CpuTimer2Regs.TCR.bit.TSS = 1;
65 | // Reload all counter register with period value:
66 | CpuTimer1Regs.TCR.bit.TRB = 1;
67 | CpuTimer2Regs.TCR.bit.TRB = 1;
68 | // Reset interrupt counters:
69 | CpuTimer1.InterruptCount = 0;
70 | CpuTimer2.InterruptCount = 0;
71 |
72 | }
73 |
74 | //---------------------------------------------------------------------------
75 | // ConfigCpuTimer:
76 | //---------------------------------------------------------------------------
77 | // This function initializes the selected timer to the period specified
78 | // by the "Freq" and "Period" parameters. The "Freq" is entered as "MHz"
79 | // and the period in "uSeconds". The timer is held in the stopped state
80 | // after configuration.
81 | //
82 | void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
83 | {
84 | Uint32 temp;
85 |
86 | // Initialize timer period:
87 | Timer->CPUFreqInMHz = Freq;
88 | Timer->PeriodInUSec = Period;
89 | temp = (long) (Freq * Period);
90 | Timer->RegsAddr->PRD.all = temp;
91 |
92 | // Set pre-scale counter to divide by 1 (SYSCLKOUT):
93 | Timer->RegsAddr->TPR.all = 0;
94 | Timer->RegsAddr->TPRH.all = 0;
95 |
96 | // Initialize timer control register:
97 | Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
98 | Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
99 | Timer->RegsAddr->TCR.bit.SOFT = 1;
100 | Timer->RegsAddr->TCR.bit.FREE = 1; // Timer Free Run
101 | Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
102 |
103 | // Reset interrupt counter:
104 | Timer->InterruptCount = 0;
105 | }
106 |
107 | //===========================================================================
108 | // End of file.
109 | //===========================================================================
110 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_DBGIER.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/1 $
2 | ;// Checkin $Date: August 18, 2006 13:46:03 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_DBGIER.asm
6 | ;//
7 | ;// TITLE: Set the DBGIER register
8 | ;//
9 | ;// DESCRIPTION:
10 | ;//
11 | ;// Function to set the DBGIER register (for realtime emulation).
12 | ;// Function Prototype: void SetDBGIER(Uint16)
13 | ;// Useage: SetDBGIER(value);
14 | ;// Input Parameters: Uint16 value = value to put in DBGIER register.
15 | ;// Return Value: none
16 | ;//
17 | ;//###########################################################################
18 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
19 | ;// $Release Date: August 4, 2009 $
20 | ;//###########################################################################
21 | .global _SetDBGIER
22 | .text
23 |
24 | _SetDBGIER:
25 | MOV *SP++,AL
26 | POP DBGIER
27 | LRETR
28 |
29 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_DisInt.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/1 $
2 | ;// Checkin $Date: August 18, 2006 13:46:09 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_DisInt.asm
6 | ;//
7 | ;// TITLE: Disable and Restore INTM and DBGM
8 | ;//
9 | ;// Function Prototypes:
10 | ;//
11 | ;// Uint16 DSP28x_DisableInt();
12 | ;// and void DSP28x_RestoreInt(Uint16 Stat0);
13 | ;//
14 | ;// Usage:
15 | ;//
16 | ;// DSP28x_DisableInt() sets both the INTM and DBGM
17 | ;// bits to disable maskable interrupts. Before doing
18 | ;// this, the current value of ST1 is stored on the stack
19 | ;// so that the values can be restored later. The value
20 | ;// of ST1 before the masks are set is returned to the
21 | ;// user in AL. This is then used to restore their state
22 | ;// via the DSP28x_RestoreInt(Uint16 ST1) function.
23 | ;//
24 | ;// Example
25 | ;//
26 | ;// Uint16 StatusReg1
27 | ;// StatusReg1 = DSP28x_DisableInt();
28 | ;//
29 | ;// ... May also want to disable INTM here
30 | ;//
31 | ;// ... code here
32 | ;//
33 | ;// DSP28x_RestoreInt(StatusReg1);
34 | ;//
35 | ;// ... Restore INTM enable
36 | ;//
37 | ;//###########################################################################
38 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
39 | ;// $Release Date: August 4, 2009 $
40 | ;//###########################################################################
41 |
42 |
43 |
44 |
45 | .def _DSP28x_DisableInt
46 | .def _DSP28x_RestoreInt
47 |
48 |
49 | _DSP28x_DisableInt:
50 | PUSH ST1
51 | SETC INTM,DBGM
52 | MOV AL, *--SP
53 | LRETR
54 |
55 | _DSP28x_RestoreInt:
56 | MOV *SP++, AL
57 | POP ST1
58 | LRETR
59 |
60 |
61 | ;//===========================================================================
62 | ;// End of file.
63 | ;//===========================================================================
64 |
65 |
66 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_EQep.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/3 $
2 | // Checkin $Date: July 27, 2007 11:55:20 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_EQep.c
6 | //
7 | // TITLE: DSP2833x eQEP Initialization & Support Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | //---------------------------------------------------------------------------
18 | // InitEQep:
19 | //---------------------------------------------------------------------------
20 | // This function initializes the eQEP(s) to a known state.
21 | //
22 | void InitEQep(void)
23 | {
24 | // Initialize eQEP1/2
25 |
26 | //tbd...
27 |
28 | }
29 |
30 | //---------------------------------------------------------------------------
31 | // Example: InitEQepGpio:
32 | //---------------------------------------------------------------------------
33 | // This function initializes GPIO pins to function as eQEP pins
34 | //
35 | // Each GPIO pin can be configured as a GPIO pin or up to 3 different
36 | // peripheral functional pins. By default all pins come up as GPIO
37 | // inputs after reset.
38 | //
39 | // Caution:
40 | // For each eQEP peripheral
41 | // Only one GPIO pin should be enabled for EQEPxA operation.
42 | // Only one GPIO pin should be enabled for EQEPxB operation.
43 | // Only one GPIO pin should be enabled for EQEPxS operation.
44 | // Only one GPIO pin should be enabled for EQEPxI operation.
45 | // Comment out other unwanted lines.
46 |
47 | void InitEQepGpio()
48 | {
49 | #if DSP28_EQEP1
50 | InitEQep1Gpio();
51 | #endif // endif DSP28_EQEP1
52 | #if DSP28_EQEP2
53 | InitEQep2Gpio();
54 | #endif // endif DSP28_EQEP2
55 | }
56 |
57 | #if DSP28_EQEP1
58 | void InitEQep1Gpio(void)
59 | {
60 | EALLOW;
61 |
62 | /* Enable internal pull-up for the selected pins */
63 | // Pull-ups can be enabled or disabled by the user.
64 | // This will enable the pullups for the specified pins.
65 | // Comment out other unwanted lines.
66 |
67 | GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; // Enable pull-up on GPIO20 (EQEP1A)
68 | GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; // Enable pull-up on GPIO21 (EQEP1B)
69 | GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pull-up on GPIO22 (EQEP1S)
70 | GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pull-up on GPIO23 (EQEP1I)
71 |
72 | // GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0; // Enable pull-up on GPIO50 (EQEP1A)
73 | // GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0; // Enable pull-up on GPIO51 (EQEP1B)
74 | // GpioCtrlRegs.GPBPUD.bit.GPIO52 = 0; // Enable pull-up on GPIO52 (EQEP1S)
75 | // GpioCtrlRegs.GPBPUD.bit.GPIO53 = 0; // Enable pull-up on GPIO53 (EQEP1I)
76 |
77 |
78 | // Inputs are synchronized to SYSCLKOUT by default.
79 | // Comment out other unwanted lines.
80 |
81 | GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0; // Sync to SYSCLKOUT GPIO20 (EQEP1A)
82 | GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0; // Sync to SYSCLKOUT GPIO21 (EQEP1B)
83 | GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0; // Sync to SYSCLKOUT GPIO22 (EQEP1S)
84 | GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0; // Sync to SYSCLKOUT GPIO23 (EQEP1I)
85 |
86 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 0; // Sync to SYSCLKOUT GPIO50 (EQEP1A)
87 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 0; // Sync to SYSCLKOUT GPIO51 (EQEP1B)
88 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO52 = 0; // Sync to SYSCLKOUT GPIO52 (EQEP1S)
89 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO53 = 0; // Sync to SYSCLKOUT GPIO53 (EQEP1I)
90 |
91 | /* Configure eQEP-1 pins using GPIO regs*/
92 | // This specifies which of the possible GPIO pins will be eQEP1 functional pins.
93 | // Comment out other unwanted lines.
94 |
95 | GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // Configure GPIO20 as EQEP1A
96 | GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // Configure GPIO21 as EQEP1B
97 | GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1; // Configure GPIO22 as EQEP1S
98 | GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; // Configure GPIO23 as EQEP1I
99 |
100 | // GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 1; // Configure GPIO50 as EQEP1A
101 | // GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 1; // Configure GPIO51 as EQEP1B
102 | // GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 1; // Configure GPIO52 as EQEP1S
103 | // GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 1; // Configure GPIO53 as EQEP1I
104 |
105 |
106 | EDIS;
107 | }
108 | #endif // if DSP28_EQEP1
109 |
110 |
111 |
112 | #if DSP28_EQEP2
113 | void InitEQep2Gpio(void)
114 | {
115 | EALLOW;
116 |
117 | /* Enable internal pull-up for the selected pins */
118 | // Pull-ups can be enabled or disabled by the user.
119 | // This will enable the pullups for the specified pins.
120 | // Comment out other unwanted lines.
121 |
122 | GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (EQEP2A)
123 | GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (EQEP2B)
124 | GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (EQEP2I)
125 | GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // Enable pull-up on GPIO27 (EQEP2S)
126 |
127 | // Inputs are synchronized to SYSCLKOUT by default.
128 | // Comment out other unwanted lines.
129 |
130 | GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // Sync to SYSCLKOUT GPIO24 (EQEP2A)
131 | GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; // Sync to SYSCLKOUT GPIO25 (EQEP2B)
132 | GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 0; // Sync to SYSCLKOUT GPIO26 (EQEP2I)
133 | GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 0; // Sync to SYSCLKOUT GPIO27 (EQEP2S)
134 |
135 | /* Configure eQEP-2 pins using GPIO regs*/
136 | // This specifies which of the possible GPIO pins will be eQEP2 functional pins.
137 | // Comment out other unwanted lines.
138 |
139 | GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2; // Configure GPIO24 as EQEP2A
140 | GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2; // Configure GPIO25 as EQEP2B
141 | GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2; // Configure GPIO26 as EQEP2I
142 | GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 2; // Configure GPIO27 as EQEP2S
143 |
144 |
145 | EDIS;
146 | }
147 | #endif // endif DSP28_EQEP2
148 |
149 |
150 |
151 |
152 | //===========================================================================
153 | // End of file.
154 | //===========================================================================
155 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_Gpio.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:46:25 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Gpio.c
6 | //
7 | // TITLE: DSP2833x General Purpose I/O Initialization & Support Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | //---------------------------------------------------------------------------
18 | // InitGpio:
19 | //---------------------------------------------------------------------------
20 | // This function initializes the Gpio to a known (default) state.
21 | //
22 | // For more details on configuring GPIO's as peripheral functions,
23 | // refer to the individual peripheral examples and/or GPIO setup example.
24 | void InitGpio(void)
25 | {
26 | EALLOW;
27 |
28 | // Each GPIO pin can be:
29 | // a) a GPIO input/output
30 | // b) peripheral function 1
31 | // c) peripheral function 2
32 | // d) peripheral function 3
33 | // By default, all are GPIO Inputs
34 | GpioCtrlRegs.GPAMUX1.all = 0x0000; // GPIO functionality GPIO0-GPIO15
35 | GpioCtrlRegs.GPAMUX2.all = 0x0000; // GPIO functionality GPIO16-GPIO31
36 | GpioCtrlRegs.GPBMUX1.all = 0x0000; // GPIO functionality GPIO32-GPIO39
37 | GpioCtrlRegs.GPBMUX2.all = 0x0000; // GPIO functionality GPIO48-GPIO63
38 | GpioCtrlRegs.GPCMUX1.all = 0x0000; // GPIO functionality GPIO64-GPIO79
39 | GpioCtrlRegs.GPCMUX2.all = 0x0000; // GPIO functionality GPIO80-GPIO95
40 |
41 | GpioCtrlRegs.GPADIR.all = 0x0000; // GPIO0-GPIO31 are inputs
42 | GpioCtrlRegs.GPBDIR.all = 0x0000; // GPIO32-GPIO63 are inputs
43 | GpioCtrlRegs.GPCDIR.all = 0x0000; // GPI064-GPIO95 are inputs
44 |
45 | // Each input can have different qualification
46 | // a) input synchronized to SYSCLKOUT
47 | // b) input qualified by a sampling window
48 | // c) input sent asynchronously (valid for peripheral inputs only)
49 | GpioCtrlRegs.GPAQSEL1.all = 0x0000; // GPIO0-GPIO15 Synch to SYSCLKOUT
50 | GpioCtrlRegs.GPAQSEL2.all = 0x0000; // GPIO16-GPIO31 Synch to SYSCLKOUT
51 | GpioCtrlRegs.GPBQSEL1.all = 0x0000; // GPIO32-GPIO39 Synch to SYSCLKOUT
52 | GpioCtrlRegs.GPBQSEL2.all = 0x0000; // GPIO48-GPIO63 Synch to SYSCLKOUT
53 |
54 | // Pull-ups can be enabled or disabled.
55 | GpioCtrlRegs.GPAPUD.all = 0x0000; // Pullup's enabled GPIO0-GPIO31
56 | GpioCtrlRegs.GPBPUD.all = 0x0000; // Pullup's enabled GPIO32-GPIO63
57 | GpioCtrlRegs.GPCPUD.all = 0x0000; // Pullup's enabled GPIO64-GPIO79
58 |
59 | //GpioCtrlRegs.GPAPUD.all = 0xFFFF; // Pullup's disabled GPIO0-GPIO31
60 | //GpioCtrlRegs.GPBPUD.all = 0xFFFF; // Pullup's disabled GPIO32-GPIO34
61 | //GpioCtrlRegs.GPCPUD.all = 0xFFFF // Pullup's disabled GPIO64-GPIO79
62 |
63 | EDIS;
64 |
65 | }
66 |
67 | //===========================================================================
68 | // End of file.
69 | //===========================================================================
70 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_I2C.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:46:27 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_I2C.c
6 | //
7 | // TITLE: DSP2833x SCI Initialization & Support Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | //---------------------------------------------------------------------------
18 | // InitI2C:
19 | //---------------------------------------------------------------------------
20 | // This function initializes the I2C to a known state.
21 | //
22 | void InitI2C(void)
23 | {
24 | // Initialize I2C-A:
25 |
26 | //tbd...
27 | }
28 |
29 | //---------------------------------------------------------------------------
30 | // Example: InitI2CGpio:
31 | //---------------------------------------------------------------------------
32 | // This function initializes GPIO pins to function as I2C pins
33 | //
34 | // Each GPIO pin can be configured as a GPIO pin or up to 3 different
35 | // peripheral functional pins. By default all pins come up as GPIO
36 | // inputs after reset.
37 | //
38 | // Caution:
39 | // Only one GPIO pin should be enabled for SDAA operation.
40 | // Only one GPIO pin shoudl be enabled for SCLA operation.
41 | // Comment out other unwanted lines.
42 |
43 | void InitI2CGpio()
44 | {
45 |
46 | EALLOW;
47 | /* Enable internal pull-up for the selected pins */
48 | // Pull-ups can be enabled or disabled disabled by the user.
49 | // This will enable the pullups for the specified pins.
50 | // Comment out other unwanted lines.
51 |
52 | GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pull-up for GPIO32 (SDAA)
53 | GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; // Enable pull-up for GPIO33 (SCLA)
54 |
55 | /* Set qualification for selected pins to asynch only */
56 | // This will select asynch (no qualification) for the selected pins.
57 | // Comment out other unwanted lines.
58 |
59 | GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // Asynch input GPIO32 (SDAA)
60 | GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // Asynch input GPIO33 (SCLA)
61 |
62 | /* Configure SCI pins using GPIO regs*/
63 | // This specifies which of the possible GPIO pins will be I2C functional pins.
64 | // Comment out other unwanted lines.
65 |
66 | GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1; // Configure GPIO32 for SDAA operation
67 | GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // Configure GPIO33 for SCLA operation
68 |
69 | EDIS;
70 | }
71 |
72 |
73 |
74 | //===========================================================================
75 | // End of file.
76 | //===========================================================================
77 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_MemCopy.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:46:33 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_MemCopy.c
6 | //
7 | // TITLE: Memory Copy Utility
8 | //
9 | // ASSUMPTIONS:
10 | //
11 | //
12 | //
13 | // DESCRIPTION:
14 | //
15 | // This function will copy the specified memory contents from
16 | // one location to another.
17 | //
18 | // Uint16 *SourceAddr Pointer to the first word to be moved
19 | // SourceAddr < SourceEndAddr
20 | // Uint16* SourceEndAddr Pointer to the last word to be moved
21 | // Uint16* DestAddr Pointer to the first destination word
22 | //
23 | // No checks are made for invalid memory locations or that the
24 | // end address is > then the first start address.
25 | //
26 | //
27 | //###########################################################################
28 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
29 | // $Release Date: August 4, 2009 $
30 | //###########################################################################
31 |
32 | #include "DSP2833x_Device.h"
33 |
34 | void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
35 | {
36 | while(SourceAddr < SourceEndAddr)
37 | {
38 | *DestAddr++ = *SourceAddr++;
39 | }
40 | return;
41 | }
42 |
43 | //===========================================================================
44 | // End of file.
45 | //===========================================================================
46 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_PieCtrl.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:46:35 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_PieCtrl.c
6 | //
7 | // TITLE: DSP2833x Device PIE Control Register Initialization Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | //---------------------------------------------------------------------------
18 | // InitPieCtrl:
19 | //---------------------------------------------------------------------------
20 | // This function initializes the PIE control registers to a known state.
21 | //
22 | void InitPieCtrl(void)
23 | {
24 | // Disable Interrupts at the CPU level:
25 | DINT;
26 |
27 | // Disable the PIE
28 | PieCtrlRegs.PIECTRL.bit.ENPIE = 0;
29 |
30 | // Clear all PIEIER registers:
31 | PieCtrlRegs.PIEIER1.all = 0;
32 | PieCtrlRegs.PIEIER2.all = 0;
33 | PieCtrlRegs.PIEIER3.all = 0;
34 | PieCtrlRegs.PIEIER4.all = 0;
35 | PieCtrlRegs.PIEIER5.all = 0;
36 | PieCtrlRegs.PIEIER6.all = 0;
37 | PieCtrlRegs.PIEIER7.all = 0;
38 | PieCtrlRegs.PIEIER8.all = 0;
39 | PieCtrlRegs.PIEIER9.all = 0;
40 | PieCtrlRegs.PIEIER10.all = 0;
41 | PieCtrlRegs.PIEIER11.all = 0;
42 | PieCtrlRegs.PIEIER12.all = 0;
43 |
44 | // Clear all PIEIFR registers:
45 | PieCtrlRegs.PIEIFR1.all = 0;
46 | PieCtrlRegs.PIEIFR2.all = 0;
47 | PieCtrlRegs.PIEIFR3.all = 0;
48 | PieCtrlRegs.PIEIFR4.all = 0;
49 | PieCtrlRegs.PIEIFR5.all = 0;
50 | PieCtrlRegs.PIEIFR6.all = 0;
51 | PieCtrlRegs.PIEIFR7.all = 0;
52 | PieCtrlRegs.PIEIFR8.all = 0;
53 | PieCtrlRegs.PIEIFR9.all = 0;
54 | PieCtrlRegs.PIEIFR10.all = 0;
55 | PieCtrlRegs.PIEIFR11.all = 0;
56 | PieCtrlRegs.PIEIFR12.all = 0;
57 |
58 |
59 | }
60 |
61 | //---------------------------------------------------------------------------
62 | // EnableInterrupts:
63 | //---------------------------------------------------------------------------
64 | // This function enables the PIE module and CPU interrupts
65 | //
66 | void EnableInterrupts()
67 | {
68 |
69 | // Enable the PIE
70 | PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
71 |
72 | // Enables PIE to drive a pulse into the CPU
73 | PieCtrlRegs.PIEACK.all = 0xFFFF;
74 |
75 | // Enable Interrupts at the CPU level
76 | EINT;
77 |
78 | }
79 |
80 |
81 | //===========================================================================
82 | // End of file.
83 | //===========================================================================
84 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_Sci.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/2 $
2 | // Checkin $Date: March 1, 2007 16:06:07 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Sci.c
6 | //
7 | // TITLE: DSP2833x SCI Initialization & Support Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | //---------------------------------------------------------------------------
18 | // InitSci:
19 | //---------------------------------------------------------------------------
20 | // This function initializes the SCI(s) to a known state.
21 | //
22 | void InitSci(void)
23 | {
24 | // Initialize SCI-A:
25 |
26 | //tbd...
27 |
28 |
29 | // Initialize SCI-B:
30 |
31 | //tbd...
32 |
33 | // Initialize SCI-C:
34 |
35 | //tbd...
36 | }
37 |
38 | //---------------------------------------------------------------------------
39 | // Example: InitSciGpio:
40 | //---------------------------------------------------------------------------
41 | // This function initializes GPIO pins to function as SCI pins
42 | //
43 | // Each GPIO pin can be configured as a GPIO pin or up to 3 different
44 | // peripheral functional pins. By default all pins come up as GPIO
45 | // inputs after reset.
46 | //
47 | // Caution:
48 | // Only one GPIO pin should be enabled for SCITXDA/B operation.
49 | // Only one GPIO pin shoudl be enabled for SCIRXDA/B operation.
50 | // Comment out other unwanted lines.
51 |
52 | void InitSciGpio()
53 | {
54 | InitSciaGpio();
55 | #if DSP28_SCIB
56 | InitScibGpio();
57 | #endif // if DSP28_SCIB
58 | #if DSP28_SCIC
59 | InitScicGpio();
60 | #endif // if DSP28_SCIC
61 | }
62 |
63 | void InitSciaGpio()
64 | {
65 | EALLOW;
66 |
67 | /* Enable internal pull-up for the selected pins */
68 | // Pull-ups can be enabled or disabled disabled by the user.
69 | // This will enable the pullups for the specified pins.
70 |
71 | GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pull-up for GPIO28 (SCIRXDA)
72 | GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pull-up for GPIO29 (SCITXDA)
73 |
74 | /* Set qualification for selected pins to asynch only */
75 | // Inputs are synchronized to SYSCLKOUT by default.
76 | // This will select asynch (no qualification) for the selected pins.
77 |
78 | GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input GPIO28 (SCIRXDA)
79 |
80 | /* Configure SCI-A pins using GPIO regs*/
81 | // This specifies which of the possible GPIO pins will be SCI functional pins.
82 |
83 | GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // Configure GPIO28 for SCIRXDA operation
84 | GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // Configure GPIO29 for SCITXDA operation
85 |
86 | EDIS;
87 | }
88 |
89 | #if DSP28_SCIB
90 | void InitScibGpio()
91 | {
92 | EALLOW;
93 |
94 | /* Enable internal pull-up for the selected pins */
95 | // Pull-ups can be enabled or disabled disabled by the user.
96 | // This will enable the pullups for the specified pins.
97 | // Comment out other unwanted lines.
98 |
99 | // GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pull-up for GPIO9 (SCITXDB)
100 | // GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pull-up for GPIO14 (SCITXDB)
101 | GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pull-up for GPIO18 (SCITXDB)
102 | // GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pull-up for GPIO22 (SCITXDB)
103 |
104 |
105 | // GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pull-up for GPIO11 (SCIRXDB)
106 | // GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pull-up for GPIO15 (SCIRXDB)
107 | GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // Enable pull-up for GPIO19 (SCIRXDB)
108 | // GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pull-up for GPIO23 (SCIRXDB)
109 |
110 | /* Set qualification for selected pins to asynch only */
111 | // This will select asynch (no qualification) for the selected pins.
112 | // Comment out other unwanted lines.
113 |
114 | // GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3; // Asynch input GPIO11 (SCIRXDB)
115 | // GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // Asynch input GPIO15 (SCIRXDB)
116 | GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SCIRXDB)
117 | // GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3; // Asynch input GPIO23 (SCIRXDB)
118 |
119 | /* Configure SCI-B pins using GPIO regs*/
120 | // This specifies which of the possible GPIO pins will be SCI functional pins.
121 | // Comment out other unwanted lines.
122 |
123 | // GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 2; // Configure GPIO9 for SCITXDB operation
124 | // GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 2; // Configure GPIO14 for SCITXDB operation
125 | GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 2; // Configure GPIO18 for SCITXDB operation
126 | // GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 3; // Configure GPIO22 for SCITXDB operation
127 |
128 | // GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 2; // Configure GPIO11 for SCIRXDB operation
129 | // GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 2; // Configure GPIO15 for SCIRXDB operation
130 | GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 2; // Configure GPIO19 for SCIRXDB operation
131 | // GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 3; // Configure GPIO23 for SCIRXDB operation
132 |
133 | EDIS;
134 | }
135 | #endif // if DSP28_SCIB
136 |
137 | #if DSP28_SCIC
138 | void InitScicGpio()
139 | {
140 | EALLOW;
141 |
142 | /* Enable internal pull-up for the selected pins */
143 | // Pull-ups can be enabled or disabled disabled by the user.
144 | // This will enable the pullups for the specified pins.
145 |
146 | GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; // Enable pull-up for GPIO62 (SCIRXDC)
147 | GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; // Enable pull-up for GPIO63 (SCITXDC)
148 |
149 | /* Set qualification for selected pins to asynch only */
150 | // Inputs are synchronized to SYSCLKOUT by default.
151 | // This will select asynch (no qualification) for the selected pins.
152 |
153 | GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; // Asynch input GPIO62 (SCIRXDC)
154 |
155 | /* Configure SCI-C pins using GPIO regs*/
156 | // This specifies which of the possible GPIO pins will be SCI functional pins.
157 |
158 | GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; // Configure GPIO62 for SCIRXDC operation
159 | GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; // Configure GPIO63 for SCITXDC operation
160 |
161 | EDIS;
162 | }
163 | #endif // if DSP28_SCIC
164 |
165 |
166 | //===========================================================================
167 | // End of file.
168 | //===========================================================================
169 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_Spi.c:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:46:44 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Spi.c
6 | //
7 | // TITLE: DSP2833x SPI Initialization & Support Functions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
15 | #include "DSP2833x_Examples.h" // DSP2833x Examples Include File
16 |
17 | //---------------------------------------------------------------------------
18 | // InitSPI:
19 | //---------------------------------------------------------------------------
20 | // This function initializes the SPI(s) to a known state.
21 | //
22 | void InitSpi(void)
23 | {
24 | // Initialize SPI-A/B/C/D
25 |
26 | //tbd...
27 |
28 | }
29 |
30 | //---------------------------------------------------------------------------
31 | // Example: InitSpiGpio:
32 | //---------------------------------------------------------------------------
33 | // This function initializes GPIO pins to function as SPI pins
34 | //
35 | // Each GPIO pin can be configured as a GPIO pin or up to 3 different
36 | // peripheral functional pins. By default all pins come up as GPIO
37 | // inputs after reset.
38 | //
39 | // Caution:
40 | // For each SPI peripheral
41 | // Only one GPIO pin should be enabled for SPISOMO operation.
42 | // Only one GPIO pin should be enabled for SPISOMI operation.
43 | // Only one GPIO pin should be enabled for SPICLKA operation.
44 | // Only one GPIO pin should be enabled for SPISTEA operation.
45 | // Comment out other unwanted lines.
46 |
47 | void InitSpiGpio()
48 | {
49 |
50 | InitSpiaGpio();
51 | }
52 |
53 | void InitSpiaGpio()
54 | {
55 |
56 | EALLOW;
57 | /* Enable internal pull-up for the selected pins */
58 | // Pull-ups can be enabled or disabled by the user.
59 | // This will enable the pullups for the specified pins.
60 | // Comment out other unwanted lines.
61 |
62 | GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // Enable pull-up on GPIO16 (SPISIMOA)
63 | GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pull-up on GPIO17 (SPISOMIA)
64 | GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pull-up on GPIO18 (SPICLKA)
65 | GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // Enable pull-up on GPIO19 (SPISTEA)
66 |
67 |
68 | // GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0; // Enable pull-up on GPIO54 (SPISIMOA)
69 | // GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0; // Enable pull-up on GPIO55 (SPISOMIA)
70 | // GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0; // Enable pull-up on GPIO56 (SPICLKA)
71 | // GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0; // Enable pull-up on GPIO57 (SPISTEA)
72 |
73 | /* Set qualification for selected pins to asynch only */
74 | // This will select asynch (no qualification) for the selected pins.
75 | // Comment out other unwanted lines.
76 |
77 | GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
78 | GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
79 | GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
80 | GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
81 |
82 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // Asynch input GPIO16 (SPISIMOA)
83 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // Asynch input GPIO17 (SPISOMIA)
84 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // Asynch input GPIO18 (SPICLKA)
85 | // GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // Asynch input GPIO19 (SPISTEA)
86 |
87 |
88 | /* Configure SPI-A pins using GPIO regs*/
89 | // This specifies which of the possible GPIO pins will be SPI functional pins.
90 | // Comment out other unwanted lines.
91 |
92 | GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
93 | GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
94 | GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
95 | GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA
96 |
97 | // GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // Configure GPIO54 as SPISIMOA
98 | // GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // Configure GPIO55 as SPISOMIA
99 | // GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // Configure GPIO56 as SPICLKA
100 | // GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1; // Configure GPIO57 as SPISTEA
101 |
102 | EDIS;
103 | }
104 |
105 | //===========================================================================
106 | // End of file.
107 | //===========================================================================
108 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_common/source/DSP2833x_usDelay.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/4 $
2 | ;// Checkin $Date: July 30, 2007 10:28:57 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_usDelay.asm
6 | ;//
7 | ;// TITLE: Simple delay function
8 | ;//
9 | ;// DESCRIPTION:
10 | ;//
11 | ;// This is a simple delay function that can be used to insert a specified
12 | ;// delay into code.
13 | ;//
14 | ;// This function is only accurate if executed from internal zero-waitstate
15 | ;// SARAM. If it is executed from waitstate memory then the delay will be
16 | ;// longer then specified.
17 | ;//
18 | ;// To use this function:
19 | ;//
20 | ;// 1 - update the CPU clock speed in the DSP2833x_Examples.h
21 | ;// file. For example:
22 | ;// #define CPU_RATE 6.667L // for a 150MHz CPU clock speed
23 | ;// or #define CPU_RATE 10.000L // for a 100MHz CPU clock speed
24 | ;//
25 | ;// 2 - Call this function by using the DELAY_US(A) macro
26 | ;// that is defined in the DSP2833x_Examples.h file. This macro
27 | ;// will convert the number of microseconds specified
28 | ;// into a loop count for use with this function.
29 | ;// This count will be based on the CPU frequency you specify.
30 | ;//
31 | ;// 3 - For the most accurate delay
32 | ;// - Execute this function in 0 waitstate RAM.
33 | ;// - Disable interrupts before calling the function
34 | ;// If you do not disable interrupts, then think of
35 | ;// this as an "at least" delay function as the actual
36 | ;// delay may be longer.
37 | ;//
38 | ;// The C assembly call from the DELAY_US(time) macro will
39 | ;// look as follows:
40 | ;//
41 | ;// extern void Delay(long LoopCount);
42 | ;//
43 | ;// MOV AL,#LowLoopCount
44 | ;// MOV AH,#HighLoopCount
45 | ;// LCR _Delay
46 | ;//
47 | ;// Or as follows (if count is less then 16-bits):
48 | ;//
49 | ;// MOV ACC,#LoopCount
50 | ;// LCR _Delay
51 | ;//
52 | ;//
53 | ;//###########################################################################
54 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
55 | ;// $Release Date: August 4, 2009 $
56 | ;//###########################################################################
57 |
58 | .def _DSP28x_usDelay
59 | .sect "ramfuncs"
60 |
61 | .global __DSP28x_usDelay
62 | _DSP28x_usDelay:
63 | SUB ACC,#1
64 | BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0
65 | LRETR
66 |
67 | ;There is a 9/10 cycle overhead and each loop
68 | ;takes five cycles. The LoopCount is given by
69 | ;the following formula:
70 | ; DELAY_CPU_CYCLES = 9 + 5*LoopCount
71 | ; LoopCount = (DELAY_CPU_CYCLES - 9) / 5
72 | ; The macro DELAY_US(A) performs this calculation for you
73 | ;
74 | ;//===========================================================================
75 | ;// End of file.
76 | ;//===========================================================================
77 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/gel/DSP2833x_Peripheral.gel:
--------------------------------------------------------------------------------
1 | /*
2 | /* TI File $Revision: /main/7 $ */
3 | /* Checkin $Date: June 2, 2008 11:12:27 $ */
4 | /******************************************************************* */
5 | /* File: DSP2833x_peripheral.gel */
6 | /* Description: Adds '2833x registers to the GEL menu in */
7 | /* Code Composer Studio using the structures defined in the DSP2833x */
8 | /* header files. The user must have the symbols (.out file) */
9 | /* loaded from a project using the DSP28 structures in order for */
10 | /* these menu items to work. If symbols are not loaded, the */
11 | /* watch window will report "Identifier not found." */
12 | /*
13 | //#####################################################################
14 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
15 | // $Release Date: August 4, 2009 $
16 | //#####################################################################
17 | */
18 |
19 | /* Add a space line to the GEL menu */
20 | menuitem "____________________________________";
21 | hotmenu _() {}
22 |
23 | menuitem "Watch DSP2833x Peripheral Structures";
24 |
25 | hotmenu All_Peripherals_Regs()
26 | {
27 | GEL_WatchAdd("AdcRegs");
28 | GEL_WatchAdd("AdcMirror");
29 | GEL_WatchAdd("CsmRegs");
30 | GEL_WatchAdd("CsmPwl");
31 | GEL_WatchAdd("CpuTimer0Regs");
32 | GEL_WatchAdd("CpuTimer1Regs");
33 | GEL_WatchAdd("CpuTimer2Regs");
34 | GEL_WatchAdd("DevEmuRegs");
35 | GEL_WatchAdd("DmaRegs");
36 | GEL_WatchAdd("ECanaRegs");
37 | GEL_WatchAdd("ECanaMboxes");
38 | GEL_WatchAdd("ECanaLAMRegs");
39 | GEL_WatchAdd("ECanaMOTSRegs");
40 | GEL_WatchAdd("ECanbRegs");
41 | GEL_WatchAdd("ECanbMboxes");
42 | GEL_WatchAdd("ECanbLAMRegs");
43 | GEL_WatchAdd("ECanbMOTSRegs");
44 | GEL_WatchAdd("EPwm1Regs");
45 | GEL_WatchAdd("EPwm2Regs");
46 | GEL_WatchAdd("EPwm3Regs");
47 | GEL_WatchAdd("EPwm4Regs");
48 | GEL_WatchAdd("EPwm5Regs");
49 | GEL_WatchAdd("EPwm6Regs");
50 | GEL_WatchAdd("ECap1Regs");
51 | GEL_WatchAdd("ECap2Regs");
52 | GEL_WatchAdd("ECap3Regs");
53 | GEL_WatchAdd("ECap4Regs");
54 | GEL_WatchAdd("ECap5Regs");
55 | GEL_WatchAdd("ECap6Regs");
56 | GEL_WatchAdd("EQep1Regs");
57 | GEL_WatchAdd("EQep2Regs");
58 | GEL_WatchAdd("FlashRegs");
59 | GEL_WatchAdd("XIntruptRegs");
60 | GEL_WatchAdd("FlashRegs");
61 | GEL_WatchAdd("GpioCtrlRegs");
62 | GEL_WatchAdd("GpioDataRegs");
63 | GEL_WatchAdd("GpioIntRegs");
64 | GEL_WatchAdd("I2caRegs");
65 | GEL_WatchAdd("McbspaRegs");
66 | GEL_WatchAdd("McbspbRegs");
67 | GEL_WatchAdd("PartIdRegs");
68 | GEL_WatchAdd("PieCtrlRegs");
69 | GEL_WatchAdd("PieVectTable");
70 | GEL_WatchAdd("SciaRegs");
71 | GEL_WatchAdd("ScibRegs");
72 | GEL_WatchAdd("ScicRegs");
73 | GEL_WatchAdd("SpiaRegs");
74 | GEL_WatchAdd("SysCtrlRegs");
75 | GEL_WatchAdd("XintfRegs");
76 | }
77 | hotmenu _______________________() {}
78 | hotmenu ADC_Regs()
79 | {
80 | GEL_WatchAdd("AdcRegs");
81 | GEL_WatchAdd("AdcMirror");
82 | }
83 | hotmenu Code_Security_Module_Regs()
84 | {
85 | GEL_WatchAdd("CsmRegs");
86 | GEL_WatchAdd("CsmPwl");
87 | }
88 | hotmenu CPU_Timer0_Regs()
89 | {
90 | GEL_WatchAdd("CpuTimer0Regs");
91 | }
92 | hotmenu CPU_Timer1_Regs()
93 | {
94 | GEL_WatchAdd("CpuTimer1Regs");
95 | }
96 | hotmenu CPU_Timer2_Regs()
97 | {
98 | GEL_WatchAdd("CpuTimer2Regs");
99 | }
100 | hotmenu Device_Emulation_Regs()
101 | {
102 | GEL_WatchAdd("DevEmuRegs");
103 | }
104 | hotmenu DMA_Regs()
105 | {
106 | GEL_WatchAdd("DMARegs");
107 | }
108 | hotmenu eCANA_Regs()
109 | {
110 | GEL_WatchAdd("ECanaRegs");
111 | GEL_WatchAdd("ECanaMboxes");
112 | GEL_WatchAdd("ECanaLAMRegs");
113 | GEL_WatchAdd("ECanaMOTSRegs");
114 | }
115 | hotmenu eCANB_Regs()
116 | {
117 | GEL_WatchAdd("ECanbRegs");
118 | GEL_WatchAdd("ECanbMboxes");
119 | GEL_WatchAdd("ECanbLAMRegs");
120 | GEL_WatchAdd("ECanbMOTSRegs");
121 | }
122 | hotmenu EPWM1_Regs()
123 | {
124 | GEL_WatchAdd("EPwm1Regs");
125 | }
126 | hotmenu EPWM2_Regs()
127 | {
128 | GEL_WatchAdd("EPwm2Regs");
129 | }
130 | hotmenu EPWM3_Regs()
131 | {
132 | GEL_WatchAdd("EPwm3Regs");
133 | }
134 | hotmenu EPWM4_Regs()
135 | {
136 | GEL_WatchAdd("EPwm4Regs");
137 | }
138 | hotmenu EPWM5_Regs()
139 | {
140 | GEL_WatchAdd("EPwm5Regs");
141 | }
142 | hotmenu EPWM6_Regs()
143 | {
144 | GEL_WatchAdd("EPwm6Regs");
145 | }
146 | hotmenu ECAP1_Regs()
147 | {
148 | GEL_WatchAdd("ECap1Regs");
149 | }
150 | hotmenu ECAP2_Regs()
151 | {
152 | GEL_WatchAdd("ECap2Regs");
153 | }
154 | hotmenu ECAP3_Regs()
155 | {
156 | GEL_WatchAdd("ECap3Regs");
157 | }
158 | hotmenu ECAP4_Regs()
159 | {
160 | GEL_WatchAdd("ECap4Regs");
161 | }
162 | hotmenu ECAP5_Regs()
163 | {
164 | GEL_WatchAdd("ECap5Regs");
165 | }
166 | hotmenu ECAP6_Regs()
167 | {
168 | GEL_WatchAdd("ECap6Regs");
169 | }
170 | hotmenu EQEP1_Regs()
171 | {
172 | GEL_WatchAdd("EQep1Regs");
173 | }
174 | hotmenu EQEP2_Regs()
175 | {
176 | GEL_WatchAdd("EQep2Regs");
177 | }
178 | hotmenu External_Interface_Regs()
179 | {
180 | GEL_WatchAdd("XintfRegs");
181 | }
182 | hotmenu External_Interrupt_Regs()
183 | {
184 | GEL_WatchAdd("XIntruptRegs");
185 | }
186 | hotmenu Flash_and_OTP_Regs()
187 | {
188 | GEL_WatchAdd("FlashRegs");
189 | }
190 | hotmenu GPIO_CTRL_Regs()
191 | {
192 | GEL_WatchAdd("GpioCtrlRegs");
193 | }
194 | hotmenu GPIO_DATA_Regs()
195 | {
196 | GEL_WatchAdd("GpioDataRegs");
197 | }
198 | hotmenu GPIO_INT_Regs()
199 | {
200 | GEL_WatchAdd("GpioIntRegs");
201 | }
202 | hotmenu I2CA_Regs()
203 | {
204 | GEL_WatchAdd("I2caRegs");
205 | }
206 | hotmenu McBSPA_Regs()
207 | {
208 | GEL_WatchAdd("McbspaRegs");
209 | }
210 | hotmenu McBSPB_Regs()
211 | {
212 | GEL_WatchAdd("McbspbRegs");
213 | }
214 | hotmenu PartId_Regs()
215 | {
216 | GEL_WatchAdd("PartIdRegs");
217 | }
218 | hotmenu PIE_Control_Regs()
219 | {
220 | GEL_WatchAdd("PieCtrlRegs");
221 | }
222 | hotmenu SCIA_Regs()
223 | {
224 | GEL_WatchAdd("SciaRegs");
225 | }
226 | hotmenu SCIB_Regs()
227 | {
228 | GEL_WatchAdd("ScibRegs");
229 | }
230 | hotmenu SPIA_Regs()
231 | {
232 | GEL_WatchAdd("SpiaRegs");
233 | }
234 | hotmenu System_and_Control_Regs()
235 | {
236 | GEL_WatchAdd("SysCtrlRegs");
237 | }
238 |
239 |
240 |
241 | /*
242 | //===========================================================================
243 | // End of file.
244 | //===========================================================================
245 | */
246 |
247 |
248 |
249 |
250 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_CpuTimers.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/4 $
2 | // Checkin $Date: March 20, 2007 15:33:42 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_CpuTimers.h
6 | //
7 | // TITLE: DSP2833x CPU 32-bit Timers Register Definitions.
8 | //
9 | // NOTES: CpuTimer1 and CpuTimer2 are reserved for use with DSP BIOS and
10 | // other realtime operating systems.
11 | //
12 | // Do not use these two timers in your application if you ever plan
13 | // on integrating DSP-BIOS or another realtime OS.
14 | //
15 | // For this reason, comment out the code to manipulate these two timers
16 | // if using DSP-BIOS or another realtime OS.
17 | //
18 | //###########################################################################
19 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
20 | // $Release Date: August 4, 2009 $
21 | //###########################################################################
22 |
23 | #ifndef DSP2833x_CPU_TIMERS_H
24 | #define DSP2833x_CPU_TIMERS_H
25 |
26 | #ifdef __cplusplus
27 | extern "C" {
28 | #endif
29 |
30 | //---------------------------------------------------------------------------
31 | // CPU Timer Register Bit Definitions:
32 | //
33 | //
34 | // TCR: Control register bit definitions:
35 | struct TCR_BITS { // bits description
36 | Uint16 rsvd1:4; // 3:0 reserved
37 | Uint16 TSS:1; // 4 Timer Start/Stop
38 | Uint16 TRB:1; // 5 Timer reload
39 | Uint16 rsvd2:4; // 9:6 reserved
40 | Uint16 SOFT:1; // 10 Emulation modes
41 | Uint16 FREE:1; // 11
42 | Uint16 rsvd3:2; // 12:13 reserved
43 | Uint16 TIE:1; // 14 Output enable
44 | Uint16 TIF:1; // 15 Interrupt flag
45 | };
46 |
47 | union TCR_REG {
48 | Uint16 all;
49 | struct TCR_BITS bit;
50 | };
51 |
52 | // TPR: Pre-scale low bit definitions:
53 | struct TPR_BITS { // bits description
54 | Uint16 TDDR:8; // 7:0 Divide-down low
55 | Uint16 PSC:8; // 15:8 Prescale counter low
56 | };
57 |
58 | union TPR_REG {
59 | Uint16 all;
60 | struct TPR_BITS bit;
61 | };
62 |
63 | // TPRH: Pre-scale high bit definitions:
64 | struct TPRH_BITS { // bits description
65 | Uint16 TDDRH:8; // 7:0 Divide-down high
66 | Uint16 PSCH:8; // 15:8 Prescale counter high
67 | };
68 |
69 | union TPRH_REG {
70 | Uint16 all;
71 | struct TPRH_BITS bit;
72 | };
73 |
74 | // TIM, TIMH: Timer register definitions:
75 | struct TIM_REG {
76 | Uint16 LSW;
77 | Uint16 MSW;
78 | };
79 |
80 | union TIM_GROUP {
81 | Uint32 all;
82 | struct TIM_REG half;
83 | };
84 |
85 | // PRD, PRDH: Period register definitions:
86 | struct PRD_REG {
87 | Uint16 LSW;
88 | Uint16 MSW;
89 | };
90 |
91 | union PRD_GROUP {
92 | Uint32 all;
93 | struct PRD_REG half;
94 | };
95 |
96 | //---------------------------------------------------------------------------
97 | // CPU Timer Register File:
98 | //
99 | struct CPUTIMER_REGS {
100 | union TIM_GROUP TIM; // Timer counter register
101 | union PRD_GROUP PRD; // Period register
102 | union TCR_REG TCR; // Timer control register
103 | Uint16 rsvd1; // reserved
104 | union TPR_REG TPR; // Timer pre-scale low
105 | union TPRH_REG TPRH; // Timer pre-scale high
106 | };
107 |
108 | //---------------------------------------------------------------------------
109 | // CPU Timer Support Variables:
110 | //
111 | struct CPUTIMER_VARS {
112 | volatile struct CPUTIMER_REGS *RegsAddr;
113 | Uint32 InterruptCount;
114 | float CPUFreqInMHz;
115 | float PeriodInUSec;
116 | };
117 |
118 | //---------------------------------------------------------------------------
119 | // Function prototypes and external definitions:
120 | //
121 | void InitCpuTimers(void);
122 | void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);
123 |
124 | extern volatile struct CPUTIMER_REGS CpuTimer0Regs;
125 | extern struct CPUTIMER_VARS CpuTimer0;
126 |
127 | // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS. Comment out CpuTimer1 and CpuTimer2 if using DSP BIOS or other RTOS
128 | extern volatile struct CPUTIMER_REGS CpuTimer1Regs;
129 | extern volatile struct CPUTIMER_REGS CpuTimer2Regs;
130 |
131 | extern struct CPUTIMER_VARS CpuTimer1;
132 | extern struct CPUTIMER_VARS CpuTimer2;
133 |
134 | //---------------------------------------------------------------------------
135 | // Usefull Timer Operations:
136 | //
137 | // Start Timer:
138 | #define StartCpuTimer0() CpuTimer0Regs.TCR.bit.TSS = 0
139 |
140 | // Stop Timer:
141 | #define StopCpuTimer0() CpuTimer0Regs.TCR.bit.TSS = 1
142 |
143 | // Reload Timer With period Value:
144 | #define ReloadCpuTimer0() CpuTimer0Regs.TCR.bit.TRB = 1
145 |
146 | // Read 32-Bit Timer Value:
147 | #define ReadCpuTimer0Counter() CpuTimer0Regs.TIM.all
148 |
149 | // Read 32-Bit Period Value:
150 | #define ReadCpuTimer0Period() CpuTimer0Regs.PRD.all
151 |
152 | // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS
153 | // Do not use these two timers if you ever plan on integrating
154 | // DSP-BIOS or another realtime OS.
155 | //
156 | // For this reason, comment out the code to manipulate these two timers
157 | // if using DSP-BIOS or another realtime OS.
158 |
159 | // Start Timer:
160 | #define StartCpuTimer1() CpuTimer1Regs.TCR.bit.TSS = 0
161 | #define StartCpuTimer2() CpuTimer2Regs.TCR.bit.TSS = 0
162 |
163 |
164 | // Stop Timer:
165 | #define StopCpuTimer1() CpuTimer1Regs.TCR.bit.TSS = 1
166 | #define StopCpuTimer2() CpuTimer2Regs.TCR.bit.TSS = 1
167 |
168 | // Reload Timer With period Value:
169 | #define ReloadCpuTimer1() CpuTimer1Regs.TCR.bit.TRB = 1
170 | #define ReloadCpuTimer2() CpuTimer2Regs.TCR.bit.TRB = 1
171 |
172 | // Read 32-Bit Timer Value:
173 | #define ReadCpuTimer1Counter() CpuTimer1Regs.TIM.all
174 | #define ReadCpuTimer2Counter() CpuTimer2Regs.TIM.all
175 |
176 | // Read 32-Bit Period Value:
177 | #define ReadCpuTimer1Period() CpuTimer1Regs.PRD.all
178 | #define ReadCpuTimer2Period() CpuTimer2Regs.PRD.all
179 |
180 |
181 | #ifdef __cplusplus
182 | }
183 | #endif /* extern "C" */
184 |
185 | #endif // end of DSP2833x_CPU_TIMERS_H definition
186 |
187 |
188 | //===========================================================================
189 | // End of file.
190 | //===========================================================================
191 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_DevEmu.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/4 $
2 | // Checkin $Date: April 15, 2009 10:05:17 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_DevEmu.h
6 | //
7 | // TITLE: DSP2833x Device Emulation Register Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_DEV_EMU_H
15 | #define DSP2833x_DEV_EMU_H
16 |
17 | #ifdef __cplusplus
18 | extern "C" {
19 | #endif
20 |
21 | //---------------------------------------------------------------------------
22 | // Device Emulation Register Bit Definitions:
23 | //
24 | // Device Configuration Register Bit Definitions
25 | struct DEVICECNF_BITS { // bits description
26 | Uint16 rsvd1:3; // 2:0 reserved
27 | Uint16 VMAPS:1; // 3 VMAP Status
28 | Uint16 rsvd2:1; // 4 reserved
29 | Uint16 XRSn:1; // 5 XRSn Signal Status
30 | Uint16 rsvd3:10; // 15:6
31 | Uint16 rsvd4:3; // 18:16
32 | Uint16 ENPROT:1; // 19 Enable/Disable pipeline protection
33 | Uint16 rsvd5:7; // 26:20 reserved
34 | Uint16 TRSTN:1; // 27 Status of TRSTn signal
35 | Uint16 rsvd6:4; // 31:28 reserved
36 | };
37 |
38 | union DEVICECNF_REG {
39 | Uint32 all;
40 | struct DEVICECNF_BITS bit;
41 | };
42 |
43 | // CLASSID
44 | struct CLASSID_BITS { // bits description
45 | Uint16 CLASSNO:8; // 7:0 Class Number
46 | Uint16 PARTTYPE:8; // 15:8 Part Type
47 | };
48 |
49 | union CLASSID_REG {
50 | Uint16 all;
51 | struct CLASSID_BITS bit;
52 | };
53 |
54 | struct DEV_EMU_REGS {
55 | union DEVICECNF_REG DEVICECNF; // device configuration
56 | union CLASSID_REG CLASSID; // Class ID
57 | Uint16 REVID; // Device ID
58 | Uint16 PROTSTART; // Write-Read protection start
59 | Uint16 PROTRANGE; // Write-Read protection range
60 | Uint16 rsvd2[202];
61 | };
62 |
63 | // PARTID
64 | struct PARTID_BITS { // bits description
65 | Uint16 PARTNO:8; // 7:0 Part Number
66 | Uint16 PARTTYPE:8; // 15:8 Part Type
67 | };
68 |
69 | union PARTID_REG {
70 | Uint16 all;
71 | struct PARTID_BITS bit;
72 | };
73 |
74 | struct PARTID_REGS {
75 | union PARTID_REG PARTID; // Part ID
76 | };
77 |
78 |
79 |
80 | //---------------------------------------------------------------------------
81 | // Device Emulation Register References & Function Declarations:
82 | //
83 | extern volatile struct DEV_EMU_REGS DevEmuRegs;
84 | extern volatile struct PARTID_REGS PartIdRegs;
85 |
86 | #ifdef __cplusplus
87 | }
88 | #endif /* extern "C" */
89 |
90 | #endif // end of DSP2833x_DEV_EMU_H definition
91 |
92 | //===========================================================================
93 | // End of file.
94 | //===========================================================================
95 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_Device.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/5 $
2 | // Checkin $Date: January 22, 2008 16:55:35 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Device.h
6 | //
7 | // TITLE: DSP2833x Device Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_DEVICE_H
15 | #define DSP2833x_DEVICE_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 |
23 | #define TARGET 1
24 | //---------------------------------------------------------------------------
25 | // User To Select Target Device:
26 |
27 | #define DSP28_28335 TARGET // Selects '28335/'28235
28 | #define DSP28_28334 0 // Selects '28334/'28234
29 | #define DSP28_28332 0 // Selects '28332/'28232
30 |
31 |
32 | //---------------------------------------------------------------------------
33 | // Common CPU Definitions:
34 | //
35 |
36 | extern cregister volatile unsigned int IFR;
37 | extern cregister volatile unsigned int IER;
38 |
39 | #define EINT asm(" clrc INTM")
40 | #define DINT asm(" setc INTM")
41 | #define ERTM asm(" clrc DBGM")
42 | #define DRTM asm(" setc DBGM")
43 | #define EALLOW asm(" EALLOW")
44 | #define EDIS asm(" EDIS")
45 | #define ESTOP0 asm(" ESTOP0")
46 |
47 | #define M_INT1 0x0001
48 | #define M_INT2 0x0002
49 | #define M_INT3 0x0004
50 | #define M_INT4 0x0008
51 | #define M_INT5 0x0010
52 | #define M_INT6 0x0020
53 | #define M_INT7 0x0040
54 | #define M_INT8 0x0080
55 | #define M_INT9 0x0100
56 | #define M_INT10 0x0200
57 | #define M_INT11 0x0400
58 | #define M_INT12 0x0800
59 | #define M_INT13 0x1000
60 | #define M_INT14 0x2000
61 | #define M_DLOG 0x4000
62 | #define M_RTOS 0x8000
63 |
64 | #define BIT0 0x0001
65 | #define BIT1 0x0002
66 | #define BIT2 0x0004
67 | #define BIT3 0x0008
68 | #define BIT4 0x0010
69 | #define BIT5 0x0020
70 | #define BIT6 0x0040
71 | #define BIT7 0x0080
72 | #define BIT8 0x0100
73 | #define BIT9 0x0200
74 | #define BIT10 0x0400
75 | #define BIT11 0x0800
76 | #define BIT12 0x1000
77 | #define BIT13 0x2000
78 | #define BIT14 0x4000
79 | #define BIT15 0x8000
80 |
81 |
82 |
83 | //---------------------------------------------------------------------------
84 | // For Portability, User Is Recommended To Use Following Data Type Size
85 | // Definitions For 16-bit and 32-Bit Signed/Unsigned Integers:
86 | //
87 |
88 | #ifndef DSP28_DATA_TYPES
89 | #define DSP28_DATA_TYPES
90 | typedef int int16;
91 | typedef long int32;
92 | typedef long long int64;
93 | typedef unsigned int Uint16;
94 | typedef unsigned long Uint32;
95 | typedef unsigned long long Uint64;
96 | typedef float float32;
97 | typedef long double float64;
98 | #endif
99 |
100 |
101 | //---------------------------------------------------------------------------
102 | // Include All Peripheral Header Files:
103 | //
104 |
105 | #include "DSP2833x_Adc.h" // ADC Registers
106 | #include "DSP2833x_DevEmu.h" // Device Emulation Registers
107 | #include "DSP2833x_CpuTimers.h" // 32-bit CPU Timers
108 | #include "DSP2833x_ECan.h" // Enhanced eCAN Registers
109 | #include "DSP2833x_ECap.h" // Enhanced Capture
110 | #include "DSP2833x_DMA.h" // DMA Registers
111 | #include "DSP2833x_EPwm.h" // Enhanced PWM
112 | #include "DSP2833x_EQep.h" // Enhanced QEP
113 | #include "DSP2833x_Gpio.h" // General Purpose I/O Registers
114 | #include "DSP2833x_I2c.h" // I2C Registers
115 | #include "DSP2833x_McBSP.h" // McBSP
116 | #include "DSP2833x_PieCtrl.h" // PIE Control Registers
117 | #include "DSP2833x_PieVect.h" // PIE Vector Table
118 | #include "DSP2833x_Spi.h" // SPI Registers
119 | #include "DSP2833x_Sci.h" // SCI Registers
120 | #include "DSP2833x_SysCtrl.h" // System Control/Power Modes
121 | #include "DSP2833x_XIntrupt.h" // External Interrupts
122 | #include "DSP2833x_Xintf.h" // XINTF External Interface
123 |
124 | #if DSP28_28335
125 | #define DSP28_EPWM1 1
126 | #define DSP28_EPWM2 1
127 | #define DSP28_EPWM3 1
128 | #define DSP28_EPWM4 1
129 | #define DSP28_EPWM5 1
130 | #define DSP28_EPWM6 1
131 | #define DSP28_ECAP1 1
132 | #define DSP28_ECAP2 1
133 | #define DSP28_ECAP3 1
134 | #define DSP28_ECAP4 1
135 | #define DSP28_ECAP5 1
136 | #define DSP28_ECAP6 1
137 | #define DSP28_EQEP1 1
138 | #define DSP28_EQEP2 1
139 | #define DSP28_ECANA 1
140 | #define DSP28_ECANB 1
141 | #define DSP28_MCBSPA 1
142 | #define DSP28_MCBSPB 1
143 | #define DSP28_SPIA 1
144 | #define DSP28_SCIA 1
145 | #define DSP28_SCIB 0
146 | #define DSP28_SCIC 0
147 | #define DSP28_I2CA 1
148 | #endif // end DSP28_28335
149 |
150 | #if DSP28_28334
151 | #define DSP28_EPWM1 1
152 | #define DSP28_EPWM2 1
153 | #define DSP28_EPWM3 1
154 | #define DSP28_EPWM4 1
155 | #define DSP28_EPWM5 1
156 | #define DSP28_EPWM6 1
157 | #define DSP28_ECAP1 1
158 | #define DSP28_ECAP2 1
159 | #define DSP28_ECAP3 1
160 | #define DSP28_ECAP4 1
161 | #define DSP28_ECAP5 0
162 | #define DSP28_ECAP6 0
163 | #define DSP28_EQEP1 1
164 | #define DSP28_EQEP2 1
165 | #define DSP28_ECANA 1
166 | #define DSP28_ECANB 1
167 | #define DSP28_MCBSPA 1
168 | #define DSP28_MCBSPB 1
169 | #define DSP28_SPIA 1
170 | #define DSP28_SCIA 1
171 | #define DSP28_SCIB 1
172 | #define DSP28_SCIC 1
173 | #define DSP28_I2CA 1
174 | #endif // end DSP28_28334
175 |
176 | #if DSP28_28332
177 | #define DSP28_EPWM1 1
178 | #define DSP28_EPWM2 1
179 | #define DSP28_EPWM3 1
180 | #define DSP28_EPWM4 1
181 | #define DSP28_EPWM5 1
182 | #define DSP28_EPWM6 1
183 | #define DSP28_ECAP1 1
184 | #define DSP28_ECAP2 1
185 | #define DSP28_ECAP3 1
186 | #define DSP28_ECAP4 1
187 | #define DSP28_ECAP5 0
188 | #define DSP28_ECAP6 0
189 | #define DSP28_EQEP1 1
190 | #define DSP28_EQEP2 1
191 | #define DSP28_ECANA 1
192 | #define DSP28_ECANB 1
193 | #define DSP28_MCBSPA 1
194 | #define DSP28_MCBSPB 0
195 | #define DSP28_SPIA 1
196 | #define DSP28_SCIA 1
197 | #define DSP28_SCIB 1
198 | #define DSP28_SCIC 0
199 | #define DSP28_I2CA 1
200 | #endif // end DSP28_28332
201 |
202 | #ifdef __cplusplus
203 | }
204 | #endif /* extern "C" */
205 |
206 | #endif // end of DSP2833x_DEVICE_H definition
207 |
208 |
209 | //===========================================================================
210 | // End of file.
211 | //===========================================================================
212 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_ECap.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:52:07 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_ECap.h
6 | //
7 | // TITLE: DSP2833x Enhanced Capture Module Register Bit Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_ECAP_H
15 | #define DSP2833x_ECAP_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | //----------------------------------------------------
23 | // Capture control register 1 bit definitions */
24 | struct ECCTL1_BITS { // bits description
25 | Uint16 CAP1POL:1; // 0 Capture Event 1 Polarity select
26 | Uint16 CTRRST1:1; // 1 Counter Reset on Capture Event 1
27 | Uint16 CAP2POL:1; // 2 Capture Event 2 Polarity select
28 | Uint16 CTRRST2:1; // 3 Counter Reset on Capture Event 2
29 | Uint16 CAP3POL:1; // 4 Capture Event 3 Polarity select
30 | Uint16 CTRRST3:1; // 5 Counter Reset on Capture Event 3
31 | Uint16 CAP4POL:1; // 6 Capture Event 4 Polarity select
32 | Uint16 CTRRST4:1; // 7 Counter Reset on Capture Event 4
33 | Uint16 CAPLDEN:1; // 8 Enable Loading CAP1-4 regs on a Cap Event
34 | Uint16 PRESCALE:5; // 13:9 Event Filter prescale select
35 | Uint16 FREE_SOFT:2; // 15:14 Emulation mode
36 | };
37 |
38 | union ECCTL1_REG {
39 | Uint16 all;
40 | struct ECCTL1_BITS bit;
41 | };
42 |
43 |
44 | // In V1.1 the STOPVALUE bit field was changed to
45 | // STOP_WRAP. This correlated to a silicon change from
46 | // F2833x Rev 0 to Rev A.
47 | //----------------------------------------------------
48 | // Capture control register 2 bit definitions */
49 | struct ECCTL2_BITS { // bits description
50 | Uint16 CONT_ONESHT:1; // 0 Continuous or one-shot
51 | Uint16 STOP_WRAP:2; // 2:1 Stop value for one-shot, Wrap for continuous
52 | Uint16 REARM:1; // 3 One-shot re-arm
53 | Uint16 TSCTRSTOP:1; // 4 TSCNT counter stop
54 | Uint16 SYNCI_EN:1; // 5 Counter sync-in select
55 | Uint16 SYNCO_SEL:2; // 7:6 Sync-out mode
56 | Uint16 SWSYNC:1; // 8 SW forced counter sync
57 | Uint16 CAP_APWM:1; // 9 CAP/APWM operating mode select
58 | Uint16 APWMPOL:1; // 10 APWM output polarity select
59 | Uint16 rsvd1:5; // 15:11
60 | };
61 |
62 |
63 | union ECCTL2_REG {
64 | Uint16 all;
65 | struct ECCTL2_BITS bit;
66 | };
67 |
68 |
69 | //----------------------------------------------------
70 | // ECAP interrupt enable register bit definitions */
71 | struct ECEINT_BITS { // bits description
72 | Uint16 rsvd1:1; // 0 reserved
73 | Uint16 CEVT1:1; // 1 Capture Event 1 Interrupt Enable
74 | Uint16 CEVT2:1; // 2 Capture Event 2 Interrupt Enable
75 | Uint16 CEVT3:1; // 3 Capture Event 3 Interrupt Enable
76 | Uint16 CEVT4:1; // 4 Capture Event 4 Interrupt Enable
77 | Uint16 CTROVF:1; // 5 Counter Overflow Interrupt Enable
78 | Uint16 CTR_EQ_PRD:1; // 6 Period Equal Interrupt Enable
79 | Uint16 CTR_EQ_CMP:1; // 7 Compare Equal Interrupt Enable
80 | Uint16 rsvd2:8; // 15:8 reserved
81 | };
82 |
83 |
84 | union ECEINT_REG {
85 | Uint16 all;
86 | struct ECEINT_BITS bit;
87 | };
88 |
89 | //----------------------------------------------------
90 | // ECAP interrupt flag register bit definitions */
91 | struct ECFLG_BITS { // bits description
92 | Uint16 INT:1; // 0 Global Flag
93 | Uint16 CEVT1:1; // 1 Capture Event 1 Interrupt Flag
94 | Uint16 CEVT2:1; // 2 Capture Event 2 Interrupt Flag
95 | Uint16 CEVT3:1; // 3 Capture Event 3 Interrupt Flag
96 | Uint16 CEVT4:1; // 4 Capture Event 4 Interrupt Flag
97 | Uint16 CTROVF:1; // 5 Counter Overflow Interrupt Flag
98 | Uint16 CTR_EQ_PRD:1; // 6 Period Equal Interrupt Flag
99 | Uint16 CTR_EQ_CMP:1; // 7 Compare Equal Interrupt Flag
100 | Uint16 rsvd2:8; // 15:8 reserved
101 | };
102 |
103 |
104 | union ECFLG_REG {
105 | Uint16 all;
106 | struct ECFLG_BITS bit;
107 | };
108 |
109 |
110 | //----------------------------------------------------
111 |
112 | struct ECAP_REGS {
113 | Uint32 TSCTR; // Time stamp counter
114 | Uint32 CTRPHS; // Counter phase
115 | Uint32 CAP1; // Capture 1
116 | Uint32 CAP2; // Capture 2
117 | Uint32 CAP3; // Capture 3
118 | Uint32 CAP4; // Capture 4
119 | Uint16 rsvd1[8]; // reserved
120 | union ECCTL1_REG ECCTL1; // Capture Control Reg 1
121 | union ECCTL2_REG ECCTL2; // Capture Control Reg 2
122 | union ECEINT_REG ECEINT; // ECAP interrupt enable
123 | union ECFLG_REG ECFLG; // ECAP interrupt flags
124 | union ECFLG_REG ECCLR; // ECAP interrupt clear
125 | union ECEINT_REG ECFRC; // ECAP interrupt force
126 | Uint16 rsvd2[6]; // reserved
127 | };
128 |
129 |
130 |
131 |
132 | //---------------------------------------------------------------------------
133 | // GPI/O External References & Function Declarations:
134 | //
135 | extern volatile struct ECAP_REGS ECap1Regs;
136 | extern volatile struct ECAP_REGS ECap2Regs;
137 | extern volatile struct ECAP_REGS ECap3Regs;
138 | extern volatile struct ECAP_REGS ECap4Regs;
139 | extern volatile struct ECAP_REGS ECap5Regs;
140 | extern volatile struct ECAP_REGS ECap6Regs;
141 |
142 |
143 | #ifdef __cplusplus
144 | }
145 | #endif /* extern "C" */
146 |
147 | #endif // end of DSP2833x_ECAP_H definition
148 |
149 | //===========================================================================
150 | // End of file.
151 | //===========================================================================
152 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_I2c.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/2 $
2 | // Checkin $Date: March 22, 2007 10:40:22 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_I2c.h
6 | //
7 | // TITLE: DSP2833x Enhanced Quadrature Encoder Pulse Module
8 | // Register Bit Definitions.
9 | //
10 | //###########################################################################
11 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
12 | // $Release Date: August 4, 2009 $
13 | //###########################################################################
14 |
15 | #ifndef DSP2833x_I2C_H
16 | #define DSP2833x_I2C_H
17 |
18 |
19 | #ifdef __cplusplus
20 | extern "C" {
21 | #endif
22 |
23 |
24 | //----------------------------------------------------
25 | // I2C interrupt vector register bit definitions */
26 | struct I2CISRC_BITS { // bits description
27 | Uint16 INTCODE:3; // 2:0 Interrupt code
28 | Uint16 rsvd1:13; // 15:3 reserved
29 | };
30 |
31 | union I2CISRC_REG {
32 | Uint16 all;
33 | struct I2CISRC_BITS bit;
34 | };
35 |
36 | //----------------------------------------------------
37 | // I2C interrupt mask register bit definitions */
38 | struct I2CIER_BITS { // bits description
39 | Uint16 ARBL:1; // 0 Arbitration lost interrupt
40 | Uint16 NACK:1; // 1 No ack interrupt
41 | Uint16 ARDY:1; // 2 Register access ready interrupt
42 | Uint16 RRDY:1; // 3 Recieve data ready interrupt
43 | Uint16 XRDY:1; // 4 Transmit data ready interrupt
44 | Uint16 SCD:1; // 5 Stop condition detection
45 | Uint16 AAS:1; // 6 Address as slave
46 | Uint16 rsvd:9; // 15:7 reserved
47 | };
48 |
49 | union I2CIER_REG {
50 | Uint16 all;
51 | struct I2CIER_BITS bit;
52 | };
53 |
54 | //----------------------------------------------------
55 | // I2C status register bit definitions */
56 | struct I2CSTR_BITS { // bits description
57 | Uint16 ARBL:1; // 0 Arbitration lost interrupt
58 | Uint16 NACK:1; // 1 No ack interrupt
59 | Uint16 ARDY:1; // 2 Register access ready interrupt
60 | Uint16 RRDY:1; // 3 Recieve data ready interrupt
61 | Uint16 XRDY:1; // 4 Transmit data ready interrupt
62 | Uint16 SCD:1; // 5 Stop condition detection
63 | Uint16 rsvd1:2; // 7:6 reserved
64 | Uint16 AD0:1; // 8 Address Zero
65 | Uint16 AAS:1; // 9 Address as slave
66 | Uint16 XSMT:1; // 10 XMIT shift empty
67 | Uint16 RSFULL:1; // 11 Recieve shift full
68 | Uint16 BB:1; // 12 Bus busy
69 | Uint16 NACKSNT:1; // 13 A no ack sent
70 | Uint16 SDIR:1; // 14 Slave direction
71 | Uint16 rsvd2:1; // 15 reserved
72 | };
73 |
74 | union I2CSTR_REG {
75 | Uint16 all;
76 | struct I2CSTR_BITS bit;
77 | };
78 |
79 |
80 | //----------------------------------------------------
81 | // I2C mode control register bit definitions */
82 | struct I2CMDR_BITS { // bits description
83 | Uint16 BC:3; // 2:0 Bit count
84 | Uint16 FDF:1; // 3 Free data format
85 | Uint16 STB:1; // 4 Start byte
86 | Uint16 IRS:1; // 5 I2C Reset not
87 | Uint16 DLB:1; // 6 Digital loopback
88 | Uint16 RM:1; // 7 Repeat mode
89 | Uint16 XA:1; // 8 Expand address
90 | Uint16 TRX:1; // 9 Transmitter/reciever
91 | Uint16 MST:1; // 10 Master/slave
92 | Uint16 STP:1; // 11 Stop condition
93 | Uint16 rsvd1:1; // 12 reserved
94 | Uint16 STT:1; // 13 Start condition
95 | Uint16 FREE:1; // 14 Emulation mode
96 | Uint16 NACKMOD:1; // 15 No Ack mode
97 | };
98 |
99 | union I2CMDR_REG {
100 | Uint16 all;
101 | struct I2CMDR_BITS bit;
102 | };
103 |
104 | //----------------------------------------------------
105 | // I2C pre-scaler register bit definitions */
106 | struct I2CPSC_BITS { // bits description
107 | Uint16 IPSC:8; // 7:0 pre-scaler
108 | Uint16 rsvd1:8; // 15:8 reserved
109 | };
110 |
111 |
112 | union I2CPSC_REG {
113 | Uint16 all;
114 | struct I2CPSC_BITS bit;
115 | };
116 |
117 |
118 | //----------------------------------------------------
119 | // TX FIFO control register bit definitions */
120 | struct I2CFFTX_BITS { // bits description
121 | Uint16 TXFFIL:5; // 4:0 FIFO interrupt level
122 | Uint16 TXFFIENA:1; // 5 FIFO interrupt enable/disable
123 | Uint16 TXFFINTCLR:1; // 6 FIFO clear
124 | Uint16 TXFFINT:1; // 7 FIFO interrupt flag
125 | Uint16 TXFFST:5; // 12:8 FIFO level status
126 | Uint16 TXFFRST:1; // 13 FIFO reset
127 | Uint16 I2CFFEN:1; // 14 enable/disable TX & RX FIFOs
128 | Uint16 rsvd1:1; // 15 reserved
129 |
130 | };
131 |
132 | union I2CFFTX_REG {
133 | Uint16 all;
134 | struct I2CFFTX_BITS bit;
135 | };
136 |
137 | //----------------------------------------------------
138 | // RX FIFO control register bit definitions */
139 | struct I2CFFRX_BITS { // bits description
140 | Uint16 RXFFIL:5; // 4:0 FIFO interrupt level
141 | Uint16 RXFFIENA:1; // 5 FIFO interrupt enable/disable
142 | Uint16 RXFFINTCLR:1; // 6 FIFO clear
143 | Uint16 RXFFINT:1; // 7 FIFO interrupt flag
144 | Uint16 RXFFST:5; // 12:8 FIFO level
145 | Uint16 RXFFRST:1; // 13 FIFO reset
146 | Uint16 rsvd1:2; // 15:14 reserved
147 | };
148 |
149 | union I2CFFRX_REG {
150 | Uint16 all;
151 | struct I2CFFRX_BITS bit;
152 | };
153 |
154 |
155 | //----------------------------------------------------
156 |
157 | struct I2C_REGS {
158 | Uint16 I2COAR; // Own address register
159 | union I2CIER_REG I2CIER; // Interrupt enable
160 | union I2CSTR_REG I2CSTR; // Interrupt status
161 | Uint16 I2CCLKL; // Clock divider low
162 | Uint16 I2CCLKH; // Clock divider high
163 | Uint16 I2CCNT; // Data count
164 | Uint16 I2CDRR; // Data recieve
165 | Uint16 I2CSAR; // Slave address
166 | Uint16 I2CDXR; // Data transmit
167 | union I2CMDR_REG I2CMDR; // Mode
168 | union I2CISRC_REG I2CISRC; // Interrupt source
169 | Uint16 rsvd1; // reserved
170 | union I2CPSC_REG I2CPSC; // Pre-scaler
171 | Uint16 rsvd2[19]; // reserved
172 | union I2CFFTX_REG I2CFFTX; // Transmit FIFO
173 | union I2CFFRX_REG I2CFFRX; // Recieve FIFO
174 | };
175 |
176 |
177 |
178 |
179 | //---------------------------------------------------------------------------
180 | // External References & Function Declarations:
181 | //
182 | extern volatile struct I2C_REGS I2caRegs;
183 |
184 |
185 | #ifdef __cplusplus
186 | }
187 | #endif /* extern "C" */
188 |
189 | #endif // end of DSP2833x_I2C_H definition
190 |
191 | //===========================================================================
192 | // End of file.
193 | //===========================================================================
194 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_PieCtrl.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:52:24 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_PieCtrl.h
6 | //
7 | // TITLE: DSP2833x Device PIE Control Register Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 |
15 | #ifndef DSP2833x_PIE_CTRL_H
16 | #define DSP2833x_PIE_CTRL_H
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | //---------------------------------------------------------------------------
23 | // PIE Control Register Bit Definitions:
24 | //
25 | // PIECTRL: Register bit definitions:
26 | struct PIECTRL_BITS { // bits description
27 | Uint16 ENPIE:1; // 0 Enable PIE block
28 | Uint16 PIEVECT:15; // 15:1 Fetched vector address
29 | };
30 |
31 | union PIECTRL_REG {
32 | Uint16 all;
33 | struct PIECTRL_BITS bit;
34 | };
35 |
36 | // PIEIER: Register bit definitions:
37 | struct PIEIER_BITS { // bits description
38 | Uint16 INTx1:1; // 0 INTx.1
39 | Uint16 INTx2:1; // 1 INTx.2
40 | Uint16 INTx3:1; // 2 INTx.3
41 | Uint16 INTx4:1; // 3 INTx.4
42 | Uint16 INTx5:1; // 4 INTx.5
43 | Uint16 INTx6:1; // 5 INTx.6
44 | Uint16 INTx7:1; // 6 INTx.7
45 | Uint16 INTx8:1; // 7 INTx.8
46 | Uint16 rsvd:8; // 15:8 reserved
47 | };
48 |
49 | union PIEIER_REG {
50 | Uint16 all;
51 | struct PIEIER_BITS bit;
52 | };
53 |
54 | // PIEIFR: Register bit definitions:
55 | struct PIEIFR_BITS { // bits description
56 | Uint16 INTx1:1; // 0 INTx.1
57 | Uint16 INTx2:1; // 1 INTx.2
58 | Uint16 INTx3:1; // 2 INTx.3
59 | Uint16 INTx4:1; // 3 INTx.4
60 | Uint16 INTx5:1; // 4 INTx.5
61 | Uint16 INTx6:1; // 5 INTx.6
62 | Uint16 INTx7:1; // 6 INTx.7
63 | Uint16 INTx8:1; // 7 INTx.8
64 | Uint16 rsvd:8; // 15:8 reserved
65 | };
66 |
67 | union PIEIFR_REG {
68 | Uint16 all;
69 | struct PIEIFR_BITS bit;
70 | };
71 |
72 | // PIEACK: Register bit definitions:
73 | struct PIEACK_BITS { // bits description
74 | Uint16 ACK1:1; // 0 Acknowledge PIE interrupt group 1
75 | Uint16 ACK2:1; // 1 Acknowledge PIE interrupt group 2
76 | Uint16 ACK3:1; // 2 Acknowledge PIE interrupt group 3
77 | Uint16 ACK4:1; // 3 Acknowledge PIE interrupt group 4
78 | Uint16 ACK5:1; // 4 Acknowledge PIE interrupt group 5
79 | Uint16 ACK6:1; // 5 Acknowledge PIE interrupt group 6
80 | Uint16 ACK7:1; // 6 Acknowledge PIE interrupt group 7
81 | Uint16 ACK8:1; // 7 Acknowledge PIE interrupt group 8
82 | Uint16 ACK9:1; // 8 Acknowledge PIE interrupt group 9
83 | Uint16 ACK10:1; // 9 Acknowledge PIE interrupt group 10
84 | Uint16 ACK11:1; // 10 Acknowledge PIE interrupt group 11
85 | Uint16 ACK12:1; // 11 Acknowledge PIE interrupt group 12
86 | Uint16 rsvd:4; // 15:12 reserved
87 | };
88 |
89 | union PIEACK_REG {
90 | Uint16 all;
91 | struct PIEACK_BITS bit;
92 | };
93 |
94 | //---------------------------------------------------------------------------
95 | // PIE Control Register File:
96 | //
97 | struct PIE_CTRL_REGS {
98 | union PIECTRL_REG PIECTRL; // PIE control register
99 | union PIEACK_REG PIEACK; // PIE acknowledge
100 | union PIEIER_REG PIEIER1; // PIE int1 IER register
101 | union PIEIFR_REG PIEIFR1; // PIE int1 IFR register
102 | union PIEIER_REG PIEIER2; // PIE INT2 IER register
103 | union PIEIFR_REG PIEIFR2; // PIE INT2 IFR register
104 | union PIEIER_REG PIEIER3; // PIE INT3 IER register
105 | union PIEIFR_REG PIEIFR3; // PIE INT3 IFR register
106 | union PIEIER_REG PIEIER4; // PIE INT4 IER register
107 | union PIEIFR_REG PIEIFR4; // PIE INT4 IFR register
108 | union PIEIER_REG PIEIER5; // PIE INT5 IER register
109 | union PIEIFR_REG PIEIFR5; // PIE INT5 IFR register
110 | union PIEIER_REG PIEIER6; // PIE INT6 IER register
111 | union PIEIFR_REG PIEIFR6; // PIE INT6 IFR register
112 | union PIEIER_REG PIEIER7; // PIE INT7 IER register
113 | union PIEIFR_REG PIEIFR7; // PIE INT7 IFR register
114 | union PIEIER_REG PIEIER8; // PIE INT8 IER register
115 | union PIEIFR_REG PIEIFR8; // PIE INT8 IFR register
116 | union PIEIER_REG PIEIER9; // PIE INT9 IER register
117 | union PIEIFR_REG PIEIFR9; // PIE INT9 IFR register
118 | union PIEIER_REG PIEIER10; // PIE int10 IER register
119 | union PIEIFR_REG PIEIFR10; // PIE int10 IFR register
120 | union PIEIER_REG PIEIER11; // PIE int11 IER register
121 | union PIEIFR_REG PIEIFR11; // PIE int11 IFR register
122 | union PIEIER_REG PIEIER12; // PIE int12 IER register
123 | union PIEIFR_REG PIEIFR12; // PIE int12 IFR register
124 | };
125 |
126 | #define PIEACK_GROUP1 0x0001
127 | #define PIEACK_GROUP2 0x0002
128 | #define PIEACK_GROUP3 0x0004
129 | #define PIEACK_GROUP4 0x0008
130 | #define PIEACK_GROUP5 0x0010
131 | #define PIEACK_GROUP6 0x0020
132 | #define PIEACK_GROUP7 0x0040
133 | #define PIEACK_GROUP8 0x0080
134 | #define PIEACK_GROUP9 0x0100
135 | #define PIEACK_GROUP10 0x0200
136 | #define PIEACK_GROUP11 0x0400
137 | #define PIEACK_GROUP12 0x0800
138 |
139 | //---------------------------------------------------------------------------
140 | // PIE Control Registers External References & Function Declarations:
141 | //
142 | extern volatile struct PIE_CTRL_REGS PieCtrlRegs;
143 |
144 |
145 | #ifdef __cplusplus
146 | }
147 | #endif /* extern "C" */
148 |
149 | #endif // end of DSP2833x_PIE_CTRL_H definition
150 |
151 | //===========================================================================
152 | // End of file.
153 | //===========================================================================
154 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_PieVect.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/2 $
2 | // Checkin $Date: March 16, 2007 09:00:21 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_PieVect.h
6 | //
7 | // TITLE: DSP2833x Devices PIE Vector Table Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_PIE_VECT_H
15 | #define DSP2833x_PIE_VECT_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 |
23 | //---------------------------------------------------------------------------
24 | // PIE Interrupt Vector Table Definition:
25 | //
26 | // Create a user type called PINT (pointer to interrupt):
27 |
28 | typedef interrupt void(*PINT)(void);
29 |
30 | // Define Vector Table:
31 | struct PIE_VECT_TABLE {
32 |
33 | // Reset is never fetched from this table.
34 | // It will always be fetched from 0x3FFFC0 in
35 | // boot ROM
36 |
37 | PINT PIE1_RESERVED;
38 | PINT PIE2_RESERVED;
39 | PINT PIE3_RESERVED;
40 | PINT PIE4_RESERVED;
41 | PINT PIE5_RESERVED;
42 | PINT PIE6_RESERVED;
43 | PINT PIE7_RESERVED;
44 | PINT PIE8_RESERVED;
45 | PINT PIE9_RESERVED;
46 | PINT PIE10_RESERVED;
47 | PINT PIE11_RESERVED;
48 | PINT PIE12_RESERVED;
49 | PINT PIE13_RESERVED;
50 |
51 | // Non-Peripheral Interrupts:
52 | PINT XINT13; // XINT13 / CPU-Timer1
53 | PINT TINT2; // CPU-Timer2
54 | PINT DATALOG; // Datalogging interrupt
55 | PINT RTOSINT; // RTOS interrupt
56 | PINT EMUINT; // Emulation interrupt
57 | PINT XNMI; // Non-maskable interrupt
58 | PINT ILLEGAL; // Illegal operation TRAP
59 | PINT USER1; // User Defined trap 1
60 | PINT USER2; // User Defined trap 2
61 | PINT USER3; // User Defined trap 3
62 | PINT USER4; // User Defined trap 4
63 | PINT USER5; // User Defined trap 5
64 | PINT USER6; // User Defined trap 6
65 | PINT USER7; // User Defined trap 7
66 | PINT USER8; // User Defined trap 8
67 | PINT USER9; // User Defined trap 9
68 | PINT USER10; // User Defined trap 10
69 | PINT USER11; // User Defined trap 11
70 | PINT USER12; // User Defined trap 12
71 |
72 | // Group 1 PIE Peripheral Vectors:
73 | PINT SEQ1INT;
74 | PINT SEQ2INT;
75 | PINT rsvd1_3;
76 | PINT XINT1;
77 | PINT XINT2;
78 | PINT ADCINT; // ADC
79 | PINT TINT0; // Timer 0
80 | PINT WAKEINT; // WD
81 |
82 | // Group 2 PIE Peripheral Vectors:
83 | PINT EPWM1_TZINT; // EPWM-1
84 | PINT EPWM2_TZINT; // EPWM-2
85 | PINT EPWM3_TZINT; // EPWM-3
86 | PINT EPWM4_TZINT; // EPWM-4
87 | PINT EPWM5_TZINT; // EPWM-5
88 | PINT EPWM6_TZINT; // EPWM-6
89 | PINT rsvd2_7;
90 | PINT rsvd2_8;
91 |
92 | // Group 3 PIE Peripheral Vectors:
93 | PINT EPWM1_INT; // EPWM-1
94 | PINT EPWM2_INT; // EPWM-2
95 | PINT EPWM3_INT; // EPWM-3
96 | PINT EPWM4_INT; // EPWM-4
97 | PINT EPWM5_INT; // EPWM-5
98 | PINT EPWM6_INT; // EPWM-6
99 | PINT rsvd3_7;
100 | PINT rsvd3_8;
101 |
102 | // Group 4 PIE Peripheral Vectors:
103 | PINT ECAP1_INT; // ECAP-1
104 | PINT ECAP2_INT; // ECAP-2
105 | PINT ECAP3_INT; // ECAP-3
106 | PINT ECAP4_INT; // ECAP-4
107 | PINT ECAP5_INT; // ECAP-5
108 | PINT ECAP6_INT; // ECAP-6
109 | PINT rsvd4_7;
110 | PINT rsvd4_8;
111 |
112 | // Group 5 PIE Peripheral Vectors:
113 | PINT EQEP1_INT; // EQEP-1
114 | PINT EQEP2_INT; // EQEP-2
115 | PINT rsvd5_3;
116 | PINT rsvd5_4;
117 | PINT rsvd5_5;
118 | PINT rsvd5_6;
119 | PINT rsvd5_7;
120 | PINT rsvd5_8;
121 |
122 | // Group 6 PIE Peripheral Vectors:
123 | PINT SPIRXINTA; // SPI-A
124 | PINT SPITXINTA; // SPI-A
125 | PINT MRINTB; // McBSP-B
126 | PINT MXINTB; // McBSP-B
127 | PINT MRINTA; // McBSP-A
128 | PINT MXINTA; // McBSP-A
129 | PINT rsvd6_7;
130 | PINT rsvd6_8;
131 |
132 | // Group 7 PIE Peripheral Vectors:
133 | PINT DINTCH1; // DMA
134 | PINT DINTCH2; // DMA
135 | PINT DINTCH3; // DMA
136 | PINT DINTCH4; // DMA
137 | PINT DINTCH5; // DMA
138 | PINT DINTCH6; // DMA
139 | PINT rsvd7_7;
140 | PINT rsvd7_8;
141 |
142 | // Group 8 PIE Peripheral Vectors:
143 | PINT I2CINT1A; // I2C-A
144 | PINT I2CINT2A; // I2C-A
145 | PINT rsvd8_3;
146 | PINT rsvd8_4;
147 | PINT SCIRXINTC; // SCI-C
148 | PINT SCITXINTC; // SCI-C
149 | PINT rsvd8_7;
150 | PINT rsvd8_8;
151 |
152 | // Group 9 PIE Peripheral Vectors:
153 | PINT SCIRXINTA; // SCI-A
154 | PINT SCITXINTA; // SCI-A
155 | PINT SCIRXINTB; // SCI-B
156 | PINT SCITXINTB; // SCI-B
157 | PINT ECAN0INTA; // eCAN-A
158 | PINT ECAN1INTA; // eCAN-A
159 | PINT ECAN0INTB; // eCAN-B
160 | PINT ECAN1INTB; // eCAN-B
161 |
162 | // Group 10 PIE Peripheral Vectors:
163 | PINT rsvd10_1;
164 | PINT rsvd10_2;
165 | PINT rsvd10_3;
166 | PINT rsvd10_4;
167 | PINT rsvd10_5;
168 | PINT rsvd10_6;
169 | PINT rsvd10_7;
170 | PINT rsvd10_8;
171 |
172 | // Group 11 PIE Peripheral Vectors:
173 | PINT rsvd11_1;
174 | PINT rsvd11_2;
175 | PINT rsvd11_3;
176 | PINT rsvd11_4;
177 | PINT rsvd11_5;
178 | PINT rsvd11_6;
179 | PINT rsvd11_7;
180 | PINT rsvd11_8;
181 |
182 | // Group 12 PIE Peripheral Vectors:
183 | PINT XINT3; // External interrupt
184 | PINT XINT4;
185 | PINT XINT5;
186 | PINT XINT6;
187 | PINT XINT7;
188 | PINT rsvd12_6;
189 | PINT LVF; // Latched overflow
190 | PINT LUF; // Latched underflow
191 | };
192 |
193 | //---------------------------------------------------------------------------
194 | // PIE Interrupt Vector Table External References & Function Declarations:
195 | //
196 | extern struct PIE_VECT_TABLE PieVectTable;
197 |
198 |
199 | #ifdef __cplusplus
200 | }
201 | #endif /* extern "C" */
202 |
203 | #endif // end of DSP2833x_PIE_VECT_H definition
204 |
205 | //===========================================================================
206 | // End of file.
207 | //===========================================================================
208 |
209 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_Spi.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/3 $
2 | // Checkin $Date: April 17, 2008 11:08:27 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Spi.h
6 | //
7 | // TITLE: DSP2833x Device SPI Register Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_SPI_H
15 | #define DSP2833x_SPI_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 |
23 | //---------------------------------------------------------------------------
24 | // SPI Individual Register Bit Definitions:
25 | //
26 | // SPI FIFO Transmit register bit definitions:
27 | struct SPIFFTX_BITS { // bit description
28 | Uint16 TXFFIL:5; // 4:0 Interrupt level
29 | Uint16 TXFFIENA:1; // 5 Interrupt enable
30 | Uint16 TXFFINTCLR:1; // 6 Clear INT flag
31 | Uint16 TXFFINT:1; // 7 INT flag
32 | Uint16 TXFFST:5; // 12:8 FIFO status
33 | Uint16 TXFIFO:1; // 13 FIFO reset
34 | Uint16 SPIFFENA:1; // 14 Enhancement enable
35 | Uint16 SPIRST:1; // 15 Reset SPI
36 | };
37 |
38 | union SPIFFTX_REG {
39 | Uint16 all;
40 | struct SPIFFTX_BITS bit;
41 | };
42 |
43 | //--------------------------------------------
44 | // SPI FIFO recieve register bit definitions:
45 | //
46 | //
47 | struct SPIFFRX_BITS { // bits description
48 | Uint16 RXFFIL:5; // 4:0 Interrupt level
49 | Uint16 RXFFIENA:1; // 5 Interrupt enable
50 | Uint16 RXFFINTCLR:1; // 6 Clear INT flag
51 | Uint16 RXFFINT:1; // 7 INT flag
52 | Uint16 RXFFST:5; // 12:8 FIFO status
53 | Uint16 RXFIFORESET:1; // 13 FIFO reset
54 | Uint16 RXFFOVFCLR:1; // 14 Clear overflow
55 | Uint16 RXFFOVF:1; // 15 FIFO overflow
56 |
57 | };
58 |
59 | union SPIFFRX_REG {
60 | Uint16 all;
61 | struct SPIFFRX_BITS bit;
62 | };
63 |
64 | //--------------------------------------------
65 | // SPI FIFO control register bit definitions:
66 | //
67 | //
68 | struct SPIFFCT_BITS { // bits description
69 | Uint16 TXDLY:8; // 7:0 FIFO transmit delay
70 | Uint16 rsvd:8; // 15:8 reserved
71 | };
72 |
73 | union SPIFFCT_REG {
74 | Uint16 all;
75 | struct SPIFFCT_BITS bit;
76 | };
77 |
78 | //---------------------------------------------
79 | // SPI configuration register bit definitions:
80 | //
81 | //
82 | struct SPICCR_BITS { // bits description
83 | Uint16 SPICHAR:4; // 3:0 Character length control
84 | Uint16 SPILBK:1; // 4 Loop-back enable/disable
85 | Uint16 rsvd1:1; // 5 reserved
86 | Uint16 CLKPOLARITY:1; // 6 Clock polarity
87 | Uint16 SPISWRESET:1; // 7 SPI SW Reset
88 | Uint16 rsvd2:8; // 15:8 reserved
89 | };
90 |
91 | union SPICCR_REG {
92 | Uint16 all;
93 | struct SPICCR_BITS bit;
94 | };
95 |
96 | //-------------------------------------------------
97 | // SPI operation control register bit definitions:
98 | //
99 | //
100 | struct SPICTL_BITS { // bits description
101 | Uint16 SPIINTENA:1; // 0 Interrupt enable
102 | Uint16 TALK:1; // 1 Master/Slave transmit enable
103 | Uint16 MASTER_SLAVE:1; // 2 Network control mode
104 | Uint16 CLK_PHASE:1; // 3 Clock phase select
105 | Uint16 OVERRUNINTENA:1; // 4 Overrun interrupt enable
106 | Uint16 rsvd:11; // 15:5 reserved
107 | };
108 |
109 | union SPICTL_REG {
110 | Uint16 all;
111 | struct SPICTL_BITS bit;
112 | };
113 |
114 | //--------------------------------------
115 | // SPI status register bit definitions:
116 | //
117 | //
118 | struct SPISTS_BITS { // bits description
119 | Uint16 rsvd1:5; // 4:0 reserved
120 | Uint16 BUFFULL_FLAG:1; // 5 SPI transmit buffer full flag
121 | Uint16 INT_FLAG:1; // 6 SPI interrupt flag
122 | Uint16 OVERRUN_FLAG:1; // 7 SPI reciever overrun flag
123 | Uint16 rsvd2:8; // 15:8 reserved
124 | };
125 |
126 | union SPISTS_REG {
127 | Uint16 all;
128 | struct SPISTS_BITS bit;
129 | };
130 |
131 | //------------------------------------------------
132 | // SPI priority control register bit definitions:
133 | //
134 | //
135 | struct SPIPRI_BITS { // bits description
136 | Uint16 rsvd1:4; // 3:0 reserved
137 | Uint16 FREE:1; // 4 Free emulation mode control
138 | Uint16 SOFT:1; // 5 Soft emulation mode control
139 | Uint16 rsvd2:1; // 6 reserved
140 | Uint16 rsvd3:9; // 15:7 reserved
141 | };
142 |
143 | union SPIPRI_REG {
144 | Uint16 all;
145 | struct SPIPRI_BITS bit;
146 | };
147 |
148 | //---------------------------------------------------------------------------
149 | // SPI Register File:
150 | //
151 | struct SPI_REGS {
152 | union SPICCR_REG SPICCR; // Configuration register
153 | union SPICTL_REG SPICTL; // Operation control register
154 | union SPISTS_REG SPISTS; // Status register
155 | Uint16 rsvd1; // reserved
156 | Uint16 SPIBRR; // Baud Rate
157 | Uint16 rsvd2; // reserved
158 | Uint16 SPIRXEMU; // Emulation buffer
159 | Uint16 SPIRXBUF; // Serial input buffer
160 | Uint16 SPITXBUF; // Serial output buffer
161 | Uint16 SPIDAT; // Serial data
162 | union SPIFFTX_REG SPIFFTX; // FIFO transmit register
163 | union SPIFFRX_REG SPIFFRX; // FIFO recieve register
164 | union SPIFFCT_REG SPIFFCT; // FIFO control register
165 | Uint16 rsvd3[2]; // reserved
166 | union SPIPRI_REG SPIPRI; // FIFO Priority control
167 | };
168 |
169 | //---------------------------------------------------------------------------
170 | // SPI External References & Function Declarations:
171 | //
172 | extern volatile struct SPI_REGS SpiaRegs;
173 |
174 | #ifdef __cplusplus
175 | }
176 | #endif /* extern "C" */
177 |
178 | #endif // end of DSP2833x_SPI_H definition
179 |
180 | //===========================================================================
181 | // End of file.
182 | //===========================================================================
183 |
184 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_XIntrupt.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/1 $
2 | // Checkin $Date: August 18, 2006 13:52:39 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_XIntrupt.h
6 | //
7 | // TITLE: DSP2833x Device External Interrupt Register Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_XINTRUPT_H
15 | #define DSP2833x_XINTRUPT_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 | //---------------------------------------------------------------------------
23 |
24 | struct XINTCR_BITS {
25 | Uint16 ENABLE:1; // 0 enable/disable
26 | Uint16 rsvd1:1; // 1 reserved
27 | Uint16 POLARITY:2; // 3:2 pos/neg, both triggered
28 | Uint16 rsvd2:12; //15:4 reserved
29 | };
30 |
31 | union XINTCR_REG {
32 | Uint16 all;
33 | struct XINTCR_BITS bit;
34 | };
35 |
36 | struct XNMICR_BITS {
37 | Uint16 ENABLE:1; // 0 enable/disable
38 | Uint16 SELECT:1; // 1 Timer 1 or XNMI connected to int13
39 | Uint16 POLARITY:2; // 3:2 pos/neg, or both triggered
40 | Uint16 rsvd2:12; // 15:4 reserved
41 | };
42 |
43 | union XNMICR_REG {
44 | Uint16 all;
45 | struct XNMICR_BITS bit;
46 | };
47 |
48 |
49 |
50 |
51 | //---------------------------------------------------------------------------
52 | // External Interrupt Register File:
53 | //
54 | struct XINTRUPT_REGS {
55 | union XINTCR_REG XINT1CR;
56 | union XINTCR_REG XINT2CR;
57 | union XINTCR_REG XINT3CR;
58 | union XINTCR_REG XINT4CR;
59 | union XINTCR_REG XINT5CR;
60 | union XINTCR_REG XINT6CR;
61 | union XINTCR_REG XINT7CR;
62 | union XNMICR_REG XNMICR;
63 | Uint16 XINT1CTR;
64 | Uint16 XINT2CTR;
65 | Uint16 rsvd[5];
66 | Uint16 XNMICTR;
67 | };
68 |
69 | //---------------------------------------------------------------------------
70 | // External Interrupt References & Function Declarations:
71 | //
72 | extern volatile struct XINTRUPT_REGS XIntruptRegs;
73 |
74 | #ifdef __cplusplus
75 | }
76 | #endif /* extern "C" */
77 |
78 | #endif // end of DSP2833x_XINTF_H definition
79 |
80 | //===========================================================================
81 | // End of file.
82 | //===========================================================================
83 |
84 |
--------------------------------------------------------------------------------
/contrib/DSP2833x/DSP2833x_headers/include/DSP2833x_Xintf.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/4 $
2 | // Checkin $Date: July 27, 2009 13:57:25 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_Xintf.h
6 | //
7 | // TITLE: DSP2833x Device External Interface Register Definitions.
8 | //
9 | //###########################################################################
10 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
11 | // $Release Date: August 4, 2009 $
12 | //###########################################################################
13 |
14 | #ifndef DSP2833x_XINTF_H
15 | #define DSP2833x_XINTF_H
16 |
17 |
18 | #ifdef __cplusplus
19 | extern "C" {
20 | #endif
21 |
22 |
23 | // XINTF timing register bit definitions:
24 | struct XTIMING_BITS { // bits description
25 | Uint16 XWRTRAIL:2; // 1:0 Write access trail timing
26 | Uint16 XWRACTIVE:3; // 4:2 Write access active timing
27 | Uint16 XWRLEAD:2; // 6:5 Write access lead timing
28 | Uint16 XRDTRAIL:2; // 8:7 Read access trail timing
29 | Uint16 XRDACTIVE:3; // 11:9 Read access active timing
30 | Uint16 XRDLEAD:2; // 13:12 Read access lead timing
31 | Uint16 USEREADY:1; // 14 Extend access using HW waitstates
32 | Uint16 READYMODE:1; // 15 Ready mode
33 | Uint16 XSIZE:2; // 17:16 XINTF bus width - must be written as 11b
34 | Uint16 rsvd1:4; // 21:18 reserved
35 | Uint16 X2TIMING:1; // 22 Double lead/active/trail timing
36 | Uint16 rsvd3:9; // 31:23 reserved
37 | };
38 |
39 | union XTIMING_REG {
40 | Uint32 all;
41 | struct XTIMING_BITS bit;
42 | };
43 |
44 | // XINTF control register bit definitions:
45 | struct XINTCNF2_BITS { // bits description
46 | Uint16 WRBUFF:2; // 1:0 Write buffer depth
47 | Uint16 CLKMODE:1; // 2 Ratio for XCLKOUT with respect to XTIMCLK
48 | Uint16 CLKOFF:1; // 3 Disable XCLKOUT
49 | Uint16 rsvd1:2; // 5:4 reserved
50 | Uint16 WLEVEL:2; // 7:6 Current level of the write buffer
51 | Uint16 rsvd2:1; // 8 reserved
52 | Uint16 HOLD:1; // 9 Hold enable/disable
53 | Uint16 HOLDS:1; // 10 Current state of HOLDn input
54 | Uint16 HOLDAS:1; // 11 Current state of HOLDAn output
55 | Uint16 rsvd3:4; // 15:12 reserved
56 | Uint16 XTIMCLK:3; // 18:16 Ratio for XTIMCLK
57 | Uint16 rsvd4:13; // 31:19 reserved
58 | };
59 |
60 | union XINTCNF2_REG {
61 | Uint32 all;
62 | struct XINTCNF2_BITS bit;
63 | };
64 |
65 | // XINTF bank switching register bit definitions:
66 | struct XBANK_BITS { // bits description
67 | Uint16 BANK:3; // 2:0 Zone for which banking is enabled
68 | Uint16 BCYC:3; // 5:3 XTIMCLK cycles to add
69 | Uint16 rsvd:10; // 15:6 reserved
70 | };
71 |
72 | union XBANK_REG {
73 | Uint16 all;
74 | struct XBANK_BITS bit;
75 | };
76 |
77 | struct XRESET_BITS {
78 | Uint16 XHARDRESET:1;
79 | Uint16 rsvd1:15;
80 | };
81 |
82 | union XRESET_REG {
83 | Uint16 all;
84 | struct XRESET_BITS bit;
85 | };
86 |
87 |
88 | //---------------------------------------------------------------------------
89 | // XINTF Register File:
90 | //
91 | struct XINTF_REGS {
92 | union XTIMING_REG XTIMING0;
93 | Uint32 rsvd1[5];
94 | union XTIMING_REG XTIMING6;
95 | union XTIMING_REG XTIMING7;
96 | Uint32 rsvd2[2];
97 | union XINTCNF2_REG XINTCNF2;
98 | Uint32 rsvd3;
99 | union XBANK_REG XBANK;
100 | Uint16 rsvd4;
101 | Uint16 XREVISION;
102 | Uint16 rsvd5[2];
103 | union XRESET_REG XRESET;
104 | };
105 |
106 | //---------------------------------------------------------------------------
107 | // XINTF External References & Function Declarations:
108 | //
109 | extern volatile struct XINTF_REGS XintfRegs;
110 |
111 |
112 | #ifdef __cplusplus
113 | }
114 | #endif /* extern "C" */
115 |
116 | #endif // end of DSP2833x_XINTF_H definition
117 |
118 | //===========================================================================
119 | // No more.
120 | //===========================================================================
121 |
--------------------------------------------------------------------------------
/contrib/dspProfiling/Profiling.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Profiling.c
3 | *
4 | * Created on: 24/09/2014
5 | * Author: bds
6 | */
7 | #include "Profiling.h"
8 | #include "DSP2833x_Device.h"
9 | #include "DSP2833x_CpuTimers.h"
10 |
11 | unsigned long long profiling_getElapsedCycles(ProfilingTool * self) {
12 | unsigned long endTimeLow, endTimeHigh;
13 | long long result;
14 |
15 | endTimeHigh = CpuTimer2Regs.TIM.half.LSW;
16 | endTimeLow = CpuTimer2Regs.TIM.half.MSW;
17 |
18 | result = ( (self->startTimeHigh - endTimeHigh) + self->startTimeHigh*(self->startTimeLow - endTimeLow) );
19 |
20 | return result;
21 | }
22 |
23 | void profiling_start(ProfilingTool * self) {
24 | // Save the start values from TIM register
25 | // It will be used to calculate the elapsed cycles at getElapsedCycles()
26 | self->startTimeHigh = CpuTimer2Regs.TIM.half.LSW;
27 | self->startTimeLow = CpuTimer2Regs.TIM.half.MSW;
28 |
29 | // Start Debug Timer
30 | CpuTimer2Regs.TCR.bit.TSS = 0;
31 | }
32 |
33 | void profiling_registerStep(ProfilingTool * self, unsigned short stepIdx) {
34 | // Stop timer
35 | CpuTimer2Regs.TCR.bit.TSS = 1;
36 |
37 | // Regiser cycle count
38 | self->cycleMeasuresSteps[self->timeMeasuresIndex][stepIdx] = self->getElapsedCycles(self);
39 |
40 | // Reset timer
41 | CpuTimer2Regs.TCR.bit.TRB = 1;
42 |
43 | // Restart timer
44 | CpuTimer2Regs.TCR.bit.TSS = 0;
45 | }
46 |
47 | void profiling_stop(ProfilingTool * self) {
48 | unsigned short idx, stepIdx;
49 |
50 | // Stop Debug Timer
51 | CpuTimer2Regs.TCR.bit.TSS = 1;
52 |
53 | // Reset timer
54 | CpuTimer2Regs.TCR.bit.TRB = 1;
55 |
56 | // Convert STEP cycles to uSeconds and register total utilized time & cycles
57 | #if PROFILING_EXTRA_CALCS
58 | for(idx = 0; idx < PROFILING_SIZE_TIME_MEASURES; idx++){
59 | for(stepIdx = 0; stepIdx < PROFILING_SIZE_MAX_STEPS; stepIdx++){
60 | self->timeMeasuresSteps[idx][stepIdx] = (self->cycleMeasuresSteps[idx][stepIdx] / PROFILING_DSPCLOCK);
61 | }
62 | }
63 | #endif
64 |
65 | // Reset timeMeasuresIndex
66 | if (self->timeMeasuresIndex >= PROFILING_SIZE_TIME_MEASURES){
67 | self->timeMeasuresIndex = 0;
68 |
69 | // Break the code to show the results (if PROFILING_BREAK_MAX_MEASURES is set)
70 | if(PROFILING_BREAK_MAX_MEASURES) ESTOP0;
71 | } else {
72 | self->timeMeasuresIndex++;
73 | }
74 | }
75 |
76 | ProfilingTool construct_ProfilingTool(){
77 | ProfilingTool profiling;
78 | unsigned short idx, stepIdx;
79 |
80 | profiling.startTimeHigh = 0;
81 | profiling.startTimeLow = 0;
82 |
83 | profiling.timeMeasuresIndex = 0;
84 |
85 | profiling.start = profiling_start;
86 | profiling.registerStep = profiling_registerStep;
87 | profiling.stop = profiling_stop;
88 | profiling.getElapsedCycles = profiling_getElapsedCycles;
89 |
90 | // Reset timeMeasures arrays
91 | for(idx = 0; idx < PROFILING_SIZE_TIME_MEASURES; idx++){
92 | for(stepIdx = 0; stepIdx < PROFILING_SIZE_MAX_STEPS; stepIdx++) {
93 | profiling.timeMeasuresSteps[idx][stepIdx] = 0;
94 | profiling.cycleMeasuresSteps[idx][stepIdx] = 0;
95 | }
96 | }
97 |
98 | // Init CPU Timer 2
99 | // Initialize address pointers to respective timer registers:
100 | CpuTimer2.RegsAddr = &CpuTimer2Regs;
101 | // Initialize timer period to maximum:
102 | CpuTimer2Regs.PRD.all = 0xFFFFFFFF;
103 | // Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
104 | CpuTimer2Regs.TPR.all = 0;
105 | CpuTimer2Regs.TPRH.all = 0;
106 | // Make sure timer is stopped:
107 | CpuTimer2Regs.TCR.bit.TSS = 1;
108 | // Reload all counter register with period value:
109 | CpuTimer2Regs.TCR.bit.TRB = 1;
110 | // Reset interrupt counters:
111 | CpuTimer2.InterruptCount = 0;
112 |
113 | ConfigCpuTimer(&CpuTimer2, PROFILING_DSPCLOCK, 1000000);
114 | CpuTimer2Regs.TCR.bit.TRB = 1;
115 |
116 | return profiling;
117 | }
118 |
--------------------------------------------------------------------------------
/contrib/dspProfiling/Profiling.h:
--------------------------------------------------------------------------------
1 | #ifndef PROFILING_H_
2 | #define PROFILING_H_
3 |
4 | #define PROFILING_SIZE_TIME_MEASURES 5
5 | #define PROFILING_SIZE_MAX_STEPS 5
6 | #define PROFILING_DSPCLOCK 150U // 150 Mhz
7 | #define PROFILING_EXTRA_CALCS 1 // true
8 | #define PROFILING_BREAK_MAX_MEASURES 1 // true
9 |
10 | typedef struct ProfilingTool ProfilingTool;
11 |
12 | struct ProfilingTool {
13 | unsigned long long cycleMeasuresSteps[PROFILING_SIZE_TIME_MEASURES][PROFILING_SIZE_MAX_STEPS];
14 | long double timeMeasuresSteps[PROFILING_SIZE_TIME_MEASURES][PROFILING_SIZE_MAX_STEPS];
15 |
16 | unsigned long startTimeHigh;
17 | unsigned long startTimeLow;
18 |
19 | unsigned int timeMeasuresIndex;
20 |
21 | void (*start)(ProfilingTool * self);
22 | void (*registerStep)(ProfilingTool * self, unsigned short idx);
23 | void (*stop)(ProfilingTool * self);
24 | unsigned long long (*getElapsedCycles)(ProfilingTool * self);
25 | };
26 |
27 | inline unsigned long long profiling_getElapsedCycles(ProfilingTool * self);
28 | inline void profiling_start(ProfilingTool * self);
29 | inline void profiling_stop(ProfilingTool * self);
30 | inline void profiling_registerStep(ProfilingTool * self, unsigned short idx);
31 | ProfilingTool construct_ProfilingTool();
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/contrib/modbus/Crc.c:
--------------------------------------------------------------------------------
1 | #include "Crc.h"
2 |
3 | unsigned int generateCrc(unsigned int * buf, int len, bool swap)
4 | {
5 | unsigned int crc = 0xFFFF;
6 | unsigned int temp = 0;
7 | int pos = 0;
8 | int i = 0;
9 |
10 | for (pos = 0; pos < len; pos++) {
11 | // XOR byte into least sig. byte of crc
12 | crc ^= (unsigned int) buf[pos];
13 |
14 | // Loop over each bit
15 | for (i = 8; i != 0; i--) {
16 |
17 | // If the LSB is set
18 | if ((crc & 0x0001) != 0) {
19 | crc >>= 1; // Shift right and XOR 0xA001
20 | crc ^= 0xA001;
21 | }
22 | else
23 | crc >>= 1; // Just shift right
24 | }
25 | }
26 |
27 | // Swype bytes
28 | if(swap == true) {
29 | temp = crc;
30 | crc = (crc & 0xFF00) >> 8;
31 | crc = ( (temp & 0x00FF) << 8 ) | crc;
32 | }
33 |
34 | return crc;
35 | }
36 |
--------------------------------------------------------------------------------
/contrib/modbus/ModbusData.c:
--------------------------------------------------------------------------------
1 | #include "ModbusDefinitions.h"
2 | #include "ModbusData.h"
3 | #include "Log.h"
4 |
5 | // Clears all data of Modbus Data
6 | void data_clear(ModbusData *self){
7 | MB_DATA_RESPONSE_DEBUG();
8 | self->slaveAddress = 0;
9 | self->functionCode = 0;
10 | self->size = 0;
11 | self->contentIdx = 0;
12 | self->crc = 0;
13 | }
14 |
15 | // Return a string with the data that will be transmited
16 | // Mostly used for the last step of process: MB_TRANSMIT (serial TX)
17 | Uint16 * data_getTransmitString(ModbusData *self){
18 | static Uint16 string[MB_BUFFER_SIZE] = {0};
19 | Uint16 stringIndex = 0;
20 | Uint16 contentIterator;
21 |
22 | string[stringIndex++] = self->slaveAddress;
23 | string[stringIndex++] = self->functionCode;
24 |
25 | // Loop throught the "general content" part of data frame
26 | for(contentIterator = 0; contentIterator < (self->size - MB_SIZE_COMMON_DATA); contentIterator++){
27 | string[stringIndex++] = (self->content[contentIterator]) & 0x00FF;
28 | }
29 |
30 | string[stringIndex++] = (self->crc & 0xFF00) >> 8;
31 | string[stringIndex++] = self->crc & 0x00FF;
32 |
33 | MB_DATA_RESPONSE_DEBUG();
34 | return string;
35 | }
36 |
37 | // Return a string with the data that will be transmited (but without CRC)
38 | // Mostly used to create the CRC (get this string and the size of it and then generate the CRC)
39 | Uint16 * data_getTransmitStringWithoutCRC(ModbusData *self){
40 | static Uint16 string[MB_BUFFER_SIZE] = {0};
41 | Uint16 stringIndex = 0;
42 | Uint16 contentIterator;
43 |
44 | string[stringIndex++] = self->slaveAddress;
45 | string[stringIndex++] = self->functionCode;
46 |
47 | // Loop throught the "general content" part of data frame
48 | for(contentIterator = 0; contentIterator < (self->size - MB_SIZE_COMMON_DATA); contentIterator++){
49 | string[stringIndex++] = (self->content[contentIterator]);
50 | }
51 |
52 | MB_DATA_RESPONSE_DEBUG();
53 | return string;
54 | }
55 |
56 | ModbusData construct_ModbusData(){
57 | ModbusData modbusData;
58 |
59 | modbusData.slaveAddress = 0;
60 | modbusData.functionCode = 0;
61 | modbusData.contentIdx = 0;
62 | modbusData.crc = 0;
63 | modbusData.size = 0;
64 |
65 | modbusData.clear = data_clear;
66 | modbusData.getTransmitString = data_getTransmitString;
67 | modbusData.getTransmitStringWithoutCRC = data_getTransmitStringWithoutCRC;
68 |
69 | MB_DATA_RESPONSE_DEBUG();
70 |
71 | return modbusData;
72 | }
73 |
--------------------------------------------------------------------------------
/contrib/modbus/ModbusDataMap.c:
--------------------------------------------------------------------------------
1 | /*
2 | * ModbusVarMap.c
3 | *
4 | * Created on: 08/10/2014
5 | * Author: bds
6 | */
7 |
8 | #include "ModbusSettings.h"
9 | #include MB_DATA_MAP
10 | #include "Log.h"
11 |
12 | #if MB_COILS_ENABLED
13 | ModbusCoilsMap construct_ModbusCoilsMap(){
14 | ModbusCoilsMap coilsMap = {0};
15 | return coilsMap;
16 | }
17 | #endif
18 |
19 | #if MB_INPUTS_ENABLED
20 | ModbusInputsMap construct_ModbusInputsMap(){
21 | ModbusInputsMap inputsMap = {0};
22 | return inputsMap;
23 | }
24 | #endif
25 |
26 | #if MB_INPUT_REGISTERS_ENABLED
27 | ModbusInputRegistersMap construct_ModbusInputRegistersMap(){
28 | ModbusInputRegistersMap registersMap = {0};
29 | return registersMap;
30 | }
31 | #endif
32 |
33 | #if MB_HOLDING_REGISTERS_ENABLED
34 | ModbusHoldingRegistersMap construct_ModbusHoldingRegistersMap(){
35 | ModbusHoldingRegistersMap registersMap = {0};
36 | return registersMap;
37 | }
38 | #endif
39 |
--------------------------------------------------------------------------------
/contrib/modbus/include/Crc.h:
--------------------------------------------------------------------------------
1 | #ifndef CRC_UTIL_H_
2 | #define CRC_UTIL_H_
3 |
4 | #ifndef bool
5 | #define false 0
6 | #define true 1
7 | #define bool char
8 | #endif
9 |
10 | unsigned int generateCrc(unsigned int * buf, int len, bool swap);
11 |
12 | #endif /* CRC_UTIL_H_ */
13 |
14 |
--------------------------------------------------------------------------------
/contrib/modbus/include/DataTypes.h:
--------------------------------------------------------------------------------
1 | /*
2 | * DataTypes.h
3 | *
4 | * Created on: 29/10/2014
5 | * Author: bds
6 | */
7 |
8 | #ifndef DATATYPES_H_
9 | #define DATATYPES_H_
10 |
11 | #ifndef bool
12 | #define false 0
13 | #define true 1
14 | #define bool unsigned int
15 | #endif
16 |
17 | #ifndef DSP28_DATA_TYPES
18 | #define DSP28_DATA_TYPES
19 | typedef int int16;
20 | typedef long int32;
21 | typedef long long int64;
22 | typedef unsigned int Uint16;
23 | typedef unsigned long Uint32;
24 | typedef unsigned long long Uint64;
25 | typedef float float32;
26 | typedef long double float64;
27 | #endif
28 |
29 | typedef short int8;
30 | typedef unsigned short Uint8;
31 |
32 | #endif /* DATATYPES_H_ */
33 |
--------------------------------------------------------------------------------
/contrib/modbus/include/Log.h:
--------------------------------------------------------------------------------
1 | #ifndef CRC_H_
2 | #define CRC_H_
3 |
4 | #include "ModbusSettings.h"
5 |
6 | // Log tool =============================
7 | // When called it displays a message at console using Variadic feature
8 | // To disable it set DEBUG_LOG_ENABLED = 0 at Modbus.h
9 | #if DEBUG_LOG_ENABLED
10 | #include "stdio.h"
11 | #define SMART_DEBUG(fmt, ...) \
12 | do { fprintf(stderr, "%s():%d called! " fmt "\n", __FUNCTION__, \
13 | __LINE__); } \
14 | while (0)
15 | // Original expression (found at web but don't work in some cases)
16 | //do { fprintf(stderr, "%s:%d:%s() ## " fmt "\n", __FILE__, \
17 | // __LINE__, __FUNCTION__, __VA_ARGS__); } while (0)
18 | #else
19 | #define SMART_DEBUG(nonVariadicVar)
20 | #endif
21 |
22 |
23 | // Different logs =======================
24 | // Each file has it's specific Log debug. If you want to enable only some
25 | // logs, go to Modbus.h and modify the macros XXXXX_DEBUG_ENABLED
26 |
27 | #if MB_DATA_REQUEST_DEBUG_ENABLED && DEBUG_LOG_ENABLED
28 | #define MB_DATA_REQUEST_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
29 | #else
30 | #define MB_DATA_REQUEST_DEBUG(nonVariadicVar)
31 | #endif
32 |
33 | #if MB_DATA_RESPONSE_DEBUG_ENABLED && DEBUG_LOG_ENABLED
34 | #define MB_DATA_RESPONSE_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
35 | #else
36 | #define MB_DATA_RESPONSE_DEBUG(nonVariadicVar)
37 | #endif
38 |
39 | #if MB_DATA_HANDLER_DEBUG_ENABLED && DEBUG_LOG_ENABLED
40 | #define MB_DATA_HANDLER_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
41 | #else
42 | #define MB_DATA_HANDLER_DEBUG(nonVariadicVar)
43 | #endif
44 |
45 | #if SERIAL_DEBUG_ENABLED && DEBUG_LOG_ENABLED
46 | #define SERIAL_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
47 | #else
48 | #define SERIAL_DEBUG(nonVariadicVar)
49 | #endif
50 |
51 | #if MB_MASTER_DEBUG_ENABLED && DEBUG_LOG_ENABLED
52 | #define MB_MASTER_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
53 | #else
54 | #define MB_MASTER_DEBUG(nonVariadicVar)
55 | #endif
56 |
57 | #if MB_SLAVE_DEBUG_ENABLED && DEBUG_LOG_ENABLED
58 | #define MB_SLAVE_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
59 | #else
60 | #define MB_SLAVE_DEBUG(nonVariadicVar)
61 | #endif
62 |
63 | #if MB_VAR_MAP_DEBUG && DEBUG_LOG_ENABLED
64 | #define MB_VAR_MAP_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
65 | #else
66 | #define MB_VAR_MAP_DEBUG(nonVariadicVar)
67 | #endif
68 |
69 | #if TIMER_DEBUG_ENABLED && DEBUG_LOG_ENABLED
70 | #define TIMER_DEBUG(fmt, ...) SMART_DEBUG(fmt, __VA_ARGS__)
71 | #else
72 | #define TIMER_DEBUG(nonVariadicVar)
73 | #endif
74 |
75 | #endif /* CRC_H_ */
76 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusData.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUS_DATA_RESPONSE_H_
2 | #define MODBUS_DATA_RESPONSE_H_
3 |
4 | #include "ModbusSettings.h"
5 |
6 | typedef struct ModbusData ModbusData;
7 |
8 | struct ModbusData {
9 | Uint16 slaveAddress;
10 | Uint16 functionCode;
11 | Uint16 contentIdx;
12 | Uint16 content[MB_BUFFER_SIZE];
13 | Uint16 size;
14 | Uint16 crc;
15 |
16 | void (*clear)(ModbusData *self);
17 | Uint16 * (*getTransmitString)(ModbusData *self);
18 | Uint16 * (*getTransmitStringWithoutCRC)(ModbusData *self);
19 | };
20 |
21 | inline void data_clear(ModbusData *self);
22 | inline Uint16 * data_getTransmitString(ModbusData *self);
23 | inline Uint16 * data_getTransmitStringWithoutCRC(ModbusData *self);
24 | ModbusData construct_ModbusData();
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusDataHandler.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUS_IO_H_
2 | #define MODBUS_IO_H_
3 |
4 | #include "ModbusDefinitions.h"
5 | #include "ModbusSettings.h"
6 | #include MB_DATA_MAP
7 |
8 | typedef struct ModbusDataHandler ModbusDataHandler;
9 | typedef struct ModbusSlave ModbusSlave;
10 |
11 | struct ModbusDataHandler {
12 | void (*readDigitalData)(ModbusSlave *slave, ModbusFunctionCode funcCode);
13 | void (*readAnalogData)(ModbusSlave *slave, ModbusFunctionCode funcCode);
14 |
15 | void (*presetSingleRegister)(ModbusSlave *slave);
16 | void (*forceSingleCoil)(ModbusSlave *slave);
17 | void (*presetMultipleRegisters)(ModbusSlave *slave);
18 | void (*forceMultipleCoils)(ModbusSlave *slave);
19 |
20 | bool (*checkException)(ModbusSlave *slave, Uint16 firstAddr, Uint16 totalData, Uint16 sizeOfMap);
21 | void (*exception)(ModbusSlave *slave, ModbusError exceptionCode);
22 | };
23 |
24 | inline void datahandler_readDigitalData(ModbusSlave *slave, ModbusFunctionCode funcCode);
25 | inline void datahandler_readAnalogData(ModbusSlave *slave, ModbusFunctionCode funcCode);
26 | inline void datahandler_presetSingleRegister(ModbusSlave *slave);
27 | inline void datahandler_forceSingleCoil(ModbusSlave *slave);
28 | inline void datahandler_presetMultipleRegisters(ModbusSlave *slave);
29 | inline void datahandler_forceMultipleCoils(ModbusSlave *slave);
30 | inline bool datahandler_checkException(ModbusSlave *slave, Uint16 firstAddr, Uint16 totalData, Uint16 sizeOfMap);
31 | inline void datahandler_exception(ModbusSlave *slave, ModbusError exceptionCode);
32 | ModbusDataHandler construct_ModbusDataHandler();
33 |
34 | #endif
35 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusDataMap.h:
--------------------------------------------------------------------------------
1 | /*
2 | * ModbusVarMap.h
3 | *
4 | * Created on: 08/10/2014
5 | * Author: bds
6 | */
7 |
8 | #ifndef MODBUSVARMAP_H_
9 | #define MODBUSVARMAP_H_
10 |
11 | #include "ModbusSettings.h"
12 |
13 | #if MB_COILS_ENABLED
14 | typedef struct ModbusCoilsMap ModbusCoilsMap;
15 | struct ModbusCoilsMap{
16 | Uint8 dummy0;
17 | Uint8 dummy1;
18 | Uint8 dummy2;
19 | Uint8 dummy3;
20 | Uint8 dummy4;
21 | Uint8 dummy5;
22 | Uint8 dummy6;
23 | Uint8 dummy7;
24 | Uint8 dummy8;
25 | Uint8 dummy9;
26 | Uint8 dummy10;
27 | Uint8 dummy11;
28 | Uint8 dummy12;
29 | Uint8 dummy13;
30 | Uint8 dummy14;
31 | Uint8 dummy15;
32 | Uint8 dummy16;
33 | Uint8 dummy17;
34 | Uint8 dummy18;
35 | };
36 |
37 | ModbusCoilsMap construct_ModbusCoilsMap();
38 | #endif
39 |
40 | #if MB_INPUTS_ENABLED
41 | typedef struct ModbusInputsMap ModbusInputsMap;
42 | struct ModbusInputsMap{
43 | Uint8 dummy0;
44 | Uint8 dummy1;
45 | Uint8 dummy2;
46 | Uint8 dummy3;
47 | Uint8 dummy4;
48 | Uint8 dummy5;
49 | Uint8 dummy6;
50 | Uint8 dummy7;
51 | Uint8 dummy8;
52 | Uint8 dummy9;
53 | Uint8 dummy10;
54 | Uint8 dummy11;
55 | Uint8 dummy12;
56 | Uint8 dummy13;
57 | Uint8 dummy14;
58 | Uint8 dummy15;
59 | Uint8 dummy16;
60 | Uint8 dummy17;
61 | Uint8 dummy18;
62 | };
63 |
64 | ModbusInputsMap construct_ModbusInputsMap();
65 | #endif
66 |
67 | #if MB_HOLDING_REGISTERS_ENABLED
68 | typedef struct ModbusHoldingRegistersMap ModbusHoldingRegistersMap;
69 | struct ModbusHoldingRegistersMap {
70 | float32 dummy0;
71 | float32 dummy1;
72 | float32 dummy2;
73 | float32 dummy3;
74 | float32 dummy4;
75 | };
76 |
77 | ModbusHoldingRegistersMap construct_ModbusHoldingRegistersMap();
78 | #endif
79 |
80 | #if MB_INPUT_REGISTERS_ENABLED
81 | typedef struct ModbusInputRegistersMap ModbusInputRegistersMap;
82 | struct ModbusInputRegistersMap {
83 | float32 dummy0;
84 | float32 dummy1;
85 | float32 dummy2;
86 | float32 dummy3;
87 | float32 dummy4;
88 | };
89 |
90 | ModbusInputRegistersMap construct_ModbusInputRegistersMap();
91 | #endif
92 |
93 | #endif /* MODBUSVARMAP_H_ */
94 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusDataMapTests.h:
--------------------------------------------------------------------------------
1 | /*
2 | * ModbusVarMap.h
3 | *
4 | * Created on: 08/10/2014
5 | * Author: bds
6 | */
7 |
8 | #ifndef MODBUSVARMAP_H_
9 | #define MODBUSVARMAP_H_
10 |
11 | #include "ModbusSettings.h"
12 |
13 | #if MB_COILS_ENABLED
14 | typedef struct ModbusCoilsMap ModbusCoilsMap;
15 | struct ModbusCoilsMap{
16 | Uint8 dummy1;
17 | Uint8 dummy2;
18 | Uint8 dummy3;
19 | Uint8 dummy4;
20 | Uint8 dummy5;
21 | Uint8 dummy6;
22 | Uint8 dummy7;
23 | Uint8 dummy8;
24 | Uint8 dummy9;
25 | Uint8 dummy10;
26 | Uint8 dummy11;
27 | Uint8 dummy12;
28 | Uint8 dummy13;
29 | Uint8 dummy14;
30 | Uint8 dummy15;
31 | Uint8 dummy16;
32 | Uint8 dummy17;
33 | Uint8 dummy18;
34 | Uint8 dummy19;
35 | Uint8 dummy20;
36 | Uint8 dummy21;
37 | Uint8 dummy22;
38 | Uint8 dummy23;
39 | Uint8 dummy24;
40 | Uint8 dummy25;
41 | Uint8 dummy26;
42 | Uint8 dummy27;
43 | Uint8 dummy28;
44 | Uint8 dummy29;
45 | Uint8 dummy30;
46 | Uint8 dummy31;
47 | Uint8 dummy32;
48 | Uint8 dummy33;
49 | Uint8 dummy34;
50 | Uint8 dummy35;
51 | Uint8 dummy36;
52 | Uint8 dummy37;
53 | Uint8 dummy38;
54 | Uint8 dummy39;
55 | Uint8 dummy40;
56 | Uint8 dummy41;
57 | };
58 |
59 | ModbusCoilsMap construct_ModbusCoilsMap();
60 | #endif
61 |
62 | #if MB_INPUTS_ENABLED
63 | typedef struct ModbusInputsMap ModbusInputsMap;
64 | struct ModbusInputsMap{
65 | Uint8 dummy1;
66 | Uint8 dummy2;
67 | Uint8 dummy3;
68 | Uint8 dummy4;
69 | Uint8 dummy5;
70 | Uint8 dummy6;
71 | Uint8 dummy7;
72 | Uint8 dummy8;
73 | Uint8 dummy9;
74 | Uint8 dummy10;
75 | Uint8 dummy11;
76 | Uint8 dummy12;
77 | Uint8 dummy13;
78 | Uint8 dummy14;
79 | Uint8 dummy15;
80 | Uint8 dummy16;
81 | Uint8 dummy17;
82 | Uint8 dummy18;
83 | Uint8 dummy19;
84 | Uint8 dummy20;
85 | Uint8 dummy21;
86 | Uint8 dummy22;
87 | Uint8 dummy23;
88 | Uint8 dummy24;
89 | Uint8 dummy25;
90 | Uint8 dummy26;
91 | Uint8 dummy27;
92 | Uint8 dummy28;
93 | Uint8 dummy29;
94 | };
95 |
96 | ModbusInputsMap construct_ModbusInputsMap();
97 | #endif
98 |
99 | #if MB_HOLDING_REGISTERS_ENABLED
100 | typedef struct ModbusHoldingRegistersMap ModbusHoldingRegistersMap;
101 | struct ModbusHoldingRegistersMap {
102 | Uint16 dummy1;
103 | Uint16 dummy2;
104 | Uint16 dummy3;
105 | Uint16 dummy4;
106 | Uint16 dummy5;
107 | Uint16 dummy6;
108 | Uint16 dummy7;
109 | Uint16 dummy8;
110 | Uint16 dummy9;
111 | Uint16 dummy10;
112 | Uint16 dummy11;
113 | Uint16 dummy12;
114 | Uint16 dummy13;
115 | Uint16 dummy14;
116 | Uint16 dummy15;
117 | Uint16 dummy16;
118 | Uint16 dummy17;
119 | Uint16 dummy18;
120 | Uint16 dummy19;
121 | Uint16 dummy20;
122 | Uint16 dummy21;
123 | Uint16 dummy22;
124 | Uint16 dummy23;
125 | Uint16 dummy24;
126 | Uint16 dummy25;
127 | Uint16 dummy26;
128 | Uint16 dummy27;
129 | Uint16 dummy28;
130 | // Uint16 dummy29;
131 | };
132 |
133 | ModbusHoldingRegistersMap construct_ModbusHoldingRegistersMap();
134 | #endif
135 |
136 | #if MB_INPUT_REGISTERS_ENABLED
137 | typedef struct ModbusInputRegistersMap ModbusInputRegistersMap;
138 | struct ModbusInputRegistersMap {
139 | Uint16 dummy1;
140 | Uint16 dummy2;
141 | Uint16 dummy3;
142 | Uint16 dummy4;
143 | Uint16 dummy5;
144 | Uint16 dummy6;
145 | Uint16 dummy7;
146 | Uint16 dummy8;
147 | Uint16 dummy9;
148 | Uint16 dummy10;
149 | Uint16 dummy11;
150 | Uint16 dummy12;
151 | Uint16 dummy13;
152 | Uint16 dummy14;
153 | Uint16 dummy15;
154 | Uint16 dummy16;
155 | Uint16 dummy17;
156 | Uint16 dummy18;
157 | Uint16 dummy19;
158 | Uint16 dummy20;
159 | Uint16 dummy21;
160 | Uint16 dummy22;
161 | Uint16 dummy23;
162 | Uint16 dummy24;
163 | Uint16 dummy25;
164 | };
165 |
166 | ModbusInputRegistersMap construct_ModbusInputRegistersMap();
167 | #endif
168 |
169 | #endif /* MODBUSVARMAP_H_ */
170 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusDefinitions.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUS_H_
2 | #define MODBUS_H_
3 |
4 | // DON'T MODIFY THE CODE BELOW!
5 |
6 | typedef enum {
7 | profiling_MB_TIMER_T35_WAIT = 0,
8 | profiling_MB_RECEIVE,
9 | profiling_MB_PROCESS,
10 | profiling_MB_TRANSMIT
11 | } ModbusProfiling;
12 |
13 | // Read codes
14 | typedef enum {
15 | MB_FUNC_READ_COIL = 1,
16 | MB_FUNC_READ_INPUT,
17 | MB_FUNC_READ_HOLDINGREGISTERS,
18 | MB_FUNC_READ_INPUTREGISTERS,
19 | MB_FUNC_FORCE_COIL,
20 | MB_FUNC_WRITE_HOLDINGREGISTER,
21 | MB_FUNC_FORCE_NCOILS = 15,
22 | MB_FUNC_WRITE_NREGISTERS = 16
23 | } ModbusFunctionCode;
24 |
25 | // State machine constants
26 | typedef enum {
27 | MB_CREATE,
28 | MB_START,
29 | MB_TIMER_T35_WAIT,
30 | MB_IDLE,
31 | MB_RECEIVE,
32 | MB_PROCESS,
33 | MB_TRANSMIT,
34 | MB_DESTROY
35 | } ModbusState;
36 |
37 | // Error codes
38 | typedef enum {
39 | MB_ERROR_ILLEGALFUNC = 1,
40 | MB_ERROR_ILLEGALADDR,
41 | MB_ERROR_ILLEGALDATA,
42 | MB_ERROR_SLVFAILURE,
43 | MB_ERROR_ACKNOWLEDGE,
44 | MB_ERROR_SLVBUSY,
45 | MB_ERROR_NEGACKNOWLEDGE,
46 | MB_ERROR_MEMPARITY,
47 | MB_ERROR_GATEWAYPATHUN
48 | } ModbusError;
49 |
50 | typedef enum {
51 | MB_READ_ADDRESS_HIGH,
52 | MB_READ_ADDRESS_LOW,
53 | MB_READ_TOTALDATA_HIGH,
54 | MB_READ_TOTALDATA_LOW
55 | } ModbusContentRequestReadIndexes;
56 |
57 |
58 | typedef enum {
59 | MB_WRITE_ADDRESS_HIGH,
60 | MB_WRITE_ADDRESS_LOW,
61 | MB_WRITE_VALUE_HIGH,
62 | MB_WRITE_VALUE_LOW
63 | } ModbusContentRequestWriteIndexes;
64 |
65 | typedef enum {
66 | MB_WRITE_N_ADDRESS_HIGH,
67 | MB_WRITE_N_ADDRESS_LOW,
68 | MB_WRITE_N_QUANTITY_HIGH,
69 | MB_WRITE_N_QUANTITY_LOW,
70 | MB_WRITE_N_BYTES,
71 | MB_WRITE_N_VALUES_START_HIGH,
72 | MB_WRITE_N_VALUES_START_LOW
73 | } ModbusContentRequestWriteNIndexes;
74 |
75 | // Size constants (with CRC) ==============================
76 |
77 | #define MB_DATA_MAX_SIZE 0x270E
78 | #define MB_DATA_MAX_REQUEST_SIZE 0x7D
79 |
80 | #define MB_SIZE_COMMON_DATA 4 // Slave address (1 byte) + Function Code (1 byte) + CRC (2 bytes)
81 | #define MB_SIZE_CONTENT_NORMAL 4
82 | // Response sizes
83 | #define MB_SIZE_RESP_READ_MINIMUM MB_SIZE_COMMON_DATA + 1 // MB_SIZE_COMMON_DATA + Number of requested registers (1 byte)
84 | #define MB_SIZE_RESP_WRITE MB_SIZE_COMMON_DATA + MB_SIZE_CONTENT_NORMAL // MB_SIZE_COMMON_DATA + Data address (2 bytes) + Value writen (2 bytes)
85 | #define MB_SIZE_RESP_WRITE_N MB_SIZE_COMMON_DATA + MB_SIZE_CONTENT_NORMAL // MB_SIZE_COMMON_DATA + Data address (2 bytes) + Number of writen values (2 bytes)
86 | #define MB_SIZE_RESP_EXCEPTION MB_SIZE_COMMON_DATA + 1
87 | // Request sizes
88 | #define MB_SIZE_REQ_WRITE_N_MINIMUM MB_SIZE_COMMON_DATA + 5 // Data addr (2 bytes) + Number of registers (2 bytes) + Following data (1 byte)
89 | #define MB_SIZE_REQ_READ MB_SIZE_COMMON_DATA + MB_SIZE_CONTENT_NORMAL
90 | #define MB_SIZE_REQ_WRITE MB_SIZE_COMMON_DATA + MB_SIZE_CONTENT_NORMAL
91 |
92 | // Size constants (without CRC) ===========================
93 |
94 | #define MB_SIZE_COMMON_DATA_WITHOUTCRC MB_SIZE_COMMON_DATA - 2
95 | // Response sizes
96 | #define MB_SIZE_RESP_READ_MINIMUM_WITHOUTCRC MB_SIZE_RESP_READ_MINIMUM - 2
97 | #define MB_SIZE_RESP_WRITE_WITHOUTCRC MB_SIZE_RESP_WRITE - 2
98 | #define MB_SIZE_RESP_WRITE_N_WITHOUTCRC MB_SIZE_RESP_WRITE_N - 2
99 | #define MB_SIZE_RESP_EXCEPTION_WITHOUTCRC MB_SIZE_RESP_EXCEPTION - 2
100 | // Request sizes
101 | #define MB_SIZE_REQ_WRITE_N_MINIMUM_WITHOUTCRC MB_SIZE_REQ_WRITE_N_MINIMUM - 2
102 | #define MB_SIZE_REQ_READ_WITHOUTCRC MB_SIZE_REQ_READ - 2
103 | #define MB_SIZE_REQ_WRITE_WITHOUTCRC MB_SIZE_REQ_WRITE - 2
104 |
105 | #endif /* MODBUS_H_ */
106 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusSettings.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUSSETTINGS_H_
2 | #define MODBUSSETTINGS_H_
3 |
4 | #include "DataTypes.h"
5 | #include "ModbusDefinitions.h"
6 | #include "Serial.h"
7 |
8 | // Modbus settings ========================================
9 | #define MB_SLAVE_ID 0x01
10 | #define MB_CHECKS true // ID check and CRC check (enabled by default)
11 | #define MB_BUFFER_SIZE 256 // Size of content buffer on ModbusData - Depends on the size of your memory map
12 | #define MB_BROADCAST_EXTRA_ID 255 // Broadcast exclusive ID (it will work with Broadcast ID 0 too)
13 | #define MB_LIBMODBUS_TESTS false
14 |
15 | // Memory map settings ====================================
16 | #if MB_LIBMODBUS_TESTS == false
17 | #define MB_DATA_MAP "ModbusDataMap.h"
18 | #define MB_32_BITS_REGISTERS true
19 | #define MB_COILS_ENABLED 1
20 | #define MB_INPUTS_ENABLED 0
21 | #define MB_HOLDING_REGISTERS_ENABLED 1
22 | #define MB_INPUT_REGISTERS_ENABLED 0
23 | #else
24 | #define MB_DATA_MAP "ModbusDataMapTests.h" // Use it when you run libmodbus tests
25 | #define MB_32_BITS_REGISTERS false // Use it when you run libmodbus tests
26 | #define MB_COILS_ENABLED 1
27 | #define MB_INPUTS_ENABLED 1
28 | #define MB_HOLDING_REGISTERS_ENABLED 1
29 | #define MB_INPUT_REGISTERS_ENABLED 1
30 | #endif
31 |
32 | // Device settings (DSP f28335)
33 | #define CPU_FREQ 150
34 | #define LOW_SPEED_CLOCK 37500000
35 | //#define LOW_SPEED_CLOCK 15000000
36 |
37 | // Serial settings ========================================
38 | #define SERIAL_BAUDRATE 38400
39 | #define SERIAL_PARITY SERIAL_PARITY_NONE
40 | #define SERIAL_BITS_NUMBER 8
41 |
42 | #define SERIAL_START_STOP_NUMBER_BITS 2
43 | #if SERIAL_PARITY == SERIAL_PARITY_NONE
44 | #define SERIAL_PARITY_NUMBER_BITS 0
45 | #else
46 | #define SERIAL_PARITY_NUMBER_BITS 1
47 | #endif
48 |
49 | // Timer settings =========================================
50 | // Time constant
51 |
52 | // Configure the 3.5c time for timer
53 | // For baudrates higher than 19200 is recommended a fixed value
54 | #if SERIAL_BAUDRATE > 19200
55 | #define mbT35 (unsigned long) 1750
56 | #define mbT15 (unsigned long) 750
57 | #else
58 | // Sum up the bits number of a common serial frame
59 | #define SERIAL_FRAME_SIZE \
60 | SERIAL_START_STOP_NUMBER_BITS \
61 | + SERIAL_BITS_NUMBER \
62 | + SERIAL_PARITY_NUMBER_BITS
63 | #define mbT35 (unsigned long) ( (unsigned long)(SERIAL_FRAME_SIZE) * (unsigned long)(3500000 / SERIAL_BAUDRATE) )
64 | #define mbT15 (unsigned long) ( (unsigned long)(SERIAL_FRAME_SIZE) * (unsigned long)(1500000 / SERIAL_BAUDRATE) )
65 | #endif
66 |
67 | // Debug settings =========================================
68 | #define DEBUG_UTILS_PROFILING 0 // Include the necessary files to the linker!!
69 | #define DEBUG_LOG_ENABLED 0
70 |
71 | // Will be used at Log.h
72 | #define MB_DATA_REQUEST_DEBUG_ENABLED 0
73 | #define MB_DATA_RESPONSE_DEBUG_ENABLED 0
74 | #define MB_DATA_HANDLER_DEBUG_ENABLED 0
75 | #define MB_SLAVE_DEBUG_ENABLED 0
76 | #define SERIAL_DEBUG_ENABLED 0
77 | #define TIMER_DEBUG_ENABLED 0
78 |
79 | #endif /* MODBUSSETTINGS_H_ */
80 |
--------------------------------------------------------------------------------
/contrib/modbus/include/ModbusSlave.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUS_SLAVE_H_
2 | #define MODBUS_SLAVE_H_
3 |
4 | #include "ModbusDefinitions.h"
5 | #include "ModbusData.h"
6 | #include "ModbusDataHandler.h"
7 | #include MB_DATA_MAP
8 | #include "Serial.h"
9 | #include "Timer.h"
10 | #include "Crc.h"
11 |
12 | // typedef struct ModbusSlave ModbusSlave;
13 |
14 | struct ModbusSlave {
15 | ModbusState state;
16 |
17 | ModbusData dataRequest;
18 | ModbusData dataResponse;
19 |
20 | #if MB_COILS_ENABLED
21 | ModbusCoilsMap coils;
22 | #endif
23 | #if MB_INPUTS_ENABLED
24 | ModbusInputsMap inputs;
25 | #endif
26 | #if MB_HOLDING_REGISTERS_ENABLED
27 | ModbusHoldingRegistersMap holdingRegisters;
28 | #endif
29 | #if MB_INPUT_REGISTERS_ENABLED
30 | ModbusInputRegistersMap inputRegisters;
31 | #endif
32 |
33 | Serial serial;
34 | Timer timer;
35 |
36 | ModbusDataHandler dataHandler;
37 |
38 | void (*loopStates)(ModbusSlave *self);
39 | void (*create)(ModbusSlave *self);
40 | void (*start)(ModbusSlave *self);
41 | void (*timerT35Wait)(ModbusSlave *self);
42 | void (*idle)(ModbusSlave *self);
43 | void (*receive)(ModbusSlave *self);
44 | void (*process)(ModbusSlave *self);
45 | void (*transmit)(ModbusSlave *self);
46 | void (*destroy)(ModbusSlave *self);
47 |
48 | bool jumpProcessState;
49 | };
50 |
51 | void slave_loopStates(ModbusSlave *self);
52 | inline void slave_create(ModbusSlave *self);
53 | inline void slave_start(ModbusSlave *self);
54 | inline void slave_timerT35Wait(ModbusSlave *self);
55 | inline void slave_receive(ModbusSlave *self);
56 | inline void slave_process(ModbusSlave *self);
57 | inline void slave_transmit(ModbusSlave *self);
58 | inline void slave_destroy(ModbusSlave *self);
59 | ModbusSlave construct_ModbusSlave();
60 |
61 | extern ModbusSlave mb;
62 |
63 | #endif
64 |
--------------------------------------------------------------------------------
/contrib/modbus/include/Serial.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUS_SERIAL_H_
2 | #define MODBUS_SERIAL_H_
3 |
4 | #include "DataTypes.h"
5 |
6 | typedef struct Serial Serial;
7 |
8 | // Parity constants
9 | typedef enum {
10 | SERIAL_PARITY_NONE,
11 | SERIAL_PARITY_EVEN,
12 | SERIAL_PARITY_ODD
13 | } SerialParity;
14 |
15 | struct Serial {
16 | Uint16 bitsNumber;
17 | Uint16 parityType;
18 | Uint32 baudrate;
19 |
20 | Uint16 fifoWaitBuffer;
21 |
22 | void (*clear)();
23 | Uint16 (*rxBufferStatus)();
24 | void (*setSerialRxEnabled)(bool status);
25 | void (*setSerialTxEnabled)(bool status);
26 | void (*init)(Serial *self);
27 | void (*transmitData)(Uint16 * data, Uint16 size);
28 | Uint16 (*getRxBufferedWord)();
29 | bool (*getRxError)();
30 | };
31 |
32 | void serial_clear();
33 | inline Uint16 serial_rxBufferStatus();
34 | inline void serial_setSerialRxEnabled(bool status);
35 | inline void serial_setSerialTxEnabled(bool status);
36 | inline void serial_init(Serial *self);
37 | inline void serial_transmitData(Uint16 * data, Uint16 size);
38 | inline Uint16 serial_getRxBufferedWord();
39 | inline bool serial_getRxError();
40 | Serial construct_Serial();
41 |
42 | #endif
43 |
--------------------------------------------------------------------------------
/contrib/modbus/include/Timer.h:
--------------------------------------------------------------------------------
1 | #ifndef MODBUS_TIMER_H_
2 | #define MODBUS_TIMER_H_
3 |
4 | #include "DataTypes.h"
5 |
6 | typedef struct Timer Timer;
7 |
8 | struct Timer {
9 | Uint32 reloadTime;
10 | bool timerEnabled;
11 |
12 | void (*resetTimer)();
13 | bool (*expiredTimer)(Timer *self);
14 | void (*setTimerReloadPeriod)(Timer *self, Uint32 time);
15 | void (*init)(Timer *self, Uint32 time);
16 | void (*stop)();
17 | void (*start)();
18 | };
19 |
20 | inline void timer_resetTimer();
21 | inline bool timer_expiredTimer(Timer *self);
22 | inline void timer_setTimerReloadPeriod(Timer *self, Uint32 time);
23 | inline void timer_init(Timer *self, Uint32 time);
24 | inline void timer_stop();
25 | inline void timer_start();
26 |
27 | Timer construct_Timer();
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/contrib/modbus/plataform/DSP2833x/Serial.c:
--------------------------------------------------------------------------------
1 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
2 | #include "Serial.h"
3 | #include "Log.h"
4 | #include "ModbusSettings.h"
5 |
6 | // Clear flags of overflow
7 | void serial_clear(){
8 | static unsigned short i, destroyFifo;
9 |
10 | SERIAL_DEBUG();
11 |
12 | // Reset Serial in case of error
13 | if(SciaRegs.SCIRXST.bit.RXERROR == true){
14 | SciaRegs.SCICTL1.bit.SWRESET=0;
15 | }
16 |
17 | // Clears FIFO buffer (if there is any data)
18 | for (i = SciaRegs.SCIFFRX.bit.RXFFST; i > 0; i--)
19 | destroyFifo = SciaRegs.SCIRXBUF.all;
20 |
21 | // Reset FIFO
22 | SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
23 | SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
24 |
25 | SciaRegs.SCICTL1.bit.SWRESET=1;
26 |
27 | }
28 |
29 | // Get how much data is at the RX FIFO Buffer
30 | Uint16 serial_rxBufferStatus(){
31 | return SciaRegs.SCIFFRX.bit.RXFFST;
32 | }
33 |
34 | // Enable or disable RX (receiver)
35 | void serial_setSerialRxEnabled(bool status){
36 | SERIAL_DEBUG();
37 | SciaRegs.SCICTL1.bit.RXENA = status;
38 | }
39 |
40 | // Enable or disable TX (trasmiter)
41 | void serial_setSerialTxEnabled(bool status){
42 | SERIAL_DEBUG();
43 | SciaRegs.SCICTL1.bit.TXENA = status;
44 |
45 | }
46 |
47 | // Initialize Serial (actually SCIA)
48 | void serial_init(Serial *self){
49 | Uint32 baudrate;
50 |
51 | // START: GOT FROM InitScia() FUNCTION (TEXAS FILES) ////////////////////////////////////////
52 | EALLOW;
53 |
54 | /* Enable internal pull-up for the selected pins */
55 | // Pull-ups can be enabled or disabled disabled by the user.
56 | // This will enable the pullups for the specified pins.
57 | GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pull-up for GPIO28 (SCIRXDA)
58 | GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pull-up for GPIO29 (SCITXDA)
59 |
60 | /* Set qualification for selected pins to asynch only */
61 | // Inputs are synchronized to SYSCLKOUT by default.
62 | // This will select asynch (no qualification) for the selected pins.
63 | GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input GPIO28 (SCIRXDA)
64 |
65 | /* Configure SCI-A pins using GPIO regs*/
66 | // This specifies which of the possible GPIO pins will be SCI functional pins.
67 | GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // Configure GPIO28 for SCIRXDA operation
68 | GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // Configure GPIO29 for SCITXDA operation
69 |
70 | EDIS;
71 | // END: GOT FROM InitScia() FUNCTION (TEXAS FILES) ////////////////////////////////////////
72 | // Number of bytes
73 |
74 | switch(self->bitsNumber) {
75 | case 8:
76 | SciaRegs.SCICCR.bit.SCICHAR = 0x7;
77 | break;
78 | case 7:
79 | SciaRegs.SCICCR.bit.SCICHAR = 0x6;
80 | break;
81 | default:
82 | SciaRegs.SCICCR.bit.SCICHAR = 0x7;
83 | }
84 |
85 | // Parity settings
86 | switch(self->parityType){
87 | case SERIAL_PARITY_EVEN:
88 | SciaRegs.SCICCR.bit.PARITYENA = 1;
89 | SciaRegs.SCICCR.bit.PARITY = 1;
90 | break;
91 | case SERIAL_PARITY_ODD:
92 | SciaRegs.SCICCR.bit.PARITYENA = 1;
93 | SciaRegs.SCICCR.bit.PARITY = 0;
94 | break;
95 | case SERIAL_PARITY_NONE:
96 | SciaRegs.SCICCR.bit.PARITYENA = 0;
97 | break;
98 | default:
99 | SciaRegs.SCICCR.bit.PARITYENA = 0;
100 | }
101 |
102 | // Baud rate settings - Automatic depending on self->baudrate
103 | // baudrate = (Uint32) (SysCtrlRegs.LOSPCP.bit.LSPCLK / (self->baudrate*8) - 1);
104 | baudrate = (Uint32) (LOW_SPEED_CLOCK / (self->baudrate*8) - 1);
105 |
106 | // Configure the High and Low baud rate registers
107 | SciaRegs.SCIHBAUD = (baudrate & 0xFF00) >> 8;
108 | SciaRegs.SCILBAUD = (baudrate & 0x00FF);
109 |
110 | // Enables TX and RX Interrupts
111 | SciaRegs.SCICTL2.bit.TXINTENA = 0;
112 | SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
113 | SciaRegs.SCICTL2.bit.RXBKINTENA = 0;
114 | SciaRegs.SCIFFRX.bit.RXFFIENA = 0;
115 |
116 | // FIFO TX configurations
117 | SciaRegs.SCIFFTX.bit.TXFFIL = 1; // Interrupt level
118 | SciaRegs.SCIFFTX.bit.SCIFFENA = 1; // Enables FIFO
119 | SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1; // Clear interrupt flag
120 |
121 | // FIFO: RX configurations
122 | SciaRegs.SCIFFRX.bit.RXFFIL = 1; // Interrupt level
123 | SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear interrupt flag
124 | SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear overflow flag
125 |
126 | // FIFO: Control configurations
127 | SciaRegs.SCIFFCT.all=0x00;
128 |
129 | // Enable RX and TX and reset the serial
130 | SciaRegs.SCICTL1.bit.RXENA = 1;
131 | SciaRegs.SCICTL1.bit.TXENA = 1;
132 | SciaRegs.SCICTL1.bit.SWRESET = 1;
133 |
134 | // FIFO: Reset
135 | SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
136 | SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
137 | SciaRegs.SCIFFTX.bit.SCIRST = 0;
138 | SciaRegs.SCIFFTX.bit.SCIRST = 1;
139 |
140 | SERIAL_DEBUG();
141 | }
142 |
143 | // Transmit variable data based on passed size
144 | void serial_transmitData(Uint16 * data, Uint16 size){
145 | static unsigned short i = 0;
146 | SERIAL_DEBUG();
147 |
148 | for (i = 0; i < size; i++){
149 | SciaRegs.SCITXBUF= data[i];
150 |
151 | if(i%4 == 0){
152 | while (SciaRegs.SCICTL2.bit.TXEMPTY != true) ;
153 | }
154 | }
155 |
156 | // If you want to wait until the TX buffer is empty, uncomment line below
157 | // while (SciaRegs.SCICTL2.bit.TXEMPTY != true) ;
158 | }
159 |
160 | // Read data from buffer (byte per byte)
161 | Uint16 serial_getRxBufferedWord(){
162 | SERIAL_DEBUG();
163 |
164 | // TODO: check if it is needed
165 | while (SciaRegs.SCIRXST.bit.RXRDY) ;
166 |
167 | return SciaRegs.SCIRXBUF.all;
168 | }
169 |
170 | bool serial_getRxError(){
171 | SERIAL_DEBUG();
172 |
173 | return SciaRegs.SCIRXST.bit.RXERROR;
174 | }
175 |
176 | // Construct the Serial Module
177 | Serial construct_Serial(){
178 | Serial serial;
179 |
180 | serial.clear = serial_clear;
181 | serial.rxBufferStatus = serial_rxBufferStatus;
182 | serial.setSerialRxEnabled = serial_setSerialRxEnabled;
183 | serial.setSerialTxEnabled = serial_setSerialTxEnabled;
184 | serial.init = serial_init;
185 | serial.transmitData = serial_transmitData;
186 | serial.getRxBufferedWord = serial_getRxBufferedWord;
187 | serial.getRxError = serial_getRxError;
188 |
189 | serial.fifoWaitBuffer = 0;
190 |
191 | SERIAL_DEBUG();
192 |
193 | return serial;
194 | }
195 |
--------------------------------------------------------------------------------
/contrib/modbus/plataform/DSP2833x/Timer.c:
--------------------------------------------------------------------------------
1 | #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
2 | #include "DSP2833x_CpuTimers.h"
3 | #include "Timer.h"
4 | #include "Log.h"
5 | #include "ModbusSettings.h"
6 |
7 | struct CPUTIMER_VARS CpuTimer0;
8 |
9 | void timer_resetTimer(){
10 | CpuTimer0Regs.TCR.bit.TRB = 1;
11 | TIMER_DEBUG();
12 | }
13 |
14 | bool timer_expiredTimer(Timer *self){
15 | Uint32 timerZeroed = CpuTimer0Regs.TCR.bit.TIF;
16 | TIMER_DEBUG();
17 |
18 | if (timerZeroed == true) {
19 | return true;
20 | }
21 | else {
22 | return false;
23 | }
24 | }
25 |
26 | void timer_setTimerReloadPeriod(Timer *self, Uint32 time){
27 | TIMER_DEBUG();
28 |
29 | self->stop();
30 | self->reloadTime = time;
31 |
32 | CpuTimer0.CPUFreqInMHz = CPU_FREQ;
33 | CpuTimer0.PeriodInUSec = time;
34 | CpuTimer0.RegsAddr->PRD.all = (long) time * CPU_FREQ;
35 | }
36 |
37 |
38 | void timer_init(Timer *self, Uint32 time){
39 | // START: GOT FROM TEXAS FILES //////////////////////////////////////
40 | // CPU Timer 0
41 | // Initialize address pointers to respective timer registers:
42 | CpuTimer0.RegsAddr = &CpuTimer0Regs;
43 | // Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
44 | CpuTimer0Regs.TPR.all = 0;
45 | CpuTimer0Regs.TPRH.all = 0;
46 | // Make sure timer is stopped:
47 | CpuTimer0Regs.TCR.bit.TSS = 1;
48 | // Reload all counter register with period value:
49 | CpuTimer0Regs.TCR.bit.TRB = 1;
50 | // Reset interrupt counters:
51 | CpuTimer0.InterruptCount = 0;
52 | // END: GOT FROM TEXAS FILES ////////////////////////////////////////
53 |
54 | // Config the timer reload period
55 | self->reloadTime = time;
56 | CpuTimer0.CPUFreqInMHz = CPU_FREQ;
57 | CpuTimer0.PeriodInUSec = time;
58 | CpuTimer0Regs.PRD.all = (long) time * CPU_FREQ;
59 |
60 | // Run mode settings
61 | CpuTimer0Regs.TCR.bit.SOFT = 1;
62 | CpuTimer0Regs.TCR.bit.FREE = 1; // Timer Free Run
63 |
64 | // If needed, you can set interruptions and other things here
65 | // CpuTimer0.RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
66 |
67 | TIMER_DEBUG();
68 | }
69 |
70 | void timer_stop(){
71 | CpuTimer0Regs.TCR.bit.TSS = 1;
72 | TIMER_DEBUG();
73 | }
74 |
75 | void timer_start(){
76 | CpuTimer0Regs.TCR.bit.TSS = 0;
77 | TIMER_DEBUG();
78 | }
79 |
80 | Timer construct_Timer(){
81 | Timer timer;
82 |
83 | timer.timerEnabled = false;
84 | timer.reloadTime = 0;
85 |
86 | timer.resetTimer = timer_resetTimer;
87 | timer.expiredTimer = timer_expiredTimer;
88 | timer.setTimerReloadPeriod = timer_setTimerReloadPeriod;
89 | timer.init = timer_init;
90 | timer.stop = timer_stop;
91 | timer.start = timer_start;
92 |
93 | TIMER_DEBUG();
94 |
95 | return timer;
96 | }
97 |
--------------------------------------------------------------------------------
/contrib/modbus/plataform/DSP2833x/include/DSP2833x_CpuTimers.h:
--------------------------------------------------------------------------------
1 | // TI File $Revision: /main/4 $
2 | // Checkin $Date: March 20, 2007 15:33:42 $
3 | //###########################################################################
4 | //
5 | // FILE: DSP2833x_CpuTimers.h
6 | //
7 | // TITLE: DSP2833x CPU 32-bit Timers Register Definitions.
8 | //
9 | // NOTES: CpuTimer1 and CpuTimer2 are reserved for use with DSP BIOS and
10 | // other realtime operating systems.
11 | //
12 | // Do not use these two timers in your application if you ever plan
13 | // on integrating DSP-BIOS or another realtime OS.
14 | //
15 | // For this reason, comment out the code to manipulate these two timers
16 | // if using DSP-BIOS or another realtime OS.
17 | //
18 | //###########################################################################
19 | // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
20 | // $Release Date: August 4, 2009 $
21 | //###########################################################################
22 |
23 | #ifndef DSP2833x_CPU_TIMERS_H
24 | #define DSP2833x_CPU_TIMERS_H
25 |
26 | #ifdef __cplusplus
27 | extern "C" {
28 | #endif
29 |
30 | //---------------------------------------------------------------------------
31 | // CPU Timer Register Bit Definitions:
32 | //
33 | //
34 | // TCR: Control register bit definitions:
35 | struct TCR_BITS { // bits description
36 | Uint16 rsvd1:4; // 3:0 reserved
37 | Uint16 TSS:1; // 4 Timer Start/Stop
38 | Uint16 TRB:1; // 5 Timer reload
39 | Uint16 rsvd2:4; // 9:6 reserved
40 | Uint16 SOFT:1; // 10 Emulation modes
41 | Uint16 FREE:1; // 11
42 | Uint16 rsvd3:2; // 12:13 reserved
43 | Uint16 TIE:1; // 14 Output enable
44 | Uint16 TIF:1; // 15 Interrupt flag
45 | };
46 |
47 | union TCR_REG {
48 | Uint16 all;
49 | struct TCR_BITS bit;
50 | };
51 |
52 | // TPR: Pre-scale low bit definitions:
53 | struct TPR_BITS { // bits description
54 | Uint16 TDDR:8; // 7:0 Divide-down low
55 | Uint16 PSC:8; // 15:8 Prescale counter low
56 | };
57 |
58 | union TPR_REG {
59 | Uint16 all;
60 | struct TPR_BITS bit;
61 | };
62 |
63 | // TPRH: Pre-scale high bit definitions:
64 | struct TPRH_BITS { // bits description
65 | Uint16 TDDRH:8; // 7:0 Divide-down high
66 | Uint16 PSCH:8; // 15:8 Prescale counter high
67 | };
68 |
69 | union TPRH_REG {
70 | Uint16 all;
71 | struct TPRH_BITS bit;
72 | };
73 |
74 | // TIM, TIMH: Timer register definitions:
75 | struct TIM_REG {
76 | Uint16 LSW;
77 | Uint16 MSW;
78 | };
79 |
80 | union TIM_GROUP {
81 | Uint32 all;
82 | struct TIM_REG half;
83 | };
84 |
85 | // PRD, PRDH: Period register definitions:
86 | struct PRD_REG {
87 | Uint16 LSW;
88 | Uint16 MSW;
89 | };
90 |
91 | union PRD_GROUP {
92 | Uint32 all;
93 | struct PRD_REG half;
94 | };
95 |
96 | //---------------------------------------------------------------------------
97 | // CPU Timer Register File:
98 | //
99 | struct CPUTIMER_REGS {
100 | union TIM_GROUP TIM; // Timer counter register
101 | union PRD_GROUP PRD; // Period register
102 | union TCR_REG TCR; // Timer control register
103 | Uint16 rsvd1; // reserved
104 | union TPR_REG TPR; // Timer pre-scale low
105 | union TPRH_REG TPRH; // Timer pre-scale high
106 | };
107 |
108 | //---------------------------------------------------------------------------
109 | // CPU Timer Support Variables:
110 | //
111 | struct CPUTIMER_VARS {
112 | volatile struct CPUTIMER_REGS *RegsAddr;
113 | Uint32 InterruptCount;
114 | float CPUFreqInMHz;
115 | float PeriodInUSec;
116 | };
117 |
118 | //---------------------------------------------------------------------------
119 | // Function prototypes and external definitions:
120 | //
121 | void InitCpuTimers(void);
122 | void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);
123 |
124 | extern volatile struct CPUTIMER_REGS CpuTimer0Regs;
125 | extern struct CPUTIMER_VARS CpuTimer0;
126 |
127 | // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS. Comment out CpuTimer1 and CpuTimer2 if using DSP BIOS or other RTOS
128 | extern volatile struct CPUTIMER_REGS CpuTimer1Regs;
129 | extern volatile struct CPUTIMER_REGS CpuTimer2Regs;
130 |
131 | extern struct CPUTIMER_VARS CpuTimer1;
132 | extern struct CPUTIMER_VARS CpuTimer2;
133 |
134 | //---------------------------------------------------------------------------
135 | // Usefull Timer Operations:
136 | //
137 | // Start Timer:
138 | #define StartCpuTimer0() CpuTimer0Regs.TCR.bit.TSS = 0
139 |
140 | // Stop Timer:
141 | #define StopCpuTimer0() CpuTimer0Regs.TCR.bit.TSS = 1
142 |
143 | // Reload Timer With period Value:
144 | #define ReloadCpuTimer0() CpuTimer0Regs.TCR.bit.TRB = 1
145 |
146 | // Read 32-Bit Timer Value:
147 | #define ReadCpuTimer0Counter() CpuTimer0Regs.TIM.all
148 |
149 | // Read 32-Bit Period Value:
150 | #define ReadCpuTimer0Period() CpuTimer0Regs.PRD.all
151 |
152 | // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS
153 | // Do not use these two timers if you ever plan on integrating
154 | // DSP-BIOS or another realtime OS.
155 | //
156 | // For this reason, comment out the code to manipulate these two timers
157 | // if using DSP-BIOS or another realtime OS.
158 |
159 | // Start Timer:
160 | #define StartCpuTimer1() CpuTimer1Regs.TCR.bit.TSS = 0
161 | #define StartCpuTimer2() CpuTimer2Regs.TCR.bit.TSS = 0
162 |
163 |
164 | // Stop Timer:
165 | #define StopCpuTimer1() CpuTimer1Regs.TCR.bit.TSS = 1
166 | #define StopCpuTimer2() CpuTimer2Regs.TCR.bit.TSS = 1
167 |
168 | // Reload Timer With period Value:
169 | #define ReloadCpuTimer1() CpuTimer1Regs.TCR.bit.TRB = 1
170 | #define ReloadCpuTimer2() CpuTimer2Regs.TCR.bit.TRB = 1
171 |
172 | // Read 32-Bit Timer Value:
173 | #define ReadCpuTimer1Counter() CpuTimer1Regs.TIM.all
174 | #define ReadCpuTimer2Counter() CpuTimer2Regs.TIM.all
175 |
176 | // Read 32-Bit Period Value:
177 | #define ReadCpuTimer1Period() CpuTimer1Regs.PRD.all
178 | #define ReadCpuTimer2Period() CpuTimer2Regs.PRD.all
179 |
180 |
181 | #ifdef __cplusplus
182 | }
183 | #endif /* extern "C" */
184 |
185 | #endif // end of DSP2833x_CPU_TIMERS_H definition
186 |
187 |
188 | //===========================================================================
189 | // End of file.
190 | //===========================================================================
191 |
--------------------------------------------------------------------------------
/makeCCSv3.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | SET CCSv3OutputDir=CCSv3
3 | SET CopySerialTimerHeader=0
4 |
5 | echo ## Entering at 28335ModbusSlave directory...
6 | cd %~dp0
7 | echo.
8 |
9 | if not exist %CCSv3OutputDir% (
10 | echo ## Creating %CCSv3OutputDir% directory...
11 | mkdir %CCSv3OutputDir%
12 | mkdir %CCSv3OutputDir%\Include
13 | mkdir %CCSv3OutputDir%\Source
14 | echo.
15 | )
16 |
17 |
18 | echo ## Copying .c files to %CCSv3OutputDir%\Source...
19 | copy contrib\modbus\*.c %CCSv3OutputDir%\Source
20 | copy contrib\modbus\plataform\DSP2833x\*.c %CCSv3OutputDir%\Source
21 | echo.
22 |
23 | echo ## Copying .h files to %CCSv3OutputDir%\Include...
24 | copy contrib\modbus\include\*.h %CCSv3OutputDir%\Include
25 | if %CopySerialTimerHeader%==1 (
26 | copy contrib\modbus\plataform\DSP2833x\include\*.h %CCSv3OutputDir%\Include
27 | )
28 | echo.
29 |
30 | echo ## Done!
31 | pause
--------------------------------------------------------------------------------
/makeCCSv3.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | script=$(readlink -f "$0")
3 | scriptPath=$(dirname "$script")
4 | CCSv3OutputDir="CCSv3"
5 | CopySerialTimerHeader=1
6 |
7 | echo "## Entering at 28335ModbusSlave directory..."
8 | cd $scriptPath
9 | echo
10 |
11 | if [ -d $CCSv3OutputDir ]; then
12 | echo "## Destroying old $CCSv3OutputDir directory..."
13 | echo
14 | rm -rf $CCSv3OutputDir;
15 | fi
16 |
17 | if [ ! -d $CCSv3OutputDir ]; then
18 | echo "## Creating $CCSv3OutputDir directory..."
19 | mkdir $CCSv3OutputDir
20 | mkdir $CCSv3OutputDir/Include
21 | mkdir $CCSv3OutputDir/Source
22 | echo
23 | fi
24 |
25 | echo "## Copying .c files to $CCSv3OutputDir/Source..."
26 | cp contrib/modbus/*.c $CCSv3OutputDir/Source
27 | cp contrib/modbus/plataform/DSP2833x/*.c $CCSv3OutputDir/Source
28 | echo
29 |
30 | echo "## Copying .h files to $CCSv3OutputDir/Include..."
31 | cp contrib/modbus/include/*.h $CCSv3OutputDir/Include
32 | if [ $CopySerialTimerHeader == 1 ]; then
33 | cp contrib/modbus/plataform/DSP2833x/include/*.h $CCSv3OutputDir/Include
34 | fi
35 | echo
36 |
37 | echo "## Ziping CCSv3 fileds"
38 | rm CCSv3.zip
39 | zip -r CCSv3 CCSv3
40 |
41 | echo "## Done!"
42 |
--------------------------------------------------------------------------------
/src/DSP2833x_ADC_cal.asm:
--------------------------------------------------------------------------------
1 | ;; TI File $Revision: /main/1 $
2 | ;; Checkin $Date: July 30, 2007 10:29:23 $
3 | ;;###########################################################################
4 | ;;
5 | ;; FILE: ADC_cal.asm
6 | ;;
7 | ;; TITLE: 2833x Boot Rom ADC Cal routine.
8 | ;;
9 | ;; Functions:
10 | ;;
11 | ;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and ADCOFFTRIM registers
12 | ;; Notes:
13 | ;;
14 | ;;###########################################################################
15 | ;; $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
16 | ;; $Release Date: August 4, 2009 $
17 | ;;###########################################################################
18 |
19 | .def _ADC_cal
20 | .asg "0x711C", ADCREFSEL_LOC
21 |
22 | ;-----------------------------------------------
23 | ; _ADC_cal
24 | ;-----------------------------------------------
25 | ;-----------------------------------------------
26 | ; This is the ADC cal routine.This routine is programmed into
27 | ; reserved memory by the factory. 0xAAAA and 0xBBBB are place-
28 | ; holders for calibration data.
29 | ;The actual values programmed by TI are device specific.
30 | ;
31 | ; This function assumes that the clocks have been
32 | ; enabled to the ADC module.
33 | ;-----------------------------------------------
34 |
35 | .sect ".adc_cal"
36 |
37 | _ADC_cal
38 | MOVW DP, #ADCREFSEL_LOC >> 6
39 | MOV @28, #0xAAAA ; actual value may not be 0xAAAA
40 | MOV @29, #0xBBBB ; actual value may not be 0xBBBB
41 | LRETR
42 | ;eof ----------
43 |
--------------------------------------------------------------------------------
/src/DSP2833x_CodeStartBranch.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/1 $
2 | ;// Checkin $Date: August 18, 2006 13:45:55 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_CodeStartBranch.asm
6 | ;//
7 | ;// TITLE: Branch for redirecting code execution after boot.
8 | ;//
9 | ;// For these examples, code_start is the first code that is executed after
10 | ;// exiting the boot ROM code.
11 | ;//
12 | ;// The codestart section in the linker cmd file is used to physically place
13 | ;// this code at the correct memory location. This section should be placed
14 | ;// at the location the BOOT ROM will re-direct the code to. For example,
15 | ;// for boot to FLASH this code will be located at 0x3f7ff6.
16 | ;//
17 | ;// In addition, the example DSP2833x projects are setup such that the codegen
18 | ;// entry point is also set to the code_start label. This is done by linker
19 | ;// option -e in the project build options. When the debugger loads the code,
20 | ;// it will automatically set the PC to the "entry point" address indicated by
21 | ;// the -e linker option. In this case the debugger is simply assigning the PC,
22 | ;// it is not the same as a full reset of the device.
23 | ;//
24 | ;// The compiler may warn that the entry point for the project is other then
25 | ;// _c_init00. _c_init00 is the C environment setup and is run before
26 | ;// main() is entered. The code_start code will re-direct the execution
27 | ;// to _c_init00 and thus there is no worry and this warning can be ignored.
28 | ;//
29 | ;//###########################################################################
30 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
31 | ;// $Release Date: August 4, 2009 $
32 | ;//###########################################################################
33 |
34 |
35 | ***********************************************************************
36 |
37 | WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0
38 |
39 | .ref _c_int00
40 | .global code_start
41 |
42 | ***********************************************************************
43 | * Function: codestart section
44 | *
45 | * Description: Branch to code starting point
46 | ***********************************************************************
47 |
48 | .sect "codestart"
49 |
50 | code_start:
51 | .if WD_DISABLE == 1
52 | LB wd_disable ;Branch to watchdog disable code
53 | .else
54 | LB _c_int00 ;Branch to start of boot.asm in RTS library
55 | .endif
56 |
57 | ;end codestart section
58 |
59 |
60 | ***********************************************************************
61 | * Function: wd_disable
62 | *
63 | * Description: Disables the watchdog timer
64 | ***********************************************************************
65 | .if WD_DISABLE == 1
66 |
67 | .text
68 | wd_disable:
69 | SETC OBJMODE ;Set OBJMODE for 28x object code
70 | EALLOW ;Enable EALLOW protected register access
71 | MOVZ DP, #7029h>>6 ;Set data page for WDCR register
72 | MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD
73 | EDIS ;Disable EALLOW protected register access
74 | LB _c_int00 ;Branch to start of boot.asm in RTS library
75 |
76 | .endif
77 |
78 | ;end wd_disable
79 |
80 |
81 |
82 | .end
83 |
84 | ;//===========================================================================
85 | ;// End of file.
86 | ;//===========================================================================
87 |
--------------------------------------------------------------------------------
/src/DSP2833x_usDelay.asm:
--------------------------------------------------------------------------------
1 | ;// TI File $Revision: /main/4 $
2 | ;// Checkin $Date: July 30, 2007 10:28:57 $
3 | ;//###########################################################################
4 | ;//
5 | ;// FILE: DSP2833x_usDelay.asm
6 | ;//
7 | ;// TITLE: Simple delay function
8 | ;//
9 | ;// DESCRIPTION:
10 | ;//
11 | ;// This is a simple delay function that can be used to insert a specified
12 | ;// delay into code.
13 | ;//
14 | ;// This function is only accurate if executed from internal zero-waitstate
15 | ;// SARAM. If it is executed from waitstate memory then the delay will be
16 | ;// longer then specified.
17 | ;//
18 | ;// To use this function:
19 | ;//
20 | ;// 1 - update the CPU clock speed in the DSP2833x_Examples.h
21 | ;// file. For example:
22 | ;// #define CPU_RATE 6.667L // for a 150MHz CPU clock speed
23 | ;// or #define CPU_RATE 10.000L // for a 100MHz CPU clock speed
24 | ;//
25 | ;// 2 - Call this function by using the DELAY_US(A) macro
26 | ;// that is defined in the DSP2833x_Examples.h file. This macro
27 | ;// will convert the number of microseconds specified
28 | ;// into a loop count for use with this function.
29 | ;// This count will be based on the CPU frequency you specify.
30 | ;//
31 | ;// 3 - For the most accurate delay
32 | ;// - Execute this function in 0 waitstate RAM.
33 | ;// - Disable interrupts before calling the function
34 | ;// If you do not disable interrupts, then think of
35 | ;// this as an "at least" delay function as the actual
36 | ;// delay may be longer.
37 | ;//
38 | ;// The C assembly call from the DELAY_US(time) macro will
39 | ;// look as follows:
40 | ;//
41 | ;// extern void Delay(long LoopCount);
42 | ;//
43 | ;// MOV AL,#LowLoopCount
44 | ;// MOV AH,#HighLoopCount
45 | ;// LCR _Delay
46 | ;//
47 | ;// Or as follows (if count is less then 16-bits):
48 | ;//
49 | ;// MOV ACC,#LoopCount
50 | ;// LCR _Delay
51 | ;//
52 | ;//
53 | ;//###########################################################################
54 | ;// $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
55 | ;// $Release Date: August 4, 2009 $
56 | ;//###########################################################################
57 |
58 | .def _DSP28x_usDelay
59 | .sect "ramfuncs"
60 |
61 | .global __DSP28x_usDelay
62 | _DSP28x_usDelay:
63 | SUB ACC,#1
64 | BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0
65 | LRETR
66 |
67 | ;There is a 9/10 cycle overhead and each loop
68 | ;takes five cycles. The LoopCount is given by
69 | ;the following formula:
70 | ; DELAY_CPU_CYCLES = 9 + 5*LoopCount
71 | ; LoopCount = (DELAY_CPU_CYCLES - 9) / 5
72 | ; The macro DELAY_US(A) performs this calculation for you
73 | ;
74 | ;//===========================================================================
75 | ;// End of file.
76 | ;//===========================================================================
77 |
--------------------------------------------------------------------------------
/src/main.c:
--------------------------------------------------------------------------------
1 | #include "ModbusSlave.h"
2 | #include "DSP2833x_Device.h"
3 | #include "DSP2833x_GlobalPrototypes.h"
4 |
5 | ModbusSlave mb;
6 |
7 | int main(){
8 | InitSysCtrl();
9 |
10 | mb = construct_ModbusSlave();
11 |
12 | #if MB_LIBMODBUS_TESTS
13 | // 0xAC, 0xDB, 0x35
14 | mb.inputs.dummy10 = 1;
15 | mb.inputs.dummy11 = 1;
16 | mb.inputs.dummy13 = 1;
17 | mb.inputs.dummy15 = 1;
18 | mb.inputs.dummy16 = 1;
19 | mb.inputs.dummy17 = 1;
20 | mb.inputs.dummy19 = 1;
21 | mb.inputs.dummy20 = 1;
22 | mb.inputs.dummy22 = 1;
23 | mb.inputs.dummy23 = 1;
24 | mb.inputs.dummy24 = 1;
25 | mb.inputs.dummy26 = 1;
26 | mb.inputs.dummy28 = 1;
27 | mb.inputs.dummy29 = 1;
28 |
29 | mb.inputRegisters.dummy25 = 0x000A;
30 |
31 | mb.holdingRegisters.dummy2 = 0x01;
32 | mb.holdingRegisters.dummy3 = 0x01;
33 | mb.holdingRegisters.dummy4 = 0x01;
34 | mb.holdingRegisters.dummy5 = 0x01;
35 | mb.holdingRegisters.dummy6 = 0x01;
36 | #endif
37 |
38 | while(1) {
39 | mb.loopStates(&mb);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/tests/README.md:
--------------------------------------------------------------------------------
1 | You need libmodbus installed to use the unit-test-client program. It is adapted from the libmodbus unit tests. As is hard to test code on DSPs, I am using this client to certify that the requests are working properly.
2 |
3 | Sometimes, depending on the serial adapter that you're using, the program will throw a timeout.
4 |
5 | You can add tests to unit-test-client.c code and recompile the program. If you find anything that is not covered by the test, submit a pull request with it.
6 |
--------------------------------------------------------------------------------
/tests/unit-test.h:
--------------------------------------------------------------------------------
1 | /* tests/unit-test.h. Generated from unit-test.h.in by configure. */
2 | /*
3 | * Copyright © 2008-2014 Stéphane Raimbault
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the BSD License.
7 | */
8 |
9 | #ifndef _UNIT_TEST_H_
10 | #define _UNIT_TEST_H_
11 |
12 | /* Constants defined by configure.ac */
13 | #define HAVE_INTTYPES_H 1
14 | #define HAVE_STDINT_H 1
15 |
16 | #ifdef HAVE_INTTYPES_H
17 | #include
18 | #endif
19 | #ifdef HAVE_STDINT_H
20 | # ifndef _MSC_VER
21 | # include
22 | # else
23 | # include "stdint.h"
24 | # endif
25 | #endif
26 |
27 | #define SERVER_ID 1
28 | #define INVALID_SERVER_ID 18
29 |
30 | /* Server allocates address + nb */
31 | const uint16_t UT_BITS_ADDRESS = 0x07;
32 | const uint16_t UT_BITS_NB = 0x22;
33 | const uint8_t UT_BITS_TAB[] = { 0xCD, 0x6B, 0xB2, 0x0E, 0x03 };
34 |
35 | const uint16_t UT_INPUT_BITS_ADDRESS = 0x07;
36 | const uint16_t UT_INPUT_BITS_NB = 0x16;
37 | const uint8_t UT_INPUT_BITS_TAB[] = { 0xAC, 0xDB, 0x35 };
38 |
39 | const uint16_t UT_REGISTERS_ADDRESS = 0x0019;
40 | /* Raise a manual exception when this address is used for the first byte */
41 | const uint16_t UT_REGISTERS_ADDRESS_SPECIAL = 0x6C;
42 | /* The response of the server will contains an invalid TID or slave */
43 | const uint16_t UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE = 0x6D;
44 | /* The server will wait for 1 second before replying to test timeout */
45 | const uint16_t UT_REGISTERS_ADDRESS_SLEEP_500_MS = 0x6E;
46 | /* The server will wait for 5 ms before sending each byte */
47 | const uint16_t UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS = 0x6F;
48 |
49 | const uint16_t UT_REGISTERS_NB = 0x3;
50 | const uint16_t UT_REGISTERS_TAB[] = { 0x022B, 0x0001, 0x0064 };
51 | /* If the following value is used, a bad response is sent.
52 | It's better to test with a lower value than
53 | UT_REGISTERS_NB_POINTS to try to raise a segfault. */
54 | const uint16_t UT_REGISTERS_NB_SPECIAL = 0x2;
55 |
56 | const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x0018;
57 | const uint16_t UT_INPUT_REGISTERS_NB = 0x1;
58 | const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A };
59 |
60 | const float UT_REAL = 916.540649;
61 | const uint32_t UT_IREAL = 0x4465229a;
62 | const uint32_t UT_IREAL_DCBA = 0x9a226544;
63 |
64 | #endif /* _UNIT_TEST_H_ */
65 |
--------------------------------------------------------------------------------