From fc2788881fc69e48cf74076d1e83bf047b4d8207 Mon Sep 17 00:00:00 2001 From: Dimas Date: Thu, 9 Jul 2026 14:50:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- F28335.cmd | 206 + GPIO_table.h | 194 + RS485.c | 553 ++ RS485.h | 138 + aaa/gel/DSP2833x_DualMap_EPWM.gel | 237 - bin/HEX2BIN.EXE | Bin 0 -> 111104 bytes bin/hex2000.exe | Bin 0 -> 770048 bytes bin/ice.bin | Bin 0 -> 31262 bytes bin/ice.hex | 979 +++ bin/ice.map | 34 + bin/ice.out | Bin 0 -> 331330 bytes doc/ICE data stru.xls | Bin 0 -> 71680 bytes ...я по калибровке УКСИ.docx | Bin 0 -> 66150 bytes ecan.c | 354 + ecan.h | 3 + filter_bat2.c | 19 + filter_bat2.h | 49 + i2c.c | 142 + i2c.h | 4 + ice.pjt | 70 + isolatio.c | 268 + isolatio.h | 54 + kanal.c | 164 + kanal.h | 7 + log_to_mem.c | 34 + log_to_mem.h | 48 + main.c | 220 + measure.c | 673 ++ measure.h | 140 + message.c | 367 ++ message.h | 51 + package.h | 70 + peripher.c | 145 + peripher.h | 28 + spise2p.c | 471 ++ spise2p.h | 134 + test.c | 183 + test.h | 17 + tools.c | 80 + tools.h | 26 + .../include/DSP2833x_EPwm_defines.h | 164 + .../include/DSP2833x_Examples.h | 143 + .../include/DSP2833x_GlobalPrototypes.h | 207 + .../include/DSP2833x_I2c_defines.h | 117 + .../include/DSP2833x_SWPrioritizedIsrLevels.h | 5850 +++++++++++++++++ .../DSP2833x_common/source/DSP2833x_PieCtrl.c | 83 + .../DSP2833x_common/source/DSP2833x_PieVect.c | 204 + .../source/DSP2833x_SWPrioritizedDefaultIsr.c | 1863 ++++++ .../source/DSP2833x_SWPrioritizedPieVect.c | 511 ++ .../DSP2833x_common/source/DSP2833x_SysCtrl.c | 415 ++ v120/DSP2833x_common/source/DSP2833x_Xintf.c | 243 + .../source/DSP2833x_usDelay.asm | 76 + .../cmd/DSP2833x_Headers_BIOS.cmd | 183 + .../cmd/DSP2833x_Headers_nonBIOS.cmd | 183 + v120/DSP2833x_headers/include/DSP2833x_EQep.h | 242 + v120/DSP2833x_headers/include/DSP2833x_Gpio.h | 391 ++ v120/DSP2833x_headers/include/DSP2833x_I2c.h | 193 + .../DSP2833x_headers/include/DSP2833x_Mcbsp.h | 715 ++ .../include/DSP2833x_PieCtrl.h | 153 + .../include/DSP2833x_PieVect.h | 208 + v120/DSP2833x_headers/include/DSP2833x_Sci.h | 235 + v120/DSP2833x_headers/include/DSP2833x_Spi.h | 183 + .../include/DSP2833x_SysCtrl.h | 383 ++ .../include/DSP2833x_XIntrupt.h | 83 + .../DSP2833x_headers/include/DSP2833x_Xintf.h | 120 + .../source/DSP2833x_GlobalVariableDefs.c | 444 ++ 66 files changed, 19517 insertions(+), 237 deletions(-) create mode 100644 F28335.cmd create mode 100644 GPIO_table.h create mode 100644 RS485.c create mode 100644 RS485.h delete mode 100644 aaa/gel/DSP2833x_DualMap_EPWM.gel create mode 100644 bin/HEX2BIN.EXE create mode 100644 bin/hex2000.exe create mode 100644 bin/ice.bin create mode 100644 bin/ice.hex create mode 100644 bin/ice.map create mode 100644 bin/ice.out create mode 100644 doc/ICE data stru.xls create mode 100644 doc/Инструкция по калибровке УКСИ.docx create mode 100644 ecan.c create mode 100644 ecan.h create mode 100644 filter_bat2.c create mode 100644 filter_bat2.h create mode 100644 i2c.c create mode 100644 i2c.h create mode 100644 ice.pjt create mode 100644 isolatio.c create mode 100644 isolatio.h create mode 100644 kanal.c create mode 100644 kanal.h create mode 100644 log_to_mem.c create mode 100644 log_to_mem.h create mode 100644 main.c create mode 100644 measure.c create mode 100644 measure.h create mode 100644 message.c create mode 100644 message.h create mode 100644 package.h create mode 100644 peripher.c create mode 100644 peripher.h create mode 100644 spise2p.c create mode 100644 spise2p.h create mode 100644 test.c create mode 100644 test.h create mode 100644 tools.c create mode 100644 tools.h create mode 100644 v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h create mode 100644 v120/DSP2833x_common/include/DSP2833x_Examples.h create mode 100644 v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h create mode 100644 v120/DSP2833x_common/include/DSP2833x_I2c_defines.h create mode 100644 v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h create mode 100644 v120/DSP2833x_common/source/DSP2833x_PieCtrl.c create mode 100644 v120/DSP2833x_common/source/DSP2833x_PieVect.c create mode 100644 v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c create mode 100644 v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c create mode 100644 v120/DSP2833x_common/source/DSP2833x_SysCtrl.c create mode 100644 v120/DSP2833x_common/source/DSP2833x_Xintf.c create mode 100644 v120/DSP2833x_common/source/DSP2833x_usDelay.asm create mode 100644 v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd create mode 100644 v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd create mode 100644 v120/DSP2833x_headers/include/DSP2833x_EQep.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_Gpio.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_I2c.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_PieVect.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_Sci.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_Spi.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h create mode 100644 v120/DSP2833x_headers/include/DSP2833x_Xintf.h create mode 100644 v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c diff --git a/F28335.cmd b/F28335.cmd new file mode 100644 index 0000000..fffa02b --- /dev/null +++ b/F28335.cmd @@ -0,0 +1,206 @@ +/* +// TI File $Revision: /main/10 $ +// Checkin $Date: July 9, 2008 13:43:56 $ +//########################################################################### +// +// FILE: F28335.cmd +// +// TITLE: Linker Command File For F28335 Device +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### +*/ + +/* ====================================================== +// For Code Composer Studio V2.2 and later +// --------------------------------------- +// In addition to this memory linker command file, +// add the header linker command file directly to the project. +// The header linker command file is required to link the +// peripheral structures to the proper locations within +// the memory map. +// +// The header linker files are found in \DSP2833x_Headers\cmd +// +// For BIOS applications add: DSP2833x_Headers_BIOS.cmd +// For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd +========================================================= */ + +/* ====================================================== +// For Code Composer Studio prior to V2.2 +// -------------------------------------- +// 1) Use one of the following -l statements to include the +// header linker command file in the project. The header linker +// file is required to link the peripheral structures to the proper +// locations within the memory map */ + +/* Uncomment this line to include file only for non-BIOS applications */ +/* -l DSP2833x_Headers_nonBIOS.cmd */ + +/* Uncomment this line to include file only for BIOS applications */ +/* -l DSP2833x_Headers_BIOS.cmd */ + +/* 2) In your project add the path to \DSP2833x_headers\cmd to the + library search path under project->build options, linker tab, + library search path (-i). +/*========================================================= */ + +/* Define the memory block start/length for the F28335 + PAGE 0 will be used to organize program sections + PAGE 1 will be used to organize data sections + + Notes: + Memory blocks on F28335 are uniform (ie same + physical memory) in both PAGE 0 and PAGE 1. + That is the same memory region should not be + defined for both PAGE 0 and PAGE 1. + Doing so will result in corruption of program + and/or data. + + L0/L1/L2 and L3 memory blocks are mirrored - that is + they can be accessed in high memory or low memory. + For simplicity only one instance is used in this + linker file. + + Contiguous SARAM memory blocks can be combined + if required to create a larger memory block. + */ + + +MEMORY +{ +PAGE 0: /* Program Memory */ + /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */ + + ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */ + RAML0 : origin = 0x008000, length = 0x004000 /* on-chip RAM block L0 */ +/* RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */ +/* RAML2 : origin = 0x00A000, length = 0x001000 /* on-chip RAM block L2 */ +// RAML3 : origin = 0x00B000, length = 0x001000 /* on-chip RAM block L3 */ + RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */ + + ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */ + FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */ + FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */ + FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */ + FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */ + FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */ + FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */ + FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */ + CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ + BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */ + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ + OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */ + ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */ + + IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */ + IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */ + FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */ + ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */ + RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */ + VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */ + +PAGE 1 : /* Data Memory */ + /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */ + /* Registers remain on PAGE1 */ + + BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */ + RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */ + RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ + RAML5 : origin = 0x00D000, length = 0x003000 /* on-chip RAM block L1 */ +/* RAML6 : origin = 0x00E000, length = 0x001000 /* on-chip RAM block L1 */ +/* RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */ + ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */ + ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ + FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */ +} + +/* Allocate sections to memory blocks. + Note: + codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code + execution when booting to flash + ramfuncs user defined section to store functions that will be copied from Flash into RAM +*/ + +SECTIONS +{ + + /* Allocate program areas: */ + .cinit : > RAML0 PAGE = 0 + .pinit : > RAML0 PAGE = 0 + .text : > RAML0 PAGE = 0 + codestart : > BEGIN PAGE = 0 + ramfuncs : LOAD = RAML4, + RUN = RAML4, + LOAD_START(_RamfuncsLoadStart), + LOAD_END(_RamfuncsLoadEnd), + RUN_START(_RamfuncsRunStart), + PAGE = 0 + + csmpasswds : > CSM_PWL PAGE = 0 + csm_rsvd : > CSM_RSVD PAGE = 0 + + /* Allocate uninitalized data sections: */ + .stack : > RAMM1 PAGE = 1 + .ebss : > RAML5 PAGE = 1 + .esysmem : > RAML0 PAGE = 0 + + .logg : > ZONE7A PAGE = 1 + + /* Initalized sections go in Flash */ + /* For SDFlash to program these, they must be allocated to page 0 */ + .econst : > RAML4 PAGE = 0 + .switch : > RAML4 PAGE = 0 + + /* Allocate IQ math areas: */ + IQmath : > FLASHC PAGE = 0 /* Math Code */ + IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD + + /* Uncomment the section below if calling the IQNexp() or IQexp() + functions from the IQMath.lib library in order to utilize the + relevant IQ Math table in Boot ROM (This saves space and Boot ROM + is 1 wait-state). If this section is not uncommented, IQmathTables2 + will be loaded into other memory (SARAM, Flash, etc.) and will take + up space, but 0 wait-state is possible. + */ + /* + IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD + { + + IQmath.lib (IQmathTablesRam) + + } + */ + + FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD + + /* Allocate DMA-accessible RAM sections: * / + DMARAML4 : > RAML4, PAGE = 1 + DMARAML5 : > RAML5, PAGE = 1 +/* DMARAML6 : > RAML6, PAGE = 1 + DMARAML7 : > RAML7, PAGE = 1 +*/ + /* Allocate 0x400 of XINTF Zone 7 to storing data */ + ZONE7DATA : > ZONE7B, PAGE = 1 + + /* .reset is a standard section used by the compiler. It contains the */ + /* the address of the start of _c_int00 for C Code. /* + /* When using the boot ROM this section and the CPU vector */ + /* table is not needed. Thus the default type is set here to */ + /* DSECT */ + .reset : > RESET, PAGE = 0, TYPE = DSECT + vectors : > VECTORS PAGE = 0, TYPE = DSECT + + /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */ + .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD + +} + +/* +//=========================================================================== +// End of file. +//=========================================================================== +*/ + diff --git a/GPIO_table.h b/GPIO_table.h new file mode 100644 index 0000000..c6cfa83 --- /dev/null +++ b/GPIO_table.h @@ -0,0 +1,194 @@ +#define COMM_gpio00_dir 0UL +#define COMM_gpio01_dir 0UL +#define COMM_gpio02_dir 0UL +#define COMM_gpio03_dir 0UL +#define COMM_gpio04_dir 0UL +#define COMM_gpio05_dir 0UL +#define COMM_gpio06_dir 0UL +#define COMM_gpio07_dir 0UL +#define COMM_gpio08_dir 0UL +#define COMM_gpio09_dir 0UL +#define COMM_gpio10_dir 0UL +#define COMM_gpio11_dir 0UL + +#define COMM_gpio19_dir 1UL // 63 SPI +#define COMM_gpio20_dir 0UL // 64 2:9B mode 2 +#define COMM_gpio21_dir 0UL // 65 2:9A mode 4 +#define COMM_gpio22_dir 0UL // 66 2:12C mode 1 +#define COMM_gpio23_dir 0UL // 67 2:12B control -24V +#define COMM_gpio24_dir 0UL +#define COMM_gpio25_dir 0UL +#define COMM_gpio26_dir 0UL // 72 2:11B control +24V +#define COMM_gpio27_dir 0UL + +#define COMM_gpio32_dir 1UL // 74 2:10B SDA +#define COMM_gpio33_dir 1UL // 75 2:10C SCL +#define COMM_gpio34_dir 1UL // 142 SCI + +#define COMM_gpio48_dir 1UL // 88 2:14C DIOD red +#define COMM_gpio49_dir 1UL // 89 2:14B ts2 red +#define COMM_gpio50_dir 0UL +#define COMM_gpio51_dir 0UL // 91 2:13C mode !8 +#define COMM_gpio52_dir 1UL // 94 2:13B ts1 green +#define COMM_gpio53_dir 0UL + +#define COMM_gpio58_dir 1UL // 100 1:13C led term +#define COMM_gpio59_dir 1UL // 110 1:13B gotov +#define COMM_gpio60_dir 1UL // 111 1:13A led job +#define COMM_gpio61_dir 0UL +#define COMM_gpio62_dir 1UL // 113 1:14B alarm +#define COMM_gpio63_dir 1UL // 114 1:14A rez out + +//=========================================================================== + +#define VEPP_gpio00_dir 0UL // 5 2:7A input +#define VEPP_gpio01_dir 0UL // 6 2:4A input +#define VEPP_gpio02_dir 0UL // 7 2:7B input +#define VEPP_gpio03_dir 0UL // 10 2:4B input +#define VEPP_gpio04_dir 0UL // 11 2:7C input +#define VEPP_gpio05_dir 0UL // 12 2:4C input +#define VEPP_gpio06_dir 0UL // 13 2:6A input +#define VEPP_gpio07_dir 0UL // 16 2:3A input +#define VEPP_gpio08_dir 0UL // 17 2:6B input +#define VEPP_gpio09_dir 0UL // 18 2:3B input +#define VEPP_gpio10_dir 0UL // 19 2:6C input +#define VEPP_gpio11_dir 0UL // 20 2:3C input + +#define VEPP_gpio19_dir 1UL // 63 SPI +#define VEPP_gpio20_dir 0UL // 64 2:9B mode 2 +#define VEPP_gpio21_dir 0UL // 65 2:9A mode 4 +#define VEPP_gpio22_dir 0UL // 66 2:12C mode 1 +#define VEPP_gpio23_dir 0UL // 67 2:12B input +#define VEPP_gpio24_dir 0UL // 68 2:12A input +#define VEPP_gpio25_dir 0UL // 69 2:11C input +#define VEPP_gpio26_dir 0UL // 72 2:11B input +#define VEPP_gpio27_dir 0UL // 73 2:11A input + +#define VEPP_gpio32_dir 0UL // 74 2:10B input +#define VEPP_gpio33_dir 0UL // 75 2:10C input +#define VEPP_gpio34_dir 1UL // 142 SCI + +#define VEPP_gpio48_dir 1UL // 88 2:14C DIOD red +#define VEPP_gpio49_dir 0UL // 89 2:14B input +#define VEPP_gpio50_dir 0UL // 90 2:14A input +#define VEPP_gpio51_dir 0UL // 91 2:13C mode !8 +#define VEPP_gpio52_dir 0UL // 94 2:13B input +#define VEPP_gpio53_dir 0UL // 95 2:13A input + +#define VEPP_gpio58_dir 0UL // 100 1:13C input +#define VEPP_gpio59_dir 0UL +#define VEPP_gpio60_dir 1UL // 111 1:13A gotov +#define VEPP_gpio61_dir 0UL // 112 1:14C input +#define VEPP_gpio62_dir 1UL // 113 1:14C rezout +#define VEPP_gpio63_dir 1UL // 114 1:14A ledjob + +//=========================================================================== + +#define ISOL_gpio00_dir 0UL // 5 2:7A +#define ISOL_gpio01_dir 0UL // 6 2:4A +#define ISOL_gpio02_dir 0UL // 7 2:7B +#define ISOL_gpio03_dir 0UL // 10 2:4B +#define ISOL_gpio04_dir 0UL // 11 2:7C +#define ISOL_gpio05_dir 0UL // 12 2:4C +#define ISOL_gpio06_dir 0UL // 13 2:6A +#define ISOL_gpio07_dir 0UL // 16 2:3A +#define ISOL_gpio08_dir 0UL // 17 2:6B +#define ISOL_gpio09_dir 0UL // 18 2:3B +#define ISOL_gpio10_dir 0UL // 19 2:6C +#define ISOL_gpio11_dir 0UL // 20 2:3C + +#define ISOL_gpio19_dir 1UL // 63 SPI +#define ISOL_gpio20_dir 0UL // 64 2:9B mode 2 +#define ISOL_gpio21_dir 0UL // 65 2:9A mode 4 +#define ISOL_gpio22_dir 0UL // 66 2:12C mode 1 +#define ISOL_gpio23_dir 0UL // 67 2:12B opt input 1 +#define ISOL_gpio24_dir 1UL // 68 2:12A led 2 +#define ISOL_gpio25_dir 0UL // 69 2:11C +#define ISOL_gpio26_dir 1UL // 72 2:11B opt out 2 +#define ISOL_gpio27_dir 1UL // 73 2:11A led 1 + +#define ISOL_gpio32_dir 1UL // 74 2:10B opt out 1 +#define ISOL_gpio33_dir 0UL // 75 2:10C +#define ISOL_gpio34_dir 1UL // 142 SCI + +#define ISOL_gpio48_dir 1UL // 88 2:14C DIOD red +#define ISOL_gpio49_dir 0UL // 89 2:14B +#define ISOL_gpio50_dir 0UL // 90 2:14A +#define ISOL_gpio51_dir 0UL // 91 2:13C mode !8 +#define ISOL_gpio52_dir 0UL // 94 2:13B opt input 2 +#define ISOL_gpio53_dir 1UL // 95 2:13A led 3 + +#define ISOL_gpio58_dir 0UL // 100 1:13C +#define ISOL_gpio59_dir 1UL // 110 1:13B gotov +#define ISOL_gpio60_dir 0UL // 111 1:13A +#define ISOL_gpio61_dir 0UL // 112 1:14C +#define ISOL_gpio62_dir 0UL // 113 1:14C input +#define ISOL_gpio63_dir 0UL // 114 1:14A + +//=========================================================================== + +//=========================================================================== + +#define COMM_GPADIR (COMM_gpio00_dir ) + (COMM_gpio01_dir<<1) + (COMM_gpio02_dir<<2) + (COMM_gpio03_dir<<3) + \ + (COMM_gpio04_dir<<4) + (COMM_gpio05_dir<<5) + (COMM_gpio06_dir<<6) + (COMM_gpio07_dir<<7) + \ + (COMM_gpio08_dir<<8) + (COMM_gpio09_dir<<9) + (COMM_gpio10_dir<<10)+ (COMM_gpio11_dir<<11)+ \ + (COMM_gpio19_dir<<19)+ \ + (COMM_gpio20_dir<<20)+ (COMM_gpio21_dir<<21)+ (COMM_gpio22_dir<<22)+ (COMM_gpio23_dir<<23)+ \ + (COMM_gpio24_dir<<24)+ (COMM_gpio25_dir<<25)+ (COMM_gpio26_dir<<26)+ (COMM_gpio27_dir<<27); +#define COMM_GPBDIR (COMM_gpio32_dir )+ (COMM_gpio33_dir<<1) + (COMM_gpio34_dir<<2 )+ \ + (COMM_gpio48_dir<<16)+ (COMM_gpio49_dir<<17)+ (COMM_gpio50_dir<<18)+ (COMM_gpio51_dir<<19)+ \ + (COMM_gpio52_dir<<20)+ (COMM_gpio53_dir<<21)+ \ + (COMM_gpio58_dir<<26)+ (COMM_gpio59_dir<<27)+ \ + (COMM_gpio60_dir<<28)+ (COMM_gpio61_dir<<29)+ (COMM_gpio62_dir<<30)+ (COMM_gpio63_dir<<31); + +#define BKSD_GPADIR (BKSD_gpio00_dir ) + (BKSD_gpio01_dir<<1) + (BKSD_gpio02_dir<<2) + (BKSD_gpio03_dir<<3) + \ + (BKSD_gpio04_dir<<4) + (BKSD_gpio05_dir<<5) + (BKSD_gpio06_dir<<6) + (BKSD_gpio07_dir<<7) + \ + (BKSD_gpio08_dir<<8) + (BKSD_gpio09_dir<<9) + (BKSD_gpio10_dir<<10)+ (BKSD_gpio11_dir<<11)+ \ + (BKSD_gpio19_dir<<19)+ \ + (BKSD_gpio20_dir<<20)+ (BKSD_gpio21_dir<<21)+ (BKSD_gpio22_dir<<22)+ (BKSD_gpio23_dir<<23)+ \ + (BKSD_gpio24_dir<<24)+ (BKSD_gpio25_dir<<25)+ (BKSD_gpio26_dir<<26)+ (BKSD_gpio27_dir<<27); +#define BKSD_GPBDIR (BKSD_gpio32_dir )+ (BKSD_gpio33_dir<<1) + (BKSD_gpio34_dir<<2 )+ \ + (BKSD_gpio48_dir<<16)+ (BKSD_gpio49_dir<<17)+ (BKSD_gpio50_dir<<18)+ (BKSD_gpio51_dir<<19)+ \ + (BKSD_gpio52_dir<<20)+ (BKSD_gpio53_dir<<21)+ \ + (BKSD_gpio58_dir<<26)+ (BKSD_gpio59_dir<<27)+ \ + (BKSD_gpio60_dir<<28)+ (BKSD_gpio61_dir<<29)+ (BKSD_gpio62_dir<<30)+ (BKSD_gpio63_dir<<31); + +#define PULT_GPADIR (PULT_gpio00_dir ) + (PULT_gpio01_dir<<1) + (PULT_gpio02_dir<<2) + (PULT_gpio03_dir<<3) + \ + (PULT_gpio04_dir<<4) + (PULT_gpio05_dir<<5) + (PULT_gpio06_dir<<6) + (PULT_gpio07_dir<<7) + \ + (PULT_gpio08_dir<<8) + (PULT_gpio09_dir<<9) + (PULT_gpio10_dir<<10)+ (PULT_gpio11_dir<<11)+ \ + (PULT_gpio19_dir<<19)+ \ + (PULT_gpio20_dir<<20)+ (PULT_gpio21_dir<<21)+ (PULT_gpio22_dir<<22)+ (PULT_gpio23_dir<<23)+ \ + (PULT_gpio24_dir<<24)+ (PULT_gpio25_dir<<25)+ (PULT_gpio26_dir<<26)+ (PULT_gpio27_dir<<27); +#define PULT_GPBDIR (PULT_gpio32_dir )+ (PULT_gpio33_dir<<1) + (PULT_gpio34_dir<<2 )+ \ + (PULT_gpio48_dir<<16)+ (PULT_gpio49_dir<<17)+ (PULT_gpio50_dir<<18)+ (PULT_gpio51_dir<<19)+ \ + (PULT_gpio52_dir<<20)+ (PULT_gpio53_dir<<21)+ \ + (PULT_gpio58_dir<<26)+ (PULT_gpio59_dir<<27)+ \ + (PULT_gpio60_dir<<28)+ (PULT_gpio61_dir<<29)+ (PULT_gpio62_dir<<30)+ (PULT_gpio63_dir<<31); + +#define VEPP_GPADIR (VEPP_gpio00_dir ) + (VEPP_gpio01_dir<<1) + (VEPP_gpio02_dir<<2) + (VEPP_gpio03_dir<<3) + \ + (VEPP_gpio04_dir<<4) + (VEPP_gpio05_dir<<5) + (VEPP_gpio06_dir<<6) + (VEPP_gpio07_dir<<7) + \ + (VEPP_gpio08_dir<<8) + (VEPP_gpio09_dir<<9) + (VEPP_gpio10_dir<<10)+ (VEPP_gpio11_dir<<11)+ \ + (VEPP_gpio19_dir<<19)+ \ + (VEPP_gpio20_dir<<20)+ (VEPP_gpio21_dir<<21)+ (VEPP_gpio22_dir<<22)+ (VEPP_gpio23_dir<<23)+ \ + (VEPP_gpio24_dir<<24)+ (VEPP_gpio25_dir<<25)+ (VEPP_gpio26_dir<<26)+ (VEPP_gpio27_dir<<27); +#define VEPP_GPBDIR (VEPP_gpio32_dir )+ (VEPP_gpio33_dir<<1) + (VEPP_gpio34_dir<<2 )+ \ + (VEPP_gpio48_dir<<16)+ (VEPP_gpio49_dir<<17)+ (VEPP_gpio50_dir<<18)+ (VEPP_gpio51_dir<<19)+ \ + (VEPP_gpio52_dir<<20)+ (VEPP_gpio53_dir<<21)+ \ + (VEPP_gpio58_dir<<26)+ (VEPP_gpio59_dir<<27)+ \ + (VEPP_gpio60_dir<<28)+ (VEPP_gpio61_dir<<29)+ (VEPP_gpio62_dir<<30)+ (VEPP_gpio63_dir<<31); + +#define ISOL_GPADIR (ISOL_gpio00_dir ) + (ISOL_gpio01_dir<<1) + (ISOL_gpio02_dir<<2) + (ISOL_gpio03_dir<<3) + \ + (ISOL_gpio04_dir<<4) + (ISOL_gpio05_dir<<5) + (ISOL_gpio06_dir<<6) + (ISOL_gpio07_dir<<7) + \ + (ISOL_gpio08_dir<<8) + (ISOL_gpio09_dir<<9) + (ISOL_gpio10_dir<<10)+ (ISOL_gpio11_dir<<11)+ \ + (ISOL_gpio19_dir<<19)+ \ + (ISOL_gpio20_dir<<20)+ (ISOL_gpio21_dir<<21)+ (ISOL_gpio22_dir<<22)+ (ISOL_gpio23_dir<<23)+ \ + (ISOL_gpio24_dir<<24)+ (ISOL_gpio25_dir<<25)+ (ISOL_gpio26_dir<<26)+ (ISOL_gpio27_dir<<27); +#define ISOL_GPBDIR (ISOL_gpio32_dir )+ (ISOL_gpio33_dir<<1) + (ISOL_gpio34_dir<<2 )+ \ + (ISOL_gpio48_dir<<16)+ (ISOL_gpio49_dir<<17)+ (ISOL_gpio50_dir<<18)+ (ISOL_gpio51_dir<<19)+ \ + (ISOL_gpio52_dir<<20)+ (ISOL_gpio53_dir<<21)+ \ + (ISOL_gpio58_dir<<26)+ (ISOL_gpio59_dir<<27)+ \ + (ISOL_gpio60_dir<<28)+ (ISOL_gpio61_dir<<29)+ (ISOL_gpio62_dir<<30)+ (ISOL_gpio63_dir<<31); + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/RS485.c b/RS485.c new file mode 100644 index 0000000..4e57f4a --- /dev/null +++ b/RS485.c @@ -0,0 +1,553 @@ +/****************************************************************/ +/* TMS320C32 */ +/* ====== BIOS, , ====== */ +/* () 1998-2000 . */ +/**************************************************************** + RS485. + **************************************************************** + * UART * + ****************************************************************/ + +//#include "big_dsp_module.h" + + +#include "DSP2833x_Device.h" +#include "DSP2833x_SWPrioritizedIsrLevels.h" + +#include "RS485.h" +#include "bios_dsp.h" +#include "cntrl_adr.h" + +#include "tools.h" + +//#include "flash_tools.h" + + +RS_DATA rs_a,rs_b; + +unsigned int RS_Len[70]={0}; + +static char size_cmd15=1; + +void RS_RX_Handler(RS_DATA *rs_arr); +void RS_TX_Handler(RS_DATA *rs_arr); + +/** UART - */ +interrupt void RSA_RX_Handler(void) +{ +// Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG91; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + clear_timer_rs_live(&rs_a); + RS_RX_Handler(&rs_a); + +// Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +} + +interrupt void RSB_RX_Handler(void) +{ +// Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG93; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + clear_timer_rs_live(&rs_b); + RS_RX_Handler(&rs_b); + +// Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +} + +interrupt void RSA_TX_Handler(void) +{ +// Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG92; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + clear_timer_rs_live(&rs_a); + RS_TX_Handler(&rs_a); + +// Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +} + +interrupt void RSB_TX_Handler(void) +{ +// Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG94; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + clear_timer_rs_live(&rs_b); + RS_TX_Handler(&rs_b); + +// Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +} + +/** UART - */ +void RS_RX_Handler(RS_DATA *rs_arr) +{ + char Rc; + char RS_BytePtr; + +// led1_on(); + + for(;;) // 'goto' + { + if(!rs_arr->SciRegs->SCIRXST.bit.RXRDY) // Receiver ready flag + { + PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1; // Clear INT flag + return; // + } + + Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT; // + + if(rs_arr->SciRegs->SCIRXST.bit.RXERROR) // Receiver error flag + { + rs_arr->SciRegs->SCICTL1.bit.SWRESET=0; // Reset SCI + rs_arr->SciRegs->SCICTL1.bit.SWRESET=1; // Relinquish SCI from Reset + + continue; + } + + if(rs_arr->RS_DataReady) continue; // + + if (rs_arr->RS_Flag9bit==1) // RS485???????? + { + // + rs_arr->RS_FlagBegin = true; // + rs_arr->RS_RecvLen = 0; + rs_arr->RS_FlagSkiping = false; + rs_arr->RS_HeaderCnt = 0; + rs_arr->RS_Cmd = 0; + } + + if(rs_arr->RS_FlagSkiping) continue; // + + if (rs_arr->RS_FlagBegin) // + { + if (rs_arr->RS_HeaderCnt==0) // + { + if( (Rc == CNTRL_ADDR_UNIVERSAL) || (Rc == CNTRL_ADDR && CNTRL_ADDR!=0) || ((Rc == rs_arr->addr_answer) && rs_arr->flag_LEADING) + || ((Rc == ADDR_FOR_ALL && ADDR_FOR_ALL!=0) && !rs_arr->flag_LEADING)) + + { + rs_arr->addr_recive=Rc; // + rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // + RS_SetBitMode(rs_arr,8); // 8- + } + else + { + rs_arr->RS_FlagSkiping = true; // + rs_arr->RS_FlagBegin = false; // 9- +// led1_off(); + } + } + else + { + rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // .. + + if (rs_arr->RS_HeaderCnt == 7 && rs_arr->RS_Cmd==CMD_MODBUS_16 && !rs_arr->flag_LEADING) + { + RS_Len[CMD_MODBUS_16] = (10+Rc); + } + + // - + if (rs_arr->RS_HeaderCnt == 2) + { + rs_arr->RS_Cmd = Rc; + // + // CMD_LOAD - + // CMD_STD_ANS - + if ((rs_arr->RS_Cmd < CMD_MODBUS_3) || (rs_arr->RS_Cmd > CMD_STD_ANS) || (RS_Len[rs_arr->RS_Cmd]<3) + || ((rs_arr->RS_Cmd == CMD_LOAD)&&(rs_arr->RS_PrevCmd != CMD_INITLOAD)) + ) + { + RS_SetBitMode(rs_arr,9); // 9- RS485? + rs_arr->RS_HeaderCnt = 0; // + rs_arr->RS_FlagBegin = true; + rs_arr->RS_FlagSkiping = false; + rs_arr->RS_Cmd=0; +// led1_off(); + continue; + } + if (rs_arr->RS_Cmd == CMD_LOAD) // + rs_arr->RS_FlagBegin = false;// + } + + if( (rs_arr->RS_HeaderCnt >= RS_Len[rs_arr->RS_Cmd]) || + (rs_arr->RS_HeaderCnt >= sizeof(rs_arr->RS_Header))) + { // + RS_SetBitMode(rs_arr,9); // 9- RS485? + rs_arr->RS_FlagBegin = false; + rs_arr->RS_FlagSkiping = true; + rs_arr->RS_DataReady = true; + rs_arr->RS_Cmd=0; +// led1_off(); + } } } + else // + { + if(rs_arr->pRS_RecvPtr<(unsigned int *)Rec_Bloc_Begin || rs_arr->pRS_RecvPtr>(unsigned int *)Rec_Bloc_End) + { + rs_arr->pRS_RecvPtr = (unsigned int *)Rec_Bloc_Begin; // , + rs_arr->pRecvPtr = (unsigned int *)Rec_Bloc_Begin; // , + } + if(rs_arr->RS_PrevCmd != CMD_INITLOAD) continue; // - + + if(rs_arr->RS_DataReady) // , + { // + rs_arr->RS_FlagSkiping = true; // +// led1_off(); + continue; + } + RS_BytePtr = rs_arr->RS_RecvLen++ % 2; + if(RS_BytePtr) *rs_arr->pRS_RecvPtr++ |= Rc; // + else *rs_arr->pRS_RecvPtr = Rc<<8; + + if(rs_arr->RS_Length <= rs_arr->RS_RecvLen) // + { + rs_arr->RS_PrevCmd = rs_arr->RS_Header[1] = CMD_LOAD; + RS_SetBitMode(rs_arr,9); // 9- RS485? + rs_arr->RS_FlagSkiping = true; // + rs_arr->RS_DataReady = true; // - +// led1_off(); +} } } } + +/** UART - */ +void RS_TX_Handler(RS_DATA *rs_arr) +{ + char RS_BytePtr; +// unsigned int i; + + if(rs_arr->RS_SendBlockMode == BM_CHAR32) + { + if(++rs_arr->RS_SendLen >= rs_arr->RS_SLength) + { + enableUARTInt(rs_arr); /* */ + } + SCI_send(rs_arr,*(rs_arr->pRS_SendPtr++)); + + if(rs_arr->RS_SendLen >= rs_arr->RS_SLength) + { + RS_Wait4OK(rs_arr); +// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* PC */ + + RS_SetBitMode(rs_arr,9); /* 9- RS485?*/ + RS_Line_to_receive(rs_arr); /* RS485 */ + + rs_arr->flag_TIMEOUT_to_Send=false; /* */ + } + } + else /* BM_PACKED */ + { + + RS_BytePtr = (rs_arr->RS_SendLen++) % 2; + if(rs_arr->RS_SendLen >= rs_arr->RS_SLength) + { + enableUARTInt(rs_arr); /* */ + } + if(RS_BytePtr) SCI_send(rs_arr, LOBYTE( *(rs_arr->pRS_SendPtr++) )); + else SCI_send(rs_arr, HIBYTE( *rs_arr->pRS_SendPtr )); + + if(rs_arr->RS_SendLen >= rs_arr->RS_SLength) + { + RS_Wait4OK(rs_arr); +// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* PC */ +// RS_SetBitMode(rs_arr,9); /* 9- RS485?*/ +// RS_Line_to_receive(); /* RS485 */ + + } + } + + PieCtrlRegs.PIEACK.bit.ACK9 |= 1; +// rs_arr->SciRegs->SCIFFTX.bit.TXINTCLR=1; // Clear INT flag +} + +/** */ +void setup_arr_cmd_length() +{ + int i; + + for (i=0;i<70;i++) RS_Len[i]=i; + + RS_Len[CMD_LOAD] = 12; + RS_Len[CMD_UPLOAD] = 12; + RS_Len[CMD_RUN] = 8; + RS_Len[CMD_XFLASH] = 9; + RS_Len[CMD_TFLASH] = 16; + RS_Len[CMD_PEEK] = 8; + RS_Len[CMD_POKE] = 12; + RS_Len[CMD_INITLOAD] = 12; + RS_Len[CMD_INIT] = 5; + RS_Len[CMD_VECTOR] = size_cmd15-2; //sizeof(CMD_TO_TMS)-2; + RS_Len[CMD_STD] = size_cmd15-1; //sizeof(CMD_TO_TMS)-1; + RS_Len[CMD_IMPULSE] = 8; + RS_Len[CMD_MODBUS_3] = 8; + RS_Len[CMD_MODBUS_6] = 8; + RS_Len[CMD_MODBUS_16] = 13; + RS_Len[CMD_MODBUS_15] = 27; + RS_Len[CMD_EXTEND] = 18; +} + +/** / */ +void RS_SetBitMode(RS_DATA *rs_arr,int n) +{ + if(n == 8) + { + RS_SetLineMode(rs_arr,8,'N',1); /* */ + rs_arr->RS_Flag9bit=0; + } + if(n == 9) + { + RS_SetLineMode(rs_arr,8,'N',1); /* */ + rs_arr->RS_Flag9bit=1; +} } + +/** . + 32- 0. + @precondition - RS_TRANSMIT_INTR + @param buf + @param len + @see RS_BSend, RS_TRANSMIT_INTR */ +int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf,unsigned long len) +{ + unsigned int i; + for (i=0; i <= 30000; i++){} /* PC */ + + RS_Line_to_send(rs_arr); /* RS485 */ + + for (i=0; i <= 10000; i++){} /* PC */ + + rs_arr->RS_SLength = len; /* */ + rs_arr->pRS_SendPtr = pBuf + 1; + + rs_arr->RS_SendBlockMode = BM_CHAR32; + + RS_Wait4OK(rs_arr); /* */ + RS_SetBitMode(rs_arr,8); /* 8- */ + + rs_arr->RS_SendLen = 1; /* */ + if(len > 1) + { + enableUARTIntW(rs_arr); /* */ + SCI_send(rs_arr, *pBuf); // + } + else + { + SCI_send(rs_arr, *pBuf); // + RS_Wait4OK(rs_arr); /* */ + for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* PC */ + RS_SetBitMode(rs_arr,9); /* 9- */ + RS_Line_to_receive(rs_arr); /* RS485 */ + } + return 0; +} + +// +int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len) +{ + + RS_Line_to_send(rs_arr); // RS485 + + rs_arr->RS_SLength = len; // + rs_arr->pRS_SendPtr = pBuf; + rs_arr->RS_SendBlockMode = BM_PACKED; + + RS_Wait4OK(rs_arr); // + RS_SetBitMode(rs_arr,8); /* 8- */ + + rs_arr->RS_SendLen = 1; // + + enableUARTIntW(rs_arr); /* */ + + SCI_send(rs_arr,HIBYTE(*pBuf));// + + return 0; +} + +/** . + @param speed RS */ +/** . + @param speed RS */ +void RS_SetLineSpeed(RS_DATA *rs_arr,unsigned long speed) +{ + long SciBaud; + + SciBaud = LSPCLK/(speed*8.0); + +// if((SciBaud-(unsigned int)SciBaud)>0.5) SciBaud++; + + rs_arr->SciRegs->SCIHBAUD = HIBYTE((int)SciBaud); + rs_arr->SciRegs->SCILBAUD = LOBYTE((int)SciBaud); +} + + +/** */ +void create_uart_vars(char size_cmd15_set) +{ + size_cmd15=size_cmd15_set; + rs_a.commnumber=COM_1; + rs_b.commnumber=COM_2; +} + + + +/** */ + +void setup_uart(char commnumber, unsigned long speed_baud) +{ + volatile struct SCI_REGS *SciRegs; + RS_DATA *rs_arr; + + if(commnumber==COM_1) + { + rs_a.SciRegs = &SciaRegs; + rs_arr = &rs_a; + + EALLOW; + + GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // SCITXDA - SCI-A transmit(O) + GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // SCIRXDA - SCI-A receive (I) + + PieVectTable.SCIRXINTA = &RSA_RX_Handler; + PieVectTable.SCITXINTA = &RSA_TX_Handler; + PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, INT1 + PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE Group 9, INT2 + IER |= M_INT9; // Enable CPU INT + EDIS; + } + + if(commnumber==COM_2) + { + rs_b.SciRegs = &ScibRegs; + rs_arr = &rs_b; + + EALLOW; + + GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 2; // SCITXDB - SCI-B transmit(O) + GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 2; // SCIRXDB - SCI-B receive (I) + + GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO 34 - general purpose I/O 34 (default) + GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // Configures the GPIO pin as an output + + PieVectTable.SCIRXINTB = &RSB_RX_Handler; + PieVectTable.SCITXINTB = &RSB_TX_Handler; + + PieCtrlRegs.PIEIER9.bit.INTx3=1; // PIE Group 9, INT3 + PieCtrlRegs.PIEIER9.bit.INTx4=1; // PIE Group 9, INT4 + IER |= M_INT9; // Enable CPU INT + EDIS; + } + + rs_arr->commnumber = commnumber; + SciRegs = rs_arr->SciRegs; + RS_SetLineMode(rs_arr,8,'N',1); + +// enable TX, RX, internal SCICLK, +// Disable RX ERR, SLEEP, TXWAKE + + SciRegs->SCIFFCT.bit.ABDCLR=1; + SciRegs->SCIFFCT.bit.CDC=0; + + SciRegs->SCICTL1.bit.RXERRINTENA=0; + SciRegs->SCICTL1.bit.SWRESET=0; + SciRegs->SCICTL1.bit.TXWAKE=0; + SciRegs->SCICTL1.bit.SLEEP=0; + SciRegs->SCICTL1.bit.TXENA=1; + SciRegs->SCICTL1.bit.RXENA=1; + + SciRegs->SCIFFTX.bit.SCIFFENA=0; // fifo off + SciRegs->SCIFFRX.bit.RXFFIL=1; // + + setup_arr_cmd_length(); + RS_SetLineSpeed(rs_arr,speed_baud); // + RS_Line_to_receive(rs_arr); // RS485 + enableUARTInt(rs_arr); // UART + RS_SetBitMode(rs_arr,9); + rs_arr->RS_PrevCmd = 0; // + rs_arr->flag_TIMEOUT_to_Send = 0; + rs_arr->flag_LEADING = 0; + + SciRegs->SCIFFRX.bit.RXFFINTCLR=1; // Clear INT flag + SciRegs->SCICTL1.bit.SWRESET=1; // Relinquish SCI from Reset +} + +/** . + @param bit + @param parity (N,O,E,M,S) + @param stop */ +void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop) +{ + volatile struct SCI_REGS *SciRegs; +/* +SCICCR - SCI Communication Control Register +Bit Bit Name Designation Functions +2-0 SCI CHAR2-0 SCICHAR Select the character (data) length (one to eight bits). +3 ADDR/IDLE MODE ADDRIDLE_MODE The idle-line mode (0) is usually used for normal communications because the address-bit mode adds an extra bit to the frame. The idle-line mode does not add this extra bit and is compatible with RS-232 type communications. +4 LOOP BACK ENABLE LOOPBKENA This bit enables (1) the Loop Back test mode where the Tx pin is internally connected to the Rx pin. +5 PARITY ENABLE PARITYENA Enables the parity function if set to 1, or disables the parity function if cleared to 0. +6 EVEN/ODD PARITY PARITY If parity is enabled, selects odd parity if cleared to 0 or even parity if set to 1. +7 STOP BITS STOPBITS Determines the number of stop bits transmitted-one stop bit if cleared to 0 or two stop bits if set to 1. +*/ + + SciRegs = rs_arr->SciRegs; + + if(bit>0 && bit<9) SciRegs->SCICCR.bit.SCICHAR = bit-1; + + switch(parity) + { + case 'N': SciRegs->SCICCR.bit.PARITYENA = 0; + break; + case 'O': SciRegs->SCICCR.bit.PARITYENA = 1; + SciRegs->SCICCR.bit.PARITY = 0; + break; + case 'E': SciRegs->SCICCR.bit.PARITYENA = 1; + SciRegs->SCICCR.bit.PARITY = 1; + break; + } + + if (stop==1) SciRegs->SCICCR.bit.STOPBITS = 0; + if (stop==2) SciRegs->SCICCR.bit.STOPBITS = 1; + + SciRegs->SCICCR.bit.LOOPBKENA = 0; //0 + SciRegs->SCICCR.bit.ADDRIDLE_MODE = 0; +} + +void clear_timer_rs_live(RS_DATA *rs_arr) +{ + rs_arr->time_wait_rs_out=0; +} + +/* RS */ +void test_rs_live(RS_DATA *rs_arr) +{ +/* if (rs_arr->time_wait_rs_out < RS_TIME_OUT) + rs_arr->time_wait_rs_out++; + else + { + rs_arr->time_wait_rs_out=0; + RS_Line_to_receive(rs_arr); // RS485 + RS_SetBitMode(rs_arr,9); +}*/ } diff --git a/RS485.h b/RS485.h new file mode 100644 index 0000000..3e4ca38 --- /dev/null +++ b/RS485.h @@ -0,0 +1,138 @@ +/****************************************************************/ +/* TMS320C32 */ +/* ====== BIOS, , ====== */ +/* () 1998-2000 . */ +/**************************************************************** + RS485.h + **************************************************************** + * UART * + ****************************************************************/ +#ifndef _RS485 +#define _RS485 + +#ifdef __cplusplus + extern "C" { +#endif + +//#include "DSP2833x_Device.h" // DSP281x Headerfile Include File +//#include "DSP2833x_Sci.h" +//#include "cntrl_adr.h" +//#include "params.h" + +#define COM_1 1 +#define COM_2 2 + +#define MAX_RECEIVE_LENGTH 400 // 80 //150 +#define MAX_SEND_LENGTH 400 //150 + +#define TIME_WAIT_RS_BYTE_OUT 1000 +#define TIME_WAIT_RS_LOST_BYTE 100 +#define RS_TIME_OUT (SECOND*10) + +#define Rec_Bloc_Begin 0x200000 +#define Rec_Bloc_End 0x2F0000 +#define Rec_Bloc_Length (Rec_Bloc_End-Rec_Bloc_Begin) + +/* Message RS declaration */ +typedef struct +{ + volatile struct SCI_REGS *SciRegs; + + unsigned int commnumber; // + unsigned long RS_Length; // + + unsigned int *pRS_RecvPtr; // + unsigned int *pRS_SendPtr; // + unsigned int *pRecvPtr; + + unsigned int RS_PrevCmd; // + unsigned int RS_Cmd; // + unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // + unsigned int flag_TIMEOUT_to_Send; // + unsigned int flag_TIMEOUT_to_Receive; // + unsigned int RS_DataReady; // RS + unsigned int buffer[MAX_SEND_LENGTH]; // RS + + unsigned int addr_answer; // + unsigned int addr_recive; // + unsigned int flag_LEADING; // ( ) + unsigned long RS_RecvLen; + unsigned long RS_SLength; // + unsigned long RS_SendLen; // + char RS_SendBlockMode; // + char RS_Flag9bit; // RS485???????? + int BS_LoadOK; // + int RS_FlagBegin; + int RS_HeaderCnt; + int RS_FlagSkiping; + unsigned long curr_baud; + unsigned long time_wait_rs_out; + +} RS_DATA; + +extern RS_DATA rs_a,rs_b; + +extern unsigned int + RS_Len[70]; /* () + 1 */ + +interrupt void RSA_RX_Handler(void); +interrupt void RSA_TX_Handler(void); +interrupt void RSB_RX_Handler(void); +interrupt void RSB_TX_Handler(void); + +/* rs_a,rs_b*/ +void create_uart_vars(char size_cmd15); + +/** , */ +/** / */ +void RS_SetBitMode(RS_DATA *rs_arr, int n); + +/** . + 32- 0. + @precondition - RS_TRANSMIT_INTR + @param buf + @param len + @see RS_BSend, RS_TRANSMIT_INTR +*/ +int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len); + +/** . + @precondition - RS_TRANSMIT_INTR + @param buf + @param len 8- + @see RS_Send, RS_TRANSMIT_INTR + */ +int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len); + +/** */ +void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - */ + +void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop); +void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed); + +// Transmit a character from the SCI' +#define SCI_send(x,y) x->SciRegs->SCITXBUF=(unsigned char)(y) + +// UART +// wait for TRDY =1 for empty state +#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY)) + +/** */ +#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1; + +/** */ +#define RS_Line_to_send(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0; + +/** UART */ +#define enableUARTInt(x) x->SciRegs->SCICTL2.all=2 +#define enableUARTIntW(x) x->SciRegs->SCICTL2.all=1 + +void clear_timer_rs_live(RS_DATA *rs_arr); +void test_rs_live(RS_DATA *rs_arr); + +#ifdef __cplusplus + } +#endif + +#endif /* _RS485 */ + diff --git a/aaa/gel/DSP2833x_DualMap_EPWM.gel b/aaa/gel/DSP2833x_DualMap_EPWM.gel deleted file mode 100644 index e08455b..0000000 --- a/aaa/gel/DSP2833x_DualMap_EPWM.gel +++ /dev/null @@ -1,237 +0,0 @@ -/* -/* TI File $Revision: /main/1 $ */ -/* Checkin $Date: May 7, 2008 13:07:07 $ */ -/***********************************************************************/ -/* File: DSP2833x_DualMap_EPWM.gel -/* -/* Description: -/* Adds dual-mapped EPWM registers to the GEL menu in -/* Code Composer Studio and allows user to enable dual-mapping of -/* EPWM registers to Peripheral Frame 3 (DMA-accessible) register -/* space -//##################################################################### -// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ -// $Release Date: August 1, 2008 $ -//##################################################################### -*/ - -/********************************************************************/ -/* Dual-Mapped Enhanced PWM Registers */ -/********************************************************************/ - -/* Add a space line to the GEL menu */ -menuitem "___________________________________"; -hotmenu ___() {} - -menuitem "Dual-Mapped ePWM Registers"; -hotmenu Enable_ePWM_Dual_Mapping () -{ - *0x702E = (*0x702E) | 0x0001; /* MAPCNF[MAPEPWM] = 1 */ -} -hotmenu ePWM1_DualMapped_All_Regs() -{ - GEL_WatchAdd("*0x5800,x","ePWM1 TBCTL"); - GEL_WatchAdd("*0x5801,x","ePWM1 TBSTS"); - GEL_WatchAdd("*0x5802,x","ePWM1 TBPHSHR"); - GEL_WatchAdd("*0x5803,x","ePWM1 TBPHS"); - GEL_WatchAdd("*0x5804,x","ePWM1 TBCTR"); - GEL_WatchAdd("*0x5805,x","ePWM1 TBPRD"); - GEL_WatchAdd("*0x5807,x","ePWM1 CMPCTL"); - GEL_WatchAdd("*0x5808,x","ePWM1 CMPAHR"); - GEL_WatchAdd("*0x5809,x","ePWM1 CMPA"); - GEL_WatchAdd("*0x580A,x","ePWM1 CMPB"); - GEL_WatchAdd("*0x580B,x","ePWM1 AQCTLA"); - GEL_WatchAdd("*0x580C,x","ePWM1 AQCTLB"); - GEL_WatchAdd("*0x580D,x","ePWM1 AQSFRC"); - GEL_WatchAdd("*0x580E,x","ePWM1 AQCSFRC"); - GEL_WatchAdd("*0x580F,x","ePWM1 DBCTL"); - GEL_WatchAdd("*0x5810,x","ePWM1 DBRED"); - GEL_WatchAdd("*0x5811,x","ePWM1 DBFED"); - GEL_WatchAdd("*0x5812,x","ePWM1 TZSEL"); - GEL_WatchAdd("*0x5813,x","ePWM1 TZDCSEL"); - GEL_WatchAdd("*0x5814,x","ePWM1 TZCTL"); - GEL_WatchAdd("*0x5815,x","ePWM1 TZEINT"); - GEL_WatchAdd("*0x5816,x","ePWM1 TZFLG"); - GEL_WatchAdd("*0x5817,x","ePWM1 TZCLR"); - GEL_WatchAdd("*0x5818,x","ePWM1 TZFRC"); - GEL_WatchAdd("*0x5819,x","ePWM1 ETSEL"); - GEL_WatchAdd("*0x581A,x","ePWM1 ETPS"); - GEL_WatchAdd("*0x581B,x","ePWM1 ETFLG"); - GEL_WatchAdd("*0x581C,x","ePWM1 ETCLR"); - GEL_WatchAdd("*0x581D,x","ePWM1 ETFRC"); - GEL_WatchAdd("*0x581E,x","ePWM1 PCCTL"); - GEL_WatchAdd("*0x5820,x","ePWM1 HRCNFG"); -} - -hotmenu ePWM2_DualMapped_All_Regs() -{ - GEL_WatchAdd("*0x5840,x","ePWM2 TBCTL"); - GEL_WatchAdd("*0x5841,x","ePWM2 TBSTS"); - GEL_WatchAdd("*0x5842,x","ePWM2 TBPHSHR"); - GEL_WatchAdd("*0x5843,x","ePWM2 TBPHS"); - GEL_WatchAdd("*0x5844,x","ePWM2 TBCTR"); - GEL_WatchAdd("*0x5845,x","ePWM2 TBPRD"); - GEL_WatchAdd("*0x5847,x","ePWM2 CMPCTL"); - GEL_WatchAdd("*0x5848,x","ePWM2 CMPAHR"); - GEL_WatchAdd("*0x5849,x","ePWM2 CMPA"); - GEL_WatchAdd("*0x584A,x","ePWM2 CMPB"); - GEL_WatchAdd("*0x584B,x","ePWM2 AQCTLA"); - GEL_WatchAdd("*0x584C,x","ePWM2 AQCTLB"); - GEL_WatchAdd("*0x584D,x","ePWM2 AQSFRC"); - GEL_WatchAdd("*0x584E,x","ePWM2 AQCSFRC"); - GEL_WatchAdd("*0x584F,x","ePWM2 DBCTL"); - GEL_WatchAdd("*0x5850,x","ePWM2 DBRED"); - GEL_WatchAdd("*0x5851,x","ePWM2 DBFED"); - GEL_WatchAdd("*0x5852,x","ePWM2 TZSEL"); - GEL_WatchAdd("*0x5853,x","ePWM2 TZDCSEL"); - GEL_WatchAdd("*0x5854,x","ePWM2 TZCTL"); - GEL_WatchAdd("*0x5855,x","ePWM2 TZEINT"); - GEL_WatchAdd("*0x5856,x","ePWM2 TZFLG"); - GEL_WatchAdd("*0x5857,x","ePWM2 TZCLR"); - GEL_WatchAdd("*0x5858,x","ePWM2 TZFRC"); - GEL_WatchAdd("*0x5859,x","ePWM2 ETSEL"); - GEL_WatchAdd("*0x585A,x","ePWM2 ETPS"); - GEL_WatchAdd("*0x585B,x","ePWM2 ETFLG"); - GEL_WatchAdd("*0x585C,x","ePWM2 ETCLR"); - GEL_WatchAdd("*0x585D,x","ePWM2 ETFRC"); - GEL_WatchAdd("*0x585E,x","ePWM2 PCCTL"); - GEL_WatchAdd("*0x5860,x","ePWM2 HRCNFG"); -} -hotmenu ePWM3_DualMapped_All_Regs() -{ - GEL_WatchAdd("*0x5880,x","ePWM3 TBCTL"); - GEL_WatchAdd("*0x5881,x","ePWM3 TBSTS"); - GEL_WatchAdd("*0x5882,x","ePWM3 TBPHSHR"); - GEL_WatchAdd("*0x5883,x","ePWM3 TBPHS"); - GEL_WatchAdd("*0x5884,x","ePWM3 TBCTR"); - GEL_WatchAdd("*0x5885,x","ePWM3 TBPRD"); - GEL_WatchAdd("*0x5887,x","ePWM3 CMPCTL"); - GEL_WatchAdd("*0x5888,x","ePWM3 CMPAHR"); - GEL_WatchAdd("*0x5889,x","ePWM3 CMPA"); - GEL_WatchAdd("*0x588A,x","ePWM3 CMPB"); - GEL_WatchAdd("*0x588B,x","ePWM3 AQCTLA"); - GEL_WatchAdd("*0x588C,x","ePWM3 AQCTLB"); - GEL_WatchAdd("*0x588D,x","ePWM3 AQSFRC"); - GEL_WatchAdd("*0x588E,x","ePWM3 AQCSFRC"); - GEL_WatchAdd("*0x588F,x","ePWM3 DBCTL"); - GEL_WatchAdd("*0x5890,x","ePWM3 DBRED"); - GEL_WatchAdd("*0x5891,x","ePWM3 DBFED"); - GEL_WatchAdd("*0x5892,x","ePWM3 TZSEL"); - GEL_WatchAdd("*0x5893,x","ePWM3 TZDCSEL"); - GEL_WatchAdd("*0x5894,x","ePWM3 TZCTL"); - GEL_WatchAdd("*0x5895,x","ePWM3 TZEINT"); - GEL_WatchAdd("*0x5896,x","ePWM3 TZFLG"); - GEL_WatchAdd("*0x5897,x","ePWM3 TZCLR"); - GEL_WatchAdd("*0x5898,x","ePWM3 TZFRC"); - GEL_WatchAdd("*0x5899,x","ePWM3 ETSEL"); - GEL_WatchAdd("*0x589A,x","ePWM3 ETPS"); - GEL_WatchAdd("*0x589B,x","ePWM3 ETFLG"); - GEL_WatchAdd("*0x589C,x","ePWM3 ETCLR"); - GEL_WatchAdd("*0x589D,x","ePWM3 ETFRC"); - GEL_WatchAdd("*0x589E,x","ePWM3 PCCTL"); - GEL_WatchAdd("*0x58A0,x","ePWM3 HRCNFG"); -} -hotmenu ePWM4_DualMapped_All_Regs() -{ - GEL_WatchAdd("*0x58C0,x","ePWM4 TBCTL"); - GEL_WatchAdd("*0x58C1,x","ePWM4 TBSTS"); - GEL_WatchAdd("*0x58C2,x","ePWM4 TBPHSHR"); - GEL_WatchAdd("*0x58C3,x","ePWM4 TBPHS"); - GEL_WatchAdd("*0x58C4,x","ePWM4 TBCTR"); - GEL_WatchAdd("*0x58C5,x","ePWM4 TBPRD"); - GEL_WatchAdd("*0x58C7,x","ePWM4 CMPCTL"); - GEL_WatchAdd("*0x58C8,x","ePWM4 CMPAHR"); - GEL_WatchAdd("*0x58C9,x","ePWM4 CMPA"); - GEL_WatchAdd("*0x58CA,x","ePWM4 CMPB"); - GEL_WatchAdd("*0x58CB,x","ePWM4 AQCTLA"); - GEL_WatchAdd("*0x58CC,x","ePWM4 AQCTLB"); - GEL_WatchAdd("*0x58CD,x","ePWM4 AQSFRC"); - GEL_WatchAdd("*0x58CE,x","ePWM4 AQCSFRC"); - GEL_WatchAdd("*0x58CF,x","ePWM4 DBCTL"); - GEL_WatchAdd("*0x58D0,x","ePWM4 DBRED"); - GEL_WatchAdd("*0x58D1,x","ePWM4 DBFED"); - GEL_WatchAdd("*0x58D2,x","ePWM4 TZSEL"); - GEL_WatchAdd("*0x58D3,x","ePWM4 TZDCSEL"); - GEL_WatchAdd("*0x58D4,x","ePWM4 TZCTL"); - GEL_WatchAdd("*0x58D5,x","ePWM4 TZEINT"); - GEL_WatchAdd("*0x58D6,x","ePWM4 TZFLG"); - GEL_WatchAdd("*0x58D7,x","ePWM4 TZCLR"); - GEL_WatchAdd("*0x58D8,x","ePWM4 TZFRC"); - GEL_WatchAdd("*0x58D9,x","ePWM4 ETSEL"); - GEL_WatchAdd("*0x58DA,x","ePWM4 ETPS"); - GEL_WatchAdd("*0x58DB,x","ePWM4 ETFLG"); - GEL_WatchAdd("*0x58DC,x","ePWM4 ETCLR"); - GEL_WatchAdd("*0x58DD,x","ePWM4 ETFRC"); - GEL_WatchAdd("*0x58DE,x","ePWM4 PCCTL"); - GEL_WatchAdd("*0x58E0,x","ePWM4 HRCNFG"); -} -hotmenu ePWM5_DualMapped_All_Regs() -{ - GEL_WatchAdd("*0x5900,x","ePWM5 TBCTL"); - GEL_WatchAdd("*0x5901,x","ePWM5 TBSTS"); - GEL_WatchAdd("*0x5902,x","ePWM5 TBPHSHR"); - GEL_WatchAdd("*0x5903,x","ePWM5 TBPHS"); - GEL_WatchAdd("*0x5904,x","ePWM5 TBCTR"); - GEL_WatchAdd("*0x5905,x","ePWM5 TBPRD"); - GEL_WatchAdd("*0x5907,x","ePWM5 CMPCTL"); - GEL_WatchAdd("*0x5908,x","ePWM5 CMPAHR"); - GEL_WatchAdd("*0x5909,x","ePWM5 CMPA"); - GEL_WatchAdd("*0x590A,x","ePWM5 CMPB"); - GEL_WatchAdd("*0x590B,x","ePWM5 AQCTLA"); - GEL_WatchAdd("*0x590C,x","ePWM5 AQCTLB"); - GEL_WatchAdd("*0x590D,x","ePWM5 AQSFRC"); - GEL_WatchAdd("*0x590E,x","ePWM5 AQCSFRC"); - GEL_WatchAdd("*0x590F,x","ePWM5 DBCTL"); - GEL_WatchAdd("*0x5910,x","ePWM5 DBRED"); - GEL_WatchAdd("*0x5911,x","ePWM5 DBFED"); - GEL_WatchAdd("*0x5912,x","ePWM5 TZSEL"); - GEL_WatchAdd("*0x5913,x","ePWM5 TZDCSEL"); - GEL_WatchAdd("*0x5914,x","ePWM5 TZCTL"); - GEL_WatchAdd("*0x5915,x","ePWM5 TZEINT"); - GEL_WatchAdd("*0x5916,x","ePWM5 TZFLG"); - GEL_WatchAdd("*0x5917,x","ePWM5 TZCLR"); - GEL_WatchAdd("*0x5918,x","ePWM5 TZFRC"); - GEL_WatchAdd("*0x5919,x","ePWM5 ETSEL"); - GEL_WatchAdd("*0x591A,x","ePWM5 ETPS"); - GEL_WatchAdd("*0x591B,x","ePWM5 ETFLG"); - GEL_WatchAdd("*0x591C,x","ePWM5 ETCLR"); - GEL_WatchAdd("*0x591D,x","ePWM5 ETFRC"); - GEL_WatchAdd("*0x591E,x","ePWM5 PCCTL"); - GEL_WatchAdd("*0x5920,x","ePWM5 HRCNFG"); -} -hotmenu ePWM6_DualMapped_All_Regs() -{ - GEL_WatchAdd("*0x5940,x","ePWM6 TBCTL"); - GEL_WatchAdd("*0x5941,x","ePWM6 TBSTS"); - GEL_WatchAdd("*0x5942,x","ePWM6 TBPHSHR"); - GEL_WatchAdd("*0x5943,x","ePWM6 TBPHS"); - GEL_WatchAdd("*0x5944,x","ePWM6 TBCTR"); - GEL_WatchAdd("*0x5945,x","ePWM6 TBPRD"); - GEL_WatchAdd("*0x5947,x","ePWM6 CMPCTL"); - GEL_WatchAdd("*0x5948,x","ePWM6 CMPAHR"); - GEL_WatchAdd("*0x5949,x","ePWM6 CMPA"); - GEL_WatchAdd("*0x594A,x","ePWM6 CMPB"); - GEL_WatchAdd("*0x594B,x","ePWM6 AQCTLA"); - GEL_WatchAdd("*0x594C,x","ePWM6 AQCTLB"); - GEL_WatchAdd("*0x594D,x","ePWM6 AQSFRC"); - GEL_WatchAdd("*0x594E,x","ePWM6 AQCSFRC"); - GEL_WatchAdd("*0x594F,x","ePWM6 DBCTL"); - GEL_WatchAdd("*0x5950,x","ePWM6 DBRED"); - GEL_WatchAdd("*0x5951,x","ePWM6 DBFED"); - GEL_WatchAdd("*0x5952,x","ePWM6 TZSEL"); - GEL_WatchAdd("*0x5953,x","ePWM6 TZDCSEL"); - GEL_WatchAdd("*0x5954,x","ePWM6 TZCTL"); - GEL_WatchAdd("*0x5955,x","ePWM6 TZEINT"); - GEL_WatchAdd("*0x5956,x","ePWM6 TZFLG"); - GEL_WatchAdd("*0x5957,x","ePWM6 TZCLR"); - GEL_WatchAdd("*0x5958,x","ePWM6 TZFRC"); - GEL_WatchAdd("*0x5959,x","ePWM6 ETSEL"); - GEL_WatchAdd("*0x595A,x","ePWM6 ETPS"); - GEL_WatchAdd("*0x595B,x","ePWM6 ETFLG"); - GEL_WatchAdd("*0x595C,x","ePWM6 ETCLR"); - GEL_WatchAdd("*0x595D,x","ePWM6 ETFRC"); - GEL_WatchAdd("*0x595E,x","ePWM6 PCCTL"); - GEL_WatchAdd("*0x5960,x","ePWM6 HRCNFG"); - -} - diff --git a/bin/HEX2BIN.EXE b/bin/HEX2BIN.EXE new file mode 100644 index 0000000000000000000000000000000000000000..0a3799ad30a59ddfc1706fd5d4cd44664fd2f68d GIT binary patch literal 111104 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 literal 0 HcmV?d00001 diff --git a/bin/hex2000.exe b/bin/hex2000.exe new file mode 100644 index 0000000000000000000000000000000000000000..7072690af6cbef7f2ac602d523378f4920d6fd89 GIT binary patch literal 770048 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

|Nxc3uY|hcf$0|PbS~5rLkAj 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

;!%11g~&!yuip2_J|2{hN|@0nVHhZB-JR00vUi; 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 Q;P(M10xky3#mCtH1Bv3@Y5)KL literal 0 HcmV?d00001 diff --git a/bin/ice.hex b/bin/ice.hex new file mode 100644 index 0000000..758214e --- /dev/null +++ b/bin/ice.hex @@ -0,0 +1,979 @@ +:20000000AA0800000000000000000000000000000000000041B8E1010000BDB900FF40DFBF +:2000200000000000C1C081C1400101C3C003800241C201C6C006800741C70005C1C581C4C4 +:20004000400401CCC00C800D41CD000FC1CF81CE400E000AC1CA81CB400B01C9C0098008A5 +:2000600041C801D8C018801941D9001BC1DB81DA401A001EC1DE81DF401F01DDC01D801CD4 +:2000800041DC0014C1D481D5401501D7C017801641D601D2C012801341D30011C1D181D053 +:2000A000401001F0C030803141F10033C1F381F240320036C1F681F7403701F5C0358034E5 +:2000C00041F4003CC1FC81FD403D01FFC03F803E41FE01FAC03A803B41FB0039C1F981F8A3 +:2000E00040380028C1E881E9402901EBC02B802A41EA01EEC02E802F41EF002DC1ED81EC34 +:20010000402C01E4C024802541E50027C1E781E640260022C1E281E3402301E1C021802054 +:2001200041E001A0C060806141A10063C1A381A240620066C1A681A7406701A5C065806443 +:2001400041A4006CC1AC81AD406D01AFC06F806E41AE01AAC06A806B41AB0069C1A981A8A2 +:2001600040680078C1B881B9407901BBC07B807A41BA01BEC07E807F41BF007DC1BD81BCD3 +:20018000407C01B4C074807541B50077C1B781B640760072C1B281B3407301B1C071807054 +:2001A00041B00050C190819140510193C053805241920196C056805741970055C1958194A2 +:2001C0004054019CC05C805D419D005FC19F819E405E005AC19A819B405B0199C0598058A4 +:2001E00041980188C04880494189004BC18B818A404A004EC18E818F404F018DC04D804C33 +:20020000418C0044C184818540450187C047804641860182C042804341830041C181818051 +:200220004040FFFF82D700000000EEFF58D80000E6127D391358FA3F6AEF74BF00000000EC +:200240000000000000000000000000000000000000000000FFFFF0D700000000FFFFF1D713 +:2002600000000000FFFFF2D700000000FEFFFED7000000000000FFFFFDD700000000FFFF15 +:2002800071E000000000F8FF72E0000000000000000000000000000000000000F8FF80E06D +:2002A000000000000000000000000000000000000000F8FF88E000000000000000000000DF +:2002C0000000000000000000F4FF02DF0000000000000000000091A800002DA90000DDA8B6 +:2002E0000000E2A80000FFFF1ADF00000000FFFF1BDF00000000FFFF1CDF00000000FFFF8E +:200300001DDF00000000FEFF70D7000000000000FEFF72D7000000000000FEFF74D700000F +:2003200000000000FEFF76D7000000000000FFFF78D700000000FFFF79D700000000FFFFDA +:2003400049D700000000FFFF4AD700000000FFFF4BD700000000FFFF4CD700000000FCFF22 +:2003600068D700000000000000000000FCFF0CDC0000000000BF000000BFFFFF10DC0000F3 +:200380000000FEFFAEDD0000B1B90000FEFFB0DD0000B1B90000FEFFB2DD000000000000EB +:2003A000FEFFB4DD000000000000FFFF00D700000000FFFF44D300000100FFFFF8DB0000F3 +:1E03C0000A00FFFFF9DB00000100FFFFB6DD00000000FFFFB7DD00000000000000001F +:2003DE00BD390000008010E70A0000776FE813F020E7400001E8EAFA0DE8BA9E00E710005F +:2003FE00007700E7000000E7D900007710E74000407628B902E8010250E8000040766AB681 +:20041E0006001B76F0FF0500BDA8BDA0BDC2BDC3BDAB00E2BD0003E2BD0003E2BD0103E241 +:20043E00BD0203E2BD0330E6000669FF42291656227601021F767C030156280023763911CE +:20045E0010291A761F7678033F4F04EE69FF40767FB11F765F03300A1F765F0330921F7658 +:20047E005E0303542C681F765F03302B1F765E03089201901F76780301F03F930191A9CBC6 +:20049E0010ED1F765D030792025206EC1F76BF010D1A0008146F1F76BF010D1A00100F6F5C +:2004BE001F765D030792025206EC1F76BF010F1A0008056F1F76BF010F1A00101F765E03CC +:2004DE00000A1F765E030092285208681F765E03002B1F765E03BF5601011F765F03320A21 +:2004FE001F765F0332920A5242ED1F765F03322B1F765D030792015228ED1F765F0336928F +:20051E0006ED1F76BF010B1A0010056F1F76BF010D1A00101F765F03379206ED1F76BF0138 +:20053E000B1A0004056F1F76BF010D1A00041F765F03389206ED1F76BF010B1A0040056F9E +:20055E001F76BF010D1A00401F765D03069205520EED1F765F03369206ED1F76BF010B1AB6 +:20057E000040056F1F76BF010D1A00401F76780324921F765F03325418ED1F765D03079217 +:20059E0001520DED1F76BF010B1A00101F76BF010B1A00041F76BF010B1A0040025205EDE8 +:2005BE001F76BF010B1A00401F765F03310A1F765F0331921F765E030454E8FF86001F7627 +:2005DE005F03312B1F765F03330A1F765F03339201901F765F033496009B1F765F033392A6 +:2005FE0007901F765F03B056A80135971F7678033F4652EE1F7678033F4041EE1F765D034C +:20061E00069205522FEC1F765E03089201901F765F0301F036961F765E0308421EEE1F76FC +:20063E005E03084313EE1F765E03084405EE1F765F03372B496F009B1F765F0335921F76BB +:20065E005F03B156A80137973F6F1F765F0334921F765F033796386F1F765F03BF56370182 +:20067E00336F1F765E03084005EF1F765F033492026F019A1F765F033696266F1F765F0370 +:20069E0034921F765F0336961F765F0337961F765F033896196F1F7678033FCC8000C6FF42 +:2006BE001F765F0336961F7678033FCC8000C6FF1F765F0337961F7678033FCC8000C6FFD5 +:2006DE001F765F033896AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BE87BEC5BEC48B +:2006FE00BE83BE8A0300F1FF17760276009A18521163013B008FA8D7A9850156A400C42B81 +:20071E00A985008FC0D70156A400C496019C1852F1640600BDB202FE2276008F1E801F76E7 +:20073E0034001AA81A7669FF1F765D030F8F40423A0642A8C000BBB8A9BD120F00770077C6 +:20075E0002E8D11B008F26DF89E600004076C5B71F7630000C282040237600101F765E0378 +:20077E00BF5603021F765E030428E8031F765E03BF5605501F765E030628F4011F765E03C5 +:20079E00008F4C1D0AA81F765E0319020C1E1F765E03008FA8610EA800D1A192185214632D +:2007BE00013B008FA8D7A9850156A400C42BA192008FC0D7A9850156A400C479A192019C2A +:2007DE001852A959EE641F765D030692015203EC025259ED1F765E03BF5628091F765E03A2 +:2007FE00BF5629091F765E03BF562A091F765E03BF562B091F765E03BF562C091F765E03E1 +:20081E00BF562D091F765E03BF56300A1F765E03BF56310A1F765E03BF56320A1F765E03A7 +:20083E00BF56330A1F765E03BF5634021F765F03BF560C0D1F765E03BF5635021F765F03A9 +:20085E00BF560D0C1F765E03BF5636021F765F03BF560E0F1F765E03BF5637021F765F03A5 +:20087E00BF560F0E1F7677030C1A00401F7677030D1A00401F7677030E1A00401F767703B7 +:20089E000F1A0040035203EC04522DED1F765E03BF5628091F765E03BF5629091F765E03AE +:2008BE00BF562A091F765E03BF562B091F765E03BF562C091F765E03BF562D091F765E031C +:2008DE00BF562F0A1F765E03BF56300A1F765E03BF56310A1F765E03BF56320A1F765E03E4 +:2008FE00BF56330A055254ED1F765E03BF5628031F765F03BF5600011F765E03BF56290376 +:20091E001F765F03012B1F765E03BF562A041F765F03BF5602031F765E03BF562B041F767D +:20093E005F03BF5603021F765E03BF562C051F765E03BF562D051F765E03BF562E061F76D0 +:20095E005E03BF562F061F765E03BF5630061F765E03BF5631061F765E03BF5632061F7673 +:20097E005E03BF5633061F765E03BF5634081F765E03BF5635091F765E03BF5636091F763B +:20099E005E03BF5637071F765E03BF56380700D1A19204520F63013B008F90D70356A10142 +:2009BE000156A4000002C41EA192019C0452A959F36400D1A19206521063013B008F9CD7AE +:2009DE000356A1010156A40090E503E2C400A192019C0652A959F26400D1A1921C520F6381 +:2009FE00013B008FC0DB0356A1010156A4000002C41EA192019C1C52A959F36400D1A192FE +:200A1E0020520F63013B008F00D80356A1010156A4000002C41EA192019C2052A959F364BC +:200A3E0000D1A19228521163A12D008FC0D81235408F58D80156A4001202407607B9A192B3 +:200A5E00019C2852A959F16400D1A19218520E63013B008FC0DDA9850156A400C41800E0DE +:200A7E00A192019C1852A959F4641F765E03BF56020C82FEBE8B0600AB2BAB9202521863FA +:200A9E0000BEA69208520F63013B008F64DE0356AB03A6810156A400C42BA692019C085222 +:200ABE00A988F364AB92019C0252A927EA64AB2BAB9218523963013B008FA8D7A98501565C +:200ADE00A400C4922CECAB93A892A2FF008D64DECBFFA894A3FFA9850156A000109BAB9249 +:200AFE00C000F6B8A92D019B67FFC099189B189AAB95013BA888AB94B2FFDBFF008D64DE8F +:200B1E00A695B3FFA988A8850156A000109BA692C000F6B8019BA92D67FFC099AB92019C19 +:200B3E001852A927C964AB2BAB9203521663013B008F64DEA9850156A400039AAB94C488F1 +:200B5E00A9850809008F64DE0156A400C47EAB92019C0352A927EC641F765D0307920152FA +:200B7E0005ED1F767903251A8000035219ED1F767903241A07001F767903251A8F0F1F7661 +:200B9E007903261A00031F767903271A03001F767903291A03001F767903331A0F0F1F76BB +:200BBE007903321A73001F767903331A00E0060000520AEDC40606EC01024156C400A592FE +:200BDE000D6F009A0B6F013BA885C40F0362019A056F01020156C400A5920600C480A988E7 +:200BFE001F7679031E8A013BA6850156A400C44D14EE1F7679031E8AA6850156A400C4CD39 +:200C1E0000E0A8271F7679031E8AA6850156A400AB93A7CBC497096F1F7679031E8AA685C1 +:200C3E000156A400A793C499A793D7FF01D501910CEC1F7679031E8AA6850156A400C4CD24 +:200C5E000040DDFFB156A5001F7679031E8AA6850156A400A5CD010098FFC4CCFFFDA9CBC5 +:200C7E00C4971F765E0307801F7679031E8AA6850156A4001F765E03A7CC0100C4CD0002A2 +:200C9E00D8FF01F1A9CB0191A7CCFEFFA9CB07970600BDB2BDAAA686A82DA92FA492AB2B24 +:200CBE001F765D030B93B056A10A03ED408D8813AC5401D00A63649BC000E5B8A828FF0F02 +:200CDE00A99FAC55B256A0001F767903013B008FC0DB1E830356AA010156A400AA85015668 +:200CFE00A500C5CD0100A85DA092A1934076F583005204ECAB920150A927A9AA03ECA28AF7 +:200D1E00C43FBE86BE8B060002FEA888A95800B6A727013B008FD8D7A0850C090156A400BB +:200D3E00A692C4542464A085008FD8D70C090156A400408FF9D7A0850156A500C42FAA925B +:200D5E00C5541565A085008F72D80156A400408F6AD8A0850156A500C492C596A085008F52 +:200D7E0072D80156A400C42B019AA927A085008FD8D70C090156A400A692C4542463A08547 +:200D9E00008FD8D70C090156A400408FF9D7A0850156A500C42FAA92C5541562A085008FB4 +:200DBE0076D80156A400408F6ED8A0850156A500C492C596A085008F76D80156A400C42BF9 +:200DDE00019AA927AB9220EC009A04521363013B008F6ED8A985408F6AD80156A400A98562 +:200DFE000156A500C593A795C495A880019C0452EF64A785068F801A421EA9A8C000BBB83F +:200E1E001F765F033E1E013B008FF9D7A0850156A400C47EA085008F72D80156A400C40A9D +:200E3E00A085008F76D80156A400C40A1F765F033E9282FE0600BDB2BDAABDA203E2BD04A1 +:200E5E0003E2BD0508FEA959442B1F765E03A192029EA95B013B008FC0D7A1850156A40006 +:200E7E001F765E03C492029E4596A3925EFF01904696A392A0FF049C47961F7679031E8A84 +:200E9E00A1850156A400C44FCD567C02A185008F40E00156A400C4E2C4051F7678033F448D +:200EBE0005EE1F7678033F416AEF1F765F033D9213ED00BEA69204520F63013B008F9CD776 +:200EDE000356A6010156A40003E2C405A692019C0452A988F3640356A301408F9CD7008FCA +:200EFE009CD70156A5000356A3010156A40002E8D123A586AFE2C40020E7280040766AB60A +:200F1E00AFE2C20110E74000007703E2C200A12D013B008FC0D8408F9CD712350156A40055 +:200F3E000356A3010156A500AFE2C500407687B8013B008FD8D78CE60000A1850156A40042 +:200F5E00A9BF120FC496408FD8D7A185008FD8D70156A400A3850C090156A500C492C596C9 +:200F7E00A185008FD8D70156A400189AA194C488008FC0DDA9850156A400C47E019A1F76FA +:200F9E0078033F4406EE1F7678033F41BC56A9001F765F033D96008FD8D7A1850156A400CD +:200FBE00408F80D80356A101C8E2C4000156A50020E72800AFE2C50100E70C001F767803FE +:200FDE003F44CD56D7011F7678033F41CD56D2018CE6280000770077A9BF120FA993A3926D +:200FFE004076A1844896013B408F9CD70356A3010156A500008F9CD70356A3010156A400A9 +:20101E00A586AFE2C401CFE6200095E6000020E7400002E8D12340766AB6AFE2C20110E79B +:20103E004000007703E2C2004692C056A600CFE620001F766103AFE23A01407600801F763B +:20105E00610303E23C00A12D008FC0D812350156A400407687B812E8401614AD036390E5D5 +:20107E00482B01E8A9FD08E8992740766AB6179A013B008FC0DDA1948CE60000A985015685 +:20109E00A400A9BF120FC4964788408F9CD7008F9CD70356A6010156A5000356A601015645 +:2010BE00A4001F766103AFE23A02CFE62000AFE2C401AFE6000020E78000A58695E60000BB +:2010DE0020E7400002E8D12340766AB6AFE2C20110E74000007703E2C200179A089BA194C5 +:2010FE00C000F6B8089BA99FA888013B008F9CD7472D0356A301408FC0DD0156A4000335FB +:20111E00A194A6940B9CAFE2C4008CE60000A9850156A500A9BF120FC596008F9CD74592ED +:20113E00408FC0DD0356A9010156A4000335A194A6940C9CAFE2C4008CE60000A98501568C +:20115E00A500A9BF120FC5960356AC01008F9CD70156A4000335A194A6940D9CAFE2C40040 +:20117E00A9858CE60000008FC0DD0156A400A9BF120FC496096FCFE620001F766103AFE6CC +:20119E00000003E23A00189A013B008FC0DDA194A9850156A4004892C4961F767903208AAB +:2011BE00A1850156A40001E860FCC8E2C4010EE8686600E74000007794E6040014AD066530 +:2011DE0044922050A91A000144960356A301008F9CD70156A400AFE2C40545920356A901DF +:2011FE00008F9CD70156A400AFE2C40094E6050014AD0A634592008F9CD70356A90101569F +:20121E00A400AFE2C4054792008F9CD70356A9010156A400AFE2C40094E6050014AD0A63D7 +:20123E004792008F9CD70356A9010156A400AFE2C4051F7679031E8AA1850156A400C4CCF3 +:20125E000040CDFF4596008F9CD70356A3010156A40000D2AFE2C40020E72800CFE629005B +:20127E0040766AB601E861F20EE8696694E6080014AD066512E8451614ADB256A201013BCE +:20129E00008F90D70356A3011F765E0300D50156A400A2920A934076F583005206EC44925E +:2012BE000450A91A000144964792013B008F9CD70356A9010156A40000D2AFE2C40020E7DB +:2012DE002800CFE6290040766AB601E861F20EE8696694E6080014AD066512E8451614AD4F +:2012FE00B256A201013B4792008F90D71F765E0300D50356A9010156A400A2920A934076CA +:20131E00F583005208EC449204504496459203ED441A000146922DED1F767903208A013BDE +:20133E00A1850156A4001F766103C8E2C400AFE23C0194E6010014AD086544922050449670 +:20135E00459203ED441A00011F767903228AA1850156A400C8E2C400007794E6010014AD4A +:20137E000863449208504496459203ED441A00014492AD5C439683DCA19240760B84186FA0 +:20139E001F7679031E8AA1850156A400C42B1F7679031E8AA1850156A400C41A0080189A7C +:2013BE00A194A985008FC0DD0156A400C42B88FEAFE2BE05AFE2BE04BE82BE86BE8B060096 +:2013DE00BDB2BDAA02FEA95900520AED1F765E0307921F765E0308961F765E03072B1F76EE +:2013FE005E0303560201A1540E651F7679031E8A013BA192A9850156A400C4CC0080CEFF7C +:20141E00C056D100013BA192008F40E0A9850156A400C4E2C4011F7678033F44CD56B600A9 +:20143E00A192008FD8D7A9850156A400408F80D8807640D80356A101C8E2C4020156A50058 +:20145E00A192A9850156A60020E78900AFE2C50200E75100C8E2C60202E8401C10E75100F0 +:20147E000CE8000020E70900189AA19450E80848A9858CE60000008FC0DD0156A400A9BFAC +:20149E00120FC4968CE6080000770077A2BF120FA192A985008FA8D70156A400C4920952AE +:2014BE0003ED008FF401A192408FA8D7A9850156A500C5920A52B156A40AA192A985408F57 +:2014DE0040E00156A500AD8881DEC593A192407666844188A6924CED1F7679031E8A013BE4 +:2014FE00A192A9850156A400C4CC0040CDFFA9801F767903208AA192A9850156A400C49240 +:20151E00FB9CA2540C631F7679031E8AA192A9850156A400C4CC2000C4FF1FED1F7679030C +:20153E00208AA192A9850156A400A292C45415621F767903228AA192A9850156A400A29277 +:20155E00C4541665A6921050A988A79211ED1F765E03071A08000C6FA6922050A988A7922E +:20157E0007EDA61A00011F765E03071A0400A69205EC1F765E03071A1000AD5C417EA19232 +:20159E0081DC40760B84276F189A008FC0DDA1948CE60800A9850156A400A9BF120FC4965C +:2015BE001A6F1F7679031E8AA192A9850156A400C42B1F7679031E8AA192A9850156A4006B +:2015DE00C41A0080189AA194A985008FC0DD0156A400C42B82FEBE86BE8B0600BDB202FEE2 +:2015FE00A9591F7679031E8A013BA9850156A400C44FCD56C400A192008F40E0A98501564C +:20161E00A400C4E2C4001F7678033F44CD56AA000356A101008F80D80156A400AFE2C4010B +:20163E0000E7400002E8010990E8002840766AB68CE6000000770077A7BF120F013B189A26 +:20165E00008FC0DDA194A9850156A400C47F00BE1F7679031E8AA192A9850156A400C4CC3C +:20167E000040CDFFA92F1F767903228AA192A9850156A400A792C4541663A6920850A988C4 +:20169E00008FC0D7A192A9850156A4001F7679031E83C4850156A500C54305EFAA9203ED8B +:2016BE00A61A00011F767903208AA192A9850156A400A792C4540865A6922050A988AA9261 +:2016DE0003EDA61A0001A19204523C64FC9C0356A901A9801F765D03A72D008F00D800D549 +:2016FE000E0622560190A9270356A7010156A400AB92A828E8034076F583A6930190A8CD7E +:20171E00BFFF85FFA8CAA988A792019CA9801F765D03A72D013B0E06008F00D8225601903E +:20173E00A9270356A7010156A400AB92A828E8034076F5830190A693A8CD7FFF86FFA8CAE5 +:20175E00A988A69207ECAA9205ED1F765E03071A0200AD5C417EA19281DC40760B84276F95 +:20177E00189A008FC0DDA1948CE60000A9850156A400A9BF120FC4961A6F1F7679031E8A78 +:20179E00A192A9850156A400C42B1F7679031E8AA192A9850156A400C41A0080189AA19486 +:2017BE00008FC0DDA9850156A400C42B82FEBE8B06001B76F0FF00E2BD0030E60006422952 +:2017DE0016562376391110292576006F1B76F0FF00E2BD0030E60006422916562376390174 +:2017FE0010292576006F1B76F0FF00E2BD0030E60006422916562376390110292576006F60 +:20181E001B76F0FF00E2BD0030E60006422916562376390110292576006F1B76F0FF00E220 +:20183E00BD0030E600064229165610292576006F1B76F0FF00E2BD0030E600064229165685 +:20185E0010292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF52 +:20187E0000E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E600064229CF +:20189E00165610292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B7695 +:2018BE00F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E600060B +:2018DE004229165610292576006F1B76F0FF00E2BD0030E600064229165610292576006F7B +:2018FE001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E640 +:20191E0000064229165610292576006F1B76F0FF00E2BD0030E600064229165610292576A3 +:20193E00006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD00A6 +:20195E0030E600064229165610292576006F1B76F0FF00E2BD0030E60006422916561029E8 +:20197E002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330022924196237641 +:20199E000100267601011F7633002218FA001F7633002128FFFF1029103B1F763300419260 +:2019BE0022962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330022924196E2 +:2019DE0023760100267601011F7633002218F8001F7633002128FFFF1029103B1F7633005C +:2019FE00419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002292A6 +:201A1E004196237601011F76330022921F763300222B1F7633002128FFFF1029103B1F767D +:201A3E003300419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300E6 +:201A5E0022924196237601011F763300221868001F7633002128FFFF1029103B1F7633007D +:201A7E00419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300229225 +:201A9E00419623760100267601011F763300221848001F7633002128FFFF1029103B1F76A7 +:201ABE003300419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330066 +:201ADE002292419623760100267601011F76330022921F763300222B1F7633002128FFFF85 +:201AFE001029103B1F763300419222962576006F1B76F0FF00E2BD0030E6000602FE422941 +:201B1E0016561F7633002292419623760100267601011F763300221878001F763300212825 +:201B3E00FFFF1029103B1F763300419222962576006F1B76F0FF00E2BD0030E6000602FE6D +:201B5E00422916561F7633002492419623760200267600001F76330024180E001F7633002A +:201B7E002128FFFF1029103B1F763300419224962576006F1B76F0FF00E2BD0030E60006E2 +:201B9E0002FE422916561F7633002492419623760200267600001F76330024180C001F761F +:201BBE0033002128FFFF1029103B1F763300419224962576006F1B76F0FF00E2BD0030E675 +:201BDE00000602FE422916561F7633002492419623760200267600001F7633002418080072 +:201BFE001F7633002128FFFF1029103B1F763300419224962576006F1B76F0FF00E2BD00B6 +:201C1E0030E6000602FE422916561F7633002492419623760200267600001F7633002492A9 +:201C3E001F763300242B1F7633002128FFFF1029103B1F763300419224962576006F1B76EC +:201C5E00F0FF00E2BD0030E6000602FE422916561F76330024924196237602002676000059 +:201C7E001F76330024180F001F7633002128FFFF1029103B1F763300419224962576006F41 +:201C9E001B76F0FF00E2BD0030E6000602FE422916561F7633002492419623760200267688 +:201CBE0000001F76330024181F001F7633002128FFFF1029103B1F76330041922496257660 +:201CDE00006F1B76F0FF00E2BD0030E6000602FE422916561F763300269241962376040071 +:201CFE0026763D011F76330026183E001F7633002128FFFF1029103B1F76330041922696BE +:201D1E002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330026924196237699 +:201D3E00040026763D011F76330026921F763300262B1F7633002128FFFF1029103B1F76E6 +:201D5E003300419226962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300BF +:201D7E00269241962376040026763D011F76330026921F763300262B1F7633002128FFFF97 +:201D9E001029103B1F763300419226962576006F1B76F0FF00E2BD0030E6000602FE42299A +:201DBE0016561F763300269241962376040026763D011F763300261826001F76330021288E +:201DDE00FFFF1029103B1F763300419226962576006F1B76F0FF00E2BD0030E6000602FEC7 +:201DFE00422916561F763300269241962376040026763D011F763300261826001F7633002C +:201E1E002128FFFF1029103B1F763300419226962576006F1B76F0FF00E2BD0030E600063D +:201E3E0002FE422916561F763300269241962376040026763D011F76330026921F76330097 +:201E5E00262B1F7633002128FFFF1029103B1F763300419226962576006F1B76F0FF00E2BD +:201E7E00BD0030E6000602FE422916561F7633002892419623760800267608011F7633002D +:201E9E00281802001F7633002128FFFF1029103B1F763300419228962576006F1B76F0FF6C +:201EBE0000E2BD0030E6000602FE422916561F7633002A92419623760800267608011F763C +:201EDE00330028921F763300282B1F7633002128FFFF1029103B1F76330041922896257655 +:201EFE00006F1B76F0FF00E2BD0030E6000602FE422916561F763300289241962376080049 +:201F1E00267608011F763300281803001F7633002128FFFF1029103B1F7633004192289607 +:201F3E002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330028924196237675 +:201F5E000800267608011F763300281803001F7633002128FFFF1029103B1F76330041927D +:201F7E0028962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002892419610 +:201F9E0023760800267608011F76330028180F001F7633002128FFFF1029103B1F7633006B +:201FBE00419228962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002892D4 +:201FDE00419623760800267608011F76330028180F001F7633002128FFFF1029103B1F7687 +:201FFE003300419228962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633001B +:20201E002A92419623761000267610011F7633002A1802001F7633002128FFFF1029103B1A +:20203E001F76330041922A962576006F1B76F0FF00E2BD0030E6000602FE422916561F7676 +:20205E0033002A92419623761000267610011F7633002A921F7633002A2B1F763300212894 +:20207E00FFFF1029103B1F76330041922A962576006F1B76F0FF00E2BD0030E6000602FE20 +:20209E00422916561F7633002C92419623762000267639011F7633002C1832001F76330059 +:2020BE002128FFFF1029103B1F76330041922C962576006F1B76F0FF00E2BD0030E6000695 +:2020DE0002FE422916561F7633002C92419623762000267639011F7633002C921F763300D1 +:2020FE002C2B1F7633002128FFFF1029103B1F76330041922C962576006F1B76F0FF00E20F +:20211E00BD0030E6000602FE422916561F7633002C92419623762000267639011F7633003D +:20213E002C1833001F7633002128FFFF1029103B1F76330041922C962576006F1B76F0FF90 +:20215E0000E2BD0030E6000602FE422916561F7633002C92419623762000267639011F764E +:20217E0033002C1837001F7633002128FFFF1029103B1F76330041922C962576006F1B7608 +:20219E00F0FF00E2BD0030E6000602FE422916561F7633002C9241962376200026763901B4 +:2021BE001F7633002C1822001F7633002128FFFF1029103B1F76330041922C962576006FD9 +:2021DE001B76F0FF00E2BD0030E6000602FE422916561F7633002C9241962376200026761D +:2021FE0039011F7633002C921F7633002C2B1F7633002128FFFF1029103B1F7633004192B4 +:20221E002C962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002E92419663 +:20223E0023764000267600001F7633002E183E001F7633002128FFFF1029103B1F76330064 +:20225E0041922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002E9225 +:20227E00419623764000267600001F7633002E1838001F7633002128FFFF1029103B1F7686 +:20229E00330041922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330072 +:2022BE002E92419623764000267600001F7633002E1838001F7633002128FFFF1029103B1B +:2022DE001F76330041922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F76D0 +:2022FE0033002E92419623764000267600001F7633002E1820001F7633002128FFFF10290B +:20231E00103B1F76330041922E962576006F1B76F0FF00E2BD0030E6000602FE42291656D9 +:20233E001F7633002E92419623764000267600001F7633002E1828001F7633002128FFFF66 +:20235E001029103B1F76330041922E962576006F1B76F0FF00E2BD0030E6000602FE4229CC +:20237E0016561F7633002E92419623764000267600001F7633002E921F7633002E2B1F76C1 +:20239E0033002128FFFF1029103B1F76330041922E962576006F1B76F0FF00E2BD0030E683 +:2023BE00000602FE422916561F7633003092419623768000267600001F7633002C921F76F1 +:2023DE0033002C2B1F7633002128FFFF1029103B1F763300419230962576006F1B76F0FFD7 +:2023FE0000E2BD0030E6000602FE422916561F7633003092419623768000267600001F7682 +:20241E003300301801001F7633002128FFFF1029103B1F763300419230962576006F1B7693 +:20243E00F0FF00E2BD0030E6000602FE422916561F763300309241962376800026760000E7 +:20245E001F7633002C1823001F7633002128FFFF1029103B1F763300419230962576006F31 +:20247E001B76F0FF00E2BD0030E6000602FE422916561F7633003092419623768000267616 +:20249E0000001F763300301803001F7633002128FFFF1029103B1F7633004192309625767C +:2024BE00006F1B76F0FF00E2BD0030E6000602FE422916561F763300329241962376000180 +:2024DE00267600011F76330032921F763300322B1F7633002128FFFF1029103B1F76330035 +:2024FE00419232962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330032927B +:20251E00419623760001267600011F7633003218FD001F7633002128FFFF1029103B1F7658 +:20253E003300419232962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300CB +:20255E003292419623760001267600011F763300321871001F7633002128FFFF1029103B75 +:20257E001F763300419232962576006F1B76F0FF00E2BD0030E6000602FE422916561F7629 +:20259E0033003292419623760001267600011F763300321875001F7633002128FFFF102949 +:2025BE00103B1F763300419232962576006F1B76F0FF00E2BD0030E6000602FE4229165633 +:2025DE001F7633003292419623760001267600011F76330032921F763300322B1F763300CA +:2025FE002128FFFF1029103B1F763300419232962576006F1B76F0FF00E2BD0030E600064A +:20261E0002FE422916561F7633003292419623760001267600011F76330032921F763300D7 +:20263E00322B1F7633002128FFFF1029103B1F763300419232962576006F1B76F0FF00E2BD +:20265E00BD0030E6000602FE422916561F7633003292419623760001267600011F7633004A +:20267E00321831001F7633002128FFFF1029103B1F763300419232962576006F1B76F0FF41 +:20269E0000E2BD0030E6000602FE422916561F7633003292419623760001267600011F765B +:2026BE003300321875001F7633002128FFFF1029103B1F763300419232962576006F1B7679 +:2026DE00F0FF00E2BD0030E6000602FE422916561F763300389241962376000826760000B5 +:2026FE001F76330038189E001F7633002128FFFF1029103B1F763300419238962576006F00 +:20271E001B76F0FF00E2BD0030E6000602FE422916561F76330038924196237600082676E3 +:20273E0000001F76330038189C001F7633002128FFFF1029103B1F76330041923896257630 +:20275E00006F1B76F0FF00E2BD0030E6000602FE422916561F7633003892419623760008D0 +:20277E00267600001F763300381890001F7633002128FFFF1029103B1F76330041923896FB +:20279E002576006F1B76F0FF00E2BD0030E6000602FE422916561F763300389241962376FD +:2027BE000008267600001F763300381890001F7633002128FFFF1029103B1F763300419281 +:2027DE0038962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003892419688 +:2027FE0023760008267600001F76330038921F763300382B1F7633002128FFFF1029103B2E +:20281E001F763300419238962576006F1B76F0FF00E2BD0030E6000602FE422916561F7680 +:20283E0033003892419623760008267600001F76330038189F001F7633002128FFFF10296A +:20285E00103B1F763300419238962576006F1B76F0FF00E2BD0030E6000602FE422916568A +:20287E001F7633003892419623760008267600001F76330038921F763300382B1F7633000F +:20289E002128FFFF1029103B1F763300419238962576006F1B76F0FF00E2BD0030E60006A1 +:2028BE00422916562576006F1B76F0FF00E2BD0030E60006422916562576006F1B76F0FF7D +:2028DE0000E2BD0030E60006422916562576006F1B76F0FF0500BDA8BDA0BDC2BDC3BDAB90 +:2028FE0000E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF4229165632 +:20291E001F7633003292419623760001267600011F76330032921F763300322B1F76330086 +:20293E002128FFFF1029008F00D069FF40769A97008F00D04076B393103B1F76330041920A +:20295E00329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BE87BEC5BEC4BE8324 +:20297E00BE8A0300F1FF177602761B76F0FF0500BDA8BDA0BDC2BDC3BDAB00E2BD0003E2C7 +:20299E00BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F763300329289 +:2029BE00419623760001267600011F763300321871001F7633002128FFFF1029008F80D33E +:2029DE0069FF40769A97008F80D34076B393103B1F7633004192329682FEAFE2BE03AFE29B +:2029FE00BE02AFE2BE01AFE2BE0080E2BE00BE87BEC5BEC4BE83BE8A0300F1FF177602766F +:202A1E001B76F0FF0500BDA8BDA0BDC2BDC3BDAB00E2BD0003E2BD0003E2BD0103E2BD0262 +:202A3E0003E2BD0330E6000602FE69FF422916561F763300329241962376000126760001DE +:202A5E001F7633003218FD001F7633002128FFFF1029008F00D069FF40769A97008F00D0F4 +:202A7E0040760C95103B1F7633004192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0071 +:202A9E0080E2BE00BE87BEC5BEC4BE83BE8A0300F1FF177602761B76F0FF0500BDA8BDA0E6 +:202ABE00BDC2BDC3BDAB00E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE48 +:202ADE0069FF422916561F7633003292419623760001267600011F763300321875001F76E3 +:202AFE0033002128FFFF1029008F80D369FF40769A97008F80D340760C95103B1F76330088 +:202B1E004192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BE87BEC5BEC4D0 +:202B3E00BE83BE8A0300F1FF17760276BDB2BDAA0CD1A486EFFF3A01C28AFCCCFF00A988AC +:202B5E00C28AEC47CD562C01008DA0019292C0562D01008D3B039292015211ED008D3D03E5 +:202B7E00BF5692010002008D3403921E008D3F03922B008D3E03922B0DD0922B008D3F0399 +:202B9E009292C0561301008D3D0392924FEDF2C5208F0000A9A8A70F0766F2C52F8F00004D +:202BBE00A9A8A70F0667208F0000F2A80AD092A80CD092923A52C056F900008DA001929239 +:202BDE002FEDA9AA008F34030156A400C483A592019001DDC4A006EDF28A0356A608C49686 +:202BFE00076FF28AA9A80109F21EA692C498008D34039206E20FE8FFD900339A0FD09296E5 +:202C1E009A96A28A099A4076DF95008D3F03BF569201008DA001BF569201EFFFC700008DDE +:202C3E003F03BF569201EFFFC100008D3E03929244EDA6921F760403025428EC1F766F0375 +:202C5E00395405ED1F766F03399220EDA692008D3103925405ED008D3303929217EDA69204 +:202C7E001F766F03385409ED1F766F03389205EC008D330392920AEC008D3F03BF56920197 +:202C9E00008D3D03922BEFFF9100008D3203927EA9AA008F3E030156A400013BA2830ED0DE +:202CBE00C4850156A500019BA995C497957E089AA28A4076DF95796FA9AA008F3E0301560F +:202CDE00A400013BA2830ED0C4850156A500019BA995C497957E008D3E03929207520EED20 +:202CFE000DD0929210520AED008D3303929206ED0A9A1F765C03A6941096008D3E03929218 +:202D1E0002521EED0DD0927E9292035237689292425234669258008F00D7949203522E687E +:202D3E000DD09292335205ED0CD092923A5226ED0DD09292335204ED008D3D03922B0DD080 +:202D5E009258008F00D79492008D3E0392540469921B90012A68099AA28A4076DF95008D68 +:202D7E003D03922B008D3F03BF569201008DA001BF5692010DD0922B186F099AA28A407645 +:202D9E00DF95008D3E03922B008D3D03BF569201008D3F03922B0DD0922B076FC28ACC18D5 +:202DBE00DFFFC28ACC1A2000C28AEC46CD56C6FE1F7633002192A99301BED7FF01911F76ED +:202DDE003300A9CCFFFEA6CB019197FFA9CB2197C28A0BDCC41A4000BE86BE8B0600BDB218 +:202DFE00BDAAA486008D3A03929230EDA9AA008F38030156A400008D36030102C407C41E8B +:202E1E00920F0468C28ABF56E40208D0928A849292A8C28A09D19C96008D36039206008DB9 +:202E3E003803920F4566C28AE446FEEF099AA28A4076DF95D292025205ED1F76BF01081A70 +:202E5E000400008D9E01922B336FA9AA008F38030156A400C483A5920190A98801DDC4A02B +:202E7E00008D36039206008D3803920F0466C28ABF56E402A6920AED08D09283C28A09D07B +:202E9E00C592A7FFFF909496096F08D0928A849292A8C28AFF9009D09496008D3603920666 +:202EBE00008D3803920F0466C28AE446FEEF1F763300219201BEA993D7FF01911F76330018 +:202EDE00A6CB019197FFA9CCFFFEA9CB2197BE86BE8B0600009A46520B63013B008F00D7C8 +:202EFE00A9850156A400C496019C4652F7641F765C03BF56330C1F765C03BF56340C1F767B +:202F1E005C03BF5635081F765C03BF5636091F765C03BF5637101F765C03BF5638081F766C +:202F3E005C03BF56390C1F765C03BF563A0C1F765C03BF563B051F764D030492FE9C1F7678 +:202F5E005C033D961F764D0304921F765D03FF9C01961F765C03BF563E081F765C03BF5627 +:202F7E0003081F765C03BF5606081F765C03BF56100D1F765C03BF56051B1F765C03BF56B9 +:202F9E003C120600BDB2BDAAA959A48608520AED089A01D54E9BA28A40766D97008D3B035A +:202FBE00922BA19209520BED089A01D54E9BA28A40766D97008D3B03BF569201BE86BE8B69 +:202FDE000600BDB2BDAABDA2A982A586A48B00D4A41B3075056601DCA41B3075FD69D19266 +:202FFE00025205ED1F76BF010818FBFF00D4A41B1027056601DCA41B1027FD69008D3603CA +:20301E0091A2A9AA08D00109911E008D3A03912BC18AE446FEEF089AA18A4076DF95008D0F +:20303E0038030102911EA30F1C68C18AC29209D09496C18AE446FEEF00D4A41BE803056662 +:20305E0001DCA41BE803FD69099AA18A4076DF95D19202520DED1F76BF01081A0400086FCA +:20307E00C18ABF56E401C18A09D0C2929496009ABE82BE86BE8B0600BDB2BDAAA61EA58619 +:20309E00A48BD192025205ED1F76BF010818FBFF008D360391C208D091AA008D3A03BF56C0 +:2030BE009101C18AE446FEEF089AA18A4076DF95008D38030102911EC18ABF56E401C292F4 +:2030DE00C18A09D0A7FFFF909496009ABE86BE8B0600BDB2A9BD160F00770077A48B1F7676 +:2030FE005D038BE6090088E23C0050E8094040766AB688E6000000770077A9BF120FC18AAB +:20311E00A993B7FFFF91D497C18AFF90DC96BE8B06001F764D0304961F764003BF5602019A +:20313E001F764E03BF5602020600BDB2BDAABDA2A986A492015230ED008F50701F7640033B +:20315E0000A8C08D00D022761F76BE0109CDFFF3A81A00041F76BE0109971F76BE0109CDF4 +:20317E00FFFCA81A00011F76BE0109971F763700008F859200A81F763700008F1D9302A8B0 +:20319E001F763300321A01001F763300321A0200237600011A76025238ED008F50771F7658 +:2031BE004E0300A8C08D80D322761F76BE0107CDFFCFA81A00201F76BE0107971F76BE01A2 +:2031DE0007CDFF3FA81A00801F76BE0107971F76BE011618CFFF1F76BE011A1A04001F761A +:2031FE003700008FD29204A81F763700008F689306A81F763300321A04001F763300321AAB +:20321E000800237600011A76D396C38B089A01D54E9BA38A40766D97A18A0CDCC41A00402E +:20323E00A18A0CDCC418FFDFC918BFFFC918DFFFC918F7FFC918FBFFC91A0200C91A0100CA +:20325E00A18A0ADCC418FFBFA18A0BDCC4CCE0FF0150C49640768795A38AA9AA4076869655 +:20327E00D392025205ED1F76BF01081A0400C38ABF56E402099AA38A4076DF950CD0932B2E +:20329E00008D9E01932B008D3303932BA18A0BDCC41A4000C91A2000BE82BE86BE8B06009F +:2032BE00A888C48A0052096509520763C4CDF8FFFF9C0790A8CAC496A69245520DEC4E52FF +:2032DE0008EC4F520DEDC41A2000C418BFFF086FC418DFFF056FC41A2000C41A4000A592B1 +:2032FE00015203EDC4187FFF025203EDC41A8000C418EFFFC418F7FF06000002008D4203FB +:20331E00941E0600060000D0A09280520867008FC0DD942B01D8A0928052FA681F76780354 +:20333E00BF5624081F765D0308921F7678033E961F767803BF5625141F767803BF5626C84A +:20335E001F765D030792015277ED1F767903208ABF56C4371F767903208ABF56CC371F76D7 +:20337E007903208ABF56D4371F767903208ABF56DC371F767903208ABF56E4411F76790300 +:20339E00208ABF56EC411F767903208ABF56FC321F767903208A08D0BF5694321F767903A6 +:2033BE00208A09D0BF5694321F767903208A0AD0BF5694321F767903208A0BD0BF569432B0 +:2033DE001F767903228ABF56C4321F767903228ABF56CC321F767903228ABF56D4321F76CA +:2033FE007903228ABF56DC321F767903228ABF56E43C1F767903228ABF56EC3C1F76790367 +:20341E00228ABF56FC2D1F767903228A08D0BF56942D1F767903228A09D0BF56942D1F7638 +:20343E007903228A0AD0BF56942D1F767903228A0BD0BF56942D1F765D030C9223EC0CD0AA +:20345E00A09210520F671F767903208A94287C091F767903228A9428B60501D8A0921052A7 +:20347E00F3681F7677030C1A00401F7677030D1A00401F7677030E1A00401F7677030F1A39 +:20349E0000401F765D03069206522CED1F767803BF5620C81F767803BF5621141F76780359 +:2034BE00242B1F767803BF5630641F7678033128F4011F767803BF5632641F767803332862 +:2034DE00F4011F7678033828C0121F7678033928A00F1F7678033A28C0121F7678033B28C0 +:2034FE00A00F05526EED1F767703021A00401F767703031A004000D0A09211526267008FB9 +:20351E00A8D7949203520BED1F767903228A94282C011F767903208A9428AE01008FA8D7C1 +:20353E00949204520BED1F767903228ABF5694AA1F767903208ABF5694FA008FA8D7949257 +:20355E0005520BED1F767903228ABF5694141F767903208ABF569428008FA8D7949206526C +:20357E0004EC949207520BED1F767903228ABF56940F1F767903208ABF56941E008FA8D7C1 +:20359E00949208520BED1F767903228ABF56940A1F767903208ABF569414008FA8D7949279 +:2035BE0009520BED1F767903228ABF56943C1F767903208ABF56944101D8A0921152A068DD +:2035DE000600BDB2008FC0DD1F7679031EA81F767903008FF0DD20A81F767903008F08DE9A +:2035FE0022A8A9287E3F008F80DEA8280201407611A8809A008F80DE407605B61F767C039A +:20361E00005430EDA91BFFFF2DEC1F767B033E921F765D03085426ED00D0A09280520B67B3 +:20363E00008F80DE408FC0DD9492959601D8A0928052F7681F7678033F2B1F765D0307927E +:20365E00035217ED1F76780320921F767803B15620C81F76780321921F767803B156211423 +:20367E00086F4076A0971F7678033F2B40766C991F765D030792015211ED00D0A09204525C +:20369E000D670CD1A172008FD8D7408F30DE9C92959601D8A0920452F568BE8B0600009B8C +:2036BE0000D0A09280520F67008FC0DD408F80DE9492955404EC94929596019B01D8A09252 +:2036DE008052F368005311EC008F80DE809A407605B61F767C030096A9287E3F008F80DEB2 +:2036FE00A82802014076BAA70600BDB2BDAABDA203E2BD0404FE1F765D0307920152C056E8 +:20371E00420100D1A1920C52E3FFA3000356A1024396407681B5429620FFF4014076B9B98C +:20373E00019A4394407681B5419620FFF4014076B9B9469A4394407681B5A95A20FFF40140 +:20375E004076B9B9029AAD5C82DC407605B6A25413EC013BA192008FA8D7A9850156A40014 +:20377E00C492095205EC422B41281101056F42284A01BF56411E425BC4E24104029A439409 +:20379E00407681B5429620FFF4014076B9B9039A4394407681B5419620FFF4014076B9B998 +:2037BE00489A4394407681B5A95A20FFF4014076B9B9029AAD5C82DC407605B6A25414EC9D +:2037DE00013BA192008FA8D7A9850156A400C492095206EC4228CE0E4128D901056F42281B +:2037FE00A00F412868014288C4E24101013BA192008FD8D7A9850156A400C47B8CE62000D1 +:20381E00A192008F40D8A9850156A400A9BF120FC496A69220E70801A39EA985A9BD160F62 +:20383E00007700770077007789E6090040766AB6013B008F80D80356A1010156A40003E242 +:20385E00C400A192019C0C52A959E4FF61FF0CD1A19210527D630356A1024396407681B500 +:20387E00429620FFF4014076B9B9019A4394407681B5419620FFF4014076B9B9469A4394EE +:20389E00407681B5A95A20FFF4014076B9B9029AAD5C82DC407605B6A25404EC4228FF0715 +:2038BE00412B425BC4E24104029A4394407681B5429620FFF4014076B9B9039A4394407659 +:2038DE0081B5419620FFF4014076B9B9489A4394407681B5A95A20FFF4014076B9B9029A01 +:2038FE00AD5C82DC407605B6A25404EC42280609412B4288013BA192008FD8D7A98501560B +:20391E00A400C47B8CE62000A192008F40D8A9850156A400A9BF120FC496A685A9BD120F7C +:20393E0000770077007702E8D12389E6000040766AB6013B008F80D80356A1010156A400C8 +:20395E0003E2C400A192019C1052A959856400D1A192045217630C9A013B008FD8D7A1945A +:20397E00408FC0DDA9850156A400A192A98570090156A500C492C596A192019C0452A959E5 +:20399E00EB641F765D0307920252C056D00000D1A1921152E3FFCB000356A1024396407653 +:2039BE0081B5429620FFF4014076B9B9019A4394407681B5419620FFF4014076B9B9469A4E +:2039DE004394407681B5A95A20FFF4014076B9B9029AAD5C82DC407605B6A25413EC013B22 +:2039FE00A192008FA8D7A9850156A400C492095205EC009A42964196056F42286306BF56F8 +:203A1E0041F0425BC4E24104029A4394407681B5429620FFF4014076B9B9039A4394407632 +:203A3E0081B5419620FFF4014076B9B9489A4394407681B5A95A20FFF4014076B9B9029A9F +:203A5E00AD5C82DC407605B6A2543CEC013BA192008FA8D7A9850156A400C49209522EECE1 +:203A7E00A192008FA8D7A9850156A400C492035220ECA192008FA8D7A9850156A400C49247 +:203A9E00045212ECA192008FA8D7A9850156A400C492075203ED019A036FA928920942965A +:203ABE00BF5641F00F6F42289209412898080A6F422892094128D80E056F4228B30F412840 +:203ADE004E024288C4E24101013BA192008FD8D7A9850156A400C47B8CE62000A192008F5D +:203AFE0040D8A9850156A400A9BF120FC496A69220E70801A39EA985A9BD160F0077007754 +:203B1E000077007789E6090040766AB6013B008F80D80356A1010156A40003E2C400A19256 +:203B3E00019C1152A959E4FF39FF84FEAFE2BE04BE82BE86BE8B0600BDB2BDAABDA2A48643 +:203B5E0011D0928012D113D003569A0892CAA95B1F766F03008DA10139929296008DA201DA +:203B7E00BF569203008DA3010356A301929600D5A392A5542969A792A558A072008FC0DD1E +:203B9E0094CC00FFC7FFA9880356A501039C008DA101A927A9AAAB0DA98A947E029BA792EE +:203BBE00A558A595A2C4A072008FC0DDA80E30FF0156A600408DA1019492FF909E9601DDF4 +:203BDE00A392A554D966408FFFFFA9AA008FA1010156A4000356A301039CA90E4076C6B58A +:203BFE00A95D0356A301008DA101A993039DA888A9AAA60DA98AA5CDFF009497029BA28ACB +:203C1E00A395A80E30FF0156A400A592A7FFFF9094960356A301059CA988A9AAA60DA98AD0 +:203C3E00942B039AA28AA394A90E30FF0156A400942B0356A301079CA988A9AAA60DA98AFD +:203C5E00942B049AA28AA394A90E30FF0156A400942B008D9E01BF569201408FA101A9AA4E +:203C7E000156A500A28A049AA3940356A901A90E4076FE95BE82BE86BE8B0600BDB200BE26 +:203C9E00A69208521067A9A80ED0A60DA983A9A89580A60D008DA101A983957F01DEA69250 +:203CBE000852F26811D0945812D103569C0813D19CCA408FC0DD9596008D9E01BF569401CE +:203CDE00A9A8408FA1010156A5000A024076FE95BE8B060000D40053B156A401A493005208 +:203CFE000DED005306ED1F76BF010C1A0100116F1F76BF010A1A01000C6F005306ED1F769A +:203D1E00BF01051A0004056F1F76BF01031A00040600005208EC1F76BF0109CC1000C3FF70 +:203D3E0001F0076F1F76BF0101CC8000C6FF01F00600005206ED1F76BF01071A0001056F70 +:203D5E001F76BF010F1A200006001B76F0FF0500BDAABDA8BDA0BDC2BDC3BDAB00E2BD00ED +:203D7E0003E2BD0003E2BD0103E2BD0203E2BD0330E6000606FE69FF42291656227601029D +:203D9E001F767C03015628002376391110291A761F7678033F4F04EE69FF40767FB11F7653 +:203DBE005E03000A1F765E030092505208681F765E03002B1F765E03BF5601011F767003AA +:203DDE00100A1F76700310921F765E0303542C681F767003102B1F765E03089201901F7627 +:203DFE00780301F03F930191A9CB10ED1F765D030792025206EC1F76BF010D1A0008146F89 +:203E1E001F76BF010D1A00100F6F1F765D030792025206EC1F76BF010F1A0008056F1F7617 +:203E3E00BF010F1A001000D1A1920252E3FF2601A12D008FF5DCB7350156A400C40A1F7692 +:203E5E0079031E8A013BA192A9850156A400C44FCD56F5000635008F03DC0156A400C49263 +:203E7E00C056D5000635408F00DC0156A50000D4C592B156A4010635408F00DC0156A5009E +:203E9E00C57C008F00DC06350156A40069FFC493A1924076879C008F00DC06350156A400B6 +:203EBE00C492C056E500A1924076A69C013B008F04DCA9855AFF06350156A400C406461ED2 +:203EDE0030FF461E4692ABCA46964593008F04DCAACB06314597A9A90156A4004606C41EBE +:203EFE000635008F00DC0156A400CC0ACC922052E8FFBE0000D20635008F03DC0156A40042 +:203F1E001F76780303562001C496A19203ED0602026F0002008F03DC0156A4001F76780388 +:203F3E002092C4960635008F04DC0156A400407637B6005216EDA12D008F00DC06350156EF +:203F5E00A400D40AD49214525A690635008F02DC0156A400BF56C414A2920150A95A4F6F5C +:203F7E00A12D008F04DC06350156A400C4C4013BAC281800A60646FF2256A60747FFA61EE0 +:203F9E000356A101109C008FC0DDA9850156A400C47E0356A101119C008FC0DDA98501566C +:203FBE00A400A606C497A6BD120F007700770077007789E6000000774EE801A0A12DB73561 +:203FDE008CE60800008FF6DC0156A400A9BF120FC496189AA194008FC0DD8CE60800A9854F +:203FFE000156A400A9BF120FC4960635008F02DC0156A400C42BA1924076B69CAD5C437A32 +:20401E00A19283DC40760B84326F0635008F00DC0156A400DC0B0635008F01DC0156A400E0 +:20403E00C42B0635008F00DC0156A400C42B69FFA192009B4076879C1A6F1F7679031E8A92 +:20405E00A192A9850156A400C42B1F7679031E8AA192A9850156A400C41A0080189AA1949D +:20407E00A985008FC0DD0156A400C42BA192019C0252A959E4FFDEFE1F765E0307921F76D5 +:20409E005E0308961F765E03072B86FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00F5 +:2040BE00BE87BEC5BEC4BE83BE8ABE860300F1FF1776027602FE2276008FC29C1F76340085 +:2040DE001AA81A7669FF1F765D030F8F40423A0642A8C000BBB8A9BD120F0077007702E837 +:2040FE00D11F008F26DF89E600004076C5B71F7630000C282040237600101F765E03BF5670 +:20411E0003014076FD9E4076A49E82FE06001F7678033192013B1F767803309EA985A9BD2D +:20413E00120F007700770077007789E600001F76700303E20C001F76780339921F76780311 +:20415E00389EA985A9BD120F0077007700771F76700389E60100AFE20C0040766AB61F76D1 +:20417E00700303E20C001F767803013B33921F767803329EA985A9BD120F007700770077B2 +:20419E00007789E600001F76700303E20E001F7678033B921F7678033A9EA985A9BD120FA6 +:2041BE000077007700771F76700389E60100AFE20E0040766AB61F76700303E20E0006008E +:2041DE00408F40DCB7D400B6013B0A6FA792A5C4A9850156A600C62BA792019CA9800356CA +:2041FE00A401A754F4621F7676032C28B80B0600BDB2BDAAAD5AAD08B20086DA00B6A792ED +:20421E000252E3FF0902A72D008FF5DCB7350156A400C41B7017E9FFF901B735008FF5DC90 +:20423E000156A400C42B8076F1DC408F40DCB7350156A600008FF6DCB7350156A500B735AA +:20425E000156A400C658C492959600BEA692AF520F63AD5CA4084FFF013BA9850156A400D5 +:20427E00C4280080A692019CAF52A988F36400BE366FAA92AF523063AE9A013BA927146F4C +:20429E00AD5CA4084FFFFF9CA9850156A400AD5DA5084FFFC45CAB92A9850156A500C57C6C +:2042BE00AB92FF9CA927AA92AB540363AB92E962B735408F40DCAD5C013B0156A500A4084B +:2042DE004FFFA692A9850156A500AA92A9850156A400C527C43FA692019CA988B735008F3B +:2042FE00F2DC0156A400A692C4541D66AA2B013BAA92AF52BF63AD5CA4084FFFA98501560C +:20431E00A400B735C427008F40DC0156A400A692A9850156A400AB92C454AC65AA92019CBE +:20433E00A92FE76FB735408FF2DC0156A500AD5CA4084FFFC5599C92FA94A993CEFFA8948A +:20435E00A0FFA92700BE013B046FA692019CA988B735008FF2DC0156A400A692C4540A6758 +:20437E00AD5CA4084FFFA9850156A400AB92C454ED64B735408FF3DC0156A500AD5CA40812 +:20439E004FFFA692C59EFF9CA9589427B735008FF0DC0156A400C43FB735408FF3DC015699 +:2043BE00A500AD5CB735C5585AFFA4084FFFA692A072408FEFDCA9A90156A5009492C59622 +:2043DE00B735008FEFDC408FF0DC0156A400B7350156A500013BC592C49EA985A9BD120F51 +:2043FE00007700770077007789E60100B735008FF3DC0156A400C4922CEC0356A701008F10 +:20441E00C0DDA985408F0CDC78090156A4008076C0DD0356A7010156A500C8E2C400035629 +:20443E00A701A98570090156A60020E70800AFE2C50200E71000C8E2C602007710E71000C4 +:20445E0000778CE6000000770077A6BF120F0B6F0356A701019C008FC0DDA985700901569F +:20447E00A400C488B735008FF4DC0156A400C47EB735408FC0DD5AFF1A9A008FF4DCA794A7 +:20449E00A988A9A90156A400A692A9850156A500C492C596B7355AFF008FF6DC408FC0DD5B +:2044BE00209AA794A988A9A90156A400A692A9850156A500C492C596B7355AFF008FF0DCB8 +:2044DE00408FC0DD289AA794A988A9A90156A400A692A9850156A500C492C596B7355AFF7F +:2044FE00008FEFDC408FC0DD309AA794A988A9A90156A400A692A9850156A500C492C59642 +:20451E00389A8CE60800A794A985008FC0DD0156A400A9BF120FC496B7355AFF008FF2DC1C +:20453E00408FC0DD409AA794A988A9A90156A400A692A9850156A500C492C596B7355AFF06 +:20455E00008FF1DC408FC0DD489AA794A988A9A90156A400A692A9850156A500C492C596C7 +:20457E00B7355AFF008FF3DC408FC0DD509AA794A988A9A90156A400A692A9850156A50009 +:20459E00C492C596B735008FF1DC0156A400C40AB735008FF3DC0156A400C49205520968D8 +:2045BE00B735008FF2DC0156A400BF56C4AE1F6FB735008FF1DC0156A400408FF2DCB735B8 +:2045DE000156A500C492C596B735008FF2DC0156A40023BEAA2B0002C427008FF3DC1FF6B6 +:2045FE001756A600B7350156A400C43FB735008FF1DC0156A400C492AF520768B735008F1C +:20461E00F1DC0156A400C42BA792019C0252A980E4FFFBFDAD084EFFBE86BE8B0600A98ACF +:20463E00C4920600A983C57C0600BDB2BDAABDA2A486008DA00192925BEC922B0FD0925B0C +:20465E00013B008F00D7A392A9850156A400C49203525168A392008F00D7A9850156A40014 +:20467E00C41B90014866A392335204ED0CD0927B4F6FA985008F00D70156A400C492FE9C2D +:20469E00A980A9AA008F00D7A70DA61EA392A9850156A4000ED10ED0C492FF9CA980A9AA1A +:2046BE00A70DA98A03569C08A68A94CAA959408FFFFFA392807600D7A9850156A600A28A42 +:2046DE000EDCC693FE9DA80E4076C6B5A15405ED0CD0927BA3921C6FD292025205ED1F7628 +:2046FE00BF01081A0400099AA28A4076DF95A928FFFF0E6FD292025205ED1F76BF01081A50 +:20471E000400099AA28A4076DF95A928FFFFBE82BE86BE8B0600BDB2BDAAA4861F767603CE +:20473E00BF563601008D3203408DA10192939A97008DA2019296A928FFFFA95D008FA1012A +:20475E00A9AA0156A40002024076C6B5008DA301A9CDFF009297008DA401A7FFFF9092965A +:20477E00008DA501922B008DA601922B408FA101A9AAA28A0156A50006024076FE95BE86B9 +:20479E00BE8B0600A71EAC281F00013BA7C4A7062256A60740FF0156A400C488A7060190B7 +:2047BE00009B58FF04ECA6CCFF00046FA692A7FFFF900600060013D09492FF90A98012D0F9 +:2047DE009492FF90A988A70637FFA6AFA71E11D09492FF90A988A70637FFA6AFA71E10D034 +:2047FE009492FF90A988A70637FFA6AFA71E17D09492FF90A90EE41E16D09492FF90A98897 +:20481E00E40637FFA6AFE41E15D09492FF90A988E40637FFA6AFE41E14D09492FF90A988F7 +:20483E00E40637FFA6AFE41E02020156E400F4C30AD094C33A9A4076A8A10600BDB2BDAA0D +:20485E00BDA2A4820AD0E306938A02194076DFA1A927938AE30601194076DFA10356A90854 +:20487E00AB94A95A408D32030ED09B9293960FD0BF569333408FFFFFA38A02020EDC40764A +:20489E00C6B5A95D0AD0938AE30602194076DAB5A95DA292A55410EC008D3C03932BD3921B +:2048BE00025205ED1F76BF01081A0400099AA38A4076DF95096F339AA38A4076A8A1008D21 +:2048DE003C03BF569301BE82BE86BE8B06000600BDB2BDAA02FEA4861F767603BF5636019F +:2048FE0013D0AA2B9292FF90A92712D09292FF90A988A9A937FFA6AF5AFF11D09292FF90CF +:20491E00A988A9A937FFA6AF5AFF10D09292FF90A988A9A937FFA6AF5AFF2FFF0040AB0FF0 +:20493E0013692FFF0020AB0F0869AA18FF0FA9A940762CA141960C6FAB92AD5C029B81DC2D +:20495E00407611A8056FAB92407681B54196008D3203408DA10192929A96008DA201BF568C +:20497E009238008DA3014192FF909296008DA4014192A7FFFF909296008DA501922B008DB5 +:20499E00A601922B408FFFFF008FA101A9AA0156A40006024076C6B5A95D008DA701A5CC64 +:2049BE00FF009296008DA801A592A7FFFF909296008DA901922B008DAA01922B408FA1018E +:2049DE00A9AAA28A0156A5000A024076FE9582FEBE86BE8B0600BDB202FEA48B13D0AA2B80 +:2049FE009192FF90A92712D09192FF90A988A9A937FFA6AF5AFF11D09192FF90A988A9A906 +:204A1E0037FFA6AF5AFF10D09192FF90A988A9A937FFA6AF5AFF412B15D041939192A83873 +:204A3E00419614D041939192A83841962FFF0004AB0F13692FFF0002AB0F0869AA18FF006B +:204A5E00415CA9A940762FA10C6FAB92AD5C029B81DC4076BAA7056FAB92419340763DB5C4 +:204A7E00399AA18A4076A8A182FEBE8B0600BDB2BDAABDA203E2BD04A4821F767603BF5628 +:204A9E00360113D09392FF90A90EA9BD220F007712D09392FF90A988A9BF220F37FFA6AF7A +:204ABE00A9BD220F007711D09392FF90A988A9BF220F37FFA6AFA9BD220F007710D09392CD +:204ADE00FF90A988A9BF220F37FFA6AFA9BD220F17D09392FF90A95A16D09392FF90A988D4 +:204AFE00A9AA37FFA6AFA98615D09392FF90A988A9AA37FFA6AFA98614D09392FF90A988EB +:204B1E00A9AA37FFA6AFA986408DA101008D320393929B96008DA201BF569334408DFFFF0C +:204B3E00008FA101A9A2A15D0156A40002024076C6B5A959A15DA9AAA4BF220F4076DAB581 +:204B5E00A959408FA101A9A2A38A0156A50001024076FE95008DA101BF569334408FA10188 +:204B7E00A9A2A38A0156A50001024076FE95C38AE446FEEFA9AAA5BF220FA38A4076599639 +:204B9E00C38AE446FEEFA192008DA101FF909396A192008DA201A7FFFF909396008DA30187 +:204BBE00932B008DA401932B408FA101A9A2A38A0156A50006024076FE95AFE2BE04BE8260 +:204BDE00BE86BE8B060006000600BDB206FEA48B13D09192FF90A90E421E12D09192FF9036 +:204BFE00A988420637FFA6AF421E11D09192FF90A988420637FFA6AF421E10D09192FF90AA +:204C1E00A988420637FFA6AF421E17D09192FF90A90E441E16D09192FF90A988440637FF17 +:204C3E00A6AF441E15D09192FF90A988440637FFA6AF441E14D09192FF90A988440637FF59 +:204C5E00A6AF441E1BD09192FF90A90E461E1AD09192FF90A988460637FFA6AF461E19D0D6 +:204C7E009192FF90A988460637FFA6AF461E18D09192FF90A988460637FFA6AF461E1CD006 +:204C9E0091CCFF0004520AEC055212ED4206448A46C4A693407611A8076F4206448A46C49A +:204CBE00A6934076BAA73C9AA18A4076A8A186FEBE8B060002FE2276008F0CA61F76350010 +:204CDE000AA81A7669FF407648B91F763300221A2000237601001F765D0307920152C056A0 +:204CFE0086001F76C401021A0F001F76C40103CCF0FF0B501F76C40103961F76C40103CCFC +:204D1E000FFFA0501F76C40103961F76C40103CCFFF0A91A00091F76C40103961F76C40153 +:204D3E0003CCFF0FA91A00801F76C40103961F76C4010418F0FF1F76C40104CC0FFF105045 +:204D5E001F76C40104961F76C40104CCFFF0A91A00041F76C40104961F76C40104CCFF0F35 +:204D7E00A91A00301F76C40104961F76C40105CCF0FF05501F76C40105961F76C40105CC9F +:204D9E000FFF20501F76C40105961F76C40105CCFFF0A91A00061F76C40105961F76C40150 +:204DBE0005CCFF0FA91A00701F76C40105961F76C401061A0F001F76C40106CC0FFFD050EB +:204DDE001F76C40106961F76C40106CCFFF0A91A000E1F76C40106961F76C40106CCFF0FA3 +:204DFE001F76C401A91A00C006961F765D03079202527EED1F76C40102CCF0FF0E501F76C5 +:204E1E00C40102961F76C40103CCF0FF06501F76C40103961F76C40103CC0FFF70501F762A +:204E3E00C40103961F76C40103CCFFF0A91A00021F76C40103961F76C40103CCFF0FA91A2C +:204E5E0000301F76C40103961F76C40104CCF0FF05501F76C40104961F76C40104CC0FFF77 +:204E7E0040501F76C40104961F76C401041A000F1F76C40104CCFF0FA91A00D01F76C401E4 +:204E9E0004961F76C40105CCF0FF0B501F76C40105961F76C40105CC0FFF80501F76C4018D +:204EBE0005961F76C40105CCFFF0A91A000E1F76C40105961F76C40105CCFF0FA91A00A0BD +:204EDE001F76C40105961F76C40106CCF0FF09501F76C40106961F76C40106CC0FFF1050BB +:204EFE001F76C40106961F76C4010618FFF01F76C401011A00011F76C401011A00081F76AF +:204F1E00C401191A10001F76C401001A10001F76C401011A00401F763300BF5621011F769E +:204F3E00A001191A00081F76A00119CCFFF8A91A00041F76A00119961F76A0011ACCFFFCA2 +:204F5E00A91A00011F76A0011A961F76A001BF5609801F76A00100CC7FFCA91A00011F76DF +:204F7E00A00100961F76A00100CCFFE3A91A00081F76A00100961F76A001019A00CD001CA7 +:204F9E00D9FFA82D66FFA9881F76A00100CC800304ED0102A71E0A6F1F76A00100CC800374 +:204FBE00013BC6FF80FFA985A71E013BA6851F765D03AC1EA7064456A900421E3A06C000EA +:204FDE00BBB8008F881342A8C000BBB81F76A00105961F76A0010018FCFF82FE06001B76C8 +:204FFE00F0FF0500BDAABDA8BDA0BDC2BDC3BDAB00E2BD0003E2BD0003E2BD0103E2BD0287 +:20501E0003E2BD0330E6000602FE69FF422916561F763300229241962376010026760101E7 +:20503E001F7633002218FA001F7633002128FFFF10291F7681033192C1565B011F765D03CA +:20505E0007920252C056F50000D1A1921152E3FFE700013B008FA8D7A9850156A400C49241 +:20507E00C156D800A192008FA8D7A9850156A400C492075209EDA192008F50D7A9850156A6 +:20509E00A400C4880A6FA192008F0871A9850156A400C492C3FFA988A192008FA8D7A9856D +:2050BE000156A400C49303530AECA192008FA8D7A9850156A400C493045375EDA692C85268 +:2050DE001C620356A101008F80E00156A4000002C41E0356A101008F72E00156A400C406CA +:2050FE0062EC0356A101008F72E00156A40001024156C400EFFF8E000356A101008F80E0A9 +:20511E000156A400C40609ED0356A101008F72E00156A4000002C41E0356A101008F72E01F +:20513E000156A40002020156C400408F88E00356A101008F88E00156A4000356A1010156C1 +:20515E00A500AFE2C501A692A985A9BD120F00770077007769FF89E60000A48620E740009B +:20517E0002E8411640766AB6AFE2C20110E74000007703E2C200013B008F88E00356A10123 +:20519E000156A400AFE2C4008CE6000000770077A6BF120F0356A101008F80E00156A400D6 +:2051BE000102C41EA192008F58E0A9850156A400C47EA692A985A9BD120F00770077007735 +:2051DE00007789E60000A12D69FF008FC0D812350156A400407687B8013BA192008F40E019 +:2051FE008EE60000A9850156A400A9BF120FC496A192008FA8D7A9850156A400C4920952F6 +:20521E0005ECA19240760B89046FA1924076FD87A192019C1152A959E4FF1DFF1F765E03F8 +:20523E0007921F765E0308961F765E03072B1F765D03079201525CED00D1A19218524F63B1 +:20525E00013B008FA8D7A9850156A400C49242ECA192008F0871A9850156A400C492C3FFBD +:20527E00A90EA9BD120F00770077007700778BE60000A192A985008FA8D70156A400C492C5 +:20529E0002520AECA12D008FC0D869FF12350156A400407687B8013BA192008F40E08CE682 +:2052BE000000A9850156A400A9BF120FC496A192A985008FA8D70156A400C492025206ECBE +:2052DE0069FFA1924076FD87056F69FFA19240763885A192019C1852A959B3641F765E0310 +:2052FE0007921F765E0308961F765E03072B1F76C401011A00401F76C401191A10001F7654 +:20531E003300BF562101103B1F7633004192229682FEAFE2BE03AFE2BE02AFE2BE01AFE263 +:20533E00BE0080E2BE00BE87BEC5BEC4BE83BE8ABE860300F1FF17760276BDB2BDAABDA22D +:20535E0003E2BD04A95BA85AA4BD220F1F767C030002301E1F76300014282040008F02DFBC +:20537E004076E7A80052FBECA292A293C0FF0191A995A85AA2922FECA39220D11F90A1745E +:20539E00A292A1540267A2591F767C0303E20E04A10E1F767C03101E1F767C030356A30155 +:2053BE00A90E121E008F02DF408F0EDF4076EDA8008F02DF4076E7A80052FBECA9BF220FEA +:2053DE00A10DA9BD220FA392A194A95BA292A19EA95AD3ED1F76300014281040AFE2BE0422 +:2053FE00BE82BE86BE8B0600BDB2BDAABDA203E2BD04A95BA85AA4BD220F1F767C03000233 +:20541E00301E1F76300014282040008F02DF4076E7A80052FBECA292A293C0FF0191A995D9 +:20543E00A85AA2922FECA39220D11F90A174A292A1540267A2591F767C0303E21404A10EC6 +:20545E001F767C03161E1F767C030356A301A90E181E008F02DF408F14DF4076F1A8008FD8 +:20547E0002DF4076E7A80052FBECA9BF220FA10DA9BD220FA392A194A95BA292A19EA95AED +:20549E00D3ED1F76300014281040AFE2BE04BE82BE86BE8B060002FE1F767C0306C5008F49 +:2054BE0002DF673E22761F763400008FF5A81CA81A7669FF407674B71F765D030F8F404209 +:2054DE0042A83A06C000BBB8A9BD120F0077007702E84116008F2EDF89E600004076C5B75E +:2054FE002376002082FE060022761F76BE0108CCFCFF01501F76BE0108961F76BE0108CC29 +:20551E00F3FF04501F76BE0108961F76BE0108CCCFFF10501F76BE0108961F76BE01081879 +:20553E003FFF1F76BE010B1A08001F76BF010118F7FF1A761F76C101BF5600071F76C101D0 +:20555E00BF56011F1F76C101022B1F76C101BF56040C1F76C1010A2800801F76C1010B2B62 +:20557E001F76C1010C2B1F76C101BF560F10D42B0002C41E1F76C101001A800069FF0600B2 +:20559E001F76BF01011A080006001F76BF010118F7FF0600009AD4930391B156A9010600B9 +:2055BE00C4A0D41A01000600C4A0D41A020006001B76F0FF0500BDA8BDA0BDC2BDC3BDAB6C +:2055DE0000E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000669FF4229165622768D +:2055FE0001021F767C03015630001F767C0308C5008F02DF69FF673E1A76AFE2BE03AFE21E +:20561E00BE02AFE2BE01AFE2BE0080E2BE00BE87BEC5BEC4BE83BE8A0300F1FF1776027622 +:20563E00BDB2A48B1F767C031B921352E6FFA3010356A901C0765AC1A988A706A60DA71E55 +:20565E00A92401DFA824A71E2076C18A1F767C031C0ED40F1F767C03B0561B11C0568B0104 +:20567E0008D091C5673E1F767C031B2B1F767C031C2BD118F7FFD118FDFFEFFF7C011F76C0 +:20569E00C1010246CC567701C18A1F767C031C58C48A1F76C101079294961F767C031C0AD3 +:2056BE001F767C03BF561B13EFFF65011F76C1010246CC5660011F76C10107921F767C03FB +:2056DE001D961F767C03BF561B11EFFF54011F76C1010246CC564F011F76C10107921F76CB +:2056FE007C031D961F767C03BF561B0FEFFF43011F76C1010246CC563E0108D091C5673E02 +:20571E001F76C10107400DEED118FBFFD118FEFF1F767C031B2B1F767C031C2BEFFF2B013A +:20573E001F767C03BF561B09EFFF25011F76C1010246CC5620011F76C10107921F767C0304 +:20575E001D961F767C03BF561B0BEFFF14011F76C1010246CC560F011F76C10107921F76D0 +:20577E007C031D96C18A1F767C031C0ED40F1F767C03B0561B07C056FE0008D091C5673E4A +:20579E001F767C03BF561B09EFFFF5001F76C1010246CC56F0001F76C10107921F767C0306 +:2057BE001D961F767C03BF561B07EFFFE4001F76C1010246CC56DF001F76C10107921F76D6 +:2057DE007C031D961F767C03BF561B05EFFFD3001F76C1010246CC56CE001F76C1010792F0 +:2057FE001F767C031D9608D091C5673E1F767C03BF561B03EFFFBF00D1400AEF1F767C03DF +:20581E00BF561B01D11A04000AD091C5673ED141CC56B1001F767C03BF561B0DD11A08004C +:20583E000AD091C5673EEFFFA6001F76C101BF56008F1F76C101082B1F76C101021A2000C9 +:20585E001F767C03BF561B12EFFF95001F76C101BF56008FC18A1F76C101E49208961F760B +:20587E00C101021A20001F767C03BF561B10EFFF82001F76C101BF5600871F76C1010828CE +:20589E0000031F76C101021A20001F767C03BF561B0E706F1F76C101082B1F76C101021A26 +:2058BE0020001F767C03BF561B0C646F0AD091C5673E1F76C101BF5600871F76C101082838 +:2058DE0000051F76C101021A20001F767C03BF561B0A506F1F76C101BF56008FC18A1F762A +:2058FE007C031C58C48A1F76C101949208961F767C031C0A1F76C101021A20001F767C034D +:20591E00BF561B08376F1F76C101BF56008FC18A1F76C101E49208961F76C101021A200047 +:20593E001F767C03BF561B06256F0AD091C5673E1F76C101BF5600871F76C101082800021A +:20595E001F76C101021A20001F767C03BF561B04116F1F76C101BF5600871F76C101082854 +:20597E0000061F76C101021A20001F767C03BF561B02BE8B060034FEA92DA85CAA281C8061 +:20599E00AB2800E0A492B456A400A4921052B356A40F2276AC921AED408F0060807600619B +:2059BE00C076C0601F76BE0109CCFFCFA91A00101F76BE0109961F76BE0109CCFF3F1F76BA +:2059DE00BE01A91A00400996196F408F006280760063C076C0621F76BE0107CCFFFCA91AF9 +:2059FE0000021F76BE0107961F76BE0107CCFFF31F76BE01A91A0008079608022AD0951E0A +:205A1E002CD0951ED61E0AD0961E12D0961E0002C51E013BA9A9A481C61E08D0A9A9A481D6 +:205A3E002009961EA4CC010010D0A95CA9A9A4813009961EAA28FFFFAB28FEFFD5A907028A +:205A5E00C51E08D000020119951E0CD000020119951E1ED000020119951E22D00002011928 +:205A7E00951E18D000020119951E0002601E601A0080601A0040601A0020601A0002601ADA +:205A9E008000601A001014D06006951E18D09544FFEF16D095065E1E5ECDFFFCA81A00014C +:205ABE005E975DCD00FF05515D975E1A78005ECDF8FF02515E975E06951E6018FFEF14D0A5 +:205ADE006006951E18D09544FFEE088F7064C7A8D7A8010230D0951E32D00002951E2ED01D +:205AFE00951E541E24D00602951E26D00002951E541A0100531A0200541A0200541A040049 +:205B1E0020D05406951EAC9214ED008F7EAC1F76370008A81F763300321A10001F76370006 +:205B3E00008FEAAC0AA81F763300321A2000136F008F40AD1F7637000CA81F763300321AAA +:205B5E0040001F763700008F4DAD0EA81F763300321A8000237600011A7600021F765D0327 +:205B7E002E1E1F765D032C1E1F765D03382B1F765D03301EB4FE69FF0600BDAAA82D005233 +:205B9E0005ED408F0060807600611F765D03399209EC08D09506019005ED0AD095060190BE +:205BBE004DEC010208D0951E0AD0951E013BA4C5AC850156A700C7855AFFAA180000AC8507 +:205BDE003FFFABCAAACBA81A00E0A986029AAC94A4C5A9850156A700019AAC94A958C78515 +:205BFE005AFFA092A9850156A400AA180000C4853FFFABCAAACBF6AAE61E22762ED0000264 +:205C1E00951E1A760102E51E1F765D03BF5639011F765D030792015205ED1F76BF010F1A88 +:205C3E001000035205ED1F76BF01071A0008025205ED1F76BF010F1A0080BE86060006FEDF +:205C5E00F4C4E4C5A606A80EA958A0CC00804396A0CC00404296A0CC00204196A018FF1FE0 +:205C7E00467EA7064597447F439208ECA092805205674692008FC0DD949601D8429208ECEE +:205C9E00A092805205674592008FC0DD949601D8419208ECA092805205674492008FC0DD37 +:205CBE0094961F765D030792015206EC1F76BF010F1A0100056F1F76BF010F1A020086FED2 +:205CDE0006001B76F0FF0500BDA8BDA0BDC2BDC3BDAB00E2BD0003E2BD0003E2BD0103E229 +:205CFE00BD0203E2BD0330E6000602FE69FF422916560102A71E1F76330032924196237603 +:205D1E000001267600011F76330032921F763300322B1F7633002128FFFF10291F768001B8 +:205D3E001ECC1F00A988A62DA7063B56A71E1F7680010CC3013B008F006169FF0356A603BA +:205D5E000156A40040763CAC1F76330001BE2192A9931F763300D7FF0191A9CCFFFEA6CB03 +:205D7E00019197FFA9CB2197103B1F7633004192329682FEAFE2BE03AFE2BE02AFE2BE0190 +:205D9E00AFE2BE0080E2BE00BE87BEC5BEC4BE83BE8A0300F1FF177602761B76F0FFBDA0CE +:205DBE00BDC2BDC3BDAB00E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE15 +:205DDE00422916561F7633003292419623760001267600011F76330032921F763300322B83 +:205DFE001F7633002128FFFF102901021F768001061E1F765D03380A1F76330001BE21928F +:205E1E00A993D7FF1F7633000191A9CCFFFEA6CB019197FFA9CB2197103B1F7633004192DB +:205E3E00329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BE87BEC5BEC4BE830F +:205E5E00F1FF177602761B76F0FF00E2BD0030E600064229165680E2BE00F1FF1776027608 +:205E7E001B76F0FF00E2BD0030E600064229165680E2BE00F1FF17760276BDB2BDA2407659 +:205E9E0076B1103B69FF4076E7B7267600002F760000407699B94076F2B640764CB71F76C1 +:205EBE00BF010C1A01001F76BF010B1A010000D1A1920A521363012920FF50C3407660B763 +:205EDE001F76BF010F1A01001F76BF010E1A0100A192019C0A52A959EF641F76BF010A1AAD +:205EFE0001001F76BF010B1A010040767FAF1F765D030692109B4076B2B90D9A4076A69632 +:205F1E0001D4418F00C2A9A04076B29602D4418F00C2A9A04076B2961F765D03009A0893DC +:205F3E004076D8AA407668A8407636B81F765D030792035204ED407693810E6F407677A4B5 +:205F5E004076A78140761BB5078F20A1A9A8407660B7407692994076FE98407659831F76F6 +:205F7E005D030792035203ED4076779E1F765D0308921F7678033E9600D1A19203521463B7 +:205F9E00013B008FFCDBA9850156A400C42BA192008FFEDBA9850156A400C42BA192019CA6 +:205FBE000352A959EE6422761F76C001BF56292F1A761F768103BF5631011F765E03019246 +:205FDE00C156A7001F765E03012B00D1A1920252E3FF9F00013B008FC0DDA985650901568F +:205FFE00A400C492C1568F00A192008FFCDBA9850156A400408FC0DDC492019CA988C49637 +:20601E00A192A98565090156A500A692C5547A641F766F033C9276ECA192008FFCDBA9856A +:20603E000156A400C42B136FA192008FFEDBA9850156A400C492109CA988A192A618F0FFFF +:20605E00008FFEDBA9850156A400C47E013BA192008FFEDBA9850156A400C49280520864BB +:20607E00A192008FFEDBA9850156A400C42BA192008FFEDBA9850156A400109BC492C000CA +:20609E00F6B8013BA92DA192008FFEDBA9850156A400C492A993B2FFDBFFA888008F64DE40 +:2060BE00A694A3FFA9880356A103A6810156A400C49363FFA888A692B8EC013B0B6FA192E8 +:2060DE00008FFEDBA9850156A400C40AA692A0FFA9880190F5EC013BA192008FFEDBA985C4 +:2060FE000156A400C493009A008FC0DD4076DAAB013BA192008FFEDBA9850156A400C40863 +:20611E000300A192019C0252A959E4FF65FF1F7678033F4207EF1F7678033F18FBFF407653 +:20613E006C991F7678033F4507EF1F7678033F18DFFF407692991F7678033F4307EF1F766F +:20615E0078033F18F7FF4076A0971F7678033F4807EF1F7678033F18FFFE4076A49E4076CD +:20617E0064B01F765D030792025207EC1F765D030E921F76770317961F765D0307920352E4 +:20619E0012ED1F767803008FC2DD3FCC0002C4CDFEFFC8FFA8CAC4961F7678033F4903EEED +:2061BE004076159F00D1A1920252E3FF08FF005204ECC08D00D0036FC08D80D3A38A4076C2 +:2061DE0032A1A91BFFFF77EC37521162375244EC33520862335258EC035266EC06525CECF5 +:2061FE006A6F345249EC35523FEC656F3A5208623A521AEC385228EC39521EEC5C6F3B5254 +:20621E000BEC3C5258EDA38A407602A41F76BF010F1A0100506FA38A4076F7A11F76BF01FF +:20623E000F1A0100486FA38A4076F8A11F76BF010F1A0100406FA38A407608A31F76BF01D2 +:20625E000F1A0100386FA38A407685A21F76BF010F1A0100306FA38A407601A41F76BF014A +:20627E000F1A0100286FA38A407684A21F76BF010F1A0100206FA38A407654A31F76BF01F9 +:20629E000F1A0100186FA38A40763BA21F76BF010F1A0100106FA38A40765B9C1F76BF0142 +:2062BE000F1A0100086FA38A4076B99B1F76BF010F1A0100A192019C0252A959E3FF7FFEE4 +:2062DE00EFFF77FF22761F76BE01061800001F76BE01071800FF1F76BE0108183F001F7678 +:2062FE00BE01091800FF1F76BE011618C0FC0F8F00F0ABA81F76BE01AB93AA9218C11F7646 +:20631E00BE0119C01F76BE010B18EFFF1F76BE010B18DFFF1F76BE010B18BFFF1F76BE0184 +:20633E001B18F7FF1A761F765D03062B00BE009B64530B631F76BF0101CC4000C5FF01F0CB +:20635E00A672019D6453F764A692325204651F765D03060A00BE009B64530B631F76BF015A +:20637E0001CC1000C3FF01F0A672019D6453F764A692325205651F765D030608020000BEBE +:20639E00009B64530B631F76BF0101CC2000C4FF01F0A672019D6453F764A692325205653B +:2063BE001F765D03060804001F765D03035606011F765D0308961F765D03060A00BE009B72 +:2063DE0064530B631F76BF0109CC0800C2FF01F0A672019D6453F764A692325204651F7614 +:2063FE005D03080A1F765D030692015203EC025205ED1F765D03BF560C01015207EC025247 +:20641E0005EC035203EC045205ED1F765D03BF56070105521F765D03B156070206521F7686 +:20643E005D03B156070322761F765D030792015220EC025211EC035228EDAA28080DAB2BD0 +:20645E001F76BE010AA9AA282108AB2805001F76BE011AA91A6F088F00001F76BE010AA807 +:20647E00AA2801D0AB2804001F76BE011AA90D6F088F00001F76BE010AA8AA2813DCAB28C0 +:20649E0007001F76BE011AA91A7669FF060000BE1F765D030792015246ED1F76BF01004754 +:2064BE000EEF038F90D01F765D03A9A8280F0B6501021F765D0301562800056F00021F7660 +:2064DE005D03281E038F90D01F765D03A9A8280F026501BE1F76BF0100460CEFA9A81F76E7 +:2064FE005D032A0F0B6501021F765D0301562A00056F00021F765D032A1EA9A81F765D0303 +:20651E002A0F026502DE1F765D03069203520B631F76BF01014A02EE04DE1F76BF0101477E +:20653E0002EE08DE1F765D0307920252C056B2001F76BF01094A02EF01DE1F76BF01094D9A +:20655E0002EF02DE1F76BF01094502EF10DE1F76BF01094402EF20DE1F76BF01014802EFAA +:20657E0040DE1F76BF01014704EFA6068009A61E1F76BF01014B05EFA60618FF0100A61E39 +:20659E001F76BF01014A05EFA60619FF0100A61E1F76BF01084405EFA6061AFF0100A61EA1 +:2065BE001F76BF01014905EFA6061BFF0100A61E1F76BF01004005EFA6061CFF0100A61E8A +:2065DE001F76BF01004205EFA6061DFF0100A61E1F76BF01004405EFA6061EFF0100A61E6A +:2065FE001F76BF01004605EFA6061FFF0100A61E1F76BF01004805EFA6061FFF0200A61E3E +:20661E001F76BF01004A05EFA6061FFF0400A61E1F76BF01004105EFA6061FFF8000A61E9F +:20663E001F76BF01004305EFA6061FFF0001A61E1F76BF01004705EFA6061FFF0002A61E01 +:20665E001F76BF01004905EFA6061FFF0004A61E1F76BF0100CD02001F76BF01D0FF00CCE4 +:20667E00080001F1C2FF01F01F765D03A8CA1F961F76BF0100CD8000D6FF1F76BF0101F176 +:20669E0000CC0002C8FF1F765D0301F0A8CA20961F765D030792035209ED1F76BF01094EB4 +:2066BE0002EE01DE1F767703177E1F765D030EC20600407697B1049A029B40769FB1407689 +:2066DE002EB206001F76C00121920F90045212ED1F76C00111CC8001C6FF02520BED22765C +:2066FE001F76C001BF5625551F76C001BF5625AA1A76060022761F76C001BF5629681A76A3 +:20671E0069FF0600BDAAA980A8881F76C001114302EF25761F76C00111CC800107EC2276B8 +:20673E001F76C00111187FFE1A7622761F76C001111A4000A7921F76C0010F9021CDF0FF4B +:20675E001F76C001A8CA21961A76A79203ED01D2026FA75AA92880C3A828C901AC1E0556CB +:20677E00A200A2A9407697B11F76C0011140FDEF22761F76C0011118BFFF1A76A69301538B +:20679E0003EC02530EED22761F76C001A69211CD7FFE03901F76C00186FFA8CA11961A7604 +:2067BE00A6930AED013BA9AAAC281E0040FF2256A20741FFA986A69301530AED013BA9AA28 +:2067DE00AC281E0040FF2256A20741FFA986A693025309EDA9AAAC281F00013B2256A207B3 +:2067FE0040FFA986A79218EDA692035215ED22761F76C00111CC7FFE1F76C001A91A0001DE +:20681E00119669FF20FFDA054076B9B91F76C001111A80011A761F765D033AAABE8669FF0E +:20683E00060002FE22761F76C001BF561A011F76C0011B2B1F76C0011A9203ED0102066F10 +:20685E001F76C00103561A01A90E421E1F765D0369FF3A06C000BBB81F765D033E1E1F7683 +:20687E00C0011B9203ED0102066F1F76C00103561B01A90E421E1F765D033A06C000BBB8DA +:20689E001F765D033C1E1F762C0035CCF8FF01501F762C0035961F762C00341A04001F764D +:2068BE002C003418F7FF1F76C0011C1A0800787680001F76C0011C1A10001F76C0011C1A22 +:2068DE0000041F76C0011C1A00081F76C0011C1A20001F76C0011C1A00011F76C0011C1A3D +:2068FE0000101F76C0011C1A00201F76C0011C1A00401F76C0011C1A00801F76C0011C185C +:20691E00FBFF1F76C0011D1A01001F76C0011D1A02001F76C0011D1A04001F76C0011D1A24 +:20693E0008001F76C0011D1A10001F76C0011D1A20001F76C0011C1A04001F76C0011D1ACA +:20695E0000041F76C0011D1A00081F76C0011D1A00101F76C0011D1A00201F76C0011D1AA9 +:20697E0000011F76C0011D1A00021F76C0011D1A00401F76C0011D1A00801F76C001201AFF +:20699E0000011F76C001201A00021F76C001201A00041F76C001201A00081F76C001201A8A +:2069BE0000101F76C001201A00201A7682FE69FF060002FE22761F762B002028FFFF1F7648 +:2069DE002B002128FFFF1F762B002228FFFF1F762B002328FFFF1F762B002428FFFF1F7677 +:2069FE002B002528FFFF1F762B002628FFFF1F762B002728FFFF1A761F76FFCF3892419656 +:206A1E001F76FFCF399241961F76FFCF3A9241961F76FFCF3B9241961F76FFCF3C9241963E +:206A3E001F76FFCF3D9241961F76FFCF3E9241961F76FFCF3F9241961F762B002F92019008 +:206A5E0001F082FE69FF060022761F762C0035CCF8FF01501F762C0035961F762C003418FE +:206A7E00FCFF1F762C003418F7FF1F762C00341A04001F762C00201A60001F762C00201A91 +:206A9E001C001F762C00201A03001F762C00201A00301F762C00201A000E1F762C00201A8F +:206ABE0080011F762C00211A40001F762C00201A00401F762C00201A00801F762C00211A49 +:206ADE0003001F762C002C1A60001F762C002C1A1C001F762C002C1A03001F762C002C1AFA +:206AFE0000301F762C002C1A000E1F762C002C1A80011F762C002D1A40001F762C002C1A5C +:206B1E0000401F762C002C1A00801F762C002D1A03001F762C002E1A60001F762C002E1A13 +:206B3E001C001F762C002E1A03001F762C002E1A00301F762C002E1A000E1F762C002E1AB6 +:206B5E0080011F762C002F1A40001F762C002E1A00401F762C002E1A00801F762C002F1A70 +:206B7E0003001F762C00381A07001F762C00381A38001A7669FF407663B407F6007769FFEE +:206B9E00060022761F76BE01181A03001F76BE01181A0C001F76BE01181A30001F76BE0114 +:206BBE00181AC0001F76BE01181A00031F76BE01181A000C1F76BE01181A00301F76BE01A0 +:206BDE00181A00C01F76BE01191A03001F76BE01191A0C001F76BE01191A30001F76BE017D +:206BFE00191AC0001F76BE01191A00031F76BE01191A000C1F76BE01191A00301F76BE015C +:206C1E00191A00C01F76BE01141A03001F76BE01141A0C001F76BE01141A30001F76BE014A +:206C3E00141AC0001F76BE01141A00031F76BE01141A000C1F76BE01141A00301F76BE012F +:206C5E00141A00C01F76BE01151A03001F76BE01151A0C001F76BE01151A30001F76BE010C +:206C7E00151AC0001F76BE01151A00031F76BE01151A000C1F76BE01151A00301F76BE01EB +:206C9E00151A00C069FF407663B4060022761F76BE01261A03001F76BE01261A0C001F7648 +:206CBE00BE01261A30001F76BE01261AC0001F76BE01261A00031F76BE01261A000C1F7667 +:206CDE00BE01261A00301F76BE01261A00C01F76BE01271A03001F76BE01271A0C001F7645 +:206CFE00BE01271A30001F76BE01271AC0001F76BE01271A00031F76BE01271A000C1F7623 +:206D1E00BE01271A00301F76BE01271A00C01F76BE01171A03001F76BE01171A0C001F7622 +:206D3E00BE01171A30001F76BE01171AC0001F76BE01171A00031F76BE01171A000C1F7622 +:206D5E00BE01171A00301F76BE01171A00C01F76BE01281A03001F76BE01281A0C001F76E0 +:206D7E00BE01281A30001F76BE01281AC0001F76BE01281A00031F76BE01281A000C1F769E +:206D9E00BE01281A00301F76BE01281A00C01F76BE01161A00C01F76BE01161AC0001F7631 +:206DBE00BE01161A00301F76BE01161A000C1A7669FF060022761F76BE011C18FEFF1F7656 +:206DDE00BE011C18FDFF1F76BE01121A03001F76BE01121A0C001F76BE0116CCFCFF015015 +:206DFE001F76BE0116961F76BE0116CCF3FF1F76BE01045016961A7669FF06004076F7B49A +:206E1E001F76E401BF5607501F76E4010918DFFF1F76E401BF560C0E1F76E401BF56030AB0 +:206E3E001F76E401BF5604051F76E401092B1F76E401091A00041F76E401091A200006008A +:206E5E00A8881F76E401094B04EFA92855553C6F1F76E401024C04EFA9280010356F1F7628 +:206E7E00E401BF5605041F76E4010928206EA993D6FF1F76E401FF9108971F76E40102443E +:206E9E00FDEF0356A9011F76E40108961F76E4010244FDEFA6921F76E401A7FF08961F7696 +:206EBE00E4010244FDEF1F76E401087E1F76E4010244FDEF1F76E401094BFDEE1F76E401BE +:206EDE00024CFDEE009A06001F76E401094B04EFA92855553E6F1F76E401024C04EFA92846 +:206EFE000010376F1F76E401BF5605021F76E4010928206EA993D6FF1F76E401FF91089735 +:206F1E001F76E4010244FDEF0356A9011F76E40108961F76E401094BFDEE1F76E401BF5644 +:206F3E0005021F76E4010928206C1F76E4010243FDEF1F76E4010693A8381F76E401024398 +:206F5E00FDEFA9CD00FF1F76E4010692FF90A8CA0600A71EA70610EC8458A592A0F2807690 +:206F7E0040DFA092FF90A958A592C7FF9670A95D81DFA706F2EDA59206005AFF00B6A9A97F +:206F9E00A70F2569A7920190A9580129A4C4A70640FF0156A600C693A09204EDA892C7FFCD +:206FBE00A92DA092015204EDA8CCFF00A92DA593AC58A0F3807640DFA092D7FFFF90A958A2 +:206FDE009671A85D01DFA9A9A70FDD66A5920600A988A928FFFF00D0A693A0552B69949366 +:206FFE00FF91A87000D5A59308530D67A9CD010003EDC0FF046FC0FFA91C01A001DDA5931B +:20701E000853F5689493D7FFA87000D5A59308530D67A9CD010003EDC0FF046FC0FFA91C8C +:20703E0001A001DDA5930853F568A69301D8A055D766060006FEC406461E0129460647FF8B +:20705E00A81A00FF421E00BEA69220521563420608560080441E440605ECAA280031AB2B75 +:20707E0044A9420630FF44704371421EA692019C2052A988ED644206AC28180046A3AB181D +:20709E0000FF2256ABCAAACB421E00D44606420FB156A401A49286FE0600BD3ABDB2BDAA67 +:2070BE00BDA202FE0129A9BF120F58FF5B61A85C7F91A8088000421EA493D6FFA85CA9BF71 +:2070DE00160F6761A85D7F91A8088000A859A958A593D6FFA85DA493A571A8180001A69701 +:2070FE00A418FF00A518FF007FDCA492A59EA7964D64A90801FF3E62A193A09236FFA8594C +:20711E00A958420635FF0EF6A11FA95BA3010AF6A11F2D56A204A32DA03640FF0BF6A11FD9 +:20713E0033FF009B30FF54FFA20CA39540FFA70801001FF677FF200940FFA70801001FF655 +:20715E0077FF5AFFA7922265A90801FF1363A9A946FF7F91A85BA95AA625A79596FFA20C64 +:20717E00A395A9BD120F82FEBE82BE86BE8BBE8E0600009B57FFA8087FFF5AFFA693F26090 +:20719E00A8280080AA71AB92ED6F20FF0000EA6F5AFFA493A818000196FFA85CA9A9A80869 +:2071BE007FFFA81C0080A4CBDD6F1F76C001201A0010407663B422761F762C003518F8FF2A +:2071DE001F762C00341A03001F762C003418F7FF1F762C003418FBFF1F762C002ECC9FFF1C +:2071FE001F762C0020502E961F762C002ECCE3FF1F762C0008502E961F762C002ECCFCFF4C +:20721E001F762C0001502E961F762C002ECCFFCF1F762C00A91A00102E961F762C002ECCDE +:20723E00FFF11F762C00A91A00062E961F762C002E187FFE1F762C002F18BFFF1F762C00E7 +:20725E002E18FFBF1F762C002E18FF7F1F762C002F1A03001A7607F6007769FF0600227670 +:20727E001F76BE011618FCFF1F76BE011818FCFF1F76BE011A1A01001F76BE011B1A0100E1 +:20729E001A7669FF0600BDB2BDAAA986012900D1A9AA40FFA986A10F086910024076B9B9B6 +:2072BE0001D9A9AAA10FFA66BE86BE8B0600008F000C1F767C031EA8AA28FFFFAB28FFFFCA +:2072DE001F76300002A91F763000062B1F763000072B1F763000041A10001F763000041A5D +:2072FE00200000021F767C03201E1F767C03008F080C26A81F767C03008F100C2EA81F764D +:20731E0030000AA91F76300012A91F7630000E2B1F7630000F2B1F763000162B1F76300024 +:20733E00172B1F7630000C1A10001F763000141A10001F7630000C1A20001F763000141AF1 +:20735E0020001F767C03281E1F767C03301E060003E2E40003E2F40100E70800007788E6B6 +:20737E000000C48303E2D500C483F52BC483FD2BC483E51A1000C483E51A2000C483E51818 +:20739E00FFFBC483E518FFF7C483E51A00400002D41E0600103B1F7633002018FEFF1F763E +:2073BE003300222B1F763300242B1F763300262B1F763300282B1F7633002A2B1F763300FF +:2073DE002C2B1F7633002E2B1F763300302B1F763300322B1F763300342B1F763300362B7F +:2073FE001F763300382B1F763300232B1F763300252B1F763300272B1F763300292B1F764B +:20741E0033002B2B1F7633002D2B1F7633002F2B1F763300312B1F763300332B1F76330071 +:20743E00352B1F763300372B1F763300392B69FF06001F763300201A01001F7633002128F6 +:20745E00FFFF102969FF0600AD28000469FF1F5616561A5610E6000240291F7600000229B6 +:20747E001B762276A928BDB9A828000001091B61C076BDB904290F6F009BA92401DF046C19 +:20749E000429A82401DFA61EA1F78624A706A1810109A71EA92403635CFF043BA95901DFA2 +:2074BE000900ECFF1A76A928FFFFA828FFFF01090E61FF76FFFF066F01DFBDC3A71E673E62 +:2074DE00BEC5A92401DFA82458FFF760407665B9407682B9BDB203E2BD0403E2BD0503E27E +:2074FE00BD06CFE6010008D0AFE2F402AFE2F40510E7AA000ED112E39493AFE2C40014E324 +:20751E00D4D40CD000E3948509E3E45EAFE29C0240E79231007710E7100094069C1E03E2CF +:20753E00940008D0F406941E03E2F401AFE2BE06AFE2BE05AFE2BE04BE8B06000229042998 +:20755E005F565AFF42065F56421E00021FF617564200AB06325602292076022904295F56D5 +:20757E005AFF420656FF421E00021FF6175642003256022920765AFF00021FF61756420069 +:20759E00A9A920765AFF00021FF6175642002076A85CA971A697013BA98556FFA95DA485E7 +:2075BE0056FFA95CA5920FF6A41FA64F026C5CFF2076A696A85C013BA98556FFA95DA485D2 +:2075DE0056FFA95CA5920FF6A41FA64F026C5DFFA89220765AFFAB92A4C5A48E07ECFF9CE6 +:2075FE00A988859287960E00FEFFAB92A988A9A9A60F10ECAA930EECA9A9FF9DA85CBF762E +:20761E00FEFF859287960E00FEFF859287960C00F8FFA08A0600A0E514AD0962A0E51F76DE +:20763E00760314AD90E5B4563701156F4FE803C092E601008CB5050000E7CA00007700E7EF +:20765E008A000077CFE812F0007700E75100007700E74000060022761F76C0011C1A0800D3 +:20767E0069FF787680001A761F76C4011CCCFF3F1F76C401A91A00401C961F76C401BF5688 +:20769E0018E0028FE64969FFA9A84076B9B90600A928FFFFAA28FFFFAB28FFFFA828FFFFEF +:2076BE00AB0F04ED00D400BE0B6FA927A928FFFFA92FA4A9C488A928FFFF0209A98AA692A0 +:2076DE0040765AAD06000077006F1F767603BDB230C5A959673E1F76760334C5A70603EC27 +:2076FE00A192673E1F767603320603ECA71E673E407680B9BE8B0600408F00C0008F000D8C +:20771E002276009A8052066385C484C2019C8052FC641A7669FF06001F7676032EA8060098 +:20773E001F76760330A8060006001F766F0339961F766F03389706000119C356FFFF060050 +:20775E002B0000002EC122761F762A00001A01001F762A0006CCFFF0A91A00051F762A0078 +:20777E0006961F762A0006CCF0FF05501F762A0006961F762A0007CCE0FF08501F762A0097 +:1C779E0007961F762A00041AFF011F762A00051AFF011A7607F6007769FF060005 +:2077BA000301000000C067920000679200006792000067920000679200006792000067921C +:2077DA000000679200006792000067920000679200006792000067920000F6890000038AAD +:2077FA000000108A00001D8A00007B920000358A0000408A00004B8A0000568A0000618AF8 +:20781A0000006C8A0000778A0000828A00008D8A0000988A0000A38A0000AE8A0000B98A6A +:20783A000000C48A0000CF8A0000F08A00007B920000118B0000328B0000518B0000728BCE +:20785A000000958B0000B68B0000D78B0000F88B0000198C00003C8C00005D8C00007B9265 +:20787A0000007B9200007E8C00009F8C0000C28C0000E58C0000068D0000278D00007B9299 +:20789A0000007B9200004A8D00006B8D00008E8D0000AF8D0000D08D0000F18D00007B92B3 +:2078BA0000007B920000128E0000338E00007B9200007B9200007B9200007B9200007B92FF +:2078DA0000007B920000568E0000778E00009A8E0000BB8E0000DC8E0000FD8E00007B9225 +:2078FA0000007B920000208F0000418F0000628F0000838F0000A48F0000C58F00007B924B +:20791A0000007B920000E88F00000B9000007B9200007B9200002C9000004D9000007B926E +:20793A0000007B9200006E90000091900000B2900000D3900000F4900000179100003A9165 +:20795A0000005B9100007B9200007B9200007B9200007B9200007B9200007B9200007B92C6 +:20797A0000007B9200007B9200007B9200007B9200007B9200007B9200007B9200007B9285 +:20799A0000007B9200007C9100009D910000BE910000DF910000009200007B920000239272 +:0C79BA0000004492000033000B000A00A3 +:2079C600280000005AC119AA0000C6AA000005AA0000B2AA0000F4A90000A0AA0000E3A9AD +:2079E600000087AA0000C4A9000073AA0000B3A9000067AA000095A9000056AA000084A9EE +:187A0600000043AA000073A9000032AA00005CA9000042A90000000093 +:00000001FF diff --git a/bin/ice.map b/bin/ice.map new file mode 100644 index 0000000..1aa415e --- /dev/null +++ b/bin/ice.map @@ -0,0 +1,34 @@ +******************************************************************************** +TMS320C2000 Hex Converter v5.2.1 +******************************************************************************** + +INPUT FILE NAME: +OUTPUT FORMAT: Binary + +PHYSICAL MEMORY PARAMETERS + Default data width : 16 + Default memory width : 8 (LS-->MS) + Default output width : 8 + +BOOT LOADER PARAMETERS + Table Type: SERIAL PORT (SCI 8 bit Mode) + Entry Point: 0x0000b841 + + +OUTPUT TRANSLATION MAP +-------------------------------------------------------------------------------- +00000000..003fffff Page=0 Memory Width=8 ROM Width=8 +-------------------------------------------------------------------------------- + OUTPUT FILES: D:\project2833\GIT\ICE_22220_1\bin\ice.bin [b0..b7] + + CONTENTS: 00000000..00007a1d BOOT TABLE + .cinit : dest=0000b9bd size=000001e1 width=00000002 + .text : dest=00008000 size=000039bd width=00000002 + ramfuncs : dest=0000c12e size=0000002b width=00000002 + .econst : dest=0000c000 size=00000103 width=00000002 + .switch : dest=0000c15a size=00000028 width=00000002 + +-------------------------------------------------------------------------------- +00000000..003fffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*" +-------------------------------------------------------------------------------- + NO CONTENTS diff --git a/bin/ice.out b/bin/ice.out new file mode 100644 index 0000000000000000000000000000000000000000..91a7613220ffb76afe6795638e8c498d37b8823a GIT binary patch literal 331330 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 literal 0 HcmV?d00001 diff --git a/doc/ICE data stru.xls b/doc/ICE data stru.xls new file mode 100644 index 0000000000000000000000000000000000000000..e2bd8a01cb9af33a48e013ea66c77a85e1e947d7 GIT binary patch literal 71680 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

TgJ>?H`tw=`Czk^;k>1-8!C> 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�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 NOoNB59uGh6{tp8gM796` literal 0 HcmV?d00001 diff --git a/ecan.c b/ecan.c new file mode 100644 index 0000000..19fd0d0 --- /dev/null +++ b/ecan.c @@ -0,0 +1,354 @@ +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" + +#include "filter_bat2.h" +#include "measure.h" +#include "package.h" // DSP281x Headerfile Include File +#include "peripher.h" // DSP281x Headerfile Include File + +#include "ecan.h" // DSP281x Headerfile Include File +#include "tools.h" // DSP281x Headerfile Include File + +#include "RS485.h" +#include "message.h" + + +// Prototype statements for functions found within this file. +interrupt void CANa_handler(void); +interrupt void CANa_reset_err(void); +interrupt void CANb_handler(void); +interrupt void CANb_reset_err(void); + +// Global variable for this example +Uint32 ErrorCount; +Uint32 MessageReceivedCount; +Uint32 MessageTransivedCount=0; + +Uint32 TestMbox1 = 0; +Uint32 TestMbox2 = 0; +Uint32 TestMbox3 = 0; + +int CanTimeOutErrorTR = 0; + +int wait=0; + +void Init_Can(int Port, int DevNum) +{ + struct ECAN_REGS ECanShadow; + + volatile struct ECAN_REGS * ECanRegs; + volatile struct ECAN_MBOXES * ECanMboxes; + volatile struct MOTO_REGS * ECanMOTORegs; + + long id = 0x801CE000; + + if(DevNum<0)DevNum=0; + if(DevNum>15)DevNum=15; + +// Configure CAN pins using GPIO regs here + EALLOW; + + if(!Port) + { + ECanRegs = &ECanaRegs; + ECanMboxes = &ECanaMboxes; + ECanMOTORegs = &ECanaMOTORegs; + + GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; + GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; + } + else + { + ECanRegs = &ECanbRegs; + ECanMboxes = &ECanbMboxes; + ECanMOTORegs = &ECanbMOTORegs; + + GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 2; + GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 2; + } + +// Configure the eCAN RX and TX pins for eCAN transmissions + ECanRegs->CANTIOC.all = 8; // only 3rd bit, TXFUNC, is significant + ECanRegs->CANRIOC.all = 8; // only 3rd bit, RXFUNC, is significant + +// Specify that 8 bits will be sent/received + ECanMboxes->MBOX0.MSGCTRL.all = 0x00000008; + ECanMboxes->MBOX1.MSGCTRL.all = 0x00000008; + ECanMboxes->MBOX2.MSGCTRL.all = 0x00000008; + +// Disable all Mailboxes +// Required before writing the MSGIDs + ECanRegs->CANME.all = 0; + +// 0 a + ECanMboxes->MBOX0.MSGID.all = id + DevNum; + +// 1 a + ECanMboxes->MBOX1.MSGID.all = id + 0x20 + DevNum; + +// 2 a + ECanMboxes->MBOX2.MSGID.all = id + 0x30 + (DevNum&1); + +// a 0 , + ECanRegs->CANMD.all = 0xFFFFFFFE; + +// 3 a , + ECanRegs->CANME.all = 0x00000007; + +// Clear all TAn bits + ECanRegs->CANTA.all = 0xFFFFFFFF; +// Clear all RMPn bits + ECanRegs->CANRMP.all = 0xFFFFFFFF; +// Clear all interrupt flag bits + ECanRegs->CANGIF0.all = 0xFFFFFFFF; + ECanRegs->CANGIF1.all = 0xFFFFFFFF; +// Clear all error and status bits + ECanRegs->CANES.all=0xffffffff; + +// Request permission to change the configuration registers + ECanShadow.CANMC.all = 0; + ECanShadow.CANMC.bit.MBCC = 1; // Mailbox timestamp counter clear bit + ECanShadow.CANMC.bit.TCC = 1; // Time stamp counter MSB clear bit + ECanShadow.CANMC.bit.SCB = 1; // eCAN mode (reqd to access 32 mailboxes) + ECanShadow.CANMC.bit.WUBA = 1; // Wake up on bus activity + ECanShadow.CANMC.bit.ABO = 1; // Auto bus on + ECanShadow.CANMC.bit.CCR = 1; +// ECanShadow.CANMC.bit.STM = 1; // self-test loop-back + ECanRegs->CANMC.all = ECanShadow.CANMC.all; + while(!ECanRegs->CANES.bit.CCE); // Wait for CCE bit to be set.. + +// CAN + ECanShadow.CANBTC.all = ECanRegs->CANBTC.all; + ECanShadow.CANBTC.bit.SJWREG=1; + ECanShadow.CANBTC.bit.BRPREG = (CLKMULT * 3) - 1; + ECanShadow.CANBTC.bit.TSEG1REG = 15; + ECanShadow.CANBTC.bit.TSEG2REG = 2; + + ECanRegs->CANBTC.all = ECanShadow.CANBTC.all; + ECanShadow.CANMC.bit.CCR = 0; // Set CCR = 0 + ECanRegs->CANMC.all = ECanShadow.CANMC.all; + while(ECanRegs->CANES.bit.CCE); // Wait for CCE bit to be cleared.. + +// + ECanMOTORegs->MOTO0 = 550000; + ECanMOTORegs->MOTO1 = 550000; + + ECanRegs->CANTOC.all = 1; + ECanRegs->CANTOS.all = 0; // clear all time-out flags + ECanRegs->CANTSC = 0; // clear time-out counter + + ECanShadow.CANGIM.all = 0; + + ECanRegs->CANMIM.all = 2+4; // Enable interrupts of box 1 + ECanRegs->CANMIL.all = 0x00000000; // All mailbox interrupts are generated on interrupt line 0. + ECanShadow.CANGIM.bit.I0EN = 1; + + ECanShadow.CANGIM.bit.MTOM = 1; + ECanShadow.CANGIM.bit.I1EN = 1; + ECanShadow.CANGIM.bit.GIL = 1; + ECanRegs->CANGIM.all = ECanShadow.CANGIM.all; + + if(!Port) + { + PieVectTable.ECAN0INTA = &CANa_handler; + PieCtrlRegs.PIEIER9.bit.INTx5=1; // PIE Group 9, INT6 + PieVectTable.ECAN1INTA = &CANa_reset_err; + PieCtrlRegs.PIEIER9.bit.INTx6=1; // PIE Group 9, INT6 + } + else + { + PieVectTable.ECAN0INTB = &CANb_handler; + PieCtrlRegs.PIEIER9.bit.INTx7=1; // PIE Group 9, INT6 + PieVectTable.ECAN1INTB = &CANb_reset_err; + PieCtrlRegs.PIEIER9.bit.INTx8=1; // PIE Group 9, INT6 + } + IER |= M_INT9; // Enable CPU INT + + EDIS; + +// CAN + + MessageReceivedCount = 0; + ErrorCount = 0; + CanTimeOutErrorTR=0; + MessageTransivedCount=0; +} + +void CAN_send(int Port, int data[], int Addr) +{ + unsigned long hiword,loword; + volatile struct ECAN_REGS * ECanRegs; + volatile struct ECAN_MBOXES * ECanMboxes; + + if(!Port) + { + ECanRegs = &ECanaRegs; + ECanMboxes = &ECanaMboxes; + } + else + { +#ifdef TUBER + ECanRegs = &ECanbRegs; + ECanMboxes = &ECanbMboxes; +#endif + } + + if(wait) + if(!(ECanRegs->CANTA.all & 1)) + if(!(ECanRegs->CANAA.all & 1)) + return; + + ECanRegs->CANTA.all = 1; + ECanRegs->CANAA.all = 1; + + hiword= ((((Uint32) Addr ) & 0xffff)<<16)| 0xE0000000 | + ((((Uint32)data[Addr ]) & 0xffff) ); + loword= ((((Uint32)data[Addr+1]) & 0xffff)<<16)| + ((((Uint32)data[Addr+2]) & 0xffff) ); + + ECanMboxes->MBOX0.MDH.all = hiword; + ECanMboxes->MBOX0.MDL.all = loword; + + EALLOW; + ECanRegs->CANTSC = 0; // clear time-out counter + EDIS; + + ECanRegs->CANTRS.all = 1; // + + wait=1; + + if(Desk==dsk_COMM) GpioDataRegs.GPBTOGGLE.bit.GPIO52=1; + if(Desk==dsk_ISOL) GpioDataRegs.GPATOGGLE.bit.GPIO27=1; + if(Desk==dsk_SHKF) GpioDataRegs.GPBTOGGLE.bit.GPIO63=1; +// led1_toggle(); +} + + +void Handlai(volatile struct MBOX * ECanMbox) +{ + unsigned int adr; + unsigned int bit[3]; + unsigned long hiword,loword; + int Data[3]; + + hiword = ECanMbox->MDH.all; + loword = ECanMbox->MDL.all; + + adr = (hiword >> 16); + + bit[0] = adr & 0x8000; + bit[1] = adr & 0x4000; + bit[2] = adr & 0x2000; + + adr &= 0x1fff; + + Data[0] = (hiword ) & 0xffff; + Data[1] = (loword>>16) & 0xffff; + Data[2] = (loword ) & 0xffff; + + if(bit[0]) if(adr < ANSWER_LEN) Modbus[adr].all = Data[0]; adr++; + if(bit[1]) if(adr < ANSWER_LEN) Modbus[adr].all = Data[1]; adr++; + if(bit[2]) if(adr < ANSWER_LEN) Modbus[adr].all = Data[2]; + + if(Desk==dsk_COMM) GpioDataRegs.GPBTOGGLE.bit.GPIO49=1; + else + led2_toggle(); +} + +interrupt void CANa_handler(void) +{ + unsigned long mask=1; + int box; + + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG95; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + box = ECanaRegs.CANGIF0.bit.MIV0; + mask <<= box; + ECanaRegs.CANRMP.all = mask; + + Handlai(&ECanaMboxes.MBOX0 + box); + + PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +} + +interrupt void CANa_reset_err(void) +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG96; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + ECanaRegs.CANTRR.all = 1; + CanTimeOutErrorTR++; + + PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +} + +interrupt void CANb_handler(void) +{ +#ifdef TUBER + unsigned long mask=1; + int box; + + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG97; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + box = ECanbRegs.CANGIF0.bit.MIV0; + mask <<= box; + ECanbRegs.CANRMP.all = mask; + + Handlai(&ECanbMboxes.MBOX0 + box); + + PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +#endif +} + +interrupt void CANb_reset_err(void) +{ +#ifdef TUBER + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG98; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + ECanbRegs.CANTRR.all = 1; + CanTimeOutErrorTR++; + + PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; +#endif +} + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/ecan.h b/ecan.h new file mode 100644 index 0000000..b9bd676 --- /dev/null +++ b/ecan.h @@ -0,0 +1,3 @@ +void Init_Can(int Port, int DevNum); +void CAN_send(int Port, int data[], int Addr); +extern int CAN_input_data[]; diff --git a/filter_bat2.c b/filter_bat2.c new file mode 100644 index 0000000..a577836 --- /dev/null +++ b/filter_bat2.c @@ -0,0 +1,19 @@ +#include "filter_bat2.h" + +float filterbat(FILTERBAT *b, float InpVarCurr) +{ + float y; + + y = (b->k_0 * (InpVarCurr + (b->i_0*2) + b->i_1)) + + (b->k_1 * b->u_0) + (b->k_2 * b->u_1); + + b->u_1=b->u_0; + b->u_0=y; + b->i_1=b->i_0; + b->i_0=InpVarCurr; + + return y; +} + + + diff --git a/filter_bat2.h b/filter_bat2.h new file mode 100644 index 0000000..a9ed52d --- /dev/null +++ b/filter_bat2.h @@ -0,0 +1,49 @@ +#ifndef _FILTER_BAT2 +#define _FILTER_BAT2 + +#ifdef __cplusplus + extern "C" { +#endif + +#define K1_FILTER_BATTER2_1HZ 0.0000096 +#define K2_FILTER_BATTER2_1HZ 1.94468056 +#define K3_FILTER_BATTER2_1HZ -0.94471895 + +#define K1_FILTER_BATTER2_3HZ 0.00008766 +#define K2_FILTER_BATTER2_3HZ 1.97347532 +#define K3_FILTER_BATTER2_3HZ -0.97382594 + +#define K1_FILTER_BATTER2_5HZ 0.00024135 +#define K2_FILTER_BATTER2_5HZ 1.95581276 +#define K3_FILTER_BATTER2_5HZ -0.95677816 + +#define K1_FILTER_BATTER2_10HZ 0.00094411 +#define K2_FILTER_BATTER2_10HZ 1.91126422 +#define K3_FILTER_BATTER2_10HZ -0.91504065 + +typedef struct { float k_0; + float k_1; + float k_2; + float i_0; + float i_1; + float i_2; + float u_0; + float u_1; + float u_2; + } FILTERBAT; + + +#define DEF_FILTERBAT { K1_FILTER_BATTER2_5HZ, \ + K2_FILTER_BATTER2_5HZ, \ + K3_FILTER_BATTER2_5HZ, \ + 0,0,0,0,0,0} + +float filterbat(FILTERBAT *b, float InpVarCurr); + + +#ifdef __cplusplus + } +#endif + +#endif /* _FILTER_BAT2 */ + diff --git a/i2c.c b/i2c.c new file mode 100644 index 0000000..c39b484 --- /dev/null +++ b/i2c.c @@ -0,0 +1,142 @@ +#include "DSP28x_Project.h" // Device Headerfile and Examples Include File +#include "i2c.h" // Device Headerfile and Examples Include File + +void InitI2CGpio() +{ + + EALLOW; +/* Enable internal pull-up for the selected pins */ +// Pull-ups can be enabled or disabled disabled by the user. +// This will enable the pullups for the specified pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pull-up for GPIO32 (SDAA) + GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; // Enable pull-up for GPIO33 (SCLA) + +/* Set qualification for selected pins to asynch only */ +// This will select asynch (no qualification) for the selected pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // Asynch input GPIO32 (SDAA) + GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // Asynch input GPIO33 (SCLA) + +/* Configure SCI pins using GPIO regs*/ +// This specifies which of the possible GPIO pins will be I2C functional pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1; // Configure GPIO32 for SDAA operation + GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // Configure GPIO33 for SCLA operation + + EDIS; +} + + +void I2CA_Init(void) +{ + InitI2CGpio(); + +// Initialize I2C + I2caRegs.I2CSAR = 0x0050; // Slave address - EEPROM control code + + I2caRegs.I2CMDR.bit.IRS = 0; // IPSC must be initialized while the I2C module is in reset (IRS = 0 in I2CMDR). + #if (CPU_FRQ_150MHZ) // Default - For 150MHz SYSCLKOUT + I2caRegs.I2CPSC.all = 14; // Prescaler - need 7-12 Mhz on module clk (150/15 = 10MHz) + #endif + #if (CPU_FRQ_100MHZ) // For 100 MHz SYSCLKOUT + I2caRegs.I2CPSC.all = 9; // Prescaler - need 7-12 Mhz on module clk (100/10 = 10MHz) + #endif + + I2caRegs.I2CCLKL = 10; // NOTE: must be non zero + I2caRegs.I2CCLKH = 5; // NOTE: must be non zero + + I2caRegs.I2CMDR.all = 0x0000; + + I2caRegs.I2CMDR.bit.MST = 1; + + I2caRegs.I2CMDR.bit.IRS = 1; // Take I2C out of reset + // Stop I2C when suspended + return; +} + + +Uint16 I2CA_WriteData(unsigned int Addr, int Data) +{ + +// Wait until the STP bit is cleared from any previous master communication. +// Clearing of this bit by the module is delayed until after the SCD bit is +// set. If this bit is not checked prior to initiating a new message, the +// I2C could get confused. + if (I2caRegs.I2CMDR.bit.STP == 1) + { + return I2C_STP_NOT_READY_ERROR; + } + +// Check if bus busy + if (I2caRegs.I2CSTR.bit.BB == 1) + { + return I2C_BUS_BUSY_ERROR; + } + +// Setup number of bytes to send +// MsgBuffer + Address + I2caRegs.I2CCNT = 4; + +// Send start as master transmitter + I2caRegs.I2CMDR.all = 0x6E20; + +// Setup data to send + I2caRegs.I2CDXR = (Addr*2)>>8; + while(!I2caRegs.I2CSTR.bit.XRDY); + I2caRegs.I2CDXR = (Addr*2); + while(!I2caRegs.I2CSTR.bit.XRDY); + I2caRegs.I2CDXR = Data>>8; + while(!I2caRegs.I2CSTR.bit.XRDY); + I2caRegs.I2CDXR = Data; + while(!I2caRegs.I2CSTR.bit.XRDY); + while(I2caRegs.I2CMDR.bit.STP == 1); + while(I2caRegs.I2CSTR.bit.BB == 1); + + return I2C_SUCCESS; +} + + +int I2CA_ReadData(unsigned int Addr) +{ + WORDE data; + +// Wait until the STP bit is cleared from any previous master communication. +// Clearing of this bit by the module is delayed until after the SCD bit is +// set. If this bit is not checked prior to initiating a new message, the +// I2C could get confused. + if (I2caRegs.I2CMDR.bit.STP == 1) + { + return I2C_STP_NOT_READY_ERROR; + } + +// Check if bus busy + if (I2caRegs.I2CSTR.bit.BB == 1) + { + return I2C_BUS_BUSY_ERROR; + } + + I2caRegs.I2CCNT = 2; + I2caRegs.I2CMDR.all = 0x6E20; // Send data to setup EEPROM address 0x6620 + I2caRegs.I2CDXR = (Addr*2)>>8; + while(!I2caRegs.I2CSTR.bit.XRDY); + I2caRegs.I2CDXR = (Addr*2); + while(I2caRegs.I2CMDR.bit.STP == 1); + + I2caRegs.I2CCNT = 2; + I2caRegs.I2CMDR.all = 0x6C20; // Send restart as master receiver + + while(!I2caRegs.I2CSTR.bit.RRDY); + data.byt.byte_1 = I2caRegs.I2CDRR; + while(!I2caRegs.I2CSTR.bit.RRDY); + data.byt.byte_0 = I2caRegs.I2CDRR; + + return data.all; +} + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/i2c.h b/i2c.h new file mode 100644 index 0000000..d358a9e --- /dev/null +++ b/i2c.h @@ -0,0 +1,4 @@ +void I2CA_Init(void); +Uint16 I2CA_WriteData(unsigned int Addr, int Data); +int I2CA_ReadData(unsigned int Addr); + diff --git a/ice.pjt b/ice.pjt new file mode 100644 index 0000000..7dcd130 --- /dev/null +++ b/ice.pjt @@ -0,0 +1,70 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="D:\projects\Dimas\ICE_19_03_2018\" +ProjectType=Executable +CPUFamily=TMS320C28XX +Tool="Compiler" +Tool="CustomBuilder" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Release" + +[Source Files] +Source="ADC.c" +Source="bios.c" +Source="cntrl_adr.c" +Source="crc16.c" +Source="ecan.c" +Source="filter_bat2.c" +Source="i2c.c" +Source="isolatio.c" +Source="main.c" +Source="measure.c" +Source="message.c" +Source="peripher.c" +Source="RS485.c" +Source="spise2p.c" +Source="tools.c" +Source="v120\DSP2833x_common\source\DSP2833x_Adc.c" +Source="v120\DSP2833x_common\source\DSP2833x_ADC_cal.asm" +Source="v120\DSP2833x_common\source\DSP2833x_CpuTimers.c" +Source="v120\DSP2833x_common\source\DSP2833x_PieCtrl.c" +Source="v120\DSP2833x_common\source\DSP2833x_SWPrioritizedDefaultIsr.c" +Source="v120\DSP2833x_common\source\DSP2833x_SWPrioritizedPieVect.c" +Source="v120\DSP2833x_common\source\DSP2833x_SysCtrl.c" +Source="v120\DSP2833x_common\source\DSP2833x_usDelay.asm" +Source="v120\DSP2833x_common\source\DSP2833x_Xintf.c" +Source="v120\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c" +Source="F28335.cmd" +Source="v120\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" + +["Debug" Settings] +FinalBuildCmd=$(Proj_dir)\bin\hex2000.exe $(Proj_dir)\bin\ice.out -boot -sci8 -map $(Proj_dir)\bin\ice.map -o $(Proj_dir)\bin\ice.hex -i +FinalBuildCmd=$(Proj_dir)\bin\hex2000.exe $(Proj_dir)\bin\ice.out -boot -sci8 -map $(Proj_dir)\bin\ice.map -o $(Proj_dir)\bin\ice.bin -b + +["Compiler" Settings: "Debug"] +Options=-g -pdsw225 -o0 -fr"$(Proj_dir)\Debug" -fs"$(Proj_dir)\Asm" -i"$(Proj_dir)\v120\DSP2833x_headers\include" -i"$(Proj_dir)\v120\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" -md -ml -v28 --float_support=fpu32 + +["Compiler" Settings: "Release"] +Options=-pdsw225 -o3 -fr"$(Proj_dir)\Release" -d"LARGE_MODEL" -ml -v28 + +["Linker" Settings: "Debug"] +Options=-c -e_c_int00 -m".\Debug\ice.map" -o".\bin\ice.out" -stack0x3f0 -w -x -l"rts2800_fpu32.lib" + +["Linker" Settings: "Release"] +Options=-c -m".\Release\UKSS745.1TMS320F28335.map" -o".\Release\UKSS745.1TMS320F28335.out" -w -x + +["F28335.cmd" Settings: "Debug"] +LinkOrder=1 + +["F28335.cmd" Settings: "Release"] +LinkOrder=1 + +["v120\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" Settings: "Debug"] +LinkOrder=2 + +["v120\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" Settings: "Release"] +LinkOrder=1 + diff --git a/isolatio.c b/isolatio.c new file mode 100644 index 0000000..62fbb22 --- /dev/null +++ b/isolatio.c @@ -0,0 +1,268 @@ +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" + +#include "RS485.h" +#include "filter_bat2.h" +#include "measure.h" +#include "message.h" +#include "package.h" +#include "peripher.h" +#include "crc16.h" +#include "isolatio.h" +#include // ! sqrt !!! + +OPTOCANAL opt[2]; + +ISOLATION iso[2]; + +float iso_KOEF[2] = {-0.5, -0.5}; + +void init_isolation_struct(void); + +void DCLK(int i, int x) +{ + x=!x; + + if(i) + { + if(x) GpioDataRegs.GPASET.bit.GPIO26=1; + else GpioDataRegs.GPACLEAR.bit.GPIO26=1; + } + else + { + if(x) GpioDataRegs.GPBSET.bit.GPIO32=1; + else GpioDataRegs.GPBCLEAR.bit.GPIO32=1; +} } + +int DIN(int i) +{ + if(i) return !GpioDataRegs.GPBDAT.bit.GPIO52; + else return !GpioDataRegs.GPADAT.bit.GPIO23; +} + +void BLIN(int i) +{ + if(i) GpioDataRegs.GPBTOGGLE.bit.GPIO53=1; + else GpioDataRegs.GPATOGGLE.bit.GPIO24=1; +} + +interrupt void cpu_timer1_isr_ISOL(void) +{ + ERROR error; + float Riso=0; + long numb=0; + int i; + static unsigned int count_ready=0; + + EALLOW; + CpuTimer1.InterruptCount++; + IER |= MINT13; // Set "global" priority + EINT; + EDIS; // This is needed to disable write to EALLOW protected registers + + if(!cReset) ServiceDog(); + + if(++CanPowse >= CANPOWSE*2) + { + CanPowse = 0; + CanGO = 1; + } + + if(++count_ready >= period_ready) + { + count_ready=0; + + if((!sig.bit.Error)|(cTestLamp)) toggle_READY(); + else set_READY(); + } + + for(i=0;i<2;i++) + { + iso[i].pause_counter++; + + if(sens_error[i].bit.Bypas) + { + sens_error[i].all = 0; + sens_error[i].bit.Bypas = 1; + Modbus[i+DATASTART].all = 0; + continue; + } + + if(opt[i].Wait) + { + opt[i].Wait--; + opt[i].bit = 0; + opt[i].clk = 0; + DCLK(i,0); + continue; + } + + opt[i].clk=!opt[i].clk; + DCLK(i,opt[i].clk); + if(!opt[i].clk) + { + opt[i].Numb = (opt[i].Numb<<1) | DIN(i); + if(++opt[i].bit>=32) + { + error.all = 0; + + opt[i].Wait = (TELE_FREQ/1000)*optopowse; + opt[!i].Wait =(TELE_FREQ/2000)*optopowse; + if(get_crc32(&(opt[i].Numb))) + { + numb = opt[i].Numb; + numb = numb / 256; // + + Riso=numb; +/* + if(ist[i]) { kff=1; ist[i]=0; } + else kff = optofiltr; + fRiso[i] += (Riso-fRiso[i])/kff; + numb = (long)fRiso[i]; +*/ + Modbus[i*2+0x10].all = (int)(numb & 0xFFFF); + Modbus[i*2+0x11].all = (int)(numb>>16); + + Riso=numb; + Riso = Riso/1024;//256; // + + iso[i].adc_value = Riso; // + + Modbus[i+DATASTART].all = Riso; // + opt[i].ers = 0; BLIN(i); + } + else + { + if(++opt[i].ers > 20) + { + opt[i].ers = 20; + error.bit.Tear = 1; + } } + + reset_errs(i,error); + + } } } + + sig.all = chk.all; + chk.all = 0; + +} +void timer_Init() +{ + EALLOW; // This is needed to write to EALLOW protected registers + PieVectTable.XINT13 = &cpu_timer1_isr_ISOL; + EDIS; // This is needed to disable write to EALLOW protected registers + + ConfigCpuTimer(&CpuTimer1, SYSCLKOUT/1000000, 1000000/TELE_FREQ); + CpuTimer1Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0 + IER |= M_INT13; + + period_ready = TELE_FREQ / (READY_FREQ * 2); + + init_isolation_struct(); + Calcul_Iso_Koef(); +} + +//////////////////////////////////////////////////////////////////////////////////////////// + +void Calcul_Iso_Koef() +{ + iso_KOEF[0] = (isoMOM[1]-isoMOM[0]); + iso_KOEF[0]/= (isoADC[1]-isoADC[0]); + + iso_KOEF[1] = (isoMOM[3]-isoMOM[2]); + iso_KOEF[1]/= (isoADC[3]-isoADC[2]); +} + +void init_isolation_struct(void) +{ + int i; + int* pint = (int*)iso; + int size = sizeof(ISOLATION)/sizeof(int); + + for(i=0; i < size*2; i++) pint[i] = 0; + + iso[1].pause_counter = ISO_PAUSE / 2; +} + +#define iso_time_pause 6200 + +void isolation_calc(void) +{ + float our_delta; + static int i; + int k, l, m; + int buff[BUFF_LEN]; + + for(i=0; i<2; i++) + + if(iso[i].pause_counter > ISO_PAUSE) // , 3 + { // , + iso[i].pause_counter = 0; + + iso[i].buff[iso[i].buff_position] = iso[i].adc_value; + +// --------------------------- + + for (k = 0; k < BUFF_LEN; k++) buff[k] = 0x8000; //minimal int + for (k = 0; k <=iso[i].prim_position; k++) + { + for (l = 0; (l < BUFF_LEN) && (iso[i].buff[k] < buff[l]); l++); + if (l < BUFF_LEN) + { + for (m = BUFF_LEN - 1; (m > l) && (m > 0); m--) buff[m] = buff[m-1]; + buff[l] = iso[i].buff[k]; + } } + +// ----------------------------------------------------------------------- + + m = (buff[0]+buff[iso[i].prim_position])/2; + + for(k=0; k < iso[i].prim_position; k++) if( buff[k] <= m) break; + + iso[i].max_val = buff[k - 1 - iso[i].cycles]; + + iso[i].min_val = buff[k + iso[i].cycles]; + +/* + iso[i].max_val = buff[iso[i].cycles]; + iso[i].min_val = buff[iso[i].prim_position - iso[i].cycles]; +*/ + our_delta = iso[i].max_val - iso[i].min_val; + + +// ------------------------------------------- + + if(!iso[i].cycles) + iso[i].MOms_x_10 = isoMOM[i*2+1]; + else + iso[i].MOms_x_10 = (our_delta-isoADC[i*2]) * iso_KOEF[i] + isoMOM[i*2]; + +// --------------------------------------------------------------------------- + +Modbus[26+i].all = iso[i].MOms_x_10; +Modbus[32+i].all = iso[i].adc_value; +Modbus[40+i].all = iso[i].max_val; +Modbus[48+i].all = iso[i].min_val; +Modbus[56+i].all = our_delta; +Modbus[64+i].all = iso[i].prim_position; +Modbus[72+i].all = iso[i].buff_position; +Modbus[80+i].all = iso[i].cycles; + +//for(j=0;j<35;j++) Modbus[0x20+j].all = iso[i].buff[j]; + +// --------------------------------------------------------------------------- + + iso[i].buff_position++; + + if(iso[i].cycles < BUFF_CYCLES) + { + iso[i].prim_position = iso[i].buff_position; + iso[i].cycles = iso[i].prim_position / CYCLE_LEN; + } + else + iso[i].prim_position = BUFF_LEN-1; + + if (iso[i].buff_position >= BUFF_LEN) iso[i].buff_position = 0; +} } + diff --git a/isolatio.h b/isolatio.h new file mode 100644 index 0000000..10d41a1 --- /dev/null +++ b/isolatio.h @@ -0,0 +1,54 @@ +void timer_Init(void); +int get_isolatio(void); + +typedef struct +{ + unsigned int clk; + unsigned int bit; + unsigned int ers; + unsigned Wait; + unsigned long Numb; + +} OPTOCANAL; + + +// 105 - , +#define CYCLE_TIME 105L + +// 3 - +#define ISO_TIME 3 + +// +#define CYCLE_LEN (CYCLE_TIME / ISO_TIME) + +// +#define BUFF_CYCLES 5 + +// , +#define BUFF_LEN (CYCLE_LEN * BUFF_CYCLES) + +#define TELE_FREQ 2000 // - + +#define ISO_PAUSE (ISO_TIME * TELE_FREQ) + + +typedef struct { + int buff[BUFF_LEN]; + int min_val; + int max_val; + unsigned int buff_position; + unsigned int prim_position; + unsigned int cycles; + int MOms_x_10; + unsigned int pause_counter; + int adc_value; + +}ISOLATION; + +extern ISOLATION iso[]; + +void isolation_calc(void); +void Calcul_Iso_Koef(void); + + + diff --git a/kanal.c b/kanal.c new file mode 100644 index 0000000..704f829 --- /dev/null +++ b/kanal.c @@ -0,0 +1,164 @@ +#include "DSP2833x_Device.h" // DSP281x Headerfile Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" +#include "filter_bat2.h" +#include "measure.h" + +#include "RS485.h" +#include "message.h" +#include "kanal.h" +#include "test.h" +#include "package.h" +#include "tools.h" + +#include "peripher.h" + +int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0}; + +void DCLK(int x) +{ + if(x) GpioDataRegs.GPASET.bit.GPIO6=1; + else GpioDataRegs.GPACLEAR.bit.GPIO6=1; + DSP28x_usDelay(1L); +} + +void DOUT(int x) +{ + if(x) GpioDataRegs.GPASET.bit.GPIO8=1; + else GpioDataRegs.GPACLEAR.bit.GPIO8=1; + DSP28x_usDelay(1L); +} + +void RESET() +{ + DCLK(0); DOUT(1); + DCLK(0); DOUT(0); +} + +void SENDBIT(int x) +{ + DOUT(x); DCLK(1); + DOUT(0); DCLK(0); +} + +void kanal_Send(int adr, long dat, int dot) +{ + long Word,data,aliq_part,dg[4]; + int i,j,bit,byt,addr,sgn=0,punkt=0,aliq_len=0,full_len; + + if(adr>1) // + { + Word =dat; + } + + else + + { + if(dot<0 || dot>13) // : -... + { + dg[3] = 0xA; dg[2] = 0xE; + dg[1] = 0xF; dg[0] = 0xF; + punkt = 0x7; + } + + else + + { + if(dat<0) sgn=1; + data = labs(dat); + + aliq_part = data; + for(i=0;i0) + { + aliq_len++; dat/=10; + } + + if(aliq_len+sgn>4) + { + if(sgn) dg[3] = 0xA; + else dg[3] = 0xF; + + dat = aliq_part; + for(i=1;i0;i--) + { + if((dg[i]==0)&&(i!=dot)) + dg[i]=0xF; // + else break; + } + + if(sgn) + for(i=1;i<4;i++) + { + if( (dg[i]==0xF)||(i==3)) + { + dg[i]=0xA; // + break; + } } } } + + for(i=0;i<4;i++) + { + dg[i] = digits[dg[i]]; + if((punkt>>i)&1) dg[i]+= 128; + + } + + Word = ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) | + ((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000); + } + + for (i=0;i<4;i++) + { + if(addr>0x10) break; + + for (j=0;j<8;j++) + { + bit = Word & 1; Word >>= 1; + SENDBIT(bit); + } + + byt = addr; + for (j=0;j<6;j++) + { + bit = byt & 1; byt >>= 1; + SENDBIT(bit); + } + addr++; + + RESET(); + } +} diff --git a/kanal.h b/kanal.h new file mode 100644 index 0000000..44cb4e7 --- /dev/null +++ b/kanal.h @@ -0,0 +1,7 @@ +void kanal_Send(int adr, long dat, int dot); + +#define adr_diod1 0x00 // 4 +#define adr_diod2 0x04 // 4 +#define adr_digg1 0x08 // 4 +#define adr_digg2 0x0C // 4 +#define adr_lamps 0x10 // diff --git a/log_to_mem.c b/log_to_mem.c new file mode 100644 index 0000000..c26404b --- /dev/null +++ b/log_to_mem.c @@ -0,0 +1,34 @@ +/****************************************************************/ +/* TMS320C32 */ +/* ====== BIOS, , ====== */ +/* () 1998-2001. */ +/****************************************************************/ +/* log_to_mem.c + **************************************************************** + * y * + ****************************************************************/ + +#include "log_to_mem.h" + +int no_write = 1, + never_write = 0; // , ( ) + +#pragma DATA_SECTION(logs_block,".logg"); +unsigned int logs_block[0xF000]; + +LOG Log; +unsigned int flog=0; + +// , +void clear_mem() +{ + unsigned long i; + + Log.Start = LOG_PAGE_START; + Log.Finis = LOG_PAGE_START + LOG_PAGE_LEN; + Log.Adres = Log.Start; + Log.Circl = 0; + + for (i=Log.Start; i (Log.Finis - x)) Log.Adres = Log.Start + +/* () */ +void clear_mem(); + +#ifdef __cplusplus + } +#endif + +#endif /* _LOG_TO_MEM */ diff --git a/main.c b/main.c new file mode 100644 index 0000000..aa8ad0e --- /dev/null +++ b/main.c @@ -0,0 +1,220 @@ +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File + +#include "cntrl_adr.h" +#include "RS485.h" +#include "BIOS_DSP.h" +#include "filter_bat2.h" +#include "measure.h" +#include "Message.h" +#include "package.h" + +#include "spise2p.h" +#include "i2c.h" + +#include "tools.h" +#include "peripher.h" +#include "ADC.h" + +#include "ecan.h" +#include "log_to_mem.h" + +#include "measure.h" +#include "isolatio.h" + +extern void DSP28x_usDelay(Uint32 Count); + +void main() +{ + int i,j,mask; + static int cancount[2],cancell[2]; + RS_DATA * rs; + + InitSysCtrl(); + +// Disable CPU interrupts and clear all CPU interrupt flags: + DINT; + + InitPieCtrl(); + + IER = 0x0000; + IFR = 0x0000; + + InitPieVectTable(); + + init_zone7(); + + setup_leds_line(); + led1_on(); + led2_off(); + for (i=0;i<10;i++) + { + pause_us(50000); + led2_toggle(); + led1_toggle(); + } + led1_off(); + led2_off(); + + get_Mode(); + set_cntrl_addr(Mode,16); + create_uart_vars(sizeof(CMD_TO_TMS)); + setup_uart(COM_1,115200); + setup_uart(COM_2,115200); + Init_Can(0,Addrr); + Init_Seeprom(); +// clear_mem(); + + EnableInterrupts(); + + if(Desk!=dsk_ISOL) + { + setup_adc(); + Init_sensors(); + I2CA_Init(); pause_us(500000); + Load_caliber(); + } + else + { +// timer_Init(); + Init_optic(); + } + + Load_params(); + Init_packMask(); + + if(Desk==dsk_ISOL) + { + timer_Init(); +// Init_optic(); + } + + + LastMode = Addrr; + + for(i=0;i<3;i++) + { + cancount[i]= 0; + cancell[i] = CAN_send_start; + } + + EALLOW; + SysCtrlRegs.WDCR= 0x2F; + EDIS; + + MAY=1; + + while(1) + { + if(CanGO) + { + CanGO=0; + for(i=0;i<2;i++) + if(Cancount[i]) + if(++cancount[i] >= Cancount[i]) + if(cancount[0]) + { + cancount[i] = 0; + while(1) + { + if(cancell[i] >= 0x80) cancell[i]=0; + mask = Maska[i][cancell[i]/16] >> (cancell[i]%16); + if(!mask) cancell[i] = (cancell[i] + 0x10) & 0xFFF0; + else + { + while(!(mask & 1)) + { + cancell[i]++; mask >>= 1; + } + break; + } } + CAN_send(0,(int *)Modbus,cancell[i]); + cancell[i]+=3; + } } +/* + CanGO=0; + for(i=0;i<3;i++) + { + if(cancount[i]) cancount[i]--; + else + { + cancount[i] = Cancount[i]; circ[i] = 0; + + while( !((Maska[i][cancell[i]/16]>>(cancell[i]%16))&1) && circ[i] < 2 ) + if(cancell[i]>CAN_send_finis) + { + cancell[i] = CAN_send_start; circ[i]++; + } + else cancell[i]++; + + if(cancell[i]<=CAN_send_finis && circ[i] < 2) + { + CAN_send(0,(int *)Modbus,cancell[i]); + cancell[i]+=3; + } } } } +*/ + if(cSaveParam) + { + cSaveParam=0; + Save_params(); + } + + if(cReadCal) + { + cReadCal=0; + Load_caliber(); + } + + if(cDefParam) + { + cDefParam=0; + Default_params(); + } + + if(cKoefCalc) + { + cKoefCalc=0; + Calcul_Iso_Koef(); + } + + get_Inputs(); + + if(Desk!=dsk_SHKF) + { + Modbus[23].all = Inputs.wrd.word_0; + } + + if(Desk==dsk_ISOL) + { + IsShimON = cShimON; + if(!cShimON) + isolation_calc(); + } + + for(i=0;i<2;i++) + { + if(i) rs = &rs_a; + else rs = &rs_b; + + j = get_command(rs); + + if(j!=-1) + switch(j) + { + case CMD_INIT: init(rs); led2_toggle();break; // + case CMD_INITLOAD: initload(rs); led2_toggle();break; // + case CMD_RUN: run(rs); led2_toggle();break; // + case CMD_LOAD: load(rs); led2_toggle();break; // + case CMD_PEEK: peek(rs); led2_toggle();break; // + case CMD_POKE: poke(rs); led2_toggle();break; // + case CMD_UPLOAD: upload(rs); led2_toggle();break; // + case CMD_EXTEND: extendbios(rs); led2_toggle();break; // + + case CMD_TFLASH: tflash(rs); led2_toggle();break; // TMS + +// case CMD_STD: ReceiveCommand(rs); led2_toggle();break; + case CMD_MODBUS_3: ReceiveCommandModbus3(rs); led2_toggle();break; + case CMD_MODBUS_6: ReceiveCommandModbus6(rs); led2_toggle();break; + + default: break; +} } } } + diff --git a/measure.c b/measure.c new file mode 100644 index 0000000..7c846a1 --- /dev/null +++ b/measure.c @@ -0,0 +1,673 @@ +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" +#include "filter_bat2.h" +#include "package.h" + +#include "measure.h" +#include "package.h" + +#include "peripher.h" +#include "ADC.h" + +#include "RS485.h" +#include "message.h" +#include "log_to_mem.h" + +#include // ! sqrt !!! + +unsigned int CanPowse,CanGO; + +int MAX_TPL_CANAL=0; // +int period_ready, period_blink, period_dac, time_dac; + +FLAG chk,sig; +long time_1_5sec, time_5msec, time_5sec; + +long err_count[6]; +float lev_count[6]; + +int sens_type[24]; +int sens_pair[24]; +long din_count[32]; + +int adc0[24]; +int tmp0[24]; +float tmpK[24]; + +FILTERBAT def_FILTERBAT = DEF_FILTERBAT; +FILTERBAT filter[40]; + +long sens_count[28]; + +interrupt void cpu_timer1_isr_SENS(void); + +/********************************************************************/ +/* */ +/********************************************************************/ +float im_calc(float ia,float ib) +{ + float isa,isb; + + isa = - 1.5 * (ia + ib); + isb = COSPi6 * (ia - ib); + return (2*sqrt(isa*isa+isb*isb)/3); +} + + +interrupt void cpu_timer1_isr_SENS(void) +{ + static unsigned int + count_ready=0, count_blink=0, count_bright=0, count_mode, + blink_over, blink_alarm, work_lamp, heat_lamp, errr_lamp; + + EALLOW; + CpuTimer1.InterruptCount++; + IER |= MINT13; // Set "global" priority + EINT; + EDIS; // This is needed to disable write to EALLOW protected registers + + if(!cReset) ServiceDog(); + + if(++count_ready >= period_ready) + { + count_ready=0; + + if((!sig.bit.Error)|(cTestLamp)) toggle_READY(); + else set_READY(); + } + + if(++CanPowse >= CANPOWSE) + { + CanPowse = 0; + CanGO = 1; + } + + if(++count_bright == maximum_bright) + { + count_bright = 0 ; + + if(Desk==dsk_COMM) + { + if(work_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO60=1; + else GpioDataRegs.GPBSET.bit.GPIO60=1; + if(heat_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO58=1; + else GpioDataRegs.GPBSET.bit.GPIO58=1; + if(errr_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO62=1; + else GpioDataRegs.GPBSET.bit.GPIO62=1; + } + + if(Mode==adr_SHKF) + { + if(work_lamp) GpioDataRegs.GPBCLEAR.bit.GPIO62=1; + else GpioDataRegs.GPBSET.bit.GPIO62=1; + } } + + if(count_bright == Brightness) + { + if(Desk==dsk_COMM) + { + GpioDataRegs.GPBSET.bit.GPIO60=1; + GpioDataRegs.GPBSET.bit.GPIO58=1; + GpioDataRegs.GPBSET.bit.GPIO62=1; + } + + if(Desk==dsk_SHKF) + { + GpioDataRegs.GPBSET.bit.GPIO62=1; + } } + + if(++count_blink >= period_blink) + { + count_blink=0; + count_mode++; + blink_over = (count_mode & 1)?1:0; + blink_alarm = (count_mode & 7)?1:0; + + if(cExtLamp) + { + work_lamp = cExtLite; + heat_lamp = cExtLite; + errr_lamp = cExtLite; + } + else + { + if(cTestLamp) + { + work_lamp = blink_over; + heat_lamp = blink_over; + errr_lamp = blink_over; + } + else + { + if(Mode==adr_SHKF) + { + if(sig.bit.Error) work_lamp = blink_over; + else work_lamp = 1; + } + else + { + if(sig.bit.Error) work_lamp = 0;//blink_over; +// else if(sig.bit.Alarm) work_lamp = blink_alarm; + else work_lamp = 1; + + if(sig.bit.OverHeat) heat_lamp = 1; + else if(sig.bit.SubHeat) heat_lamp = blink_over; + else if(sig.bit.OutHeat) heat_lamp = !blink_alarm; + else heat_lamp = 0; +} } } } } + +void Init_optic() +{ + int i; + + for(i=0;i<24;i++) + { + sens_type[i]=0; + sens_pair[i]=i; + } + +// sens_type[2] = OPTIC; +// sens_type[3] = OPTIC; +} + +void Init_sensors() +{ + int i; + + EALLOW; // This is needed to write to EALLOW protected registers + PieVectTable.XINT13 = &cpu_timer1_isr_SENS; + EDIS; // This is needed to disable write to EALLOW protected registers + + ConfigCpuTimer(&CpuTimer1, (SYSCLKOUT/1000000), 1000000/SIG_FREQ); + CpuTimer1Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0 + IER |= M_INT13; + + period_ready = SIG_FREQ / (READY_FREQ * 2); + period_blink = SIG_FREQ / (BLINK_FREQ * 2); + + period_dac = SIG_FREQ / (DAC_FREQ); + time_dac = LOAD_TIME * DAC_FREQ; + + time_1_5sec = (3 * ADC_FREQ) / 2; + time_5msec = (5 * ADC_FREQ) / 1000; + time_5sec = (5 * ADC_FREQ); + + for(i=0;i<24;i++) + { + sens_type[i]=0; + sens_pair[i]=i; + } + + if((Mode==adr_REC1)||(Mode==adr_REC2)) + { + sens_type[0]=TERMO_AD; + sens_type[1]=TERMO_AD; + sens_type[2]=TERMO_AD; + sens_type[3]=TERMO_AD; + + sens_type[4]=TERMO_AD; + sens_type[5]=TERMO_AD; + +//sens_type[6]=TERMO_AD; +//sens_type[7]=TERMO_AD; + + + sens_type[8]=TERMO_RS; + sens_type[9]=TERMO_RS; + sens_type[10]=TERMO_RS; + sens_type[11]=TERMO_RS; + + sens_type[12]=VOLTAGE; sens_pair[12]=13; + sens_type[13]=VOLTAGE; sens_pair[13]=12; + sens_type[14]=VOLTAGE; sens_pair[14]=15; + sens_type[15]=VOLTAGE; sens_pair[15]=14; + + Modbus[12].bit.bitE = 1; // Ignore + Modbus[13].bit.bitE = 1; // Ignore + Modbus[14].bit.bitE = 1; // Ignore + Modbus[15].bit.bitE = 1; // Ignore + } + + if((Mode==adr_INV1)||(Mode==adr_INV2)) + { + sens_type[0]=TERMO_AD; + sens_type[1]=TERMO_AD; + sens_type[2]=TERMO_AD; + sens_type[3]=TERMO_AD; + + sens_type[4]=TERMO_AD; + sens_type[5]=TERMO_AD; +//sens_type[6]=TERMO_AD; + + sens_type[7]=TERMO_RS; + sens_type[8]=TERMO_RS; + sens_type[9]=TERMO_RS; + sens_type[10]=TERMO_RS; + sens_type[11]=TERMO_RS; + } + + if(Mode==adr_SHKF) + { + sens_type[0 ] = POWER_380; sens_pair[0]=1; + sens_type[1 ] = POWER_380; sens_pair[1]=0; + sens_type[2 ] = POWER_220; sens_pair[2]=3; + sens_type[3 ] = POWER_220; sens_pair[3]=2; + sens_type[4 ] = POWER_31; + sens_type[5 ] = POWER_31; + sens_type[6 ] = POWER_24; + sens_type[7 ] = POWER_24; + sens_type[8 ] = POWER_24; + sens_type[9 ] = POWER_24; + sens_type[10] = POWER_24; + sens_type[11] = POWER_24; + sens_type[12] = POWER_15; + sens_type[13] = TERMO_AD; + sens_type[14] = TERMO_AD; + sens_type[15] = VIRT_24; + sens_type[16] = VIRT_24; + } + + for(i=0;i<4; i++) err_count[i] = 0; + for(i=0;i<6; i++) lev_count[i] = 0; + for(i=0;i<28;i++) sens_count[i] = 0; + for(i=0;i<32;i++) din_count[i] = 0; + for(i=0;i<40;i++) filter[i] = def_FILTERBAT; + + for(i=0;i=edge) return 1; + (*count)++; return pre; + } + if( (*count) == 0 ) return 0; + (*count)--; return pre; +} + +void reset_errs(int sens, ERROR er) +{ +// unsigned long report; + unsigned int set; + ERROR err; + + err=er; + + if(!sens_error[sens].bit.Latch) + { + set = sens_error[sens].all & NOER; + sens_error[sens].all = err.all | set; + } + else + { + sens_error[sens].all |= err.all; + } + sens_error[sens].bit.Ready = !(err.bit.Stop && (!sens_error[sens].bit.Ignor)); + chk.bit.Error|= !(sens_error[sens].bit.Ready); +} + + +ERROR control_ADC(int sens, int number, int zero) +{ + ERROR err; + int erwait; + + err.all = 0; + + if(TermoSW) erwait = SENS_ERR_WAIT; + else erwait = ADC_FREQ; + +// + if(er_anal(((number <= zero)||(number >= (0x0FFF-(zero/100)))), + &sens_count[sens],erwait, + sens_error[sens].bit.Tear)) + { + err.bit.Tear = 1; + } +/* +// + if(er_anal( (sens_prev[sens] == number), + &sens_count[sens][1],ADC_FREQ, + sens_error[sens].bit.Stick)) + { + err.bit.Stick = 1; + } + sens_prev[sens] = number; +*/ + return err; +} + + + + + + +int input_freq(int chan, int Volt) +{ + static int prevolt[4],tics[4],tacs[4],tic[4],tac[4]; + static long Freq = 0; + int i,sum=0,bum=0; + + if(Volt >= Zero_lev[chan]) + if(prevolt[chan]< Zero_lev[chan]) + { + tics[chan] = tic[chan]; tic[chan] = 0; bum = 1; + } + + if(Volt < Zero_lev[chan]) + if(prevolt[chan]>= Zero_lev[chan]) + { + tacs[chan] = tac[chan]; tac[chan] = 0; bum = 1; + } + + if(bum) + { + for(i=0;i<4;i++) sum += tics[i] + tacs[i]; + Freq = (80L * ADC_FREQ) / sum; + } + + prevolt[chan] = Volt; + tic[chan]++; + tac[chan]++; + + return Freq; +} + + + + +void Current_count(int sens) +{ + float Numb,Current,fAmpl; + static float aCurrent,Amplitude; + static int prezer0=0; + int chan, pair, ist, thrd, i, ignor; + int freq=0; + + ERROR error; + + error.all = 0; + + chan = sens - MAX_TPL_CANAL; + pair = sens_pair[sens] - MAX_TPL_CANAL; + ist = !(chan & 1); + thrd= (chan >>1) + 4; + + if(sens_error[sens].bit.Bypas) + { + sens_error[sens].all = 0; + sens_error[sens].bit.Bypas = 1; + Modbus[sens+DATASTART].all = 0; + return; + } + + Numb = ADC_table[sens]; + + if(cTermoCal||cSetZero) + { + if(!prezer0) + for(i=0;i<4;i++) lev_count[i] = Numb; + lev_count[chan] += (Numb-lev_count[chan])/1000.0; + adc0[sens] = (int)(filterbat(&filter[sens],lev_count[chan])); + Zero_lev[chan] = adc0[sens]; + Modbus[sens+DATASTART].all = adc0[sens]; + } + prezer0 = (cTermoCal||cSetZero); + + Current = (Numb - adc0[sens]) * tmpK[sens]; + + if(!(cTermoCal||cSetZero)) + { + freq = input_freq(chan,Numb); + + + lev_count[chan] += (fabs(Current)-lev_count[chan])/1000.0; + +// + if(ist) + { + aCurrent = -Current; // - + } + else + { +// + Amplitude = im_calc(Current,aCurrent); + fAmpl = filterbat(&filter[sens],Amplitude); + + if(fAmpl<100) + { + fAmpl=0; freq=0; + } + + +// Modbus[sens+DATASTART-1].all = (int)fAmpl;//(int)Amplitude; + Modbus[sens+DATASTART-1].all = (int)(fAmpl/RADIX2); + +// + lev_count[thrd] += (fabs(-Current-aCurrent)-lev_count[thrd])/1000.0; + +i=(8-((sens+DATASTART-1)%8)); +Modbus[sens+DATASTART+i-1+(thrd-4)*3].all = lev_count[chan]; +Modbus[sens+DATASTART+i +(thrd-4)*3].all = lev_count[pair]; +Modbus[sens+DATASTART+i+1+(thrd-4)*3].all = lev_count[thrd]; + + } + + Modbus[sens+DATASTART].all = freq; + +// ! + if(Current > 1.1 * sens_hi_edge[sens]) + { + error.bit.Hyper = 1; + error.bit.Stop = 1; + } + + Numb = lev_count[chan]; + if(Numb 0.2) && (Numb>100), + &err_count[chan],time_1_5sec,0)) + { + error.bit.Wry = 1; + error.bit.Stop = 1; + } + + if(er_anal( ((Numb-lev_count[thrd])/Numb > 0.2) && (Numb>100), + &err_count[thrd],time_1_5sec,0)) + { + error.bit.Wry = 1; + if(!ignor) + error.bit.Stop = 1; + } + + if(!ist) + { + if(Amplitude > sens_hi_edge[sens]) + { + error.bit.Hyper = 1; + if(!ignor) + error.bit.Stop = 1; + } + + if(Amplitude < sens_lo_edge[sens]) + { + error.bit.Out = 1; + if(!ignor) + error.bit.Stop = 1; + } } } + + reset_errs(sens,error); + +} + +void Temper_count(int chan) +{ + float Numb; + int Temper; + int ignor; + ERROR error; + int zer0; + + if(!chan) + { + sig.all = chk.all; + chk.all = 0; + } + + if(chansens_hi_edge[chan]-Cooling) && (sens_error[chan].bit.Hyper)) || + (Temper>sens_hi_edge[chan]) ) + { + error.bit.Hyper = 1; + if(!ignor) + { + error.bit.Stop = 1; + chk.bit.OverHeat= 1; + } } + + else + +// + + if(Temper>sens_lo_edge[chan]) + { + error.bit.Over = 1; + if(!ignor) + chk.bit.SubHeat = 1; + } } + + if(error.all) chk.bit.OutHeat = 1; + + reset_errs(chan,error); + +} + +void Power_count(int chan) +{ + float Numb; + int Power,ignor,bitt; + ERROR error; + + if(sens_error[chan].bit.Bypas) + { + sens_error[chan].all = 0; + sens_error[chan].bit.Bypas = 1; + Modbus[chan+DATASTART].all = 0; + return; + } + + Numb = ADC_table[chan]; + + if(cTermoCal) + { + Modbus[chan+DATASTART].all = (int)(Numb); + return; // + } + + Power = (Numb * tmpK[chan]+5)/10.0; // powK[sens_type[chan]]; + + Modbus[chan+DATASTART].all = Power; + + error.all = 0; + ignor = sens_error[chan].bit.Ignor; + + if(Power sens_hi_edge[chan]) + { + error.bit.Hyper = 1; + if(!ignor) + error.bit.Stop = 1; + } + + if(chan>3) + { + bitt = (chan-4)*2; + error.bit.Contr1 = er_anal(((Inputs.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; + error.bit.Contr2 = er_anal(((Inputs.all>>bitt)&1), &din_count[bitt], 1000, 0); + } + + if(error.all) + if(!ignor) + chk.bit.Alarm = 1; + reset_errs(chan,error); +} diff --git a/measure.h b/measure.h new file mode 100644 index 0000000..5a1665e --- /dev/null +++ b/measure.h @@ -0,0 +1,140 @@ +// +#ifndef _MEASURE +#define _MEASURE + +void Init_sensors(void); +void Init_optic(void); +void Init_packMask(void); +void Temper_count(int chan); +void Current_count(int chan); +void Power_count(int chan); + +typedef union +{ + struct + { + unsigned int Tear :1; + unsigned int Stick :1; + unsigned int Wry :1; + unsigned int Out :1; + unsigned int Over :1; + unsigned int Hyper :1; + unsigned int Contr1 :1; + unsigned int Contr2 :1; + + unsigned int Stop :1; + unsigned int Ready :1; + unsigned int res :3; + unsigned int Latch :1; + unsigned int Ignor :1; + unsigned int Bypas :1; + + } bit; + unsigned int all; + +} ERROR; + +typedef union +{ + struct + { + unsigned int Error :1; + unsigned int Alarm :1; + unsigned int OverHeat :1; + unsigned int SubHeat :1; + unsigned int OutHeat :1; + unsigned int Test_lamp :1; + + } bit; + unsigned int all; + +} FLAG; + +#define NOER 0xE000 +#define EROR 0x01FF + +#define SIG_FREQ 4000 // +#define READY_FREQ 1000 // +#define BLINK_FREQ 2 // +#define ADC_FREQ 5000//3885//777//2000//20000 //777 //3885 // (777*5) +#define DAC_FREQ 50 // + +#define CANPOWSE (SIG_FREQ / 100) // 10 ms + +#define LOAD_TIME 10 // sec + + +#define SENS_ERR_WAIT 10 + +#define maximum_bright 10 + +/* +#define SNOW 1720.0 //1920.0 +#define BOIL 2360.0 //2561.0 + +#define tmp_T_0 0.0 +#define tmp_T_1 200.00 +#define tmp_A1_0 978.0 +#define tmp_A1_1 1686.0 +#define tmp_A2_0 1017.0 +#define tmp_A2_1 1736.0 +#define eta_A1 1002.0 +#define eta_A2 1542.0 +*/ + +#define tmp_T_0 84.31 // 68Om +#define tmp_T_1 234.19 // 100Om +#define tmp_A1_0 540.0 // 1 68 +#define tmp_A2_0 500.0 // 1 100 +#define tmp_A1_1 1055.0 // 2 68 +#define tmp_A2_1 1060.0 // 2 100 + + +#define ZERO 27 + +#define mka300 2040 +#define mka400 2700 + +#define C100 650 +#define C150 2370 + +#define Cooling 5 // () + +#define COSPi6 0.86602540378443864676372317075294 + +#define RADIX2 1.4142135623730950488016887242097 + +#define CURRENT 1 // +#define VOLTAGE 2 // + +#define POWER_380 3 // 380 +#define POWER_220 4 // 220 +#define POWER_31 5 // 31 +#define POWER_24 6 // 24 +#define VIRT_24 7 // 24 +#define POWER_15 8 // 15 +#define TERMO_AD 9 // +#define TERMO_RS 10 // +#define OPTIC 11 // + +extern int MAX_TPL_CANAL; + +extern FILTERBAT filter[]; + +extern ERROR * sens_error; +extern int * sens_hi_edge; +extern int * sens_lo_edge; + +extern int adc0[],tmp0[]; + +#define Zero_lev (adc0+12) //((int *)&Modbus[0x74]) + +extern float tmpK[]; +extern FLAG chk,sig; +extern int sens_type[]; + +extern int period_ready; + +extern unsigned int CanPowse,CanGO; + +#endif //_MEASURE diff --git a/message.c b/message.c new file mode 100644 index 0000000..ac88305 --- /dev/null +++ b/message.c @@ -0,0 +1,367 @@ +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "package.h" +#include "RS485.h" +#include "crc16.h" +#include "cntrl_adr.h" +#include "bios_dsp.h" +#include "filter_bat2.h" +#include "measure.h" +#include "message.h" + + +#include "ADC.h" +#include "peripher.h" + +#include "ecan.h" +#include "spise2p.h" +#include "i2c.h" + +WORDE Modbus[ANSWER_LEN+1]; +WORDE reply[REPLY_LEN]; + +unsigned int param[ANSWER_LEN+1]; + +LONGE* outputs; + +int DataAnalog1,DataAnalog2; + +ERROR * sens_error; +int * sens_hi_edge; +int * sens_lo_edge; + +unsigned int Maska[2][8]; + +void Default_params() +{ + unsigned int i; + + for(i=0;iRS_Header[2] << 8) |*/ rs_arr->RS_Header[3]; + +// + Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; + + ///////////////////////////////////////////////// + // + /* */ + + rs_arr->buffer[0] = CNTRL_ADDR; + rs_arr->buffer[1] = CMD_MODBUS_3; + rs_arr->buffer[2] = Length_MB*2; + + for (i=0;ibuffer[3+i*2 ]=(Modbus[Address_MB+i].byt.byte_hi); + rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i].byt.byte_lo); + } + + crc = 0xffff; + crc = get_crc_16(crc, rs_arr->buffer, Length_MB*2+3); + + rs_arr->buffer[Length_MB*2+3] = LOBYTE(crc); + rs_arr->buffer[Length_MB*2+4] = HIBYTE(crc); + + rs_arr->buffer[Length_MB*2+5] = 0; + rs_arr->buffer[Length_MB*2+6] = 0; + rs_arr->buffer[Length_MB*2+7] = 0; + rs_arr->buffer[Length_MB*2+8] = 0; + + rs_arr->flag_TIMEOUT_to_Send=true; + RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8); + + return; +} + +void ReceiveCommandModbus6(RS_DATA *rs_arr) +{ + unsigned int Address_MB, Data_MB, i; + + ///////////////////////////////////////////////// + // + /* */ + + for (i=0;i<8;i++) + rs_arr->buffer[i] = rs_arr->RS_Header[i]; + +// + Address_MB = (/*(rs_arr->RS_Header[2] << 8) | */rs_arr->RS_Header[3]); + +// + Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; + + Modbus[Address_MB].all = Data_MB; + + rs_arr->flag_TIMEOUT_to_Send=true; + RS_Send(rs_arr, rs_arr->buffer, 10); +} diff --git a/message.h b/message.h new file mode 100644 index 0000000..9ae50ae --- /dev/null +++ b/message.h @@ -0,0 +1,51 @@ +#ifndef MESSAGE_H +#define MESSAGE_H + +typedef unsigned char CHAR; + +#define ANSWER_LEN 0x80 //70 // 16+16+16+16+6 +#define REPLY_LEN 0x19 + +#define byte_hi byte_1 +#define byte_lo byte_0 + +typedef struct +{ + unsigned char Address; // + unsigned char Number; // + + BAITE byte0; + BAITE byte1; + BAITE byte2; + BAITE byte3; + BAITE byte4; + BAITE byte5; + BAITE byte6; + BAITE byte7; + + unsigned char crc_lo; + unsigned char crc_hi; + unsigned char add_byte; +} CMD_TO_TMS; + +extern WORDE Modbus[]; +extern WORDE reply[]; + +extern LONGE* outputs; + +extern int DataAnalog1,DataAnalog2; + +extern unsigned int Maska[][8]; + +//void ReceiveCommand(RS_DATA *rs_arr); +void ReceiveCommandModbus3(RS_DATA *rs_arr); +void ReceiveCommandModbus6(RS_DATA *rs_arr); + +void reset_errs(int sens, ERROR er); + +void Save_params(void); +void Load_params(void); +void Load_caliber(void); +void Default_params(void); + +#endif //MESSAGE_H diff --git a/package.h b/package.h new file mode 100644 index 0000000..c0a9fde --- /dev/null +++ b/package.h @@ -0,0 +1,70 @@ +#ifndef PACKAGE +#define PACKAGE + +#define TERMOPAIR 14 +#define CURRENTOS (TERMOPAIR*2) +#define DATASTART 24 + +//----------------------------------------------- +#define adr_REC1 1 +#define adr_REC2 2 +#define adr_INV1 3 +#define adr_INV2 4 +#define adr_SHKF 5 +#define adr_ISOL 6 +//----------------------------------------------- + +//----------------------------------------------- +#define dsk_COMM 1 +#define dsk_SHKF 2 +#define dsk_ISOL 3 +//----------------------------------------------- + + +#define CAN_send_start 0 // +#define CAN_send_finis 0x6F // + +#define start_sens_error 0 +#define start_sens_hi_edge 48 +#define start_sens_lo_edge 72 + +#define IsShimON Modbus[2].bit.bit0 + +#define Input Modbus[0x17] + +#define optopowse Modbus[0x60].all // , ms +#define optofiltr Modbus[0x61].all // + +#define Brightness Modbus[0x64].all // + +#define Cancount ((int *)&Modbus[0x65]) + +#define Zeroes ((int *)&Modbus[0x70]) + +#define isoMOM ((int *)&Modbus[0x70]) +#define isoADC ((int *)&Modbus[0x78]) + +#define LastMode Modbus[126].all + +#define Commands Modbus[127].all +#define cTestLamp Modbus[127].bit.bit0 +#define cSetZero Modbus[127].bit.bit1 +#define cSaveParam Modbus[127].bit.bit2 +#define cDefParam Modbus[127].bit.bit3 + +#define cTermoCal Modbus[127].bit.bit4 +#define cReadCal Modbus[127].bit.bit5 + +#define cExtLamp Modbus[127].bit.bit6 +#define cExtLite Modbus[127].bit.bit7 + +#define cKoefCalc Modbus[127].bit.bit8 + +#define cShimON Modbus[127].bit.bit9 + + +#define cReset Modbus[127].bit.bitF + + +#endif //PACKAGE + diff --git a/peripher.c b/peripher.c new file mode 100644 index 0000000..1658091 --- /dev/null +++ b/peripher.c @@ -0,0 +1,145 @@ +#include "DSP2833x_Device.h" // DSP281x Headerfile Include File +#include "filter_bat2.h" +#include "measure.h" +#include "RS485.h" +#include "message.h" + +#include "package.h" + +#include "peripher.h" +#include "GPIO_table.h" + + +int Mode,Desk,Addrr,TermoAD=0,TermoRS=0,TermoSW=0,Currentoz=0; +LONGE Inputs; + +int ExtraCanal[24]; + +void get_Mode() +{ + int i,qua; + + EALLOW; + + GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 0011 + GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 1927 + GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFCC0; // 3234, 36 + GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 4853, 5863 + + GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; + GpioCtrlRegs.GPADIR.bit.GPIO21 = 0; + GpioCtrlRegs.GPADIR.bit.GPIO22 = 0; + GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0; + + EDIS; + + Mode=0; + + qua=0; + for(i=0;i<100;i++) + qua += !GpioDataRegs.GPADAT.bit.GPIO22; + if(qua>50) Mode += 1; + + qua=0; + for(i=0;i<100;i++) + qua += !GpioDataRegs.GPADAT.bit.GPIO20; + if(qua>50) Mode += 2; + + qua=0; + for(i=0;i<100;i++) + qua += !GpioDataRegs.GPADAT.bit.GPIO21; + if(qua>50) Mode += 4; + + Addrr = Mode*2; + + Mode+= 1; + + qua=0; + for(i=0;i<100;i++) + qua += !GpioDataRegs.GPBDAT.bit.GPIO51; + if(qua>50) Addrr += 1; + + if( (Mode==adr_REC1)||(Mode==adr_REC2)) Currentoz = 1; + if( (Mode==adr_REC1)||(Mode==adr_REC2)|| + (Mode==adr_INV1)||(Mode==adr_INV2)) Desk = dsk_COMM; + if (Mode==adr_SHKF) Desk = dsk_SHKF; + if (Mode==adr_ISOL) Desk = dsk_ISOL; + + EALLOW; + switch(Desk) + { + case dsk_COMM: GpioCtrlRegs.GPADIR.all = COMM_GPADIR; + GpioCtrlRegs.GPBDIR.all = COMM_GPBDIR; break; + + case dsk_SHKF: GpioCtrlRegs.GPADIR.all = VEPP_GPADIR; + GpioCtrlRegs.GPBDIR.all = VEPP_GPBDIR; break; + + case dsk_ISOL: GpioCtrlRegs.GPADIR.all = ISOL_GPADIR; + GpioCtrlRegs.GPBDIR.all = ISOL_GPBDIR; break; + } + EDIS; +} + +void get_Inputs() +{ + static long butthurt[2] ={0,0}; + unsigned long butt=0; + + if(Desk==dsk_COMM) + { + if(!GpioDataRegs.GPADAT.bit.GPIO7) butthurt[0]=0; + else if(butthurt[0] size) len=size; + + writeData.dataPtr = buf; + writeData.nrData = len; + writeData.se2pAddr = adres * WORD_LEN; + + spiSe2pWrite(&se2p, &writeData); + while(!spiSe2pFree(&se2p)); + + buf += len; + adres += len; + size -= len; + } + CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1 +// diod2_off(); + +} + +void Seeprom_read( unsigned int adres, + unsigned int buf[], + unsigned int size) +{ + unsigned int len; + +// diod2_on(); + CpuTimer2.InterruptCount=0; + CpuTimer2Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0 + + while(!spiSe2pFree(&se2p)); + + size = (size / WORD_LEN) + (size % WORD_LEN); + while(size) + { + len = PAGE_LEN - (adres % PAGE_LEN); + if(len > size) len=size; + + readData.dataPtr = buf; + readData.nrData = len; + readData.se2pAddr = adres * WORD_LEN; + + spiSe2pRead(&se2p, &readData); + while(!spiSe2pFree(&se2p)); + + buf += len; + adres += len; + size -= len; + } + CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1 +// diod2_off(); +} + +void Init_Seeprom() +{ + se2p.init(&se2p); + + EALLOW; // This is needed to write to EALLOW protected registers + PieVectTable.TINT2 = &cpu_timer2_isr; + EDIS; // This is needed to disable write to EALLOW protected registers + + InitCpuTimers(); // For this example, only initialize the Cpu Timers +// ConfigCpuTimer(&CpuTimer2, (SYSCLKOUT/1000000), 100); +// ConfigCpuTimer(&CpuTimer2, (SYSCLKOUT/1000000), 10); + ConfigCpuTimer(&CpuTimer2, (SYSCLKOUT/1000000), 100); + + IER |= M_INT14; +} + +void SPISE2P_DRV_init(SPISE2P_DRV *eeprom) +{ +/* Configure SPI-A pins using GPIO regs*/ +// This specifies which of the possible GPIO pins will be SPI functional pins. +// Comment out other unwanted lines. + EALLOW; + GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA + GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA + GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA + GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // General purpose I/O 19 (default) (I/O) + GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; // Configures the GPIO pin as an output + GpioDataRegs.GPADAT.bit.GPIO19 = 0; + EDIS; + + /* Configure the SPI: 8-bit, Rising edge with delay */ + SpiaRegs.SPICCR.all=0x0007; + SpiaRegs.SPICTL.all=0x001F; + SpiaRegs.SPISTS.all=0x00; + + SpiaRegs.SPIBRR = CLKMULT * 6; + + SpiaRegs.SPIFFTX.all=0x8000; + SpiaRegs.SPIFFRX.all=0x0000; + SpiaRegs.SPIFFCT.all=0x00; + SpiaRegs.SPIPRI.all=0x0010; + + /* Disable Chip Select of Serial EEPROM */ + eeprom->csr=0; + eeprom->msgPtr=0; + + SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SCI +} + +void SPISE2P_DRV_csset() +{ + GpioDataRegs.GPADAT.bit.GPIO19 = 1; +} + +void SPISE2P_DRV_csclr() +{ + GpioDataRegs.GPADAT.bit.GPIO19 = 0; +} + +unsigned int spiSe2pFree(SPISE2P_DRV *se2p) +{ + if(se2p->csr&0x3) return(0); + else return(1); +} + +void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr) +{ + se2p->msgPtr=msgPtr; + se2p->csr|=0x1; +} + +void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr) +{ + se2p->msgPtr=msgPtr; + se2p->csr|=0x2; +} + +/********************************************************************/ +/******* SPI bus Serial EEPROM driver Tick function *****************/ +/********************************************************************/ + +interrupt void cpu_timer2_isr(void) +{ EALLOW; + CpuTimer2.InterruptCount++; + + se2p.tick(&se2p); + + // The CPU acknowledges the interrupt. + EDIS; +} + +void SPISE2P_DRV_tick(SPISE2P_DRV *eeprom) +{ + static unsigned int step=0; + static unsigned int dataCount=0; + static volatile unsigned int dummy=0; + + switch(step) + { + case 0: + /* If write request is SET, then trigger the Write operation + If read request is SET, then trigger the Read operation + If Read request is also not SET, then continue to poll */ + + if(eeprom->csr&SPISE2P_WRRQ) + { step=1; + eeprom->csr|=SPISE2P_WRIP; /* Set Write in progress*/ + eeprom->csclr(); + } + + if(eeprom->csr&SPISE2P_RDRQ) + { step=13; + eeprom->csr|=SPISE2P_RDIP; /* Set Read in progress */ + eeprom->csclr(); + } + break; + + case 1: + /************************************************************ + *********** SPI bus EEPROM Write Starts from here *********** + ************************************************************* + Prier to any attempt to write data to SPI serial EEPROM + Write Enable Latch must be set by issuing the WREN command */ + SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=SPISE2P_WREN_CMD; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; + step=2; + break; + + case 2: + /* Wait for VSPI State machine to send the WREN command and + serial EEPROM Chip Select must be brought to HIGH to set + the WREN latch */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { + dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + eeprom->csset(); + + step=3; + } + break; + + case 3: + /* Assert CS of Serial EEPROM and send WRITE command */ + + eeprom->csclr(); + SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=SPISE2P_WRITE_CMD; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; + step=4; + break; + + case 4: + /* Wait for VSPI State machine to send the WRITE command */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + step=5; + } + break; + + case 5: + /* Send Address */ + + #if(SPISE2P_ADDR_WIDTH==SIXTEEN_BIT) + SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT; + SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr; + #endif + #if(SPISE2P_ADDR_WIDTH==EIGHT_BIT) + SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr<<8; + #endif + + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=6; + break; + + case 6: + /* Wait for VSPI State machine to send the Address */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + step=7; + } + break; + + case 7: + /* Send Data */ + + #if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) + SpiaRegs.SPICCR.all=SPISE2P_TFR16BIT; + SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount); + #endif + + #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount)<<8; + #endif + + dataCount++; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=8; + break; + + case 8: + /* Wait for VSPI State machine to send the Data. + If all the data are sent, then set the CS pin to HIGH + to program or write the data in EEPROM array */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + + if (dataCount==eeprom->msgPtr->nrData) + { eeprom->csset(); + step=9;} + else + step=7; /* Write next data */ + } + break; + + + case 9: + /* Read the EEPROM status register to check whether the + data sent are indeed programmed to the EEPROM array. + Hence, send RDSR command to EEPROM to read status reg. */ + + eeprom->csclr(); + SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=SPISE2P_RDSR_CMD; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=10; + break; + + case 10: + /* Wait for VSPI State machine to send RDSR command */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + step=11; + } + break; + + case 11: + /* Send dummy Data to read Status reg. */ + + SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=12; + break; + + case 12: + /* Wait for VSPI State machine to clock out status reg. + Check, whether the data are written to the EEPROM array, + If written, then reset the WRIP(write in progress) and + WRRQ(Write request bit) and go back to STATE0 */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { eeprom->csset(); + + if (SpiaRegs.SPIRXBUF & SPISE2P_BUSY_MASK ) + step=9; + else + { eeprom->csr&=(~SPISE2P_WRIP); + eeprom->csr&=(~SPISE2P_WRRQ); + step=0; + dataCount=0; + } + } + break; + + case 13: + /************************************************************ + *********** SPI bus EEPROM Read Starts from here *********** + ************************************************************* + Send READ Command to SPI bus serail EEPROM */ + + SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=SPISE2P_READ_CMD; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=14; + break; + + case 14: + /* Wait for VSPI State machine to send READ command */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + step=15; + } + break; + + case 15: + /* Send Address */ + + #if(SPISE2P_ADDR_WIDTH==SIXTEEN_BIT) + SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT; + SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr; + #endif + #if(SPISE2P_ADDR_WIDTH==EIGHT_BIT) + SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr<<8; + #endif + + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=16; + break; + + case 16: + /* Wait for VSPI State machine to send Address */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + step=17; + } + break; + + case 17: + /* Send Dummy value to clock out data from serial EEPROM */ + + #if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) + SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT; + SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA; + #endif + + #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT; + SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA<<8; + #endif + + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + step=18; + break; + + case 18: + /* Wait for VSPI State machine to clk out data from EEPROM */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ + { + #if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) + *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF; + #endif + + #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF&0xFF; + #endif + dataCount++; + step=19; + } + break; + + case 19: + /* If all the data are read, terminate the read operation by + rising the CS. Then reset the RDIP (Read in progress) bit + and reset the RDRQ(Read request) bit and go back to STATE0 */ + + if (dataCount==eeprom->msgPtr->nrData) + { eeprom->csset(); + step=0; + dataCount=0; + eeprom->csr&=(~SPISE2P_RDIP); + eeprom->csr&=(~SPISE2P_RDRQ); + } + else + step=17; + break; + } +} + diff --git a/spise2p.h b/spise2p.h new file mode 100644 index 0000000..6cf27e4 --- /dev/null +++ b/spise2p.h @@ -0,0 +1,134 @@ +/*===================================================================== +File name : SPISE2P.H + +Originator : Settu Duraisamy + C2000 Applications Team + Texas Instruments + +Description : + Header file containing object definitions, proto type + declaration and default object initializers for + SPI Serial EEPROM driver using VSPI + +Date : 30/6/2003 (DD/MM/YYYY) +=======================================================================*/ + +#ifndef __SPISE2P_H__ + +#define __SPISE2P_H__ + +// +#define SEEPROM_LEN 0x10000 + +#define NULL 0 + +#define SIXTEEN_BIT 15 +#define EIGHT_BIT 07 + +/***************************************************************/ +/* Configurable Parameter for SPI bus Serial EEPROM */ +/***************************************************************/ +#define SPISE2P_DATA_WIDTH SIXTEEN_BIT//EIGHT_BIT +#define SPISE2P_ADDR_WIDTH SIXTEEN_BIT +#define SPIBAUD_REG_VAL 1//12 +#define SPICLK_PHASE 1 +#define SPICLK_POLARITY 0 + +#define SPIBAUD_RATE 100000 +//10000000 + +/**************************************************************/ +/**************************************************************/ + +/* Serial EEPROM Command words, left justified */ +#define SPISE2P_READ_CMD 0x0300 +#define SPISE2P_WRITE_CMD 0x0200 +#define SPISE2P_WRDI_CMD 0x0400 +#define SPISE2P_WREN_CMD 0x0600 +#define SPISE2P_RDSR_CMD 0x0500 +#define SPISE2P_WRSR_CMD 0x0100 + +#define SPISE2P_RDID_CMD 0x0A00 + +#define SPISE2P_DUMMY_DATA 0x0000 +#define SPISE2P_BUSY_MASK 0x01 + +/* Symbolic constant for SPICCR to transfer 8bit or 16 bit value*/ +#define SPISE2P_TFR16BIT 0x80|(SPICLK_POLARITY<<6)|SIXTEEN_BIT +#define SPISE2P_TFR8BIT 0x80|(SPICLK_POLARITY<<6)|EIGHT_BIT + +/* Status valus */ +#define SPISE2P_WRRQ 1 /* Write Requset */ +#define SPISE2P_RDRQ 2 /* Read request */ +#define SPISE2P_WRIP 4 /* Write in progress */ +#define SPISE2P_RDIP 8 /* Read in progress */ + +/* Message declaration */ +typedef struct { + unsigned int *dataPtr; /* Data pointer */ + unsigned long nrData; /* number of data */ + unsigned long se2pAddr; /* se2pAddr */ + }SE2P_DATA; + + +/* Object declaration */ +typedef struct { + SE2P_DATA *msgPtr; + unsigned int csr; /* control/status register */ + void (*init)(void *); + void (*tick)(void *); + void (*csset)(void); + void (*csclr)(void); + }SPISE2P_DRV; + +#define SPISE2P_DRV_DEFAULTS { NULL,\ + 0,\ + (void (*)(void *))SPISE2P_DRV_init,\ + (void (*)(void *))SPISE2P_DRV_tick,\ + (void (*)(void))SPISE2P_DRV_csset,\ + (void (*)(void))SPISE2P_DRV_csclr} + +typedef SPISE2P_DRV *SPISE2P_DRV_handle; + +void SPISE2P_DRV_init(SPISE2P_DRV * ); +void SPISE2P_DRV_tick(SPISE2P_DRV *); +void SPISE2P_DRV_csset(void); +void SPISE2P_DRV_csclr(void); + +unsigned int spiSe2pFree(SPISE2P_DRV *se2p); +void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *data); +void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *data); + +#if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) + #define PROM_LEN 0x8000 + #define PAGE_LEN 0x20 + #define WORD_LEN 2 +#else + #define PROM_LEN 0x4000 + #define PAGE_LEN 0x40 + #define WORD_LEN 1 +#endif + +/* EEPROM. ** +** SPI . . ** +** 2! */ +void Init_Seeprom(void); + +/* SEEPROM. : ** +** adres - , . ** +** adres = 0..0x8000, 8 ** +** adres = 0..0x4000, 16 ** +** buf - , . ** +** size - . - ! */ +void Seeprom_write(unsigned int adres, unsigned int buf[], unsigned int size); + +/* SEEPROM. : ** +** adres - , . ** +** adres = 0..0x8000, 8 ** +** adres = 0..0x4000, 16 ** +** buf - , . ** +** size - . - ! */ +void Seeprom_read(unsigned int adres, unsigned int buf[], unsigned int size); + +#endif + diff --git a/test.c b/test.c new file mode 100644 index 0000000..5427b15 --- /dev/null +++ b/test.c @@ -0,0 +1,183 @@ +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" + +#include "RS485.h" +#include "message.h" +#include "filter_bat2.h" +#include "measure.h" +#include "package.h" +#include "test.h" +#include "kanal.h" +#include "peripher.h" + +WORDE PRES; + +int isMask = 1; +int isLamp = 0; +int isBrit = 0; +int isNumb = 1111; + +long cownt=0; + +unsigned int Light = 0xFFFF; + +int quaLamp = 6; + +void what_is() +{ + static int numb=0; + + if(keyTest) + { + if(keyNext & !preNext) + { + if(!isBrit) + { + isBrit=1; + isMask=1; + isLamp=0; + } + else + { + isMask<<=1; + + if(++isLamp >= quaLamp) + { + isMask=1; + isLamp=0; + } } } + + if(isBrit) + { + if(keyUp && !preUp) + if(Bright[isLamp]<10) Bright[isLamp]++; + + if(keyDown & !preDown) + if(Bright[isLamp]>0) Bright[isLamp]--; + } + else + { + if(cownt) cownt--; + else + { + cownt = BLN_FREQ/4; + + numb++; if(numb==10) numb=1; + isNumb = numb*1111; + + if(!isMask) isMask = 0xFFFF; + else isMask = 0; + } } } + + else + { + if(isBrit) + { + isBrit=0; + Save_params(); + } } + + PRES = KEYS; +} + + +interrupt void cpu_timer1_isr_PULT(void) +{ + static int count_bright=0; + unsigned int light=0, i; + static LONGE Diod1,Diod2; + static unsigned int Cownt,cownt; + int dig1,dig2; + + EALLOW; + CpuTimer1.InterruptCount++; + IER |= MINT13; // Set "global" priority + EINT; + EDIS; // This is needed to disable write to EALLOW protected registers + + GpioDataRegs.GPATOGGLE.bit.GPIO0=1; // Ready + + if(count_bright) count_bright --; + else count_bright = 9; + for(i=0; i> 1; + + for (i = 0; i < t; i++) + DSP28x_usDelay(CLKMULT*8L); +} + + + + diff --git a/tools.h b/tools.h new file mode 100644 index 0000000..2107dc4 --- /dev/null +++ b/tools.h @@ -0,0 +1,26 @@ +#ifndef TOOLS_H +#define TOOLS_H + +void init_zone7(void); + +void setup_leds_line(void); + +void pause_us(unsigned long t); + +#ifndef TUBER +#define led1_toggle() GpioDataRegs.GPBTOGGLE.bit.GPIO32=1 +#define led2_toggle() GpioDataRegs.GPBTOGGLE.bit.GPIO48=1 +#define led1_off() GpioDataRegs.GPBSET.bit.GPIO32=1 +#define led2_off() GpioDataRegs.GPBSET.bit.GPIO48=1 +#define led1_on() GpioDataRegs.GPBCLEAR.bit.GPIO32=1 +#define led2_on() GpioDataRegs.GPBCLEAR.bit.GPIO48=1 +#else +#define led1_toggle() GpioDataRegs.GPBTOGGLE.bit.GPIO32=1 +#define led2_toggle() GpioDataRegs.GPBTOGGLE.bit.GPIO32=1 +#define led1_off() GpioDataRegs.GPBSET.bit.GPIO32=1 +#define led2_off() GpioDataRegs.GPBSET.bit.GPIO32=1 +#define led1_on() GpioDataRegs.GPBCLEAR.bit.GPIO32=1 +#define led2_on() GpioDataRegs.GPBCLEAR.bit.GPIO32=1 +#endif + +#endif //TOOLS_H diff --git a/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h b/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h new file mode 100644 index 0000000..061842f --- /dev/null +++ b/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h @@ -0,0 +1,164 @@ +// TI File $Revision: /main/1 $ +// Checkin $Date: August 18, 2006 13:45:39 $ +//########################################################################### +// +// FILE: DSP2833x_EPwm_defines.h +// +// TITLE: #defines used in ePWM examples examples +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_EPWM_DEFINES_H +#define DSP2833x_EPWM_DEFINES_H + + +#ifdef __cplusplus +extern "C" { +#endif + +// TBCTL (Time-Base Control) +//========================== +// CTRMODE bits +#define TB_COUNT_UP 0x0 +#define TB_COUNT_DOWN 0x1 +#define TB_COUNT_UPDOWN 0x2 +#define TB_FREEZE 0x3 +// PHSEN bit +#define TB_DISABLE 0x0 +#define TB_ENABLE 0x1 +// PRDLD bit +#define TB_SHADOW 0x0 +#define TB_IMMEDIATE 0x1 +// SYNCOSEL bits +#define TB_SYNC_IN 0x0 +#define TB_CTR_ZERO 0x1 +#define TB_CTR_CMPB 0x2 +#define TB_SYNC_DISABLE 0x3 +// HSPCLKDIV and CLKDIV bits +#define TB_DIV1 0x0 +#define TB_DIV2 0x1 +#define TB_DIV4 0x2 +// PHSDIR bit +#define TB_DOWN 0x0 +#define TB_UP 0x1 + +// CMPCTL (Compare Control) +//========================== +// LOADAMODE and LOADBMODE bits +#define CC_CTR_ZERO 0x0 +#define CC_CTR_PRD 0x1 +#define CC_CTR_ZERO_PRD 0x2 +#define CC_LD_DISABLE 0x3 +// SHDWAMODE and SHDWBMODE bits +#define CC_SHADOW 0x0 +#define CC_IMMEDIATE 0x1 + +// AQCTLA and AQCTLB (Action Qualifier Control) +//============================================= +// ZRO, PRD, CAU, CAD, CBU, CBD bits +#define AQ_NO_ACTION 0x0 +#define AQ_CLEAR 0x1 +#define AQ_SET 0x2 +#define AQ_TOGGLE 0x3 + +// DBCTL (Dead-Band Control) +//========================== +// OUT MODE bits +#define DB_DISABLE 0x0 +#define DBA_ENABLE 0x1 +#define DBB_ENABLE 0x2 +#define DB_FULL_ENABLE 0x3 +// POLSEL bits +#define DB_ACTV_HI 0x0 +#define DB_ACTV_LOC 0x1 +#define DB_ACTV_HIC 0x2 +#define DB_ACTV_LO 0x3 +// IN MODE +#define DBA_ALL 0x0 +#define DBB_RED_DBA_FED 0x1 +#define DBA_RED_DBB_FED 0x2 +#define DBB_ALL 0x3 + +// CHPCTL (chopper control) +//========================== +// CHPEN bit +#define CHP_DISABLE 0x0 +#define CHP_ENABLE 0x1 +// CHPFREQ bits +#define CHP_DIV1 0x0 +#define CHP_DIV2 0x1 +#define CHP_DIV3 0x2 +#define CHP_DIV4 0x3 +#define CHP_DIV5 0x4 +#define CHP_DIV6 0x5 +#define CHP_DIV7 0x6 +#define CHP_DIV8 0x7 +// CHPDUTY bits +#define CHP1_8TH 0x0 +#define CHP2_8TH 0x1 +#define CHP3_8TH 0x2 +#define CHP4_8TH 0x3 +#define CHP5_8TH 0x4 +#define CHP6_8TH 0x5 +#define CHP7_8TH 0x6 + +// TZSEL (Trip Zone Select) +//========================== +// CBCn and OSHTn bits +#define TZ_DISABLE 0x0 +#define TZ_ENABLE 0x1 + +// TZCTL (Trip Zone Control) +//========================== +// TZA and TZB bits +#define TZ_HIZ 0x0 +#define TZ_FORCE_HI 0x1 +#define TZ_FORCE_LO 0x2 +#define TZ_NO_CHANGE 0x3 + +// ETSEL (Event Trigger Select) +//============================= +#define ET_CTR_ZERO 0x1 +#define ET_CTR_PRD 0x2 +#define ET_CTRU_CMPA 0x4 +#define ET_CTRD_CMPA 0x5 +#define ET_CTRU_CMPB 0x6 +#define ET_CTRD_CMPB 0x7 + +// ETPS (Event Trigger Pre-scale) +//=============================== +// INTPRD, SOCAPRD, SOCBPRD bits +#define ET_DISABLE 0x0 +#define ET_1ST 0x1 +#define ET_2ND 0x2 +#define ET_3RD 0x3 + + +//-------------------------------- +// HRPWM (High Resolution PWM) +//================================ +// HRCNFG +#define HR_Disable 0x0 +#define HR_REP 0x1 +#define HR_FEP 0x2 +#define HR_BEP 0x3 + +#define HR_CMP 0x0 +#define HR_PHS 0x1 + +#define HR_CTR_ZERO 0x0 +#define HR_CTR_PRD 0x1 + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // - end of DSP2833x_EPWM_DEFINES_H + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/include/DSP2833x_Examples.h b/v120/DSP2833x_common/include/DSP2833x_Examples.h new file mode 100644 index 0000000..7ababcb --- /dev/null +++ b/v120/DSP2833x_common/include/DSP2833x_Examples.h @@ -0,0 +1,143 @@ +// TI File $Revision: /main/9 $ +// Checkin $Date: July 2, 2008 14:31:12 $ +//########################################################################### +// +// FILE: DSP2833x_Examples.h +// +// TITLE: DSP2833x Device Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_EXAMPLES_H +#define DSP2833x_EXAMPLES_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/*----------------------------------------------------------------------------- + Specify the PLL control register (PLLCR) and divide select (DIVSEL) value. +-----------------------------------------------------------------------------*/ +//#define DSP28_DIVSEL 0 // Enable /4 for SYSCLKOUT +//#define DSP28_DIVSEL 1 // Enable /4 for SYSCKOUT +#define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT +//#define DSP28_DIVSEL 3 // Enable /1 for SYSCLKOUT + +#define DSP28_PLLCR CLKMULT*2 + +//#define DSP28_PLLCR 10 +//#define DSP28_PLLCR 9 +//#define DSP28_PLLCR 8 +//#define DSP28_PLLCR 7 +//#define DSP28_PLLCR 6 +//#define DSP28_PLLCR 5 +//#define DSP28_PLLCR 4 +//#define DSP28_PLLCR 3 +//#define DSP28_PLLCR 2 +//#define DSP28_PLLCR 1 +//#define DSP28_PLLCR 0 // PLL is bypassed in this mode +//---------------------------------------------------------------------------- + + +/*----------------------------------------------------------------------------- + Specify the clock rate of the CPU (SYSCLKOUT) in nS. + + Take into account the input clock frequency and the PLL multiplier + selected in step 1. + + Use one of the values provided, or define your own. + The trailing L is required tells the compiler to treat + the number as a 64-bit value. + + Only one statement should be uncommented. + + Example 1:150 MHz devices: + CLKIN is a 30MHz crystal. + + In step 1 the user specified PLLCR = 0xA for a + 150Mhz CPU clock (SYSCLKOUT = 150MHz). + + In this case, the CPU_RATE will be 6.667L + Uncomment the line: #define CPU_RATE 6.667L + + Example 2: 100 MHz devices: + CLKIN is a 20MHz crystal. + + In step 1 the user specified PLLCR = 0xA for a + 100Mhz CPU clock (SYSCLKOUT = 100MHz). + + In this case, the CPU_RATE will be 10.000L + Uncomment the line: #define CPU_RATE 10.000L +-----------------------------------------------------------------------------*/ +#define CPU_RATE 6.667L // for a 150MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 7.143L // for a 140MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 8.333L // for a 120MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 10.000L // for a 100MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 13.330L // for a 75MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 20.000L // for a 50MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 33.333L // for a 30MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 41.667L // for a 24MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 50.000L // for a 20MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 66.667L // for a 15MHz CPU clock speed (SYSCLKOUT) +//#define CPU_RATE 100.000L // for a 10MHz CPU clock speed (SYSCLKOUT) + +//---------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- + Target device (in DSP2833x_Device.h) determines CPU frequency + (for examples) - either 150 MHz (for 28335 and 28334) or 100 MHz + (for 28332). User does not have to change anything here. +-----------------------------------------------------------------------------*/ +#if DSP28_28332 // DSP28_28332 device only + #define CPU_FRQ_100MHZ 1 // 100 Mhz CPU Freq (20 MHz input freq) + #define CPU_FRQ_150MHZ 0 +#else + #define CPU_FRQ_100MHZ 0 // DSP28_28335||DSP28_28334 + #define CPU_FRQ_150MHZ 1 // 150 MHz CPU Freq (30 MHz input freq) by DEFAULT +#endif + + +//--------------------------------------------------------------------------- +// Include Example Header Files: +// + +#include "DSP2833x_GlobalPrototypes.h" // Prototypes for global functions within the + // .c files. + +#include "DSP2833x_ePwm_defines.h" // Macros used for PWM examples. +#include "DSP2833x_Dma_defines.h" // Macros used for DMA examples. +#include "DSP2833x_I2C_defines.h" // Macros used for I2C examples. + +#define PARTNO_28335 0xEF +#define PARTNO_28334 0xEE +#define PARTNO_28332 0xED +#define PARTNO_28235 0xE8 +#define PARTNO_28234 0xE7 +#define PARTNO_28232 0xE6 + + +// Include files not used with DSP/BIOS +#ifndef DSP28_BIOS +#include "DSP2833x_DefaultISR.h" +#endif + + +// DO NOT MODIFY THIS LINE. +#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L) + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_EXAMPLES_H definition + + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h b/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h new file mode 100644 index 0000000..9c90607 --- /dev/null +++ b/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h @@ -0,0 +1,207 @@ +// TI File $Revision: /main/11 $ +// Checkin $Date: May 12, 2008 14:30:08 $ +//########################################################################### +// +// FILE: DSP2833x_GlobalPrototypes.h +// +// TITLE: Global prototypes for DSP2833x Examples +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_GLOBALPROTOTYPES_H +#define DSP2833x_GLOBALPROTOTYPES_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/*---- shared global function prototypes -----------------------------------*/ +extern void InitAdc(void); + +extern void DMAInitialize(void); +// DMA Channel 1 +extern void DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +extern void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +extern void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +extern void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +extern void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +extern void StartDMACH1(void); +// DMA Channel 2 +extern void DMACH2AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +extern void DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +extern void DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +extern void DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +extern void DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +extern void StartDMACH2(void); +// DMA Channel 3 +extern void DMACH3AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +extern void DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +extern void DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +extern void DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +extern void DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +extern void StartDMACH3(void); +// DMA Channel 4 +extern void DMACH4AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +extern void DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +extern void DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +extern void DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +extern void DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +extern void StartDMACH4(void); +// DMA Channel 5 +extern void DMACH5AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +extern void DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +extern void DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +extern void DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +extern void DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +extern void StartDMACH5(void); +// DMA Channel 6 +extern void DMACH6AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +extern void DMACH6BurstConfig(Uint16 bsize,Uint16 srcbstep, int16 desbstep); +extern void DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +extern void DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +extern void DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +extern void StartDMACH6(void); + +extern void InitPeripherals(void); +#if DSP28_ECANA +extern void InitECan(void); +extern void InitECana(void); +extern void InitECanGpio(void); +extern void InitECanaGpio(void); +#endif // endif DSP28_ECANA +#if DSP28_ECANB +extern void InitECanb(void); +extern void InitECanbGpio(void); +#endif // endif DSP28_ECANB +extern void InitECap(void); +extern void InitECapGpio(void); +extern void InitECap1Gpio(void); +extern void InitECap2Gpio(void); +#if DSP28_ECAP3 +extern void InitECap3Gpio(void); +#endif // endif DSP28_ECAP3 +#if DSP28_ECAP4 +extern void InitECap4Gpio(void); +#endif // endif DSP28_ECAP4 +#if DSP28_ECAP5 +extern void InitECap5Gpio(void); +#endif // endif DSP28_ECAP5 +#if DSP28_ECAP6 +extern void InitECap6Gpio(void); +#endif // endif DSP28_ECAP6 +extern void InitEPwm(void); +extern void InitEPwmGpio(void); +extern void InitEPwm1Gpio(void); +extern void InitEPwm2Gpio(void); +extern void InitEPwm3Gpio(void); +#if DSP28_EPWM4 +extern void InitEPwm4Gpio(void); +#endif // endif DSP28_EPWM4 +#if DSP28_EPWM5 +extern void InitEPwm5Gpio(void); +#endif // endif DSP28_EPWM5 +#if DSP28_EPWM6 +extern void InitEPwm6Gpio(void); +#endif // endif DSP28_EPWM6 +#if DSP28_EQEP1 +extern void InitEQep(void); +extern void InitEQepGpio(void); +extern void InitEQep1Gpio(void); +#endif // if DSP28_EQEP1 +#if DSP28_EQEP2 +extern void InitEQep2Gpio(void); +#endif // endif DSP28_EQEP2 +extern void InitGpio(void); +extern void InitI2CGpio(void); + +extern void InitMcbsp(void); +extern void InitMcbspa(void); +extern void delay_loop(void); +extern void InitMcbspaGpio(void); +extern void InitMcbspa8bit(void); +extern void InitMcbspa12bit(void); +extern void InitMcbspa16bit(void); +extern void InitMcbspa20bit(void); +extern void InitMcbspa24bit(void); +extern void InitMcbspa32bit(void); +#if DSP28_MCBSPB +extern void InitMcbspb(void); +extern void InitMcbspbGpio(void); +extern void InitMcbspb8bit(void); +extern void InitMcbspb12bit(void); +extern void InitMcbspb16bit(void); +extern void InitMcbspb20bit(void); +extern void InitMcbspb24bit(void); +extern void InitMcbspb32bit(void); +#endif // endif DSP28_MCBSPB + +extern void InitPieCtrl(void); +extern void InitPieVectTable(void); + +extern void InitSci(void); +extern void InitSciGpio(void); +extern void InitSciaGpio(void); +#if DSP28_SCIB +extern void InitScibGpio(void); +#endif // endif DSP28_SCIB +#if DSP28_SCIC +extern void InitScicGpio(void); +#endif +extern void InitSpi(void); +extern void InitSpiGpio(void); +extern void InitSpiaGpio(void); +extern void InitSysCtrl(void); +extern void InitTzGpio(void); +extern void InitXIntrupt(void); +extern void XintfInit(void); +extern void InitXintf16Gpio(); +extern void InitXintf32Gpio(); +extern void InitPll(Uint16 pllcr, Uint16 clkindiv); +extern void InitPeripheralClocks(void); +extern void EnableInterrupts(void); +extern void DSP28x_usDelay(Uint32 Count); +extern void ADC_cal (void); +#define KickDog ServiceDog // For compatiblity with previous versions +extern void ServiceDog(void); +extern void DisableDog(void); +extern Uint16 CsmUnlock(void); + +// DSP28_DBGIER.asm +extern void SetDBGIER(Uint16 dbgier); + +// CAUTION +// This function MUST be executed out of RAM. Executing it +// out of OTP/Flash will yield unpredictable results +extern void InitFlash(void); + + +void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr); + + +//--------------------------------------------------------------------------- +// External symbols created by the linker cmd file +// DSP28 examples will use these to relocate code from one LOAD location +// in either Flash or XINTF to a different RUN location in internal +// RAM +extern Uint16 RamfuncsLoadStart; +extern Uint16 RamfuncsLoadEnd; +extern Uint16 RamfuncsRunStart; + +extern Uint16 XintffuncsLoadStart; +extern Uint16 XintffuncsLoadEnd; +extern Uint16 XintffuncsRunStart; + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // - end of DSP2833x_GLOBALPROTOTYPES_H + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h b/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h new file mode 100644 index 0000000..ce3f1f7 --- /dev/null +++ b/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h @@ -0,0 +1,117 @@ +// TI File $Revision: /main/2 $ +// Checkin $Date: April 16, 2008 17:16:47 $ +//########################################################################### +// +// FILE: DSP2833x_I2cExample.h +// +// TITLE: 2833x I2C Example Code Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_I2C_DEFINES_H +#define DSP2833x_I2C_DEFINES_H + +//-------------------------------------------- +// Defines +//-------------------------------------------- + +// Error Messages +#define I2C_ERROR 0xFFFF +#define I2C_ARB_LOST_ERROR 0x0001 +#define I2C_NACK_ERROR 0x0002 +#define I2C_BUS_BUSY_ERROR 0x1000 +#define I2C_STP_NOT_READY_ERROR 0x5555 +#define I2C_NO_FLAGS 0xAAAA +#define I2C_SUCCESS 0x0000 + +// Clear Status Flags +#define I2C_CLR_AL_BIT 0x0001 +#define I2C_CLR_NACK_BIT 0x0002 +#define I2C_CLR_ARDY_BIT 0x0004 +#define I2C_CLR_RRDY_BIT 0x0008 +#define I2C_CLR_SCD_BIT 0x0020 + +// Interrupt Source Messages +#define I2C_NO_ISRC 0x0000 +#define I2C_ARB_ISRC 0x0001 +#define I2C_NACK_ISRC 0x0002 +#define I2C_ARDY_ISRC 0x0003 +#define I2C_RX_ISRC 0x0004 +#define I2C_TX_ISRC 0x0005 +#define I2C_SCD_ISRC 0x0006 +#define I2C_AAS_ISRC 0x0007 + +// I2CMSG structure defines +#define I2C_NO_STOP 0 +#define I2C_YES_STOP 1 +#define I2C_RECEIVE 0 +#define I2C_TRANSMIT 1 +#define I2C_MAX_BUFFER_SIZE 16 + +// I2C Slave State defines +#define I2C_NOTSLAVE 0 +#define I2C_ADDR_AS_SLAVE 1 +#define I2C_ST_MSG_READY 2 + +// I2C Slave Receiver messages defines +#define I2C_SND_MSG1 1 +#define I2C_SND_MSG2 2 + +// I2C State defines +#define I2C_IDLE 0 +#define I2C_SLAVE_RECEIVER 1 +#define I2C_SLAVE_TRANSMITTER 2 +#define I2C_MASTER_RECEIVER 3 +#define I2C_MASTER_TRANSMITTER 4 + +// I2C Message Commands for I2CMSG struct +#define I2C_MSGSTAT_INACTIVE 0x0000 +#define I2C_MSGSTAT_SEND_WITHSTOP 0x0010 +#define I2C_MSGSTAT_WRITE_BUSY 0x0011 +#define I2C_MSGSTAT_SEND_NOSTOP 0x0020 +#define I2C_MSGSTAT_SEND_NOSTOP_BUSY 0x0021 +#define I2C_MSGSTAT_RESTART 0x0022 +#define I2C_MSGSTAT_READ_BUSY 0x0023 + +// Generic defines +#define I2C_TRUE 1 +#define I2C_FALSE 0 +#define I2C_YES 1 +#define I2C_NO 0 +#define I2C_DUMMY_BYTE 0 + + +//-------------------------------------------- +// Structures +//-------------------------------------------- + +// I2C Message Structure +struct I2CMSG { + Uint16 MsgStatus; // Word stating what state msg is in: + // I2C_MSGCMD_INACTIVE = do not send msg + // I2C_MSGCMD_BUSY = msg start has been sent, + // awaiting stop + // I2C_MSGCMD_SEND_WITHSTOP = command to send + // master trans msg complete with a stop bit + // I2C_MSGCMD_SEND_NOSTOP = command to send + // master trans msg without the stop bit + // I2C_MSGCMD_RESTART = command to send a restart + // as a master receiver with a stop bit + Uint16 SlaveAddress; // I2C address of slave msg is intended for + Uint16 NumOfBytes; // Num of valid bytes in (or to be put in MsgBuffer) + Uint16 MemoryHighAddr; // EEPROM address of data associated with msg (high byte) + Uint16 MemoryLowAddr; // EEPROM address of data associated with msg (low byte) + Uint16 MsgBuffer[I2C_MAX_BUFFER_SIZE]; // Array holding msg data - max that + // MAX_BUFFER_SIZE can be is 16 due to + // the FIFO's +}; + + +#endif // end of DSP2833x_I2C_DEFINES_H definition + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h b/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h new file mode 100644 index 0000000..c3f3ea1 --- /dev/null +++ b/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h @@ -0,0 +1,5850 @@ +// TI File $Revision: /main/2 $ +// Checkin $Date: April 4, 2007 14:25:21 $ +//########################################################################### +// +// FILE: DSP2833x_SWPrioritizedIsrLevels.h +// +// TITLE: DSP28 Devices Software Prioritized Interrupt Service Routine +// Level definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_SW_PRIORITZIED_ISR_H +#define DSP2833x_SW_PRIORITZIED_ISR_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +//------------------------------------------------------------------------------- +// Interrupt Enable Register Allocation For 2833x Devices: +//------------------------------------------------------------------------------- +// Interrupts can be enabled/disabled using the CPU interrupt enable register +// (IER) and the PIE interrupt enable registers (PIEIER1 to PIEIER12). +//------------------------------------------------------------------------------- +//------------------------------------------------------------------------------- +// Set "Global" Interrupt Priority Level (IER register): +//------------------------------------------------------------------------------- +// The user must set the appropriate priority level for each of the CPU +// interrupts. This is termed as the "global" priority. The priority level +// must be a number between 1 (highest) to 16 (lowest). A value of 0 must +// be entered for reserved interrupts or interrupts that are not used. This +// will also reduce code size by not including ISR's that are not used. +// +// Note: The priority levels below are used to calculate the IER register +// interrupt masks MINT1 to MINT16. +// +// +// Note: The priority levels shown here may not make sense in a +// real application. This is for demonstration purposes only!!! +// +// The user should change these to values that make sense for +// their application. +// +// 0 = not used +// 1 = highest priority +// ... +// 16 = lowest priority +#define INT1PL 2 // Group1 Interrupts (PIEIER1) +#define INT2PL 0 // Group2 Interrupts (PIEIER2) +#define INT3PL 4 // Group3 Interrupts (PIEIER3) +#define INT4PL 2 // Group4 Interrupts (PIEIER4) +#define INT5PL 2 // Group5 Interrupts (PIEIER5) +#define INT6PL 3 // Group6 Interrupts (PIEIER6) +#define INT7PL 0 // reserved +#define INT8PL 0 // reserved +#define INT9PL 1 // Group9 Interrupts (PIEIER9) +#define INT10PL 0 // reserved +#define INT11PL 0 // reserved +#define INT12PL 0 // reserved +#define INT13PL 4 // XINT13 +#define INT14PL 4 // INT14 (TINT2) +#define INT15PL 4 // DATALOG +#define INT16PL 4 // RTOSINT + +//------------------------------------------------------------------------------- +// Set "Group" Interrupt Priority Level (PIEIER1 to PIEIER12 registers): +//------------------------------------------------------------------------------- +// The user must set the appropriate priority level for each of the PIE +// interrupts. This is termed as the "group" priority. The priority level +// must be a number between 1 (highest) to 8 (lowest). A value of 0 must +// be entered for reserved interrupts or interrupts that are not used. This +// will also reduce code size by not including ISR's that are not used: +// +// Note: The priority levels below are used to calculate the following +// PIEIER register interrupt masks: +// MG11 to MG18 +// MG21 to MG28 +// MG31 to MG38 +// MG41 to MG48 +// MG51 to MG58 +// MG61 to MG68 +// MG71 to MG78 +// MG81 to MG88 +// MG91 to MG98 +// MG101 to MG108 +// MG111 to MG118 +// MG121 to MG128 +// +// Note: The priority levels shown here may not make sense in a +// real application. This is for demonstration purposes only!!! +// +// The user should change these to values that make sense for +// their application. +// +// 0 = not used +// 1 = highest priority +// ... +// 8 = lowest priority +// +#define G11PL 7 // SEQ1INT (ADC) +#define G12PL 6 // SEQ2INT (ADC) +#define G13PL 0 // reserved +#define G14PL 1 // XINT1 (External) +#define G15PL 3 // XINT2 (External) +#define G16PL 2 // ADCINT (ADC) +#define G17PL 1 // TINT0 (CPU Timer 0) +#define G18PL 5 // WAKEINT (WD/LPM) + +#define G21PL 4 // EPWM1_TZINT (ePWM1 Trip) +#define G22PL 3 // EPWM2_TZINT (ePWM2 Trip) +#define G23PL 2 // EPWM3_TZINT (ePWM3 Trip) +#define G24PL 1 // EPWM4_TZINT (ePWM4 Trip) +#define G25PL 5 // EPWM5_TZINT (ePWM5 Trip) +#define G26PL 6 // EPWM6_TZINT (ePWM6 Trip) +#define G27PL 0 // reserved +#define G28PL 0 // reserved + +#define G31PL 4 // EPWM1_INT (ePWM1 Int) +#define G32PL 1 // EPWM2_INT (ePWM2 Int) +#define G33PL 1 // EPWM3_INT (ePWM3 Int) +#define G34PL 2 // EPWM4_INT (ePWM4 Int) +#define G35PL 2 // EPWM5_INT (ePWM5 Int) +#define G36PL 1 // EPWM6_INT (ePWM6 Int) +#define G37PL 0 // reserved +#define G38PL 0 // reserved + +#define G41PL 2 // ECAP1_INT (eCAP1 Int) +#define G42PL 1 // ECAP2_INT (eCAP2 Int) +#define G43PL 3 // ECAP3_INT (eCAP3 Int) +#define G44PL 3 // ECAP4_INT (eCAP4 Int) +#define G45PL 5 // ECAP5_INT (eCAP5 Int) +#define G46PL 5 // ECAP6_INT (eCAP6 Int) +#define G47PL 0 // reserved +#define G48PL 0 // reserved + +#define G51PL 2 // EQEP1_INT (eQEP1 Int) +#define G52PL 1 // EQEP2_INT (eQEP2 Int) +#define G53PL 0 // reserved +#define G54PL 0 // reserved +#define G55PL 0 // reserved +#define G56PL 0 // reserved +#define G57PL 0 // reserved +#define G58PL 0 // reserved + +#define G61PL 3 // SPIRXINTA (SPI-A) +#define G62PL 1 // SPITXINTA (SPI-A) +#define G63PL 4 // MRINTB (McBSP-B) +#define G64PL 6 // MXINTB (McBSP-B) +#define G65PL 2 // MRINTA (McBSP-A) +#define G66PL 1 // MXINTA (McBSP-A) +#define G67PL 0 // reserved +#define G68PL 0 // reserved + +#define G71PL 5 // DINTCH1 (DMA) +#define G72PL 4 // DINTCH2 (DMA) +#define G73PL 4 // DINTCH3 (DMA) +#define G74PL 2 // DINTCH4 (DMA) +#define G75PL 3 // DINTCH5 (DMA) +#define G76PL 1 // DINTCH6 (DMA) +#define G77PL 0 // reserved +#define G78PL 0 // reserved + +#define G81PL 1 // I2CINT1A (I2C-A) +#define G82PL 2 // I2CINT2A (I2C-A) +#define G83PL 0 // reserved +#define G84PL 0 // reserved +#define G85PL 4 // SCIRXINTC (SCI-C) +#define G86PL 3 // SCITXINTC (SCI-C) +#define G87PL 0 // reserved +#define G88PL 0 // reserved + +#define G91PL 1 // SCIRXINTA (SCI-A) +#define G92PL 5 // SCITXINTA (SCI-A) +#define G93PL 3 // SCIRXINTB (SCI-B) +#define G94PL 4 // SCITXINTB (SCI-B) +#define G95PL 1 // ECAN0INTA (ECAN-A) +#define G96PL 1 // ECAN1INTA (ECAN-A) +#define G97PL 2 // ECAN0INTB (ECAN-B) +#define G98PL 4 // ECAN1INTB (ECAN-B) + +#define G101PL 0 // reserved +#define G102PL 0 // reserved +#define G103PL 0 // reserved +#define G104PL 0 // reserved +#define G105PL 0 // reserved +#define G106PL 0 // reserved +#define G107PL 0 // reserved +#define G108PL 0 // reserved + +#define G111PL 0 // reserved +#define G112PL 0 // reserved +#define G113PL 0 // reserved +#define G114PL 0 // reserved +#define G115PL 0 // reserved +#define G116PL 0 // reserved +#define G117PL 0 // reserved +#define G118PL 0 // reserved + +#define G121PL 5 // XINT3 (External) +#define G122PL 3 // XINT4 (External) +#define G123PL 2 // XINT5 (External) +#define G124PL 2 // XINT6 (External) +#define G125PL 1 // XINT7 (External) +#define G126PL 0 // reserved +#define G127PL 6 // LVF (FPA32) +#define G128PL 1 // LUF (FPA32) + + +// There should be no need to modify code below this line +//------------------------------------------------------------------------------- +// Automatically generate IER interrupt masks MINT1 to MINT16: +// + +// Beginning of MINT1: +#if (INT1PL == 0) +#define MINT1_1PL ~(1 << 0) +#else +#define MINT1_1PL 0xFFFF +#endif + +#if (INT2PL >= INT1PL) || (INT2PL == 0) +#define MINT1_2PL ~(1 << 1) +#else +#define MINT1_2PL 0xFFFF +#endif + +#if (INT3PL >= INT1PL) || (INT3PL == 0) +#define MINT1_3PL ~(1 << 2) +#else +#define MINT1_3PL 0xFFFF +#endif + +#if (INT4PL >= INT1PL) || (INT4PL == 0) +#define MINT1_4PL ~(1 << 3) +#else +#define MINT1_4PL 0xFFFF +#endif + +#if (INT5PL >= INT1PL) || (INT5PL == 0) +#define MINT1_5PL ~(1 << 4) +#else +#define MINT1_5PL 0xFFFF +#endif + +#if (INT6PL >= INT1PL) || (INT6PL == 0) +#define MINT1_6PL ~(1 << 5) +#else +#define MINT1_6PL 0xFFFF +#endif + +#if (INT7PL >= INT1PL) || (INT7PL == 0) +#define MINT1_7PL ~(1 << 6) +#else +#define MINT1_7PL 0xFFFF +#endif + +#if (INT8PL >= INT1PL) || (INT8PL == 0) +#define MINT1_8PL ~(1 << 7) +#else +#define MINT1_8PL 0xFFFF +#endif + +#if (INT9PL >= INT1PL) || (INT9PL == 0) +#define MINT1_9PL ~(1 << 8) +#else +#define MINT1_9PL 0xFFFF +#endif + +#if (INT10PL >= INT1PL) || (INT10PL == 0) +#define MINT1_10PL ~(1 << 9) +#else +#define MINT1_10PL 0xFFFF +#endif + +#if (INT11PL >= INT1PL) || (INT11PL == 0) +#define MINT1_11PL ~(1 << 10) +#else +#define MINT1_11PL 0xFFFF +#endif + +#if (INT12PL >= INT1PL) || (INT12PL == 0) +#define MINT1_12PL ~(1 << 11) +#else +#define MINT1_12PL 0xFFFF +#endif + +#if (INT13PL >= INT1PL) || (INT13PL == 0) +#define MINT1_13PL ~(1 << 12) +#else +#define MINT1_13PL 0xFFFF +#endif + +#if (INT14PL >= INT1PL) || (INT14PL == 0) +#define MINT1_14PL ~(1 << 13) +#else +#define MINT1_14PL 0xFFFF +#endif + +#if (INT15PL >= INT1PL) || (INT15PL == 0) +#define MINT1_15PL ~(1 << 14) +#else +#define MINT1_15PL 0xFFFF +#endif + +#if (INT16PL >= INT1PL) || (INT16PL == 0) +#define MINT1_16PL ~(1 << 15) +#else +#define MINT1_16PL 0xFFFF +#endif + +#define MINT1 (MINT1_1PL & MINT1_2PL & MINT1_3PL & MINT1_4PL & \ + MINT1_5PL & MINT1_6PL & MINT1_7PL & MINT1_8PL & \ + MINT1_9PL & MINT1_10PL & MINT1_11PL & MINT1_12PL & \ + MINT1_13PL & MINT1_14PL & MINT1_15PL & MINT1_16PL) +// End Of MINT1. + +// Beginning of MINT2: +#if (INT1PL >= INT2PL) || (INT1PL == 0) +#define MINT2_1PL ~(1 << 0) +#else +#define MINT2_1PL 0xFFFF +#endif + +#if (INT2PL == 0) +#define MINT2_2PL ~(1 << 1) +#else +#define MINT2_2PL 0xFFFF +#endif + +#if (INT3PL >= INT2PL) || (INT3PL == 0) +#define MINT2_3PL ~(1 << 2) +#else +#define MINT2_3PL 0xFFFF +#endif + +#if (INT4PL >= INT2PL) || (INT4PL == 0) +#define MINT2_4PL ~(1 << 3) +#else +#define MINT2_4PL 0xFFFF +#endif + +#if (INT5PL >= INT2PL) || (INT5PL == 0) +#define MINT2_5PL ~(1 << 4) +#else +#define MINT2_5PL 0xFFFF +#endif + +#if (INT6PL >= INT2PL) || (INT6PL == 0) +#define MINT2_6PL ~(1 << 5) +#else +#define MINT2_6PL 0xFFFF +#endif + +#if (INT7PL >= INT2PL) || (INT7PL == 0) +#define MINT2_7PL ~(1 << 6) +#else +#define MINT2_7PL 0xFFFF +#endif + +#if (INT8PL >= INT2PL) || (INT8PL == 0) +#define MINT2_8PL ~(1 << 7) +#else +#define MINT2_8PL 0xFFFF +#endif + +#if (INT9PL >= INT2PL) || (INT9PL == 0) +#define MINT2_9PL ~(1 << 8) +#else +#define MINT2_9PL 0xFFFF +#endif + +#if (INT10PL >= INT2PL) || (INT10PL == 0) +#define MINT2_10PL ~(1 << 9) +#else +#define MINT2_10PL 0xFFFF +#endif + +#if (INT11PL >= INT2PL) || (INT11PL == 0) +#define MINT2_11PL ~(1 << 10) +#else +#define MINT2_11PL 0xFFFF +#endif + +#if (INT12PL >= INT2PL) || (INT12PL == 0) +#define MINT2_12PL ~(1 << 11) +#else +#define MINT2_12PL 0xFFFF +#endif + +#if (INT13PL >= INT2PL) || (INT13PL == 0) +#define MINT2_13PL ~(1 << 12) +#else +#define MINT2_13PL 0xFFFF +#endif + +#if (INT14PL >= INT2PL) || (INT14PL == 0) +#define MINT2_14PL ~(1 << 13) +#else +#define MINT2_14PL 0xFFFF +#endif + +#if (INT15PL >= INT2PL) || (INT15PL == 0) +#define MINT2_15PL ~(1 << 14) +#else +#define MINT2_15PL 0xFFFF +#endif + +#if (INT16PL >= INT2PL) || (INT16PL == 0) +#define MINT2_16PL ~(1 << 15) +#else +#define MINT2_16PL 0xFFFF +#endif + +#define MINT2 (MINT2_1PL & MINT2_2PL & MINT2_3PL & MINT2_4PL & \ + MINT2_5PL & MINT2_6PL & MINT2_7PL & MINT2_8PL & \ + MINT2_9PL & MINT2_10PL & MINT2_11PL & MINT2_12PL & \ + MINT2_13PL & MINT2_14PL & MINT2_15PL & MINT2_16PL) +// End Of MINT2. + +// Beginning of MINT3: +#if (INT1PL >= INT3PL) || (INT1PL == 0) +#define MINT3_1PL ~(1 << 0) +#else +#define MINT3_1PL 0xFFFF +#endif + +#if (INT2PL >= INT3PL) || (INT2PL == 0) +#define MINT3_2PL ~(1 << 1) +#else +#define MINT3_2PL 0xFFFF +#endif + +#if (INT3PL == 0) +#define MINT3_3PL ~(1 << 2) +#else +#define MINT3_3PL 0xFFFF +#endif + +#if (INT4PL >= INT3PL) || (INT4PL == 0) +#define MINT3_4PL ~(1 << 3) +#else +#define MINT3_4PL 0xFFFF +#endif + +#if (INT5PL >= INT3PL) || (INT5PL == 0) +#define MINT3_5PL ~(1 << 4) +#else +#define MINT3_5PL 0xFFFF +#endif + +#if (INT6PL >= INT3PL) || (INT6PL == 0) +#define MINT3_6PL ~(1 << 5) +#else +#define MINT3_6PL 0xFFFF +#endif + +#if (INT7PL >= INT3PL) || (INT7PL == 0) +#define MINT3_7PL ~(1 << 6) +#else +#define MINT3_7PL 0xFFFF +#endif + +#if (INT8PL >= INT3PL) || (INT8PL == 0) +#define MINT3_8PL ~(1 << 7) +#else +#define MINT3_8PL 0xFFFF +#endif + +#if (INT9PL >= INT3PL) || (INT9PL == 0) +#define MINT3_9PL ~(1 << 8) +#else +#define MINT3_9PL 0xFFFF +#endif + +#if (INT10PL >= INT3PL) || (INT10PL == 0) +#define MINT3_10PL ~(1 << 9) +#else +#define MINT3_10PL 0xFFFF +#endif + +#if (INT11PL >= INT3PL) || (INT11PL == 0) +#define MINT3_11PL ~(1 << 10) +#else +#define MINT3_11PL 0xFFFF +#endif + +#if (INT12PL >= INT3PL) || (INT12PL == 0) +#define MINT3_12PL ~(1 << 11) +#else +#define MINT3_12PL 0xFFFF +#endif + +#if (INT13PL >= INT3PL) || (INT13PL == 0) +#define MINT3_13PL ~(1 << 12) +#else +#define MINT3_13PL 0xFFFF +#endif + +#if (INT14PL >= INT3PL) || (INT14PL == 0) +#define MINT3_14PL ~(1 << 13) +#else +#define MINT3_14PL 0xFFFF +#endif + +#if (INT15PL >= INT3PL) || (INT15PL == 0) +#define MINT3_15PL ~(1 << 14) +#else +#define MINT3_15PL 0xFFFF +#endif + +#if (INT16PL >= INT3PL) || (INT16PL == 0) +#define MINT3_16PL ~(1 << 15) +#else +#define MINT3_16PL 0xFFFF +#endif + +#define MINT3 (MINT3_1PL & MINT3_2PL & MINT3_3PL & MINT3_4PL & \ + MINT3_5PL & MINT3_6PL & MINT3_7PL & MINT3_8PL & \ + MINT3_9PL & MINT3_10PL & MINT3_11PL & MINT3_12PL & \ + MINT3_13PL & MINT3_14PL & MINT3_15PL & MINT3_16PL) +// End Of MINT3. + +// Beginning of MINT4: +#if (INT1PL >= INT4PL) || (INT1PL == 0) +#define MINT4_1PL ~(1 << 0) +#else +#define MINT4_1PL 0xFFFF +#endif + +#if (INT2PL >= INT4PL) || (INT2PL == 0) +#define MINT4_2PL ~(1 << 1) +#else +#define MINT4_2PL 0xFFFF +#endif + +#if (INT3PL >= INT4PL) || (INT3PL == 0) +#define MINT4_3PL ~(1 << 2) +#else +#define MINT4_3PL 0xFFFF +#endif + +#if (INT4PL == 0) +#define MINT4_4PL ~(1 << 3) +#else +#define MINT4_4PL 0xFFFF +#endif + +#if (INT5PL >= INT4PL) || (INT5PL == 0) +#define MINT4_5PL ~(1 << 4) +#else +#define MINT4_5PL 0xFFFF +#endif + +#if (INT6PL >= INT4PL) || (INT6PL == 0) +#define MINT4_6PL ~(1 << 5) +#else +#define MINT4_6PL 0xFFFF +#endif + +#if (INT7PL >= INT4PL) || (INT7PL == 0) +#define MINT4_7PL ~(1 << 6) +#else +#define MINT4_7PL 0xFFFF +#endif + +#if (INT8PL >= INT4PL) || (INT8PL == 0) +#define MINT4_8PL ~(1 << 7) +#else +#define MINT4_8PL 0xFFFF +#endif + +#if (INT9PL >= INT4PL) || (INT9PL == 0) +#define MINT4_9PL ~(1 << 8) +#else +#define MINT4_9PL 0xFFFF +#endif + +#if (INT10PL >= INT4PL) || (INT10PL == 0) +#define MINT4_10PL ~(1 << 9) +#else +#define MINT4_10PL 0xFFFF +#endif + +#if (INT11PL >= INT4PL) || (INT11PL == 0) +#define MINT4_11PL ~(1 << 10) +#else +#define MINT4_11PL 0xFFFF +#endif + +#if (INT12PL >= INT4PL) || (INT12PL == 0) +#define MINT4_12PL ~(1 << 11) +#else +#define MINT4_12PL 0xFFFF +#endif + +#if (INT13PL >= INT4PL) || (INT13PL == 0) +#define MINT4_13PL ~(1 << 12) +#else +#define MINT4_13PL 0xFFFF +#endif + +#if (INT14PL >= INT4PL) || (INT14PL == 0) +#define MINT4_14PL ~(1 << 13) +#else +#define MINT4_14PL 0xFFFF +#endif + +#if (INT15PL >= INT4PL) || (INT15PL == 0) +#define MINT4_15PL ~(1 << 14) +#else +#define MINT4_15PL 0xFFFF +#endif + +#if (INT16PL >= INT4PL) || (INT16PL == 0) +#define MINT4_16PL ~(1 << 15) +#else +#define MINT4_16PL 0xFFFF +#endif + +#define MINT4 (MINT4_1PL & MINT4_2PL & MINT4_3PL & MINT4_4PL & \ + MINT4_5PL & MINT4_6PL & MINT4_7PL & MINT4_8PL & \ + MINT4_9PL & MINT4_10PL & MINT4_11PL & MINT4_12PL & \ + MINT4_13PL & MINT4_14PL & MINT4_15PL & MINT4_16PL) +// End Of MINT4. + +// Beginning of MINT5: +#if (INT1PL >= INT5PL) || (INT1PL == 0) +#define MINT5_1PL ~(1 << 0) +#else +#define MINT5_1PL 0xFFFF +#endif + +#if (INT2PL >= INT5PL) || (INT2PL == 0) +#define MINT5_2PL ~(1 << 1) +#else +#define MINT5_2PL 0xFFFF +#endif + +#if (INT3PL >= INT5PL) || (INT3PL == 0) +#define MINT5_3PL ~(1 << 2) +#else +#define MINT5_3PL 0xFFFF +#endif + +#if (INT4PL >= INT5PL) || (INT4PL == 0) +#define MINT5_4PL ~(1 << 3) +#else +#define MINT5_4PL 0xFFFF +#endif + +#if (INT5PL == 0) +#define MINT5_5PL ~(1 << 4) +#else +#define MINT5_5PL 0xFFFF +#endif + +#if (INT6PL >= INT5PL) || (INT6PL == 0) +#define MINT5_6PL ~(1 << 5) +#else +#define MINT5_6PL 0xFFFF +#endif + +#if (INT7PL >= INT5PL) || (INT7PL == 0) +#define MINT5_7PL ~(1 << 6) +#else +#define MINT5_7PL 0xFFFF +#endif + +#if (INT8PL >= INT5PL) || (INT8PL == 0) +#define MINT5_8PL ~(1 << 7) +#else +#define MINT5_8PL 0xFFFF +#endif + +#if (INT9PL >= INT5PL) || (INT9PL == 0) +#define MINT5_9PL ~(1 << 8) +#else +#define MINT5_9PL 0xFFFF +#endif + +#if (INT10PL >= INT5PL) || (INT10PL == 0) +#define MINT5_10PL ~(1 << 9) +#else +#define MINT5_10PL 0xFFFF +#endif + +#if (INT11PL >= INT5PL) || (INT11PL == 0) +#define MINT5_11PL ~(1 << 10) +#else +#define MINT5_11PL 0xFFFF +#endif + +#if (INT12PL >= INT5PL) || (INT12PL == 0) +#define MINT5_12PL ~(1 << 11) +#else +#define MINT5_12PL 0xFFFF +#endif + +#if (INT13PL >= INT5PL) || (INT13PL == 0) +#define MINT5_13PL ~(1 << 12) +#else +#define MINT5_13PL 0xFFFF +#endif + +#if (INT14PL >= INT5PL) || (INT14PL == 0) +#define MINT5_14PL ~(1 << 13) +#else +#define MINT5_14PL 0xFFFF +#endif + +#if (INT15PL >= INT5PL) || (INT15PL == 0) +#define MINT5_15PL ~(1 << 14) +#else +#define MINT5_15PL 0xFFFF +#endif + +#if (INT16PL >= INT5PL) || (INT16PL == 0) +#define MINT5_16PL ~(1 << 15) +#else +#define MINT5_16PL 0xFFFF +#endif + +#define MINT5 (MINT5_1PL & MINT5_2PL & MINT5_3PL & MINT5_4PL & \ + MINT5_5PL & MINT5_6PL & MINT5_7PL & MINT5_8PL & \ + MINT5_9PL & MINT5_10PL & MINT5_11PL & MINT5_12PL & \ + MINT5_13PL & MINT5_14PL & MINT5_15PL & MINT5_16PL) +// End Of MINT5. + +// Beginning of MINT6: +#if (INT1PL >= INT6PL) || (INT1PL == 0) +#define MINT6_1PL ~(1 << 0) +#else +#define MINT6_1PL 0xFFFF +#endif + +#if (INT2PL >= INT6PL) || (INT2PL == 0) +#define MINT6_2PL ~(1 << 1) +#else +#define MINT6_2PL 0xFFFF +#endif + +#if (INT3PL >= INT6PL) || (INT3PL == 0) +#define MINT6_3PL ~(1 << 2) +#else +#define MINT6_3PL 0xFFFF +#endif + +#if (INT4PL >= INT6PL) || (INT4PL == 0) +#define MINT6_4PL ~(1 << 3) +#else +#define MINT6_4PL 0xFFFF +#endif + +#if (INT5PL >= INT6PL) || (INT5PL == 0) +#define MINT6_5PL ~(1 << 4) +#else +#define MINT6_5PL 0xFFFF +#endif + +#if (INT6PL == 0) +#define MINT6_6PL ~(1 << 5) +#else +#define MINT6_6PL 0xFFFF +#endif + +#if (INT7PL >= INT6PL) || (INT7PL == 0) +#define MINT6_7PL ~(1 << 6) +#else +#define MINT6_7PL 0xFFFF +#endif + +#if (INT8PL >= INT6PL) || (INT8PL == 0) +#define MINT6_8PL ~(1 << 7) +#else +#define MINT6_8PL 0xFFFF +#endif + +#if (INT9PL >= INT6PL) || (INT9PL == 0) +#define MINT6_9PL ~(1 << 8) +#else +#define MINT6_9PL 0xFFFF +#endif + +#if (INT10PL >= INT6PL) || (INT10PL == 0) +#define MINT6_10PL ~(1 << 9) +#else +#define MINT6_10PL 0xFFFF +#endif + +#if (INT11PL >= INT6PL) || (INT11PL == 0) +#define MINT6_11PL ~(1 << 10) +#else +#define MINT6_11PL 0xFFFF +#endif + +#if (INT12PL >= INT6PL) || (INT12PL == 0) +#define MINT6_12PL ~(1 << 11) +#else +#define MINT6_12PL 0xFFFF +#endif + +#if (INT13PL >= INT6PL) || (INT13PL == 0) +#define MINT6_13PL ~(1 << 12) +#else +#define MINT6_13PL 0xFFFF +#endif + +#if (INT14PL >= INT6PL) || (INT14PL == 0) +#define MINT6_14PL ~(1 << 13) +#else +#define MINT6_14PL 0xFFFF +#endif + +#if (INT15PL >= INT6PL) || (INT15PL == 0) +#define MINT6_15PL ~(1 << 14) +#else +#define MINT6_15PL 0xFFFF +#endif + +#if (INT16PL >= INT6PL) || (INT16PL == 0) +#define MINT6_16PL ~(1 << 15) +#else +#define MINT6_16PL 0xFFFF +#endif + +#define MINT6 (MINT6_1PL & MINT6_2PL & MINT6_3PL & MINT6_4PL & \ + MINT6_5PL & MINT6_6PL & MINT6_7PL & MINT6_8PL & \ + MINT6_9PL & MINT6_10PL & MINT6_11PL & MINT6_12PL & \ + MINT6_13PL & MINT6_14PL & MINT6_15PL & MINT6_16PL) +// End Of MINT6. + +// Beginning of MINT7: +#if (INT1PL >= INT7PL) || (INT1PL == 0) +#define MINT7_1PL ~(1 << 0) +#else +#define MINT7_1PL 0xFFFF +#endif + +#if (INT2PL >= INT7PL) || (INT2PL == 0) +#define MINT7_2PL ~(1 << 1) +#else +#define MINT7_2PL 0xFFFF +#endif + +#if (INT3PL >= INT7PL) || (INT3PL == 0) +#define MINT7_3PL ~(1 << 2) +#else +#define MINT7_3PL 0xFFFF +#endif + +#if (INT4PL >= INT7PL) || (INT4PL == 0) +#define MINT7_4PL ~(1 << 3) +#else +#define MINT7_4PL 0xFFFF +#endif + +#if (INT5PL >= INT7PL) || (INT5PL == 0) +#define MINT7_5PL ~(1 << 4) +#else +#define MINT7_5PL 0xFFFF +#endif + +#if (INT6PL >= INT7PL) || (INT6PL == 0) +#define MINT7_6PL ~(1 << 5) +#else +#define MINT7_6PL 0xFFFF +#endif + +#if (INT7PL == 0) +#define MINT7_7PL ~(1 << 6) +#else +#define MINT7_7PL 0xFFFF +#endif + +#if (INT8PL >= INT7PL) || (INT8PL == 0) +#define MINT7_8PL ~(1 << 7) +#else +#define MINT7_8PL 0xFFFF +#endif + +#if (INT9PL >= INT7PL) || (INT9PL == 0) +#define MINT7_9PL ~(1 << 8) +#else +#define MINT7_9PL 0xFFFF +#endif + +#if (INT10PL >= INT7PL) || (INT10PL == 0) +#define MINT7_10PL ~(1 << 9) +#else +#define MINT7_10PL 0xFFFF +#endif + +#if (INT11PL >= INT7PL) || (INT11PL == 0) +#define MINT7_11PL ~(1 << 10) +#else +#define MINT7_11PL 0xFFFF +#endif + +#if (INT12PL >= INT7PL) || (INT12PL == 0) +#define MINT7_12PL ~(1 << 11) +#else +#define MINT7_12PL 0xFFFF +#endif + +#if (INT13PL >= INT7PL) || (INT13PL == 0) +#define MINT7_13PL ~(1 << 12) +#else +#define MINT7_13PL 0xFFFF +#endif + +#if (INT14PL >= INT7PL) || (INT14PL == 0) +#define MINT7_14PL ~(1 << 13) +#else +#define MINT7_14PL 0xFFFF +#endif + +#if (INT15PL >= INT7PL) || (INT15PL == 0) +#define MINT7_15PL ~(1 << 14) +#else +#define MINT7_15PL 0xFFFF +#endif + +#if (INT16PL >= INT7PL) || (INT16PL == 0) +#define MINT7_16PL ~(1 << 15) +#else +#define MINT7_16PL 0xFFFF +#endif + +#define MINT7 (MINT7_1PL & MINT7_2PL & MINT7_3PL & MINT7_4PL & \ + MINT7_5PL & MINT7_6PL & MINT7_7PL & MINT7_8PL & \ + MINT7_9PL & MINT7_10PL & MINT7_11PL & MINT7_12PL & \ + MINT7_13PL & MINT7_14PL & MINT7_15PL & MINT7_16PL) +// End Of MINT7. + +// Beginning of MINT8: +#if (INT1PL >= INT8PL) || (INT1PL == 0) +#define MINT8_1PL ~(1 << 0) +#else +#define MINT8_1PL 0xFFFF +#endif + +#if (INT2PL >= INT8PL) || (INT2PL == 0) +#define MINT8_2PL ~(1 << 1) +#else +#define MINT8_2PL 0xFFFF +#endif + +#if (INT3PL >= INT8PL) || (INT3PL == 0) +#define MINT8_3PL ~(1 << 2) +#else +#define MINT8_3PL 0xFFFF +#endif + +#if (INT4PL >= INT8PL) || (INT4PL == 0) +#define MINT8_4PL ~(1 << 3) +#else +#define MINT8_4PL 0xFFFF +#endif + +#if (INT5PL >= INT8PL) || (INT5PL == 0) +#define MINT8_5PL ~(1 << 4) +#else +#define MINT8_5PL 0xFFFF +#endif + +#if (INT6PL >= INT8PL) || (INT6PL == 0) +#define MINT8_6PL ~(1 << 5) +#else +#define MINT8_6PL 0xFFFF +#endif + +#if (INT7PL >= INT8PL) || (INT7PL == 0) +#define MINT8_7PL ~(1 << 6) +#else +#define MINT8_7PL 0xFFFF +#endif + +#if (INT8PL == 0) +#define MINT8_8PL ~(1 << 7) +#else +#define MINT8_8PL 0xFFFF +#endif + +#if (INT9PL >= INT8PL) || (INT9PL == 0) +#define MINT8_9PL ~(1 << 8) +#else +#define MINT8_9PL 0xFFFF +#endif + +#if (INT10PL >= INT8PL) || (INT10PL == 0) +#define MINT8_10PL ~(1 << 9) +#else +#define MINT8_10PL 0xFFFF +#endif + +#if (INT11PL >= INT8PL) || (INT11PL == 0) +#define MINT8_11PL ~(1 << 10) +#else +#define MINT8_11PL 0xFFFF +#endif + +#if (INT12PL >= INT8PL) || (INT12PL == 0) +#define MINT8_12PL ~(1 << 11) +#else +#define MINT8_12PL 0xFFFF +#endif + +#if (INT13PL >= INT8PL) || (INT13PL == 0) +#define MINT8_13PL ~(1 << 12) +#else +#define MINT8_13PL 0xFFFF +#endif + +#if (INT14PL >= INT8PL) || (INT14PL == 0) +#define MINT8_14PL ~(1 << 13) +#else +#define MINT8_14PL 0xFFFF +#endif + +#if (INT15PL >= INT8PL) || (INT15PL == 0) +#define MINT8_15PL ~(1 << 14) +#else +#define MINT8_15PL 0xFFFF +#endif + +#if (INT16PL >= INT8PL) || (INT16PL == 0) +#define MINT8_16PL ~(1 << 15) +#else +#define MINT8_16PL 0xFFFF +#endif + +#define MINT8 (MINT8_1PL & MINT8_2PL & MINT8_3PL & MINT8_4PL & \ + MINT8_5PL & MINT8_6PL & MINT8_7PL & MINT8_8PL & \ + MINT8_9PL & MINT8_10PL & MINT8_11PL & MINT8_12PL & \ + MINT8_13PL & MINT8_14PL & MINT8_15PL & MINT8_16PL) +// End Of MINT8. + +// Beginning of MINT9: +#if (INT1PL >= INT9PL) || (INT1PL == 0) +#define MINT9_1PL ~(1 << 0) +#else +#define MINT9_1PL 0xFFFF +#endif + +#if (INT2PL >= INT9PL) || (INT2PL == 0) +#define MINT9_2PL ~(1 << 1) +#else +#define MINT9_2PL 0xFFFF +#endif + +#if (INT3PL >= INT9PL) || (INT3PL == 0) +#define MINT9_3PL ~(1 << 2) +#else +#define MINT9_3PL 0xFFFF +#endif + +#if (INT4PL >= INT9PL) || (INT4PL == 0) +#define MINT9_4PL ~(1 << 3) +#else +#define MINT9_4PL 0xFFFF +#endif + +#if (INT5PL >= INT9PL) || (INT5PL == 0) +#define MINT9_5PL ~(1 << 4) +#else +#define MINT9_5PL 0xFFFF +#endif + +#if (INT6PL >= INT9PL) || (INT6PL == 0) +#define MINT9_6PL ~(1 << 5) +#else +#define MINT9_6PL 0xFFFF +#endif + +#if (INT7PL >= INT9PL) || (INT7PL == 0) +#define MINT9_7PL ~(1 << 6) +#else +#define MINT9_7PL 0xFFFF +#endif + +#if (INT8PL >= INT9PL) || (INT8PL == 0) +#define MINT9_8PL ~(1 << 7) +#else +#define MINT9_8PL 0xFFFF +#endif + +#if (INT9PL == 0) +#define MINT9_9PL ~(1 << 8) +#else +#define MINT9_9PL 0xFFFF +#endif + +#if (INT10PL >= INT9PL) || (INT10PL == 0) +#define MINT9_10PL ~(1 << 9) +#else +#define MINT9_10PL 0xFFFF +#endif + +#if (INT11PL >= INT9PL) || (INT11PL == 0) +#define MINT9_11PL ~(1 << 10) +#else +#define MINT9_11PL 0xFFFF +#endif + +#if (INT12PL >= INT9PL) || (INT12PL == 0) +#define MINT9_12PL ~(1 << 11) +#else +#define MINT9_12PL 0xFFFF +#endif + +#if (INT13PL >= INT9PL) || (INT13PL == 0) +#define MINT9_13PL ~(1 << 12) +#else +#define MINT9_13PL 0xFFFF +#endif + +#if (INT14PL >= INT9PL) || (INT14PL == 0) +#define MINT9_14PL ~(1 << 13) +#else +#define MINT9_14PL 0xFFFF +#endif + +#if (INT15PL >= INT9PL) || (INT15PL == 0) +#define MINT9_15PL ~(1 << 14) +#else +#define MINT9_15PL 0xFFFF +#endif + +#if (INT16PL >= INT9PL) || (INT16PL == 0) +#define MINT9_16PL ~(1 << 15) +#else +#define MINT9_16PL 0xFFFF +#endif + +#define MINT9 (MINT9_1PL & MINT9_2PL & MINT9_3PL & MINT9_4PL & \ + MINT9_5PL & MINT9_6PL & MINT9_7PL & MINT9_8PL & \ + MINT9_9PL & MINT9_10PL & MINT9_11PL & MINT9_12PL & \ + MINT9_13PL & MINT9_14PL & MINT9_15PL & MINT9_16PL) +// End Of MINT9. + +// Beginning of MINT10: +#if (INT1PL >= INT10PL) || (INT1PL == 0) +#define MINT10_1PL ~(1 << 0) +#else +#define MINT10_1PL 0xFFFF +#endif + +#if (INT2PL >= INT10PL) || (INT2PL == 0) +#define MINT10_2PL ~(1 << 1) +#else +#define MINT10_2PL 0xFFFF +#endif + +#if (INT3PL >= INT10PL) || (INT3PL == 0) +#define MINT10_3PL ~(1 << 2) +#else +#define MINT10_3PL 0xFFFF +#endif + +#if (INT4PL >= INT10PL) || (INT4PL == 0) +#define MINT10_4PL ~(1 << 3) +#else +#define MINT10_4PL 0xFFFF +#endif + +#if (INT5PL >= INT10PL) || (INT5PL == 0) +#define MINT10_5PL ~(1 << 4) +#else +#define MINT10_5PL 0xFFFF +#endif + +#if (INT6PL >= INT10PL) || (INT6PL == 0) +#define MINT10_6PL ~(1 << 5) +#else +#define MINT10_6PL 0xFFFF +#endif + +#if (INT7PL >= INT10PL) || (INT7PL == 0) +#define MINT10_7PL ~(1 << 6) +#else +#define MINT10_7PL 0xFFFF +#endif + +#if (INT8PL >= INT10PL) || (INT8PL == 0) +#define MINT10_8PL ~(1 << 7) +#else +#define MINT10_8PL 0xFFFF +#endif + +#if (INT9PL >= INT10PL) || (INT9PL == 0) +#define MINT10_9PL ~(1 << 8) +#else +#define MINT10_9PL 0xFFFF +#endif + +#if (INT10PL == 0) +#define MINT10_10PL ~(1 << 9) +#else +#define MINT10_10PL 0xFFFF +#endif + +#if (INT11PL >= INT10PL) || (INT11PL == 0) +#define MINT10_11PL ~(1 << 10) +#else +#define MINT10_11PL 0xFFFF +#endif + +#if (INT12PL >= INT10PL) || (INT12PL == 0) +#define MINT10_12PL ~(1 << 11) +#else +#define MINT10_12PL 0xFFFF +#endif + +#if (INT13PL >= INT10PL) || (INT13PL == 0) +#define MINT10_13PL ~(1 << 12) +#else +#define MINT10_13PL 0xFFFF +#endif + +#if (INT14PL >= INT10PL) || (INT14PL == 0) +#define MINT10_14PL ~(1 << 13) +#else +#define MINT10_14PL 0xFFFF +#endif + +#if (INT15PL >= INT10PL) || (INT15PL == 0) +#define MINT10_15PL ~(1 << 14) +#else +#define MINT10_15PL 0xFFFF +#endif + +#if (INT16PL >= INT10PL) || (INT16PL == 0) +#define MINT10_16PL ~(1 << 15) +#else +#define MINT10_16PL 0xFFFF +#endif + +#define MINT10 (MINT10_1PL & MINT10_2PL & MINT10_3PL & MINT10_4PL & \ + MINT10_5PL & MINT10_6PL & MINT10_7PL & MINT10_8PL & \ + MINT10_9PL & MINT10_10PL & MINT10_11PL & MINT10_12PL & \ + MINT10_13PL & MINT10_14PL & MINT10_15PL & MINT10_16PL) +// End Of MINT10. + +// Beginning of MINT11: +#if (INT1PL >= INT11PL) || (INT1PL == 0) +#define MINT11_1PL ~(1 << 0) +#else +#define MINT11_1PL 0xFFFF +#endif + +#if (INT2PL >= INT11PL) || (INT2PL == 0) +#define MINT11_2PL ~(1 << 1) +#else +#define MINT11_2PL 0xFFFF +#endif + +#if (INT3PL >= INT11PL) || (INT3PL == 0) +#define MINT11_3PL ~(1 << 2) +#else +#define MINT11_3PL 0xFFFF +#endif + +#if (INT4PL >= INT11PL) || (INT4PL == 0) +#define MINT11_4PL ~(1 << 3) +#else +#define MINT11_4PL 0xFFFF +#endif + +#if (INT5PL >= INT11PL) || (INT5PL == 0) +#define MINT11_5PL ~(1 << 4) +#else +#define MINT11_5PL 0xFFFF +#endif + +#if (INT6PL >= INT11PL) || (INT6PL == 0) +#define MINT11_6PL ~(1 << 5) +#else +#define MINT11_6PL 0xFFFF +#endif + +#if (INT7PL >= INT11PL) || (INT7PL == 0) +#define MINT11_7PL ~(1 << 6) +#else +#define MINT11_7PL 0xFFFF +#endif + +#if (INT8PL >= INT11PL) || (INT8PL == 0) +#define MINT11_8PL ~(1 << 7) +#else +#define MINT11_8PL 0xFFFF +#endif + +#if (INT9PL >= INT11PL) || (INT9PL == 0) +#define MINT11_9PL ~(1 << 8) +#else +#define MINT11_9PL 0xFFFF +#endif + +#if (INT10PL >= INT11PL) || (INT10PL == 0) +#define MINT11_10PL ~(1 << 9) +#else +#define MINT11_10PL 0xFFFF +#endif + +#if (INT11PL == 0) +#define MINT11_11PL ~(1 << 10) +#else +#define MINT11_11PL 0xFFFF +#endif + +#if (INT12PL >= INT11PL) || (INT12PL == 0) +#define MINT11_12PL ~(1 << 11) +#else +#define MINT11_12PL 0xFFFF +#endif + +#if (INT13PL >= INT11PL) || (INT13PL == 0) +#define MINT11_13PL ~(1 << 12) +#else +#define MINT11_13PL 0xFFFF +#endif + +#if (INT14PL >= INT11PL) || (INT14PL == 0) +#define MINT11_14PL ~(1 << 13) +#else +#define MINT11_14PL 0xFFFF +#endif + +#if (INT15PL >= INT11PL) || (INT15PL == 0) +#define MINT11_15PL ~(1 << 14) +#else +#define MINT11_15PL 0xFFFF +#endif + +#if (INT16PL >= INT11PL) || (INT16PL == 0) +#define MINT11_16PL ~(1 << 15) +#else +#define MINT11_16PL 0xFFFF +#endif + +#define MINT11 (MINT11_1PL & MINT11_2PL & MINT11_3PL & MINT11_4PL & \ + MINT11_5PL & MINT11_6PL & MINT11_7PL & MINT11_8PL & \ + MINT11_9PL & MINT11_10PL & MINT11_11PL & MINT11_12PL & \ + MINT11_13PL & MINT11_14PL & MINT11_15PL & MINT11_16PL) +// End Of MINT11. + +// Beginning of MINT12: +#if (INT1PL >= INT12PL) || (INT1PL == 0) +#define MINT12_1PL ~(1 << 0) +#else +#define MINT12_1PL 0xFFFF +#endif + +#if (INT2PL >= INT12PL) || (INT2PL == 0) +#define MINT12_2PL ~(1 << 1) +#else +#define MINT12_2PL 0xFFFF +#endif + +#if (INT3PL >= INT12PL) || (INT3PL == 0) +#define MINT12_3PL ~(1 << 2) +#else +#define MINT12_3PL 0xFFFF +#endif + +#if (INT4PL >= INT12PL) || (INT4PL == 0) +#define MINT12_4PL ~(1 << 3) +#else +#define MINT12_4PL 0xFFFF +#endif + +#if (INT5PL >= INT12PL) || (INT5PL == 0) +#define MINT12_5PL ~(1 << 4) +#else +#define MINT12_5PL 0xFFFF +#endif + +#if (INT6PL >= INT12PL) || (INT6PL == 0) +#define MINT12_6PL ~(1 << 5) +#else +#define MINT12_6PL 0xFFFF +#endif + +#if (INT7PL >= INT12PL) || (INT7PL == 0) +#define MINT12_7PL ~(1 << 6) +#else +#define MINT12_7PL 0xFFFF +#endif + +#if (INT8PL >= INT12PL) || (INT8PL == 0) +#define MINT12_8PL ~(1 << 7) +#else +#define MINT12_8PL 0xFFFF +#endif + +#if (INT9PL >= INT12PL) || (INT9PL == 0) +#define MINT12_9PL ~(1 << 8) +#else +#define MINT12_9PL 0xFFFF +#endif + +#if (INT10PL >= INT12PL) || (INT10PL == 0) +#define MINT12_10PL ~(1 << 9) +#else +#define MINT12_10PL 0xFFFF +#endif + +#if (INT11PL >= INT12PL) || (INT11PL == 0) +#define MINT12_11PL ~(1 << 10) +#else +#define MINT12_11PL 0xFFFF +#endif + +#if (INT12PL == 0) +#define MINT12_12PL ~(1 << 11) +#else +#define MINT12_12PL 0xFFFF +#endif + +#if (INT13PL >= INT12PL) || (INT13PL == 0) +#define MINT12_13PL ~(1 << 12) +#else +#define MINT12_13PL 0xFFFF +#endif + +#if (INT14PL >= INT12PL) || (INT14PL == 0) +#define MINT12_14PL ~(1 << 13) +#else +#define MINT12_14PL 0xFFFF +#endif + +#if (INT15PL >= INT12PL) || (INT15PL == 0) +#define MINT12_15PL ~(1 << 14) +#else +#define MINT12_15PL 0xFFFF +#endif + +#if (INT16PL >= INT12PL) || (INT16PL == 0) +#define MINT12_16PL ~(1 << 15) +#else +#define MINT12_16PL 0xFFFF +#endif + +#define MINT12 (MINT12_1PL & MINT12_2PL & MINT12_3PL & MINT12_4PL & \ + MINT12_5PL & MINT12_6PL & MINT12_7PL & MINT12_8PL & \ + MINT12_9PL & MINT12_10PL & MINT12_11PL & MINT12_12PL & \ + MINT12_13PL & MINT12_14PL & MINT12_15PL & MINT12_16PL) +// End Of MINT12. + +// Beginning of MINT13: +#if (INT1PL >= INT13PL) || (INT1PL == 0) +#define MINT13_1PL ~(1 << 0) +#else +#define MINT13_1PL 0xFFFF +#endif + +#if (INT2PL >= INT13PL) || (INT2PL == 0) +#define MINT13_2PL ~(1 << 1) +#else +#define MINT13_2PL 0xFFFF +#endif + +#if (INT3PL >= INT13PL) || (INT3PL == 0) +#define MINT13_3PL ~(1 << 2) +#else +#define MINT13_3PL 0xFFFF +#endif + +#if (INT4PL >= INT13PL) || (INT4PL == 0) +#define MINT13_4PL ~(1 << 3) +#else +#define MINT13_4PL 0xFFFF +#endif + +#if (INT5PL >= INT13PL) || (INT5PL == 0) +#define MINT13_5PL ~(1 << 4) +#else +#define MINT13_5PL 0xFFFF +#endif + +#if (INT6PL >= INT13PL) || (INT6PL == 0) +#define MINT13_6PL ~(1 << 5) +#else +#define MINT13_6PL 0xFFFF +#endif + +#if (INT7PL >= INT13PL) || (INT7PL == 0) +#define MINT13_7PL ~(1 << 6) +#else +#define MINT13_7PL 0xFFFF +#endif + +#if (INT8PL >= INT13PL) || (INT8PL == 0) +#define MINT13_8PL ~(1 << 7) +#else +#define MINT13_8PL 0xFFFF +#endif + +#if (INT9PL >= INT13PL) || (INT9PL == 0) +#define MINT13_9PL ~(1 << 8) +#else +#define MINT13_9PL 0xFFFF +#endif + +#if (INT10PL >= INT13PL) || (INT10PL == 0) +#define MINT13_10PL ~(1 << 9) +#else +#define MINT13_10PL 0xFFFF +#endif + +#if (INT11PL >= INT13PL) || (INT11PL == 0) +#define MINT13_11PL ~(1 << 10) +#else +#define MINT13_11PL 0xFFFF +#endif + +#define MINT13_12PL ~(1 << 11) + +#if (INT13PL == 0) +#define MINT13_13PL ~(1 << 12) +#else +#define MINT13_13PL 0xFFFF +#endif + +#if (INT14PL >= INT13PL) || (INT14PL == 0) +#define MINT13_14PL ~(1 << 13) +#else +#define MINT13_14PL 0xFFFF +#endif + +#if (INT15PL >= INT13PL) || (INT15PL == 0) +#define MINT13_15PL ~(1 << 14) +#else +#define MINT13_15PL 0xFFFF +#endif + +#if (INT16PL >= INT13PL) || (INT16PL == 0) +#define MINT13_16PL ~(1 << 15) +#else +#define MINT13_16PL 0xFFFF +#endif + +#define MINT13 (MINT13_1PL & MINT13_2PL & MINT13_3PL & MINT13_4PL & \ + MINT13_5PL & MINT13_6PL & MINT13_7PL & MINT13_8PL & \ + MINT13_9PL & MINT13_10PL & MINT13_11PL & MINT13_12PL & \ + MINT13_13PL & MINT13_14PL & MINT13_15PL & MINT13_16PL) +// End Of MINT13. + +// Beginning of MINT14: +#if (INT1PL >= INT14PL) || (INT1PL == 0) +#define MINT14_1PL ~(1 << 0) +#else +#define MINT14_1PL 0xFFFF +#endif + +#if (INT2PL >= INT14PL) || (INT2PL == 0) +#define MINT14_2PL ~(1 << 1) +#else +#define MINT14_2PL 0xFFFF +#endif + +#if (INT3PL >= INT14PL) || (INT3PL == 0) +#define MINT14_3PL ~(1 << 2) +#else +#define MINT14_3PL 0xFFFF +#endif + +#if (INT4PL >= INT14PL) || (INT4PL == 0) +#define MINT14_4PL ~(1 << 3) +#else +#define MINT14_4PL 0xFFFF +#endif + +#if (INT5PL >= INT14PL) || (INT5PL == 0) +#define MINT14_5PL ~(1 << 4) +#else +#define MINT14_5PL 0xFFFF +#endif + +#if (INT6PL >= INT14PL) || (INT6PL == 0) +#define MINT14_6PL ~(1 << 5) +#else +#define MINT14_6PL 0xFFFF +#endif + +#if (INT7PL >= INT14PL) || (INT7PL == 0) +#define MINT14_7PL ~(1 << 6) +#else +#define MINT14_7PL 0xFFFF +#endif + +#if (INT8PL >= INT14PL) || (INT8PL == 0) +#define MINT14_8PL ~(1 << 7) +#else +#define MINT14_8PL 0xFFFF +#endif + +#if (INT9PL >= INT14PL) || (INT9PL == 0) +#define MINT14_9PL ~(1 << 8) +#else +#define MINT14_9PL 0xFFFF +#endif + +#if (INT10PL >= INT14PL) || (INT10PL == 0) +#define MINT14_10PL ~(1 << 9) +#else +#define MINT14_10PL 0xFFFF +#endif + +#if (INT11PL >= INT14PL) || (INT11PL == 0) +#define MINT14_11PL ~(1 << 10) +#else +#define MINT14_11PL 0xFFFF +#endif + +#if (INT12PL >= INT14PL) || (INT12PL == 0) +#define MINT14_12PL ~(1 << 11) +#else +#define MINT14_12PL 0xFFFF +#endif + +#if (INT13PL >= INT14PL) || (INT13PL == 0) +#define MINT14_13PL ~(1 << 12) +#else +#define MINT14_13PL 0xFFFF +#endif + +#define MINT14_14PL ~(1 << 13) + +#if (INT15PL >= INT14PL) || (INT15PL == 0) +#define MINT14_15PL ~(1 << 14) +#else +#define MINT14_15PL 0xFFFF +#endif + +#if (INT16PL >= INT14PL) || (INT16PL == 0) +#define MINT14_16PL ~(1 << 15) +#else +#define MINT14_16PL 0xFFFF +#endif + +#define MINT14 (MINT14_1PL & MINT14_2PL & MINT14_3PL & MINT14_4PL & \ + MINT14_5PL & MINT14_6PL & MINT14_7PL & MINT14_8PL & \ + MINT14_9PL & MINT14_10PL & MINT14_11PL & MINT14_12PL & \ + MINT14_13PL & MINT14_14PL & MINT14_15PL & MINT14_16PL) +// End Of MINT14. + +// Beginning of MINT15: +#if (INT1PL >= INT15PL) || (INT1PL == 0) +#define MINT15_1PL ~(1 << 0) +#else +#define MINT15_1PL 0xFFFF +#endif + +#if (INT2PL >= INT15PL) || (INT2PL == 0) +#define MINT15_2PL ~(1 << 1) +#else +#define MINT15_2PL 0xFFFF +#endif + +#if (INT3PL >= INT15PL) || (INT3PL == 0) +#define MINT15_3PL ~(1 << 2) +#else +#define MINT15_3PL 0xFFFF +#endif + +#if (INT4PL >= INT15PL) || (INT4PL == 0) +#define MINT15_4PL ~(1 << 3) +#else +#define MINT15_4PL 0xFFFF +#endif + +#if (INT5PL >= INT15PL) || (INT5PL == 0) +#define MINT15_5PL ~(1 << 4) +#else +#define MINT15_5PL 0xFFFF +#endif + +#if (INT6PL >= INT15PL) || (INT6PL == 0) +#define MINT15_6PL ~(1 << 5) +#else +#define MINT15_6PL 0xFFFF +#endif + +#if (INT7PL >= INT15PL) || (INT7PL == 0) +#define MINT15_7PL ~(1 << 6) +#else +#define MINT15_7PL 0xFFFF +#endif + +#if (INT8PL >= INT15PL) || (INT8PL == 0) +#define MINT15_8PL ~(1 << 7) +#else +#define MINT15_8PL 0xFFFF +#endif + +#if (INT9PL >= INT15PL) || (INT9PL == 0) +#define MINT15_9PL ~(1 << 8) +#else +#define MINT15_9PL 0xFFFF +#endif + +#if (INT10PL >= INT15PL) || (INT10PL == 0) +#define MINT15_10PL ~(1 << 9) +#else +#define MINT15_10PL 0xFFFF +#endif + +#if (INT11PL >= INT15PL) || (INT11PL == 0) +#define MINT15_11PL ~(1 << 10) +#else +#define MINT15_11PL 0xFFFF +#endif + +#if (INT12PL >= INT15PL) || (INT12PL == 0) +#define MINT15_12PL ~(1 << 11) +#else +#define MINT15_12PL 0xFFFF +#endif + +#if (INT13PL >= INT15PL) || (INT13PL == 0) +#define MINT15_13PL ~(1 << 12) +#else +#define MINT15_13PL 0xFFFF +#endif + +#if (INT14PL >= INT15PL) || (INT14PL == 0) +#define MINT15_14PL ~(1 << 13) +#else +#define MINT15_14PL 0xFFFF +#endif + +#define MINT15_15PL ~(1 << 14) + +#if (INT16PL >= INT15PL) || (INT16PL == 0) +#define MINT15_16PL ~(1 << 15) +#else +#define MINT15_16PL 0xFFFF +#endif + +#define MINT15 (MINT15_1PL & MINT15_2PL & MINT15_3PL & MINT15_4PL & \ + MINT15_5PL & MINT15_6PL & MINT15_7PL & MINT15_8PL & \ + MINT15_9PL & MINT15_10PL & MINT15_11PL & MINT15_12PL & \ + MINT15_13PL & MINT15_14PL & MINT15_15PL & MINT15_16PL) +// End Of MINT15. + +// Beginning of MINT16: +#if (INT1PL >= INT16PL) || (INT1PL == 0) +#define MINT16_1PL ~(1 << 0) +#else +#define MINT16_1PL 0xFFFF +#endif + +#if (INT2PL >= INT16PL) || (INT2PL == 0) +#define MINT16_2PL ~(1 << 1) +#else +#define MINT16_2PL 0xFFFF +#endif + +#if (INT3PL >= INT16PL) || (INT3PL == 0) +#define MINT16_3PL ~(1 << 2) +#else +#define MINT16_3PL 0xFFFF +#endif + +#if (INT4PL >= INT16PL) || (INT4PL == 0) +#define MINT16_4PL ~(1 << 3) +#else +#define MINT16_4PL 0xFFFF +#endif + +#if (INT5PL >= INT16PL) || (INT5PL == 0) +#define MINT16_5PL ~(1 << 4) +#else +#define MINT16_5PL 0xFFFF +#endif + +#if (INT6PL >= INT16PL) || (INT6PL == 0) +#define MINT16_6PL ~(1 << 5) +#else +#define MINT16_6PL 0xFFFF +#endif + +#if (INT7PL >= INT16PL) || (INT7PL == 0) +#define MINT16_7PL ~(1 << 6) +#else +#define MINT16_7PL 0xFFFF +#endif + +#if (INT8PL >= INT16PL) || (INT8PL == 0) +#define MINT16_8PL ~(1 << 7) +#else +#define MINT16_8PL 0xFFFF +#endif + +#if (INT9PL >= INT16PL) || (INT9PL == 0) +#define MINT16_9PL ~(1 << 8) +#else +#define MINT16_9PL 0xFFFF +#endif + +#if (INT10PL >= INT16PL) || (INT10PL == 0) +#define MINT16_10PL ~(1 << 9) +#else +#define MINT16_10PL 0xFFFF +#endif + +#if (INT11PL >= INT16PL) || (INT11PL == 0) +#define MINT16_11PL ~(1 << 10) +#else +#define MINT16_11PL 0xFFFF +#endif + +#if (INT12PL >= INT16PL) || (INT12PL == 0) +#define MINT16_12PL ~(1 << 11) +#else +#define MINT16_12PL 0xFFFF +#endif + +#if (INT13PL >= INT16PL) || (INT13PL == 0) +#define MINT16_13PL ~(1 << 12) +#else +#define MINT16_13PL 0xFFFF +#endif + +#if (INT14PL >= INT16PL) || (INT14PL == 0) +#define MINT16_14PL ~(1 << 13) +#else +#define MINT16_14PL 0xFFFF +#endif + +#if (INT15PL >= INT16PL) || (INT15PL == 0) +#define MINT16_15PL ~(1 << 14) +#else +#define MINT16_15PL 0xFFFF +#endif + +#define MINT16_16PL ~(1 << 15) + +#define MINT16 (MINT16_1PL & MINT16_2PL & MINT16_3PL & MINT16_4PL & \ + MINT16_5PL & MINT16_6PL & MINT16_7PL & MINT16_8PL & \ + MINT16_9PL & MINT16_10PL & MINT16_11PL & MINT16_12PL & \ + MINT16_13PL & MINT16_14PL & MINT16_15PL & MINT16_16PL) +// End Of MINT16. + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG11 to MG18: + +// Beginning of MG11: +#if (G12PL >= G11PL) || (G12PL == 0) +#define MG11_12PL ~(1 << 1) +#else +#define MG11_12PL 0xFFFF +#endif + +#if (G13PL >= G11PL) || (G13PL == 0) +#define MG11_13PL ~(1 << 2) +#else +#define MG11_13PL 0xFFFF +#endif + +#if (G14PL >= G11PL) || (G14PL == 0) +#define MG11_14PL ~(1 << 3) +#else +#define MG11_14PL 0xFFFF +#endif + +#if (G15PL >= G11PL) || (G15PL == 0) +#define MG11_15PL ~(1 << 4) +#else +#define MG11_15PL 0xFFFF +#endif + +#if (G16PL >= G11PL) || (G16PL == 0) +#define MG11_16PL ~(1 << 5) +#else +#define MG11_16PL 0xFFFF +#endif + +#if (G17PL >= G11PL) || (G17PL == 0) +#define MG11_17PL ~(1 << 6) +#else +#define MG11_17PL 0xFFFF +#endif + +#if (G18PL >= G11PL) || (G18PL == 0) +#define MG11_18PL ~(1 << 7) +#else +#define MG11_18PL 0xFFFF +#endif + +#define MG11_11PL 0x00FE +#define MG11 (MG11_11PL & MG11_12PL & MG11_13PL & MG11_14PL & \ + MG11_15PL & MG11_16PL & MG11_17PL & MG11_18PL) +// End of MG11: + +// Beginning of MG12: +#if (G11PL >= G12PL) || (G11PL == 0) +#define MG12_11PL ~(1) +#else +#define MG12_11PL 0xFFFF +#endif +#if (G13PL >= G12PL) || (G13PL == 0) +#define MG12_13PL ~(1 << 2) +#else +#define MG12_13PL 0xFFFF +#endif +#if (G14PL >= G12PL) || (G14PL == 0) +#define MG12_14PL ~(1 << 3) +#else +#define MG12_14PL 0xFFFF +#endif +#if (G15PL >= G12PL) || (G15PL == 0) +#define MG12_15PL ~(1 << 4) +#else +#define MG12_15PL 0xFFFF +#endif +#if (G16PL >= G12PL) || (G16PL == 0) +#define MG12_16PL ~(1 << 5) +#else +#define MG12_16PL 0xFFFF +#endif +#if (G17PL >= G12PL) || (G17PL == 0) +#define MG12_17PL ~(1 << 6) +#else +#define MG12_17PL 0xFFFF +#endif +#if (G18PL >= G12PL) || (G18PL == 0) +#define MG12_18PL ~(1 << 7) +#else +#define MG12_18PL 0xFFFF +#endif +#define MG12_12PL 0x00FD +#define MG12 (MG12_11PL & MG12_12PL & MG12_13PL & MG12_14PL & \ + MG12_15PL & MG12_16PL & MG12_17PL & MG12_18PL) +// End of MG12: + +// Beginning of MG13: +#if (G11PL >= G13PL) || (G11PL == 0) +#define MG13_11PL ~(1) +#else +#define MG13_11PL 0xFFFF +#endif +#if (G12PL >= G13PL) || (G12PL == 0) +#define MG13_12PL ~(1 << 1) +#else +#define MG13_12PL 0xFFFF +#endif +#if (G14PL >= G13PL) || (G14PL == 0) +#define MG13_14PL ~(1 << 3) +#else +#define MG13_14PL 0xFFFF +#endif +#if (G15PL >= G13PL) || (G15PL == 0) +#define MG13_15PL ~(1 << 4) +#else +#define MG13_15PL 0xFFFF +#endif +#if (G16PL >= G13PL) || (G16PL == 0) +#define MG13_16PL ~(1 << 5) +#else +#define MG13_16PL 0xFFFF +#endif +#if (G17PL >= G13PL) || (G17PL == 0) +#define MG13_17PL ~(1 << 6) +#else +#define MG13_17PL 0xFFFF +#endif +#if (G18PL >= G13PL) || (G18PL == 0) +#define MG13_18PL ~(1 << 7) +#else +#define MG13_18PL 0xFFFF +#endif +#define MG13_13PL 0x00FB +#define MG13 (MG13_11PL & MG13_12PL & MG13_13PL & MG13_14PL & \ + MG13_15PL & MG13_16PL & MG13_17PL & MG13_18PL) +// End of MG13: + +// Beginning of MG14: +#if (G11PL >= G14PL) || (G11PL == 0) +#define MG14_11PL ~(1) +#else +#define MG14_11PL 0xFFFF +#endif +#if (G12PL >= G14PL) || (G12PL == 0) +#define MG14_12PL ~(1 << 1) +#else +#define MG14_12PL 0xFFFF +#endif +#if (G13PL >= G14PL) || (G13PL == 0) +#define MG14_13PL ~(1 << 2) +#else +#define MG14_13PL 0xFFFF +#endif +#if (G15PL >= G14PL) || (G15PL == 0) +#define MG14_15PL ~(1 << 4) +#else +#define MG14_15PL 0xFFFF +#endif +#if (G16PL >= G14PL) || (G16PL == 0) +#define MG14_16PL ~(1 << 5) +#else +#define MG14_16PL 0xFFFF +#endif +#if (G17PL >= G14PL) || (G17PL == 0) +#define MG14_17PL ~(1 << 6) +#else +#define MG14_17PL 0xFFFF +#endif +#if (G18PL >= G14PL) || (G18PL == 0) +#define MG14_18PL ~(1 << 7) +#else +#define MG14_18PL 0xFFFF +#endif +#define MG14_14PL 0x00F7 +#define MG14 (MG14_11PL & MG14_12PL & MG14_13PL & MG14_14PL & \ + MG14_15PL & MG14_16PL & MG14_17PL & MG14_18PL) +// End of MG14: + +// Beginning of MG15: +#if (G11PL >= G15PL) || (G11PL == 0) +#define MG15_11PL ~(1) +#else +#define MG15_11PL 0xFFFF +#endif +#if (G12PL >= G15PL) || (G12PL == 0) +#define MG15_12PL ~(1 << 1) +#else +#define MG15_12PL 0xFFFF +#endif +#if (G13PL >= G15PL) || (G13PL == 0) +#define MG15_13PL ~(1 << 2) +#else +#define MG15_13PL 0xFFFF +#endif +#if (G14PL >= G15PL) || (G14PL == 0) +#define MG15_14PL ~(1 << 3) +#else +#define MG15_14PL 0xFFFF +#endif +#if (G16PL >= G15PL) || (G16PL == 0) +#define MG15_16PL ~(1 << 5) +#else +#define MG15_16PL 0xFFFF +#endif +#if (G17PL >= G15PL) || (G17PL == 0) +#define MG15_17PL ~(1 << 6) +#else +#define MG15_17PL 0xFFFF +#endif +#if (G18PL >= G15PL) || (G18PL == 0) +#define MG15_18PL ~(1 << 7) +#else +#define MG15_18PL 0xFFFF +#endif +#define MG15_15PL 0x00EF +#define MG15 (MG15_11PL & MG15_12PL & MG15_13PL & MG15_14PL & \ + MG15_15PL & MG15_16PL & MG15_17PL & MG15_18PL) +// End of MG15: + +// Beginning of MG16: +#if (G11PL >= G16PL) || (G11PL == 0) +#define MG16_11PL ~(1) +#else +#define MG16_11PL 0xFFFF +#endif +#if (G12PL >= G16PL) || (G12PL == 0) +#define MG16_12PL ~(1 << 1) +#else +#define MG16_12PL 0xFFFF +#endif +#if (G13PL >= G16PL) || (G13PL == 0) +#define MG16_13PL ~(1 << 2) +#else +#define MG16_13PL 0xFFFF +#endif +#if (G14PL >= G16PL) || (G14PL == 0) +#define MG16_14PL ~(1 << 3) +#else +#define MG16_14PL 0xFFFF +#endif +#if (G15PL >= G16PL) || (G15PL == 0) +#define MG16_15PL ~(1 << 4) +#else +#define MG16_15PL 0xFFFF +#endif +#if (G17PL >= G16PL) || (G17PL == 0) +#define MG16_17PL ~(1 << 6) +#else +#define MG16_17PL 0xFFFF +#endif +#if (G18PL >= G16PL) || (G18PL == 0) +#define MG16_18PL ~(1 << 7) +#else +#define MG16_18PL 0xFFFF +#endif +#define MG16_16PL 0x00DF +#define MG16 (MG16_11PL & MG16_12PL & MG16_13PL & MG16_14PL & \ + MG16_15PL & MG16_16PL & MG16_17PL & MG16_18PL) +// End of MG16: + +// Beginning of MG17: +#if (G11PL >= G17PL) || (G11PL == 0) +#define MG17_11PL ~(1) +#else +#define MG17_11PL 0xFFFF +#endif +#if (G12PL >= G17PL) || (G12PL == 0) +#define MG17_12PL ~(1 << 1) +#else +#define MG17_12PL 0xFFFF +#endif +#if (G13PL >= G17PL) || (G13PL == 0) +#define MG17_13PL ~(1 << 2) +#else +#define MG17_13PL 0xFFFF +#endif +#if (G14PL >= G17PL) || (G14PL == 0) +#define MG17_14PL ~(1 << 3) +#else +#define MG17_14PL 0xFFFF +#endif +#if (G15PL >= G17PL) || (G15PL == 0) +#define MG17_15PL ~(1 << 4) +#else +#define MG17_15PL 0xFFFF +#endif +#if (G16PL >= G17PL) || (G16PL == 0) +#define MG17_16PL ~(1 << 5) +#else +#define MG17_16PL 0xFFFF +#endif +#if (G18PL >= G17PL) || (G18PL == 0) +#define MG17_18PL ~(1 << 7) +#else +#define MG17_18PL 0xFFFF +#endif +#define MG17_17PL 0x00BF +#define MG17 (MG17_11PL & MG17_12PL & MG17_13PL & MG17_14PL & \ + MG17_15PL & MG17_16PL & MG17_17PL & MG17_18PL) +// End of MG17: + +// Beginning of MG18: +#if (G11PL >= G18PL) || (G11PL == 0) +#define MG18_11PL ~(1) +#else +#define MG18_11PL 0xFFFF +#endif +#if (G12PL >= G18PL) || (G12PL == 0) +#define MG18_12PL ~(1 << 1) +#else +#define MG18_12PL 0xFFFF +#endif +#if (G13PL >= G18PL) || (G13PL == 0) +#define MG18_13PL ~(1 << 2) +#else +#define MG18_13PL 0xFFFF +#endif +#if (G14PL >= G18PL) || (G14PL == 0) +#define MG18_14PL ~(1 << 3) +#else +#define MG18_14PL 0xFFFF +#endif +#if (G15PL >= G18PL) || (G15PL == 0) +#define MG18_15PL ~(1 << 4) +#else +#define MG18_15PL 0xFFFF +#endif +#if (G16PL >= G18PL) || (G16PL == 0) +#define MG18_16PL ~(1 << 5) +#else +#define MG18_16PL 0xFFFF +#endif +#if (G17PL >= G18PL) || (G17PL == 0) +#define MG18_17PL ~(1 << 6) +#else +#define MG18_17PL 0xFFFF +#endif +#define MG18_18PL 0x007F +#define MG18 (MG18_11PL & MG18_12PL & MG18_13PL & MG18_14PL & \ + MG18_15PL & MG18_16PL & MG18_17PL & MG18_18PL) +// End of MG18: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG21 to MG28: +// + +// Beginning of MG21: +#if (G22PL >= G21PL) || (G22PL == 0) +#define MG21_12PL ~(1 << 1) +#else +#define MG21_12PL 0xFFFF +#endif +#if (G23PL >= G21PL) || (G23PL == 0) +#define MG21_13PL ~(1 << 2) +#else +#define MG21_13PL 0xFFFF +#endif +#if (G24PL >= G21PL) || (G24PL == 0) +#define MG21_14PL ~(1 << 3) +#else +#define MG21_14PL 0xFFFF +#endif +#if (G25PL >= G21PL) || (G25PL == 0) +#define MG21_15PL ~(1 << 4) +#else +#define MG21_15PL 0xFFFF +#endif +#if (G26PL >= G21PL) || (G26PL == 0) +#define MG21_16PL ~(1 << 5) +#else +#define MG21_16PL 0xFFFF +#endif +#if (G27PL >= G21PL) || (G27PL == 0) +#define MG21_17PL ~(1 << 6) +#else +#define MG21_17PL 0xFFFF +#endif +#if (G28PL >= G21PL) || (G28PL == 0) +#define MG21_18PL ~(1 << 7) +#else +#define MG21_18PL 0xFFFF +#endif +#define MG21_11PL 0x00FE +#define MG21 (MG21_11PL & MG21_12PL & MG21_13PL & MG21_14PL & \ + MG21_15PL & MG21_16PL & MG21_17PL & MG21_18PL) +// End of MG21: + +// Beginning of MG22: +#if (G21PL >= G22PL) || (G21PL == 0) +#define MG22_11PL ~(1) +#else +#define MG22_11PL 0xFFFF +#endif +#if (G23PL >= G22PL) || (G23PL == 0) +#define MG22_13PL ~(1 << 2) +#else +#define MG22_13PL 0xFFFF +#endif +#if (G24PL >= G22PL) || (G24PL == 0) +#define MG22_14PL ~(1 << 3) +#else +#define MG22_14PL 0xFFFF +#endif +#if (G25PL >= G22PL) || (G25PL == 0) +#define MG22_15PL ~(1 << 4) +#else +#define MG22_15PL 0xFFFF +#endif +#if (G26PL >= G22PL) || (G26PL == 0) +#define MG22_16PL ~(1 << 5) +#else +#define MG22_16PL 0xFFFF +#endif +#if (G27PL >= G22PL) || (G27PL == 0) +#define MG22_17PL ~(1 << 6) +#else +#define MG22_17PL 0xFFFF +#endif +#if (G28PL >= G22PL) || (G28PL == 0) +#define MG22_18PL ~(1 << 7) +#else +#define MG22_18PL 0xFFFF +#endif +#define MG22_12PL 0x00FD +#define MG22 (MG22_11PL & MG22_12PL & MG22_13PL & MG22_14PL & \ + MG22_15PL & MG22_16PL & MG22_17PL & MG22_18PL) +// End of MG22: + +// Beginning of MG23: +#if (G21PL >= G23PL) || (G21PL == 0) +#define MG23_11PL ~(1) +#else +#define MG23_11PL 0xFFFF +#endif +#if (G22PL >= G23PL) || (G22PL == 0) +#define MG23_12PL ~(1 << 1) +#else +#define MG23_12PL 0xFFFF +#endif +#if (G24PL >= G23PL) || (G24PL == 0) +#define MG23_14PL ~(1 << 3) +#else +#define MG23_14PL 0xFFFF +#endif +#if (G25PL >= G23PL) || (G25PL == 0) +#define MG23_15PL ~(1 << 4) +#else +#define MG23_15PL 0xFFFF +#endif +#if (G26PL >= G23PL) || (G26PL == 0) +#define MG23_16PL ~(1 << 5) +#else +#define MG23_16PL 0xFFFF +#endif +#if (G27PL >= G23PL) || (G27PL == 0) +#define MG23_17PL ~(1 << 6) +#else +#define MG23_17PL 0xFFFF +#endif +#if (G28PL >= G23PL) || (G28PL == 0) +#define MG23_18PL ~(1 << 7) +#else +#define MG23_18PL 0xFFFF +#endif +#define MG23_13PL 0x00FB +#define MG23 (MG23_11PL & MG23_12PL & MG23_13PL & MG23_14PL & \ + MG23_15PL & MG23_16PL & MG23_17PL & MG23_18PL) +// End of MG23: + +// Beginning of MG24: +#if (G21PL >= G24PL) || (G21PL == 0) +#define MG24_11PL ~(1) +#else +#define MG24_11PL 0xFFFF +#endif +#if (G22PL >= G24PL) || (G22PL == 0) +#define MG24_12PL ~(1 << 1) +#else +#define MG24_12PL 0xFFFF +#endif +#if (G23PL >= G24PL) || (G23PL == 0) +#define MG24_13PL ~(1 << 2) +#else +#define MG24_13PL 0xFFFF +#endif +#if (G25PL >= G24PL) || (G25PL == 0) +#define MG24_15PL ~(1 << 4) +#else +#define MG24_15PL 0xFFFF +#endif +#if (G26PL >= G24PL) || (G26PL == 0) +#define MG24_16PL ~(1 << 5) +#else +#define MG24_16PL 0xFFFF +#endif +#if (G27PL >= G24PL) || (G27PL == 0) +#define MG24_17PL ~(1 << 6) +#else +#define MG24_17PL 0xFFFF +#endif +#if (G28PL >= G24PL) || (G28PL == 0) +#define MG24_18PL ~(1 << 7) +#else +#define MG24_18PL 0xFFFF +#endif +#define MG24_14PL 0x00F7 +#define MG24 (MG24_11PL & MG24_12PL & MG24_13PL & MG24_14PL & \ + MG24_15PL & MG24_16PL & MG24_17PL & MG24_18PL) +// End of MG24: + +// Beginning of MG25: +#if (G21PL >= G25PL) || (G21PL == 0) +#define MG25_11PL ~(1) +#else +#define MG25_11PL 0xFFFF +#endif +#if (G22PL >= G25PL) || (G22PL == 0) +#define MG25_12PL ~(1 << 1) +#else +#define MG25_12PL 0xFFFF +#endif +#if (G23PL >= G25PL) || (G23PL == 0) +#define MG25_13PL ~(1 << 2) +#else +#define MG25_13PL 0xFFFF +#endif +#if (G24PL >= G25PL) || (G24PL == 0) +#define MG25_14PL ~(1 << 3) +#else +#define MG25_14PL 0xFFFF +#endif +#if (G26PL >= G25PL) || (G26PL == 0) +#define MG25_16PL ~(1 << 5) +#else +#define MG25_16PL 0xFFFF +#endif +#if (G27PL >= G25PL) || (G27PL == 0) +#define MG25_17PL ~(1 << 6) +#else +#define MG25_17PL 0xFFFF +#endif +#if (G28PL >= G25PL) || (G28PL == 0) +#define MG25_18PL ~(1 << 7) +#else +#define MG25_18PL 0xFFFF +#endif +#define MG25_15PL 0x00EF +#define MG25 (MG25_11PL & MG25_12PL & MG25_13PL & MG25_14PL & \ + MG25_15PL & MG25_16PL & MG25_17PL & MG25_18PL) +// End of MG25: + +// Beginning of MG26: +#if (G21PL >= G26PL) || (G21PL == 0) +#define MG26_11PL ~(1) +#else +#define MG26_11PL 0xFFFF +#endif +#if (G22PL >= G26PL) || (G22PL == 0) +#define MG26_12PL ~(1 << 1) +#else +#define MG26_12PL 0xFFFF +#endif +#if (G23PL >= G26PL) || (G23PL == 0) +#define MG26_13PL ~(1 << 2) +#else +#define MG26_13PL 0xFFFF +#endif +#if (G24PL >= G26PL) || (G24PL == 0) +#define MG26_14PL ~(1 << 3) +#else +#define MG26_14PL 0xFFFF +#endif +#if (G25PL >= G26PL) || (G25PL == 0) +#define MG26_15PL ~(1 << 4) +#else +#define MG26_15PL 0xFFFF +#endif +#if (G27PL >= G26PL) || (G27PL == 0) +#define MG26_17PL ~(1 << 6) +#else +#define MG26_17PL 0xFFFF +#endif +#if (G28PL >= G26PL) || (G28PL == 0) +#define MG26_18PL ~(1 << 7) +#else +#define MG26_18PL 0xFFFF +#endif +#define MG26_16PL 0x00DF +#define MG26 (MG26_11PL & MG26_12PL & MG26_13PL & MG26_14PL & \ + MG26_15PL & MG26_16PL & MG26_17PL & MG26_18PL) +// End of MG26: + +// Beginning of MG27: +#if (G21PL >= G27PL) || (G21PL == 0) +#define MG27_11PL ~(1) +#else +#define MG27_11PL 0xFFFF +#endif +#if (G22PL >= G27PL) || (G22PL == 0) +#define MG27_12PL ~(1 << 1) +#else +#define MG27_12PL 0xFFFF +#endif +#if (G23PL >= G27PL) || (G23PL == 0) +#define MG27_13PL ~(1 << 2) +#else +#define MG27_13PL 0xFFFF +#endif +#if (G24PL >= G27PL) || (G24PL == 0) +#define MG27_14PL ~(1 << 3) +#else +#define MG27_14PL 0xFFFF +#endif +#if (G25PL >= G27PL) || (G25PL == 0) +#define MG27_15PL ~(1 << 4) +#else +#define MG27_15PL 0xFFFF +#endif +#if (G26PL >= G27PL) || (G26PL == 0) +#define MG27_16PL ~(1 << 5) +#else +#define MG27_16PL 0xFFFF +#endif +#if (G28PL >= G27PL) || (G28PL == 0) +#define MG27_18PL ~(1 << 7) +#else +#define MG27_18PL 0xFFFF +#endif +#define MG27_17PL 0x00BF +#define MG27 (MG27_11PL & MG27_12PL & MG27_13PL & MG27_14PL & \ + MG27_15PL & MG27_16PL & MG27_17PL & MG27_18PL) +// End of MG27: + +// Beginning of MG28: +#if (G21PL >= G28PL) || (G21PL == 0) +#define MG28_11PL ~(1) +#else +#define MG28_11PL 0xFFFF +#endif +#if (G22PL >= G28PL) || (G22PL == 0) +#define MG28_12PL ~(1 << 1) +#else +#define MG28_12PL 0xFFFF +#endif +#if (G23PL >= G28PL) || (G23PL == 0) +#define MG28_13PL ~(1 << 2) +#else +#define MG28_13PL 0xFFFF +#endif +#if (G24PL >= G28PL) || (G24PL == 0) +#define MG28_14PL ~(1 << 3) +#else +#define MG28_14PL 0xFFFF +#endif +#if (G25PL >= G28PL) || (G25PL == 0) +#define MG28_15PL ~(1 << 4) +#else +#define MG28_15PL 0xFFFF +#endif +#if (G26PL >= G28PL) || (G26PL == 0) +#define MG28_16PL ~(1 << 5) +#else +#define MG28_16PL 0xFFFF +#endif +#if (G27PL >= G28PL) || (G27PL == 0) +#define MG28_17PL ~(1 << 6) +#else +#define MG28_17PL 0xFFFF +#endif +#define MG28_18PL 0x007F +#define MG28 (MG28_11PL & MG28_12PL & MG28_13PL & MG28_14PL & \ + MG28_15PL & MG28_16PL & MG28_17PL & MG28_18PL) +// End of MG28: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG31 to MG38: +// + +// Beginning of MG31: +#if (G32PL >= G31PL) || (G32PL == 0) +#define MG31_12PL ~(1 << 1) +#else +#define MG31_12PL 0xFFFF +#endif +#if (G33PL >= G31PL) || (G33PL == 0) +#define MG31_13PL ~(1 << 2) +#else +#define MG31_13PL 0xFFFF +#endif +#if (G34PL >= G31PL) || (G34PL == 0) +#define MG31_14PL ~(1 << 3) +#else +#define MG31_14PL 0xFFFF +#endif +#if (G35PL >= G31PL) || (G35PL == 0) +#define MG31_15PL ~(1 << 4) +#else +#define MG31_15PL 0xFFFF +#endif +#if (G36PL >= G31PL) || (G36PL == 0) +#define MG31_16PL ~(1 << 5) +#else +#define MG31_16PL 0xFFFF +#endif +#if (G37PL >= G31PL) || (G37PL == 0) +#define MG31_17PL ~(1 << 6) +#else +#define MG31_17PL 0xFFFF +#endif +#if (G38PL >= G31PL) || (G38PL == 0) +#define MG31_18PL ~(1 << 7) +#else +#define MG31_18PL 0xFFFF +#endif +#define MG31_11PL 0x00FE +#define MG31 (MG31_11PL & MG31_12PL & MG31_13PL & MG31_14PL & \ + MG31_15PL & MG31_16PL & MG31_17PL & MG31_18PL) +// End of MG31: + +// Beginning of MG32: +#if (G31PL >= G32PL) || (G31PL == 0) +#define MG32_11PL ~(1) +#else +#define MG32_11PL 0xFFFF +#endif +#if (G33PL >= G32PL) || (G33PL == 0) +#define MG32_13PL ~(1 << 2) +#else +#define MG32_13PL 0xFFFF +#endif +#if (G34PL >= G32PL) || (G34PL == 0) +#define MG32_14PL ~(1 << 3) +#else +#define MG32_14PL 0xFFFF +#endif +#if (G35PL >= G32PL) || (G35PL == 0) +#define MG32_15PL ~(1 << 4) +#else +#define MG32_15PL 0xFFFF +#endif +#if (G36PL >= G32PL) || (G36PL == 0) +#define MG32_16PL ~(1 << 5) +#else +#define MG32_16PL 0xFFFF +#endif +#if (G37PL >= G32PL) || (G37PL == 0) +#define MG32_17PL ~(1 << 6) +#else +#define MG32_17PL 0xFFFF +#endif +#if (G38PL >= G32PL) || (G38PL == 0) +#define MG32_18PL ~(1 << 7) +#else +#define MG32_18PL 0xFFFF +#endif +#define MG32_12PL 0x00FD +#define MG32 (MG32_11PL & MG32_12PL & MG32_13PL & MG32_14PL & \ + MG32_15PL & MG32_16PL & MG32_17PL & MG32_18PL) +// End of MG32: + +// Beginning of MG33: +#if (G31PL >= G33PL) || (G31PL == 0) +#define MG33_11PL ~(1) +#else +#define MG33_11PL 0xFFFF +#endif +#if (G32PL >= G33PL) || (G32PL == 0) +#define MG33_12PL ~(1 << 1) +#else +#define MG33_12PL 0xFFFF +#endif +#if (G34PL >= G33PL) || (G34PL == 0) +#define MG33_14PL ~(1 << 3) +#else +#define MG33_14PL 0xFFFF +#endif +#if (G35PL >= G33PL) || (G35PL == 0) +#define MG33_15PL ~(1 << 4) +#else +#define MG33_15PL 0xFFFF +#endif +#if (G36PL >= G33PL) || (G36PL == 0) +#define MG33_16PL ~(1 << 5) +#else +#define MG33_16PL 0xFFFF +#endif +#if (G37PL >= G33PL) || (G37PL == 0) +#define MG33_17PL ~(1 << 6) +#else +#define MG33_17PL 0xFFFF +#endif +#if (G38PL >= G33PL) || (G38PL == 0) +#define MG33_18PL ~(1 << 7) +#else +#define MG33_18PL 0xFFFF +#endif +#define MG33_13PL 0x00FB +#define MG33 (MG33_11PL & MG33_12PL & MG33_13PL & MG33_14PL & \ + MG33_15PL & MG33_16PL & MG33_17PL & MG33_18PL) +// End of MG33: + +// Beginning of MG34: +#if (G31PL >= G34PL) || (G31PL == 0) +#define MG34_11PL ~(1) +#else +#define MG34_11PL 0xFFFF +#endif +#if (G32PL >= G34PL) || (G32PL == 0) +#define MG34_12PL ~(1 << 1) +#else +#define MG34_12PL 0xFFFF +#endif +#if (G33PL >= G34PL) || (G33PL == 0) +#define MG34_13PL ~(1 << 2) +#else +#define MG34_13PL 0xFFFF +#endif +#if (G35PL >= G34PL) || (G35PL == 0) +#define MG34_15PL ~(1 << 4) +#else +#define MG34_15PL 0xFFFF +#endif +#if (G36PL >= G34PL) || (G36PL == 0) +#define MG34_16PL ~(1 << 5) +#else +#define MG34_16PL 0xFFFF +#endif +#if (G37PL >= G34PL) || (G37PL == 0) +#define MG34_17PL ~(1 << 6) +#else +#define MG34_17PL 0xFFFF +#endif +#if (G38PL >= G34PL) || (G38PL == 0) +#define MG34_18PL ~(1 << 7) +#else +#define MG34_18PL 0xFFFF +#endif +#define MG34_14PL 0x00F7 +#define MG34 (MG34_11PL & MG34_12PL & MG34_13PL & MG34_14PL & \ + MG34_15PL & MG34_16PL & MG34_17PL & MG34_18PL) +// End of MG34: + +// Beginning of MG35: +#if (G31PL >= G35PL) || (G31PL == 0) +#define MG35_11PL ~(1) +#else +#define MG35_11PL 0xFFFF +#endif +#if (G32PL >= G35PL) || (G32PL == 0) +#define MG35_12PL ~(1 << 1) +#else +#define MG35_12PL 0xFFFF +#endif +#if (G33PL >= G35PL) || (G33PL == 0) +#define MG35_13PL ~(1 << 2) +#else +#define MG35_13PL 0xFFFF +#endif +#if (G34PL >= G35PL) || (G34PL == 0) +#define MG35_14PL ~(1 << 3) +#else +#define MG35_14PL 0xFFFF +#endif +#if (G36PL >= G35PL) || (G36PL == 0) +#define MG35_16PL ~(1 << 5) +#else +#define MG35_16PL 0xFFFF +#endif +#if (G37PL >= G35PL) || (G37PL == 0) +#define MG35_17PL ~(1 << 6) +#else +#define MG35_17PL 0xFFFF +#endif +#if (G38PL >= G35PL) || (G38PL == 0) +#define MG35_18PL ~(1 << 7) +#else +#define MG35_18PL 0xFFFF +#endif +#define MG35_15PL 0x00EF +#define MG35 (MG35_11PL & MG35_12PL & MG35_13PL & MG35_14PL & \ + MG35_15PL & MG35_16PL & MG35_17PL & MG35_18PL) +// End of MG35: + +// Beginning of MG36: +#if (G31PL >= G36PL) || (G31PL == 0) +#define MG36_11PL ~(1) +#else +#define MG36_11PL 0xFFFF +#endif +#if (G32PL >= G36PL) || (G32PL == 0) +#define MG36_12PL ~(1 << 1) +#else +#define MG36_12PL 0xFFFF +#endif +#if (G33PL >= G36PL) || (G33PL == 0) +#define MG36_13PL ~(1 << 2) +#else +#define MG36_13PL 0xFFFF +#endif +#if (G34PL >= G36PL) || (G34PL == 0) +#define MG36_14PL ~(1 << 3) +#else +#define MG36_14PL 0xFFFF +#endif +#if (G35PL >= G36PL) || (G35PL == 0) +#define MG36_15PL ~(1 << 4) +#else +#define MG36_15PL 0xFFFF +#endif +#if (G37PL >= G36PL) || (G37PL == 0) +#define MG36_17PL ~(1 << 6) +#else +#define MG36_17PL 0xFFFF +#endif +#if (G38PL >= G36PL) || (G38PL == 0) +#define MG36_18PL ~(1 << 7) +#else +#define MG36_18PL 0xFFFF +#endif +#define MG36_16PL 0x00DF +#define MG36 (MG36_11PL & MG36_12PL & MG36_13PL & MG36_14PL & \ + MG36_15PL & MG36_16PL & MG36_17PL & MG36_18PL) +// End of MG36: + +// Beginning of MG37: +#if (G31PL >= G37PL) || (G31PL == 0) +#define MG37_11PL ~(1) +#else +#define MG37_11PL 0xFFFF +#endif +#if (G32PL >= G37PL) || (G32PL == 0) +#define MG37_12PL ~(1 << 1) +#else +#define MG37_12PL 0xFFFF +#endif +#if (G33PL >= G37PL) || (G33PL == 0) +#define MG37_13PL ~(1 << 2) +#else +#define MG37_13PL 0xFFFF +#endif +#if (G34PL >= G37PL) || (G34PL == 0) +#define MG37_14PL ~(1 << 3) +#else +#define MG37_14PL 0xFFFF +#endif +#if (G35PL >= G37PL) || (G35PL == 0) +#define MG37_15PL ~(1 << 4) +#else +#define MG37_15PL 0xFFFF +#endif +#if (G36PL >= G37PL) || (G36PL == 0) +#define MG37_16PL ~(1 << 5) +#else +#define MG37_16PL 0xFFFF +#endif +#if (G38PL >= G37PL) || (G38PL == 0) +#define MG37_18PL ~(1 << 7) +#else +#define MG37_18PL 0xFFFF +#endif +#define MG37_17PL 0x00BF +#define MG37 (MG37_11PL & MG37_12PL & MG37_13PL & MG37_14PL & \ + MG37_15PL & MG37_16PL & MG37_17PL & MG37_18PL) +// End of MG37: + +// Beginning of MG38: +#if (G31PL >= G38PL) || (G31PL == 0) +#define MG38_11PL ~(1) +#else +#define MG38_11PL 0xFFFF +#endif +#if (G32PL >= G38PL) || (G32PL == 0) +#define MG38_12PL ~(1 << 1) +#else +#define MG38_12PL 0xFFFF +#endif +#if (G33PL >= G38PL) || (G33PL == 0) +#define MG38_13PL ~(1 << 2) +#else +#define MG38_13PL 0xFFFF +#endif +#if (G34PL >= G38PL) || (G34PL == 0) +#define MG38_14PL ~(1 << 3) +#else +#define MG38_14PL 0xFFFF +#endif +#if (G35PL >= G38PL) || (G35PL == 0) +#define MG38_15PL ~(1 << 4) +#else +#define MG38_15PL 0xFFFF +#endif +#if (G36PL >= G38PL) || (G36PL == 0) +#define MG38_16PL ~(1 << 5) +#else +#define MG38_16PL 0xFFFF +#endif +#if (G37PL >= G38PL) || (G37PL == 0) +#define MG38_17PL ~(1 << 6) +#else +#define MG38_17PL 0xFFFF +#endif +#define MG38_18PL 0x007F +#define MG38 (MG38_11PL & MG38_12PL & MG38_13PL & MG38_14PL & \ + MG38_15PL & MG38_16PL & MG38_17PL & MG38_18PL) +// End of MG38: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG41 to MG48: +// + +// Beginning of MG41: +#if (G42PL >= G41PL) || (G42PL == 0) +#define MG41_12PL ~(1 << 1) +#else +#define MG41_12PL 0xFFFF +#endif +#if (G43PL >= G41PL) || (G43PL == 0) +#define MG41_13PL ~(1 << 2) +#else +#define MG41_13PL 0xFFFF +#endif +#if (G44PL >= G41PL) || (G44PL == 0) +#define MG41_14PL ~(1 << 3) +#else +#define MG41_14PL 0xFFFF +#endif +#if (G45PL >= G41PL) || (G45PL == 0) +#define MG41_15PL ~(1 << 4) +#else +#define MG41_15PL 0xFFFF +#endif +#if (G46PL >= G41PL) || (G46PL == 0) +#define MG41_16PL ~(1 << 5) +#else +#define MG41_16PL 0xFFFF +#endif +#if (G47PL >= G41PL) || (G47PL == 0) +#define MG41_17PL ~(1 << 6) +#else +#define MG41_17PL 0xFFFF +#endif +#if (G48PL >= G41PL) || (G48PL == 0) +#define MG41_18PL ~(1 << 7) +#else +#define MG41_18PL 0xFFFF +#endif +#define MG41_11PL 0x00FE +#define MG41 (MG41_11PL & MG41_12PL & MG41_13PL & MG41_14PL & \ + MG41_15PL & MG41_16PL & MG41_17PL & MG41_18PL) +// End of MG41: + +// Beginning of MG42: +#if (G41PL >= G42PL) || (G41PL == 0) +#define MG42_11PL ~(1) +#else +#define MG42_11PL 0xFFFF +#endif +#if (G43PL >= G42PL) || (G43PL == 0) +#define MG42_13PL ~(1 << 2) +#else +#define MG42_13PL 0xFFFF +#endif +#if (G44PL >= G42PL) || (G44PL == 0) +#define MG42_14PL ~(1 << 3) +#else +#define MG42_14PL 0xFFFF +#endif +#if (G45PL >= G42PL) || (G45PL == 0) +#define MG42_15PL ~(1 << 4) +#else +#define MG42_15PL 0xFFFF +#endif +#if (G46PL >= G42PL) || (G46PL == 0) +#define MG42_16PL ~(1 << 5) +#else +#define MG42_16PL 0xFFFF +#endif +#if (G47PL >= G42PL) || (G47PL == 0) +#define MG42_17PL ~(1 << 6) +#else +#define MG42_17PL 0xFFFF +#endif +#if (G48PL >= G42PL) || (G48PL == 0) +#define MG42_18PL ~(1 << 7) +#else +#define MG42_18PL 0xFFFF +#endif +#define MG42_12PL 0x00FD +#define MG42 (MG42_11PL & MG42_12PL & MG42_13PL & MG42_14PL & \ + MG42_15PL & MG42_16PL & MG42_17PL & MG42_18PL) +// End of MG42: + +// Beginning of MG43: +#if (G41PL >= G43PL) || (G41PL == 0) +#define MG43_11PL ~(1) +#else +#define MG43_11PL 0xFFFF +#endif +#if (G42PL >= G43PL) || (G42PL == 0) +#define MG43_12PL ~(1 << 1) +#else +#define MG43_12PL 0xFFFF +#endif +#if (G44PL >= G43PL) || (G44PL == 0) +#define MG43_14PL ~(1 << 3) +#else +#define MG43_14PL 0xFFFF +#endif +#if (G45PL >= G43PL) || (G45PL == 0) +#define MG43_15PL ~(1 << 4) +#else +#define MG43_15PL 0xFFFF +#endif +#if (G46PL >= G43PL) || (G46PL == 0) +#define MG43_16PL ~(1 << 5) +#else +#define MG43_16PL 0xFFFF +#endif +#if (G47PL >= G43PL) || (G47PL == 0) +#define MG43_17PL ~(1 << 6) +#else +#define MG43_17PL 0xFFFF +#endif +#if (G48PL >= G43PL) || (G48PL == 0) +#define MG43_18PL ~(1 << 7) +#else +#define MG43_18PL 0xFFFF +#endif +#define MG43_13PL 0x00FB +#define MG43 (MG43_11PL & MG43_12PL & MG43_13PL & MG43_14PL & \ + MG43_15PL & MG43_16PL & MG43_17PL & MG43_18PL) +// End of MG43: + +// Beginning of MG44: +#if (G41PL >= G44PL) || (G41PL == 0) +#define MG44_11PL ~(1) +#else +#define MG44_11PL 0xFFFF +#endif +#if (G42PL >= G44PL) || (G42PL == 0) +#define MG44_12PL ~(1 << 1) +#else +#define MG44_12PL 0xFFFF +#endif +#if (G43PL >= G44PL) || (G43PL == 0) +#define MG44_13PL ~(1 << 2) +#else +#define MG44_13PL 0xFFFF +#endif +#if (G45PL >= G44PL) || (G45PL == 0) +#define MG44_15PL ~(1 << 4) +#else +#define MG44_15PL 0xFFFF +#endif +#if (G46PL >= G44PL) || (G46PL == 0) +#define MG44_16PL ~(1 << 5) +#else +#define MG44_16PL 0xFFFF +#endif +#if (G47PL >= G44PL) || (G47PL == 0) +#define MG44_17PL ~(1 << 6) +#else +#define MG44_17PL 0xFFFF +#endif +#if (G48PL >= G44PL) || (G48PL == 0) +#define MG44_18PL ~(1 << 7) +#else +#define MG44_18PL 0xFFFF +#endif +#define MG44_14PL 0x00F7 +#define MG44 (MG44_11PL & MG44_12PL & MG44_13PL & MG44_14PL & \ + MG44_15PL & MG44_16PL & MG44_17PL & MG44_18PL) +// End of MG44: + +// Beginning of MG45: +#if (G41PL >= G45PL) || (G41PL == 0) +#define MG45_11PL ~(1) +#else +#define MG45_11PL 0xFFFF +#endif +#if (G42PL >= G45PL) || (G42PL == 0) +#define MG45_12PL ~(1 << 1) +#else +#define MG45_12PL 0xFFFF +#endif +#if (G43PL >= G45PL) || (G43PL == 0) +#define MG45_13PL ~(1 << 2) +#else +#define MG45_13PL 0xFFFF +#endif +#if (G44PL >= G45PL) || (G44PL == 0) +#define MG45_14PL ~(1 << 3) +#else +#define MG45_14PL 0xFFFF +#endif +#if (G46PL >= G45PL) || (G46PL == 0) +#define MG45_16PL ~(1 << 5) +#else +#define MG45_16PL 0xFFFF +#endif +#if (G47PL >= G45PL) || (G47PL == 0) +#define MG45_17PL ~(1 << 6) +#else +#define MG45_17PL 0xFFFF +#endif +#if (G48PL >= G45PL) || (G48PL == 0) +#define MG45_18PL ~(1 << 7) +#else +#define MG45_18PL 0xFFFF +#endif +#define MG45_15PL 0x00EF +#define MG45 (MG45_11PL & MG45_12PL & MG45_13PL & MG45_14PL & \ + MG45_15PL & MG45_16PL & MG45_17PL & MG45_18PL) +// End of MG45: + +// Beginning of MG46: +#if (G41PL >= G46PL) || (G41PL == 0) +#define MG46_11PL ~(1) +#else +#define MG46_11PL 0xFFFF +#endif +#if (G42PL >= G46PL) || (G42PL == 0) +#define MG46_12PL ~(1 << 1) +#else +#define MG46_12PL 0xFFFF +#endif +#if (G43PL >= G46PL) || (G43PL == 0) +#define MG46_13PL ~(1 << 2) +#else +#define MG46_13PL 0xFFFF +#endif +#if (G44PL >= G46PL) || (G44PL == 0) +#define MG46_14PL ~(1 << 3) +#else +#define MG46_14PL 0xFFFF +#endif +#if (G45PL >= G46PL) || (G45PL == 0) +#define MG46_15PL ~(1 << 4) +#else +#define MG46_15PL 0xFFFF +#endif +#if (G47PL >= G46PL) || (G47PL == 0) +#define MG46_17PL ~(1 << 6) +#else +#define MG46_17PL 0xFFFF +#endif +#if (G48PL >= G46PL) || (G48PL == 0) +#define MG46_18PL ~(1 << 7) +#else +#define MG46_18PL 0xFFFF +#endif +#define MG46_16PL 0x00DF +#define MG46 (MG46_11PL & MG46_12PL & MG46_13PL & MG46_14PL & \ + MG46_15PL & MG46_16PL & MG46_17PL & MG46_18PL) +// End of MG46: + +// Beginning of MG47: +#if (G41PL >= G47PL) || (G41PL == 0) +#define MG47_11PL ~(1) +#else +#define MG47_11PL 0xFFFF +#endif +#if (G42PL >= G47PL) || (G42PL == 0) +#define MG47_12PL ~(1 << 1) +#else +#define MG47_12PL 0xFFFF +#endif +#if (G43PL >= G47PL) || (G43PL == 0) +#define MG47_13PL ~(1 << 2) +#else +#define MG47_13PL 0xFFFF +#endif +#if (G44PL >= G47PL) || (G44PL == 0) +#define MG47_14PL ~(1 << 3) +#else +#define MG47_14PL 0xFFFF +#endif +#if (G45PL >= G47PL) || (G45PL == 0) +#define MG47_15PL ~(1 << 4) +#else +#define MG47_15PL 0xFFFF +#endif +#if (G46PL >= G47PL) || (G46PL == 0) +#define MG47_16PL ~(1 << 5) +#else +#define MG47_16PL 0xFFFF +#endif +#if (G48PL >= G47PL) || (G48PL == 0) +#define MG47_18PL ~(1 << 7) +#else +#define MG47_18PL 0xFFFF +#endif +#define MG47_17PL 0x00BF +#define MG47 (MG47_11PL & MG47_12PL & MG47_13PL & MG47_14PL & \ + MG47_15PL & MG47_16PL & MG47_17PL & MG47_18PL) +// End of MG47: + +// Beginning of MG48: +#if (G41PL >= G48PL) || (G41PL == 0) +#define MG48_11PL ~(1) +#else +#define MG48_11PL 0xFFFF +#endif +#if (G42PL >= G48PL) || (G42PL == 0) +#define MG48_12PL ~(1 << 1) +#else +#define MG48_12PL 0xFFFF +#endif +#if (G43PL >= G48PL) || (G43PL == 0) +#define MG48_13PL ~(1 << 2) +#else +#define MG48_13PL 0xFFFF +#endif +#if (G44PL >= G48PL) || (G44PL == 0) +#define MG48_14PL ~(1 << 3) +#else +#define MG48_14PL 0xFFFF +#endif +#if (G45PL >= G48PL) || (G45PL == 0) +#define MG48_15PL ~(1 << 4) +#else +#define MG48_15PL 0xFFFF +#endif +#if (G46PL >= G48PL) || (G46PL == 0) +#define MG48_16PL ~(1 << 5) +#else +#define MG48_16PL 0xFFFF +#endif +#if (G47PL >= G48PL) || (G47PL == 0) +#define MG48_17PL ~(1 << 6) +#else +#define MG48_17PL 0xFFFF +#endif +#define MG48_18PL 0x007F +#define MG48 (MG48_11PL & MG48_12PL & MG48_13PL & MG48_14PL & \ + MG48_15PL & MG48_16PL & MG48_17PL & MG48_18PL) +// End of MG48: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG51 to MG58: +// + +// Beginning of MG51: +#if (G52PL >= G51PL) || (G52PL == 0) +#define MG51_12PL ~(1 << 1) +#else +#define MG51_12PL 0xFFFF +#endif +#if (G53PL >= G51PL) || (G53PL == 0) +#define MG51_13PL ~(1 << 2) +#else +#define MG51_13PL 0xFFFF +#endif +#if (G54PL >= G51PL) || (G54PL == 0) +#define MG51_14PL ~(1 << 3) +#else +#define MG51_14PL 0xFFFF +#endif +#if (G55PL >= G51PL) || (G55PL == 0) +#define MG51_15PL ~(1 << 4) +#else +#define MG51_15PL 0xFFFF +#endif +#if (G56PL >= G51PL) || (G56PL == 0) +#define MG51_16PL ~(1 << 5) +#else +#define MG51_16PL 0xFFFF +#endif +#if (G57PL >= G51PL) || (G57PL == 0) +#define MG51_17PL ~(1 << 6) +#else +#define MG51_17PL 0xFFFF +#endif +#if (G58PL >= G51PL) || (G58PL == 0) +#define MG51_18PL ~(1 << 7) +#else +#define MG51_18PL 0xFFFF +#endif +#define MG51_11PL 0x00FE +#define MG51 (MG51_11PL & MG51_12PL & MG51_13PL & MG51_14PL & \ + MG51_15PL & MG51_16PL & MG51_17PL & MG51_18PL) +// End of MG51: + +// Beginning of MG52: +#if (G51PL >= G52PL) || (G51PL == 0) +#define MG52_11PL ~(1) +#else +#define MG52_11PL 0xFFFF +#endif +#if (G53PL >= G52PL) || (G53PL == 0) +#define MG52_13PL ~(1 << 2) +#else +#define MG52_13PL 0xFFFF +#endif +#if (G54PL >= G52PL) || (G54PL == 0) +#define MG52_14PL ~(1 << 3) +#else +#define MG52_14PL 0xFFFF +#endif +#if (G55PL >= G52PL) || (G55PL == 0) +#define MG52_15PL ~(1 << 4) +#else +#define MG52_15PL 0xFFFF +#endif +#if (G56PL >= G52PL) || (G56PL == 0) +#define MG52_16PL ~(1 << 5) +#else +#define MG52_16PL 0xFFFF +#endif +#if (G57PL >= G52PL) || (G57PL == 0) +#define MG52_17PL ~(1 << 6) +#else +#define MG52_17PL 0xFFFF +#endif +#if (G58PL >= G52PL) || (G58PL == 0) +#define MG52_18PL ~(1 << 7) +#else +#define MG52_18PL 0xFFFF +#endif +#define MG52_12PL 0x00FD +#define MG52 (MG52_11PL & MG52_12PL & MG52_13PL & MG52_14PL & \ + MG52_15PL & MG52_16PL & MG52_17PL & MG52_18PL) +// End of MG52: + +// Beginning of MG53: +#if (G51PL >= G53PL) || (G51PL == 0) +#define MG53_11PL ~(1) +#else +#define MG53_11PL 0xFFFF +#endif +#if (G52PL >= G53PL) || (G52PL == 0) +#define MG53_12PL ~(1 << 1) +#else +#define MG53_12PL 0xFFFF +#endif +#if (G54PL >= G53PL) || (G54PL == 0) +#define MG53_14PL ~(1 << 3) +#else +#define MG53_14PL 0xFFFF +#endif +#if (G55PL >= G53PL) || (G55PL == 0) +#define MG53_15PL ~(1 << 4) +#else +#define MG53_15PL 0xFFFF +#endif +#if (G56PL >= G53PL) || (G56PL == 0) +#define MG53_16PL ~(1 << 5) +#else +#define MG53_16PL 0xFFFF +#endif +#if (G57PL >= G53PL) || (G57PL == 0) +#define MG53_17PL ~(1 << 6) +#else +#define MG53_17PL 0xFFFF +#endif +#if (G58PL >= G53PL) || (G58PL == 0) +#define MG53_18PL ~(1 << 7) +#else +#define MG53_18PL 0xFFFF +#endif +#define MG53_13PL 0x00FB +#define MG53 (MG53_11PL & MG53_12PL & MG53_13PL & MG53_14PL & \ + MG53_15PL & MG53_16PL & MG53_17PL & MG53_18PL) +// End of MG53: + +// Beginning of MG54: +#if (G51PL >= G54PL) || (G51PL == 0) +#define MG54_11PL ~(1) +#else +#define MG54_11PL 0xFFFF +#endif +#if (G52PL >= G54PL) || (G52PL == 0) +#define MG54_12PL ~(1 << 1) +#else +#define MG54_12PL 0xFFFF +#endif +#if (G53PL >= G54PL) || (G53PL == 0) +#define MG54_13PL ~(1 << 2) +#else +#define MG54_13PL 0xFFFF +#endif +#if (G55PL >= G54PL) || (G55PL == 0) +#define MG54_15PL ~(1 << 4) +#else +#define MG54_15PL 0xFFFF +#endif +#if (G56PL >= G54PL) || (G56PL == 0) +#define MG54_16PL ~(1 << 5) +#else +#define MG54_16PL 0xFFFF +#endif +#if (G57PL >= G54PL) || (G57PL == 0) +#define MG54_17PL ~(1 << 6) +#else +#define MG54_17PL 0xFFFF +#endif +#if (G58PL >= G54PL) || (G58PL == 0) +#define MG54_18PL ~(1 << 7) +#else +#define MG54_18PL 0xFFFF +#endif +#define MG54_14PL 0x00F7 +#define MG54 (MG54_11PL & MG54_12PL & MG54_13PL & MG54_14PL & \ + MG54_15PL & MG54_16PL & MG54_17PL & MG54_18PL) +// End of MG54: + +// Beginning of MG55: +#if (G51PL >= G55PL) || (G51PL == 0) +#define MG55_11PL ~(1) +#else +#define MG55_11PL 0xFFFF +#endif +#if (G52PL >= G55PL) || (G52PL == 0) +#define MG55_12PL ~(1 << 1) +#else +#define MG55_12PL 0xFFFF +#endif +#if (G53PL >= G55PL) || (G53PL == 0) +#define MG55_13PL ~(1 << 2) +#else +#define MG55_13PL 0xFFFF +#endif +#if (G54PL >= G55PL) || (G54PL == 0) +#define MG55_14PL ~(1 << 3) +#else +#define MG55_14PL 0xFFFF +#endif +#if (G56PL >= G55PL) || (G56PL == 0) +#define MG55_16PL ~(1 << 5) +#else +#define MG55_16PL 0xFFFF +#endif +#if (G57PL >= G55PL) || (G57PL == 0) +#define MG55_17PL ~(1 << 6) +#else +#define MG55_17PL 0xFFFF +#endif +#if (G58PL >= G55PL) || (G58PL == 0) +#define MG55_18PL ~(1 << 7) +#else +#define MG55_18PL 0xFFFF +#endif +#define MG55_15PL 0x00EF +#define MG55 (MG55_11PL & MG55_12PL & MG55_13PL & MG55_14PL & \ + MG55_15PL & MG55_16PL & MG55_17PL & MG55_18PL) +// End of MG55: + +// Beginning of MG56: +#if (G51PL >= G56PL) || (G51PL == 0) +#define MG56_11PL ~(1) +#else +#define MG56_11PL 0xFFFF +#endif +#if (G52PL >= G56PL) || (G52PL == 0) +#define MG56_12PL ~(1 << 1) +#else +#define MG56_12PL 0xFFFF +#endif +#if (G53PL >= G56PL) || (G53PL == 0) +#define MG56_13PL ~(1 << 2) +#else +#define MG56_13PL 0xFFFF +#endif +#if (G54PL >= G56PL) || (G54PL == 0) +#define MG56_14PL ~(1 << 3) +#else +#define MG56_14PL 0xFFFF +#endif +#if (G55PL >= G56PL) || (G55PL == 0) +#define MG56_15PL ~(1 << 4) +#else +#define MG56_15PL 0xFFFF +#endif +#if (G57PL >= G56PL) || (G57PL == 0) +#define MG56_17PL ~(1 << 6) +#else +#define MG56_17PL 0xFFFF +#endif +#if (G58PL >= G56PL) || (G58PL == 0) +#define MG56_18PL ~(1 << 7) +#else +#define MG56_18PL 0xFFFF +#endif +#define MG56_16PL 0x00DF +#define MG56 (MG56_11PL & MG56_12PL & MG56_13PL & MG56_14PL & \ + MG56_15PL & MG56_16PL & MG56_17PL & MG56_18PL) +// End of MG56: + +// Beginning of MG57: +#if (G51PL >= G57PL) || (G51PL == 0) +#define MG57_11PL ~(1) +#else +#define MG57_11PL 0xFFFF +#endif +#if (G52PL >= G57PL) || (G52PL == 0) +#define MG57_12PL ~(1 << 1) +#else +#define MG57_12PL 0xFFFF +#endif +#if (G53PL >= G57PL) || (G53PL == 0) +#define MG57_13PL ~(1 << 2) +#else +#define MG57_13PL 0xFFFF +#endif +#if (G54PL >= G57PL) || (G54PL == 0) +#define MG57_14PL ~(1 << 3) +#else +#define MG57_14PL 0xFFFF +#endif +#if (G55PL >= G57PL) || (G55PL == 0) +#define MG57_15PL ~(1 << 4) +#else +#define MG57_15PL 0xFFFF +#endif +#if (G56PL >= G57PL) || (G56PL == 0) +#define MG57_16PL ~(1 << 5) +#else +#define MG57_16PL 0xFFFF +#endif +#if (G58PL >= G57PL) || (G58PL == 0) +#define MG57_18PL ~(1 << 7) +#else +#define MG57_18PL 0xFFFF +#endif +#define MG57_17PL 0x00BF +#define MG57 (MG57_11PL & MG57_12PL & MG57_13PL & MG57_14PL & \ + MG57_15PL & MG57_16PL & MG57_17PL & MG57_18PL) +// End of MG57: + +// Beginning of MG58: +#if (G51PL >= G58PL) || (G51PL == 0) +#define MG58_11PL ~(1) +#else +#define MG58_11PL 0xFFFF +#endif +#if (G52PL >= G58PL) || (G52PL == 0) +#define MG58_12PL ~(1 << 1) +#else +#define MG58_12PL 0xFFFF +#endif +#if (G53PL >= G58PL) || (G53PL == 0) +#define MG58_13PL ~(1 << 2) +#else +#define MG58_13PL 0xFFFF +#endif +#if (G54PL >= G58PL) || (G54PL == 0) +#define MG58_14PL ~(1 << 3) +#else +#define MG58_14PL 0xFFFF +#endif +#if (G55PL >= G58PL) || (G55PL == 0) +#define MG58_15PL ~(1 << 4) +#else +#define MG58_15PL 0xFFFF +#endif +#if (G56PL >= G58PL) || (G56PL == 0) +#define MG58_16PL ~(1 << 5) +#else +#define MG58_16PL 0xFFFF +#endif +#if (G57PL >= G58PL) || (G57PL == 0) +#define MG58_17PL ~(1 << 6) +#else +#define MG58_17PL 0xFFFF +#endif +#define MG58_18PL 0x007F +#define MG58 (MG58_11PL & MG58_12PL & MG58_13PL & MG58_14PL & \ + MG58_15PL & MG58_16PL & MG58_17PL & MG58_18PL) +// End of MG58: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG61 to MG68: +// + +// Beginning of MG61: +#if (G62PL >= G61PL) || (G62PL == 0) +#define MG61_12PL ~(1 << 1) +#else +#define MG61_12PL 0xFFFF +#endif +#if (G63PL >= G61PL) || (G63PL == 0) +#define MG61_13PL ~(1 << 2) +#else +#define MG61_13PL 0xFFFF +#endif +#if (G64PL >= G61PL) || (G64PL == 0) +#define MG61_14PL ~(1 << 3) +#else +#define MG61_14PL 0xFFFF +#endif +#if (G65PL >= G61PL) || (G65PL == 0) +#define MG61_15PL ~(1 << 4) +#else +#define MG61_15PL 0xFFFF +#endif +#if (G66PL >= G61PL) || (G66PL == 0) +#define MG61_16PL ~(1 << 5) +#else +#define MG61_16PL 0xFFFF +#endif +#if (G67PL >= G61PL) || (G67PL == 0) +#define MG61_17PL ~(1 << 6) +#else +#define MG61_17PL 0xFFFF +#endif +#if (G68PL >= G61PL) || (G68PL == 0) +#define MG61_18PL ~(1 << 7) +#else +#define MG61_18PL 0xFFFF +#endif +#define MG61_11PL 0x00FE +#define MG61 (MG61_11PL & MG61_12PL & MG61_13PL & MG61_14PL & \ + MG61_15PL & MG61_16PL & MG61_17PL & MG61_18PL) +// End of MG61: + +// Beginning of MG62: +#if (G61PL >= G62PL) || (G61PL == 0) +#define MG62_11PL ~(1) +#else +#define MG62_11PL 0xFFFF +#endif +#if (G63PL >= G62PL) || (G63PL == 0) +#define MG62_13PL ~(1 << 2) +#else +#define MG62_13PL 0xFFFF +#endif +#if (G64PL >= G62PL) || (G64PL == 0) +#define MG62_14PL ~(1 << 3) +#else +#define MG62_14PL 0xFFFF +#endif +#if (G65PL >= G62PL) || (G65PL == 0) +#define MG62_15PL ~(1 << 4) +#else +#define MG62_15PL 0xFFFF +#endif +#if (G66PL >= G62PL) || (G66PL == 0) +#define MG62_16PL ~(1 << 5) +#else +#define MG62_16PL 0xFFFF +#endif +#if (G67PL >= G62PL) || (G67PL == 0) +#define MG62_17PL ~(1 << 6) +#else +#define MG62_17PL 0xFFFF +#endif +#if (G68PL >= G62PL) || (G68PL == 0) +#define MG62_18PL ~(1 << 7) +#else +#define MG62_18PL 0xFFFF +#endif +#define MG62_12PL 0x00FD +#define MG62 (MG62_11PL & MG62_12PL & MG62_13PL & MG62_14PL & \ + MG62_15PL & MG62_16PL & MG62_17PL & MG62_18PL) +// End of MG62: + +// Beginning of MG63: +#if (G61PL >= G63PL) || (G61PL == 0) +#define MG63_11PL ~(1) +#else +#define MG63_11PL 0xFFFF +#endif +#if (G62PL >= G63PL) || (G62PL == 0) +#define MG63_12PL ~(1 << 1) +#else +#define MG63_12PL 0xFFFF +#endif +#if (G64PL >= G63PL) || (G64PL == 0) +#define MG63_14PL ~(1 << 3) +#else +#define MG63_14PL 0xFFFF +#endif +#if (G65PL >= G63PL) || (G65PL == 0) +#define MG63_15PL ~(1 << 4) +#else +#define MG63_15PL 0xFFFF +#endif +#if (G66PL >= G63PL) || (G66PL == 0) +#define MG63_16PL ~(1 << 5) +#else +#define MG63_16PL 0xFFFF +#endif +#if (G67PL >= G63PL) || (G67PL == 0) +#define MG63_17PL ~(1 << 6) +#else +#define MG63_17PL 0xFFFF +#endif +#if (G68PL >= G63PL) || (G68PL == 0) +#define MG63_18PL ~(1 << 7) +#else +#define MG63_18PL 0xFFFF +#endif +#define MG63_13PL 0x00FB +#define MG63 (MG63_11PL & MG63_12PL & MG63_13PL & MG63_14PL & \ + MG63_15PL & MG63_16PL & MG63_17PL & MG63_18PL) +// End of MG63: + +// Beginning of MG64: +#if (G61PL >= G64PL) || (G61PL == 0) +#define MG64_11PL ~(1) +#else +#define MG64_11PL 0xFFFF +#endif +#if (G62PL >= G64PL) || (G62PL == 0) +#define MG64_12PL ~(1 << 1) +#else +#define MG64_12PL 0xFFFF +#endif +#if (G63PL >= G64PL) || (G63PL == 0) +#define MG64_13PL ~(1 << 2) +#else +#define MG64_13PL 0xFFFF +#endif +#if (G65PL >= G64PL) || (G65PL == 0) +#define MG64_15PL ~(1 << 4) +#else +#define MG64_15PL 0xFFFF +#endif +#if (G66PL >= G64PL) || (G66PL == 0) +#define MG64_16PL ~(1 << 5) +#else +#define MG64_16PL 0xFFFF +#endif +#if (G67PL >= G64PL) || (G67PL == 0) +#define MG64_17PL ~(1 << 6) +#else +#define MG64_17PL 0xFFFF +#endif +#if (G68PL >= G64PL) || (G68PL == 0) +#define MG64_18PL ~(1 << 7) +#else +#define MG64_18PL 0xFFFF +#endif +#define MG64_14PL 0x00F7 +#define MG64 (MG64_11PL & MG64_12PL & MG64_13PL & MG64_14PL & \ + MG64_15PL & MG64_16PL & MG64_17PL & MG64_18PL) +// End of MG64: + +// Beginning of MG65: +#if (G61PL >= G65PL) || (G61PL == 0) +#define MG65_11PL ~(1) +#else +#define MG65_11PL 0xFFFF +#endif +#if (G62PL >= G65PL) || (G62PL == 0) +#define MG65_12PL ~(1 << 1) +#else +#define MG65_12PL 0xFFFF +#endif +#if (G63PL >= G65PL) || (G63PL == 0) +#define MG65_13PL ~(1 << 2) +#else +#define MG65_13PL 0xFFFF +#endif +#if (G64PL >= G65PL) || (G64PL == 0) +#define MG65_14PL ~(1 << 3) +#else +#define MG65_14PL 0xFFFF +#endif +#if (G66PL >= G65PL) || (G66PL == 0) +#define MG65_16PL ~(1 << 5) +#else +#define MG65_16PL 0xFFFF +#endif +#if (G67PL >= G65PL) || (G67PL == 0) +#define MG65_17PL ~(1 << 6) +#else +#define MG65_17PL 0xFFFF +#endif +#if (G68PL >= G65PL) || (G68PL == 0) +#define MG65_18PL ~(1 << 7) +#else +#define MG65_18PL 0xFFFF +#endif +#define MG65_15PL 0x00EF +#define MG65 (MG65_11PL & MG65_12PL & MG65_13PL & MG65_14PL & \ + MG65_15PL & MG65_16PL & MG65_17PL & MG65_18PL) +// End of MG65: + +// Beginning of MG66: +#if (G61PL >= G66PL) || (G61PL == 0) +#define MG66_11PL ~(1) +#else +#define MG66_11PL 0xFFFF +#endif +#if (G62PL >= G66PL) || (G62PL == 0) +#define MG66_12PL ~(1 << 1) +#else +#define MG66_12PL 0xFFFF +#endif +#if (G63PL >= G66PL) || (G63PL == 0) +#define MG66_13PL ~(1 << 2) +#else +#define MG66_13PL 0xFFFF +#endif +#if (G64PL >= G66PL) || (G64PL == 0) +#define MG66_14PL ~(1 << 3) +#else +#define MG66_14PL 0xFFFF +#endif +#if (G65PL >= G66PL) || (G65PL == 0) +#define MG66_15PL ~(1 << 4) +#else +#define MG66_15PL 0xFFFF +#endif +#if (G67PL >= G66PL) || (G67PL == 0) +#define MG66_17PL ~(1 << 6) +#else +#define MG66_17PL 0xFFFF +#endif +#if (G68PL >= G66PL) || (G68PL == 0) +#define MG66_18PL ~(1 << 7) +#else +#define MG66_18PL 0xFFFF +#endif +#define MG66_16PL 0x00DF +#define MG66 (MG66_11PL & MG66_12PL & MG66_13PL & MG66_14PL & \ + MG66_15PL & MG66_16PL & MG66_17PL & MG66_18PL) +// End of MG66: + +// Beginning of MG67: +#if (G61PL >= G67PL) || (G61PL == 0) +#define MG67_11PL ~(1) +#else +#define MG67_11PL 0xFFFF +#endif +#if (G62PL >= G67PL) || (G62PL == 0) +#define MG67_12PL ~(1 << 1) +#else +#define MG67_12PL 0xFFFF +#endif +#if (G63PL >= G67PL) || (G63PL == 0) +#define MG67_13PL ~(1 << 2) +#else +#define MG67_13PL 0xFFFF +#endif +#if (G64PL >= G67PL) || (G64PL == 0) +#define MG67_14PL ~(1 << 3) +#else +#define MG67_14PL 0xFFFF +#endif +#if (G65PL >= G67PL) || (G65PL == 0) +#define MG67_15PL ~(1 << 4) +#else +#define MG67_15PL 0xFFFF +#endif +#if (G66PL >= G67PL) || (G66PL == 0) +#define MG67_16PL ~(1 << 5) +#else +#define MG67_16PL 0xFFFF +#endif +#if (G68PL >= G67PL) || (G68PL == 0) +#define MG67_18PL ~(1 << 7) +#else +#define MG67_18PL 0xFFFF +#endif +#define MG67_17PL 0x00BF +#define MG67 (MG67_11PL & MG67_12PL & MG67_13PL & MG67_14PL & \ + MG67_15PL & MG67_16PL & MG67_17PL & MG67_18PL) +// End of MG67: + +// Beginning of MG68: +#if (G61PL >= G68PL) || (G61PL == 0) +#define MG68_11PL ~(1) +#else +#define MG68_11PL 0xFFFF +#endif +#if (G62PL >= G68PL) || (G62PL == 0) +#define MG68_12PL ~(1 << 1) +#else +#define MG68_12PL 0xFFFF +#endif +#if (G63PL >= G68PL) || (G63PL == 0) +#define MG68_13PL ~(1 << 2) +#else +#define MG68_13PL 0xFFFF +#endif +#if (G64PL >= G68PL) || (G64PL == 0) +#define MG68_14PL ~(1 << 3) +#else +#define MG68_14PL 0xFFFF +#endif +#if (G65PL >= G68PL) || (G65PL == 0) +#define MG68_15PL ~(1 << 4) +#else +#define MG68_15PL 0xFFFF +#endif +#if (G66PL >= G68PL) || (G66PL == 0) +#define MG68_16PL ~(1 << 5) +#else +#define MG68_16PL 0xFFFF +#endif +#if (G67PL >= G68PL) || (G67PL == 0) +#define MG68_17PL ~(1 << 6) +#else +#define MG68_17PL 0xFFFF +#endif +#define MG68_18PL 0x007F +#define MG68 (MG68_11PL & MG68_12PL & MG68_13PL & MG68_14PL & \ + MG68_15PL & MG68_16PL & MG68_17PL & MG68_18PL) +// End of MG68: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG71 to MG78: +// + +// Beginning of MG71: +#if (G72PL >= G71PL) || (G72PL == 0) +#define MG71_12PL ~(1 << 1) +#else +#define MG71_12PL 0xFFFF +#endif +#if (G73PL >= G71PL) || (G73PL == 0) +#define MG71_13PL ~(1 << 2) +#else +#define MG71_13PL 0xFFFF +#endif +#if (G74PL >= G71PL) || (G74PL == 0) +#define MG71_14PL ~(1 << 3) +#else +#define MG71_14PL 0xFFFF +#endif +#if (G75PL >= G71PL) || (G75PL == 0) +#define MG71_15PL ~(1 << 4) +#else +#define MG71_15PL 0xFFFF +#endif +#if (G76PL >= G71PL) || (G76PL == 0) +#define MG71_16PL ~(1 << 5) +#else +#define MG71_16PL 0xFFFF +#endif +#if (G77PL >= G71PL) || (G77PL == 0) +#define MG71_17PL ~(1 << 6) +#else +#define MG71_17PL 0xFFFF +#endif +#if (G78PL >= G71PL) || (G78PL == 0) +#define MG71_18PL ~(1 << 7) +#else +#define MG71_18PL 0xFFFF +#endif +#define MG71_11PL 0x00FE +#define MG71 (MG71_11PL & MG71_12PL & MG71_13PL & MG71_14PL & \ + MG71_15PL & MG71_16PL & MG71_17PL & MG71_18PL) +// End of MG71: + +// Beginning of MG72: +#if (G71PL >= G72PL) || (G71PL == 0) +#define MG72_11PL ~(1) +#else +#define MG72_11PL 0xFFFF +#endif +#if (G73PL >= G72PL) || (G73PL == 0) +#define MG72_13PL ~(1 << 2) +#else +#define MG72_13PL 0xFFFF +#endif +#if (G74PL >= G72PL) || (G74PL == 0) +#define MG72_14PL ~(1 << 3) +#else +#define MG72_14PL 0xFFFF +#endif +#if (G75PL >= G72PL) || (G75PL == 0) +#define MG72_15PL ~(1 << 4) +#else +#define MG72_15PL 0xFFFF +#endif +#if (G76PL >= G72PL) || (G76PL == 0) +#define MG72_16PL ~(1 << 5) +#else +#define MG72_16PL 0xFFFF +#endif +#if (G77PL >= G72PL) || (G77PL == 0) +#define MG72_17PL ~(1 << 6) +#else +#define MG72_17PL 0xFFFF +#endif +#if (G78PL >= G72PL) || (G78PL == 0) +#define MG72_18PL ~(1 << 7) +#else +#define MG72_18PL 0xFFFF +#endif +#define MG72_12PL 0x00FD +#define MG72 (MG72_11PL & MG72_12PL & MG72_13PL & MG72_14PL & \ + MG72_15PL & MG72_16PL & MG72_17PL & MG72_18PL) +// End of MG72: + +// Beginning of MG73: +#if (G71PL >= G73PL) || (G71PL == 0) +#define MG73_11PL ~(1) +#else +#define MG73_11PL 0xFFFF +#endif +#if (G72PL >= G73PL) || (G72PL == 0) +#define MG73_12PL ~(1 << 1) +#else +#define MG73_12PL 0xFFFF +#endif +#if (G74PL >= G73PL) || (G74PL == 0) +#define MG73_14PL ~(1 << 3) +#else +#define MG73_14PL 0xFFFF +#endif +#if (G75PL >= G73PL) || (G75PL == 0) +#define MG73_15PL ~(1 << 4) +#else +#define MG73_15PL 0xFFFF +#endif +#if (G76PL >= G73PL) || (G76PL == 0) +#define MG73_16PL ~(1 << 5) +#else +#define MG73_16PL 0xFFFF +#endif +#if (G77PL >= G73PL) || (G77PL == 0) +#define MG73_17PL ~(1 << 6) +#else +#define MG73_17PL 0xFFFF +#endif +#if (G78PL >= G73PL) || (G78PL == 0) +#define MG73_18PL ~(1 << 7) +#else +#define MG73_18PL 0xFFFF +#endif +#define MG73_13PL 0x00FB +#define MG73 (MG73_11PL & MG73_12PL & MG73_13PL & MG73_14PL & \ + MG73_15PL & MG73_16PL & MG73_17PL & MG73_18PL) +// End of MG73: + +// Beginning of MG74: +#if (G71PL >= G74PL) || (G71PL == 0) +#define MG74_11PL ~(1) +#else +#define MG74_11PL 0xFFFF +#endif +#if (G72PL >= G74PL) || (G72PL == 0) +#define MG74_12PL ~(1 << 1) +#else +#define MG74_12PL 0xFFFF +#endif +#if (G73PL >= G74PL) || (G73PL == 0) +#define MG74_13PL ~(1 << 2) +#else +#define MG74_13PL 0xFFFF +#endif +#if (G75PL >= G74PL) || (G75PL == 0) +#define MG74_15PL ~(1 << 4) +#else +#define MG74_15PL 0xFFFF +#endif +#if (G76PL >= G74PL) || (G76PL == 0) +#define MG74_16PL ~(1 << 5) +#else +#define MG74_16PL 0xFFFF +#endif +#if (G77PL >= G74PL) || (G77PL == 0) +#define MG74_17PL ~(1 << 6) +#else +#define MG74_17PL 0xFFFF +#endif +#if (G78PL >= G74PL) || (G78PL == 0) +#define MG74_18PL ~(1 << 7) +#else +#define MG74_18PL 0xFFFF +#endif +#define MG74_14PL 0x00F7 +#define MG74 (MG74_11PL & MG74_12PL & MG74_13PL & MG74_14PL & \ + MG74_15PL & MG74_16PL & MG74_17PL & MG74_18PL) +// End of MG74: + +// Beginning of MG75: +#if (G71PL >= G75PL) || (G71PL == 0) +#define MG75_11PL ~(1) +#else +#define MG75_11PL 0xFFFF +#endif +#if (G72PL >= G75PL) || (G72PL == 0) +#define MG75_12PL ~(1 << 1) +#else +#define MG75_12PL 0xFFFF +#endif +#if (G73PL >= G75PL) || (G73PL == 0) +#define MG75_13PL ~(1 << 2) +#else +#define MG75_13PL 0xFFFF +#endif +#if (G74PL >= G75PL) || (G74PL == 0) +#define MG75_14PL ~(1 << 3) +#else +#define MG75_14PL 0xFFFF +#endif +#if (G76PL >= G75PL) || (G76PL == 0) +#define MG75_16PL ~(1 << 5) +#else +#define MG75_16PL 0xFFFF +#endif +#if (G77PL >= G75PL) || (G77PL == 0) +#define MG75_17PL ~(1 << 6) +#else +#define MG75_17PL 0xFFFF +#endif +#if (G78PL >= G75PL) || (G78PL == 0) +#define MG75_18PL ~(1 << 7) +#else +#define MG75_18PL 0xFFFF +#endif +#define MG75_15PL 0x00EF +#define MG75 (MG75_11PL & MG75_12PL & MG75_13PL & MG75_14PL & \ + MG75_15PL & MG75_16PL & MG75_17PL & MG75_18PL) +// End of MG75: + +// Beginning of MG76: +#if (G71PL >= G76PL) || (G71PL == 0) +#define MG76_11PL ~(1) +#else +#define MG76_11PL 0xFFFF +#endif +#if (G72PL >= G76PL) || (G72PL == 0) +#define MG76_12PL ~(1 << 1) +#else +#define MG76_12PL 0xFFFF +#endif +#if (G73PL >= G76PL) || (G73PL == 0) +#define MG76_13PL ~(1 << 2) +#else +#define MG76_13PL 0xFFFF +#endif +#if (G74PL >= G76PL) || (G74PL == 0) +#define MG76_14PL ~(1 << 3) +#else +#define MG76_14PL 0xFFFF +#endif +#if (G75PL >= G76PL) || (G75PL == 0) +#define MG76_15PL ~(1 << 4) +#else +#define MG76_15PL 0xFFFF +#endif +#if (G77PL >= G76PL) || (G77PL == 0) +#define MG76_17PL ~(1 << 6) +#else +#define MG76_17PL 0xFFFF +#endif +#if (G78PL >= G76PL) || (G78PL == 0) +#define MG76_18PL ~(1 << 7) +#else +#define MG76_18PL 0xFFFF +#endif +#define MG76_16PL 0x00DF +#define MG76 (MG76_11PL & MG76_12PL & MG76_13PL & MG76_14PL & \ + MG76_15PL & MG76_16PL & MG76_17PL & MG76_18PL) +// End of MG76: + +// Beginning of MG77: +#if (G71PL >= G77PL) || (G71PL == 0) +#define MG77_11PL ~(1) +#else +#define MG77_11PL 0xFFFF +#endif +#if (G72PL >= G77PL) || (G72PL == 0) +#define MG77_12PL ~(1 << 1) +#else +#define MG77_12PL 0xFFFF +#endif +#if (G73PL >= G77PL) || (G73PL == 0) +#define MG77_13PL ~(1 << 2) +#else +#define MG77_13PL 0xFFFF +#endif +#if (G74PL >= G77PL) || (G74PL == 0) +#define MG77_14PL ~(1 << 3) +#else +#define MG77_14PL 0xFFFF +#endif +#if (G75PL >= G77PL) || (G75PL == 0) +#define MG77_15PL ~(1 << 4) +#else +#define MG77_15PL 0xFFFF +#endif +#if (G76PL >= G77PL) || (G76PL == 0) +#define MG77_16PL ~(1 << 5) +#else +#define MG77_16PL 0xFFFF +#endif +#if (G78PL >= G77PL) || (G78PL == 0) +#define MG77_18PL ~(1 << 7) +#else +#define MG77_18PL 0xFFFF +#endif +#define MG77_17PL 0x00BF +#define MG77 (MG77_11PL & MG77_12PL & MG77_13PL & MG77_14PL & \ + MG77_15PL & MG77_16PL & MG77_17PL & MG77_18PL) +// End of MG77: + +// Beginning of MG78: +#if (G71PL >= G78PL) || (G71PL == 0) +#define MG78_11PL ~(1) +#else +#define MG78_11PL 0xFFFF +#endif +#if (G72PL >= G78PL) || (G72PL == 0) +#define MG78_12PL ~(1 << 1) +#else +#define MG78_12PL 0xFFFF +#endif +#if (G73PL >= G78PL) || (G73PL == 0) +#define MG78_13PL ~(1 << 2) +#else +#define MG78_13PL 0xFFFF +#endif +#if (G74PL >= G78PL) || (G74PL == 0) +#define MG78_14PL ~(1 << 3) +#else +#define MG78_14PL 0xFFFF +#endif +#if (G75PL >= G78PL) || (G75PL == 0) +#define MG78_15PL ~(1 << 4) +#else +#define MG78_15PL 0xFFFF +#endif +#if (G76PL >= G78PL) || (G76PL == 0) +#define MG78_16PL ~(1 << 5) +#else +#define MG78_16PL 0xFFFF +#endif +#if (G77PL >= G78PL) || (G77PL == 0) +#define MG78_17PL ~(1 << 6) +#else +#define MG78_17PL 0xFFFF +#endif +#define MG78_18PL 0x007F +#define MG78 (MG78_11PL & MG78_12PL & MG78_13PL & MG78_14PL & \ + MG78_15PL & MG78_16PL & MG78_17PL & MG78_18PL) +// End of MG78: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG81 to MG88: +// + +// Beginning of MG81: +#if (G82PL >= G81PL) || (G82PL == 0) +#define MG81_12PL ~(1 << 1) +#else +#define MG81_12PL 0xFFFF +#endif +#if (G83PL >= G81PL) || (G83PL == 0) +#define MG81_13PL ~(1 << 2) +#else +#define MG81_13PL 0xFFFF +#endif +#if (G84PL >= G81PL) || (G84PL == 0) +#define MG81_14PL ~(1 << 3) +#else +#define MG81_14PL 0xFFFF +#endif +#if (G85PL >= G81PL) || (G85PL == 0) +#define MG81_15PL ~(1 << 4) +#else +#define MG81_15PL 0xFFFF +#endif +#if (G86PL >= G81PL) || (G86PL == 0) +#define MG81_16PL ~(1 << 5) +#else +#define MG81_16PL 0xFFFF +#endif +#if (G87PL >= G81PL) || (G87PL == 0) +#define MG81_17PL ~(1 << 6) +#else +#define MG81_17PL 0xFFFF +#endif +#if (G88PL >= G81PL) || (G88PL == 0) +#define MG81_18PL ~(1 << 7) +#else +#define MG81_18PL 0xFFFF +#endif +#define MG81_11PL 0x00FE +#define MG81 (MG81_11PL & MG81_12PL & MG81_13PL & MG81_14PL & \ + MG81_15PL & MG81_16PL & MG81_17PL & MG81_18PL) +// End of MG81: + +// Beginning of MG82: +#if (G81PL >= G82PL) || (G81PL == 0) +#define MG82_11PL ~(1) +#else +#define MG82_11PL 0xFFFF +#endif +#if (G83PL >= G82PL) || (G83PL == 0) +#define MG82_13PL ~(1 << 2) +#else +#define MG82_13PL 0xFFFF +#endif +#if (G84PL >= G82PL) || (G84PL == 0) +#define MG82_14PL ~(1 << 3) +#else +#define MG82_14PL 0xFFFF +#endif +#if (G85PL >= G82PL) || (G85PL == 0) +#define MG82_15PL ~(1 << 4) +#else +#define MG82_15PL 0xFFFF +#endif +#if (G86PL >= G82PL) || (G86PL == 0) +#define MG82_16PL ~(1 << 5) +#else +#define MG82_16PL 0xFFFF +#endif +#if (G87PL >= G82PL) || (G87PL == 0) +#define MG82_17PL ~(1 << 6) +#else +#define MG82_17PL 0xFFFF +#endif +#if (G88PL >= G82PL) || (G88PL == 0) +#define MG82_18PL ~(1 << 7) +#else +#define MG82_18PL 0xFFFF +#endif +#define MG82_12PL 0x00FD +#define MG82 (MG82_11PL & MG82_12PL & MG82_13PL & MG82_14PL & \ + MG82_15PL & MG82_16PL & MG82_17PL & MG82_18PL) +// End of MG82: + +// Beginning of MG83: +#if (G81PL >= G83PL) || (G81PL == 0) +#define MG83_11PL ~(1) +#else +#define MG83_11PL 0xFFFF +#endif +#if (G82PL >= G83PL) || (G82PL == 0) +#define MG83_12PL ~(1 << 1) +#else +#define MG83_12PL 0xFFFF +#endif +#if (G84PL >= G83PL) || (G84PL == 0) +#define MG83_14PL ~(1 << 3) +#else +#define MG83_14PL 0xFFFF +#endif +#if (G85PL >= G83PL) || (G85PL == 0) +#define MG83_15PL ~(1 << 4) +#else +#define MG83_15PL 0xFFFF +#endif +#if (G86PL >= G83PL) || (G86PL == 0) +#define MG83_16PL ~(1 << 5) +#else +#define MG83_16PL 0xFFFF +#endif +#if (G87PL >= G83PL) || (G87PL == 0) +#define MG83_17PL ~(1 << 6) +#else +#define MG83_17PL 0xFFFF +#endif +#if (G88PL >= G83PL) || (G88PL == 0) +#define MG83_18PL ~(1 << 7) +#else +#define MG83_18PL 0xFFFF +#endif +#define MG83_13PL 0x00FB +#define MG83 (MG83_11PL & MG83_12PL & MG83_13PL & MG83_14PL & \ + MG83_15PL & MG83_16PL & MG83_17PL & MG83_18PL) +// End of MG83: + +// Beginning of MG84: +#if (G81PL >= G84PL) || (G81PL == 0) +#define MG84_11PL ~(1) +#else +#define MG84_11PL 0xFFFF +#endif +#if (G82PL >= G84PL) || (G82PL == 0) +#define MG84_12PL ~(1 << 1) +#else +#define MG84_12PL 0xFFFF +#endif +#if (G83PL >= G84PL) || (G83PL == 0) +#define MG84_13PL ~(1 << 2) +#else +#define MG84_13PL 0xFFFF +#endif +#if (G85PL >= G84PL) || (G85PL == 0) +#define MG84_15PL ~(1 << 4) +#else +#define MG84_15PL 0xFFFF +#endif +#if (G86PL >= G84PL) || (G86PL == 0) +#define MG84_16PL ~(1 << 5) +#else +#define MG84_16PL 0xFFFF +#endif +#if (G87PL >= G84PL) || (G87PL == 0) +#define MG84_17PL ~(1 << 6) +#else +#define MG84_17PL 0xFFFF +#endif +#if (G88PL >= G84PL) || (G88PL == 0) +#define MG84_18PL ~(1 << 7) +#else +#define MG84_18PL 0xFFFF +#endif +#define MG84_14PL 0x00F7 +#define MG84 (MG84_11PL & MG84_12PL & MG84_13PL & MG84_14PL & \ + MG84_15PL & MG84_16PL & MG84_17PL & MG84_18PL) +// End of MG84: + +// Beginning of MG85: +#if (G81PL >= G85PL) || (G81PL == 0) +#define MG85_11PL ~(1) +#else +#define MG85_11PL 0xFFFF +#endif +#if (G82PL >= G85PL) || (G82PL == 0) +#define MG85_12PL ~(1 << 1) +#else +#define MG85_12PL 0xFFFF +#endif +#if (G83PL >= G85PL) || (G83PL == 0) +#define MG85_13PL ~(1 << 2) +#else +#define MG85_13PL 0xFFFF +#endif +#if (G84PL >= G85PL) || (G84PL == 0) +#define MG85_14PL ~(1 << 3) +#else +#define MG85_14PL 0xFFFF +#endif +#if (G86PL >= G85PL) || (G86PL == 0) +#define MG85_16PL ~(1 << 5) +#else +#define MG85_16PL 0xFFFF +#endif +#if (G87PL >= G85PL) || (G87PL == 0) +#define MG85_17PL ~(1 << 6) +#else +#define MG85_17PL 0xFFFF +#endif +#if (G88PL >= G85PL) || (G88PL == 0) +#define MG85_18PL ~(1 << 7) +#else +#define MG85_18PL 0xFFFF +#endif +#define MG85_15PL 0x00EF +#define MG85 (MG85_11PL & MG85_12PL & MG85_13PL & MG85_14PL & \ + MG85_15PL & MG85_16PL & MG85_17PL & MG85_18PL) +// End of MG85: + +// Beginning of MG86: +#if (G81PL >= G86PL) || (G81PL == 0) +#define MG86_11PL ~(1) +#else +#define MG86_11PL 0xFFFF +#endif +#if (G82PL >= G86PL) || (G82PL == 0) +#define MG86_12PL ~(1 << 1) +#else +#define MG86_12PL 0xFFFF +#endif +#if (G83PL >= G86PL) || (G83PL == 0) +#define MG86_13PL ~(1 << 2) +#else +#define MG86_13PL 0xFFFF +#endif +#if (G84PL >= G86PL) || (G84PL == 0) +#define MG86_14PL ~(1 << 3) +#else +#define MG86_14PL 0xFFFF +#endif +#if (G85PL >= G86PL) || (G85PL == 0) +#define MG86_15PL ~(1 << 4) +#else +#define MG86_15PL 0xFFFF +#endif +#if (G87PL >= G86PL) || (G87PL == 0) +#define MG86_17PL ~(1 << 6) +#else +#define MG86_17PL 0xFFFF +#endif +#if (G88PL >= G86PL) || (G88PL == 0) +#define MG86_18PL ~(1 << 7) +#else +#define MG86_18PL 0xFFFF +#endif +#define MG86_16PL 0x00DF +#define MG86 (MG86_11PL & MG86_12PL & MG86_13PL & MG86_14PL & \ + MG86_15PL & MG86_16PL & MG86_17PL & MG86_18PL) +// End of MG86: + +// Beginning of MG87: +#if (G81PL >= G87PL) || (G81PL == 0) +#define MG87_11PL ~(1) +#else +#define MG87_11PL 0xFFFF +#endif +#if (G82PL >= G87PL) || (G82PL == 0) +#define MG87_12PL ~(1 << 1) +#else +#define MG87_12PL 0xFFFF +#endif +#if (G83PL >= G87PL) || (G83PL == 0) +#define MG87_13PL ~(1 << 2) +#else +#define MG87_13PL 0xFFFF +#endif +#if (G84PL >= G87PL) || (G84PL == 0) +#define MG87_14PL ~(1 << 3) +#else +#define MG87_14PL 0xFFFF +#endif +#if (G85PL >= G87PL) || (G85PL == 0) +#define MG87_15PL ~(1 << 4) +#else +#define MG87_15PL 0xFFFF +#endif +#if (G86PL >= G87PL) || (G86PL == 0) +#define MG87_16PL ~(1 << 5) +#else +#define MG87_16PL 0xFFFF +#endif +#if (G88PL >= G87PL) || (G88PL == 0) +#define MG87_18PL ~(1 << 7) +#else +#define MG87_18PL 0xFFFF +#endif +#define MG87_17PL 0x00BF +#define MG87 (MG87_11PL & MG87_12PL & MG87_13PL & MG87_14PL & \ + MG87_15PL & MG87_16PL & MG87_17PL & MG87_18PL) +// End of MG87: + +// Beginning of MG88: +#if (G81PL >= G88PL) || (G81PL == 0) +#define MG88_11PL ~(1) +#else +#define MG88_11PL 0xFFFF +#endif +#if (G82PL >= G88PL) || (G82PL == 0) +#define MG88_12PL ~(1 << 1) +#else +#define MG88_12PL 0xFFFF +#endif +#if (G83PL >= G88PL) || (G83PL == 0) +#define MG88_13PL ~(1 << 2) +#else +#define MG88_13PL 0xFFFF +#endif +#if (G84PL >= G88PL) || (G84PL == 0) +#define MG88_14PL ~(1 << 3) +#else +#define MG88_14PL 0xFFFF +#endif +#if (G85PL >= G88PL) || (G85PL == 0) +#define MG88_15PL ~(1 << 4) +#else +#define MG88_15PL 0xFFFF +#endif +#if (G86PL >= G88PL) || (G86PL == 0) +#define MG88_16PL ~(1 << 5) +#else +#define MG88_16PL 0xFFFF +#endif +#if (G87PL >= G88PL) || (G87PL == 0) +#define MG88_17PL ~(1 << 6) +#else +#define MG88_17PL 0xFFFF +#endif +#define MG88_18PL 0x007F +#define MG88 (MG88_11PL & MG88_12PL & MG88_13PL & MG88_14PL & \ + MG88_15PL & MG88_16PL & MG88_17PL & MG88_18PL) +// End of MG88: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG91 to MG98: +// + +// Beginning of MG91: +#if (G92PL >= G91PL) || (G92PL == 0) +#define MG91_12PL ~(1 << 1) +#else +#define MG91_12PL 0xFFFF +#endif +#if (G93PL >= G91PL) || (G93PL == 0) +#define MG91_13PL ~(1 << 2) +#else +#define MG91_13PL 0xFFFF +#endif +#if (G94PL >= G91PL) || (G94PL == 0) +#define MG91_14PL ~(1 << 3) +#else +#define MG91_14PL 0xFFFF +#endif +#if (G95PL >= G91PL) || (G95PL == 0) +#define MG91_15PL ~(1 << 4) +#else +#define MG91_15PL 0xFFFF +#endif +#if (G96PL >= G91PL) || (G96PL == 0) +#define MG91_16PL ~(1 << 5) +#else +#define MG91_16PL 0xFFFF +#endif +#if (G97PL >= G91PL) || (G97PL == 0) +#define MG91_17PL ~(1 << 6) +#else +#define MG91_17PL 0xFFFF +#endif +#if (G98PL >= G91PL) || (G98PL == 0) +#define MG91_18PL ~(1 << 7) +#else +#define MG91_18PL 0xFFFF +#endif +#define MG91_11PL 0x00FE +#define MG91 (MG91_11PL & MG91_12PL & MG91_13PL & MG91_14PL & \ + MG91_15PL & MG91_16PL & MG91_17PL & MG91_18PL) +// End of MG91: + +// Beginning of MG92: +#if (G91PL >= G92PL) || (G91PL == 0) +#define MG92_11PL ~(1) +#else +#define MG92_11PL 0xFFFF +#endif +#if (G93PL >= G92PL) || (G93PL == 0) +#define MG92_13PL ~(1 << 2) +#else +#define MG92_13PL 0xFFFF +#endif +#if (G94PL >= G92PL) || (G94PL == 0) +#define MG92_14PL ~(1 << 3) +#else +#define MG92_14PL 0xFFFF +#endif +#if (G95PL >= G92PL) || (G95PL == 0) +#define MG92_15PL ~(1 << 4) +#else +#define MG92_15PL 0xFFFF +#endif +#if (G96PL >= G92PL) || (G96PL == 0) +#define MG92_16PL ~(1 << 5) +#else +#define MG92_16PL 0xFFFF +#endif +#if (G97PL >= G92PL) || (G97PL == 0) +#define MG92_17PL ~(1 << 6) +#else +#define MG92_17PL 0xFFFF +#endif +#if (G98PL >= G92PL) || (G98PL == 0) +#define MG92_18PL ~(1 << 7) +#else +#define MG92_18PL 0xFFFF +#endif +#define MG92_12PL 0x00FD +#define MG92 (MG92_11PL & MG92_12PL & MG92_13PL & MG92_14PL & \ + MG92_15PL & MG92_16PL & MG92_17PL & MG92_18PL) +// End of MG92: + +// Beginning of MG93: +#if (G91PL >= G93PL) || (G91PL == 0) +#define MG93_11PL ~(1) +#else +#define MG93_11PL 0xFFFF +#endif +#if (G92PL >= G93PL) || (G92PL == 0) +#define MG93_12PL ~(1 << 1) +#else +#define MG93_12PL 0xFFFF +#endif +#if (G94PL >= G93PL) || (G94PL == 0) +#define MG93_14PL ~(1 << 3) +#else +#define MG93_14PL 0xFFFF +#endif +#if (G95PL >= G93PL) || (G95PL == 0) +#define MG93_15PL ~(1 << 4) +#else +#define MG93_15PL 0xFFFF +#endif +#if (G96PL >= G93PL) || (G96PL == 0) +#define MG93_16PL ~(1 << 5) +#else +#define MG93_16PL 0xFFFF +#endif +#if (G97PL >= G93PL) || (G97PL == 0) +#define MG93_17PL ~(1 << 6) +#else +#define MG93_17PL 0xFFFF +#endif +#if (G98PL >= G93PL) || (G98PL == 0) +#define MG93_18PL ~(1 << 7) +#else +#define MG93_18PL 0xFFFF +#endif +#define MG93_13PL 0x00FB +#define MG93 (MG93_11PL & MG93_12PL & MG93_13PL & MG93_14PL & \ + MG93_15PL & MG93_16PL & MG93_17PL & MG93_18PL) +// End of MG93: + +// Beginning of MG94: +#if (G91PL >= G94PL) || (G91PL == 0) +#define MG94_11PL ~(1) +#else +#define MG94_11PL 0xFFFF +#endif +#if (G92PL >= G94PL) || (G92PL == 0) +#define MG94_12PL ~(1 << 1) +#else +#define MG94_12PL 0xFFFF +#endif +#if (G93PL >= G94PL) || (G93PL == 0) +#define MG94_13PL ~(1 << 2) +#else +#define MG94_13PL 0xFFFF +#endif +#if (G95PL >= G94PL) || (G95PL == 0) +#define MG94_15PL ~(1 << 4) +#else +#define MG94_15PL 0xFFFF +#endif +#if (G96PL >= G94PL) || (G96PL == 0) +#define MG94_16PL ~(1 << 5) +#else +#define MG94_16PL 0xFFFF +#endif +#if (G97PL >= G94PL) || (G97PL == 0) +#define MG94_17PL ~(1 << 6) +#else +#define MG94_17PL 0xFFFF +#endif +#if (G98PL >= G94PL) || (G98PL == 0) +#define MG94_18PL ~(1 << 7) +#else +#define MG94_18PL 0xFFFF +#endif +#define MG94_14PL 0x00F7 +#define MG94 (MG94_11PL & MG94_12PL & MG94_13PL & MG94_14PL & \ + MG94_15PL & MG94_16PL & MG94_17PL & MG94_18PL) +// End of MG94: + +// Beginning of MG95: +#if (G91PL >= G95PL) || (G91PL == 0) +#define MG95_11PL ~(1) +#else +#define MG95_11PL 0xFFFF +#endif +#if (G92PL >= G95PL) || (G92PL == 0) +#define MG95_12PL ~(1 << 1) +#else +#define MG95_12PL 0xFFFF +#endif +#if (G93PL >= G95PL) || (G93PL == 0) +#define MG95_13PL ~(1 << 2) +#else +#define MG95_13PL 0xFFFF +#endif +#if (G94PL >= G95PL) || (G94PL == 0) +#define MG95_14PL ~(1 << 3) +#else +#define MG95_14PL 0xFFFF +#endif +#if (G96PL >= G95PL) || (G96PL == 0) +#define MG95_16PL ~(1 << 5) +#else +#define MG95_16PL 0xFFFF +#endif +#if (G97PL >= G95PL) || (G97PL == 0) +#define MG95_17PL ~(1 << 6) +#else +#define MG95_17PL 0xFFFF +#endif +#if (G98PL >= G95PL) || (G98PL == 0) +#define MG95_18PL ~(1 << 7) +#else +#define MG95_18PL 0xFFFF +#endif +#define MG95_15PL 0x00EF +#define MG95 (MG95_11PL & MG95_12PL & MG95_13PL & MG95_14PL & \ + MG95_15PL & MG95_16PL & MG95_17PL & MG95_18PL) +// End of MG95: + +// Beginning of MG96: +#if (G91PL >= G96PL) || (G91PL == 0) +#define MG96_11PL ~(1) +#else +#define MG96_11PL 0xFFFF +#endif +#if (G92PL >= G96PL) || (G92PL == 0) +#define MG96_12PL ~(1 << 1) +#else +#define MG96_12PL 0xFFFF +#endif +#if (G93PL >= G96PL) || (G93PL == 0) +#define MG96_13PL ~(1 << 2) +#else +#define MG96_13PL 0xFFFF +#endif +#if (G94PL >= G96PL) || (G94PL == 0) +#define MG96_14PL ~(1 << 3) +#else +#define MG96_14PL 0xFFFF +#endif +#if (G95PL >= G96PL) || (G95PL == 0) +#define MG96_15PL ~(1 << 4) +#else +#define MG96_15PL 0xFFFF +#endif +#if (G97PL >= G96PL) || (G97PL == 0) +#define MG96_17PL ~(1 << 6) +#else +#define MG96_17PL 0xFFFF +#endif +#if (G98PL >= G96PL) || (G98PL == 0) +#define MG96_18PL ~(1 << 7) +#else +#define MG96_18PL 0xFFFF +#endif +#define MG96_16PL 0x00DF +#define MG96 (MG96_11PL & MG96_12PL & MG96_13PL & MG96_14PL & \ + MG96_15PL & MG96_16PL & MG96_17PL & MG96_18PL) +// End of MG96: + +// Beginning of MG97: +#if (G91PL >= G97PL) || (G91PL == 0) +#define MG97_11PL ~(1) +#else +#define MG97_11PL 0xFFFF +#endif +#if (G92PL >= G97PL) || (G92PL == 0) +#define MG97_12PL ~(1 << 1) +#else +#define MG97_12PL 0xFFFF +#endif +#if (G93PL >= G97PL) || (G93PL == 0) +#define MG97_13PL ~(1 << 2) +#else +#define MG97_13PL 0xFFFF +#endif +#if (G94PL >= G97PL) || (G94PL == 0) +#define MG97_14PL ~(1 << 3) +#else +#define MG97_14PL 0xFFFF +#endif +#if (G95PL >= G97PL) || (G95PL == 0) +#define MG97_15PL ~(1 << 4) +#else +#define MG97_15PL 0xFFFF +#endif +#if (G96PL >= G97PL) || (G96PL == 0) +#define MG97_16PL ~(1 << 5) +#else +#define MG97_16PL 0xFFFF +#endif +#if (G98PL >= G97PL) || (G98PL == 0) +#define MG97_18PL ~(1 << 7) +#else +#define MG97_18PL 0xFFFF +#endif +#define MG97_17PL 0x00BF +#define MG97 (MG97_11PL & MG97_12PL & MG97_13PL & MG97_14PL & \ + MG97_15PL & MG97_16PL & MG97_17PL & MG97_18PL) +// End of MG97: + +// Beginning of MG98: +#if (G91PL >= G98PL) || (G91PL == 0) +#define MG98_11PL ~(1) +#else +#define MG98_11PL 0xFFFF +#endif +#if (G92PL >= G98PL) || (G92PL == 0) +#define MG98_12PL ~(1 << 1) +#else +#define MG98_12PL 0xFFFF +#endif +#if (G93PL >= G98PL) || (G93PL == 0) +#define MG98_13PL ~(1 << 2) +#else +#define MG98_13PL 0xFFFF +#endif +#if (G94PL >= G98PL) || (G94PL == 0) +#define MG98_14PL ~(1 << 3) +#else +#define MG98_14PL 0xFFFF +#endif +#if (G95PL >= G98PL) || (G95PL == 0) +#define MG98_15PL ~(1 << 4) +#else +#define MG98_15PL 0xFFFF +#endif +#if (G96PL >= G98PL) || (G96PL == 0) +#define MG98_16PL ~(1 << 5) +#else +#define MG98_16PL 0xFFFF +#endif +#if (G97PL >= G98PL) || (G97PL == 0) +#define MG98_17PL ~(1 << 6) +#else +#define MG98_17PL 0xFFFF +#endif +#define MG98_18PL 0x007F +#define MG98 (MG98_11PL & MG98_12PL & MG98_13PL & MG98_14PL & \ + MG98_15PL & MG98_16PL & MG98_17PL & MG98_18PL) +// End of MG98: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG101 to MG108: +// + +// Beginning of MG101: +#if (G102PL >= G101PL) || (G102PL == 0) +#define MG101_12PL ~(1 << 1) +#else +#define MG101_12PL 0xFFFF +#endif +#if (G103PL >= G101PL) || (G103PL == 0) +#define MG101_13PL ~(1 << 2) +#else +#define MG101_13PL 0xFFFF +#endif +#if (G104PL >= G101PL) || (G104PL == 0) +#define MG101_14PL ~(1 << 3) +#else +#define MG101_14PL 0xFFFF +#endif +#if (G105PL >= G101PL) || (G105PL == 0) +#define MG101_15PL ~(1 << 4) +#else +#define MG101_15PL 0xFFFF +#endif +#if (G106PL >= G101PL) || (G106PL == 0) +#define MG101_16PL ~(1 << 5) +#else +#define MG101_16PL 0xFFFF +#endif +#if (G107PL >= G101PL) || (G107PL == 0) +#define MG101_17PL ~(1 << 6) +#else +#define MG101_17PL 0xFFFF +#endif +#if (G108PL >= G101PL) || (G108PL == 0) +#define MG101_18PL ~(1 << 7) +#else +#define MG101_18PL 0xFFFF +#endif +#define MG101_11PL 0x00FE +#define MG101 (MG101_11PL & MG101_12PL & MG101_13PL & MG101_14PL & \ + MG101_15PL & MG101_16PL & MG101_17PL & MG101_18PL) +// End of MG101: + +// Beginning of MG102: +#if (G101PL >= G102PL) || (G101PL == 0) +#define MG102_11PL ~(1) +#else +#define MG102_11PL 0xFFFF +#endif +#if (G103PL >= G102PL) || (G103PL == 0) +#define MG102_13PL ~(1 << 2) +#else +#define MG102_13PL 0xFFFF +#endif +#if (G104PL >= G102PL) || (G104PL == 0) +#define MG102_14PL ~(1 << 3) +#else +#define MG102_14PL 0xFFFF +#endif +#if (G105PL >= G102PL) || (G105PL == 0) +#define MG102_15PL ~(1 << 4) +#else +#define MG102_15PL 0xFFFF +#endif +#if (G106PL >= G102PL) || (G106PL == 0) +#define MG102_16PL ~(1 << 5) +#else +#define MG102_16PL 0xFFFF +#endif +#if (G107PL >= G102PL) || (G107PL == 0) +#define MG102_17PL ~(1 << 6) +#else +#define MG102_17PL 0xFFFF +#endif +#if (G108PL >= G102PL) || (G108PL == 0) +#define MG102_18PL ~(1 << 7) +#else +#define MG102_18PL 0xFFFF +#endif +#define MG102_12PL 0x00FD +#define MG102 (MG102_11PL & MG102_12PL & MG102_13PL & MG102_14PL & \ + MG102_15PL & MG102_16PL & MG102_17PL & MG102_18PL) +// End of MG102: + +// Beginning of MG103: +#if (G101PL >= G103PL) || (G101PL == 0) +#define MG103_11PL ~(1) +#else +#define MG103_11PL 0xFFFF +#endif +#if (G102PL >= G103PL) || (G102PL == 0) +#define MG103_12PL ~(1 << 1) +#else +#define MG103_12PL 0xFFFF +#endif +#if (G104PL >= G103PL) || (G104PL == 0) +#define MG103_14PL ~(1 << 3) +#else +#define MG103_14PL 0xFFFF +#endif +#if (G105PL >= G103PL) || (G105PL == 0) +#define MG103_15PL ~(1 << 4) +#else +#define MG103_15PL 0xFFFF +#endif +#if (G106PL >= G103PL) || (G106PL == 0) +#define MG103_16PL ~(1 << 5) +#else +#define MG103_16PL 0xFFFF +#endif +#if (G107PL >= G103PL) || (G107PL == 0) +#define MG103_17PL ~(1 << 6) +#else +#define MG103_17PL 0xFFFF +#endif +#if (G108PL >= G103PL) || (G108PL == 0) +#define MG103_18PL ~(1 << 7) +#else +#define MG103_18PL 0xFFFF +#endif +#define MG103_13PL 0x00FB +#define MG103 (MG103_11PL & MG103_12PL & MG103_13PL & MG103_14PL & \ + MG103_15PL & MG103_16PL & MG103_17PL & MG103_18PL) +// End of MG103: + +// Beginning of MG104: +#if (G101PL >= G104PL) || (G101PL == 0) +#define MG104_11PL ~(1) +#else +#define MG104_11PL 0xFFFF +#endif +#if (G102PL >= G104PL) || (G102PL == 0) +#define MG104_12PL ~(1 << 1) +#else +#define MG104_12PL 0xFFFF +#endif +#if (G103PL >= G104PL) || (G103PL == 0) +#define MG104_13PL ~(1 << 2) +#else +#define MG104_13PL 0xFFFF +#endif +#if (G105PL >= G104PL) || (G105PL == 0) +#define MG104_15PL ~(1 << 4) +#else +#define MG104_15PL 0xFFFF +#endif +#if (G106PL >= G104PL) || (G106PL == 0) +#define MG104_16PL ~(1 << 5) +#else +#define MG104_16PL 0xFFFF +#endif +#if (G107PL >= G104PL) || (G107PL == 0) +#define MG104_17PL ~(1 << 6) +#else +#define MG104_17PL 0xFFFF +#endif +#if (G108PL >= G104PL) || (G108PL == 0) +#define MG104_18PL ~(1 << 7) +#else +#define MG104_18PL 0xFFFF +#endif +#define MG104_14PL 0x00F7 +#define MG104 (MG104_11PL & MG104_12PL & MG104_13PL & MG104_14PL & \ + MG104_15PL & MG104_16PL & MG104_17PL & MG104_18PL) +// End of MG104: + +// Beginning of MG105: +#if (G101PL >= G105PL) || (G101PL == 0) +#define MG105_11PL ~(1) +#else +#define MG105_11PL 0xFFFF +#endif +#if (G102PL >= G105PL) || (G102PL == 0) +#define MG105_12PL ~(1 << 1) +#else +#define MG105_12PL 0xFFFF +#endif +#if (G103PL >= G105PL) || (G103PL == 0) +#define MG105_13PL ~(1 << 2) +#else +#define MG105_13PL 0xFFFF +#endif +#if (G104PL >= G105PL) || (G104PL == 0) +#define MG105_14PL ~(1 << 3) +#else +#define MG105_14PL 0xFFFF +#endif +#if (G106PL >= G105PL) || (G106PL == 0) +#define MG105_16PL ~(1 << 5) +#else +#define MG105_16PL 0xFFFF +#endif +#if (G107PL >= G105PL) || (G107PL == 0) +#define MG105_17PL ~(1 << 6) +#else +#define MG105_17PL 0xFFFF +#endif +#if (G108PL >= G105PL) || (G108PL == 0) +#define MG105_18PL ~(1 << 7) +#else +#define MG105_18PL 0xFFFF +#endif +#define MG105_15PL 0x00EF +#define MG105 (MG105_11PL & MG105_12PL & MG105_13PL & MG105_14PL & \ + MG105_15PL & MG105_16PL & MG105_17PL & MG105_18PL) +// End of MG105: + +// Beginning of MG106: +#if (G101PL >= G106PL) || (G101PL == 0) +#define MG106_11PL ~(1) +#else +#define MG106_11PL 0xFFFF +#endif +#if (G102PL >= G106PL) || (G102PL == 0) +#define MG106_12PL ~(1 << 1) +#else +#define MG106_12PL 0xFFFF +#endif +#if (G103PL >= G106PL) || (G103PL == 0) +#define MG106_13PL ~(1 << 2) +#else +#define MG106_13PL 0xFFFF +#endif +#if (G104PL >= G106PL) || (G104PL == 0) +#define MG106_14PL ~(1 << 3) +#else +#define MG106_14PL 0xFFFF +#endif +#if (G105PL >= G106PL) || (G105PL == 0) +#define MG106_15PL ~(1 << 4) +#else +#define MG106_15PL 0xFFFF +#endif +#if (G107PL >= G106PL) || (G107PL == 0) +#define MG106_17PL ~(1 << 6) +#else +#define MG106_17PL 0xFFFF +#endif +#if (G108PL >= G106PL) || (G108PL == 0) +#define MG106_18PL ~(1 << 7) +#else +#define MG106_18PL 0xFFFF +#endif +#define MG106_16PL 0x00DF +#define MG106 (MG106_11PL & MG106_12PL & MG106_13PL & MG106_14PL & \ + MG106_15PL & MG106_16PL & MG106_17PL & MG106_18PL) +// End of MG106: + +// Beginning of MG107: +#if (G101PL >= G107PL) || (G101PL == 0) +#define MG107_11PL ~(1) +#else +#define MG107_11PL 0xFFFF +#endif +#if (G102PL >= G107PL) || (G102PL == 0) +#define MG107_12PL ~(1 << 1) +#else +#define MG107_12PL 0xFFFF +#endif +#if (G103PL >= G107PL) || (G103PL == 0) +#define MG107_13PL ~(1 << 2) +#else +#define MG107_13PL 0xFFFF +#endif +#if (G104PL >= G107PL) || (G104PL == 0) +#define MG107_14PL ~(1 << 3) +#else +#define MG107_14PL 0xFFFF +#endif +#if (G105PL >= G107PL) || (G105PL == 0) +#define MG107_15PL ~(1 << 4) +#else +#define MG107_15PL 0xFFFF +#endif +#if (G106PL >= G107PL) || (G106PL == 0) +#define MG107_16PL ~(1 << 5) +#else +#define MG107_16PL 0xFFFF +#endif +#if (G108PL >= G107PL) || (G108PL == 0) +#define MG107_18PL ~(1 << 7) +#else +#define MG107_18PL 0xFFFF +#endif +#define MG107_17PL 0x00BF +#define MG107 (MG107_11PL & MG107_12PL & MG107_13PL & MG107_14PL & \ + MG107_15PL & MG107_16PL & MG107_17PL & MG107_18PL) +// End of MG107: + +// Beginning of MG108: +#if (G101PL >= G108PL) || (G101PL == 0) +#define MG108_11PL ~(1) +#else +#define MG108_11PL 0xFFFF +#endif +#if (G102PL >= G108PL) || (G102PL == 0) +#define MG108_12PL ~(1 << 1) +#else +#define MG108_12PL 0xFFFF +#endif +#if (G103PL >= G108PL) || (G103PL == 0) +#define MG108_13PL ~(1 << 2) +#else +#define MG108_13PL 0xFFFF +#endif +#if (G104PL >= G108PL) || (G104PL == 0) +#define MG108_14PL ~(1 << 3) +#else +#define MG108_14PL 0xFFFF +#endif +#if (G105PL >= G108PL) || (G105PL == 0) +#define MG108_15PL ~(1 << 4) +#else +#define MG108_15PL 0xFFFF +#endif +#if (G106PL >= G108PL) || (G106PL == 0) +#define MG108_16PL ~(1 << 5) +#else +#define MG108_16PL 0xFFFF +#endif +#if (G107PL >= G108PL) || (G107PL == 0) +#define MG108_17PL ~(1 << 6) +#else +#define MG108_17PL 0xFFFF +#endif +#define MG108_18PL 0x007F +#define MG108 (MG108_11PL & MG108_12PL & MG108_13PL & MG108_14PL & \ + MG108_15PL & MG108_16PL & MG108_17PL & MG108_18PL) +// End of MG108: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG111 to MG118: +// + +// Beginning of MG111: +#if (G112PL >= G111PL) || (G112PL == 0) +#define MG111_12PL ~(1 << 1) +#else +#define MG111_12PL 0xFFFF +#endif +#if (G113PL >= G111PL) || (G113PL == 0) +#define MG111_13PL ~(1 << 2) +#else +#define MG111_13PL 0xFFFF +#endif +#if (G114PL >= G111PL) || (G114PL == 0) +#define MG111_14PL ~(1 << 3) +#else +#define MG111_14PL 0xFFFF +#endif +#if (G115PL >= G111PL) || (G115PL == 0) +#define MG111_15PL ~(1 << 4) +#else +#define MG111_15PL 0xFFFF +#endif +#if (G116PL >= G111PL) || (G116PL == 0) +#define MG111_16PL ~(1 << 5) +#else +#define MG111_16PL 0xFFFF +#endif +#if (G117PL >= G111PL) || (G117PL == 0) +#define MG111_17PL ~(1 << 6) +#else +#define MG111_17PL 0xFFFF +#endif +#if (G118PL >= G111PL) || (G118PL == 0) +#define MG111_18PL ~(1 << 7) +#else +#define MG111_18PL 0xFFFF +#endif +#define MG111_11PL 0x00FE +#define MG111 (MG111_11PL & MG111_12PL & MG111_13PL & MG111_14PL & \ + MG111_15PL & MG111_16PL & MG111_17PL & MG111_18PL) +// End of MG111: + +// Beginning of MG112: +#if (G111PL >= G112PL) || (G111PL == 0) +#define MG112_11PL ~(1) +#else +#define MG112_11PL 0xFFFF +#endif +#if (G113PL >= G112PL) || (G113PL == 0) +#define MG112_13PL ~(1 << 2) +#else +#define MG112_13PL 0xFFFF +#endif +#if (G114PL >= G112PL) || (G114PL == 0) +#define MG112_14PL ~(1 << 3) +#else +#define MG112_14PL 0xFFFF +#endif +#if (G115PL >= G112PL) || (G115PL == 0) +#define MG112_15PL ~(1 << 4) +#else +#define MG112_15PL 0xFFFF +#endif +#if (G116PL >= G112PL) || (G116PL == 0) +#define MG112_16PL ~(1 << 5) +#else +#define MG112_16PL 0xFFFF +#endif +#if (G117PL >= G112PL) || (G117PL == 0) +#define MG112_17PL ~(1 << 6) +#else +#define MG112_17PL 0xFFFF +#endif +#if (G118PL >= G112PL) || (G118PL == 0) +#define MG112_18PL ~(1 << 7) +#else +#define MG112_18PL 0xFFFF +#endif +#define MG112_12PL 0x00FD +#define MG112 (MG112_11PL & MG112_12PL & MG112_13PL & MG112_14PL & \ + MG112_15PL & MG112_16PL & MG112_17PL & MG112_18PL) +// End of MG112: + +// Beginning of MG113: +#if (G111PL >= G113PL) || (G111PL == 0) +#define MG113_11PL ~(1) +#else +#define MG113_11PL 0xFFFF +#endif +#if (G112PL >= G113PL) || (G112PL == 0) +#define MG113_12PL ~(1 << 1) +#else +#define MG113_12PL 0xFFFF +#endif +#if (G114PL >= G113PL) || (G114PL == 0) +#define MG113_14PL ~(1 << 3) +#else +#define MG113_14PL 0xFFFF +#endif +#if (G115PL >= G113PL) || (G115PL == 0) +#define MG113_15PL ~(1 << 4) +#else +#define MG113_15PL 0xFFFF +#endif +#if (G116PL >= G113PL) || (G116PL == 0) +#define MG113_16PL ~(1 << 5) +#else +#define MG113_16PL 0xFFFF +#endif +#if (G117PL >= G113PL) || (G117PL == 0) +#define MG113_17PL ~(1 << 6) +#else +#define MG113_17PL 0xFFFF +#endif +#if (G118PL >= G113PL) || (G118PL == 0) +#define MG113_18PL ~(1 << 7) +#else +#define MG113_18PL 0xFFFF +#endif +#define MG113_13PL 0x00FB +#define MG113 (MG113_11PL & MG113_12PL & MG113_13PL & MG113_14PL & \ + MG113_15PL & MG113_16PL & MG113_17PL & MG113_18PL) +// End of MG113: + +// Beginning of MG114: +#if (G111PL >= G114PL) || (G111PL == 0) +#define MG114_11PL ~(1) +#else +#define MG114_11PL 0xFFFF +#endif +#if (G112PL >= G114PL) || (G112PL == 0) +#define MG114_12PL ~(1 << 1) +#else +#define MG114_12PL 0xFFFF +#endif +#if (G113PL >= G114PL) || (G113PL == 0) +#define MG114_13PL ~(1 << 2) +#else +#define MG114_13PL 0xFFFF +#endif +#if (G115PL >= G114PL) || (G115PL == 0) +#define MG114_15PL ~(1 << 4) +#else +#define MG114_15PL 0xFFFF +#endif +#if (G116PL >= G114PL) || (G116PL == 0) +#define MG114_16PL ~(1 << 5) +#else +#define MG114_16PL 0xFFFF +#endif +#if (G117PL >= G114PL) || (G117PL == 0) +#define MG114_17PL ~(1 << 6) +#else +#define MG114_17PL 0xFFFF +#endif +#if (G118PL >= G114PL) || (G118PL == 0) +#define MG114_18PL ~(1 << 7) +#else +#define MG114_18PL 0xFFFF +#endif +#define MG114_14PL 0x00F7 +#define MG114 (MG114_11PL & MG114_12PL & MG114_13PL & MG114_14PL & \ + MG114_15PL & MG114_16PL & MG114_17PL & MG114_18PL) +// End of MG114: + +// Beginning of MG115: +#if (G111PL >= G115PL) || (G111PL == 0) +#define MG115_11PL ~(1) +#else +#define MG115_11PL 0xFFFF +#endif +#if (G112PL >= G115PL) || (G112PL == 0) +#define MG115_12PL ~(1 << 1) +#else +#define MG115_12PL 0xFFFF +#endif +#if (G113PL >= G115PL) || (G113PL == 0) +#define MG115_13PL ~(1 << 2) +#else +#define MG115_13PL 0xFFFF +#endif +#if (G114PL >= G115PL) || (G114PL == 0) +#define MG115_14PL ~(1 << 3) +#else +#define MG115_14PL 0xFFFF +#endif +#if (G116PL >= G115PL) || (G116PL == 0) +#define MG115_16PL ~(1 << 5) +#else +#define MG115_16PL 0xFFFF +#endif +#if (G117PL >= G115PL) || (G117PL == 0) +#define MG115_17PL ~(1 << 6) +#else +#define MG115_17PL 0xFFFF +#endif +#if (G118PL >= G115PL) || (G118PL == 0) +#define MG115_18PL ~(1 << 7) +#else +#define MG115_18PL 0xFFFF +#endif +#define MG115_15PL 0x00EF +#define MG115 (MG115_11PL & MG115_12PL & MG115_13PL & MG115_14PL & \ + MG115_15PL & MG115_16PL & MG115_17PL & MG115_18PL) +// End of MG115: + +// Beginning of MG116: +#if (G111PL >= G116PL) || (G111PL == 0) +#define MG116_11PL ~(1) +#else +#define MG116_11PL 0xFFFF +#endif +#if (G112PL >= G116PL) || (G112PL == 0) +#define MG116_12PL ~(1 << 1) +#else +#define MG116_12PL 0xFFFF +#endif +#if (G113PL >= G116PL) || (G113PL == 0) +#define MG116_13PL ~(1 << 2) +#else +#define MG116_13PL 0xFFFF +#endif +#if (G114PL >= G116PL) || (G114PL == 0) +#define MG116_14PL ~(1 << 3) +#else +#define MG116_14PL 0xFFFF +#endif +#if (G115PL >= G116PL) || (G115PL == 0) +#define MG116_15PL ~(1 << 4) +#else +#define MG116_15PL 0xFFFF +#endif +#if (G117PL >= G116PL) || (G117PL == 0) +#define MG116_17PL ~(1 << 6) +#else +#define MG116_17PL 0xFFFF +#endif +#if (G118PL >= G116PL) || (G118PL == 0) +#define MG116_18PL ~(1 << 7) +#else +#define MG116_18PL 0xFFFF +#endif +#define MG116_16PL 0x00DF +#define MG116 (MG116_11PL & MG116_12PL & MG116_13PL & MG116_14PL & \ + MG116_15PL & MG116_16PL & MG116_17PL & MG116_18PL) +// End of MG116: + +// Beginning of MG117: +#if (G111PL >= G117PL) || (G111PL == 0) +#define MG117_11PL ~(1) +#else +#define MG117_11PL 0xFFFF +#endif +#if (G112PL >= G117PL) || (G112PL == 0) +#define MG117_12PL ~(1 << 1) +#else +#define MG117_12PL 0xFFFF +#endif +#if (G113PL >= G117PL) || (G113PL == 0) +#define MG117_13PL ~(1 << 2) +#else +#define MG117_13PL 0xFFFF +#endif +#if (G114PL >= G117PL) || (G114PL == 0) +#define MG117_14PL ~(1 << 3) +#else +#define MG117_14PL 0xFFFF +#endif +#if (G115PL >= G117PL) || (G115PL == 0) +#define MG117_15PL ~(1 << 4) +#else +#define MG117_15PL 0xFFFF +#endif +#if (G116PL >= G117PL) || (G116PL == 0) +#define MG117_16PL ~(1 << 5) +#else +#define MG117_16PL 0xFFFF +#endif +#if (G118PL >= G117PL) || (G118PL == 0) +#define MG117_18PL ~(1 << 7) +#else +#define MG117_18PL 0xFFFF +#endif +#define MG117_17PL 0x00BF +#define MG117 (MG117_11PL & MG117_12PL & MG117_13PL & MG117_14PL & \ + MG117_15PL & MG117_16PL & MG117_17PL & MG117_18PL) +// End of MG117: + +// Beginning of MG118: +#if (G111PL >= G118PL) || (G111PL == 0) +#define MG118_11PL ~(1) +#else +#define MG118_11PL 0xFFFF +#endif +#if (G112PL >= G118PL) || (G112PL == 0) +#define MG118_12PL ~(1 << 1) +#else +#define MG118_12PL 0xFFFF +#endif +#if (G113PL >= G118PL) || (G113PL == 0) +#define MG118_13PL ~(1 << 2) +#else +#define MG118_13PL 0xFFFF +#endif +#if (G114PL >= G118PL) || (G114PL == 0) +#define MG118_14PL ~(1 << 3) +#else +#define MG118_14PL 0xFFFF +#endif +#if (G115PL >= G118PL) || (G115PL == 0) +#define MG118_15PL ~(1 << 4) +#else +#define MG118_15PL 0xFFFF +#endif +#if (G116PL >= G118PL) || (G116PL == 0) +#define MG118_16PL ~(1 << 5) +#else +#define MG118_16PL 0xFFFF +#endif +#if (G117PL >= G118PL) || (G117PL == 0) +#define MG118_17PL ~(1 << 6) +#else +#define MG118_17PL 0xFFFF +#endif +#define MG118_18PL 0x007F +#define MG118 (MG118_11PL & MG118_12PL & MG118_13PL & MG118_14PL & \ + MG118_15PL & MG118_16PL & MG118_17PL & MG118_18PL) +// End of MG118: + +//------------------------------------------------------------------------------- +// Automatically generate PIEIER1 interrupt masks MG121 to MG128: +// + +// Beginning of MG121: +#if (G122PL >= G121PL) || (G122PL == 0) +#define MG121_12PL ~(1 << 1) +#else +#define MG121_12PL 0xFFFF +#endif +#if (G123PL >= G121PL) || (G123PL == 0) +#define MG121_13PL ~(1 << 2) +#else +#define MG121_13PL 0xFFFF +#endif +#if (G124PL >= G121PL) || (G124PL == 0) +#define MG121_14PL ~(1 << 3) +#else +#define MG121_14PL 0xFFFF +#endif +#if (G125PL >= G121PL) || (G125PL == 0) +#define MG121_15PL ~(1 << 4) +#else +#define MG121_15PL 0xFFFF +#endif +#if (G126PL >= G121PL) || (G126PL == 0) +#define MG121_16PL ~(1 << 5) +#else +#define MG121_16PL 0xFFFF +#endif +#if (G127PL >= G121PL) || (G127PL == 0) +#define MG121_17PL ~(1 << 6) +#else +#define MG121_17PL 0xFFFF +#endif +#if (G128PL >= G121PL) || (G128PL == 0) +#define MG121_18PL ~(1 << 7) +#else +#define MG121_18PL 0xFFFF +#endif +#define MG121_11PL 0x00FE +#define MG121 (MG121_11PL & MG121_12PL & MG121_13PL & MG121_14PL & \ + MG121_15PL & MG121_16PL & MG121_17PL & MG121_18PL) +// End of MG121: + +// Beginning of MG121: +#if (G121PL >= G122PL) || (G121PL == 0) +#define MG122_11PL ~(1) +#else +#define MG122_11PL 0xFFFF +#endif +#if (G123PL >= G122PL) || (G123PL == 0) +#define MG122_13PL ~(1 << 2) +#else +#define MG122_13PL 0xFFFF +#endif +#if (G124PL >= G122PL) || (G124PL == 0) +#define MG122_14PL ~(1 << 3) +#else +#define MG122_14PL 0xFFFF +#endif +#if (G125PL >= G122PL) || (G125PL == 0) +#define MG122_15PL ~(1 << 4) +#else +#define MG122_15PL 0xFFFF +#endif +#if (G126PL >= G122PL) || (G126PL == 0) +#define MG122_16PL ~(1 << 5) +#else +#define MG122_16PL 0xFFFF +#endif +#if (G127PL >= G122PL) || (G127PL == 0) +#define MG122_17PL ~(1 << 6) +#else +#define MG122_17PL 0xFFFF +#endif +#if (G128PL >= G122PL) || (G128PL == 0) +#define MG122_18PL ~(1 << 7) +#else +#define MG122_18PL 0xFFFF +#endif +#define MG122_12PL 0x00FD +#define MG122 (MG122_11PL & MG122_12PL & MG122_13PL & MG122_14PL & \ + MG122_15PL & MG122_16PL & MG122_17PL & MG122_18PL) +// End of MG122: + +// Beginning of MG123: +#if (G121PL >= G123PL) || (G121PL == 0) +#define MG123_11PL ~(1) +#else +#define MG123_11PL 0xFFFF +#endif +#if (G122PL >= G123PL) || (G122PL == 0) +#define MG123_12PL ~(1 << 1) +#else +#define MG123_12PL 0xFFFF +#endif +#if (G124PL >= G123PL) || (G124PL == 0) +#define MG123_14PL ~(1 << 3) +#else +#define MG123_14PL 0xFFFF +#endif +#if (G125PL >= G123PL) || (G125PL == 0) +#define MG123_15PL ~(1 << 4) +#else +#define MG123_15PL 0xFFFF +#endif +#if (G126PL >= G123PL) || (G126PL == 0) +#define MG123_16PL ~(1 << 5) +#else +#define MG123_16PL 0xFFFF +#endif +#if (G127PL >= G123PL) || (G127PL == 0) +#define MG123_17PL ~(1 << 6) +#else +#define MG123_17PL 0xFFFF +#endif +#if (G128PL >= G123PL) || (G128PL == 0) +#define MG123_18PL ~(1 << 7) +#else +#define MG123_18PL 0xFFFF +#endif +#define MG123_13PL 0x00FB +#define MG123 (MG123_11PL & MG123_12PL & MG123_13PL & MG123_14PL & \ + MG123_15PL & MG123_16PL & MG123_17PL & MG123_18PL) +// End of MG123: + +// Beginning of MG124: +#if (G121PL >= G124PL) || (G121PL == 0) +#define MG124_11PL ~(1) +#else +#define MG124_11PL 0xFFFF +#endif +#if (G122PL >= G124PL) || (G122PL == 0) +#define MG124_12PL ~(1 << 1) +#else +#define MG124_12PL 0xFFFF +#endif +#if (G123PL >= G124PL) || (G123PL == 0) +#define MG124_13PL ~(1 << 2) +#else +#define MG124_13PL 0xFFFF +#endif +#if (G125PL >= G124PL) || (G125PL == 0) +#define MG124_15PL ~(1 << 4) +#else +#define MG124_15PL 0xFFFF +#endif +#if (G126PL >= G124PL) || (G126PL == 0) +#define MG124_16PL ~(1 << 5) +#else +#define MG124_16PL 0xFFFF +#endif +#if (G127PL >= G124PL) || (G127PL == 0) +#define MG124_17PL ~(1 << 6) +#else +#define MG124_17PL 0xFFFF +#endif +#if (G128PL >= G124PL) || (G128PL == 0) +#define MG124_18PL ~(1 << 7) +#else +#define MG124_18PL 0xFFFF +#endif +#define MG124_14PL 0x00F7 +#define MG124 (MG124_11PL & MG124_12PL & MG124_13PL & MG124_14PL & \ + MG124_15PL & MG124_16PL & MG124_17PL & MG124_18PL) +// End of MG124: + +// Beginning of MG125: +#if (G121PL >= G125PL) || (G121PL == 0) +#define MG125_11PL ~(1) +#else +#define MG125_11PL 0xFFFF +#endif +#if (G122PL >= G125PL) || (G122PL == 0) +#define MG125_12PL ~(1 << 1) +#else +#define MG125_12PL 0xFFFF +#endif +#if (G123PL >= G125PL) || (G123PL == 0) +#define MG125_13PL ~(1 << 2) +#else +#define MG125_13PL 0xFFFF +#endif +#if (G124PL >= G125PL) || (G124PL == 0) +#define MG125_14PL ~(1 << 3) +#else +#define MG125_14PL 0xFFFF +#endif +#if (G126PL >= G125PL) || (G126PL == 0) +#define MG125_16PL ~(1 << 5) +#else +#define MG125_16PL 0xFFFF +#endif +#if (G127PL >= G125PL) || (G127PL == 0) +#define MG125_17PL ~(1 << 6) +#else +#define MG125_17PL 0xFFFF +#endif +#if (G128PL >= G125PL) || (G128PL == 0) +#define MG125_18PL ~(1 << 7) +#else +#define MG125_18PL 0xFFFF +#endif +#define MG125_15PL 0x00EF +#define MG125 (MG125_11PL & MG125_12PL & MG125_13PL & MG125_14PL & \ + MG125_15PL & MG125_16PL & MG125_17PL & MG125_18PL) +// End of MG125: + +// Beginning of MG126: +#if (G121PL >= G126PL) || (G121PL == 0) +#define MG126_11PL ~(1) +#else +#define MG126_11PL 0xFFFF +#endif +#if (G122PL >= G126PL) || (G122PL == 0) +#define MG126_12PL ~(1 << 1) +#else +#define MG126_12PL 0xFFFF +#endif +#if (G123PL >= G126PL) || (G123PL == 0) +#define MG126_13PL ~(1 << 2) +#else +#define MG126_13PL 0xFFFF +#endif +#if (G124PL >= G126PL) || (G124PL == 0) +#define MG126_14PL ~(1 << 3) +#else +#define MG126_14PL 0xFFFF +#endif +#if (G125PL >= G126PL) || (G125PL == 0) +#define MG126_15PL ~(1 << 4) +#else +#define MG126_15PL 0xFFFF +#endif +#if (G127PL >= G126PL) || (G127PL == 0) +#define MG126_17PL ~(1 << 6) +#else +#define MG126_17PL 0xFFFF +#endif +#if (G128PL >= G126PL) || (G128PL == 0) +#define MG126_18PL ~(1 << 7) +#else +#define MG126_18PL 0xFFFF +#endif +#define MG126_16PL 0x00DF +#define MG126 (MG126_11PL & MG126_12PL & MG126_13PL & MG126_14PL & \ + MG126_15PL & MG126_16PL & MG126_17PL & MG126_18PL) +// End of MG126: + +// Beginning of MG127: +#if (G121PL >= G127PL) || (G121PL == 0) +#define MG127_11PL ~(1) +#else +#define MG127_11PL 0xFFFF +#endif +#if (G122PL >= G127PL) || (G122PL == 0) +#define MG127_12PL ~(1 << 1) +#else +#define MG127_12PL 0xFFFF +#endif +#if (G123PL >= G127PL) || (G123PL == 0) +#define MG127_13PL ~(1 << 2) +#else +#define MG127_13PL 0xFFFF +#endif +#if (G124PL >= G127PL) || (G124PL == 0) +#define MG127_14PL ~(1 << 3) +#else +#define MG127_14PL 0xFFFF +#endif +#if (G125PL >= G127PL) || (G125PL == 0) +#define MG127_15PL ~(1 << 4) +#else +#define MG127_15PL 0xFFFF +#endif +#if (G126PL >= G127PL) || (G126PL == 0) +#define MG127_16PL ~(1 << 5) +#else +#define MG127_16PL 0xFFFF +#endif +#if (G128PL >= G127PL) || (G128PL == 0) +#define MG127_18PL ~(1 << 7) +#else +#define MG127_18PL 0xFFFF +#endif +#define MG127_17PL 0x00BF +#define MG127 (MG127_11PL & MG127_12PL & MG127_13PL & MG127_14PL & \ + MG127_15PL & MG127_16PL & MG127_17PL & MG127_18PL) +// End of MG127: + +// Beginning of MG128: +#if (G121PL >= G128PL) || (G121PL == 0) +#define MG128_11PL ~(1) +#else +#define MG128_11PL 0xFFFF +#endif +#if (G122PL >= G128PL) || (G122PL == 0) +#define MG128_12PL ~(1 << 1) +#else +#define MG128_12PL 0xFFFF +#endif +#if (G123PL >= G128PL) || (G123PL == 0) +#define MG128_13PL ~(1 << 2) +#else +#define MG128_13PL 0xFFFF +#endif +#if (G124PL >= G128PL) || (G124PL == 0) +#define MG128_14PL ~(1 << 3) +#else +#define MG128_14PL 0xFFFF +#endif +#if (G125PL >= G128PL) || (G125PL == 0) +#define MG128_15PL ~(1 << 4) +#else +#define MG128_15PL 0xFFFF +#endif +#if (G126PL >= G128PL) || (G126PL == 0) +#define MG128_16PL ~(1 << 5) +#else +#define MG128_16PL 0xFFFF +#endif +#if (G127PL >= G128PL) || (G127PL == 0) +#define MG128_17PL ~(1 << 6) +#else +#define MG128_17PL 0xFFFF +#endif +#define MG128_18PL 0x007F +#define MG128 (MG128_11PL & MG128_12PL & MG128_13PL & MG128_14PL & \ + MG128_15PL & MG128_16PL & MG128_17PL & MG128_18PL) +// End of MG128: + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // eof + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c b/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c new file mode 100644 index 0000000..f1eafe3 --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c @@ -0,0 +1,83 @@ +// TI File $Revision: /main/1 $ +// Checkin $Date: August 18, 2006 13:46:35 $ +//########################################################################### +// +// FILE: DSP2833x_PieCtrl.c +// +// TITLE: DSP2833x Device PIE Control Register Initialization Functions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +//--------------------------------------------------------------------------- +// InitPieCtrl: +//--------------------------------------------------------------------------- +// This function initializes the PIE control registers to a known state. +// +void InitPieCtrl(void) +{ + // Disable Interrupts at the CPU level: + DINT; + + // Disable the PIE + PieCtrlRegs.PIECTRL.bit.ENPIE = 0; + + // Clear all PIEIER registers: + PieCtrlRegs.PIEIER1.all = 0; + PieCtrlRegs.PIEIER2.all = 0; + PieCtrlRegs.PIEIER3.all = 0; + PieCtrlRegs.PIEIER4.all = 0; + PieCtrlRegs.PIEIER5.all = 0; + PieCtrlRegs.PIEIER6.all = 0; + PieCtrlRegs.PIEIER7.all = 0; + PieCtrlRegs.PIEIER8.all = 0; + PieCtrlRegs.PIEIER9.all = 0; + PieCtrlRegs.PIEIER10.all = 0; + PieCtrlRegs.PIEIER11.all = 0; + PieCtrlRegs.PIEIER12.all = 0; + + // Clear all PIEIFR registers: + PieCtrlRegs.PIEIFR1.all = 0; + PieCtrlRegs.PIEIFR2.all = 0; + PieCtrlRegs.PIEIFR3.all = 0; + PieCtrlRegs.PIEIFR4.all = 0; + PieCtrlRegs.PIEIFR5.all = 0; + PieCtrlRegs.PIEIFR6.all = 0; + PieCtrlRegs.PIEIFR7.all = 0; + PieCtrlRegs.PIEIFR8.all = 0; + PieCtrlRegs.PIEIFR9.all = 0; + PieCtrlRegs.PIEIFR10.all = 0; + PieCtrlRegs.PIEIFR11.all = 0; + PieCtrlRegs.PIEIFR12.all = 0; + + +} + +//--------------------------------------------------------------------------- +// EnableInterrupts: +//--------------------------------------------------------------------------- +// This function enables the PIE module and CPU interrupts +// +void EnableInterrupts() +{ + + // Enable the PIE + PieCtrlRegs.PIECTRL.bit.ENPIE = 1; + + // Enables PIE to drive a pulse into the CPU + PieCtrlRegs.PIEACK.all = 0xFFFF; + + // Enable Interrupts at the CPU level + EINT; + +} + + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_PieVect.c b/v120/DSP2833x_common/source/DSP2833x_PieVect.c new file mode 100644 index 0000000..d163c54 --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_PieVect.c @@ -0,0 +1,204 @@ +// TI File $Revision: /main/1 $ +// Checkin $Date: August 18, 2006 13:46:38 $ +//########################################################################### +// +// FILE: DSP2833x_PieVect.c +// +// TITLE: DSP2833x Devices PIE Vector Table Initialization Functions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +const struct PIE_VECT_TABLE PieVectTableInit = { + + PIE_RESERVED, // 0 Reserved space + PIE_RESERVED, // 1 Reserved space + PIE_RESERVED, // 2 Reserved space + PIE_RESERVED, // 3 Reserved space + PIE_RESERVED, // 4 Reserved space + PIE_RESERVED, // 5 Reserved space + PIE_RESERVED, // 6 Reserved space + PIE_RESERVED, // 7 Reserved space + PIE_RESERVED, // 8 Reserved space + PIE_RESERVED, // 9 Reserved space + PIE_RESERVED, // 10 Reserved space + PIE_RESERVED, // 11 Reserved space + PIE_RESERVED, // 12 Reserved space + + +// Non-Peripheral Interrupts + INT13_ISR, // XINT13 or CPU-Timer 1 + INT14_ISR, // CPU-Timer2 + DATALOG_ISR, // Datalogging interrupt + RTOSINT_ISR, // RTOS interrupt + EMUINT_ISR, // Emulation interrupt + NMI_ISR, // Non-maskable interrupt + ILLEGAL_ISR, // Illegal operation TRAP + USER1_ISR, // User Defined trap 1 + USER2_ISR, // User Defined trap 2 + USER3_ISR, // User Defined trap 3 + USER4_ISR, // User Defined trap 4 + USER5_ISR, // User Defined trap 5 + USER6_ISR, // User Defined trap 6 + USER7_ISR, // User Defined trap 7 + USER8_ISR, // User Defined trap 8 + USER9_ISR, // User Defined trap 9 + USER10_ISR, // User Defined trap 10 + USER11_ISR, // User Defined trap 11 + USER12_ISR, // User Defined trap 12 + +// Group 1 PIE Vectors + SEQ1INT_ISR, // 1.1 ADC + SEQ2INT_ISR, // 1.2 ADC + rsvd_ISR, // 1.3 + XINT1_ISR, // 1.4 + XINT2_ISR, // 1.5 + ADCINT_ISR, // 1.6 ADC + TINT0_ISR, // 1.7 Timer 0 + WAKEINT_ISR, // 1.8 WD, Low Power + +// Group 2 PIE Vectors + EPWM1_TZINT_ISR, // 2.1 EPWM-1 Trip Zone + EPWM2_TZINT_ISR, // 2.2 EPWM-2 Trip Zone + EPWM3_TZINT_ISR, // 2.3 EPWM-3 Trip Zone + EPWM4_TZINT_ISR, // 2.4 EPWM-4 Trip Zone + EPWM5_TZINT_ISR, // 2.5 EPWM-5 Trip Zone + EPWM6_TZINT_ISR, // 2.6 EPWM-6 Trip Zone + rsvd_ISR, // 2.7 + rsvd_ISR, // 2.8 + +// Group 3 PIE Vectors + EPWM1_INT_ISR, // 3.1 EPWM-1 Interrupt + EPWM2_INT_ISR, // 3.2 EPWM-2 Interrupt + EPWM3_INT_ISR, // 3.3 EPWM-3 Interrupt + EPWM4_INT_ISR, // 3.4 EPWM-4 Interrupt + EPWM5_INT_ISR, // 3.5 EPWM-5 Interrupt + EPWM6_INT_ISR, // 3.6 EPWM-6 Interrupt + rsvd_ISR, // 3.7 + rsvd_ISR, // 3.8 + +// Group 4 PIE Vectors + ECAP1_INT_ISR, // 4.1 ECAP-1 + ECAP2_INT_ISR, // 4.2 ECAP-2 + ECAP3_INT_ISR, // 4.3 ECAP-3 + ECAP4_INT_ISR, // 4.4 ECAP-4 + ECAP5_INT_ISR, // 4.5 ECAP-5 + ECAP6_INT_ISR, // 4.6 ECAP-6 + rsvd_ISR, // 4.7 + rsvd_ISR, // 4.8 + +// Group 5 PIE Vectors + EQEP1_INT_ISR, // 5.1 EQEP-1 + EQEP2_INT_ISR, // 5.2 EQEP-2 + rsvd_ISR, // 5.3 + rsvd_ISR, // 5.4 + rsvd_ISR, // 5.5 + rsvd_ISR, // 5.6 + rsvd_ISR, // 5.7 + rsvd_ISR, // 5.8 + + +// Group 6 PIE Vectors + SPIRXINTA_ISR, // 6.1 SPI-A + SPITXINTA_ISR, // 6.2 SPI-A + MRINTA_ISR, // 6.3 McBSP-A + MXINTA_ISR, // 6.4 McBSP-A + MRINTB_ISR, // 6.5 McBSP-B + MXINTB_ISR, // 6.6 McBSP-B + rsvd_ISR, // 6.7 + rsvd_ISR, // 6.8 + + +// Group 7 PIE Vectors + DINTCH1_ISR, // 7.1 DMA channel 1 + DINTCH2_ISR, // 7.2 DMA channel 2 + DINTCH3_ISR, // 7.3 DMA channel 3 + DINTCH4_ISR, // 7.4 DMA channel 4 + DINTCH5_ISR, // 7.5 DMA channel 5 + DINTCH6_ISR, // 7.6 DMA channel 6 + rsvd_ISR, // 7.7 + rsvd_ISR, // 7.8 + +// Group 8 PIE Vectors + I2CINT1A_ISR, // 8.1 I2C + I2CINT2A_ISR, // 8.2 I2C + rsvd_ISR, // 8.3 + rsvd_ISR, // 8.4 + SCIRXINTC_ISR, // 8.5 SCI-C + SCITXINTC_ISR, // 8.6 SCI-C + rsvd_ISR, // 8.7 + rsvd_ISR, // 8.8 + +// Group 9 PIE Vectors + SCIRXINTA_ISR, // 9.1 SCI-A + SCITXINTA_ISR, // 9.2 SCI-A + SCIRXINTB_ISR, // 9.3 SCI-B + SCITXINTB_ISR, // 9.4 SCI-B + ECAN0INTA_ISR, // 9.5 eCAN-A + ECAN1INTA_ISR, // 9.6 eCAN-A + ECAN0INTB_ISR, // 9.7 eCAN-B + ECAN1INTB_ISR, // 9.8 eCAN-B + +// Group 10 PIE Vectors + rsvd_ISR, // 10.1 + rsvd_ISR, // 10.2 + rsvd_ISR, // 10.3 + rsvd_ISR, // 10.4 + rsvd_ISR, // 10.5 + rsvd_ISR, // 10.6 + rsvd_ISR, // 10.7 + rsvd_ISR, // 10.8 + +// Group 11 PIE Vectors + rsvd_ISR, // 11.1 + rsvd_ISR, // 11.2 + rsvd_ISR, // 11.3 + rsvd_ISR, // 11.4 + rsvd_ISR, // 11.5 + rsvd_ISR, // 11.6 + rsvd_ISR, // 11.7 + rsvd_ISR, // 11.8 + +// Group 12 PIE Vectors + XINT3_ISR, // 12.1 + XINT4_ISR, // 12.2 + XINT5_ISR, // 12.3 + XINT6_ISR, // 12.4 + XINT7_ISR, // 12.5 + rsvd_ISR, // 12.6 + LVF_ISR, // 12.7 + LUF_ISR, // 12.8 +}; + + +//--------------------------------------------------------------------------- +// InitPieVectTable: +//--------------------------------------------------------------------------- +// This function initializes the PIE vector table to a known state. +// This function must be executed after boot time. +// + +void InitPieVectTable(void) +{ + int16 i; + Uint32 *Source = (void *) &PieVectTableInit; + Uint32 *Dest = (void *) &PieVectTable; + + EALLOW; + for(i=0; i < 128; i++) + *Dest++ = *Source++; + EDIS; + + // Enable the PIE Vector Table + PieCtrlRegs.PIECTRL.bit.ENPIE = 1; + +} + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c b/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c new file mode 100644 index 0000000..bf821e1 --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c @@ -0,0 +1,1863 @@ +// TI File $Revision: /main/5 $ +// Checkin $Date: January 14, 2008 11:28:12 $ +//########################################################################### +// +// FILE: DSP2833x_SWPrioritizedDefaultIsr.c +// +// TITLE: DSP2833x Device Default Software Prioritized Interrupt Service Routines. +// +//########################################################################### +// +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + + +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" + + +// Connected to INT13 of CPU (use MINT13 mask): +// Note CPU-Timer1 is reserved for TI use, however XINT13 +// ISR can be used by the user. +#if (INT13PL != 0) +interrupt void INT13_ISR(void) // INT13 or CPU-Timer1 +{ + IER |= MINT13; // Set "global" priority + EINT; + + // Insert ISR Code here + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to INT14 of CPU (use MINT14 mask): +#if (INT14PL != 0) +interrupt void INT14_ISR(void) // CPU-Timer2 +{ + IER |= MINT14; // Set "global" priority + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to INT15 of CPU (use MINT15 mask): +#if (INT15PL != 0) +interrupt void DATALOG_ISR(void) // Datalogging interrupt +{ + IER |= MINT15; // Set "global" priority + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to INT16 of CPU (use MINT16 mask): +#if (INT16PL != 0) +interrupt void RTOSINT_ISR(void) // RTOS interrupt +{ + IER |= MINT16; // Set "global" priority + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to EMUINT of CPU (non-maskable): +interrupt void EMUINT_ISR(void) // Emulation interrupt +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + + +// Connected to NMI of CPU (non-maskable): +interrupt void NMI_ISR(void) // Non-maskable interrupt +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void ILLEGAL_ISR(void) // Illegal operation TRAP +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + + +interrupt void USER1_ISR(void) // User Defined trap 1 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER2_ISR(void) // User Defined trap 2 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER3_ISR(void) // User Defined trap 3 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER4_ISR(void) // User Defined trap 4 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER5_ISR(void) // User Defined trap 5 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER6_ISR(void) // User Defined trap 6 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER7_ISR(void) // User Defined trap 7 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER8_ISR(void) // User Defined trap 8 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER9_ISR(void) // User Defined trap 9 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER10_ISR(void) // User Defined trap 10 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER11_ISR(void) // User Defined trap 11 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + +interrupt void USER12_ISR(void) // User Defined trap 12 +{ + EINT; + + // Insert ISR Code here....... + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} + + +// ----------------------------------------------------------- +// PIE Group 1 - MUXed into CPU INT1 +// ----------------------------------------------------------- + +// Connected to PIEIER1_1 (use MINT1 and MG11 masks): +#if (G11PL != 0) +interrupt void SEQ1INT_ISR( void ) // ADC +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= M_INT1; + IER &= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG11; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER1_2 (use MINT1 and MG12 masks): +#if (G12PL != 0) +interrupt void SEQ2INT_ISR( void ) // ADC +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= M_INT1; + IER &= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG12; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + + + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +// Connected to PIEIER1_4 (use MINT1 and MG14 masks): +#if (G14PL != 0) +interrupt void XINT1_ISR(void) +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG14; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER1_5 (use MINT1 and MG15 masks): +#if (G15PL != 0) +interrupt void XINT2_ISR(void) +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG15; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + + +// Connected to PIEIER1_6 (use MINT1 and MG16 masks): +#if (G16PL != 0) +interrupt void ADCINT_ISR(void) // ADC +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= M_INT1; + IER &= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG16; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER1_7 (use MINT1 and MG17 masks): +#if (G17PL != 0) +interrupt void TINT0_ISR(void) // CPU-Timer 0 +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= M_INT1; + IER &= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG17; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER1_8 (use MINT1 and MG18 masks): +#if (G18PL != 0) +interrupt void WAKEINT_ISR(void) // WD/LPM +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + IER |= M_INT1; + IER &= MINT1; // Set "global" priority + PieCtrlRegs.PIEIER1.all &= MG18; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER1.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + + +// ----------------------------------------------------------- +// PIE Group 2 - MUXed into CPU INT2 +// ----------------------------------------------------------- + +// Connected to PIEIER2_1 (use MINT2 and MG21 masks): +#if (G21PL != 0) +interrupt void EPWM1_TZINT_ISR(void) // ePWM1 Trip Zone +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + IER |= M_INT2; + IER &= MINT2; // Set "global" priority + PieCtrlRegs.PIEIER2.all &= MG21; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER2.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER2_2 (use MINT2 and MG22 masks): +#if (G22PL != 0) +interrupt void EPWM2_TZINT_ISR(void) // ePWM2 Trip Zone +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + IER |= M_INT2; + IER &= MINT2; // Set "global" priority + PieCtrlRegs.PIEIER2.all &= MG22; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER2.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER2_3 (use MINT2 and MG23 masks): +#if (G23PL != 0) +interrupt void EPWM3_TZINT_ISR(void) // ePWM3 Trip Zone +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + IER |= M_INT2; + IER &= MINT2; // Set "global" priority + PieCtrlRegs.PIEIER2.all &= MG23; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER2.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER2_4 (use MINT2 and MG24 masks): +#if (G24PL != 0) +interrupt void EPWM4_TZINT_ISR(void) // ePWM4 Trip Zone +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + IER |= M_INT2; + IER &= MINT2; // Set "global" priority + PieCtrlRegs.PIEIER2.all &= MG24; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER2.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER2_5 (use MINT2 and MG25 masks): +#if (G25PL != 0) +interrupt void EPWM5_TZINT_ISR(void) // ePWM5 Trip Zone +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + IER |= M_INT2; + IER &= MINT2; // Set "global" priority + PieCtrlRegs.PIEIER2.all &= MG25; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER2.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER2_6 (use MINT2 and MG26 masks): +#if (G26PL != 0) +interrupt void EPWM6_TZINT_ISR(void) // ePWM6 Trip Zone +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + IER |= M_INT2; + IER &= MINT2; // Set "global" priority + PieCtrlRegs.PIEIER2.all &= MG26; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER2.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +// ----------------------------------------------------------- +// PIE Group 3 - MUXed into CPU INT3 +// ----------------------------------------------------------- + + +// Connected to PIEIER3_1 (use MINT3 and MG31 masks): +#if (G31PL != 0) +interrupt void EPWM1_INT_ISR(void) // ePWM1 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + IER |= M_INT3; + IER &= MINT3; // Set "global" priority + PieCtrlRegs.PIEIER3.all &= MG31; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER3.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER3_2 (use MINT3 and MG32 masks): +#if (G32PL != 0) +interrupt void EPWM2_INT_ISR(void) // ePWM2 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + IER |= M_INT3; + IER &= MINT3; // Set "global" priority + PieCtrlRegs.PIEIER3.all &= MG32; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER3.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER3_3 (use MINT3 and MG33 masks): +#if (G33PL != 0) +interrupt void EPWM3_INT_ISR(void) // ePWM3 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + IER |= M_INT3; + IER &= MINT3; // Set "global" priority + PieCtrlRegs.PIEIER3.all &= MG33; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER3.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER3_4 (use MINT3 and MG34 masks): +#if (G34PL != 0) +interrupt void EPWM4_INT_ISR(void) // ePWM4 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + IER |= M_INT3; + IER &= MINT3; // Set "global" priority + PieCtrlRegs.PIEIER3.all &= MG34; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER3.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER3_5 (use MINT3 and MG35 masks): +#if (G35PL != 0) +interrupt void EPWM5_INT_ISR(void) // ePWM5 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + IER |= M_INT3; + IER &= MINT3; // Set "global" priority + PieCtrlRegs.PIEIER3.all &= MG35; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER3.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER3_6 (use MINT3 and MG36 masks): +#if (G36PL != 0) +interrupt void EPWM6_INT_ISR(void) // ePWM6 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + IER |= M_INT3; + IER &= MINT3; // Set "global" priority + PieCtrlRegs.PIEIER3.all &= MG36; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER3.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + + +// ----------------------------------------------------------- +// PIE Group 4 - MUXed into CPU INT4 +// ----------------------------------------------------------- + + +// Connected to PIEIER4_1 (use MINT4 and MG41 masks): +#if (G41PL != 0) +interrupt void ECAP1_INT_ISR(void) // eCAP1 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + IER |= M_INT4; + IER &= MINT4; // Set "global" priority + PieCtrlRegs.PIEIER4.all &= MG41; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER4.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER4_2 (use MINT4 and MG42 masks): +#if (G42PL != 0) +interrupt void ECAP2_INT_ISR(void) // eCAP2 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all; + IER |= M_INT4; + IER &= MINT4; // Set "global" priority + PieCtrlRegs.PIEIER4.all &= MG42; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER4.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER4_3 (use MINT4 and MG43 masks): +#if (G43PL != 0) +interrupt void ECAP3_INT_ISR(void) // eCAP3 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + IER |= M_INT4; + IER &= MINT4; // Set "global" priority + PieCtrlRegs.PIEIER4.all &= MG43; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER4.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER4_4 (use MINT4 and MG44 masks): +#if (G44PL != 0) +interrupt void ECAP4_INT_ISR(void) // eCAP4 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + IER |= M_INT4; + IER &= MINT4; // Set "global" priority + PieCtrlRegs.PIEIER4.all &= MG44; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER4.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER4_5 (use MINT4 and MG45 masks): +#if (G45PL != 0) +interrupt void ECAP5_INT_ISR(void) // eCAP5 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + IER |= M_INT4; + IER &= MINT4; // Set "global" priority + PieCtrlRegs.PIEIER4.all &= MG45; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER4.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER4_6 (use MINT4 and MG46 masks): +#if (G46PL != 0) +interrupt void ECAP6_INT_ISR(void) // eCAP6 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + IER |= M_INT4; + IER &= MINT4; // Set "global" priority + PieCtrlRegs.PIEIER4.all &= MG46; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER4.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + + +// ----------------------------------------------------------- +// PIE Group 5 - MUXed into CPU INT5 +// ----------------------------------------------------------- + +// Connected to PIEIER5_1 (use MINT5 and MG51 masks): +#if (G51PL != 0) +interrupt void EQEP1_INT_ISR(void) // eQEP1 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all; + IER |= M_INT5; + IER &= MINT5; // Set "global" priority + PieCtrlRegs.PIEIER5.all &= MG51; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER5.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER5_2 (use MINT5 and MG52 masks): +#if (G52PL != 0) +interrupt void EQEP2_INT_ISR(void) // eQEP2 Interrupt +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all; + IER |= M_INT5; + IER &= MINT5; // Set "global" priority + PieCtrlRegs.PIEIER5.all &= MG52; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER5.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// ----------------------------------------------------------- +// PIE Group 6 - MUXed into CPU INT6 +// ----------------------------------------------------------- + +// Connected to PIEIER6_1 (use MINT6 and MG61 masks): +#if (G61PL != 0) +interrupt void SPIRXINTA_ISR(void) // SPI-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + IER |= M_INT6; + IER &= MINT6; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG61; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER6.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER6_2 (use MINT6 and MG62 masks): +#if (G62PL != 0) +interrupt void SPITXINTA_ISR(void) // SPI-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + IER |= M_INT6; + IER &= MINT6; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG62; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER6.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER6_3 (use MINT6 and MG63 masks): +#if (G63PL != 0) +interrupt void MRINTB_ISR(void) // McBSP-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + IER |= M_INT6; + IER &= MINT6; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG63; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER6.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER6_4 (use MINT6 and MG64 masks): +#if (G64PL != 0) +interrupt void MXINTB_ISR(void) // McBSP-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + IER |= M_INT6; + IER &= MINT6; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG64; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER6.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + + +// Connected to PIEIER6_5 (use MINT6 and MG65 masks): +#if (G65PL != 0) +interrupt void MRINTA_ISR(void) // McBSP-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + IER |= M_INT6; + IER &= MINT6; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG65; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER6.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER6_6 (use MINT6 and MG66 masks): +#if (G66PL != 0) +interrupt void MXINTA_ISR(void) // McBSP-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + IER |= M_INT6; + IER &= MINT6; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG66; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER6.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +// ----------------------------------------------------------- +// PIE Group 7 - MUXed into CPU INT7 +// ----------------------------------------------------------- + +// Connected to PIEIER7_1 (use MINT7 and MG71 masks): +#if (G71PL != 0) +interrupt void DINTCH1_ISR(void) // DMA +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + IER |= M_INT7; + IER &= MINT7; // Set "global" priority + PieCtrlRegs.PIEIER7.all &= MG71; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER7.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER7_2 (use MINT7 and MG72 masks): +#if (G72PL != 0) +interrupt void DINTCH2_ISR(void) // DMA +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + IER |= M_INT7; + IER &= MINT7; // Set "global" priority + PieCtrlRegs.PIEIER7.all &= MG72; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER7.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); +} +#endif + +// Connected to PIEIER7_3 (use MINT7 and MG73 masks): +#if (G73PL != 0) +interrupt void DINTCH3_ISR(void) // DMA +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + IER |= M_INT7; + IER &= MINT7; // Set "global" priority + PieCtrlRegs.PIEIER7.all &= MG73; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER7.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER7_4 (use MINT7 and MG74 masks): +#if (G74PL != 0) +interrupt void DINTCH4_ISR(void) // DMA +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + IER |= M_INT7; + IER &= MINT7; // Set "global" priority + PieCtrlRegs.PIEIER7.all &= MG74; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER7.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + + +// Connected to PIEIER7_5 (use MINT7 and MG75 masks): +#if (G75PL != 0) +interrupt void DINTCH5_ISR(void) // DMA +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + IER |= M_INT7; + IER &= MINT7; // Set "global" priority + PieCtrlRegs.PIEIER7.all &= MG75; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER7.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER7_6 (use MINT7 and MG76 masks): +#if (G76PL != 0) +interrupt void DINTCH6_ISR(void) // DMA +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + IER |= M_INT7; + IER &= MINT7; // Set "global" priority + PieCtrlRegs.PIEIER7.all &= MG76; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER7.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +// ----------------------------------------------------------- +// PIE Group 8 - MUXed into CPU INT8 +// ----------------------------------------------------------- + +// Connected to PIEIER8_1 (use MINT8 and MG81 masks): +#if (G81PL != 0) +interrupt void I2CINT1A_ISR(void) // I2C-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + IER |= M_INT8; + IER &= MINT8; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG81; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER8.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER8_2 (use MINT8 and MG82 masks): +#if (G82PL != 0) +interrupt void I2CINT2A_ISR(void) // I2C-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + IER |= M_INT8; + IER &= MINT8; // Set "global" priority + PieCtrlRegs.PIEIER8.all &= MG82; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER8.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER8_5 (use MINT8 and MG85 masks): +#if (G85PL != 0) +interrupt void SCIRXINTC_ISR(void) // SCI-C +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + IER |= M_INT8; + IER &= MINT8; // Set "global" priority + PieCtrlRegs.PIEIER6.all &= MG85; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER8.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER8_6 (use MINT8 and MG86 masks): +#if (G82PL != 0) +interrupt void SCITXINTC_ISR(void) // SCI-C +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + IER |= M_INT8; + IER &= MINT8; // Set "global" priority + PieCtrlRegs.PIEIER8.all &= MG86; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER8.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// ----------------------------------------------------------- +// PIE Group 9 - MUXed into CPU INT9 +// ----------------------------------------------------------- + +// Connected to PIEIER9_1 (use MINT9 and MG91 masks): +#if (G91PL != 0) +interrupt void SCIRXINTA_ISR(void) // SCI-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG91; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER9_2 (use MINT9 and MG92 masks): +#if (G92PL != 0) +interrupt void SCITXINTA_ISR(void) // SCI-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG92; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +// Connected to PIEIER9_3 (use MINT9 and MG93 masks): +#if (G93PL != 0) +interrupt void SCIRXINTB_ISR(void) // SCI-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG93; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER9_4 (use MINT9 and MG94 masks): +#if (G94PL != 0) +interrupt void SCITXINTB_ISR(void) // SCI-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG94; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER9_5 (use MINT9 and MG95 masks): +#if (G95PL != 0) +interrupt void ECAN0INTA_ISR(void) // eCAN-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG95; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER9_6 (use MINT9 and MG96 masks): +#if (G96PL != 0) +interrupt void ECAN1INTA_ISR(void) // eCAN-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG96; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER9_7 (use MINT9 and MG97 masks): +#if (G97PL != 0) +interrupt void ECAN0INTB_ISR(void) // eCAN-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG97; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER9_8 (use MINT9 and MG98 masks): +#if (G98PL != 0) +interrupt void ECAN1INTB_ISR(void) // eCAN-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + IER |= M_INT9; + IER &= MINT9; // Set "global" priority + PieCtrlRegs.PIEIER9.all &= MG98; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER9.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// ----------------------------------------------------------- +// PIE Group 10 - MUXed into CPU INT10 +// ----------------------------------------------------------- +// ----------------------------------------------------------- +// PIE Group 11 - MUXed into CPU INT11 +// ----------------------------------------------------------- +// ----------------------------------------------------------- +// PIE Group 12 - MUXed into CPU INT12 +// ----------------------------------------------------------- + +// Connected to PIEIER9_1 (use MINT12 and MG121 masks): +#if (G121PL != 0) +interrupt void XINT3_ISR(void) +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG121; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER12_2 (use MINT12 and MG122 masks): +#if (G122PL != 0) +interrupt void XINT4_ISR(void) +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG122; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +// Connected to PIEIER12_3 (use MINT12 and MG123 masks): +#if (G123PL != 0) +interrupt void XINT5_ISR(void) // SCI-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG123; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER12_4 (use MINT12 and MG124 masks): +#if (G124PL != 0) +interrupt void XINT6_ISR(void) // SCI-B +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG124; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER12_5 (use MINT12 and MG125 masks): +#if (G125PL != 0) +interrupt void XINT7_ISR(void) // eCAN-A +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG125; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER12_7 (use MINT12 and MG127 masks): +#if (G127PL != 0) +interrupt void LVF_ISR(void) // FPU +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG127; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + +// Connected to PIEIER12_8 (use MINT12 and MG128 masks): +#if (G128PL != 0) +interrupt void LUF_ISR(void) // FPU +{ + // Set interrupt priority: + volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + IER |= M_INT12; + IER &= MINT12; // Set "global" priority + PieCtrlRegs.PIEIER12.all &= MG128; // Set "group" priority + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + EINT; + + // Insert ISR Code here....... + + // Restore registers saved: + DINT; + PieCtrlRegs.PIEIER12.all = TempPIEIER; + + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + asm (" ESTOP0"); + for(;;); + +} +#endif + + +//--------------------------------------------------------------------------- +// Catch All Default ISRs: +// + +interrupt void PIE_RESERVED(void) // Reserved space. For test. +{ + asm (" ESTOP0"); + for(;;); +} + +interrupt void INT_NOTUSED_ISR(void) // Reserved space. For test. +{ + asm (" ESTOP0"); + for(;;); +} + +interrupt void rsvd_ISR(void) // For test +{ + asm (" ESTOP0"); + for(;;); +} + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c b/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c new file mode 100644 index 0000000..99379ea --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c @@ -0,0 +1,511 @@ +// TI File $Revision: /main/2 $ +// Checkin $Date: April 4, 2007 14:25:31 $ +//########################################################################### +// +// FILE: DSP2833x_SWPiroritizedPieVect.c +// +// TITLE: DSP2833x Devices SW Prioritized PIE Vector Table Initialization. +// +//########################################################################### +// +// Original Source by A.T. +// +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File +#include "DSP2833x_SWPrioritizedIsrLevels.h" + +const struct PIE_VECT_TABLE PieVectTableInit = { + + PIE_RESERVED, // Reserved space + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + PIE_RESERVED, // reserved + +// Non-Peripheral Interrupts: + #if (INT13PL != 0) + INT13_ISR, // XINT13 + #else + INT_NOTUSED_ISR, + #endif + + #if (INT14PL != 0) + INT14_ISR, // CPU-Timer2 + #else + INT_NOTUSED_ISR, + #endif + + #if (INT15PL != 0) + DATALOG_ISR, // Datalogging interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (INT16PL != 0) + RTOSINT_ISR, // RTOS interrupt + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, // reserved interrupt + NMI_ISR, // Non-maskable interrupt + ILLEGAL_ISR, // Illegal operation TRAP + USER1_ISR, // User Defined trap 1 + USER2_ISR, // User Defined trap 2 + USER3_ISR, // User Defined trap 3 + USER4_ISR, // User Defined trap 4 + USER5_ISR, // User Defined trap 5 + USER6_ISR, // User Defined trap 6 + USER7_ISR, // User Defined trap 7 + USER8_ISR, // User Defined trap 8 + USER9_ISR, // User Defined trap 9 + USER10_ISR, // User Defined trap 10 + USER11_ISR, // User Defined trap 11 + USER12_ISR, // User Defined trap 12 + +// Group 1 PIE Vectors: + #if (G11PL != 0) + SEQ1INT_ISR, // ADC + #else + INT_NOTUSED_ISR, + #endif + + #if (G12PL != 0) + SEQ2INT_ISR, // ADC + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + + #if (G14PL != 0) + XINT1_ISR, // External + #else + INT_NOTUSED_ISR, + #endif + + #if (G15PL != 0) + XINT2_ISR, // External + #else + INT_NOTUSED_ISR, + #endif + + #if (G16PL != 0) + ADCINT_ISR, // ADC + #else + INT_NOTUSED_ISR, + #endif + + #if (G17PL != 0) + TINT0_ISR, // Timer 0 + #else + INT_NOTUSED_ISR, + #endif + + #if (G18PL != 0) + WAKEINT_ISR, // WD & Low Power + #else + INT_NOTUSED_ISR, + #endif + +// Group 2 PIE Vectors: + #if (G21PL != 0) + EPWM1_TZINT_ISR, // ePWM1 Trip Zone + #else + INT_NOTUSED_ISR, + #endif + + #if (G22PL != 0) + EPWM2_TZINT_ISR, // ePWM2 Trip Zone + #else + INT_NOTUSED_ISR, + #endif + + #if (G23PL != 0) + EPWM3_TZINT_ISR, // ePWM3 Trip Zone + #else + INT_NOTUSED_ISR, + #endif + + #if (G24PL != 0) + EPWM4_TZINT_ISR, // ePWM4 Trip Zone + #else + INT_NOTUSED_ISR, + #endif + + #if (G25PL != 0) + EPWM5_TZINT_ISR, // ePWM5 Trip Zone + #else + INT_NOTUSED_ISR, + #endif + + #if (G26PL != 0) + EPWM6_TZINT_ISR, // ePWM6 Trip Zone + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + +// Group 3 PIE Vectors: + #if (G31PL != 0) + EPWM1_INT_ISR, // ePWM1 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G32PL != 0) + EPWM2_INT_ISR, // ePWM2 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G33PL != 0) + EPWM3_INT_ISR, // ePWM3 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G34PL != 0) + EPWM4_INT_ISR, // ePWM4 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G35PL != 0) + EPWM5_INT_ISR, // ePWM5 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G36PL != 0) + EPWM6_INT_ISR, // ePWM6 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + +// Group 4 PIE Vectors: + #if (G41PL != 0) + ECAP1_INT_ISR, // eCAP1 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G42PL != 0) + ECAP2_INT_ISR, // eCAP2 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G43PL != 0) + ECAP3_INT_ISR, // eCAP3 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G44PL != 0) + ECAP4_INT_ISR, // eCAP4 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G45PL != 0) + ECAP5_INT_ISR, // eCAP5 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G46PL != 0) + ECAP6_INT_ISR, // eCAP6 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + +// Group 5 PIE Vectors: + #if (G51PL != 0) + EQEP1_INT_ISR, // eQEP1 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G52PL != 0) + EQEP2_INT_ISR, // eQEP2 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + +// Group 6 PIE Vectors: + #if (G61PL != 0) + SPIRXINTA_ISR, // SPI-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G62PL != 0) + SPITXINTA_ISR, // SPI-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G63PL != 0) + MRINTB_ISR, // McBSP-B + #else + INT_NOTUSED_ISR, + #endif + + #if (G64PL != 0) + MXINTB_ISR, // McBSP-B + #else + INT_NOTUSED_ISR, + #endif + + #if (G65PL != 0) + MRINTA_ISR, // McBSP-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G66PL != 0) + MXINTA_ISR, // McBSP-A + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + +// Group 7 PIE Vectors: + #if (G71PL != 0) + DINTCH1_ISR, // DMA-Channel 1 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G72PL != 0) + DINTCH2_ISR, // DMA-Channel 2 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G73PL != 0) + DINTCH3_ISR, // DMA-Channel 3 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G74PL != 0) + DINTCH4_ISR, // DMA-Channel 4 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G75PL != 0) + DINTCH5_ISR, // DMA-Channel 5 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + #if (G76PL != 0) + DINTCH6_ISR, // DMA-Channel 6 Interrupt + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + +// Group 8 PIE Vectors: + #if (G81PL != 0) + I2CINT1A_ISR, // I2C-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G82PL != 0) + I2CINT2A_ISR, // I2C-A + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + + #if (G85PL != 0) + SCIRXINTC_ISR, // SCI-C + #else + INT_NOTUSED_ISR, + #endif + + #if (G86PL != 0) + SCITXINTC_ISR, // SCI-C + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + rsvd_ISR, + +// Group 9 PIE Vectors: + #if (G91PL != 0) + SCIRXINTA_ISR, // SCI-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G92PL != 0) + SCITXINTA_ISR, // SCI-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G93PL != 0) + SCIRXINTB_ISR, // SCI-B + #else + INT_NOTUSED_ISR, + #endif + + #if (G94PL != 0) + SCITXINTB_ISR, // SCI-B + #else + INT_NOTUSED_ISR, + #endif + + #if (G95PL != 0) + ECAN0INTA_ISR, // eCAN-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G96PL != 0) + ECAN1INTA_ISR, // eCAN-A + #else + INT_NOTUSED_ISR, + #endif + + #if (G97PL != 0) + ECAN0INTB_ISR, // eCAN-B + #else + INT_NOTUSED_ISR, + #endif + + #if (G98PL != 0) + ECAN1INTB_ISR, // eCAN-B + #else + INT_NOTUSED_ISR, + #endif + +// Group 10 PIE Vectors + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + +// Group 11 PIE Vectors + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + rsvd_ISR, + +// Group 12 PIE Vectors + #if (G121PL != 0) + XINT3_ISR, // External interrupt 3 + #else + INT_NOTUSED_ISR, + #endif + + #if (G122PL != 0) + XINT4_ISR, // External interrupt 4 + #else + INT_NOTUSED_ISR, + #endif + + #if (G123PL != 0) + XINT5_ISR, // External interrupt 5 + #else + INT_NOTUSED_ISR, + #endif + + #if (G124PL != 0) + XINT6_ISR, // External interrupt 6 + #else + INT_NOTUSED_ISR, + #endif + + #if (G125PL != 0) + XINT7_ISR, // External interrupt 7 + #else + INT_NOTUSED_ISR, + #endif + + rsvd_ISR, + + #if (G127PL != 0) + LVF_ISR, // Latched overflow flag + #else + INT_NOTUSED_ISR, + #endif + + #if (G128PL != 0) + LUF_ISR, // Latched underflow flag + #else + INT_NOTUSED_ISR, + #endif +}; + +//--------------------------------------------------------------------------- +// InitPieVectTable: +//--------------------------------------------------------------------------- +// This function initializes the PIE vector table to a known state. +// This function must be executed after boot time. +// + +void InitPieVectTable(void) +{ + int16 i; + Uint32 *Source = (void *) &PieVectTableInit; + Uint32 *Dest = (void *) &PieVectTable; + + EALLOW; + for(i=0; i < 128; i++) { + *Dest++ = *Source++; + } + EDIS; +} + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c b/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c new file mode 100644 index 0000000..7d9ea10 --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c @@ -0,0 +1,415 @@ +// TI File $Revision: /main/7 $ +// Checkin $Date: September 20, 2007 13:30:31 $ +//########################################################################### +// +// FILE: DSP2833x_SysCtrl.c +// +// TITLE: DSP2833x Device System Control Initialization & Support Functions. +// +// DESCRIPTION: +// +// Example initialization of system resources. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + + +#include "DSP2833x_Device.h" // Headerfile Include File +#include "DSP2833x_Examples.h" // Examples Include File + +//#include "RS485.h" +//#include "message.h" + +// Functions that will be run from RAM need to be assigned to +// a different section. This section will then be mapped to a load and +// run address using the linker cmd file. + +#pragma CODE_SECTION(InitFlash, "ramfuncs"); + +//--------------------------------------------------------------------------- +// InitSysCtrl: +//--------------------------------------------------------------------------- +// This function initializes the System Control registers to a known state. +// - Disables the watchdog +// - Set the PLLCR for proper SYSCLKOUT frequency +// - Set the pre-scaler for the high and low frequency peripheral clocks +// - Enable the clocks to the peripherals + +long SYSCLKOUT, LSPCLK, HSPCLK; + +void InitSysCtrl(void) +{ + + // Disable the watchdog + DisableDog(); + + // Initialize the PLL control: PLLCR and DIVSEL + // DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h + InitPll(DSP28_PLLCR,DSP28_DIVSEL); + + // Initialize the peripheral clocks + InitPeripheralClocks(); +} + + +//--------------------------------------------------------------------------- +// Example: InitFlash: +//--------------------------------------------------------------------------- +// This function initializes the Flash Control registers + +// CAUTION +// This function MUST be executed out of RAM. Executing it +// out of OTP/Flash will yield unpredictable results + +void InitFlash(void) +{ + EALLOW; + //Enable Flash Pipeline mode to improve performance + //of code executed from Flash. + FlashRegs.FOPT.bit.ENPIPE = 1; + + // CAUTION + //Minimum waitstates required for the flash operating + //at a given CPU rate must be characterized by TI. + //Refer to the datasheet for the latest information. +#if CPU_FRQ_150MHZ + //Set the Paged Waitstate for the Flash + FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5; + + //Set the Random Waitstate for the Flash + FlashRegs.FBANKWAIT.bit.RANDWAIT = 5; + + //Set the Waitstate for the OTP + FlashRegs.FOTPWAIT.bit.OTPWAIT = 8; +#endif + +#if CPU_FRQ_100MHZ + //Set the Paged Waitstate for the Flash + FlashRegs.FBANKWAIT.bit.PAGEWAIT = 3; + + //Set the Random Waitstate for the Flash + FlashRegs.FBANKWAIT.bit.RANDWAIT = 3; + + //Set the Waitstate for the OTP + FlashRegs.FOTPWAIT.bit.OTPWAIT = 5; +#endif + // CAUTION + //ONLY THE DEFAULT VALUE FOR THESE 2 REGISTERS SHOULD BE USED + FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF; + FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; + EDIS; + + //Force a pipeline flush to ensure that the write to + //the last register configured occurs before returning. + + asm(" RPT #7 || NOP"); +} + + +//--------------------------------------------------------------------------- +// Example: ServiceDog: +//--------------------------------------------------------------------------- +// This function resets the watchdog timer. +// Enable this function for using ServiceDog in the application + +void ServiceDog(void) +{ + if(SysCtrlRegs.PLLCR.bit.DIV == DSP28_PLLCR) + if(SysCtrlRegs.PLLSTS.bit.DIVSEL == DSP28_DIVSEL) + { + EALLOW; + SysCtrlRegs.WDKEY = 0x0055; + SysCtrlRegs.WDKEY = 0x00AA; + EDIS; + return; +} } + + +//--------------------------------------------------------------------------- +// Example: DisableDog: +//--------------------------------------------------------------------------- +// This function disables the watchdog timer. + +void DisableDog(void) +{ + EALLOW; + SysCtrlRegs.WDCR= 0x0068; + EDIS; +} + +//--------------------------------------------------------------------------- +// Example: InitPll: +//--------------------------------------------------------------------------- +// This function initializes the PLLCR register. + +void InitPll(Uint16 divval, Uint16 divsel) +{ + long clkVal; + + // Make sure the PLL is not running in limp mode + if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0) + { + // Missing external clock has been detected + // Replace this line with a call to an appropriate + // SystemShutdown(); function. + asm(" ESTOP0"); + } + + // DIVSEL MUST be 0 before PLLCR can be changed from + // 0x0000. It is set to 0 by an external reset XRSn + // This puts us in 1/4 + if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0) + { + EALLOW; + SysCtrlRegs.PLLSTS.bit.DIVSEL = 0; + EDIS; + } + + // Change the PLLCR +// if (SysCtrlRegs.PLLCR.bit.DIV != val) + { + + EALLOW; + // Before setting PLLCR turn off missing clock detect logic + SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1; + SysCtrlRegs.PLLCR.bit.DIV = divval; + EDIS; + + clkVal = (divval)?divval:1; + clkVal = XCLKIN * clkVal; + + // Optional: Wait for PLL to lock. + // During this time the CPU will switch to OSCCLK/2 until + // the PLL is stable. Once the PLL is stable the CPU will + // switch to the new PLL value. + // + // This time-to-lock is monitored by a PLL lock counter. + // + // Code is not required to sit and wait for the PLL to lock. + // However, if the code does anything that is timing critical, + // and requires the correct clock be locked, then it is best to + // wait until this switching has completed. + + // Wait for the PLL lock bit to be set. + + // The watchdog should be disabled before this loop, or fed within + // the loop via ServiceDog(). + + // Uncomment to disable the watchdog + DisableDog(); + + while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1) + { + // Uncomment to service the watchdog + // ServiceDog(); + } + + EALLOW; + SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; + EDIS; + } + + // If switching to 1/2 + if((divsel == 1)||(divsel == 2)) + { + EALLOW; + SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel; + EDIS; + } + + if(divsel == 0) clkVal /= 4; + if(divsel == 1) clkVal /= 4; + if(divsel == 2) clkVal /= 2; + + // If switching to 1/1 + // * First go to 1/2 and let the power settle + // The time required will depend on the system, this is only an example + // * Then switch to 1/1 + + if((divval == 0) && (divsel == 3)) + { + EALLOW; + SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; + DELAY_US(50L); +// pause_us(50L); + SysCtrlRegs.PLLSTS.bit.DIVSEL = 3; + EDIS; + } + + SYSCLKOUT = clkVal; +} + +//-------------------------------------------------------------------------- +// Example: InitPeripheralClocks: +//--------------------------------------------------------------------------- +// This function initializes the clocks to the peripheral modules. +// First the high and low clock prescalers are set +// Second the clocks are enabled to each peripheral. +// To reduce power, leave clocks to unused peripherals disabled +// +// Note: If a peripherals clock is not enabled then you cannot +// read or write to the registers for that peripheral + +void InitPeripheralClocks(void) +{ + long Val; + + EALLOW; + +// HISPCP/LOSPCP prescale register settings, normally it will be set to default values + +#if CLKMULT == 0 + SysCtrlRegs.HISPCP.all = 0x0000; +#endif +#if CLKMULT == 1 + SysCtrlRegs.HISPCP.all = 0x0000; +#endif +#if CLKMULT == 2 + SysCtrlRegs.HISPCP.all = 0x0001; +#endif +#if CLKMULT == 3 + SysCtrlRegs.HISPCP.all = 0x0002; +#endif +#if CLKMULT == 4 + SysCtrlRegs.HISPCP.all = 0x0002; +#endif +#if CLKMULT == 5 + SysCtrlRegs.HISPCP.all = 0x0003; +#endif + + SysCtrlRegs.LOSPCP.all = 0x0000; + + Val = (SysCtrlRegs.HISPCP.all)? + SysCtrlRegs.HISPCP.all*2 : 1; + Val = SYSCLKOUT / Val; + + HSPCLK = Val; + + Val = (SysCtrlRegs.LOSPCP.all)? + SysCtrlRegs.LOSPCP.all*2 : 1; + Val = SYSCLKOUT / Val; + LSPCLK = Val; + +// XCLKOUT to SYSCLKOUT ratio. By default XCLKOUT = 1/4 SYSCLKOUT + // XTIMCLK = SYSCLKOUT/2 + XintfRegs.XINTCNF2.bit.XTIMCLK = 1; + // XCLKOUT = XTIMCLK/2 + XintfRegs.XINTCNF2.bit.CLKMODE = 1; + // Enable XCLKOUT + XintfRegs.XINTCNF2.bit.CLKOFF = 0; + +// Peripheral clock enables set for the selected peripherals. +// If you are not using a peripheral leave the clock off +// to save on power. +// +// Note: not all peripherals are available on all 2833x derivates. +// Refer to the datasheet for your particular device. +// +// This function is not written to be an example of efficient code. + + SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC + + // *IMPORTANT* + // The ADC_cal function, which copies the ADC calibration values from TI reserved + // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the + // Boot ROM. If the boot ROM code is bypassed during the debug process, the + // following function MUST be called for the ADC to function according + // to specification. The clocks to the ADC MUST be enabled before calling this + // function. + // See the device data manual and/or the ADC Reference + // Manual for more information. + + ADC_cal(); + + + SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; // I2C + SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A + SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-B + SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1; // SCI-C + SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A + SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A + SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B + SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1; // eCAN-A + SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1; // eCAN-B + + SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM + SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1 + SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM2 + SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; // ePWM3 + SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; // ePWM4 + SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1; // ePWM5 + SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; // ePWM6 + SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM + + SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1; // eCAP3 + SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1; // eCAP4 + SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1; // eCAP5 + SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1; // eCAP6 + SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; // eCAP1 + SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1; // eCAP2 + SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1; // eQEP1 + SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1; // eQEP2 + + SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0 + SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1 + SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2 + + SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA Clock + SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; // XTIMCLK + SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock + + EDIS; +} + +//--------------------------------------------------------------------------- +// Example: CsmUnlock: +//--------------------------------------------------------------------------- +// This function unlocks the CSM. User must replace 0xFFFF's with current +// password for the DSP. Returns 1 if unlock is successful. + +#define STATUS_FAIL 0 +#define STATUS_SUCCESS 1 + +Uint16 CsmUnlock() +{ + volatile Uint16 temp; + + // Load the key registers with the current password. The 0xFFFF's are dummy + // passwords. User should replace them with the correct password for the DSP. + + EALLOW; + CsmRegs.KEY0 = 0xFFFF; + CsmRegs.KEY1 = 0xFFFF; + CsmRegs.KEY2 = 0xFFFF; + CsmRegs.KEY3 = 0xFFFF; + CsmRegs.KEY4 = 0xFFFF; + CsmRegs.KEY5 = 0xFFFF; + CsmRegs.KEY6 = 0xFFFF; + CsmRegs.KEY7 = 0xFFFF; + EDIS; + + // Perform a dummy read of the password locations + // if they match the key values, the CSM will unlock + + temp = CsmPwl.PSWD0; + temp = CsmPwl.PSWD1; + temp = CsmPwl.PSWD2; + temp = CsmPwl.PSWD3; + temp = CsmPwl.PSWD4; + temp = CsmPwl.PSWD5; + temp = CsmPwl.PSWD6; + temp = CsmPwl.PSWD7; + + // If the CSM unlocked, return succes, otherwise return + // failure. + if (CsmRegs.CSMSCR.bit.SECURE == 0) return STATUS_SUCCESS; + else return STATUS_FAIL; + +} + + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_Xintf.c b/v120/DSP2833x_common/source/DSP2833x_Xintf.c new file mode 100644 index 0000000..0d3619a --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_Xintf.c @@ -0,0 +1,243 @@ +// TI File $Revision: /main/5 $ +// Checkin $Date: August 16, 2007 11:06:26 $ +//########################################################################### +// +// FILE: DSP2833x_Xintf.c +// +// TITLE: DSP2833x Device External Interface Init & Support Functions. +// +// DESCRIPTION: +// +// Example initialization function for the external interface (XINTF). +// This example configures the XINTF to its default state. For an +// example of how this function being used refer to the +// examples/run_from_xintf project. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +//--------------------------------------------------------------------------- +// InitXINTF: +//--------------------------------------------------------------------------- +// This function initializes the External Interface the default reset state. +// +// Do not modify the timings of the XINTF while running from the XINTF. Doing +// so can yield unpredictable results + + +void InitXintf(void) +{ + // This shows how to write to the XINTF registers. The + // values used here are the default state after reset. + // Different hardware will require a different configuration. + + // For an example of an XINTF configuration used with the + // F28335 eZdsp, refer to the examples/run_from_xintf project. + + // Any changes to XINTF timing should only be made by code + // running outside of the XINTF. + + // All Zones--------------------------------- + // Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT + EALLOW; + XintfRegs.XINTCNF2.bit.XTIMCLK = 1; + // No write buffering + XintfRegs.XINTCNF2.bit.WRBUFF = 0; + // XCLKOUT is enabled + XintfRegs.XINTCNF2.bit.CLKOFF = 0; + // XCLKOUT = XTIMCLK/2 + XintfRegs.XINTCNF2.bit.CLKMODE = 1; + + + // Zone 0------------------------------------ + // When using ready, ACTIVE must be 1 or greater + // Lead must always be 1 or greater + // Zone write timing + XintfRegs.XTIMING0.bit.XWRLEAD = 3; + XintfRegs.XTIMING0.bit.XWRACTIVE = 7; + XintfRegs.XTIMING0.bit.XWRTRAIL = 3; + // Zone read timing + XintfRegs.XTIMING0.bit.XRDLEAD = 3; + XintfRegs.XTIMING0.bit.XRDACTIVE = 7; + XintfRegs.XTIMING0.bit.XRDTRAIL = 3; + + // double all Zone read/write lead/active/trail timing + XintfRegs.XTIMING0.bit.X2TIMING = 1; + + // Zone will sample XREADY signal + XintfRegs.XTIMING0.bit.USEREADY = 1; + XintfRegs.XTIMING0.bit.READYMODE = 1; // sample asynchronous + + // Size must be either: + // 0,1 = x32 or + // 1,1 = x16 other values are reserved + XintfRegs.XTIMING0.bit.XSIZE = 3; + + // Zone 6------------------------------------ + // When using ready, ACTIVE must be 1 or greater + // Lead must always be 1 or greater + // Zone write timing + XintfRegs.XTIMING6.bit.XWRLEAD = 3; + XintfRegs.XTIMING6.bit.XWRACTIVE = 7; + XintfRegs.XTIMING6.bit.XWRTRAIL = 3; + // Zone read timing + XintfRegs.XTIMING6.bit.XRDLEAD = 3; + XintfRegs.XTIMING6.bit.XRDACTIVE = 7; + XintfRegs.XTIMING6.bit.XRDTRAIL = 3; + + // double all Zone read/write lead/active/trail timing + XintfRegs.XTIMING6.bit.X2TIMING = 1; + + // Zone will sample XREADY signal + XintfRegs.XTIMING6.bit.USEREADY = 1; + XintfRegs.XTIMING6.bit.READYMODE = 1; // sample asynchronous + + // Size must be either: + // 0,1 = x32 or + // 1,1 = x16 other values are reserved + XintfRegs.XTIMING6.bit.XSIZE = 3; + + + // Zone 7------------------------------------ + // When using ready, ACTIVE must be 1 or greater + // Lead must always be 1 or greater + // Zone write timing + XintfRegs.XTIMING7.bit.XWRLEAD = 3; + XintfRegs.XTIMING7.bit.XWRACTIVE = 7; + XintfRegs.XTIMING7.bit.XWRTRAIL = 3; + // Zone read timing + XintfRegs.XTIMING7.bit.XRDLEAD = 3; + XintfRegs.XTIMING7.bit.XRDACTIVE = 7; + XintfRegs.XTIMING7.bit.XRDTRAIL = 3; + + // double all Zone read/write lead/active/trail timing + XintfRegs.XTIMING7.bit.X2TIMING = 1; + + // Zone will sample XREADY signal + XintfRegs.XTIMING7.bit.USEREADY = 1; + XintfRegs.XTIMING7.bit.READYMODE = 1; // sample asynchronous + + // Size must be either: + // 0,1 = x32 or + // 1,1 = x16 other values are reserved + XintfRegs.XTIMING7.bit.XSIZE = 3; + + // Bank switching + // Assume Zone 7 is slow, so add additional BCYC cycles + // when ever switching from Zone 7 to another Zone. + // This will help avoid bus contention. + XintfRegs.XBANK.bit.BANK = 7; + XintfRegs.XBANK.bit.BCYC = 7; + EDIS; + //Force a pipeline flush to ensure that the write to + //the last register configured occurs before returning. + + InitXintf16Gpio(); +// InitXintf32Gpio(); + + asm(" RPT #7 || NOP"); + +} + +void InitXintf32Gpio() +{ + EALLOW; + GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 3; // XD31 + GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 3; // XD30 + GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 3; // XD29 + GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 3; // XD28 + GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 3; // XD27 + GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 3; // XD26 + GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 3; // XD25 + GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 3; // XD24 + GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 3; // XD23 + GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 3; // XD22 + GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // XD21 + GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // XD20 + GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // XD19 + GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // XD18 + GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 3; // XD17 + GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3; // XD16 + + GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 3; // XD31 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 3; // XD30 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 3; // XD29 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 3; // XD28 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO52 = 3; // XD27 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO53 = 3; // XD26 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // XD25 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // XD24 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // XD23 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // XD22 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // XD21 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // XD20 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // XD19 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // XD18 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; // XD17 asynchronous input + GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; // XD16 asynchronous input + + + InitXintf16Gpio(); +} + +void InitXintf16Gpio() +{ + EALLOW; + GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3; // XD15 + GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3; // XD14 + GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3; // XD13 + GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 3; // XD12 + GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 3; // XD11 + GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 3; // XD10 + GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 3; // XD19 + GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 3; // XD8 + GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 3; // XD7 + GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3; // XD6 + GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 3; // XD5 + GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 3; // XD4 + GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 3; // XD3 + GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 3; // XD2 + GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 3; // XD1 + GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3; // XD0 + + GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3; // XA0/XWE1n + GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 3; // XA1 + GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3; // XA2 + GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3; // XA3 + GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 3; // XA4 + GpioCtrlRegs.GPBMUX1.bit.GPIO45 = 3; // XA5 + GpioCtrlRegs.GPBMUX1.bit.GPIO46 = 3; // XA6 + GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 3; // XA7 + + GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 3; // XA8 + GpioCtrlRegs.GPCMUX2.bit.GPIO81 = 3; // XA9 + GpioCtrlRegs.GPCMUX2.bit.GPIO82 = 3; // XA10 + GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 3; // XA11 + GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 3; // XA12 + GpioCtrlRegs.GPCMUX2.bit.GPIO85 = 3; // XA13 + GpioCtrlRegs.GPCMUX2.bit.GPIO86 = 3; // XA14 + GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 3; // XA15 + + GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3; // XA16 +// GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 3; // XA17 +// GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 3; // XA18 +// GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3; // XA19 + +// GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3; // XREADY + GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 3; // XRNW + GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3; // XWE0 + +// GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3; // XZCS0 + GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // XZCS7 +// GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3; // XZCS6 + EDIS; +} + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/v120/DSP2833x_common/source/DSP2833x_usDelay.asm b/v120/DSP2833x_common/source/DSP2833x_usDelay.asm new file mode 100644 index 0000000..d3878b4 --- /dev/null +++ b/v120/DSP2833x_common/source/DSP2833x_usDelay.asm @@ -0,0 +1,76 @@ +;// TI File $Revision: /main/4 $ +;// Checkin $Date: July 30, 2007 10:28:57 $ +;//########################################################################### +;// +;// FILE: DSP2833x_usDelay.asm +;// +;// TITLE: Simple delay function +;// +;// DESCRIPTION: +;// +;// This is a simple delay function that can be used to insert a specified +;// delay into code. +;// +;// This function is only accurate if executed from internal zero-waitstate +;// SARAM. If it is executed from waitstate memory then the delay will be +;// longer then specified. +;// +;// To use this function: +;// +;// 1 - update the CPU clock speed in the DSP2833x_Examples.h +;// file. For example: +;// #define CPU_RATE 6.667L // for a 150MHz CPU clock speed +;// or #define CPU_RATE 10.000L // for a 100MHz CPU clock speed +;// +;// 2 - Call this function by using the DELAY_US(A) macro +;// that is defined in the DSP2833x_Examples.h file. This macro +;// will convert the number of microseconds specified +;// into a loop count for use with this function. +;// This count will be based on the CPU frequency you specify. +;// +;// 3 - For the most accurate delay +;// - Execute this function in 0 waitstate RAM. +;// - Disable interrupts before calling the function +;// If you do not disable interrupts, then think of +;// this as an "at least" delay function as the actual +;// delay may be longer. +;// +;// The C assembly call from the DELAY_US(time) macro will +;// look as follows: +;// +;// extern void Delay(long LoopCount); +;// +;// MOV AL,#LowLoopCount +;// MOV AH,#HighLoopCount +;// LCR _Delay +;// +;// Or as follows (if count is less then 16-bits): +;// +;// MOV ACC,#LoopCount +;// LCR _Delay +;// +;// +;//########################################################################### +;// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +;// $Release Date: August 1, 2008 $ +;//########################################################################### + + .def _DSP28x_usDelay + .sect ".text" + + .global __DSP28x_usDelay +_DSP28x_usDelay: + SUB ACC,#1 + BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0 + LRETR + +;There is a 9/10 cycle overhead and each loop +;takes five cycles. The LoopCount is given by +;the following formula: +; DELAY_CPU_CYCLES = 9 + 5*LoopCount +; LoopCount = (DELAY_CPU_CYCLES - 9) / 5 +; The macro DELAY_US(A) performs this calculation for you +; +;//=========================================================================== +;// End of file. +;//=========================================================================== diff --git a/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd b/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd new file mode 100644 index 0000000..fe2d6c5 --- /dev/null +++ b/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd @@ -0,0 +1,183 @@ +/* +// TI File $Revision: /main/9 $ +// Checkin $Date: August 8, 2008 11:09:25 $ +//########################################################################### +// +// FILE: DSP2833x_Headers_BIOS.cmd +// +// TITLE: DSP2833x Peripheral registers linker command file +// +// DESCRIPTION: +// +// This file is for use in BIOS applications. +// +// Linker command file to place the peripheral structures +// used within the DSP2833x headerfiles into the correct memory +// mapped locations. +// +// This version of the file does not include the PieVectorTable structure. +// For non-BIOS applications, please use the DSP2833x_Headers_nonBIOS.cmd +// file which includes the PieVectorTable structure. +// +//##################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//##################################################################### +*/ + +MEMORY +{ + PAGE 0: /* Program Memory */ + + PAGE 1: /* Data Memory */ + + DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */ + FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */ + CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */ + + ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */ + + XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */ + + CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */ + CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ + CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ + + PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */ + + DMA : origin = 0x001000, length = 0x000200 /* DMA registers */ + + MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */ + MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */ + + ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */ + ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */ + ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */ + ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */ + ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */ + + ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */ + ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */ + ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */ + ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */ + ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */ + + EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */ + EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */ + EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */ + EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */ + EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */ + EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */ + + ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */ + ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */ + ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */ + ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */ + ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */ + ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */ + + EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */ + EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */ + + GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */ + GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */ + GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */ + + SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ + SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */ + SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */ + XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */ + + ADC : origin = 0x007100, length = 0x000020 /* ADC registers */ + + SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */ + + SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */ + + I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */ + + CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */ + + PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */ +} + + +SECTIONS +{ +/*** The PIE Vector table is called PIEVECT by DSP/BIOS ***/ + PieVectTableFile : > PIEVECT, PAGE = 1, TYPE = DSECT + +/*** Peripheral Frame 0 Register Structures ***/ + DevEmuRegsFile : > DEV_EMU, PAGE = 1 + FlashRegsFile : > FLASH_REGS, PAGE = 1 + CsmRegsFile : > CSM, PAGE = 1 + AdcMirrorFile : > ADC_MIRROR, PAGE = 1 + XintfRegsFile : > XINTF, PAGE = 1 + CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1 + CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1 + CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 + PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 + DmaRegsFile : > DMA, PAGE = 1 + +/*** Peripheral Frame 3 Register Structures ***/ + McbspaRegsFile : > MCBSPA, PAGE = 1 + McbspbRegsFile : > MCBSPB, PAGE = 1 + +/*** Peripheral Frame 1 Register Structures ***/ + ECanaRegsFile : > ECANA, PAGE = 1 + ECanaLAMRegsFile : > ECANA_LAM PAGE = 1 + ECanaMboxesFile : > ECANA_MBOX PAGE = 1 + ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1 + ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1 + + ECanbRegsFile : > ECANB, PAGE = 1 + ECanbLAMRegsFile : > ECANB_LAM PAGE = 1 + ECanbMboxesFile : > ECANB_MBOX PAGE = 1 + ECanbMOTSRegsFile : > ECANB_MOTS PAGE = 1 + ECanbMOTORegsFile : > ECANB_MOTO PAGE = 1 + + EPwm1RegsFile : > EPWM1 PAGE = 1 + EPwm2RegsFile : > EPWM2 PAGE = 1 + EPwm3RegsFile : > EPWM3 PAGE = 1 + EPwm4RegsFile : > EPWM4 PAGE = 1 + EPwm5RegsFile : > EPWM5 PAGE = 1 + EPwm6RegsFile : > EPWM6 PAGE = 1 + + ECap1RegsFile : > ECAP1 PAGE = 1 + ECap2RegsFile : > ECAP2 PAGE = 1 + ECap3RegsFile : > ECAP3 PAGE = 1 + ECap4RegsFile : > ECAP4 PAGE = 1 + ECap5RegsFile : > ECAP5 PAGE = 1 + ECap6RegsFile : > ECAP6 PAGE = 1 + + EQep1RegsFile : > EQEP1 PAGE = 1 + EQep2RegsFile : > EQEP2 PAGE = 1 + + GpioCtrlRegsFile : > GPIOCTRL PAGE = 1 + GpioDataRegsFile : > GPIODAT PAGE = 1 + GpioIntRegsFile : > GPIOINT PAGE = 1 + +/*** Peripheral Frame 2 Register Structures ***/ + SysCtrlRegsFile : > SYSTEM, PAGE = 1 + SpiaRegsFile : > SPIA, PAGE = 1 + SciaRegsFile : > SCIA, PAGE = 1 + XIntruptRegsFile : > XINTRUPT, PAGE = 1 + AdcRegsFile : > ADC, PAGE = 1 + ScibRegsFile : > SCIB, PAGE = 1 + ScicRegsFile : > SCIC, PAGE = 1 + I2caRegsFile : > I2CA, PAGE = 1 + +/*** Code Security Module Register Structures ***/ + CsmPwlFile : > CSM_PWL, PAGE = 1 + +/*** Device Part ID Register Structures ***/ + PartIdRegsFile : > PARTID, PAGE = 1 + +} + + +/* +//=========================================================================== +// End of file. +//=========================================================================== +*/ \ No newline at end of file diff --git a/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd b/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd new file mode 100644 index 0000000..9da1026 --- /dev/null +++ b/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd @@ -0,0 +1,183 @@ +/* +// TI File $Revision: /main/8 $ +// Checkin $Date: June 2, 2008 11:12:24 $ +//########################################################################### +// +// FILE: DSP2833x_Headers_nonBIOS.cmd +// +// TITLE: DSP2833x Peripheral registers linker command file +// +// DESCRIPTION: +// +// This file is for use in Non-BIOS applications. +// +// Linker command file to place the peripheral structures +// used within the DSP2833x headerfiles into the correct memory +// mapped locations. +// +// This version of the file includes the PieVectorTable structure. +// For BIOS applications, please use the DSP2833x_Headers_BIOS.cmd file +// which does not include the PieVectorTable structure. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### +*/ + +MEMORY +{ + PAGE 0: /* Program Memory */ + + PAGE 1: /* Data Memory */ + + DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */ + FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */ + CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */ + + ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */ + + XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */ + + CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */ + CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ + CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ + + PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */ + PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */ + + DMA : origin = 0x001000, length = 0x000200 /* DMA registers */ + + MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */ + MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */ + + ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */ + ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */ + ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */ + ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */ + ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */ + + ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */ + ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */ + ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */ + ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */ + ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */ + + EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */ + EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */ + EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */ + EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */ + EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */ + EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */ + + ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */ + ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */ + ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */ + ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */ + ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */ + ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */ + + EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */ + EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */ + + GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */ + GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */ + GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */ + + SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ + SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */ + SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */ + XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */ + + ADC : origin = 0x007100, length = 0x000020 /* ADC registers */ + + SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */ + + SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */ + + I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */ + + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */ + + PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */ +} + + +SECTIONS +{ + PieVectTableFile : > PIE_VECT, PAGE = 1 + +/*** Peripheral Frame 0 Register Structures ***/ + DevEmuRegsFile : > DEV_EMU, PAGE = 1 + FlashRegsFile : > FLASH_REGS, PAGE = 1 + CsmRegsFile : > CSM, PAGE = 1 + AdcMirrorFile : > ADC_MIRROR, PAGE = 1 + XintfRegsFile : > XINTF, PAGE = 1 + CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1 + CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1 + CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 + PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 + DmaRegsFile : > DMA, PAGE = 1 + +/*** Peripheral Frame 3 Register Structures ***/ + McbspaRegsFile : > MCBSPA, PAGE = 1 + McbspbRegsFile : > MCBSPB, PAGE = 1 + +/*** Peripheral Frame 1 Register Structures ***/ + ECanaRegsFile : > ECANA, PAGE = 1 + ECanaLAMRegsFile : > ECANA_LAM PAGE = 1 + ECanaMboxesFile : > ECANA_MBOX PAGE = 1 + ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1 + ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1 + + ECanbRegsFile : > ECANB, PAGE = 1 + ECanbLAMRegsFile : > ECANB_LAM PAGE = 1 + ECanbMboxesFile : > ECANB_MBOX PAGE = 1 + ECanbMOTSRegsFile : > ECANB_MOTS PAGE = 1 + ECanbMOTORegsFile : > ECANB_MOTO PAGE = 1 + + EPwm1RegsFile : > EPWM1 PAGE = 1 + EPwm2RegsFile : > EPWM2 PAGE = 1 + EPwm3RegsFile : > EPWM3 PAGE = 1 + EPwm4RegsFile : > EPWM4 PAGE = 1 + EPwm5RegsFile : > EPWM5 PAGE = 1 + EPwm6RegsFile : > EPWM6 PAGE = 1 + + ECap1RegsFile : > ECAP1 PAGE = 1 + ECap2RegsFile : > ECAP2 PAGE = 1 + ECap3RegsFile : > ECAP3 PAGE = 1 + ECap4RegsFile : > ECAP4 PAGE = 1 + ECap5RegsFile : > ECAP5 PAGE = 1 + ECap6RegsFile : > ECAP6 PAGE = 1 + + EQep1RegsFile : > EQEP1 PAGE = 1 + EQep2RegsFile : > EQEP2 PAGE = 1 + + GpioCtrlRegsFile : > GPIOCTRL PAGE = 1 + GpioDataRegsFile : > GPIODAT PAGE = 1 + GpioIntRegsFile : > GPIOINT PAGE = 1 + +/*** Peripheral Frame 2 Register Structures ***/ + SysCtrlRegsFile : > SYSTEM, PAGE = 1 + SpiaRegsFile : > SPIA, PAGE = 1 + SciaRegsFile : > SCIA, PAGE = 1 + XIntruptRegsFile : > XINTRUPT, PAGE = 1 + AdcRegsFile : > ADC, PAGE = 1 + ScibRegsFile : > SCIB, PAGE = 1 + ScicRegsFile : > SCIC, PAGE = 1 + I2caRegsFile : > I2CA, PAGE = 1 + +/*** Code Security Module Register Structures ***/ + CsmPwlFile : > CSM_PWL, PAGE = 1 + +/*** Device Part ID Register Structures ***/ + PartIdRegsFile : > PARTID, PAGE = 1 + +} + + +/* +//=========================================================================== +// End of file. +//=========================================================================== +*/ diff --git a/v120/DSP2833x_headers/include/DSP2833x_EQep.h b/v120/DSP2833x_headers/include/DSP2833x_EQep.h new file mode 100644 index 0000000..c330165 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_EQep.h @@ -0,0 +1,242 @@ +// TI File $Revision: /main/1 $ +// Checkin $Date: August 18, 2006 13:52:13 $ +//########################################################################### +// +// FILE: DSP2833x_EQep.h +// +// TITLE: DSP2833x Enhanced Quadrature Encoder Pulse Module +// Register Bit Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_EQEP_H +#define DSP2833x_EQEP_H + + +#ifdef __cplusplus +extern "C" { +#endif + +//---------------------------------------------------- +// Capture decoder control register bit definitions */ +struct QDECCTL_BITS { // bits description + Uint16 rsvd1:5; // 4:0 reserved + Uint16 QSP:1; // 5 QEPS input polarity + Uint16 QIP:1; // 6 QEPI input polarity + Uint16 QBP:1; // 7 QEPB input polarity + Uint16 QAP:1; // 8 QEPA input polarity + Uint16 IGATE:1; // 9 Index pulse gating option + Uint16 SWAP:1; // 10 CLK/DIR signal source for Position Counter + Uint16 XCR:1; // 11 External clock rate + Uint16 SPSEL:1; // 12 Sync output pin select + Uint16 SOEN:1; // 13 Enable position compare sync + Uint16 QSRC:2; // 15:14 Position counter source +}; + +union QDECCTL_REG { + Uint16 all; + struct QDECCTL_BITS bit; +}; + + +//---------------------------------------------------- +// QEP control register bit definitions */ +struct QEPCTL_BITS { // bits description + Uint16 WDE:1; // 0 QEP watchdog enable + Uint16 UTE:1; // 1 QEP unit timer enable + Uint16 QCLM:1; // 2 QEP capture latch mode + Uint16 QPEN:1; // 3 Quadrature position counter enable + Uint16 IEL:2; // 5:4 Index event latch + Uint16 SEL:1; // 6 Strobe event latch + Uint16 SWI:1; // 7 Software init position counter + Uint16 IEI:2; // 9:8 Index event init of position count + Uint16 SEI:2; // 11:10 Strobe event init + Uint16 PCRM:2; // 13:12 Position counter reset + Uint16 FREE_SOFT:2; // 15:14 Emulation mode +}; + +union QEPCTL_REG { + Uint16 all; + struct QEPCTL_BITS bit; +}; + + +//---------------------------------------------------- +// Quadrature capture control register bit definitions */ +struct QCAPCTL_BITS { // bits description + Uint16 UPPS:4; // 3:0 Unit position pre-scale + Uint16 CCPS:3; // 6:4 QEP capture timer pre-scale + Uint16 rsvd1:8; // 14:7 reserved + Uint16 CEN:1; // 15 Enable QEP capture +}; + + +union QCAPCTL_REG { + Uint16 all; + struct QCAPCTL_BITS bit; +}; + + + +//---------------------------------------------------- +// Position compare control register bit definitions */ +struct QPOSCTL_BITS { // bits description + Uint16 PCSPW:12; // 11:0 Position compare sync pulse width + Uint16 PCE:1; // 12 Position compare enable/disable + Uint16 PCPOL:1; // 13 Polarity of sync output + Uint16 PCLOAD:1; // 14 Position compare of shadow load + Uint16 PCSHDW:1; // 15 Position compare shadow enable +}; + +union QPOSCTL_REG { + Uint16 all; + struct QPOSCTL_BITS bit; +}; + +//---------------------------------------------------- +// QEP interrupt control register bit definitions */ +struct QEINT_BITS { // bits description + Uint16 rsvd1:1; // 0 reserved + Uint16 PCE:1; // 1 Position counter error + Uint16 QPE:1; // 2 Quadrature phase error + Uint16 QDC:1; // 3 Quadrature dir change + Uint16 WTO:1; // 4 Watchdog timeout + Uint16 PCU:1; // 5 Position counter underflow + Uint16 PCO:1; // 6 Position counter overflow + Uint16 PCR:1; // 7 Position compare ready + Uint16 PCM:1; // 8 Position compare match + Uint16 SEL:1; // 9 Strobe event latch + Uint16 IEL:1; // 10 Event latch + Uint16 UTO:1; // 11 Unit timeout + Uint16 rsvd2:4; // 15:12 reserved +}; + + +union QEINT_REG { + Uint16 all; + struct QEINT_BITS bit; +}; + + +//---------------------------------------------------- +// QEP interrupt status register bit definitions */ +struct QFLG_BITS { // bits description + Uint16 INT:1; // 0 Global interrupt + Uint16 PCE:1; // 1 Position counter error + Uint16 PHE:1; // 2 Quadrature phase error + Uint16 QDC:1; // 3 Quadrature dir change + Uint16 WTO:1; // 4 Watchdog timeout + Uint16 PCU:1; // 5 Position counter underflow + Uint16 PCO:1; // 6 Position counter overflow + Uint16 PCR:1; // 7 Position compare ready + Uint16 PCM:1; // 8 Position compare match + Uint16 SEL:1; // 9 Strobe event latch + Uint16 IEL:1; // 10 Event latch + Uint16 UTO:1; // 11 Unit timeout + Uint16 rsvd2:4; // 15:12 reserved +}; + + +union QFLG_REG { + Uint16 all; + struct QFLG_BITS bit; +}; + +//---------------------------------------------------- +// QEP interrupt force register bit definitions */ +struct QFRC_BITS { // bits description + Uint16 reserved:1; // 0 Reserved + Uint16 PCE:1; // 1 Position counter error + Uint16 PHE:1; // 2 Quadrature phase error + Uint16 QDC:1; // 3 Quadrature dir change + Uint16 WTO:1; // 4 Watchdog timeout + Uint16 PCU:1; // 5 Position counter underflow + Uint16 PCO:1; // 6 Position counter overflow + Uint16 PCR:1; // 7 Position compare ready + Uint16 PCM:1; // 8 Position compare match + Uint16 SEL:1; // 9 Strobe event latch + Uint16 IEL:1; // 10 Event latch + Uint16 UTO:1; // 11 Unit timeout + Uint16 rsvd2:4; // 15:12 reserved +}; + + +union QFRC_REG { + Uint16 all; + struct QFRC_BITS bit; +}; + +// V1.1 Added UPEVNT (bit 7) This reflects changes +// made as of F2833x Rev A devices +//---------------------------------------------------- +// QEP status register bit definitions */ +struct QEPSTS_BITS { // bits description + Uint16 PCEF:1; // 0 Position counter error + Uint16 FIMF:1; // 1 First index marker + Uint16 CDEF:1; // 2 Capture direction error + Uint16 COEF:1; // 3 Capture overflow error + Uint16 QDLF:1; // 4 QEP direction latch + Uint16 QDF:1; // 5 Quadrature direction + Uint16 FIDF:1; // 6 Direction on first index marker + Uint16 UPEVNT:1; // 7 Unit position event flag + Uint16 rsvd1:8; // 15:8 reserved +}; + +union QEPSTS_REG { + Uint16 all; + struct QEPSTS_BITS bit; +}; + +//---------------------------------------------------- + +struct EQEP_REGS { + Uint32 QPOSCNT; // Position counter + Uint32 QPOSINIT; // Position counter init + Uint32 QPOSMAX; // Maximum position count + Uint32 QPOSCMP; // Position compare + Uint32 QPOSILAT; // Index position latch + Uint32 QPOSSLAT; // Strobe position latch + Uint32 QPOSLAT; // Position latch + Uint32 QUTMR; // Unit timer + Uint32 QUPRD; // Unit period + Uint16 QWDTMR; // QEP watchdog timer + Uint16 QWDPRD; // QEP watchdog period + union QDECCTL_REG QDECCTL; // Quadrature decoder control + union QEPCTL_REG QEPCTL; // QEP control + union QCAPCTL_REG QCAPCTL; // Quadrature capture control + union QPOSCTL_REG QPOSCTL; // Position compare control + union QEINT_REG QEINT; // QEP interrupt control + union QFLG_REG QFLG; // QEP interrupt flag + union QFLG_REG QCLR; // QEP interrupt clear + union QFRC_REG QFRC; // QEP interrupt force + union QEPSTS_REG QEPSTS; // QEP status + Uint16 QCTMR; // QEP capture timer + Uint16 QCPRD; // QEP capture period + Uint16 QCTMRLAT; // QEP capture latch + Uint16 QCPRDLAT; // QEP capture period latch + Uint16 rsvd1[30]; // reserved +}; + + + + +//--------------------------------------------------------------------------- +// GPI/O External References & Function Declarations: +// +extern volatile struct EQEP_REGS EQep1Regs; +extern volatile struct EQEP_REGS EQep2Regs; + + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_EQEP_H definition + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_headers/include/DSP2833x_Gpio.h b/v120/DSP2833x_headers/include/DSP2833x_Gpio.h new file mode 100644 index 0000000..5759c81 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_Gpio.h @@ -0,0 +1,391 @@ +// TI File $Revision: /main/4 $ +// Checkin $Date: November 15, 2007 09:58:53 $ +//########################################################################### +// +// FILE: DSP2833x_Gpio.h +// +// TITLE: DSP2833x General Purpose I/O Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_GPIO_H +#define DSP2833x_GPIO_H + + +#ifdef __cplusplus +extern "C" { +#endif + +//---------------------------------------------------- +// GPIO A control register bit definitions */ +struct GPACTRL_BITS { // bits description + Uint16 QUALPRD0:8; // 7:0 Qual period + Uint16 QUALPRD1:8; // 15:8 Qual period + Uint16 QUALPRD2:8; // 23:16 Qual period + Uint16 QUALPRD3:8; // 31:24 Qual period +}; + +union GPACTRL_REG { + Uint32 all; + struct GPACTRL_BITS bit; +}; + +//---------------------------------------------------- +// GPIO B control register bit definitions */ +struct GPBCTRL_BITS { // bits description + Uint16 QUALPRD0:8; // 7:0 Qual period + Uint16 QUALPRD1:8; // 15:8 Qual period + Uint16 QUALPRD2:8; // 23:16 Qual period + Uint16 QUALPRD3:8; // 31:24 +}; + +union GPBCTRL_REG { + Uint32 all; + struct GPBCTRL_BITS bit; +}; + +//---------------------------------------------------- +// GPIO A Qual/MUX select register bit definitions */ +struct GPA1_BITS { // bits description + Uint16 GPIO0:2; // 1:0 GPIO0 + Uint16 GPIO1:2; // 3:2 GPIO1 + Uint16 GPIO2:2; // 5:4 GPIO2 + Uint16 GPIO3:2; // 7:6 GPIO3 + Uint16 GPIO4:2; // 9:8 GPIO4 + Uint16 GPIO5:2; // 11:10 GPIO5 + Uint16 GPIO6:2; // 13:12 GPIO6 + Uint16 GPIO7:2; // 15:14 GPIO7 + Uint16 GPIO8:2; // 17:16 GPIO8 + Uint16 GPIO9:2; // 19:18 GPIO9 + Uint16 GPIO10:2; // 21:20 GPIO10 + Uint16 GPIO11:2; // 23:22 GPIO11 + Uint16 GPIO12:2; // 25:24 GPIO12 + Uint16 GPIO13:2; // 27:26 GPIO13 + Uint16 GPIO14:2; // 29:28 GPIO14 + Uint16 GPIO15:2; // 31:30 GPIO15 +}; + + +struct GPA2_BITS { // bits description + Uint16 GPIO16:2; // 1:0 GPIO16 + Uint16 GPIO17:2; // 3:2 GPIO17 + Uint16 GPIO18:2; // 5:4 GPIO18 + Uint16 GPIO19:2; // 7:6 GPIO19 + Uint16 GPIO20:2; // 9:8 GPIO20 + Uint16 GPIO21:2; // 11:10 GPIO21 + Uint16 GPIO22:2; // 13:12 GPIO22 + Uint16 GPIO23:2; // 15:14 GPIO23 + Uint16 GPIO24:2; // 17:16 GPIO24 + Uint16 GPIO25:2; // 19:18 GPIO25 + Uint16 GPIO26:2; // 21:20 GPIO26 + Uint16 GPIO27:2; // 23:22 GPIO27 + Uint16 GPIO28:2; // 25:24 GPIO28 + Uint16 GPIO29:2; // 27:26 GPIO29 + Uint16 GPIO30:2; // 29:28 GPIO30 + Uint16 GPIO31:2; // 31:30 GPIO31 +}; + +struct GPB1_BITS { // bits description + Uint16 GPIO32:2; // 1:0 GPIO32 + Uint16 GPIO33:2; // 3:2 GPIO33 + Uint16 GPIO34:2; // 5:4 GPIO34 + Uint16 GPIO35:2; // 7:6 GPIO35 + Uint16 GPIO36:2; // 9:8 GPIO36 + Uint16 GPIO37:2; // 11:10 GPIO37 + Uint16 GPIO38:2; // 13:12 GPIO38 + Uint16 GPIO39:2; // 15:14 GPIO39 + Uint16 GPIO40:2; // 17:16 GPIO40 + Uint16 GPIO41:2; // 19:16 GPIO41 + Uint16 GPIO42:2; // 21:20 GPIO42 + Uint16 GPIO43:2; // 23:22 GPIO43 + Uint16 GPIO44:2; // 25:24 GPIO44 + Uint16 GPIO45:2; // 27:26 GPIO45 + Uint16 GPIO46:2; // 29:28 GPIO46 + Uint16 GPIO47:2; // 31:30 GPIO47 +}; + +struct GPB2_BITS { // bits description + Uint16 GPIO48:2; // 1:0 GPIO48 + Uint16 GPIO49:2; // 3:2 GPIO49 + Uint16 GPIO50:2; // 5:4 GPIO50 + Uint16 GPIO51:2; // 7:6 GPIO51 + Uint16 GPIO52:2; // 9:8 GPIO52 + Uint16 GPIO53:2; // 11:10 GPIO53 + Uint16 GPIO54:2; // 13:12 GPIO54 + Uint16 GPIO55:2; // 15:14 GPIO55 + Uint16 GPIO56:2; // 17:16 GPIO56 + Uint16 GPIO57:2; // 19:18 GPIO57 + Uint16 GPIO58:2; // 21:20 GPIO58 + Uint16 GPIO59:2; // 23:22 GPIO59 + Uint16 GPIO60:2; // 25:24 GPIO60 + Uint16 GPIO61:2; // 27:26 GPIO61 + Uint16 GPIO62:2; // 29:28 GPIO62 + Uint16 GPIO63:2; // 31:30 GPIO63 +}; + +struct GPC1_BITS { // bits description + Uint16 GPIO64:2; // 1:0 GPIO64 + Uint16 GPIO65:2; // 3:2 GPIO65 + Uint16 GPIO66:2; // 5:4 GPIO66 + Uint16 GPIO67:2; // 7:6 GPIO67 + Uint16 GPIO68:2; // 9:8 GPIO68 + Uint16 GPIO69:2; // 11:10 GPIO69 + Uint16 GPIO70:2; // 13:12 GPIO70 + Uint16 GPIO71:2; // 15:14 GPIO71 + Uint16 GPIO72:2; // 17:16 GPIO72 + Uint16 GPIO73:2; // 19:18 GPIO73 + Uint16 GPIO74:2; // 21:20 GPIO74 + Uint16 GPIO75:2; // 23:22 GPIO75 + Uint16 GPIO76:2; // 25:24 GPIO76 + Uint16 GPIO77:2; // 27:26 GPIO77 + Uint16 GPIO78:2; // 29:28 GPIO78 + Uint16 GPIO79:2; // 31:30 GPIO79 +}; + + +struct GPC2_BITS { // bits description + Uint16 GPIO80:2; // 1:0 GPIO80 + Uint16 GPIO81:2; // 3:2 GPIO81 + Uint16 GPIO82:2; // 5:4 GPIO82 + Uint16 GPIO83:2; // 7:6 GPIO83 + Uint16 GPIO84:2; // 9:8 GPIO84 + Uint16 GPIO85:2; // 11:10 GPIO85 + Uint16 GPIO86:2; // 13:12 GPIO86 + Uint16 GPIO87:2; // 15:14 GPIO87 + Uint16 rsvd:16; // 31:16 reserved +}; + + +union GPA1_REG { + Uint32 all; + struct GPA1_BITS bit; +}; + +union GPA2_REG { + Uint32 all; + struct GPA2_BITS bit; +}; + +union GPB1_REG { + Uint32 all; + struct GPB1_BITS bit; +}; + +union GPB2_REG { + Uint32 all; + struct GPB2_BITS bit; +}; + +union GPC1_REG { + Uint32 all; + struct GPC1_BITS bit; +}; + +union GPC2_REG { + Uint32 all; + struct GPC2_BITS bit; +}; + +//---------------------------------------------------- +// GPIO A DIR/TOGGLE/SET/CLEAR register bit definitions */ +struct GPADAT_BITS { // bits description + Uint16 GPIO0:1; // 0 GPIO0 + Uint16 GPIO1:1; // 1 GPIO1 + Uint16 GPIO2:1; // 2 GPIO2 + Uint16 GPIO3:1; // 3 GPIO3 + Uint16 GPIO4:1; // 4 GPIO4 + Uint16 GPIO5:1; // 5 GPIO5 + Uint16 GPIO6:1; // 6 GPIO6 + Uint16 GPIO7:1; // 7 GPIO7 + Uint16 GPIO8:1; // 8 GPIO8 + Uint16 GPIO9:1; // 9 GPIO9 + Uint16 GPIO10:1; // 10 GPIO10 + Uint16 GPIO11:1; // 11 GPIO11 + Uint16 GPIO12:1; // 12 GPIO12 + Uint16 GPIO13:1; // 13 GPIO13 + Uint16 GPIO14:1; // 14 GPIO14 + Uint16 GPIO15:1; // 15 GPIO15 + Uint16 GPIO16:1; // 16 GPIO16 + Uint16 GPIO17:1; // 17 GPIO17 + Uint16 GPIO18:1; // 18 GPIO18 + Uint16 GPIO19:1; // 19 GPIO19 + Uint16 GPIO20:1; // 20 GPIO20 + Uint16 GPIO21:1; // 21 GPIO21 + Uint16 GPIO22:1; // 22 GPIO22 + Uint16 GPIO23:1; // 23 GPIO23 + Uint16 GPIO24:1; // 24 GPIO24 + Uint16 GPIO25:1; // 25 GPIO25 + Uint16 GPIO26:1; // 26 GPIO26 + Uint16 GPIO27:1; // 27 GPIO27 + Uint16 GPIO28:1; // 28 GPIO28 + Uint16 GPIO29:1; // 29 GPIO29 + Uint16 GPIO30:1; // 30 GPIO30 + Uint16 GPIO31:1; // 31 GPIO31 +}; + +struct GPBDAT_BITS { // bits description + Uint16 GPIO32:1; // 0 GPIO32 + Uint16 GPIO33:1; // 1 GPIO33 + Uint16 GPIO34:1; // 2 GPIO34 + Uint16 GPIO35:1; // 3 GPIO35 + Uint16 GPIO36:1; // 4 GPIO36 + Uint16 GPIO37:1; // 5 GPIO37 + Uint16 GPIO38:1; // 6 GPIO38 + Uint16 GPIO39:1; // 7 GPIO39 + Uint16 GPIO40:1; // 8 GPIO40 + Uint16 GPIO41:1; // 9 GPIO41 + Uint16 GPIO42:1; // 10 GPIO42 + Uint16 GPIO43:1; // 11 GPIO43 + Uint16 GPIO44:1; // 12 GPIO44 + Uint16 GPIO45:1; // 13 GPIO45 + Uint16 GPIO46:1; // 14 GPIO46 + Uint16 GPIO47:1; // 15 GPIO47 + Uint16 GPIO48:1; // 16 GPIO48 + Uint16 GPIO49:1; // 17 GPIO49 + Uint16 GPIO50:1; // 18 GPIO50 + Uint16 GPIO51:1; // 19 GPIO51 + Uint16 GPIO52:1; // 20 GPIO52 + Uint16 GPIO53:1; // 21 GPIO53 + Uint16 GPIO54:1; // 22 GPIO54 + Uint16 GPIO55:1; // 23 GPIO55 + Uint16 GPIO56:1; // 24 GPIO56 + Uint16 GPIO57:1; // 25 GPIO57 + Uint16 GPIO58:1; // 26 GPIO58 + Uint16 GPIO59:1; // 27 GPIO59 + Uint16 GPIO60:1; // 28 GPIO60 + Uint16 GPIO61:1; // 29 GPIO61 + Uint16 GPIO62:1; // 30 GPIO62 + Uint16 GPIO63:1; // 31 GPIO63 +}; + +struct GPCDAT_BITS { // bits description + Uint16 GPIO64:1; // 0 GPIO64 + Uint16 GPIO65:1; // 1 GPIO65 + Uint16 GPIO66:1; // 2 GPIO66 + Uint16 GPIO67:1; // 3 GPIO67 + Uint16 GPIO68:1; // 4 GPIO68 + Uint16 GPIO69:1; // 5 GPIO69 + Uint16 GPIO70:1; // 6 GPIO70 + Uint16 GPIO71:1; // 7 GPIO71 + Uint16 GPIO72:1; // 8 GPIO72 + Uint16 GPIO73:1; // 9 GPIO73 + Uint16 GPIO74:1; // 10 GPIO74 + Uint16 GPIO75:1; // 11 GPIO75 + Uint16 GPIO76:1; // 12 GPIO76 + Uint16 GPIO77:1; // 13 GPIO77 + Uint16 GPIO78:1; // 14 GPIO78 + Uint16 GPIO79:1; // 15 GPIO79 + Uint16 GPIO80:1; // 16 GPIO80 + Uint16 GPIO81:1; // 17 GPIO81 + Uint16 GPIO82:1; // 18 GPIO82 + Uint16 GPIO83:1; // 19 GPIO83 + Uint16 GPIO84:1; // 20 GPIO84 + Uint16 GPIO85:1; // 21 GPIO85 + Uint16 GPIO86:1; // 22 GPIO86 + Uint16 GPIO87:1; // 23 GPIO87 + Uint16 rsvd1:8; // 31:24 reserved +}; + + +union GPADAT_REG { + Uint32 all; + struct GPADAT_BITS bit; +}; + +union GPBDAT_REG { + Uint32 all; + struct GPBDAT_BITS bit; +}; + +union GPCDAT_REG { + Uint32 all; + struct GPCDAT_BITS bit; +}; + + + + +//---------------------------------------------------- +// GPIO Xint1/XINT2/XNMI select register bit definitions */ +struct GPIOXINT_BITS { // bits description + Uint16 GPIOSEL:5; // 4:0 Select GPIO interrupt input source + Uint16 rsvd1:11; // 15:5 reserved +}; + +union GPIOXINT_REG { + Uint16 all; + struct GPIOXINT_BITS bit; +}; + + +struct GPIO_CTRL_REGS { + union GPACTRL_REG GPACTRL; // GPIO A Control Register (GPIO0 to 31) + union GPA1_REG GPAQSEL1; // GPIO A Qualifier Select 1 Register (GPIO0 to 15) + union GPA2_REG GPAQSEL2; // GPIO A Qualifier Select 2 Register (GPIO16 to 31) + union GPA1_REG GPAMUX1; // GPIO A Mux 1 Register (GPIO0 to 15) + union GPA2_REG GPAMUX2; // GPIO A Mux 2 Register (GPIO16 to 31) + union GPADAT_REG GPADIR; // GPIO A Direction Register (GPIO0 to 31) + union GPADAT_REG GPAPUD; // GPIO A Pull Up Disable Register (GPIO0 to 31) + Uint32 rsvd1; + union GPBCTRL_REG GPBCTRL; // GPIO B Control Register (GPIO32 to 63) + union GPB1_REG GPBQSEL1; // GPIO B Qualifier Select 1 Register (GPIO32 to 47) + union GPB2_REG GPBQSEL2; // GPIO B Qualifier Select 2 Register (GPIO48 to 63) + union GPB1_REG GPBMUX1; // GPIO B Mux 1 Register (GPIO32 to 47) + union GPB2_REG GPBMUX2; // GPIO B Mux 2 Register (GPIO48 to 63) + union GPBDAT_REG GPBDIR; // GPIO B Direction Register (GPIO32 to 63) + union GPBDAT_REG GPBPUD; // GPIO B Pull Up Disable Register (GPIO32 to 63) + Uint16 rsvd2[8]; + union GPC1_REG GPCMUX1; // GPIO C Mux 1 Register (GPIO64 to 79) + union GPC2_REG GPCMUX2; // GPIO C Mux 2 Register (GPIO80 to 95) + union GPCDAT_REG GPCDIR; // GPIO C Direction Register (GPIO64 to 95) + union GPCDAT_REG GPCPUD; // GPIO C Pull Up Disable Register (GPIO64 to 95) +}; + +struct GPIO_DATA_REGS { + union GPADAT_REG GPADAT; // GPIO Data Register (GPIO0 to 31) + union GPADAT_REG GPASET; // GPIO Data Set Register (GPIO0 to 31) + union GPADAT_REG GPACLEAR; // GPIO Data Clear Register (GPIO0 to 31) + union GPADAT_REG GPATOGGLE; // GPIO Data Toggle Register (GPIO0 to 31) + union GPBDAT_REG GPBDAT; // GPIO Data Register (GPIO32 to 63) + union GPBDAT_REG GPBSET; // GPIO Data Set Register (GPIO32 to 63) + union GPBDAT_REG GPBCLEAR; // GPIO Data Clear Register (GPIO32 to 63) + union GPBDAT_REG GPBTOGGLE; // GPIO Data Toggle Register (GPIO32 to 63) + union GPCDAT_REG GPCDAT; // GPIO Data Register (GPIO64 to 95) + union GPCDAT_REG GPCSET; // GPIO Data Set Register (GPIO64 to 95) + union GPCDAT_REG GPCCLEAR; // GPIO Data Clear Register (GPIO64 to 95) + union GPCDAT_REG GPCTOGGLE; // GPIO Data Toggle Register (GPIO64 to 95) + Uint16 rsvd1[8]; +}; + +struct GPIO_INT_REGS { + union GPIOXINT_REG GPIOXINT1SEL; // XINT1 GPIO Input Selection + union GPIOXINT_REG GPIOXINT2SEL; // XINT2 GPIO Input Selection + union GPIOXINT_REG GPIOXNMISEL; // XNMI_Xint13 GPIO Input Selection + union GPIOXINT_REG GPIOXINT3SEL; // XINT3 GPIO Input Selection + union GPIOXINT_REG GPIOXINT4SEL; // XINT4 GPIO Input Selection + union GPIOXINT_REG GPIOXINT5SEL; // XINT5 GPIO Input Selection + union GPIOXINT_REG GPIOXINT6SEL; // XINT6 GPIO Input Selection + union GPIOXINT_REG GPIOXINT7SEL; // XINT7 GPIO Input Selection + union GPADAT_REG GPIOLPMSEL; // Low power modes GP I/O input select +}; + + +//--------------------------------------------------------------------------- +// GPI/O External References & Function Declarations: +// +extern volatile struct GPIO_CTRL_REGS GpioCtrlRegs; +extern volatile struct GPIO_DATA_REGS GpioDataRegs; +extern volatile struct GPIO_INT_REGS GpioIntRegs; + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_GPIO_H definition + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_headers/include/DSP2833x_I2c.h b/v120/DSP2833x_headers/include/DSP2833x_I2c.h new file mode 100644 index 0000000..382c12d --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_I2c.h @@ -0,0 +1,193 @@ +// TI File $Revision: /main/2 $ +// Checkin $Date: March 22, 2007 10:40:22 $ +//########################################################################### +// +// FILE: DSP2833x_I2c.h +// +// TITLE: DSP2833x Enhanced Quadrature Encoder Pulse Module +// Register Bit Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_I2C_H +#define DSP2833x_I2C_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +//---------------------------------------------------- +// I2C interrupt vector register bit definitions */ +struct I2CISRC_BITS { // bits description + Uint16 INTCODE:3; // 2:0 Interrupt code + Uint16 rsvd1:13; // 15:3 reserved +}; + +union I2CISRC_REG { + Uint16 all; + struct I2CISRC_BITS bit; +}; + +//---------------------------------------------------- +// I2C interrupt mask register bit definitions */ +struct I2CIER_BITS { // bits description + Uint16 ARBL:1; // 0 Arbitration lost interrupt + Uint16 NACK:1; // 1 No ack interrupt + Uint16 ARDY:1; // 2 Register access ready interrupt + Uint16 RRDY:1; // 3 Recieve data ready interrupt + Uint16 XRDY:1; // 4 Transmit data ready interrupt + Uint16 SCD:1; // 5 Stop condition detection + Uint16 AAS:1; // 6 Address as slave + Uint16 rsvd:9; // 15:7 reserved +}; + +union I2CIER_REG { + Uint16 all; + struct I2CIER_BITS bit; +}; + +//---------------------------------------------------- +// I2C status register bit definitions */ +struct I2CSTR_BITS { // bits description + Uint16 ARBL:1; // 0 Arbitration lost interrupt + Uint16 NACK:1; // 1 No ack interrupt + Uint16 ARDY:1; // 2 Register access ready interrupt + Uint16 RRDY:1; // 3 Recieve data ready interrupt + Uint16 XRDY:1; // 4 Transmit data ready interrupt + Uint16 SCD:1; // 5 Stop condition detection + Uint16 rsvd1:2; // 7:6 reserved + Uint16 AD0:1; // 8 Address Zero + Uint16 AAS:1; // 9 Address as slave + Uint16 XSMT:1; // 10 XMIT shift empty + Uint16 RSFULL:1; // 11 Recieve shift full + Uint16 BB:1; // 12 Bus busy + Uint16 NACKSNT:1; // 13 A no ack sent + Uint16 SDIR:1; // 14 Slave direction + Uint16 rsvd2:1; // 15 reserved +}; + +union I2CSTR_REG { + Uint16 all; + struct I2CSTR_BITS bit; +}; + + +//---------------------------------------------------- +// I2C mode control register bit definitions */ +struct I2CMDR_BITS { // bits description + Uint16 BC:3; // 2:0 Bit count + Uint16 FDF:1; // 3 Free data format + Uint16 STB:1; // 4 Start byte + Uint16 IRS:1; // 5 I2C Reset not + Uint16 DLB:1; // 6 Digital loopback + Uint16 RM:1; // 7 Repeat mode + Uint16 XA:1; // 8 Expand address + Uint16 TRX:1; // 9 Transmitter/reciever + Uint16 MST:1; // 10 Master/slave + Uint16 STP:1; // 11 Stop condition + Uint16 rsvd1:1; // 12 reserved + Uint16 STT:1; // 13 Start condition + Uint16 FREE:1; // 14 Emulation mode + Uint16 NACKMOD:1; // 15 No Ack mode +}; + +union I2CMDR_REG { + Uint16 all; + struct I2CMDR_BITS bit; +}; + +//---------------------------------------------------- +// I2C pre-scaler register bit definitions */ +struct I2CPSC_BITS { // bits description + Uint16 IPSC:8; // 7:0 pre-scaler + Uint16 rsvd1:8; // 15:8 reserved +}; + + +union I2CPSC_REG { + Uint16 all; + struct I2CPSC_BITS bit; +}; + + +//---------------------------------------------------- +// TX FIFO control register bit definitions */ +struct I2CFFTX_BITS { // bits description + Uint16 TXFFIL:5; // 4:0 FIFO interrupt level + Uint16 TXFFIENA:1; // 5 FIFO interrupt enable/disable + Uint16 TXFFINTCLR:1; // 6 FIFO clear + Uint16 TXFFINT:1; // 7 FIFO interrupt flag + Uint16 TXFFST:5; // 12:8 FIFO level status + Uint16 TXFFRST:1; // 13 FIFO reset + Uint16 I2CFFEN:1; // 14 enable/disable TX & RX FIFOs + Uint16 rsvd1:1; // 15 reserved + +}; + +union I2CFFTX_REG { + Uint16 all; + struct I2CFFTX_BITS bit; +}; + +//---------------------------------------------------- +// RX FIFO control register bit definitions */ +struct I2CFFRX_BITS { // bits description + Uint16 RXFFIL:5; // 4:0 FIFO interrupt level + Uint16 RXFFIENA:1; // 5 FIFO interrupt enable/disable + Uint16 RXFFINTCLR:1; // 6 FIFO clear + Uint16 RXFFINT:1; // 7 FIFO interrupt flag + Uint16 RXFFST:5; // 12:8 FIFO level + Uint16 RXFFRST:1; // 13 FIFO reset + Uint16 rsvd1:2; // 15:14 reserved +}; + +union I2CFFRX_REG { + Uint16 all; + struct I2CFFRX_BITS bit; +}; + + +//---------------------------------------------------- + +struct I2C_REGS { + Uint16 I2COAR; // Own address register + union I2CIER_REG I2CIER; // Interrupt enable + union I2CSTR_REG I2CSTR; // Interrupt status + Uint16 I2CCLKL; // Clock divider low + Uint16 I2CCLKH; // Clock divider high + Uint16 I2CCNT; // Data count + Uint16 I2CDRR; // Data recieve + Uint16 I2CSAR; // Slave address + Uint16 I2CDXR; // Data transmit + union I2CMDR_REG I2CMDR; // Mode + union I2CISRC_REG I2CISRC; // Interrupt source + Uint16 rsvd1; // reserved + union I2CPSC_REG I2CPSC; // Pre-scaler + Uint16 rsvd2[19]; // reserved + union I2CFFTX_REG I2CFFTX; // Transmit FIFO + union I2CFFRX_REG I2CFFRX; // Recieve FIFO +}; + + + + +//--------------------------------------------------------------------------- +// External References & Function Declarations: +// +extern volatile struct I2C_REGS I2caRegs; + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_I2C_H definition + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h b/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h new file mode 100644 index 0000000..05e4af9 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h @@ -0,0 +1,715 @@ +// TI File $Revision: /main/5 $ +// Checkin $Date: May 14, 2008 16:30:31 $ +//########################################################################### +// +// FILE: DSP2833x_Mcbsp.h +// +// TITLE: DSP2833x Device McBSP Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_MCBSP_H +#define DSP2833x_MCBSP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +//--------------------------------------------------------------------------- +// McBSP Individual Register Bit Definitions: +// +// McBSP DRR2 register bit definitions: +struct DRR2_BITS { // bit description + Uint16 HWLB:8; // 16:23 High word low byte + Uint16 HWHB:8; // 24:31 High word high byte +}; + +union DRR2_REG { + Uint16 all; + struct DRR2_BITS bit; +}; + +// McBSP DRR1 register bit definitions: +struct DRR1_BITS { // bit description + Uint16 LWLB:8; // 16:23 Low word low byte + Uint16 LWHB:8; // 24:31 low word high byte +}; + +union DRR1_REG { + Uint16 all; + struct DRR1_BITS bit; +}; + +// McBSP DXR2 register bit definitions: +struct DXR2_BITS { // bit description + Uint16 HWLB:8; // 16:23 High word low byte + Uint16 HWHB:8; // 24:31 High word high byte +}; + +union DXR2_REG { + Uint16 all; + struct DXR2_BITS bit; +}; + +// McBSP DXR1 register bit definitions: +struct DXR1_BITS { // bit description + Uint16 LWLB:8; // 16:23 Low word low byte + Uint16 LWHB:8; // 24:31 low word high byte +}; + +union DXR1_REG { + Uint16 all; + struct DXR1_BITS bit; +}; + +// SPCR2 control register bit definitions: +struct SPCR2_BITS { // bit description + Uint16 XRST:1; // 0 transmit reset + Uint16 XRDY:1; // 1 transmit ready + Uint16 XEMPTY:1; // 2 Transmit empty + Uint16 XSYNCERR:1; // 3 Transmit syn errorINT flag + Uint16 XINTM:2; // 5:4 Transmit interrupt types + Uint16 GRST:1; // 6 CLKG reset + Uint16 FRST:1; // 7 Frame sync reset + Uint16 SOFT:1; // 8 SOFT bit + Uint16 FREE:1; // 9 FREE bit + Uint16 rsvd:6; // 15:10 reserved +}; + +union SPCR2_REG { + Uint16 all; + struct SPCR2_BITS bit; +}; + +// SPCR1 control register bit definitions: +struct SPCR1_BITS { // bit description + Uint16 RRST:1; // 0 Receive reset + Uint16 RRDY:1; // 1 Receive ready + Uint16 RFULL:1; // 2 Receive full + Uint16 RSYNCERR:1; // 7 Receive syn error + Uint16 RINTM:2; // 5:4 Receive interrupt types + Uint16 ABIS:1; // 6 ABIS mode select + Uint16 DXENA:1; // 7 DX hi-z enable + Uint16 rsvd:3; // 10:8 reserved + Uint16 CLKSTP:2; // 12:11 CLKSTOP mode bit + Uint16 RJUST:2; // 13:14 Right justified + Uint16 DLB:1; // 15 Digital loop back +}; + +union SPCR1_REG { + Uint16 all; + struct SPCR1_BITS bit; +}; + +// RCR2 control register bit definitions: +struct RCR2_BITS { // bit description + Uint16 RDATDLY:2; // 1:0 Receive data delay + Uint16 RFIG:1; // 2 Receive frame sync ignore + Uint16 RCOMPAND:2; // 4:3 Receive Companding Mode selects + Uint16 RWDLEN2:3; // 7:5 Receive word length + Uint16 RFRLEN2:7; // 14:8 Receive Frame sync + Uint16 RPHASE:1; // 15 Receive Phase +}; + +union RCR2_REG { + Uint16 all; + struct RCR2_BITS bit; +}; + +// RCR1 control register bit definitions: +struct RCR1_BITS { // bit description + Uint16 rsvd1:5; // 4:0 reserved + Uint16 RWDLEN1:3; // 7:5 Receive word length + Uint16 RFRLEN1:7; // 14:8 Receive frame length + Uint16 rsvd2:1; // 15 reserved +}; + +union RCR1_REG { + Uint16 all; + struct RCR1_BITS bit; +}; + +// XCR2 control register bit definitions: + +struct XCR2_BITS { // bit description + Uint16 XDATDLY:2; // 1:0 Transmit data delay + Uint16 XFIG:1; // 2 Transmit frame sync ignore + Uint16 XCOMPAND:2; // 4:3 Transmit Companding Mode selects + Uint16 XWDLEN2:3; // 7:5 Transmit word length + Uint16 XFRLEN2:7; // 14:8 Transmit Frame sync + Uint16 XPHASE:1; // 15 Transmit Phase +}; + +union XCR2_REG { + Uint16 all; + struct XCR2_BITS bit; +}; + +// XCR1 control register bit definitions: +struct XCR1_BITS { // bit description + Uint16 rsvd1:5; // 4:0 reserved + Uint16 XWDLEN1:3; // 7:5 Transmit word length + Uint16 XFRLEN1:7; // 14:8 Transmit frame length + Uint16 rsvd2:1; // 15 reserved +}; + +union XCR1_REG { + Uint16 all; + struct XCR1_BITS bit; +}; + +// SRGR2 Sample rate generator control register bit definitions: +struct SRGR2_BITS { // bit description + Uint16 FPER:12; // 11:0 Frame period + Uint16 FSGM:1; // 12 Frame sync generator mode + Uint16 CLKSM:1; // 13 Sample rate generator mode + Uint16 rsvd:1; // 14 reserved + Uint16 GSYNC:1; // 15 CLKG sync +}; + +union SRGR2_REG { + Uint16 all; + struct SRGR2_BITS bit; +}; + +// SRGR1 control register bit definitions: +struct SRGR1_BITS { // bit description + Uint16 CLKGDV:8; // 7:0 CLKG divider + Uint16 FWID:8; // 15:8 Frame width +}; + +union SRGR1_REG { + Uint16 all; + struct SRGR1_BITS bit; +}; + +// MCR2 Multichannel control register bit definitions: +struct MCR2_BITS { // bit description + Uint16 XMCM:2; // 1:0 Transmit multichannel mode + Uint16 XCBLK:3; // 2:4 Transmit current block + Uint16 XPABLK:2; // 5:6 Transmit partition A Block + Uint16 XPBBLK:2; // 7:8 Transmit partition B Block + Uint16 XMCME:1; // 9 Transmit multi-channel enhance mode + Uint16 rsvd:6; // 15:10 reserved +}; + +union MCR2_REG { + Uint16 all; + struct MCR2_BITS bit; +}; + +// MCR1 Multichannel control register bit definitions: +struct MCR1_BITS { // bit description + Uint16 RMCM:1; // 0 Receive multichannel mode + Uint16 rsvd:1; // 1 reserved + Uint16 RCBLK:3; // 4:2 Receive current block + Uint16 RPABLK:2; // 6:5 Receive partition A Block + Uint16 RPBBLK:2; // 7:8 Receive partition B Block + Uint16 RMCME:1; // 9 Receive multi-channel enhance mode + Uint16 rsvd1:6; // 15:10 reserved +}; + +union MCR1_REG { + Uint16 all; + struct MCR1_BITS bit; +}; + +// RCERA control register bit definitions: +struct RCERA_BITS { // bit description + Uint16 RCEA0:1; // 0 Receive Channel enable bit + Uint16 RCEA1:1; // 1 Receive Channel enable bit + Uint16 RCEA2:1; // 2 Receive Channel enable bit + Uint16 RCEA3:1; // 3 Receive Channel enable bit + Uint16 RCEA4:1; // 4 Receive Channel enable bit + Uint16 RCEA5:1; // 5 Receive Channel enable bit + Uint16 RCEA6:1; // 6 Receive Channel enable bit + Uint16 RCEA7:1; // 7 Receive Channel enable bit + Uint16 RCEA8:1; // 8 Receive Channel enable bit + Uint16 RCEA9:1; // 9 Receive Channel enable bit + Uint16 RCEA10:1; // 10 Receive Channel enable bit + Uint16 RCEA11:1; // 11 Receive Channel enable bit + Uint16 RCEA12:1; // 12 Receive Channel enable bit + Uint16 RCEA13:1; // 13 Receive Channel enable bit + Uint16 RCEA14:1; // 14 Receive Channel enable bit + Uint16 RCEA15:1; // 15 Receive Channel enable bit +}; + +union RCERA_REG { + Uint16 all; + struct RCERA_BITS bit; +}; + +// RCERB control register bit definitions: +struct RCERB_BITS { // bit description + Uint16 RCEB0:1; // 0 Receive Channel enable bit + Uint16 RCEB1:1; // 1 Receive Channel enable bit + Uint16 RCEB2:1; // 2 Receive Channel enable bit + Uint16 RCEB3:1; // 3 Receive Channel enable bit + Uint16 RCEB4:1; // 4 Receive Channel enable bit + Uint16 RCEB5:1; // 5 Receive Channel enable bit + Uint16 RCEB6:1; // 6 Receive Channel enable bit + Uint16 RCEB7:1; // 7 Receive Channel enable bit + Uint16 RCEB8:1; // 8 Receive Channel enable bit + Uint16 RCEB9:1; // 9 Receive Channel enable bit + Uint16 RCEB10:1; // 10 Receive Channel enable bit + Uint16 RCEB11:1; // 11 Receive Channel enable bit + Uint16 RCEB12:1; // 12 Receive Channel enable bit + Uint16 RCEB13:1; // 13 Receive Channel enable bit + Uint16 RCEB14:1; // 14 Receive Channel enable bit + Uint16 RCEB15:1; // 15 Receive Channel enable bit +}; + +union RCERB_REG { + Uint16 all; + struct RCERB_BITS bit; +}; + +// XCERA control register bit definitions: +struct XCERA_BITS { // bit description + Uint16 XCERA0:1; // 0 Receive Channel enable bit + Uint16 XCERA1:1; // 1 Receive Channel enable bit + Uint16 XCERA2:1; // 2 Receive Channel enable bit + Uint16 XCERA3:1; // 3 Receive Channel enable bit + Uint16 XCERA4:1; // 4 Receive Channel enable bit + Uint16 XCERA5:1; // 5 Receive Channel enable bit + Uint16 XCERA6:1; // 6 Receive Channel enable bit + Uint16 XCERA7:1; // 7 Receive Channel enable bit + Uint16 XCERA8:1; // 8 Receive Channel enable bit + Uint16 XCERA9:1; // 9 Receive Channel enable bit + Uint16 XCERA10:1; // 10 Receive Channel enable bit + Uint16 XCERA11:1; // 11 Receive Channel enable bit + Uint16 XCERA12:1; // 12 Receive Channel enable bit + Uint16 XCERA13:1; // 13 Receive Channel enable bit + Uint16 XCERA14:1; // 14 Receive Channel enable bit + Uint16 XCERA15:1; // 15 Receive Channel enable bit +}; + +union XCERA_REG { + Uint16 all; + struct XCERA_BITS bit; +}; + +// XCERB control register bit definitions: +struct XCERB_BITS { // bit description + Uint16 XCERB0:1; // 0 Receive Channel enable bit + Uint16 XCERB1:1; // 1 Receive Channel enable bit + Uint16 XCERB2:1; // 2 Receive Channel enable bit + Uint16 XCERB3:1; // 3 Receive Channel enable bit + Uint16 XCERB4:1; // 4 Receive Channel enable bit + Uint16 XCERB5:1; // 5 Receive Channel enable bit + Uint16 XCERB6:1; // 6 Receive Channel enable bit + Uint16 XCERB7:1; // 7 Receive Channel enable bit + Uint16 XCERB8:1; // 8 Receive Channel enable bit + Uint16 XCERB9:1; // 9 Receive Channel enable bit + Uint16 XCERB10:1; // 10 Receive Channel enable bit + Uint16 XCERB11:1; // 11 Receive Channel enable bit + Uint16 XCERB12:1; // 12 Receive Channel enable bit + Uint16 XCERB13:1; // 13 Receive Channel enable bit + Uint16 XCERB14:1; // 14 Receive Channel enable bit + Uint16 XCERB15:1; // 15 Receive Channel enable bit +}; + +union XCERB_REG { + Uint16 all; + struct XCERB_BITS bit; +}; + +// PCR control register bit definitions: +struct PCR_BITS { // bit description + Uint16 CLKRP:1; // 0 Receive Clock polarity + Uint16 CLKXP:1; // 1 Transmit clock polarity + Uint16 FSRP:1; // 2 Receive Frame synchronization polarity + Uint16 FSXP:1; // 3 Transmit Frame synchronization polarity + Uint16 DR_STAT:1; // 4 DR pin status - reserved for this McBSP + Uint16 DX_STAT:1; // 5 DX pin status - reserved for this McBSP + Uint16 CLKS_STAT:1; // 6 CLKS pin status - reserved for 28x -McBSP + Uint16 SCLKME:1; // 7 Enhanced sample clock mode selection bit. + Uint16 CLKRM:1; // 8 Receiver Clock Mode + Uint16 CLKXM:1; // 9 Transmitter Clock Mode. + Uint16 FSRM:1; // 10 Receive Frame Synchronization Mode + Uint16 FSXM:1; // 11 Transmit Frame Synchronization Mode + Uint16 RIOEN:1; // 12 General Purpose I/O Mode - reserved in this 28x-McBSP + Uint16 XIOEN:1; // 13 General Purpose I/O Mode - reserved in this 28x-McBSP + Uint16 IDEL_EN:1; // 14 reserved in this 28x-McBSP + Uint16 rsvd:1 ; // 15 reserved +}; + +union PCR_REG { + Uint16 all; + struct PCR_BITS bit; +}; + +// RCERC control register bit definitions: +struct RCERC_BITS { // bit description + Uint16 RCEC0:1; // 0 Receive Channel enable bit + Uint16 RCEC1:1; // 1 Receive Channel enable bit + Uint16 RCEC2:1; // 2 Receive Channel enable bit + Uint16 RCEC3:1; // 3 Receive Channel enable bit + Uint16 RCEC4:1; // 4 Receive Channel enable bit + Uint16 RCEC5:1; // 5 Receive Channel enable bit + Uint16 RCEC6:1; // 6 Receive Channel enable bit + Uint16 RCEC7:1; // 7 Receive Channel enable bit + Uint16 RCEC8:1; // 8 Receive Channel enable bit + Uint16 RCEC9:1; // 9 Receive Channel enable bit + Uint16 RCEC10:1; // 10 Receive Channel enable bit + Uint16 RCEC11:1; // 11 Receive Channel enable bit + Uint16 RCEC12:1; // 12 Receive Channel enable bit + Uint16 RCEC13:1; // 13 Receive Channel enable bit + Uint16 RCEC14:1; // 14 Receive Channel enable bit + Uint16 RCEC15:1; // 15 Receive Channel enable bit +}; + +union RCERC_REG { + Uint16 all; + struct RCERC_BITS bit; +}; + +// RCERD control register bit definitions: +struct RCERD_BITS { // bit description + Uint16 RCED0:1; // 0 Receive Channel enable bit + Uint16 RCED1:1; // 1 Receive Channel enable bit + Uint16 RCED2:1; // 2 Receive Channel enable bit + Uint16 RCED3:1; // 3 Receive Channel enable bit + Uint16 RCED4:1; // 4 Receive Channel enable bit + Uint16 RCED5:1; // 5 Receive Channel enable bit + Uint16 RCED6:1; // 6 Receive Channel enable bit + Uint16 RCED7:1; // 7 Receive Channel enable bit + Uint16 RCED8:1; // 8 Receive Channel enable bit + Uint16 RCED9:1; // 9 Receive Channel enable bit + Uint16 RCED10:1; // 10 Receive Channel enable bit + Uint16 RCED11:1; // 11 Receive Channel enable bit + Uint16 RCED12:1; // 12 Receive Channel enable bit + Uint16 RCED13:1; // 13 Receive Channel enable bit + Uint16 RCED14:1; // 14 Receive Channel enable bit + Uint16 RCED15:1; // 15 Receive Channel enable bit +}; + +union RCERD_REG { + Uint16 all; + struct RCERD_BITS bit; +}; + +// XCERC control register bit definitions: +struct XCERC_BITS { // bit description + Uint16 XCERC0:1; // 0 Receive Channel enable bit + Uint16 XCERC1:1; // 1 Receive Channel enable bit + Uint16 XCERC2:1; // 2 Receive Channel enable bit + Uint16 XCERC3:1; // 3 Receive Channel enable bit + Uint16 XCERC4:1; // 4 Receive Channel enable bit + Uint16 XCERC5:1; // 5 Receive Channel enable bit + Uint16 XCERC6:1; // 6 Receive Channel enable bit + Uint16 XCERC7:1; // 7 Receive Channel enable bit + Uint16 XCERC8:1; // 8 Receive Channel enable bit + Uint16 XCERC9:1; // 9 Receive Channel enable bit + Uint16 XCERC10:1; // 10 Receive Channel enable bit + Uint16 XCERC11:1; // 11 Receive Channel enable bit + Uint16 XCERC12:1; // 12 Receive Channel enable bit + Uint16 XCERC13:1; // 13 Receive Channel enable bit + Uint16 XCERC14:1; // 14 Receive Channel enable bit + Uint16 XCERC15:1; // 15 Receive Channel enable bit +}; + +union XCERC_REG { + Uint16 all; + struct XCERC_BITS bit; +}; + +// XCERD control register bit definitions: +struct XCERD_BITS { // bit description + Uint16 XCERD0:1; // 0 Receive Channel enable bit + Uint16 XCERD1:1; // 1 Receive Channel enable bit + Uint16 XCERD2:1; // 2 Receive Channel enable bit + Uint16 XCERD3:1; // 3 Receive Channel enable bit + Uint16 XCERD4:1; // 4 Receive Channel enable bit + Uint16 XCERD5:1; // 5 Receive Channel enable bit + Uint16 XCERD6:1; // 6 Receive Channel enable bit + Uint16 XCERD7:1; // 7 Receive Channel enable bit + Uint16 XCERD8:1; // 8 Receive Channel enable bit + Uint16 XCERD9:1; // 9 Receive Channel enable bit + Uint16 XCERD10:1; // 10 Receive Channel enable bit + Uint16 XCERD11:1; // 11 Receive Channel enable bit + Uint16 XCERD12:1; // 12 Receive Channel enable bit + Uint16 XCERD13:1; // 13 Receive Channel enable bit + Uint16 XCERD14:1; // 14 Receive Channel enable bit + Uint16 XCERD15:1; // 15 Receive Channel enable bit +}; + +union XCERD_REG { + Uint16 all; + struct XCERD_BITS bit; +}; + +// RCERE control register bit definitions: +struct RCERE_BITS { // bit description + Uint16 RCEE0:1; // 0 Receive Channel enable bit + Uint16 RCEE1:1; // 1 Receive Channel enable bit + Uint16 RCEE2:1; // 2 Receive Channel enable bit + Uint16 RCEE3:1; // 3 Receive Channel enable bit + Uint16 RCEE4:1; // 4 Receive Channel enable bit + Uint16 RCEE5:1; // 5 Receive Channel enable bit + Uint16 RCEE6:1; // 6 Receive Channel enable bit + Uint16 RCEE7:1; // 7 Receive Channel enable bit + Uint16 RCEE8:1; // 8 Receive Channel enable bit + Uint16 RCEE9:1; // 9 Receive Channel enable bit + Uint16 RCEE10:1; // 10 Receive Channel enable bit + Uint16 RCEE11:1; // 11 Receive Channel enable bit + Uint16 RCEE12:1; // 12 Receive Channel enable bit + Uint16 RCEE13:1; // 13 Receive Channel enable bit + Uint16 RCEE14:1; // 14 Receive Channel enable bit + Uint16 RCEE15:1; // 15 Receive Channel enable bit +}; + +union RCERE_REG { + Uint16 all; + struct RCERE_BITS bit; +}; + +// RCERF control register bit definitions: +struct RCERF_BITS { // bit description + Uint16 RCEF0:1; // 0 Receive Channel enable bit + Uint16 RCEF1:1; // 1 Receive Channel enable bit + Uint16 RCEF2:1; // 2 Receive Channel enable bit + Uint16 RCEF3:1; // 3 Receive Channel enable bit + Uint16 RCEF4:1; // 4 Receive Channel enable bit + Uint16 RCEF5:1; // 5 Receive Channel enable bit + Uint16 RCEF6:1; // 6 Receive Channel enable bit + Uint16 RCEF7:1; // 7 Receive Channel enable bit + Uint16 RCEF8:1; // 8 Receive Channel enable bit + Uint16 RCEF9:1; // 9 Receive Channel enable bit + Uint16 RCEF10:1; // 10 Receive Channel enable bit + Uint16 RCEF11:1; // 11 Receive Channel enable bit + Uint16 RCEF12:1; // 12 Receive Channel enable bit + Uint16 RCEF13:1; // 13 Receive Channel enable bit + Uint16 RCEF14:1; // 14 Receive Channel enable bit + Uint16 RCEF15:1; // 15 Receive Channel enable bit +}; + +union RCERF_REG { + Uint16 all; + struct RCERF_BITS bit; +}; + +// XCERE control register bit definitions: +struct XCERE_BITS { // bit description + Uint16 XCERE0:1; // 0 Receive Channel enable bit + Uint16 XCERE1:1; // 1 Receive Channel enable bit + Uint16 XCERE2:1; // 2 Receive Channel enable bit + Uint16 XCERE3:1; // 3 Receive Channel enable bit + Uint16 XCERE4:1; // 4 Receive Channel enable bit + Uint16 XCERE5:1; // 5 Receive Channel enable bit + Uint16 XCERE6:1; // 6 Receive Channel enable bit + Uint16 XCERE7:1; // 7 Receive Channel enable bit + Uint16 XCERE8:1; // 8 Receive Channel enable bit + Uint16 XCERE9:1; // 9 Receive Channel enable bit + Uint16 XCERE10:1; // 10 Receive Channel enable bit + Uint16 XCERE11:1; // 11 Receive Channel enable bit + Uint16 XCERE12:1; // 12 Receive Channel enable bit + Uint16 XCERE13:1; // 13 Receive Channel enable bit + Uint16 XCERE14:1; // 14 Receive Channel enable bit + Uint16 XCERE15:1; // 15 Receive Channel enable bit +}; + +union XCERE_REG { + Uint16 all; + struct XCERE_BITS bit; +}; + +// XCERF control register bit definitions: +struct XCERF_BITS { // bit description + Uint16 XCERF0:1; // 0 Receive Channel enable bit + Uint16 XCERF1:1; // 1 Receive Channel enable bit + Uint16 XCERF2:1; // 2 Receive Channel enable bit + Uint16 XCERF3:1; // 3 Receive Channel enable bit + Uint16 XCERF4:1; // 4 Receive Channel enable bit + Uint16 XCERF5:1; // 5 Receive Channel enable bit + Uint16 XCERF6:1; // 6 Receive Channel enable bit + Uint16 XCERF7:1; // 7 Receive Channel enable bit + Uint16 XCERF8:1; // 8 Receive Channel enable bit + Uint16 XCERF9:1; // 9 Receive Channel enable bit + Uint16 XCERF10:1; // 10 Receive Channel enable bit + Uint16 XCERF11:1; // 11 Receive Channel enable bit + Uint16 XCERF12:1; // 12 Receive Channel enable bit + Uint16 XCERF13:1; // 13 Receive Channel enable bit + Uint16 XCERF14:1; // 14 Receive Channel enable bit + Uint16 XCERF15:1; // 15 Receive Channel enable bit +}; + +union XCERF_REG { + Uint16 all; + struct XCERF_BITS bit; +}; + +// RCERG control register bit definitions: +struct RCERG_BITS { // bit description + Uint16 RCEG0:1; // 0 Receive Channel enable bit + Uint16 RCEG1:1; // 1 Receive Channel enable bit + Uint16 RCEG2:1; // 2 Receive Channel enable bit + Uint16 RCEG3:1; // 3 Receive Channel enable bit + Uint16 RCEG4:1; // 4 Receive Channel enable bit + Uint16 RCEG5:1; // 5 Receive Channel enable bit + Uint16 RCEG6:1; // 6 Receive Channel enable bit + Uint16 RCEG7:1; // 7 Receive Channel enable bit + Uint16 RCEG8:1; // 8 Receive Channel enable bit + Uint16 RCEG9:1; // 9 Receive Channel enable bit + Uint16 RCEG10:1; // 10 Receive Channel enable bit + Uint16 RCEG11:1; // 11 Receive Channel enable bit + Uint16 RCEG12:1; // 12 Receive Channel enable bit + Uint16 RCEG13:1; // 13 Receive Channel enable bit + Uint16 RCEG14:1; // 14 Receive Channel enable bit + Uint16 RCEG15:1; // 15 Receive Channel enable bit +}; + +union RCERG_REG { + Uint16 all; + struct RCERG_BITS bit; +}; + +// RCERH control register bit definitions: +struct RCERH_BITS { // bit description + Uint16 RCEH0:1; // 0 Receive Channel enable bit + Uint16 RCEH1:1; // 1 Receive Channel enable bit + Uint16 RCEH2:1; // 2 Receive Channel enable bit + Uint16 RCEH3:1; // 3 Receive Channel enable bit + Uint16 RCEH4:1; // 4 Receive Channel enable bit + Uint16 RCEH5:1; // 5 Receive Channel enable bit + Uint16 RCEH6:1; // 6 Receive Channel enable bit + Uint16 RCEH7:1; // 7 Receive Channel enable bit + Uint16 RCEH8:1; // 8 Receive Channel enable bit + Uint16 RCEH9:1; // 9 Receive Channel enable bit + Uint16 RCEH10:1; // 10 Receive Channel enable bit + Uint16 RCEH11:1; // 11 Receive Channel enable bit + Uint16 RCEH12:1; // 12 Receive Channel enable bit + Uint16 RCEH13:1; // 13 Receive Channel enable bit + Uint16 RCEH14:1; // 14 Receive Channel enable bit + Uint16 RCEH15:1; // 15 Receive Channel enable bit +}; + +union RCERH_REG { + Uint16 all; + struct RCERH_BITS bit; +}; + +// XCERG control register bit definitions: +struct XCERG_BITS { // bit description + Uint16 XCERG0:1; // 0 Receive Channel enable bit + Uint16 XCERG1:1; // 1 Receive Channel enable bit + Uint16 XCERG2:1; // 2 Receive Channel enable bit + Uint16 XCERG3:1; // 3 Receive Channel enable bit + Uint16 XCERG4:1; // 4 Receive Channel enable bit + Uint16 XCERG5:1; // 5 Receive Channel enable bit + Uint16 XCERG6:1; // 6 Receive Channel enable bit + Uint16 XCERG7:1; // 7 Receive Channel enable bit + Uint16 XCERG8:1; // 8 Receive Channel enable bit + Uint16 XCERG9:1; // 9 Receive Channel enable bit + Uint16 XCERG10:1; // 10 Receive Channel enable bit + Uint16 XCERG11:1; // 11 Receive Channel enable bit + Uint16 XCERG12:1; // 12 Receive Channel enable bit + Uint16 XCERG13:1; // 13 Receive Channel enable bit + Uint16 XCERG14:1; // 14 Receive Channel enable bit + Uint16 XCERG15:1; // 15 Receive Channel enable bit +}; + +union XCERG_REG { + Uint16 all; + struct XCERG_BITS bit; +}; + +// XCERH control register bit definitions: +struct XCERH_BITS { // bit description + Uint16 XCEH0:1; // 0 Receive Channel enable bit + Uint16 XCEH1:1; // 1 Receive Channel enable bit + Uint16 XCEH2:1; // 2 Receive Channel enable bit + Uint16 XCEH3:1; // 3 Receive Channel enable bit + Uint16 XCEH4:1; // 4 Receive Channel enable bit + Uint16 XCEH5:1; // 5 Receive Channel enable bit + Uint16 XCEH6:1; // 6 Receive Channel enable bit + Uint16 XCEH7:1; // 7 Receive Channel enable bit + Uint16 XCEH8:1; // 8 Receive Channel enable bit + Uint16 XCEH9:1; // 9 Receive Channel enable bit + Uint16 XCEH10:1; // 10 Receive Channel enable bit + Uint16 XCEH11:1; // 11 Receive Channel enable bit + Uint16 XCEH12:1; // 12 Receive Channel enable bit + Uint16 XCEH13:1; // 13 Receive Channel enable bit + Uint16 XCEH14:1; // 14 Receive Channel enable bit + Uint16 XCEH15:1; // 15 Receive Channel enable bit +}; + +union XCERH_REG { + Uint16 all; + struct XCERH_BITS bit; +}; + + +// McBSP Interrupt enable register for RINT/XINT +struct MFFINT_BITS { // bits description + Uint16 XINT:1; // 0 XINT interrupt enable + Uint16 rsvd1:1; // 1 reserved + Uint16 RINT:1; // 2 RINT interrupt enable + Uint16 rsvd2:13; // 15:3 reserved +}; + +union MFFINT_REG { + Uint16 all; + struct MFFINT_BITS bit; +}; + + +//--------------------------------------------------------------------------- +// McBSP Register File: +// +struct MCBSP_REGS { + union DRR2_REG DRR2; // MCBSP Data receive register bits 31-16 + union DRR1_REG DRR1; // MCBSP Data receive register bits 15-0 + union DXR2_REG DXR2; // MCBSP Data transmit register bits 31-16 + union DXR1_REG DXR1; // MCBSP Data transmit register bits 15-0 + union SPCR2_REG SPCR2; // MCBSP control register bits 31-16 + union SPCR1_REG SPCR1; // MCBSP control register bits 15-0 + union RCR2_REG RCR2; // MCBSP receive control register bits 31-16 + union RCR1_REG RCR1; // MCBSP receive control register bits 15-0 + union XCR2_REG XCR2; // MCBSP transmit control register bits 31-16 + union XCR1_REG XCR1; // MCBSP transmit control register bits 15-0 + union SRGR2_REG SRGR2; // MCBSP sample rate gen register bits 31-16 + union SRGR1_REG SRGR1; // MCBSP sample rate gen register bits 15-0 + union MCR2_REG MCR2; // MCBSP multichannel register bits 31-16 + union MCR1_REG MCR1; // MCBSP multichannel register bits 15-0 + union RCERA_REG RCERA; // MCBSP Receive channel enable partition A + union RCERB_REG RCERB; // MCBSP Receive channel enable partition B + union XCERA_REG XCERA; // MCBSP Transmit channel enable partition A + union XCERB_REG XCERB; // MCBSP Transmit channel enable partition B + union PCR_REG PCR; // MCBSP Pin control register bits 15-0 + union RCERC_REG RCERC; // MCBSP Receive channel enable partition C + union RCERD_REG RCERD; // MCBSP Receive channel enable partition D + union XCERC_REG XCERC; // MCBSP Transmit channel enable partition C + union XCERD_REG XCERD; // MCBSP Transmit channel enable partition D + union RCERE_REG RCERE; // MCBSP Receive channel enable partition E + union RCERF_REG RCERF; // MCBSP Receive channel enable partition F + union XCERE_REG XCERE; // MCBSP Transmit channel enable partition E + union XCERF_REG XCERF; // MCBSP Transmit channel enable partition F + union RCERG_REG RCERG; // MCBSP Receive channel enable partition G + union RCERH_REG RCERH; // MCBSP Receive channel enable partition H + union XCERG_REG XCERG; // MCBSP Transmit channel enable partition G + union XCERH_REG XCERH; // MCBSP Transmit channel enable partition H + Uint16 rsvd1[4]; // reserved + union MFFINT_REG MFFINT; // MCBSP Interrupt enable register for RINT/XINT + Uint16 rsvd2; // reserved +}; + +//--------------------------------------------------------------------------- +// McBSP External References & Function Declarations: +// +extern volatile struct MCBSP_REGS McbspaRegs; +extern volatile struct MCBSP_REGS McbspbRegs; + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_MCBSP_H definition + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h b/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h new file mode 100644 index 0000000..1ab6e9d --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h @@ -0,0 +1,153 @@ +// TI File $Revision: /main/1 $ +// Checkin $Date: August 18, 2006 13:52:24 $ +//########################################################################### +// +// FILE: DSP2833x_PieCtrl.h +// +// TITLE: DSP2833x Device PIE Control Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + + +#ifndef DSP2833x_PIE_CTRL_H +#define DSP2833x_PIE_CTRL_H + +#ifdef __cplusplus +extern "C" { +#endif + +//--------------------------------------------------------------------------- +// PIE Control Register Bit Definitions: +// +// PIECTRL: Register bit definitions: +struct PIECTRL_BITS { // bits description + Uint16 ENPIE:1; // 0 Enable PIE block + Uint16 PIEVECT:15; // 15:1 Fetched vector address +}; + +union PIECTRL_REG { + Uint16 all; + struct PIECTRL_BITS bit; +}; + +// PIEIER: Register bit definitions: +struct PIEIER_BITS { // bits description + Uint16 INTx1:1; // 0 INTx.1 + Uint16 INTx2:1; // 1 INTx.2 + Uint16 INTx3:1; // 2 INTx.3 + Uint16 INTx4:1; // 3 INTx.4 + Uint16 INTx5:1; // 4 INTx.5 + Uint16 INTx6:1; // 5 INTx.6 + Uint16 INTx7:1; // 6 INTx.7 + Uint16 INTx8:1; // 7 INTx.8 + Uint16 rsvd:8; // 15:8 reserved +}; + +union PIEIER_REG { + Uint16 all; + struct PIEIER_BITS bit; +}; + +// PIEIFR: Register bit definitions: +struct PIEIFR_BITS { // bits description + Uint16 INTx1:1; // 0 INTx.1 + Uint16 INTx2:1; // 1 INTx.2 + Uint16 INTx3:1; // 2 INTx.3 + Uint16 INTx4:1; // 3 INTx.4 + Uint16 INTx5:1; // 4 INTx.5 + Uint16 INTx6:1; // 5 INTx.6 + Uint16 INTx7:1; // 6 INTx.7 + Uint16 INTx8:1; // 7 INTx.8 + Uint16 rsvd:8; // 15:8 reserved +}; + +union PIEIFR_REG { + Uint16 all; + struct PIEIFR_BITS bit; +}; + +// PIEACK: Register bit definitions: +struct PIEACK_BITS { // bits description + Uint16 ACK1:1; // 0 Acknowledge PIE interrupt group 1 + Uint16 ACK2:1; // 1 Acknowledge PIE interrupt group 2 + Uint16 ACK3:1; // 2 Acknowledge PIE interrupt group 3 + Uint16 ACK4:1; // 3 Acknowledge PIE interrupt group 4 + Uint16 ACK5:1; // 4 Acknowledge PIE interrupt group 5 + Uint16 ACK6:1; // 5 Acknowledge PIE interrupt group 6 + Uint16 ACK7:1; // 6 Acknowledge PIE interrupt group 7 + Uint16 ACK8:1; // 7 Acknowledge PIE interrupt group 8 + Uint16 ACK9:1; // 8 Acknowledge PIE interrupt group 9 + Uint16 ACK10:1; // 9 Acknowledge PIE interrupt group 10 + Uint16 ACK11:1; // 10 Acknowledge PIE interrupt group 11 + Uint16 ACK12:1; // 11 Acknowledge PIE interrupt group 12 + Uint16 rsvd:4; // 15:12 reserved +}; + +union PIEACK_REG { + Uint16 all; + struct PIEACK_BITS bit; +}; + +//--------------------------------------------------------------------------- +// PIE Control Register File: +// +struct PIE_CTRL_REGS { + union PIECTRL_REG PIECTRL; // PIE control register + union PIEACK_REG PIEACK; // PIE acknowledge + union PIEIER_REG PIEIER1; // PIE int1 IER register + union PIEIFR_REG PIEIFR1; // PIE int1 IFR register + union PIEIER_REG PIEIER2; // PIE INT2 IER register + union PIEIFR_REG PIEIFR2; // PIE INT2 IFR register + union PIEIER_REG PIEIER3; // PIE INT3 IER register + union PIEIFR_REG PIEIFR3; // PIE INT3 IFR register + union PIEIER_REG PIEIER4; // PIE INT4 IER register + union PIEIFR_REG PIEIFR4; // PIE INT4 IFR register + union PIEIER_REG PIEIER5; // PIE INT5 IER register + union PIEIFR_REG PIEIFR5; // PIE INT5 IFR register + union PIEIER_REG PIEIER6; // PIE INT6 IER register + union PIEIFR_REG PIEIFR6; // PIE INT6 IFR register + union PIEIER_REG PIEIER7; // PIE INT7 IER register + union PIEIFR_REG PIEIFR7; // PIE INT7 IFR register + union PIEIER_REG PIEIER8; // PIE INT8 IER register + union PIEIFR_REG PIEIFR8; // PIE INT8 IFR register + union PIEIER_REG PIEIER9; // PIE INT9 IER register + union PIEIFR_REG PIEIFR9; // PIE INT9 IFR register + union PIEIER_REG PIEIER10; // PIE int10 IER register + union PIEIFR_REG PIEIFR10; // PIE int10 IFR register + union PIEIER_REG PIEIER11; // PIE int11 IER register + union PIEIFR_REG PIEIFR11; // PIE int11 IFR register + union PIEIER_REG PIEIER12; // PIE int12 IER register + union PIEIFR_REG PIEIFR12; // PIE int12 IFR register +}; + +#define PIEACK_GROUP1 0x0001 +#define PIEACK_GROUP2 0x0002 +#define PIEACK_GROUP3 0x0004 +#define PIEACK_GROUP4 0x0008 +#define PIEACK_GROUP5 0x0010 +#define PIEACK_GROUP6 0x0020 +#define PIEACK_GROUP7 0x0040 +#define PIEACK_GROUP8 0x0080 +#define PIEACK_GROUP9 0x0100 +#define PIEACK_GROUP10 0x0200 +#define PIEACK_GROUP11 0x0400 +#define PIEACK_GROUP12 0x0800 + +//--------------------------------------------------------------------------- +// PIE Control Registers External References & Function Declarations: +// +extern volatile struct PIE_CTRL_REGS PieCtrlRegs; + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_PIE_CTRL_H definition + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/v120/DSP2833x_headers/include/DSP2833x_PieVect.h b/v120/DSP2833x_headers/include/DSP2833x_PieVect.h new file mode 100644 index 0000000..acddab7 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_PieVect.h @@ -0,0 +1,208 @@ +// TI File $Revision: /main/2 $ +// Checkin $Date: March 16, 2007 09:00:21 $ +//########################################################################### +// +// FILE: DSP2833x_PieVect.h +// +// TITLE: DSP2833x Devices PIE Vector Table Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_PIE_VECT_H +#define DSP2833x_PIE_VECT_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +//--------------------------------------------------------------------------- +// PIE Interrupt Vector Table Definition: +// +// Create a user type called PINT (pointer to interrupt): + +typedef interrupt void(*PINT)(void); + +// Define Vector Table: +struct PIE_VECT_TABLE { + +// Reset is never fetched from this table. +// It will always be fetched from 0x3FFFC0 in +// boot ROM + + PINT PIE1_RESERVED; + PINT PIE2_RESERVED; + PINT PIE3_RESERVED; + PINT PIE4_RESERVED; + PINT PIE5_RESERVED; + PINT PIE6_RESERVED; + PINT PIE7_RESERVED; + PINT PIE8_RESERVED; + PINT PIE9_RESERVED; + PINT PIE10_RESERVED; + PINT PIE11_RESERVED; + PINT PIE12_RESERVED; + PINT PIE13_RESERVED; + +// Non-Peripheral Interrupts: + PINT XINT13; // XINT13 / CPU-Timer1 + PINT TINT2; // CPU-Timer2 + PINT DATALOG; // Datalogging interrupt + PINT RTOSINT; // RTOS interrupt + PINT EMUINT; // Emulation interrupt + PINT XNMI; // Non-maskable interrupt + PINT ILLEGAL; // Illegal operation TRAP + PINT USER1; // User Defined trap 1 + PINT USER2; // User Defined trap 2 + PINT USER3; // User Defined trap 3 + PINT USER4; // User Defined trap 4 + PINT USER5; // User Defined trap 5 + PINT USER6; // User Defined trap 6 + PINT USER7; // User Defined trap 7 + PINT USER8; // User Defined trap 8 + PINT USER9; // User Defined trap 9 + PINT USER10; // User Defined trap 10 + PINT USER11; // User Defined trap 11 + PINT USER12; // User Defined trap 12 + +// Group 1 PIE Peripheral Vectors: + PINT SEQ1INT; + PINT SEQ2INT; + PINT rsvd1_3; + PINT XINT1; + PINT XINT2; + PINT ADCINT; // ADC + PINT TINT0; // Timer 0 + PINT WAKEINT; // WD + +// Group 2 PIE Peripheral Vectors: + PINT EPWM1_TZINT; // EPWM-1 + PINT EPWM2_TZINT; // EPWM-2 + PINT EPWM3_TZINT; // EPWM-3 + PINT EPWM4_TZINT; // EPWM-4 + PINT EPWM5_TZINT; // EPWM-5 + PINT EPWM6_TZINT; // EPWM-6 + PINT rsvd2_7; + PINT rsvd2_8; + +// Group 3 PIE Peripheral Vectors: + PINT EPWM1_INT; // EPWM-1 + PINT EPWM2_INT; // EPWM-2 + PINT EPWM3_INT; // EPWM-3 + PINT EPWM4_INT; // EPWM-4 + PINT EPWM5_INT; // EPWM-5 + PINT EPWM6_INT; // EPWM-6 + PINT rsvd3_7; + PINT rsvd3_8; + +// Group 4 PIE Peripheral Vectors: + PINT ECAP1_INT; // ECAP-1 + PINT ECAP2_INT; // ECAP-2 + PINT ECAP3_INT; // ECAP-3 + PINT ECAP4_INT; // ECAP-4 + PINT ECAP5_INT; // ECAP-5 + PINT ECAP6_INT; // ECAP-6 + PINT rsvd4_7; + PINT rsvd4_8; + +// Group 5 PIE Peripheral Vectors: + PINT EQEP1_INT; // EQEP-1 + PINT EQEP2_INT; // EQEP-2 + PINT rsvd5_3; + PINT rsvd5_4; + PINT rsvd5_5; + PINT rsvd5_6; + PINT rsvd5_7; + PINT rsvd5_8; + +// Group 6 PIE Peripheral Vectors: + PINT SPIRXINTA; // SPI-A + PINT SPITXINTA; // SPI-A + PINT MRINTB; // McBSP-B + PINT MXINTB; // McBSP-B + PINT MRINTA; // McBSP-A + PINT MXINTA; // McBSP-A + PINT rsvd6_7; + PINT rsvd6_8; + +// Group 7 PIE Peripheral Vectors: + PINT DINTCH1; // DMA + PINT DINTCH2; // DMA + PINT DINTCH3; // DMA + PINT DINTCH4; // DMA + PINT DINTCH5; // DMA + PINT DINTCH6; // DMA + PINT rsvd7_7; + PINT rsvd7_8; + +// Group 8 PIE Peripheral Vectors: + PINT I2CINT1A; // I2C-A + PINT I2CINT2A; // I2C-A + PINT rsvd8_3; + PINT rsvd8_4; + PINT SCIRXINTC; // SCI-C + PINT SCITXINTC; // SCI-C + PINT rsvd8_7; + PINT rsvd8_8; + +// Group 9 PIE Peripheral Vectors: + PINT SCIRXINTA; // SCI-A + PINT SCITXINTA; // SCI-A + PINT SCIRXINTB; // SCI-B + PINT SCITXINTB; // SCI-B + PINT ECAN0INTA; // eCAN-A + PINT ECAN1INTA; // eCAN-A + PINT ECAN0INTB; // eCAN-B + PINT ECAN1INTB; // eCAN-B + +// Group 10 PIE Peripheral Vectors: + PINT rsvd10_1; + PINT rsvd10_2; + PINT rsvd10_3; + PINT rsvd10_4; + PINT rsvd10_5; + PINT rsvd10_6; + PINT rsvd10_7; + PINT rsvd10_8; + +// Group 11 PIE Peripheral Vectors: + PINT rsvd11_1; + PINT rsvd11_2; + PINT rsvd11_3; + PINT rsvd11_4; + PINT rsvd11_5; + PINT rsvd11_6; + PINT rsvd11_7; + PINT rsvd11_8; + +// Group 12 PIE Peripheral Vectors: + PINT XINT3; // External interrupt + PINT XINT4; + PINT XINT5; + PINT XINT6; + PINT XINT7; + PINT rsvd12_6; + PINT LVF; // Latched overflow + PINT LUF; // Latched underflow +}; + +//--------------------------------------------------------------------------- +// PIE Interrupt Vector Table External References & Function Declarations: +// +extern struct PIE_VECT_TABLE PieVectTable; + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_PIE_VECT_H definition + +//=========================================================================== +// End of file. +//=========================================================================== + diff --git a/v120/DSP2833x_headers/include/DSP2833x_Sci.h b/v120/DSP2833x_headers/include/DSP2833x_Sci.h new file mode 100644 index 0000000..7c17822 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_Sci.h @@ -0,0 +1,235 @@ +// TI File $Revision: /main/2 $ +// Checkin $Date: March 1, 2007 15:57:02 $ +//########################################################################### +// +// FILE: DSP2833x_Sci.h +// +// TITLE: DSP2833x Device SCI Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_SCI_H +#define DSP2833x_SCI_H + + +#ifdef __cplusplus +extern "C" { +#endif + +//--------------------------------------------------------------------------- +// SCI Individual Register Bit Definitions + +//---------------------------------------------------------- +// SCICCR communication control register bit definitions: +// + +struct SCICCR_BITS { // bit description + Uint16 SCICHAR:3; // 2:0 Character length control + Uint16 ADDRIDLE_MODE:1; // 3 ADDR/IDLE Mode control + Uint16 LOOPBKENA:1; // 4 Loop Back enable + Uint16 PARITYENA:1; // 5 Parity enable + Uint16 PARITY:1; // 6 Even or Odd Parity + Uint16 STOPBITS:1; // 7 Number of Stop Bits + Uint16 rsvd1:8; // 15:8 reserved +}; + + +union SCICCR_REG { + Uint16 all; + struct SCICCR_BITS bit; +}; + +//------------------------------------------- +// SCICTL1 control register 1 bit definitions: +// + +struct SCICTL1_BITS { // bit description + Uint16 RXENA:1; // 0 SCI receiver enable + Uint16 TXENA:1; // 1 SCI transmitter enable + Uint16 SLEEP:1; // 2 SCI sleep + Uint16 TXWAKE:1; // 3 Transmitter wakeup method + Uint16 rsvd:1; // 4 reserved + Uint16 SWRESET:1; // 5 Software reset + Uint16 RXERRINTENA:1; // 6 Recieve interrupt enable + Uint16 rsvd1:9; // 15:7 reserved + +}; + +union SCICTL1_REG { + Uint16 all; + struct SCICTL1_BITS bit; +}; + +//--------------------------------------------- +// SCICTL2 control register 2 bit definitions: +// + +struct SCICTL2_BITS { // bit description + Uint16 TXINTENA:1; // 0 Transmit interrupt enable + Uint16 RXBKINTENA:1; // 1 Receiver-buffer break enable + Uint16 rsvd:4; // 5:2 reserved + Uint16 TXEMPTY:1; // 6 Transmitter empty flag + Uint16 TXRDY:1; // 7 Transmitter ready flag + Uint16 rsvd1:8; // 15:8 reserved + +}; + +union SCICTL2_REG { + Uint16 all; + struct SCICTL2_BITS bit; +}; + +//--------------------------------------------------- +// SCIRXST Receiver status register bit definitions: +// + +struct SCIRXST_BITS { // bit description + Uint16 rsvd:1; // 0 reserved + Uint16 RXWAKE:1; // 1 Receiver wakeup detect flag + Uint16 PE:1; // 2 Parity error flag + Uint16 OE:1; // 3 Overrun error flag + Uint16 FE:1; // 4 Framing error flag + Uint16 BRKDT:1; // 5 Break-detect flag + Uint16 RXRDY:1; // 6 Receiver ready flag + Uint16 RXERROR:1; // 7 Receiver error flag + +}; + +union SCIRXST_REG { + Uint16 all; + struct SCIRXST_BITS bit; +}; + +//---------------------------------------------------- +// SCIRXBUF Receiver Data Buffer with FIFO bit definitions: +// + +struct SCIRXBUF_BITS { // bits description + Uint16 RXDT:8; // 7:0 Receive word + Uint16 rsvd:6; // 13:8 reserved + Uint16 SCIFFPE:1; // 14 SCI PE error in FIFO mode + Uint16 SCIFFFE:1; // 15 SCI FE error in FIFO mode +}; + +union SCIRXBUF_REG { + Uint16 all; + struct SCIRXBUF_BITS bit; +}; + +//-------------------------------------------------- +// SCIPRI Priority control register bit definitions: +// +// + +struct SCIPRI_BITS { // bit description + Uint16 rsvd:3; // 2:0 reserved + Uint16 FREE:1; // 3 Free emulation suspend mode + Uint16 SOFT:1; // 4 Soft emulation suspend mode + Uint16 rsvd1:3; // 7:5 reserved +}; + +union SCIPRI_REG { + Uint16 all; + struct SCIPRI_BITS bit; +}; + +//------------------------------------------------- +// SCI FIFO Transmit register bit definitions: +// +// + +struct SCIFFTX_BITS { // bit description + Uint16 TXFFIL:5; // 4:0 Interrupt level + Uint16 TXFFIENA:1; // 5 Interrupt enable + Uint16 TXFFINTCLR:1; // 6 Clear INT flag + Uint16 TXFFINT:1; // 7 INT flag + Uint16 TXFFST:5; // 12:8 FIFO status + Uint16 TXFIFOXRESET:1; // 13 FIFO reset + Uint16 SCIFFENA:1; // 14 Enhancement enable + Uint16 SCIRST:1; // 15 SCI reset rx/tx channels + +}; + +union SCIFFTX_REG { + Uint16 all; + struct SCIFFTX_BITS bit; +}; + +//------------------------------------------------ +// SCI FIFO recieve register bit definitions: +// +// + +struct SCIFFRX_BITS { // bits description + Uint16 RXFFIL:5; // 4:0 Interrupt level + Uint16 RXFFIENA:1; // 5 Interrupt enable + Uint16 RXFFINTCLR:1; // 6 Clear INT flag + Uint16 RXFFINT:1; // 7 INT flag + Uint16 RXFFST:5; // 12:8 FIFO status + Uint16 RXFIFORESET:1; // 13 FIFO reset + Uint16 RXFFOVRCLR:1; // 14 Clear overflow + Uint16 RXFFOVF:1; // 15 FIFO overflow + +}; + +union SCIFFRX_REG { + Uint16 all; + struct SCIFFRX_BITS bit; +}; + +// SCI FIFO control register bit definitions: +struct SCIFFCT_BITS { // bits description + Uint16 FFTXDLY:8; // 7:0 FIFO transmit delay + Uint16 rsvd:5; // 12:8 reserved + Uint16 CDC:1; // 13 Auto baud mode enable + Uint16 ABDCLR:1; // 14 Auto baud clear + Uint16 ABD:1; // 15 Auto baud detect +}; + +union SCIFFCT_REG { + Uint16 all; + struct SCIFFCT_BITS bit; +}; + +//--------------------------------------------------------------------------- +// SCI Register File: +// +struct SCI_REGS { + union SCICCR_REG SCICCR; // Communications control register + union SCICTL1_REG SCICTL1; // Control register 1 + Uint16 SCIHBAUD; // Baud rate (high) register + Uint16 SCILBAUD; // Baud rate (low) register + union SCICTL2_REG SCICTL2; // Control register 2 + union SCIRXST_REG SCIRXST; // Recieve status register + Uint16 SCIRXEMU; // Recieve emulation buffer register + union SCIRXBUF_REG SCIRXBUF; // Recieve data buffer + Uint16 rsvd1; // reserved + Uint16 SCITXBUF; // Transmit data buffer + union SCIFFTX_REG SCIFFTX; // FIFO transmit register + union SCIFFRX_REG SCIFFRX; // FIFO recieve register + union SCIFFCT_REG SCIFFCT; // FIFO control register + Uint16 rsvd2; // reserved + Uint16 rsvd3; // reserved + union SCIPRI_REG SCIPRI; // FIFO Priority control +}; + +//--------------------------------------------------------------------------- +// SCI External References & Function Declarations: +// +extern volatile struct SCI_REGS SciaRegs; +extern volatile struct SCI_REGS ScibRegs; +extern volatile struct SCI_REGS ScicRegs; + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_SCI_H definition + +//=========================================================================== +// End of file. +//=========================================================================== + diff --git a/v120/DSP2833x_headers/include/DSP2833x_Spi.h b/v120/DSP2833x_headers/include/DSP2833x_Spi.h new file mode 100644 index 0000000..1325c59 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_Spi.h @@ -0,0 +1,183 @@ +// TI File $Revision: /main/3 $ +// Checkin $Date: April 17, 2008 11:08:27 $ +//########################################################################### +// +// FILE: DSP2833x_Spi.h +// +// TITLE: DSP2833x Device SPI Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_SPI_H +#define DSP2833x_SPI_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +//--------------------------------------------------------------------------- +// SPI Individual Register Bit Definitions: +// +// SPI FIFO Transmit register bit definitions: +struct SPIFFTX_BITS { // bit description + Uint16 TXFFIL:5; // 4:0 Interrupt level + Uint16 TXFFIENA:1; // 5 Interrupt enable + Uint16 TXFFINTCLR:1; // 6 Clear INT flag + Uint16 TXFFINT:1; // 7 INT flag + Uint16 TXFFST:5; // 12:8 FIFO status + Uint16 TXFIFO:1; // 13 FIFO reset + Uint16 SPIFFENA:1; // 14 Enhancement enable + Uint16 SPIRST:1; // 15 Reset SPI +}; + +union SPIFFTX_REG { + Uint16 all; + struct SPIFFTX_BITS bit; +}; + +//-------------------------------------------- +// SPI FIFO recieve register bit definitions: +// +// +struct SPIFFRX_BITS { // bits description + Uint16 RXFFIL:5; // 4:0 Interrupt level + Uint16 RXFFIENA:1; // 5 Interrupt enable + Uint16 RXFFINTCLR:1; // 6 Clear INT flag + Uint16 RXFFINT:1; // 7 INT flag + Uint16 RXFFST:5; // 12:8 FIFO status + Uint16 RXFIFORESET:1; // 13 FIFO reset + Uint16 RXFFOVFCLR:1; // 14 Clear overflow + Uint16 RXFFOVF:1; // 15 FIFO overflow + +}; + +union SPIFFRX_REG { + Uint16 all; + struct SPIFFRX_BITS bit; +}; + +//-------------------------------------------- +// SPI FIFO control register bit definitions: +// +// +struct SPIFFCT_BITS { // bits description + Uint16 TXDLY:8; // 7:0 FIFO transmit delay + Uint16 rsvd:8; // 15:8 reserved +}; + +union SPIFFCT_REG { + Uint16 all; + struct SPIFFCT_BITS bit; +}; + +//--------------------------------------------- +// SPI configuration register bit definitions: +// +// +struct SPICCR_BITS { // bits description + Uint16 SPICHAR:4; // 3:0 Character length control + Uint16 SPILBK:1; // 4 Loop-back enable/disable + Uint16 rsvd1:1; // 5 reserved + Uint16 CLKPOLARITY:1; // 6 Clock polarity + Uint16 SPISWRESET:1; // 7 SPI SW Reset + Uint16 rsvd2:8; // 15:8 reserved +}; + +union SPICCR_REG { + Uint16 all; + struct SPICCR_BITS bit; +}; + +//------------------------------------------------- +// SPI operation control register bit definitions: +// +// +struct SPICTL_BITS { // bits description + Uint16 SPIINTENA:1; // 0 Interrupt enable + Uint16 TALK:1; // 1 Master/Slave transmit enable + Uint16 MASTER_SLAVE:1; // 2 Network control mode + Uint16 CLK_PHASE:1; // 3 Clock phase select + Uint16 OVERRUNINTENA:1; // 4 Overrun interrupt enable + Uint16 rsvd:11; // 15:5 reserved +}; + +union SPICTL_REG { + Uint16 all; + struct SPICTL_BITS bit; +}; + +//-------------------------------------- +// SPI status register bit definitions: +// +// +struct SPISTS_BITS { // bits description + Uint16 rsvd1:5; // 4:0 reserved + Uint16 BUFFULL_FLAG:1; // 5 SPI transmit buffer full flag + Uint16 INT_FLAG:1; // 6 SPI interrupt flag + Uint16 OVERRUN_FLAG:1; // 7 SPI reciever overrun flag + Uint16 rsvd2:8; // 15:8 reserved +}; + +union SPISTS_REG { + Uint16 all; + struct SPISTS_BITS bit; +}; + +//------------------------------------------------ +// SPI priority control register bit definitions: +// +// +struct SPIPRI_BITS { // bits description + Uint16 rsvd1:4; // 3:0 reserved + Uint16 FREE:1; // 4 Free emulation mode control + Uint16 SOFT:1; // 5 Soft emulation mode control + Uint16 rsvd2:1; // 6 reserved + Uint16 rsvd3:9; // 15:7 reserved +}; + +union SPIPRI_REG { + Uint16 all; + struct SPIPRI_BITS bit; +}; + +//--------------------------------------------------------------------------- +// SPI Register File: +// +struct SPI_REGS { + union SPICCR_REG SPICCR; // Configuration register + union SPICTL_REG SPICTL; // Operation control register + union SPISTS_REG SPISTS; // Status register + Uint16 rsvd1; // reserved + Uint16 SPIBRR; // Baud Rate + Uint16 rsvd2; // reserved + Uint16 SPIRXEMU; // Emulation buffer + Uint16 SPIRXBUF; // Serial input buffer + Uint16 SPITXBUF; // Serial output buffer + Uint16 SPIDAT; // Serial data + union SPIFFTX_REG SPIFFTX; // FIFO transmit register + union SPIFFRX_REG SPIFFRX; // FIFO recieve register + union SPIFFCT_REG SPIFFCT; // FIFO control register + Uint16 rsvd3[2]; // reserved + union SPIPRI_REG SPIPRI; // FIFO Priority control +}; + +//--------------------------------------------------------------------------- +// SPI External References & Function Declarations: +// +extern volatile struct SPI_REGS SpiaRegs; + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_SPI_H definition + +//=========================================================================== +// End of file. +//=========================================================================== + diff --git a/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h b/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h new file mode 100644 index 0000000..f8bc343 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h @@ -0,0 +1,383 @@ +// TI File $Revision: /main/5 $ +// Checkin $Date: May 12, 2008 09:34:58 $ +//########################################################################### +// +// FILE: DSP2833x_SysCtrl.h +// +// TITLE: DSP2833x Device System Control Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_SYS_CTRL_H +#define DSP2833x_SYS_CTRL_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +//--------------------------------------------------------------------------- +// System Control Individual Register Bit Definitions: +// + + +// PLL Status Register +struct PLLSTS_BITS { // bits description + Uint16 PLLLOCKS:1; // 0 PLL lock status + Uint16 rsvd1:1; // 1 reserved + Uint16 PLLOFF:1; // 2 PLL off bit + Uint16 MCLKSTS:1; // 3 Missing clock status bit + Uint16 MCLKCLR:1; // 4 Missing clock clear bit + Uint16 OSCOFF:1; // 5 Oscillator clock off + Uint16 MCLKOFF:1; // 6 Missing clock detect + Uint16 DIVSEL:2; // 7 Divide Select + Uint16 rsvd2:7; // 15:7 reserved +}; + +union PLLSTS_REG { + Uint16 all; + struct PLLSTS_BITS bit; +}; + +// High speed peripheral clock register bit definitions: +struct HISPCP_BITS { // bits description + Uint16 HSPCLK:3; // 2:0 Rate relative to SYSCLKOUT + Uint16 rsvd1:13; // 15:3 reserved +}; + +union HISPCP_REG { + Uint16 all; + struct HISPCP_BITS bit; +}; + +// Low speed peripheral clock register bit definitions: +struct LOSPCP_BITS { // bits description + Uint16 LSPCLK:3; // 2:0 Rate relative to SYSCLKOUT + Uint16 rsvd1:13; // 15:3 reserved +}; + +union LOSPCP_REG { + Uint16 all; + struct LOSPCP_BITS bit; +}; + +// Peripheral clock control register 0 bit definitions: +struct PCLKCR0_BITS { // bits description + Uint16 rsvd1:2; // 1:0 reserved + Uint16 TBCLKSYNC:1; // 2 EWPM Module TBCLK enable/sync + Uint16 ADCENCLK:1; // 3 Enable high speed clk to ADC + Uint16 I2CAENCLK:1; // 4 Enable SYSCLKOUT to I2C-A + Uint16 SCICENCLK:1; // 5 Enalbe low speed clk to SCI-C + Uint16 rsvd2:2; // 7:6 reserved + Uint16 SPIAENCLK:1; // 8 Enable low speed clk to SPI-A + Uint16 rsvd3:1; // 9 reserved + Uint16 SCIAENCLK:1; // 10 Enable low speed clk to SCI-A + Uint16 SCIBENCLK:1; // 11 Enable low speed clk to SCI-B + Uint16 MCBSPAENCLK:1; // 12 Enable low speed clk to McBSP-A + Uint16 MCBSPBENCLK:1; // 13 Enable low speed clk to McBSP-B + Uint16 ECANAENCLK:1; // 14 Enable system clk to eCAN-A + Uint16 ECANBENCLK:1; // 15 Enable system clk to eCAN-B +}; + +union PCLKCR0_REG { + Uint16 all; + struct PCLKCR0_BITS bit; +}; + +// Peripheral clock control register 1 bit definitions: +struct PCLKCR1_BITS { // bits description + Uint16 EPWM1ENCLK:1; // 0 Enable SYSCLKOUT to EPWM1 + Uint16 EPWM2ENCLK:1; // 1 Enable SYSCLKOUT to EPWM2 + Uint16 EPWM3ENCLK:1; // 2 Enable SYSCLKOUT to EPWM3 + Uint16 EPWM4ENCLK:1; // 3 Enable SYSCLKOUT to EPWM4 + Uint16 EPWM5ENCLK:1; // 4 Enable SYSCLKOUT to EPWM5 + Uint16 EPWM6ENCLK:1; // 5 Enable SYSCLKOUT to EPWM6 + Uint16 rsvd1:2; // 7:6 reserved + Uint16 ECAP1ENCLK:1; // 8 Enable SYSCLKOUT to ECAP1 + Uint16 ECAP2ENCLK:1; // 9 Enable SYSCLKOUT to ECAP2 + Uint16 ECAP3ENCLK:1; // 10 Enable SYSCLKOUT to ECAP3 + Uint16 ECAP4ENCLK:1; // 11 Enable SYSCLKOUT to ECAP4 + Uint16 ECAP5ENCLK:1; // 12 Enable SYSCLKOUT to ECAP5 + Uint16 ECAP6ENCLK:1; // 13 Enable SYSCLKOUT to ECAP6 + Uint16 EQEP1ENCLK:1; // 14 Enable SYSCLKOUT to EQEP1 + Uint16 EQEP2ENCLK:1; // 15 Enable SYSCLKOUT to EQEP2 +}; + +union PCLKCR1_REG { + Uint16 all; + struct PCLKCR1_BITS bit; +}; + + +// Peripheral clock control register 2 bit definitions: +struct PCLKCR3_BITS { // bits description + Uint16 rsvd1:8; // 7:0 reserved + Uint16 CPUTIMER0ENCLK:1; // 8 Enable SYSCLKOUT to CPU-Timer 0 + Uint16 CPUTIMER1ENCLK:1; // 9 Enable SYSCLKOUT to CPU-Timer 1 + Uint16 CPUTIMER2ENCLK:1; // 10 Enable SYSCLKOUT to CPU-Timer 2 + Uint16 DMAENCLK:1; // 11 Enable the DMA clock + Uint16 XINTFENCLK:1; // 12 Enable SYSCLKOUT to XINTF + Uint16 GPIOINENCLK:1; // Enable GPIO input clock + Uint16 rsvd2:2; // 15:14 reserved +}; + +union PCLKCR3_REG { + Uint16 all; + struct PCLKCR3_BITS bit; +}; + + + +// PLL control register bit definitions: +struct PLLCR_BITS { // bits description + Uint16 DIV:4; // 3:0 Set clock ratio for the PLL + Uint16 rsvd1:12; // 15:4 reserved +}; + +union PLLCR_REG { + Uint16 all; + struct PLLCR_BITS bit; +}; + +// Low Power Mode 0 control register bit definitions: +struct LPMCR0_BITS { // bits description + Uint16 LPM:2; // 1:0 Set the low power mode + Uint16 QUALSTDBY:6; // 7:2 Qualification + Uint16 rsvd1:7; // 14:8 reserved + Uint16 WDINTE:1; // 15 Enables WD to wake the device from STANDBY +}; + +union LPMCR0_REG { + Uint16 all; + struct LPMCR0_BITS bit; +}; + +// Dual-mapping configuration register bit definitions: +struct MAPCNF_BITS { // bits description + Uint16 MAPEPWM:1; // 0 EPWM dual-map enable + Uint16 rsvd1:15; // 15:1 reserved +}; + +union MAPCNF_REG { + Uint16 all; + struct MAPCNF_BITS bit; +}; + +//--------------------------------------------------------------------------- +// System Control Register File: +// +struct SYS_CTRL_REGS { + Uint16 rsvd1; // 0 + union PLLSTS_REG PLLSTS; // 1 + Uint16 rsvd2[8]; // 2-9 + union HISPCP_REG HISPCP; // 10: High-speed peripheral clock pre-scaler + union LOSPCP_REG LOSPCP; // 11: Low-speed peripheral clock pre-scaler + union PCLKCR0_REG PCLKCR0; // 12: Peripheral clock control register + union PCLKCR1_REG PCLKCR1; // 13: Peripheral clock control register + union LPMCR0_REG LPMCR0; // 14: Low-power mode control register 0 + Uint16 rsvd3; // 15: reserved + union PCLKCR3_REG PCLKCR3; // 16: Peripheral clock control register + union PLLCR_REG PLLCR; // 17: PLL control register + // No bit definitions are defined for SCSR because + // a read-modify-write instruction can clear the WDOVERRIDE bit + Uint16 SCSR; // 18: System control and status register + Uint16 WDCNTR; // 19: WD counter register + Uint16 rsvd4; // 20 + Uint16 WDKEY; // 21: WD reset key register + Uint16 rsvd5[3]; // 22-24 + // No bit definitions are defined for WDCR because + // the proper value must be written to the WDCHK field + // whenever writing to this register. + Uint16 WDCR; // 25: WD timer control register + Uint16 rsvd6[4]; // 26-29 + union MAPCNF_REG MAPCNF; // 30: Dual-mapping configuration register + Uint16 rsvd7[1]; // 31 +}; + + +/* --------------------------------------------------- */ +/* CSM Registers */ +/* */ +/* ----------------------------------------------------*/ + +/* CSM Status & Control register bit definitions */ +struct CSMSCR_BITS { // bit description + Uint16 SECURE:1; // 0 Secure flag + Uint16 rsvd1:14; // 14-1 reserved + Uint16 FORCESEC:1; // 15 Force Secure control bit + +}; + +/* Allow access to the bit fields or entire register */ +union CSMSCR_REG { + Uint16 all; + struct CSMSCR_BITS bit; +}; + +/* CSM Register File */ +struct CSM_REGS { + Uint16 KEY0; // KEY reg bits 15-0 + Uint16 KEY1; // KEY reg bits 31-16 + Uint16 KEY2; // KEY reg bits 47-32 + Uint16 KEY3; // KEY reg bits 63-48 + Uint16 KEY4; // KEY reg bits 79-64 + Uint16 KEY5; // KEY reg bits 95-80 + Uint16 KEY6; // KEY reg bits 111-96 + Uint16 KEY7; // KEY reg bits 127-112 + Uint16 rsvd1; // reserved + Uint16 rsvd2; // reserved + Uint16 rsvd3; // reserved + Uint16 rsvd4; // reserved + Uint16 rsvd5; // reserved + Uint16 rsvd6; // reserved + Uint16 rsvd7; // reserved + union CSMSCR_REG CSMSCR; // CSM Status & Control register +}; + +/* Password locations */ +struct CSM_PWL { + Uint16 PSWD0; // PSWD bits 15-0 + Uint16 PSWD1; // PSWD bits 31-16 + Uint16 PSWD2; // PSWD bits 47-32 + Uint16 PSWD3; // PSWD bits 63-48 + Uint16 PSWD4; // PSWD bits 79-64 + Uint16 PSWD5; // PSWD bits 95-80 + Uint16 PSWD6; // PSWD bits 111-96 + Uint16 PSWD7; // PSWD bits 127-112 +}; + + + +/* Flash Registers */ + +#define FLASH_SLEEP 0x0000; +#define FLASH_STANDBY 0x0001; +#define FLASH_ACTIVE 0x0003; + + +/* Flash Option Register bit definitions */ +struct FOPT_BITS { // bit description + Uint16 ENPIPE:1; // 0 Enable Pipeline Mode + Uint16 rsvd:15; // 1-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FOPT_REG { + Uint16 all; + struct FOPT_BITS bit; +}; + +/* Flash Power Modes Register bit definitions */ +struct FPWR_BITS { // bit description + Uint16 PWR:2; // 0-1 Power Mode bits + Uint16 rsvd:14; // 2-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FPWR_REG { + Uint16 all; + struct FPWR_BITS bit; +}; + + +/* Flash Status Register bit definitions */ +struct FSTATUS_BITS { // bit description + Uint16 PWRS:2; // 0-1 Power Mode Status bits + Uint16 STDBYWAITS:1; // 2 Bank/Pump Sleep to Standby Wait Counter Status bits + Uint16 ACTIVEWAITS:1; // 3 Bank/Pump Standby to Active Wait Counter Status bits + Uint16 rsvd1:4; // 4-7 reserved + Uint16 V3STAT:1; // 8 VDD3V Status Latch bit + Uint16 rsvd2:7; // 9-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FSTATUS_REG { + Uint16 all; + struct FSTATUS_BITS bit; +}; + +/* Flash Sleep to Standby Wait Counter Register bit definitions */ +struct FSTDBYWAIT_BITS { // bit description + Uint16 STDBYWAIT:9; // 0-8 Bank/Pump Sleep to Standby Wait Count bits + Uint16 rsvd:7; // 9-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FSTDBYWAIT_REG { + Uint16 all; + struct FSTDBYWAIT_BITS bit; +}; + +/* Flash Standby to Active Wait Counter Register bit definitions */ +struct FACTIVEWAIT_BITS { // bit description + Uint16 ACTIVEWAIT:9; // 0-8 Bank/Pump Standby to Active Wait Count bits + Uint16 rsvd:7; // 9-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FACTIVEWAIT_REG { + Uint16 all; + struct FACTIVEWAIT_BITS bit; +}; + +/* Bank Read Access Wait State Register bit definitions */ +struct FBANKWAIT_BITS { // bit description + Uint16 RANDWAIT:4; // 0-3 Flash Random Read Wait State bits + Uint16 rsvd1:4; // 4-7 reserved + Uint16 PAGEWAIT:4; // 8-11 Flash Paged Read Wait State bits + Uint16 rsvd2:4; // 12-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FBANKWAIT_REG { + Uint16 all; + struct FBANKWAIT_BITS bit; +}; + +/* OTP Read Access Wait State Register bit definitions */ +struct FOTPWAIT_BITS { // bit description + Uint16 OTPWAIT:5; // 0-4 OTP Read Wait State bits + Uint16 rsvd:11; // 5-15 reserved +}; + +/* Allow access to the bit fields or entire register */ +union FOTPWAIT_REG { + Uint16 all; + struct FOTPWAIT_BITS bit; +}; + + +struct FLASH_REGS { + union FOPT_REG FOPT; // Option Register + Uint16 rsvd1; // reserved + union FPWR_REG FPWR; // Power Modes Register + union FSTATUS_REG FSTATUS; // Status Register + union FSTDBYWAIT_REG FSTDBYWAIT; // Pump/Bank Sleep to Standby Wait State Register + union FACTIVEWAIT_REG FACTIVEWAIT; // Pump/Bank Standby to Active Wait State Register + union FBANKWAIT_REG FBANKWAIT; // Bank Read Access Wait State Register + union FOTPWAIT_REG FOTPWAIT; // OTP Read Access Wait State Register +}; + +//--------------------------------------------------------------------------- +// System Control External References & Function Declarations: +// +extern volatile struct SYS_CTRL_REGS SysCtrlRegs; +extern volatile struct CSM_REGS CsmRegs; +extern volatile struct CSM_PWL CsmPwl; +extern volatile struct FLASH_REGS FlashRegs; + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_SYS_CTRL_H definition + +//=========================================================================== +// End of file. +//=========================================================================== + diff --git a/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h b/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h new file mode 100644 index 0000000..6f860f6 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h @@ -0,0 +1,83 @@ +// TI File $Revision: /main/1 $ +// Checkin $Date: August 18, 2006 13:52:39 $ +//########################################################################### +// +// FILE: DSP2833x_XIntrupt.h +// +// TITLE: DSP2833x Device External Interrupt Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_XINTRUPT_H +#define DSP2833x_XINTRUPT_H + + +#ifdef __cplusplus +extern "C" { +#endif + +//--------------------------------------------------------------------------- + +struct XINTCR_BITS { + Uint16 ENABLE:1; // 0 enable/disable + Uint16 rsvd1:1; // 1 reserved + Uint16 POLARITY:2; // 3:2 pos/neg, both triggered + Uint16 rsvd2:12; //15:4 reserved +}; + +union XINTCR_REG { + Uint16 all; + struct XINTCR_BITS bit; +}; + +struct XNMICR_BITS { + Uint16 ENABLE:1; // 0 enable/disable + Uint16 SELECT:1; // 1 Timer 1 or XNMI connected to int13 + Uint16 POLARITY:2; // 3:2 pos/neg, or both triggered + Uint16 rsvd2:12; // 15:4 reserved +}; + +union XNMICR_REG { + Uint16 all; + struct XNMICR_BITS bit; +}; + + + + +//--------------------------------------------------------------------------- +// External Interrupt Register File: +// +struct XINTRUPT_REGS { + union XINTCR_REG XINT1CR; + union XINTCR_REG XINT2CR; + union XINTCR_REG XINT3CR; + union XINTCR_REG XINT4CR; + union XINTCR_REG XINT5CR; + union XINTCR_REG XINT6CR; + union XINTCR_REG XINT7CR; + union XNMICR_REG XNMICR; + Uint16 XINT1CTR; + Uint16 XINT2CTR; + Uint16 rsvd[5]; + Uint16 XNMICTR; +}; + +//--------------------------------------------------------------------------- +// External Interrupt References & Function Declarations: +// +extern volatile struct XINTRUPT_REGS XIntruptRegs; + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_XINTF_H definition + +//=========================================================================== +// End of file. +//=========================================================================== + diff --git a/v120/DSP2833x_headers/include/DSP2833x_Xintf.h b/v120/DSP2833x_headers/include/DSP2833x_Xintf.h new file mode 100644 index 0000000..cb68744 --- /dev/null +++ b/v120/DSP2833x_headers/include/DSP2833x_Xintf.h @@ -0,0 +1,120 @@ +// TI File $Revision: /main/3 $ +// Checkin $Date: March 20, 2007 16:34:08 $ +//########################################################################### +// +// FILE: DSP2833x_Xintf.h +// +// TITLE: DSP2833x Device External Interface Register Definitions. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#ifndef DSP2833x_XINTF_H +#define DSP2833x_XINTF_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +// XINTF timing register bit definitions: +struct XTIMING_BITS { // bits description + Uint16 XWRTRAIL:2; // 1:0 Write access trail timing + Uint16 XWRACTIVE:3; // 4:2 Write access active timing + Uint16 XWRLEAD:2; // 6:5 Write access lead timing + Uint16 XRDTRAIL:2; // 8:7 Read access trail timing + Uint16 XRDACTIVE:3; // 11:9 Read access active timing + Uint16 XRDLEAD:2; // 13:12 Read access lead timing + Uint16 USEREADY:1; // 14 Extend access using HW waitstates + Uint16 READYMODE:1; // 15 Ready mode + Uint16 XSIZE:2; // 17:16 XINTF bus width - must be written as 11b + Uint16 rsvd1:4; // 21:18 reserved + Uint16 X2TIMING:1; // 22 Double lead/active/trail timing + Uint16 rsvd3:9; // 31:23 reserved +}; + +union XTIMING_REG { + Uint32 all; + struct XTIMING_BITS bit; +}; + +// XINTF control register bit definitions: +struct XINTCNF2_BITS { // bits description + Uint16 WRBUFF:2; // 1:0 Write buffer depth + Uint16 CLKMODE:1; // 2 Ratio for XCLKOUT with respect to XTIMCLK + Uint16 CLKOFF:1; // 3 Disable XCLKOUT + Uint16 rsvd1:2; // 5:4 reserved + Uint16 WLEVEL:2; // 7:6 Current level of the write buffer + Uint16 rsvd2:1; // 8 reserved + Uint16 HOLD:1; // 9 Hold enable/disable + Uint16 HOLDS:1; // 10 Current state of HOLDn input + Uint16 HOLDAS:1; // 11 Current state of HOLDAn output + Uint16 rsvd3:4; // 15:12 reserved + Uint16 XTIMCLK:3; // 18:16 Ratio for XTIMCLK + Uint16 rsvd4:13; // 31:19 reserved +}; + +union XINTCNF2_REG { + Uint32 all; + struct XINTCNF2_BITS bit; +}; + +// XINTF bank switching register bit definitions: +struct XBANK_BITS { // bits description + Uint16 BANK:3; // 2:0 Zone for which banking is enabled + Uint16 BCYC:3; // 5:3 XTIMCLK cycles to add + Uint16 rsvd:10; // 15:6 reserved +}; + +union XBANK_REG { + Uint16 all; + struct XBANK_BITS bit; +}; + +struct XRESET_BITS { + Uint16 XHARDRESET:1; + Uint16 rsvd1:15; +}; + +union XRESET_REG { + Uint16 all; + struct XBANK_BITS bit; +}; + + +//--------------------------------------------------------------------------- +// XINTF Register File: +// +struct XINTF_REGS { + union XTIMING_REG XTIMING0; + Uint32 rsvd1[5]; + union XTIMING_REG XTIMING6; + union XTIMING_REG XTIMING7; + Uint32 rsvd2[2]; + union XINTCNF2_REG XINTCNF2; + Uint32 rsvd3; + union XBANK_REG XBANK; + Uint16 rsvd4; + Uint16 XREVISION; + Uint16 rsvd5[2]; + union XRESET_REG XRESET; +}; + +//--------------------------------------------------------------------------- +// XINTF External References & Function Declarations: +// +extern volatile struct XINTF_REGS XintfRegs; + + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif // end of DSP2833x_XINTF_H definition + +//=========================================================================== +// No more. +//=========================================================================== diff --git a/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c b/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c new file mode 100644 index 0000000..d7cd332 --- /dev/null +++ b/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c @@ -0,0 +1,444 @@ +// TI File $Revision: /main/4 $ +// Checkin $Date: June 2, 2008 11:12:33 $ +//########################################################################### +// +// FILE: DSP2833x_GlobalVariableDefs.c +// +// TITLE: DSP2833x Global Variables and Data Section Pragmas. +// +//########################################################################### +// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ +// $Release Date: August 1, 2008 $ +//########################################################################### + +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File + +//--------------------------------------------------------------------------- +// Define Global Peripheral Variables: +// +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("AdcRegsFile") +#else +#pragma DATA_SECTION(AdcRegs,"AdcRegsFile"); +#endif +volatile struct ADC_REGS AdcRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("AdcMirrorFile") +#else +#pragma DATA_SECTION(AdcMirror,"AdcMirrorFile"); +#endif +volatile struct ADC_RESULT_MIRROR_REGS AdcMirror; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("CpuTimer0RegsFile") +#else +#pragma DATA_SECTION(CpuTimer0Regs,"CpuTimer0RegsFile"); +#endif +volatile struct CPUTIMER_REGS CpuTimer0Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("CpuTimer1RegsFile") +#else +#pragma DATA_SECTION(CpuTimer1Regs,"CpuTimer1RegsFile"); +#endif +volatile struct CPUTIMER_REGS CpuTimer1Regs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("CpuTimer2RegsFile") +#else +#pragma DATA_SECTION(CpuTimer2Regs,"CpuTimer2RegsFile"); +#endif +volatile struct CPUTIMER_REGS CpuTimer2Regs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("CsmPwlFile") +#else +#pragma DATA_SECTION(CsmPwl,"CsmPwlFile"); +#endif +volatile struct CSM_PWL CsmPwl; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("CsmRegsFile") +#else +#pragma DATA_SECTION(CsmRegs,"CsmRegsFile"); +#endif +volatile struct CSM_REGS CsmRegs; + + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("DevEmuRegsFile") +#else +#pragma DATA_SECTION(DevEmuRegs,"DevEmuRegsFile"); +#endif +volatile struct DEV_EMU_REGS DevEmuRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("DmaRegsFile") +#else +#pragma DATA_SECTION(DmaRegs,"DmaRegsFile"); +#endif +volatile struct DMA_REGS DmaRegs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanaRegsFile") +#else +#pragma DATA_SECTION(ECanaRegs,"ECanaRegsFile"); +#endif +volatile struct ECAN_REGS ECanaRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanaMboxesFile") +#else +#pragma DATA_SECTION(ECanaMboxes,"ECanaMboxesFile"); +#endif +volatile struct ECAN_MBOXES ECanaMboxes; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanaLAMRegsFile") +#else +#pragma DATA_SECTION(ECanaLAMRegs,"ECanaLAMRegsFile"); +#endif +volatile struct LAM_REGS ECanaLAMRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanaMOTSRegsFile") +#else +#pragma DATA_SECTION(ECanaMOTSRegs,"ECanaMOTSRegsFile"); +#endif +volatile struct MOTS_REGS ECanaMOTSRegs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanaMOTORegsFile") +#else +#pragma DATA_SECTION(ECanaMOTORegs,"ECanaMOTORegsFile"); +#endif +volatile struct MOTO_REGS ECanaMOTORegs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanbRegsFile") +#else +#pragma DATA_SECTION(ECanbRegs,"ECanbRegsFile"); +#endif +volatile struct ECAN_REGS ECanbRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanbMboxesFile") +#else +#pragma DATA_SECTION(ECanbMboxes,"ECanbMboxesFile"); +#endif +volatile struct ECAN_MBOXES ECanbMboxes; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanbLAMRegsFile") +#else +#pragma DATA_SECTION(ECanbLAMRegs,"ECanbLAMRegsFile"); +#endif +volatile struct LAM_REGS ECanbLAMRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanbMOTSRegsFile") +#else +#pragma DATA_SECTION(ECanbMOTSRegs,"ECanbMOTSRegsFile"); +#endif +volatile struct MOTS_REGS ECanbMOTSRegs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECanbMOTORegsFile") +#else +#pragma DATA_SECTION(ECanbMOTORegs,"ECanbMOTORegsFile"); +#endif +volatile struct MOTO_REGS ECanbMOTORegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EPwm1RegsFile") +#else +#pragma DATA_SECTION(EPwm1Regs,"EPwm1RegsFile"); +#endif +volatile struct EPWM_REGS EPwm1Regs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EPwm2RegsFile") +#else +#pragma DATA_SECTION(EPwm2Regs,"EPwm2RegsFile"); +#endif +volatile struct EPWM_REGS EPwm2Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EPwm3RegsFile") +#else +#pragma DATA_SECTION(EPwm3Regs,"EPwm3RegsFile"); +#endif +volatile struct EPWM_REGS EPwm3Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EPwm4RegsFile") +#else +#pragma DATA_SECTION(EPwm4Regs,"EPwm4RegsFile"); +#endif +volatile struct EPWM_REGS EPwm4Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EPwm5RegsFile") +#else +#pragma DATA_SECTION(EPwm5Regs,"EPwm5RegsFile"); +#endif +volatile struct EPWM_REGS EPwm5Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EPwm6RegsFile") +#else +#pragma DATA_SECTION(EPwm6Regs,"EPwm6RegsFile"); +#endif +volatile struct EPWM_REGS EPwm6Regs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECap1RegsFile") +#else +#pragma DATA_SECTION(ECap1Regs,"ECap1RegsFile"); +#endif +volatile struct ECAP_REGS ECap1Regs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECap2RegsFile") +#else +#pragma DATA_SECTION(ECap2Regs,"ECap2RegsFile"); +#endif +volatile struct ECAP_REGS ECap2Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECap3RegsFile") +#else +#pragma DATA_SECTION(ECap3Regs,"ECap3RegsFile"); +#endif +volatile struct ECAP_REGS ECap3Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECap4RegsFile") +#else +#pragma DATA_SECTION(ECap4Regs,"ECap4RegsFile"); +#endif +volatile struct ECAP_REGS ECap4Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECap5RegsFile") +#else +#pragma DATA_SECTION(ECap5Regs,"ECap5RegsFile"); +#endif +volatile struct ECAP_REGS ECap5Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ECap6RegsFile") +#else +#pragma DATA_SECTION(ECap6Regs,"ECap6RegsFile"); +#endif +volatile struct ECAP_REGS ECap6Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EQep1RegsFile") +#else +#pragma DATA_SECTION(EQep1Regs,"EQep1RegsFile"); +#endif +volatile struct EQEP_REGS EQep1Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("EQep2RegsFile") +#else +#pragma DATA_SECTION(EQep2Regs,"EQep2RegsFile"); +#endif +volatile struct EQEP_REGS EQep2Regs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("GpioCtrlRegsFile") +#else +#pragma DATA_SECTION(GpioCtrlRegs,"GpioCtrlRegsFile"); +#endif +volatile struct GPIO_CTRL_REGS GpioCtrlRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("GpioDataRegsFile") +#else +#pragma DATA_SECTION(GpioDataRegs,"GpioDataRegsFile"); +#endif +volatile struct GPIO_DATA_REGS GpioDataRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("GpioIntRegsFile") +#else +#pragma DATA_SECTION(GpioIntRegs,"GpioIntRegsFile"); +#endif +volatile struct GPIO_INT_REGS GpioIntRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("I2caRegsFile") +#else +#pragma DATA_SECTION(I2caRegs,"I2caRegsFile"); +#endif +volatile struct I2C_REGS I2caRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("McbspaRegsFile") +#else +#pragma DATA_SECTION(McbspaRegs,"McbspaRegsFile"); +#endif +volatile struct MCBSP_REGS McbspaRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("McbspbRegsFile") +#else +#pragma DATA_SECTION(McbspbRegs,"McbspbRegsFile"); +#endif +volatile struct MCBSP_REGS McbspbRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("PartIdRegsFile") +#else +#pragma DATA_SECTION(PartIdRegs,"PartIdRegsFile"); +#endif +volatile struct PARTID_REGS PartIdRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("PieCtrlRegsFile") +#else +#pragma DATA_SECTION(PieCtrlRegs,"PieCtrlRegsFile"); +#endif +volatile struct PIE_CTRL_REGS PieCtrlRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("PieVectTableFile") +#else +#pragma DATA_SECTION(PieVectTable,"PieVectTableFile"); +#endif +struct PIE_VECT_TABLE PieVectTable; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("SciaRegsFile") +#else +#pragma DATA_SECTION(SciaRegs,"SciaRegsFile"); +#endif +volatile struct SCI_REGS SciaRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ScibRegsFile") +#else +#pragma DATA_SECTION(ScibRegs,"ScibRegsFile"); +#endif +volatile struct SCI_REGS ScibRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("ScicRegsFile") +#else +#pragma DATA_SECTION(ScicRegs,"ScicRegsFile"); +#endif +volatile struct SCI_REGS ScicRegs; + + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("SpiaRegsFile") +#else +#pragma DATA_SECTION(SpiaRegs,"SpiaRegsFile"); +#endif +volatile struct SPI_REGS SpiaRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("SysCtrlRegsFile") +#else +#pragma DATA_SECTION(SysCtrlRegs,"SysCtrlRegsFile"); +#endif +volatile struct SYS_CTRL_REGS SysCtrlRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("FlashRegsFile") +#else +#pragma DATA_SECTION(FlashRegs,"FlashRegsFile"); +#endif +volatile struct FLASH_REGS FlashRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("XIntruptRegsFile") +#else +#pragma DATA_SECTION(XIntruptRegs,"XIntruptRegsFile"); +#endif +volatile struct XINTRUPT_REGS XIntruptRegs; + +//---------------------------------------- +#ifdef __cplusplus +#pragma DATA_SECTION("XintfRegsFile") +#else +#pragma DATA_SECTION(XintfRegs,"XintfRegsFile"); +#endif +volatile struct XINTF_REGS XintfRegs; + + + +//=========================================================================== +// End of file. +//=========================================================================== + + + + + + + + +