From eee4c9027723838723dc7ff689edd81fee1e4310 Mon Sep 17 00:00:00 2001 From: Oleg Date: Thu, 13 Feb 2025 08:49:52 +0300 Subject: [PATCH] Start inititilization process --- 28335_RAM_lnk.cmd | 184 +++ F28335/DSP2833x_ADC_cal.asm | 45 + F28335/DSP2833x_CodeStartBranch.asm | 88 ++ F28335/DSP2833x_CpuTimers.c | 164 +++ F28335/DSP2833x_DMA.c | 1287 +++++++++++++++++ F28335/DSP2833x_DefaultIsr.c | 1993 ++++++++++++++++++++++++++ F28335/DSP2833x_ECan.c | 464 ++++++ F28335/DSP2833x_ECap.c | 273 ++++ F28335/DSP2833x_EPwm.c | 376 +++++ F28335/DSP2833x_EQep.c | 160 +++ F28335/DSP2833x_GlobalVariableDefs.c | 376 +++++ F28335/DSP2833x_Gpio.c | 77 + F28335/DSP2833x_I2C.c | 79 + F28335/DSP2833x_MemCopy.c | 50 + F28335/DSP2833x_PieCtrl.c | 95 ++ F28335/DSP2833x_PieVect.c | 231 +++ F28335/DSP2833x_Sci.c | 193 +++ F28335/DSP2833x_Spi.c | 113 ++ F28335/DSP2833x_SysCtrl.c | 422 ++++++ F28335/DSP2833x_Xintf.c | 303 ++++ F28335/DSP2833x_usDelay.asm | 78 + Protocol/CAN.cpp | 188 +++ Protocol/CAN.h | 25 + cmd/28335_RAM_lnk.cmd | 177 +++ cmd/DSP2833x_Headers_nonBIOS.cmd | 183 +++ cmd/F28335.cmd | 204 +++ main.cpp | 111 ++ targetConfigs/TMS320F28335.ccxml | 42 + targetConfigs/readme.txt | 9 + 29 files changed, 7990 insertions(+) create mode 100644 28335_RAM_lnk.cmd create mode 100644 F28335/DSP2833x_ADC_cal.asm create mode 100644 F28335/DSP2833x_CodeStartBranch.asm create mode 100644 F28335/DSP2833x_CpuTimers.c create mode 100644 F28335/DSP2833x_DMA.c create mode 100644 F28335/DSP2833x_DefaultIsr.c create mode 100644 F28335/DSP2833x_ECan.c create mode 100644 F28335/DSP2833x_ECap.c create mode 100644 F28335/DSP2833x_EPwm.c create mode 100644 F28335/DSP2833x_EQep.c create mode 100644 F28335/DSP2833x_GlobalVariableDefs.c create mode 100644 F28335/DSP2833x_Gpio.c create mode 100644 F28335/DSP2833x_I2C.c create mode 100644 F28335/DSP2833x_MemCopy.c create mode 100644 F28335/DSP2833x_PieCtrl.c create mode 100644 F28335/DSP2833x_PieVect.c create mode 100644 F28335/DSP2833x_Sci.c create mode 100644 F28335/DSP2833x_Spi.c create mode 100644 F28335/DSP2833x_SysCtrl.c create mode 100644 F28335/DSP2833x_Xintf.c create mode 100644 F28335/DSP2833x_usDelay.asm create mode 100644 Protocol/CAN.cpp create mode 100644 Protocol/CAN.h create mode 100644 cmd/28335_RAM_lnk.cmd create mode 100644 cmd/DSP2833x_Headers_nonBIOS.cmd create mode 100644 cmd/F28335.cmd create mode 100644 main.cpp create mode 100644 targetConfigs/TMS320F28335.ccxml create mode 100644 targetConfigs/readme.txt diff --git a/28335_RAM_lnk.cmd b/28335_RAM_lnk.cmd new file mode 100644 index 0000000..0db663f --- /dev/null +++ b/28335_RAM_lnk.cmd @@ -0,0 +1,184 @@ +/* +// TI File $Revision: /main/11 $ +// Checkin $Date: April 15, 2009 09:57:28 $ +//########################################################################### +// +// FILE: 28335_RAM_lnk.cmd +// +// TITLE: Linker Command File For 28335 examples that run out of RAM +// +// This ONLY includes all SARAM blocks on the 28335 device. +// This does not include flash or OTP. +// +// Keep in mind that L0 and L1 are protected by the code +// security module. +// +// What this means is in most cases you will want to move to +// another memory map file which has more memory defined. +// +//########################################################################### +// $TI Release: $ +// $Release Date: $ +//########################################################################### +*/ + +/* ====================================================== +// 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 : + /* BEGIN is used for the "boot to SARAM" bootloader mode */ + + BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */ + RAMM0 : origin = 0x000050, length = 0x0003B0 + RAML0 : origin = 0x008000, length = 0x001000 + RAML1 : origin = 0x009000, length = 0x001000 + RAML2 : origin = 0x00A000, length = 0x001000 + RAML3 : origin = 0x00B000, length = 0x001000 + ZONE7A : origin = 0x200000, length = 0x00FC00 /* XINTF zone 7 - program space */ + CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ + ADC_CAL : origin = 0x380080, length = 0x000009 + RESET : origin = 0x3FFFC0, length = 0x000002 + IQTABLES : origin = 0x3FE000, length = 0x000b50 + IQTABLES2 : origin = 0x3FEB50, length = 0x00008c + FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 + BOOTROM : origin = 0x3FF27C, length = 0x000D44 + + +PAGE 1 : + /* BOOT_RSVD is used by the boot ROM for stack. */ + /* This section is only reserved to keep the BOOT ROM from */ + /* corrupting this area during the debug process */ + + BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */ + RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ + RAML4 : origin = 0x00C000, length = 0x001000 + RAML5 : origin = 0x00D000, length = 0x001000 + RAML6 : origin = 0x00E000, length = 0x001000 + RAML7 : origin = 0x00F000, length = 0x001000 + ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ +} + + +SECTIONS +{ + /* Setup for "boot to SARAM" mode: + The codestart section (found in DSP28_CodeStartBranch.asm) + re-directs execution to the start of user code. */ + codestart : > BEGIN, PAGE = 0 + +#ifdef __TI_COMPILER_VERSION__ + #if __TI_COMPILER_VERSION__ >= 15009000 + .TI.ramfunc : {} > RAML0, PAGE = 0 + #else + ramfuncs : > RAML0, PAGE = 0 + #endif +#endif + + .text : > RAML1, PAGE = 0 + .cinit : > RAML0, PAGE = 0 + .pinit : > RAML0, PAGE = 0 + .switch : > RAML0, PAGE = 0 + + .stack : > RAMM1, PAGE = 1 + .ebss : > RAML4, PAGE = 1 + .econst : > RAML5, PAGE = 1 + .esysmem : > RAMM1, PAGE = 1 + + IQmath : > RAML1, PAGE = 0 + 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 + + DMARAML4 : > RAML4, PAGE = 1 + DMARAML5 : > RAML5, PAGE = 1 + DMARAML6 : > RAML6, PAGE = 1 + DMARAML7 : > RAML7, PAGE = 1 + + ZONE7DATA : > ZONE7B, PAGE = 1 + + .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */ + csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ + csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ + + /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */ + .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD + +} + +/* +//=========================================================================== +// End of file. +//=========================================================================== +*/ \ No newline at end of file diff --git a/F28335/DSP2833x_ADC_cal.asm b/F28335/DSP2833x_ADC_cal.asm new file mode 100644 index 0000000..4866bb6 --- /dev/null +++ b/F28335/DSP2833x_ADC_cal.asm @@ -0,0 +1,45 @@ +;; TI File $Revision: /main/1 $ +;; Checkin $Date: July 30, 2007 10:29:23 $ +;;########################################################################### +;; +;; FILE: ADC_cal.asm +;; +;; TITLE: 2833x Boot Rom ADC Cal routine. +;; +;; Functions: +;; +;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and +;; ADCOFFTRIM registers +;; Notes: +;; +;;########################################################################### +;; $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +;; $Release Date: November 1, 2016 $ +;; $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +;; http://www.ti.com/ ALL RIGHTS RESERVED $ +;;########################################################################### + + .def _ADC_cal + .asg "0x711C", ADCREFSEL_LOC + +;----------------------------------------------- +; _ADC_cal +;----------------------------------------------- +;----------------------------------------------- +; This is the ADC cal routine.This routine is programmed into +; reserved memory by the factory. 0xAAAA and 0xBBBB are place- +; holders for calibration data. +;The actual values programmed by TI are device specific. +; +; This function assumes that the clocks have been +; enabled to the ADC module. +;----------------------------------------------- + + .sect ".adc_cal" + +_ADC_cal + MOVW DP, #ADCREFSEL_LOC >> 6 + MOV @28, #0xAAAA ; actual value may not be 0xAAAA + MOV @29, #0xBBBB ; actual value may not be 0xBBBB + LRETR +;eof ---------- diff --git a/F28335/DSP2833x_CodeStartBranch.asm b/F28335/DSP2833x_CodeStartBranch.asm new file mode 100644 index 0000000..8507428 --- /dev/null +++ b/F28335/DSP2833x_CodeStartBranch.asm @@ -0,0 +1,88 @@ +;// TI File $Revision: /main/1 $ +;// Checkin $Date: August 18, 2006 13:45:55 $ +;//########################################################################### +;// +;// FILE: DSP2833x_CodeStartBranch.asm +;// +;// TITLE: Branch for redirecting code execution after boot. +;// +;// For these examples, code_start is the first code that is executed after +;// exiting the boot ROM code. +;// +;// The codestart section in the linker cmd file is used to physically place +;// this code at the correct memory location. This section should be placed +;// at the location the BOOT ROM will re-direct the code to. For example, +;// for boot to FLASH this code will be located at 0x3f7ff6. +;// +;// In addition, the example DSP2833x projects are setup such that the codegen +;// entry point is also set to the code_start label. This is done by linker +;// option -e in the project build options. When the debugger loads the code, +;// it will automatically set the PC to the "entry point" address indicated by +;// the -e linker option. In this case the debugger is simply assigning the PC, +;// it is not the same as a full reset of the device. +;// +;// The compiler may warn that the entry point for the project is other then +;// _c_init00. _c_init00 is the C environment setup and is run before +;// main() is entered. The code_start code will re-direct the execution +;// to _c_init00 and thus there is no worry and this warning can be ignored. +;// +;//########################################################################### +;// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +;// $Release Date: November 1, 2016 $ +;// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +;// http://www.ti.com/ ALL RIGHTS RESERVED $ +;//########################################################################### + + +*********************************************************************** + +WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0 + + .ref _c_int00 + .global code_start + +*********************************************************************** +* Function: codestart section +* +* Description: Branch to code starting point +*********************************************************************** + + .sect "codestart" + +code_start: + .if WD_DISABLE == 1 + LB wd_disable ;Branch to watchdog disable code + .else + LB _c_int00 ;Branch to start of boot.asm in RTS library + .endif + +;end codestart section + + +*********************************************************************** +* Function: wd_disable +* +* Description: Disables the watchdog timer +*********************************************************************** + .if WD_DISABLE == 1 + + .text +wd_disable: + SETC OBJMODE ;Set OBJMODE for 28x object code + EALLOW ;Enable EALLOW protected register access + MOVZ DP, #7029h>>6 ;Set data page for WDCR register + MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD + EDIS ;Disable EALLOW protected register access + LB _c_int00 ;Branch to start of boot.asm in RTS library + + .endif + +;end wd_disable + + + + .end + +;//=========================================================================== +;// End of file. +;//=========================================================================== diff --git a/F28335/DSP2833x_CpuTimers.c b/F28335/DSP2833x_CpuTimers.c new file mode 100644 index 0000000..fdce733 --- /dev/null +++ b/F28335/DSP2833x_CpuTimers.c @@ -0,0 +1,164 @@ +//########################################################################### +// +// FILE: DSP2833x_CpuTimers.c +// +// TITLE: CPU 32-bit Timers Initialization & Support Functions. +// +// NOTES: CpuTimer2 is reserved for use with DSP BIOS and +// other realtime operating systems. +// +// Do not use these this timer in your application if you ever plan +// on integrating DSP-BIOS or another realtime OS. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // Headerfile Include File +#include "DSP2833x_Examples.h" // Examples Include File + +// +// Defines +// +struct CPUTIMER_VARS CpuTimer0; + +// +// When using DSP BIOS & other RTOS, comment out CPU Timer 2 code. +// +struct CPUTIMER_VARS CpuTimer1; +struct CPUTIMER_VARS CpuTimer2; + +// +// InitCpuTimers - This function initializes all three CPU timers to a known +// state. +// +void +InitCpuTimers(void) +{ + // + // CPU Timer 0 - Initialize address pointers to respective timer registers + // + CpuTimer0.RegsAddr = &CpuTimer0Regs; + + // + // Initialize timer period to maximum + // + CpuTimer0Regs.PRD.all = 0xFFFFFFFF; + + // + // Initialize pre-scale counter to divide by 1 (SYSCLKOUT) + // + CpuTimer0Regs.TPR.all = 0; + CpuTimer0Regs.TPRH.all = 0; + + // + // Make sure timer is stopped + // + CpuTimer0Regs.TCR.bit.TSS = 1; + + // + // Reload all counter register with period value + // + CpuTimer0Regs.TCR.bit.TRB = 1; + + // + // Reset interrupt counters + // + CpuTimer0.InterruptCount = 0; + + // + // CpuTimer2 is reserved for DSP BIOS & other RTOS + // Do not use this timer if you ever plan on integrating + // DSP-BIOS or another realtime OS. + // + + // + // Initialize address pointers to respective timer registers + // + CpuTimer1.RegsAddr = &CpuTimer1Regs; + CpuTimer2.RegsAddr = &CpuTimer2Regs; + + // + // Initialize timer period to maximum + // + CpuTimer1Regs.PRD.all = 0xFFFFFFFF; + CpuTimer2Regs.PRD.all = 0xFFFFFFFF; + + // + // Make sure timers are stopped + // + CpuTimer1Regs.TCR.bit.TSS = 1; + CpuTimer2Regs.TCR.bit.TSS = 1; + + // + // Reload all counter register with period value + // + CpuTimer1Regs.TCR.bit.TRB = 1; + CpuTimer2Regs.TCR.bit.TRB = 1; + + // + // Reset interrupt counters + // + CpuTimer1.InterruptCount = 0; + CpuTimer2.InterruptCount = 0; +} + +// +// ConfigCpuTimer - This function initializes the selected timer to the period +// specified by the "Freq" and "Period" parameters. The "Freq" is entered as +// "MHz" and the period in "uSeconds". The timer is held in the stopped state +// after configuration. +// +void +ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) +{ + Uint32 temp; + + // + // Initialize timer period + // + Timer->CPUFreqInMHz = Freq; + Timer->PeriodInUSec = Period; + temp = (long) (Freq * Period); + Timer->RegsAddr->PRD.all = temp; + + // + // Set pre-scale counter to divide by 1 (SYSCLKOUT) + // + Timer->RegsAddr->TPR.all = 0; + Timer->RegsAddr->TPRH.all = 0; + + // + // Initialize timer control register + // + + // + // 1 = Stop timer, 0 = Start/Restart Timer + // + Timer->RegsAddr->TCR.bit.TSS = 1; + + Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer + Timer->RegsAddr->TCR.bit.SOFT = 1; + Timer->RegsAddr->TCR.bit.FREE = 1; // Timer Free Run + + // + // 0 = Disable/ 1 = Enable Timer Interrupt + // + Timer->RegsAddr->TCR.bit.TIE = 1; + + // + // Reset interrupt counter + // + Timer->InterruptCount = 0; +} + +// +// End of File +// + diff --git a/F28335/DSP2833x_DMA.c b/F28335/DSP2833x_DMA.c new file mode 100644 index 0000000..e35de45 --- /dev/null +++ b/F28335/DSP2833x_DMA.c @@ -0,0 +1,1287 @@ +//########################################################################### +// +// FILE: DSP2833x_DMA.c +// +// TITLE: DSP2833x Device DMA Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // Headerfile Include File +#include "DSP2833x_Examples.h" // Examples Include File + +// +// DMAInitialize - This function initializes the DMA to a known state. +// +void +DMAInitialize(void) +{ + EALLOW; + + // + // Perform a hard reset on DMA + // + DmaRegs.DMACTRL.bit.HARDRESET = 1; + asm (" nop"); // one NOP required after HARDRESET + + // + // Allow DMA to run free on emulation suspend + // + DmaRegs.DEBUGCTRL.bit.FREE = 1; + + EDIS; +} + +// +// DMACH1AddrConfig - +// +void +DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source) +{ + EALLOW; + + // + // Set up SOURCE address + // + + // + // Point to beginning of source buffer + // + DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (Uint32)DMA_Source; + + DmaRegs.CH1.SRC_ADDR_SHADOW = (Uint32)DMA_Source; + + // + // Set up DESTINATION address + // + + // + // Point to beginning of destination buffer + // + DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (Uint32)DMA_Dest; + + DmaRegs.CH1.DST_ADDR_SHADOW = (Uint32)DMA_Dest; + + EDIS; +} + +// +// DMACH1BurstConfig - +// +void +DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) +{ + EALLOW; + + // + // Set up BURST registers: + // + + // + // Number of words(X-1) x-ferred in a burst + // + DmaRegs.CH1.BURST_SIZE.all = bsize; + + // + // Increment source addr between each word x-ferred + // + DmaRegs.CH1.SRC_BURST_STEP = srcbstep; + + // + // Increment dest addr between each word x-ferred + // + DmaRegs.CH1.DST_BURST_STEP = desbstep; + + EDIS; +} + +// +// DMACH1TransferConfig - +// +void +DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) +{ + EALLOW; + + // + // Set up TRANSFER registers: + // + + // + // Number of bursts per transfer, DMA interrupt will occur after + // completed transfer + // + DmaRegs.CH1.TRANSFER_SIZE = tsize; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH1.SRC_TRANSFER_STEP = srctstep; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH1.DST_TRANSFER_STEP = deststep; + + EDIS; +} + +// +// DMACH1WrapConfig - +// +void +DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 + deswstep) +{ + EALLOW; + + // + // Set up WRAP registers + // + DmaRegs.CH1.SRC_WRAP_SIZE = srcwsize; // Wrap source address after N bursts + DmaRegs.CH1.SRC_WRAP_STEP = srcwstep; // Step for source wrap + + // + // Wrap destination address after N bursts + // + DmaRegs.CH1.DST_WRAP_SIZE = deswsize; + + DmaRegs.CH1.DST_WRAP_STEP = deswstep; // Step for destination wrap + + EDIS; +} + +// +// DMACH1ModeConfig - +// +void +DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, + Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, + Uint16 chintmode, Uint16 chinte) +{ + EALLOW; + + // + // Set up MODE Register: + // + + // + // Passed DMA channel as peripheral interrupt source + // + DmaRegs.CH1.MODE.bit.PERINTSEL = persel; + + DmaRegs.CH1.MODE.bit.PERINTE = perinte; // Peripheral interrupt enable + DmaRegs.CH1.MODE.bit.ONESHOT = oneshot; // Oneshot enable + DmaRegs.CH1.MODE.bit.CONTINUOUS = cont; // Continous enable + DmaRegs.CH1.MODE.bit.SYNCE = synce; // Peripheral sync enable/disable + DmaRegs.CH1.MODE.bit.SYNCSEL = syncsel; // Sync effects source or destination + DmaRegs.CH1.MODE.bit.OVRINTE = ovrinte; // Enable/disable the overflow interrupt + DmaRegs.CH1.MODE.bit.DATASIZE = datasize; // 16/32-bit data size transfers + + // + // Generate interrupt to CPU at beginning/end of transfer + // + DmaRegs.CH1.MODE.bit.CHINTMODE = chintmode; + + // + // Channel Interrupt to CPU enable + // + DmaRegs.CH1.MODE.bit.CHINTE = chinte; + + // + // Clear any spurious flags: + // + DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1;// Clear any spurious interrupt flags + DmaRegs.CH1.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags + DmaRegs.CH1.CONTROL.bit.ERRCLR = 1; // Clear any spurious sync error flags + + // + // Initialize PIE vector for CPU interrupt: + // + PieCtrlRegs.PIEIER7.bit.INTx1 = 1; // Enable DMA CH1 interrupt in PIE + + EDIS; +} + +// +// StartDMACH1 - This function starts DMA Channel 1. +// +void +StartDMACH1(void) +{ + EALLOW; + DmaRegs.CH1.CONTROL.bit.RUN = 1; + EDIS; +} + +// +// DMACH2AddrConfig - +// +void +DMACH2AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source) +{ + EALLOW; + + // + // Set up SOURCE address: + // + + // + // Point to beginning of source buffer + // + DmaRegs.CH2.SRC_BEG_ADDR_SHADOW = (Uint32)DMA_Source; + DmaRegs.CH2.SRC_ADDR_SHADOW = (Uint32)DMA_Source; + + // + // Set up DESTINATION address: + // + + // + // Point to beginning of destination buffer + // + DmaRegs.CH2.DST_BEG_ADDR_SHADOW = (Uint32)DMA_Dest; + DmaRegs.CH2.DST_ADDR_SHADOW = (Uint32)DMA_Dest; + + EDIS; +} + +// +// DMACH2BurstConfig - +// +void +DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) +{ + EALLOW; + + // + // Set up BURST registers: + // + + // + // Number of words(X-1) x-ferred in a burst + // + DmaRegs.CH2.BURST_SIZE.all = bsize; + + // + // Increment source addr between each word x-ferred + // + DmaRegs.CH2.SRC_BURST_STEP = srcbstep; + + // + // Increment dest addr between each word x-ferred + // + DmaRegs.CH2.DST_BURST_STEP = desbstep; + + EDIS; +} + +// +// DMACH2TransferConfig - +// +void +DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) +{ + EALLOW; + + // + // Set up TRANSFER registers: + // + + // + // Number of bursts per transfer, DMA interrupt will occur + // after completed transfer + // + DmaRegs.CH2.TRANSFER_SIZE = tsize; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH2.SRC_TRANSFER_STEP = srctstep; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH2.DST_TRANSFER_STEP = deststep; + + EDIS; +} + +// +// DMACH2WrapConfig - +// +void +DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, + int16 deswstep) +{ + EALLOW; + + // + // Set up WRAP registers: + // + + // + // Wrap source address after N bursts + // + DmaRegs.CH2.SRC_WRAP_SIZE = srcwsize; + + // + // Step for source wrap + // + DmaRegs.CH2.SRC_WRAP_STEP = srcwstep; + + // + // Wrap destination address after N bursts + // + DmaRegs.CH2.DST_WRAP_SIZE = deswsize; + + // + // Step for destination wrap + // + DmaRegs.CH2.DST_WRAP_STEP = deswstep; + + EDIS; +} + +// +// DMACH2ModeConfig - +// +void +DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, + Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, + Uint16 chintmode, Uint16 chinte) +{ + EALLOW; + + // + // Set up MODE Register + // + + // + // Passed DMA channel as peripheral interrupt source + // + DmaRegs.CH2.MODE.bit.PERINTSEL = persel; + + // + // Peripheral interrupt enable + // + DmaRegs.CH2.MODE.bit.PERINTE = perinte; + + // + // Oneshot enable + // + DmaRegs.CH2.MODE.bit.ONESHOT = oneshot; + + // + // Continous enable + // + DmaRegs.CH2.MODE.bit.CONTINUOUS = cont; + + // + // Peripheral sync enable/disable + // + DmaRegs.CH2.MODE.bit.SYNCE = synce; + + // + // Sync effects source or destination + // + DmaRegs.CH2.MODE.bit.SYNCSEL = syncsel; + + // + // Enable/disable the overflow interrupt + // + DmaRegs.CH2.MODE.bit.OVRINTE = ovrinte; + + // + // 16-bit/32-bit data size transfers + // + DmaRegs.CH2.MODE.bit.DATASIZE = datasize; + + // + // Generate interrupt to CPU at beginning/end of transfer + // + DmaRegs.CH2.MODE.bit.CHINTMODE = chintmode; + + // + // Channel Interrupt to CPU enable + // + DmaRegs.CH2.MODE.bit.CHINTE = chinte; + + // + // Clear any spurious flags: + // + + // + // Clear any spurious interrupt flags + // + DmaRegs.CH2.CONTROL.bit.PERINTCLR = 1; + + // + // Clear any spurious sync flags + // + DmaRegs.CH2.CONTROL.bit.SYNCCLR = 1; + + // + // Clear any spurious sync error flags + // + DmaRegs.CH2.CONTROL.bit.ERRCLR = 1; + + // + // Initialize PIE vector for CPU interrupt + // + PieCtrlRegs.PIEIER7.bit.INTx2 = 1; // Enable DMA CH2 interrupt in PIE + + EDIS; +} + +// +// StartDMACH2 - This function starts DMA Channel 2. +// +void +StartDMACH2(void) +{ + EALLOW; + DmaRegs.CH2.CONTROL.bit.RUN = 1; + EDIS; +} + +// +// DMACH3AddrConfig - +// +void +DMACH3AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source) +{ + EALLOW; + + // + // Set up SOURCE address: + // + + // + // Point to beginning of source buffer + // + DmaRegs.CH3.SRC_BEG_ADDR_SHADOW = (Uint32)DMA_Source; + DmaRegs.CH3.SRC_ADDR_SHADOW = (Uint32)DMA_Source; + + // + // Set up DESTINATION address: + // + + // + // Point to beginning of destination buffer + // + DmaRegs.CH3.DST_BEG_ADDR_SHADOW = (Uint32)DMA_Dest; + + DmaRegs.CH3.DST_ADDR_SHADOW = (Uint32)DMA_Dest; + + EDIS; +} + +// +// DMACH3BurstConfig - +// +void +DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) +{ + EALLOW; + + // + // Set up BURST registers: + // + + // + // Number of words(X-1) x-ferred in a burst + // + DmaRegs.CH3.BURST_SIZE.all = bsize; + + // + // Increment source addr between each word x-ferred + // + DmaRegs.CH3.SRC_BURST_STEP = srcbstep; + + // + // Increment dest addr between each word x-ferred + // + DmaRegs.CH3.DST_BURST_STEP = desbstep; + + EDIS; +} + +// +// DMACH3TransferConfig - +// +void +DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) +{ + EALLOW; + + // + // Set up TRANSFER registers: + // + + // + // Number of bursts per transfer, DMA interrupt will occur after + // completed transfer + // + DmaRegs.CH3.TRANSFER_SIZE = tsize; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH3.SRC_TRANSFER_STEP = srctstep; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH3.DST_TRANSFER_STEP = deststep; + + EDIS; +} + +// +// DMACH3WrapConfig - +// +void +DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, + int16 deswstep) +{ + EALLOW; + + // + // Set up WRAP registers: + // + DmaRegs.CH3.SRC_WRAP_SIZE = srcwsize; // Wrap source address after N bursts + DmaRegs.CH3.SRC_WRAP_STEP = srcwstep; // Step for source wrap + + // + // Wrap destination address after N bursts + // + DmaRegs.CH3.DST_WRAP_SIZE = deswsize; + + // + // Step for destination wrap + // + DmaRegs.CH3.DST_WRAP_STEP = deswstep; + + EDIS; +} + +// +// DMACH3ModeConfig - +// +void +DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, + Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, + Uint16 chintmode, Uint16 chinte) +{ + EALLOW; + + // + // Set up MODE Register: + // + + // + // Passed DMA channel as peripheral interrupt source + // + DmaRegs.CH3.MODE.bit.PERINTSEL = persel; + + // + // Peripheral interrupt enable + // + DmaRegs.CH3.MODE.bit.PERINTE = perinte; + + DmaRegs.CH3.MODE.bit.ONESHOT = oneshot; // Oneshot enable + DmaRegs.CH3.MODE.bit.CONTINUOUS = cont; // Continous enable + DmaRegs.CH3.MODE.bit.SYNCE = synce; // Peripheral sync enable/disable + + // + // Sync effects source or destination + // + DmaRegs.CH3.MODE.bit.SYNCSEL = syncsel; + + // + // Enable/disable the overflow interrupt + // + DmaRegs.CH3.MODE.bit.OVRINTE = ovrinte; + + // + // 16-bit/32-bit data size transfers + // + DmaRegs.CH3.MODE.bit.DATASIZE = datasize; + + // + // Generate interrupt to CPU at beginning/end of transfer + // + DmaRegs.CH3.MODE.bit.CHINTMODE = chintmode; + + // + // Channel Interrupt to CPU enable + // + DmaRegs.CH3.MODE.bit.CHINTE = chinte; + + // + // Clear any spurious flags: + // + + // + // Clear any spurious interrupt flags + // + DmaRegs.CH3.CONTROL.bit.PERINTCLR = 1; + + DmaRegs.CH3.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags + + // + // Clear any spurious sync error flags + // + DmaRegs.CH3.CONTROL.bit.ERRCLR = 1; + + // + // Initialize PIE vector for CPU interrupt: + // + PieCtrlRegs.PIEIER7.bit.INTx3 = 1; // Enable DMA CH3 interrupt in PIE + + EDIS; +} + +// +// StartDMACH3 - This function starts DMA Channel 3. +// +void +StartDMACH3(void) +{ + EALLOW; + DmaRegs.CH3.CONTROL.bit.RUN = 1; + EDIS; +} + +// +// DMACH4AddrConfig - +// +void +DMACH4AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source) +{ + EALLOW; + + // + // Set up SOURCE address: + // + + // + // Point to beginning of source buffer + // + DmaRegs.CH4.SRC_BEG_ADDR_SHADOW = (Uint32)DMA_Source; + + DmaRegs.CH4.SRC_ADDR_SHADOW = (Uint32)DMA_Source; + + // + // Set up DESTINATION address: + // + + // + // Point to beginning of destination buffer + // + DmaRegs.CH4.DST_BEG_ADDR_SHADOW = (Uint32)DMA_Dest; + + DmaRegs.CH4.DST_ADDR_SHADOW = (Uint32)DMA_Dest; + + EDIS; +} + +// +// DMACH4BurstConfig - +// +void +DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) +{ + EALLOW; + + // + // Set up BURST registers: + // + + // + // Number of words(X-1) x-ferred in a burst + // + DmaRegs.CH4.BURST_SIZE.all = bsize; + + // + // Increment source addr between each word x-ferred + // + DmaRegs.CH4.SRC_BURST_STEP = srcbstep; + + // + // Increment dest addr between each word x-ferred + // + DmaRegs.CH4.DST_BURST_STEP = desbstep; + + EDIS; +} + +// +// DMACH4TransferConfig - +// +void +DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) +{ + EALLOW; + + // + // Set up TRANSFER registers: + // + + // + // Number of bursts per transfer, DMA interrupt will occur after completed + // transfer + // + DmaRegs.CH4.TRANSFER_SIZE = tsize; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH4.SRC_TRANSFER_STEP = srctstep; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH4.DST_TRANSFER_STEP = deststep; + + EDIS; +} + +// +// DMACH4WrapConfig - +// +void +DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, + int16 deswstep) +{ + EALLOW; + + // + // Set up WRAP registers: + // + DmaRegs.CH4.SRC_WRAP_SIZE = srcwsize;// Wrap source address after N bursts + DmaRegs.CH4.SRC_WRAP_STEP = srcwstep;// Step for source wrap + + // + // Wrap destination address after N bursts + // + DmaRegs.CH4.DST_WRAP_SIZE = deswsize; + + DmaRegs.CH4.DST_WRAP_STEP = deswstep; // Step for destination wrap + + EDIS; +} + +// +// DMACH4ModeConfig - +// +void +DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, + Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, + Uint16 chintmode, Uint16 chinte) +{ + EALLOW; + + // + // Set up MODE Register: + // + + // + // Passed DMA channel as peripheral interrupt source + // + DmaRegs.CH4.MODE.bit.PERINTSEL = persel; + + // + // Peripheral interrupt enable + // + DmaRegs.CH4.MODE.bit.PERINTE = perinte; + + DmaRegs.CH4.MODE.bit.ONESHOT = oneshot; // Oneshot enable + DmaRegs.CH4.MODE.bit.CONTINUOUS = cont; // Continous enable + DmaRegs.CH4.MODE.bit.SYNCE = synce; // Peripheral sync enable/disable + + // + // Sync effects source or destination + // + DmaRegs.CH4.MODE.bit.SYNCSEL = syncsel; + + // + // Enable/disable the overflow interrupt + // + DmaRegs.CH4.MODE.bit.OVRINTE = ovrinte; + + // + // 16-bit/32-bit data size transfers + // + DmaRegs.CH4.MODE.bit.DATASIZE = datasize; + + // + // Generate interrupt to CPU at beginning/end of transfer + // + DmaRegs.CH4.MODE.bit.CHINTMODE = chintmode; + + // + // Channel Interrupt to CPU enable + // + DmaRegs.CH4.MODE.bit.CHINTE = chinte; + + // + // Clear any spurious flags: + // + + // + // Clear any spurious interrupt flags + // + DmaRegs.CH4.CONTROL.bit.PERINTCLR = 1; + + DmaRegs.CH4.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags + + // + // Clear any spurious sync error flags + // + DmaRegs.CH4.CONTROL.bit.ERRCLR = 1; + + // + // Initialize PIE vector for CPU interrupt: + // + PieCtrlRegs.PIEIER7.bit.INTx4 = 1; // Enable DMA CH4 interrupt in PIE + + EDIS; +} + +// +// StartDMACH4 - This function starts DMA Channel 4. +// +void +StartDMACH4(void) +{ + EALLOW; + DmaRegs.CH4.CONTROL.bit.RUN = 1; + EDIS; +} + +// +// DMACH5AddrConfig - +// +void +DMACH5AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source) +{ + EALLOW; + + // + // Set up SOURCE address: + // + + // + // Point to beginning of source buffer + // + DmaRegs.CH5.SRC_BEG_ADDR_SHADOW = (Uint32)DMA_Source; + + DmaRegs.CH5.SRC_ADDR_SHADOW = (Uint32)DMA_Source; + + // + // Set up DESTINATION address: + // + + // + // Point to beginning of destination buffer + // + DmaRegs.CH5.DST_BEG_ADDR_SHADOW = (Uint32)DMA_Dest; + + DmaRegs.CH5.DST_ADDR_SHADOW = (Uint32)DMA_Dest; + + EDIS; +} + +// +// DMACH5BurstConfig - +// +void +DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) +{ + EALLOW; + + // + // Set up BURST registers: + // + + // + // Number of words(X-1) x-ferred in a burst + // + DmaRegs.CH5.BURST_SIZE.all = bsize; + + // + // Increment source addr between each word x-ferred + // + DmaRegs.CH5.SRC_BURST_STEP = srcbstep; + + // + // Increment dest addr between each word x-ferred + // + DmaRegs.CH5.DST_BURST_STEP = desbstep; + + EDIS; +} + +// +// DMACH5TransferConfig - +// +void +DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) +{ + EALLOW; + + // + // Set up TRANSFER registers: + // + + // + // Number of bursts per transfer, DMA interrupt will occur after completed + // transfer + // + DmaRegs.CH5.TRANSFER_SIZE = tsize; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH5.SRC_TRANSFER_STEP = srctstep; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH5.DST_TRANSFER_STEP = deststep; + + EDIS; +} + +// +// DMACH5WrapConfig - +// +void +DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, + int16 deswstep) +{ + EALLOW; + + // + // Set up WRAP registers: + // + DmaRegs.CH5.SRC_WRAP_SIZE = srcwsize;// Wrap source address after N bursts + DmaRegs.CH5.SRC_WRAP_STEP = srcwstep;// Step for source wrap + + // + // Wrap destination address after N bursts + // + DmaRegs.CH5.DST_WRAP_SIZE = deswsize; + + DmaRegs.CH5.DST_WRAP_STEP = deswstep; // Step for destination wrap + + EDIS; +} + +// +// DMACH5ModeConfig - +// +void +DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, + Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, + Uint16 chintmode, Uint16 chinte) +{ + EALLOW; + + // + // Set up MODE Register: + // + + // + // Passed DMA channel as peripheral interrupt source + // + DmaRegs.CH5.MODE.bit.PERINTSEL = persel; + + // + // Peripheral interrupt enable + // + DmaRegs.CH5.MODE.bit.PERINTE = perinte; + + DmaRegs.CH5.MODE.bit.ONESHOT = oneshot; // Oneshot enable + DmaRegs.CH5.MODE.bit.CONTINUOUS = cont; // Continous enable + DmaRegs.CH5.MODE.bit.SYNCE = synce; // Peripheral sync enable/disable + + // + // Sync effects source or destination + // + DmaRegs.CH5.MODE.bit.SYNCSEL = syncsel; + + // + // Enable/disable the overflow interrupt + // + DmaRegs.CH5.MODE.bit.OVRINTE = ovrinte; + + // + // 16-bit/32-bit data size transfers + // + DmaRegs.CH5.MODE.bit.DATASIZE = datasize; + + // + // Generate interrupt to CPU at beginning/end of transfer + // + DmaRegs.CH5.MODE.bit.CHINTMODE = chintmode; + + // + // Channel Interrupt to CPU enable + // + DmaRegs.CH5.MODE.bit.CHINTE = chinte; + + // + // Clear any spurious flags: + // + + // + // Clear any spurious interrupt flags + // + DmaRegs.CH5.CONTROL.bit.PERINTCLR = 1; + + DmaRegs.CH5.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags + + // + // Clear any spurious sync error flags + // + DmaRegs.CH5.CONTROL.bit.ERRCLR = 1; + + // + // Initialize PIE vector for CPU interrupt: + // + PieCtrlRegs.PIEIER7.bit.INTx5 = 1; // Enable DMA CH5 interrupt in PIE + + EDIS; +} + +// +// StartDMACH5 - This function starts DMA Channel 5. +// +void +StartDMACH5(void) +{ + EALLOW; + DmaRegs.CH5.CONTROL.bit.RUN = 1; + EDIS; +} + +// +// DMACH6AddrConfig - +// +void +DMACH6AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source) +{ + EALLOW; + + // + // Set up SOURCE address: + // + + // + // Point to beginning of source buffer + // + DmaRegs.CH6.SRC_BEG_ADDR_SHADOW = (Uint32)DMA_Source; + + DmaRegs.CH6.SRC_ADDR_SHADOW = (Uint32)DMA_Source; + + // + // Set up DESTINATION address: + // + + // + // Point to beginning of destination buffer + // + DmaRegs.CH6.DST_BEG_ADDR_SHADOW = (Uint32)DMA_Dest; + + DmaRegs.CH6.DST_ADDR_SHADOW = (Uint32)DMA_Dest; + + EDIS; +} + +// +// DMACH6BurstConfig - +// +void +DMACH6BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep) +{ + EALLOW; + + // + // Set up BURST registers: + // + + // + // Number of words(X-1) x-ferred in a burst + // + DmaRegs.CH6.BURST_SIZE.all = bsize; + + // + // Increment source addr between each word x-ferred + // + DmaRegs.CH6.SRC_BURST_STEP = srcbstep; + + // + // Increment dest addr between each word x-ferred + // + DmaRegs.CH6.DST_BURST_STEP = desbstep; + + EDIS; +} + +// +// DMACH6TransferConfig - +// +void +DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep) +{ + EALLOW; + + // + // Set up TRANSFER registers: + // + + // + // Number of bursts per transfer, DMA interrupt will occur after completed + // transfer + // + DmaRegs.CH6.TRANSFER_SIZE = tsize; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH6.SRC_TRANSFER_STEP = srctstep; + + // + // TRANSFER_STEP is ignored when WRAP occurs + // + DmaRegs.CH6.DST_TRANSFER_STEP = deststep; + + EDIS; +} + +// +// DMACH6WrapConfig - +// +void +DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, + int16 deswstep) +{ + EALLOW; + + // + // Set up WRAP registers: + // + DmaRegs.CH6.SRC_WRAP_SIZE = srcwsize;// Wrap source address after N bursts + DmaRegs.CH6.SRC_WRAP_STEP = srcwstep;// Step for source wrap + + // + // Wrap destination address after N bursts + // + DmaRegs.CH6.DST_WRAP_SIZE = deswsize; + + DmaRegs.CH6.DST_WRAP_STEP = deswstep; // Step for destination wrap + + EDIS; +} + +// +// DMACH6ModeConfig - +// +void +DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, + Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, + Uint16 chintmode, Uint16 chinte) +{ + EALLOW; + + // + // Set up MODE Register: + // + + // + // Passed DMA channel as peripheral interrupt source + // + DmaRegs.CH6.MODE.bit.PERINTSEL = persel; + + // + // Peripheral interrupt enable + // + DmaRegs.CH6.MODE.bit.PERINTE = perinte; + + DmaRegs.CH6.MODE.bit.ONESHOT = oneshot; // Oneshot enable + DmaRegs.CH6.MODE.bit.CONTINUOUS = cont; // Continous enable + DmaRegs.CH6.MODE.bit.SYNCE = synce; // Peripheral sync enable/disable + + // + // Sync effects source or destination + // + DmaRegs.CH6.MODE.bit.SYNCSEL = syncsel; + + // + // Enable/disable the overflow interrupt + // + DmaRegs.CH6.MODE.bit.OVRINTE = ovrinte; + + // + // 16-bit/32-bit data size transfers + // + DmaRegs.CH6.MODE.bit.DATASIZE = datasize; + + // + // Generate interrupt to CPU at beginning/end of transfer + // + DmaRegs.CH6.MODE.bit.CHINTMODE = chintmode; + + // + // Channel Interrupt to CPU enable + // + DmaRegs.CH6.MODE.bit.CHINTE = chinte; + + // + // Clear any spurious flags: + // + + // + // Clear any spurious interrupt flags + // + DmaRegs.CH6.CONTROL.bit.PERINTCLR = 1; + + DmaRegs.CH6.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags + + // + // Clear any spurious sync error flags + // + DmaRegs.CH6.CONTROL.bit.ERRCLR = 1; + + // + // Initialize PIE vector for CPU interrupt: + // + PieCtrlRegs.PIEIER7.bit.INTx6 = 1; // Enable DMA CH6 interrupt in PIE + + EDIS; +} + +// +// StartDMACH6 - This function starts DMA Channel 6. +// +void +StartDMACH6(void) +{ + EALLOW; + DmaRegs.CH6.CONTROL.bit.RUN = 1; + EDIS; +} + +// +// End of File +// + diff --git a/F28335/DSP2833x_DefaultIsr.c b/F28335/DSP2833x_DefaultIsr.c new file mode 100644 index 0000000..0842ffc --- /dev/null +++ b/F28335/DSP2833x_DefaultIsr.c @@ -0,0 +1,1993 @@ +//########################################################################### +// +// FILE: DSP2833x_DefaultIsr.c +// +// TITLE: DSP2833x Device Default Interrupt Service Routines. +// +// This file contains shell ISR routines for the 2833x PIE vector table. +// Typically these shell ISR routines can be used to populate the entire PIE +// vector table during device debug. In this manner if an interrupt is taken +// during firmware development, there will always be an ISR to catch it. +// +// As development progresses, these ISR routines can be eliminated and replaced +// with the user's own ISR routines for each interrupt. Since these shell ISRs +// include infinite loops they will typically not be included as-is in the final +// production firmware. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// INT13_ISR - 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. +// +interrupt void +INT13_ISR(void) // INT13 or CPU-Timer1 +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT14_ISR - Note CPU-Timer2 is reserved for TI use. +// +interrupt void +INT14_ISR(void) // CPU-Timer2 +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// DATALOG_ISR - Datalogging interrupt +// +interrupt void +DATALOG_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// RTOSINT_ISR - RTOS interrupt +// +interrupt void +RTOSINT_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EMUINT_ISR - Emulation interrupt +// +interrupt void +EMUINT_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// NMI_ISR - Non-maskable interrupt +// +interrupt void +NMI_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ILLEGAL_ISR - Illegal operation TRAP +// +interrupt void +ILLEGAL_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER1_ISR - User Defined trap 1 +// +interrupt void +USER1_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER2_ISR - User Defined trap 2 +// +interrupt void +USER2_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER3_ISR - User Defined trap 3 +// +interrupt void +USER3_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER4_ISR - User Defined trap 4 +// +interrupt void +USER4_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER5_ISR - User Defined trap 5 +// +interrupt void +USER5_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER6_ISR - User Defined trap 6 +// +interrupt void +USER6_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER7_ISR - User Defined trap 7 +// +interrupt void +USER7_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER8_ISR - User Defined trap 8 +// +interrupt void +USER8_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER9_ISR - User Defined trap 9 +// +interrupt void +USER9_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER10_ISR - User Defined trap 10 +// +interrupt void +USER10_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER11_ISR - User Defined trap 11 +// +interrupt void +USER11_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// USER12_ISR - User Defined trap 12 +// +interrupt void +USER12_ISR(void) +{ + // + // 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 +// + +// +// SEQ1INT_ISR - INT1.1 +// +interrupt void +SEQ1INT_ISR(void) //SEQ1 ADC +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// SEQ2INT_ISR - INT1.2 +// +interrupt void +SEQ2INT_ISR(void) //SEQ2 ADC +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this interrupt + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + // + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + + asm(" ESTOP0"); + for(;;); +} + +// +// INT1.3 - Reserved +// + +// +// XINT1_ISR - INT1.4 +// +interrupt void +XINT1_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// XINT2_ISR - INT1.5 +// +interrupt void +XINT2_ISR(void) +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ADCINT_ISR - INT1.6 +// +interrupt void +ADCINT_ISR(void) // ADC +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// TINT0_ISR - INT1.7 +// +interrupt void +TINT0_ISR(void) // CPU-Timer 0 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// WAKEINT_ISR - INT1.8 +// +interrupt void +WAKEINT_ISR(void) // WD, LOW Power +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// PIE Group 2 - MUXed into CPU INT2 +// + +// +// EPWM1_TZINT_ISR - INT2.1 +// +interrupt void +EPWM1_TZINT_ISR(void) // EPWM-1 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM2_TZINT_ISR - INT2.2 +// +interrupt void +EPWM2_TZINT_ISR(void) // EPWM-2 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM3_TZINT_ISR - INT2.3 +// +interrupt void +EPWM3_TZINT_ISR(void) // EPWM-3 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge + // this interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM4_TZINT_ISR - INT2.4 +// +interrupt void +EPWM4_TZINT_ISR(void) // EPWM-4 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM5_TZINT_ISR - INT2.5 +// +interrupt void +EPWM5_TZINT_ISR(void) // EPWM-5 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM6_TZINT_ISR - INT2.6 +// +interrupt void +EPWM6_TZINT_ISR(void) // EPWM-6 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT2.7 - Reserved +// + +// +// INT2.8 - Reserved +// + +// +// PIE Group 3 - MUXed into CPU INT3 +// + +// +// EPWM1_INT_ISR - INT 3.1 +// +interrupt void +EPWM1_INT_ISR(void) // EPWM-1 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM2_INT_ISR - INT3.2 +// +interrupt void +EPWM2_INT_ISR(void) // EPWM-2 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM3_INT_ISR - INT3.3 +// +interrupt void +EPWM3_INT_ISR(void) // EPWM-3 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM4_INT_ISR - INT3.4 +// +interrupt void +EPWM4_INT_ISR(void) // EPWM-4 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM5_INT_ISR - INT3.5 +// +interrupt void +EPWM5_INT_ISR(void) // EPWM-5 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EPWM6_INT_ISR - INT3.6 +// +interrupt void +EPWM6_INT_ISR(void) // EPWM-6 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT3.7 - Reserved +// + +// +// INT3.8 - Reserved +// + +// +// PIE Group 4 - MUXed into CPU INT4 +// + +// +// ECAP1_INT_ISR - INT 4.1 +// +interrupt void +ECAP1_INT_ISR(void) // ECAP-1 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAP2_INT_ISR - INT4.2 +// +interrupt void +ECAP2_INT_ISR(void) // ECAP-2 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAP3_INT_ISR - INT4.3 +// +interrupt void +ECAP3_INT_ISR(void) // ECAP-3 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAP4_INT_ISR - INT4.4 +// +interrupt void +ECAP4_INT_ISR(void) // ECAP-4 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAP5_INT_ISR - INT4.5 +// +interrupt void +ECAP5_INT_ISR(void) // ECAP-5 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAP6_INT_ISR - INT4.6 +// +interrupt void +ECAP6_INT_ISR(void) // ECAP-6 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT4.7 - Reserved +// + +// +// INT4.8 - Reserved +// + +// +// PIE Group 5 - MUXed into CPU INT5 +// + +// +// EQEP1_INT_ISR - INT 5.1 +// +interrupt void +EQEP1_INT_ISR(void) // EQEP-1 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// EQEP2_INT_ISR - INT5.2 +// +interrupt void +EQEP2_INT_ISR(void) // EQEP-2 +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT5.3 - Reserved +// + +// +// INT5.4 - Reserved +// + +// +// INT5.5 - Reserved +// + +// +// INT5.6 - Reserved +// + +// +// INT5.7 - Reserved +// + +// +// INT5.8 - Reserved +// + +// +// PIE Group 6 - MUXed into CPU INT6 +// + +// +// SPIRXINTA_ISR - INT6.1 +// +interrupt void +SPIRXINTA_ISR(void) // SPI-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP6; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// SPITXINTA_ISR - INT6.2 +// +interrupt void +SPITXINTA_ISR(void) // SPI-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP6; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// MRINTB_ISR - INT6.3 +// +interrupt void +MRINTB_ISR(void) // McBSP-B +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP6; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// MXINTB_ISR - INT6.4 +// +interrupt void +MXINTB_ISR(void) // McBSP-B +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP6; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// MRINTA_ISR - INT6.5 +// +interrupt void +MRINTA_ISR(void) // McBSP-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP6; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// MXINTA_ISR - INT6.6 +// +interrupt void +MXINTA_ISR(void) // McBSP-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP6; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT6.7 - Reserved +// + +// +// INT6.8 - Reserved +// + +// +// PIE Group 7 - MUXed into CPU INT7 +// + +// +// DINTCH1_ISR - INT7.1 +// +interrupt void +DINTCH1_ISR(void) // DMA +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// DINTCH2_ISR - INT7.2 +// +interrupt void +DINTCH2_ISR(void) // DMA +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// DINTCH3_ISR - INT7.3 +// +interrupt void +DINTCH3_ISR(void) // DMA +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// DINTCH4_ISR - INT7.4 +// +interrupt void +DINTCH4_ISR(void) // DMA +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// DINTCH5_ISR - INT7.5 +// +interrupt void +DINTCH5_ISR(void) // DMA +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// DINTCH6_ISR - INT7.6 +// +interrupt void +DINTCH6_ISR(void) // DMA +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT7.7 - Reserved +// + +// +// INT7.8 - Reserved +// + +// +// PIE Group 8 - MUXed into CPU INT8 +// + +// +// I2CINT1A_ISR - INT8.1 +// +interrupt void +I2CINT1A_ISR(void) // I2C-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP8; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// I2CINT2A_ISR - INT8.2 +// +interrupt void +I2CINT2A_ISR(void) // I2C-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP8; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT8.3 - Reserved +// + +// +// INT8.4 - Reserved +// + +// +// SCIRXINTC_ISR - INT8.5 +// +interrupt void +SCIRXINTC_ISR(void) // SCI-C +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP8; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// SCITXINTC_ISR - INT8.6 +// +interrupt void +SCITXINTC_ISR(void) // SCI-C +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP8; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT8.7 - Reserved +// + +// +// INT8.8 - Reserved +// + +// +// PIE Group 9 - MUXed into CPU INT9 +// + +// +// SCIRXINTA_ISR - INT9.1 +// +interrupt void +SCIRXINTA_ISR(void) // SCI-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// SCITXINTA_ISR - INT9.2 +// +interrupt void +SCITXINTA_ISR(void) // SCI-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// SCIRXINTB_ISR - INT9.3 +// +interrupt void +SCIRXINTB_ISR(void) // SCI-B +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// SCITXINTB_ISR - INT9.4 +// +interrupt void +SCITXINTB_ISR(void) // SCI-B +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAN0INTA_ISR - INT9.5 +// +interrupt void +ECAN0INTA_ISR(void) // eCAN-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAN1INTA_ISR - INT9.6 +// +interrupt void +ECAN1INTA_ISR(void) // eCAN-A +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAN0INTB_ISR - INT9.7 +// +interrupt void +ECAN0INTB_ISR(void) // eCAN-B +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// ECAN1INTB_ISR - INT9.8 +// +interrupt void +ECAN1INTB_ISR(void) // eCAN-B +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// PIE Group 10 - MUXed into CPU INT10 +// + +// +// INT10.1 - Reserved +// + +// +// INT10.2 - Reserved +// + +// +// INT10.3 - Reserved +// + +// +// INT10.4 - Reserved +// + +// +// INT10.5 - Reserved +// + +// +// INT10.6 - Reserved +// + +// +// INT10.7 - Reserved +// + +// +// INT10.8 - Reserved +// + +// +// PIE Group 11 - MUXed into CPU INT11 +// + +// +// INT11.1 - Reserved +// + +// +// INT11.2 - Reserved +// + +// +// INT11.3 - Reserved +// + +// +// INT11.4 - Reserved +// + +// +// INT11.5 - Reserved +// + +// +// INT11.6 - Reserved +// + +// +// INT11.7 - Reserved +// + +// +// INT11.8 - Reserved +// + +// +// PIE Group 12 - MUXed into CPU INT12 +// + +// +// XINT3_ISR - INT12.1 +// +interrupt void +XINT3_ISR(void) // External Interrupt +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// XINT4_ISR - INT12.2 +// +interrupt void +XINT4_ISR(void) // External Interrupt +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// XINT5_ISR - INT12.3 +// +interrupt void +XINT5_ISR(void) // External Interrupt +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// XINT6_ISR - INT12.4 +// +interrupt void +XINT6_ISR(void) // External Interrupt +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// XINT7_ISR - INT12.5 +// +interrupt void +XINT7_ISR(void) // External Interrupt +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// INT12.6 - Reserved +// + +// +// LVF_ISR - INT12.7 +// +interrupt void +LVF_ISR(void) // Latched overflow +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// LUF_ISR - INT12.8 +// +interrupt void +LUF_ISR(void) // Latched underflow +{ + // + // Insert ISR Code here + // + + // + // To receive more interrupts from this PIE group, acknowledge this + // interrupt + // + // PieCtrlRegs.PIEACK.all = PIEACK_GROUP12; + + // + // Next two lines for debug only to halt the processor here + // Remove after inserting ISR Code + // + asm (" ESTOP0"); + for(;;); +} + +// +// Catch All Default ISRs: +// + +// +// PIE_RESERVED - Reserved space. For test. +// +interrupt void +PIE_RESERVED(void) +{ + asm (" ESTOP0"); + for(;;); +} + +// +// rsvd_ISR - For test +// +interrupt void +rsvd_ISR(void) +{ + asm (" ESTOP0"); + for(;;); +} + +// +// End of file +// + diff --git a/F28335/DSP2833x_ECan.c b/F28335/DSP2833x_ECan.c new file mode 100644 index 0000000..35971c4 --- /dev/null +++ b/F28335/DSP2833x_ECan.c @@ -0,0 +1,464 @@ +//########################################################################### +// +// FILE: DSP2833x_ECan.c +// +// TITLE: DSP2833x Enhanced CAN Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitECan - This function initializes the eCAN module to a known state. +// +void +InitECan(void) +{ + InitECana(); +#if DSP28_ECANB + InitECanb(); +#endif // if DSP28_ECANB +} + +// +// InitECana - Initialize eCAN-A module +// +void +InitECana(void) +{ + // + // Create a shadow register structure for the CAN control registers. This + // is needed, since only 32-bit access is allowed to these registers. + // 16-bit access to these registers could potentially corrupt the register + // contents or return false data. This is especially true while writing + // to/reading from a bit (or group of bits) among bits 16 - 31 + // + struct ECAN_REGS ECanaShadow; + + EALLOW; // EALLOW enables access to protected bits + + // + // Configure eCAN RX and TX pins for CAN operation using eCAN regs + // + ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; + ECanaShadow.CANTIOC.bit.TXFUNC = 1; + ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; + + ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all; + ECanaShadow.CANRIOC.bit.RXFUNC = 1; + ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all; + + // + // Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31) + // HECC mode also enables time-stamping feature + // + ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; + ECanaShadow.CANMC.bit.SCB = 1; + ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; + + // + // Initialize all bits of 'Master Control Field' to zero + // Some bits of MSGCTRL register come up in an unknown state. For proper + // operation, all bits (including reserved bits) of MSGCTRL must be + // initialized to zero + // + ECanaMboxes.MBOX0.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX3.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX6.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX7.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX9.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX10.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX11.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX12.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX13.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX14.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX15.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX16.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX17.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX18.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX19.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX20.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX21.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX22.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX23.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX24.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX25.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX26.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX27.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX28.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX29.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX30.MSGCTRL.all = 0x00000000; + ECanaMboxes.MBOX31.MSGCTRL.all = 0x00000000; + + // + // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again + // as a matter of precaution. + // + ECanaRegs.CANTA.all = 0xFFFFFFFF; // Clear all TAn bits + + ECanaRegs.CANRMP.all = 0xFFFFFFFF; // Clear all RMPn bits + + ECanaRegs.CANGIF0.all = 0xFFFFFFFF; // Clear all interrupt flag bits + ECanaRegs.CANGIF1.all = 0xFFFFFFFF; + + // + // Configure bit timing parameters for eCANA + // + ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; + ECanaShadow.CANMC.bit.CCR = 1 ; // Set CCR = 1 + ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; + + ECanaShadow.CANES.all = ECanaRegs.CANES.all; + + do + { + ECanaShadow.CANES.all = ECanaRegs.CANES.all; + } while(ECanaShadow.CANES.bit.CCE != 1 ); // Wait for CCE bit to be set + + ECanaShadow.CANBTC.all = 0; + + // + // CPU_FRQ_150MHz is defined in DSP2833x_Examples.h + // + #if (CPU_FRQ_150MHZ) + // + // The following block for all 150 MHz SYSCLKOUT + // (75 MHz CAN clock) - default. Bit rate = 1 Mbps See Note at End of File + // + ECanaShadow.CANBTC.bit.BRPREG = 4; + ECanaShadow.CANBTC.bit.TSEG2REG = 2; + ECanaShadow.CANBTC.bit.TSEG1REG = 10; + #endif + + // + // CPU_FRQ_100MHz is defined in DSP2833x_Examples.h + // + #if (CPU_FRQ_100MHZ) + // + // The following block is only for 100 MHz SYSCLKOUT (50 MHz CAN clock). + // Bit rate = 1 Mbps See Note at End of File + // + ECanaShadow.CANBTC.bit.BRPREG = 4; + ECanaShadow.CANBTC.bit.TSEG2REG = 1; + ECanaShadow.CANBTC.bit.TSEG1REG = 6; + #endif + + ECanaShadow.CANBTC.bit.SAM = 1; + ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; + + ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; + ECanaShadow.CANMC.bit.CCR = 0 ; // Set CCR = 0 + ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; + + ECanaShadow.CANES.all = ECanaRegs.CANES.all; + + do + { + ECanaShadow.CANES.all = ECanaRegs.CANES.all; + } while(ECanaShadow.CANES.bit.CCE != 0 );// Wait for CCE bit to be cleared + + // + // Disable all Mailboxes + // + ECanaRegs.CANME.all = 0; // Required before writing the MSGIDs + + EDIS; +} + +#if (DSP28_ECANB) +// +// Initialize eCAN-B module +// +void +InitECanb(void) +{ + // + // Create a shadow register structure for the CAN control registers. This + // is needed, since only 32-bit access is allowed to these registers. + // 16-bit access to these registers could potentially corrupt the register + // contents or return false data. This is especially true while writing + // to/reading from a bit (or group of bits) among bits 16 - 31 + // + struct ECAN_REGS ECanbShadow; + + EALLOW; // EALLOW enables access to protected bits + + // + // Configure eCAN RX and TX pins for CAN operation using eCAN regs + // + ECanbShadow.CANTIOC.all = ECanbRegs.CANTIOC.all; + ECanbShadow.CANTIOC.bit.TXFUNC = 1; + ECanbRegs.CANTIOC.all = ECanbShadow.CANTIOC.all; + + ECanbShadow.CANRIOC.all = ECanbRegs.CANRIOC.all; + ECanbShadow.CANRIOC.bit.RXFUNC = 1; + ECanbRegs.CANRIOC.all = ECanbShadow.CANRIOC.all; + + // + // Configure eCAN for HECC mode - (read to access mailboxes 16 thru 31) + // + ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; + ECanbShadow.CANMC.bit.SCB = 1; + ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; + + // + // Initialize all bits of 'Master Control Field' to zero + // Some bits of MSGCTRL register come up in an unknown state. For proper + // operation, all bits (including reserved bits) of MSGCTRL must be + // initialized to zero + // + ECanbMboxes.MBOX0.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX1.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX2.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX3.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX4.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX5.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX6.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX7.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX8.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX9.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX10.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX11.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX12.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX13.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX14.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX15.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX16.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX17.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX18.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX19.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX20.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX21.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX22.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX23.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX24.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX25.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX26.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX27.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX28.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX29.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX30.MSGCTRL.all = 0x00000000; + ECanbMboxes.MBOX31.MSGCTRL.all = 0x00000000; + + // + // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again + // as a matter of precaution. + // + ECanbRegs.CANTA.all = 0xFFFFFFFF; // Clear all TAn bits + + ECanbRegs.CANRMP.all = 0xFFFFFFFF; // Clear all RMPn bits + + ECanbRegs.CANGIF0.all = 0xFFFFFFFF; // Clear all interrupt flag bits + ECanbRegs.CANGIF1.all = 0xFFFFFFFF; + + // + // Configure bit timing parameters for eCANB + // + ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; + ECanbShadow.CANMC.bit.CCR = 1 ; // Set CCR = 1 + ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; + + ECanbShadow.CANES.all = ECanbRegs.CANES.all; + + do + { + ECanbShadow.CANES.all = ECanbRegs.CANES.all; + } while(ECanbShadow.CANES.bit.CCE != 1); // Wait for CCE bit to be cleared + + ECanbShadow.CANBTC.all = 0; + + // + // CPU_FRQ_150MHz is defined in DSP2833x_Examples.h + // + #if (CPU_FRQ_150MHZ) + // + // The following block for all 150 MHz SYSCLKOUT + // (75 MHz CAN clock) - default. Bit rate = 1 Mbps See Note at end of file + // + ECanbShadow.CANBTC.bit.BRPREG = 4; + ECanbShadow.CANBTC.bit.TSEG2REG = 2; + ECanbShadow.CANBTC.bit.TSEG1REG = 10; + #endif + + // + // CPU_FRQ_100MHz is defined in DSP2833x_Examples.h + // + #if (CPU_FRQ_100MHZ) + // + // The following block is only for 100 MHz SYSCLKOUT (50 MHz CAN clock). + // Bit rate = 1 Mbps See Note at end of file + // + ECanbShadow.CANBTC.bit.BRPREG = 4; + ECanbShadow.CANBTC.bit.TSEG2REG = 1; + ECanbShadow.CANBTC.bit.TSEG1REG = 6; + #endif + + ECanbShadow.CANBTC.bit.SAM = 1; + ECanbRegs.CANBTC.all = ECanbShadow.CANBTC.all; + + ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; + ECanbShadow.CANMC.bit.CCR = 0 ; // Set CCR = 0 + ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; + + ECanbShadow.CANES.all = ECanbRegs.CANES.all; + + do + { + ECanbShadow.CANES.all = ECanbRegs.CANES.all; + } while(ECanbShadow.CANES.bit.CCE != 0 );// Wait for CCE bit to be cleared + + // + // Disable all Mailboxes + // + ECanbRegs.CANME.all = 0; // Required before writing the MSGIDs + + EDIS; +} +#endif // if DSP28_ECANB + +// +// InitECanGpio - This function initializes GPIO pins to function as eCAN pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +// Caution: +// Only one GPIO pin should be enabled for CANTXA/B operation. +// Only one GPIO pin shoudl be enabled for CANRXA/B operation. +// Comment out other unwanted lines. +// +void +InitECanGpio(void) +{ + InitECanaGpio(); +#if (DSP28_ECANB) + InitECanbGpio(); +#endif // if DSP28_ECANB +} + +// +// InitECanaGpio - This function initializes GPIO pins to function as eCAN- A +// +void +InitECanaGpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected CAN pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0; // Enable pull-up for GPIO30 (CANRXA) + //GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pull-up for GPIO18 (CANRXA) + + GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0; //Enable pull-up for GPIO31 (CANTXA) + //GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; //Enable pull-up for GPIO19 (CANTXA) + + // + // Set qualification for selected CAN pins to asynch only + // Inputs are synchronized to SYSCLKOUT by default. + // This will select asynch (no qualification) for the selected pins. + // + GpioCtrlRegs.GPAQSEL2.bit.GPIO30 = 3; // Asynch qual for GPIO30 (CANRXA) + //GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch qual for GPIO18 (CANRXA) + + // + // Configure eCAN-A pins using GPIO regs + // This specifies which of the possible GPIO pins will be eCAN functional + // pins. + // + GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; // Configure GPIO30 for CANRXA + //GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 3; // Configure GPIO18 for CANRXA + GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; // Configure GPIO31 for CANTXA + //GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 3; // Configure GPIO19 for CANTXA + + EDIS; +} + +#if (DSP28_ECANB) +// +// InitECanbGpio - This function initializes GPIO pins to function as eCAN-B +// +void +InitECanbGpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected CAN pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + // GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; //Enable pull-up for GPIO8 (CANTXB) + //GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; //Enable pull-up for GPIO12(CANTXB) + //GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; //Enable pull-up for GPIO16(CANTXB) + GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; //Enable pull-up for GPIO20(CANTXB) + + // GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pull-up for GPIO10(CANRXB) + //GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0; // Enable pull-up for GPIO13(CANRXB) + //GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pull-up for GPIO17(CANRXB) + GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; // Enable pull-up for GPIO21(CANRXB) + + // + // Set qualification for selected CAN pins to asynch only + // Inputs are synchronized to SYSCLKOUT by default. + // This will select asynch (no qualification) for the selected pins. + // Comment out other unwanted lines. + // + // GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3; // Asynch qual for GPIO10 (CANRXB) + //GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // Asynch qual for GPIO13 (CANRXB) + //GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch qual for GPIO17 (CANRXB) + GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3; // Asynch qual for GPIO21 (CANRXB) + + // + // Configure eCAN-B pins using GPIO regs + // This specifies which of the possible GPIO pins will be eCAN functional + // pins. + // + // GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 2; // Configure GPIO8 for CANTXB + //GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 2; // Configure GPIO12 for CANTXB + //GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 2; // Configure GPIO16 for CANTXB + GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 3; // Configure GPIO20 for CANTXB + + // GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 2; // Configure GPIO10 for CANRXB + //GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 2; // Configure GPIO13 for CANRXB + //GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 2; // Configure GPIO17 for CANRXB + GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 3; // Configure GPIO21 for CANRXB + + EDIS; +} +#endif // if DSP28_ECANB + +// +// Note: Bit timing parameters must be chosen based on the network parameters +// such as the sampling point desired and the propagation delay of the network. +// The propagation delay is a function of length of the cable, delay introduced +// by the transceivers and opto/galvanic-isolators (if any). +// +// The parameters used in this file must be changed taking into account the +// above mentioned factors in order to arrive at the bit-timing parameters +// suitable for a network. +// + +// +// End of File +// + diff --git a/F28335/DSP2833x_ECap.c b/F28335/DSP2833x_ECap.c new file mode 100644 index 0000000..11ab3ff --- /dev/null +++ b/F28335/DSP2833x_ECap.c @@ -0,0 +1,273 @@ +//########################################################################### +// +// FILE: DSP2833x_ECap.c +// +// TITLE: DSP2833x eCAP Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitECap - This function initializes the eCAP(s) to a known state. +// +void +InitECap(void) +{ + // + // Initialize eCAP1/2/3 + // +} + +// +// InitECapGpio - This function initializes GPIO pins to function as ECAP pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +// Caution: +// For each eCAP peripheral +// Only one GPIO pin should be enabled for ECAP operation. +// Comment out other unwanted lines. +// +void +InitECapGpio() +{ + InitECap1Gpio(); +#if (DSP28_ECAP2) + InitECap2Gpio(); +#endif // endif DSP28_ECAP2 +#if (DSP28_ECAP3) + InitECap3Gpio(); +#endif // endif DSP28_ECAP3 +#if (DSP28_ECAP4) + InitECap4Gpio(); +#endif // endif DSP28_ECAP4 +#if (DSP28_ECAP5) + InitECap5Gpio(); +#endif // endif DSP28_ECAP5 +#if (DSP28_ECAP6) + InitECap6Gpio(); +#endif // endif DSP28_ECAP6 +} + +// +// InitECap1Gpio - +// +void +InitECap1Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + //GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pull-up on GPIO5 (CAP1) + GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (CAP1) + //GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; // Enable pull-up on GPIO34 (CAP1) + + // + // Inputs are synchronized to SYSCLKOUT by default. + // Comment out other unwanted lines. + // + //GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 0; //Synch to SYSCLKOUT GPIO5 (CAP1) + GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; //Synch to SYSCLKOUT GPIO24 (CAP1) + //GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 0; //Synch to SYSCLKOUT GPIO34 (CAP1) + + // + // Configure eCAP-1 pins using GPIO regs + // This specifies which of the possible GPIO pins will be eCAP1 functional pins. + // Comment out other unwanted lines. + // + //GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 3; // Configure GPIO5 as CAP1 + GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1; // Configure GPIO24 as CAP1 + //GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 1; // Configure GPIO24 as CAP1 + + EDIS; +} + +#if DSP28_ECAP2 +// +// InitECap2Gpio - +// +void +InitECap2Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Enable pull-up on GPIO7 (CAP2) + //GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (CAP2) + //GpioCtrlRegs.GPBPUD.bit.GPIO37 = 0; // Enable pull-up on GPIO37 (CAP2) + + // + // Inputs are synchronized to SYSCLKOUT by default. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0; //Synch to SYSCLKOUT GPIO7 (CAP2) + //GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; //Synch to SYSCLKOUT GPIO25 (CAP2) + //GpioCtrlRegs.GPBQSEL1.bit.GPIO37 = 0; //Synch to SYSCLKOUT GPIO37 (CAP2) + + // + // Configure eCAP-2 pins using GPIO regs + // This specifies which of the possible GPIO pins will be eCAP2 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 3; // Configure GPIO7 as CAP2 + //GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1; // Configure GPIO25 as CAP2 + //GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // Configure GPIO37 as CAP2 + + EDIS; +} +#endif // endif DSP28_ECAP2 + +#if DSP28_ECAP3 +// +// InitECap3Gpio - +// +void +InitECap3Gpio(void) +{ + EALLOW; + +/* Enable internal pull-up for the selected pins */ +// Pull-ups can be enabled or disabled by the user. +// This will enable the pullups for the specified pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pull-up on GPIO9 (CAP3) +// GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (CAP3) + +// Inputs are synchronized to SYSCLKOUT by default. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 0; // Synch to SYSCLKOUT GPIO9 (CAP3) +// GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 0; // Synch to SYSCLKOUT GPIO26 (CAP3) + +/* Configure eCAP-3 pins using GPIO regs*/ +// This specifies which of the possible GPIO pins will be eCAP3 functional pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3; // Configure GPIO9 as CAP3 +// GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 1; // Configure GPIO26 as CAP3 + + EDIS; +} +#endif // endif DSP28_ECAP3 + + +#if DSP28_ECAP4 +void InitECap4Gpio(void) +{ + EALLOW; + +/* Enable internal pull-up for the selected pins */ +// Pull-ups can be enabled or disabled by the user. +// This will enable the pullups for the specified pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pull-up on GPIO11 (CAP4) +// GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // Enable pull-up on GPIO27 (CAP4) + +// Inputs are synchronized to SYSCLKOUT by default. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 0; // Synch to SYSCLKOUT GPIO11 (CAP4) +// GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 0; // Synch to SYSCLKOUT GPIO27 (CAP4) + +/* Configure eCAP-4 pins using GPIO regs*/ +// This specifies which of the possible GPIO pins will be eCAP4 functional pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 3; // Configure GPIO11 as CAP4 +// GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 1; // Configure GPIO27 as CAP4 + + EDIS; +} +#endif // endif DSP28_ECAP4 + + +#if DSP28_ECAP5 +void InitECap5Gpio(void) +{ + EALLOW; + +/* Enable internal pull-up for the selected pins */ +// Pull-ups can be enabled or disabled by the user. +// This will enable the pullups for the specified pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pull-up on GPIO3 (CAP5) +// GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0; // Enable pull-up on GPIO48 (CAP5) + +// Inputs are synchronized to SYSCLKOUT by default. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 0; // Synch to SYSCLKOUT GPIO3 (CAP5) +// GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 0; // Synch to SYSCLKOUT GPIO48 (CAP5) + +/* Configure eCAP-5 pins using GPIO regs*/ +// This specifies which of the possible GPIO pins will be eCAP5 functional pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 2; // Configure GPIO3 as CAP5 +// GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 1; // Configure GPIO48 as CAP5 + + EDIS; +} +#endif // endif DSP28_ECAP5 + + +#if DSP28_ECAP6 +void InitECap6Gpio(void) +{ + EALLOW; + +/* Enable internal pull-up for the selected pins */ +// Pull-ups can be enabled or disabled by the user. +// This will enable the pullups for the specified pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pull-up on GPIO1 (CAP6) +// GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0; // Enable pull-up on GPIO49 (CAP6) + +// Inputs are synchronized to SYSCLKOUT by default. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0; // Synch to SYSCLKOUT GPIO1 (CAP6) +// GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 0; // Synch to SYSCLKOUT GPIO49 (CAP6) + +/* Configure eCAP-5 pins using GPIO regs*/ +// This specifies which of the possible GPIO pins will be eCAP6 functional pins. +// Comment out other unwanted lines. + + GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 2; // Configure GPIO1 as CAP6 +// GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 1; // Configure GPIO49 as CAP6 + + EDIS; +} +#endif // endif DSP28_ECAP6 + + + +//=========================================================================== +// End of file. +//=========================================================================== diff --git a/F28335/DSP2833x_EPwm.c b/F28335/DSP2833x_EPwm.c new file mode 100644 index 0000000..4588a4b --- /dev/null +++ b/F28335/DSP2833x_EPwm.c @@ -0,0 +1,376 @@ +//########################################################################### +// +// FILE: DSP2833x_EPwm.c +// +// TITLE: DSP2833x ePWM Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitEPwm - This function initializes the ePWM(s) to a known state. +// +void +InitEPwm(void) +{ + // + // Initialize ePWM1/2/3/4/5/6 + // +} + +// +// InitEPwmGpio - This function initializes GPIO pins to function as ePWM pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +void +InitEPwmGpio(void) +{ + InitEPwm1Gpio(); + InitEPwm2Gpio(); + InitEPwm3Gpio(); +#if DSP28_EPWM4 + InitEPwm4Gpio(); +#endif // endif DSP28_EPWM4 +#if DSP28_EPWM5 + InitEPwm5Gpio(); +#endif // endif DSP28_EPWM5 +#if DSP28_EPWM6 + InitEPwm6Gpio(); +#endif // endif DSP28_EPWM6 +} + +// +// InitEPwm1Gpio - This function initializes GPIO pins to function as ePWM1 +// +void +InitEPwm1Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Enable pull-up on GPIO0 (EPWM1A) + GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pull-up on GPIO1 (EPWM1B) + + // + // Configure ePWM-1 pins using GPIO regs + // This specifies which of the possible GPIO pins will be ePWM1 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // Configure GPIO0 as EPWM1A + GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // Configure GPIO1 as EPWM1B + + EDIS; +} + +// +// InitEPwm2Gpio - This function initializes GPIO pins to function as ePWM2 +// +void +InitEPwm2Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Enable pull-up on GPIO2 (EPWM2A) + GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pull-up on GPIO3 (EPWM3B) + + // + // Configure ePWM-2 pins using GPIO regs + // This specifies which of the possible GPIO pins will be ePWM2 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // Configure GPIO2 as EPWM2A + GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; // Configure GPIO3 as EPWM2B + + EDIS; +} + +// +// InitEPwm3Gpio - This function initializes GPIO pins to function as ePWM3 +// +void +InitEPwm3Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Enable pull-up on GPIO4 (EPWM3A) + GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pull-up on GPIO5 (EPWM3B) + + // + // Configure ePWM-3 pins using GPIO regs + // This specifies which of the possible GPIO pins will be ePWM3 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; // Configure GPIO4 as EPWM3A + GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; // Configure GPIO5 as EPWM3B + + EDIS; +} + +#if DSP28_EPWM4 +// +// InitEPwm4Gpio - This function initializes GPIO pins to function as ePWM4 +// +void +InitEPwm4Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Enable pull-up on GPIO6 (EPWM4A) + GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Enable pull-up on GPIO7 (EPWM4B) + + // + // Configure ePWM-4 pins using GPIO regs + // This specifies which of the possible GPIO pins will be ePWM4 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1; // Configure GPIO6 as EPWM4A + GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1; // Configure GPIO7 as EPWM4B + + EDIS; +} +#endif // endif DSP28_EPWM4 + +#if DSP28_EPWM5 +// +// InitEPwm5Gpio - This function initializes GPIO pins to function as ePWM5 +// +void +InitEPwm5Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; // Enable pull-up on GPIO8 (EPWM5A) + GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pull-up on GPIO9 (EPWM5B) + + // + // Configure ePWM-5 pins using GPIO regs + // This specifies which of the possible GPIO pins will be ePWM5 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 1; // Configure GPIO8 as EPWM5A + GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 1; // Configure GPIO9 as EPWM5B + + EDIS; +} +#endif // endif DSP28_EPWM5 + +#if DSP28_EPWM6 +// +// InitEPwm6Gpio - This function initializes GPIO pins to function as ePWM6 +// +void +InitEPwm6Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pull-up on GPIO10 (EPWM6A) + GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pull-up on GPIO11 (EPWM6B) + + // + // Configure ePWM-6 pins using GPIO regs + // This specifies which of the possible GPIO pins will be ePWM6 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 1; // Configure GPIO10 as EPWM6A + GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 1; // Configure GPIO11 as EPWM6B + + EDIS; +} +#endif // endif DSP28_EPWM6 + +// +// InitEPwmSyncGpio - This function initializes GPIO pins to function as ePWM +// Synch pins +// +void +InitEPwmSyncGpio(void) +{ + EALLOW; + + // + // Configure EPWMSYNCI + // + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; //Enable pull-up on GPIO6 (EPWMSYNCI) + //GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;//Enable pull-up on GPIO32 (EPWMSYNCI) + + // + // Set qualification for selected pins to asynch only + // This will select synch to SYSCLKOUT for the selected pins. + // Comment out other unwanted lines. + // + + // + // Synch to SYSCLKOUT GPIO6 (EPWMSYNCI) + // + GpioCtrlRegs.GPAQSEL1.bit.GPIO6 = 0; + + // + //Synch to SYSCLKOUT GPIO32 (EPWMSYNCI) + // + //GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 0; + + // + // Configure EPwmSync pins using GPIO regs + // This specifies which of the possible GPIO pins will be EPwmSync + // functional pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 2; //Enable pull-up on GPIO6(EPWMSYNCI) + //GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 2;//Enable pull-up on GPIO32(EPWMSYNCI) + + // + // Configure EPWMSYNC0 + // + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + + // + // Enable pull-up on GPIO6 (EPWMSYNC0) + // + //GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; + + // + // Enable pull-up on GPIO33 (EPWMSYNC0) + // + GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; + + // + // Enable pull-up on GPIO6 (EPWMSYNC0) + // + //GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 3; + + // + // Enable pull-up on GPIO33 (EPWMSYNC0) + // + GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 2; +} + +// +// InitTzGpio - This function initializes GPIO pins to function as Trip Zone +// (TZ) pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +void +InitTzGpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; // Enable pull-up on GPIO12 (TZ1) + GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0; // Enable pull-up on GPIO13 (TZ2) + GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pull-up on GPIO14 (TZ3) + GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pull-up on GPIO15 (TZ4) + + GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // Enable pull-up on GPIO16 (TZ5) + //GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pull-up on GPIO28 (TZ5) + + GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pull-up on GPIO17 (TZ6) + //GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pull-up on GPIO29 (TZ6) + + // + // Set qualification for selected pins to asynch only + // Inputs are synchronized to SYSCLKOUT by default. + // This will select asynch (no qualification) for the selected pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3; // Asynch input GPIO12 (TZ1) + GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // Asynch input GPIO13 (TZ2) + GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3; // Asynch input GPIO14 (TZ3) + GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // Asynch input GPIO15 (TZ4) + + GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (TZ5) + //GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input GPIO28 (TZ5) + + GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (TZ6) + //GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 3; // Asynch input GPIO29 (TZ6) + + // + // Configure TZ pins using GPIO regs + // This specifies which of the possible GPIO pins will be TZ functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 1; // Configure GPIO12 as TZ1 + GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 1; // Configure GPIO13 as TZ2 + GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 1; // Configure GPIO14 as TZ3 + GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1; // Configure GPIO15 as TZ4 + + GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 3; // Configure GPIO16 as TZ5 + //GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3; // Configure GPIO28 as TZ5 + + GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 3; // Configure GPIO17 as TZ6 + //GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3; // Configure GPIO29 as TZ6 + + EDIS; +} + +// +// End of file +// + diff --git a/F28335/DSP2833x_EQep.c b/F28335/DSP2833x_EQep.c new file mode 100644 index 0000000..8adb9e5 --- /dev/null +++ b/F28335/DSP2833x_EQep.c @@ -0,0 +1,160 @@ +//########################################################################### +// +// FILE: DSP2833x_EQep.c +// +// TITLE: DSP2833x eQEP Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitEQep - This function initializes the eQEP(s) to a known state. +// +void +InitEQep(void) +{ + // + // Initialize eQEP1/2 + // +} + +// +// InitEQepGpio - This function initializes GPIO pins to function as eQEP pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +// Caution: +// For each eQEP peripheral +// Only one GPIO pin should be enabled for EQEPxA operation. +// Only one GPIO pin should be enabled for EQEPxB operation. +// Only one GPIO pin should be enabled for EQEPxS operation. +// Only one GPIO pin should be enabled for EQEPxI operation. +// Comment out other unwanted lines. +// +void +InitEQepGpio() +{ +#if DSP28_EQEP1 + InitEQep1Gpio(); +#endif // endif DSP28_EQEP1 +#if DSP28_EQEP2 + InitEQep2Gpio(); +#endif // endif DSP28_EQEP2 +} + +// +// InitEQep1Gpio - This function initializes GPIO pins to function as eQEP1 +// +#if DSP28_EQEP1 +void +InitEQep1Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; // Enable pull-up on GPIO20 (EQEP1A) + GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; // Enable pull-up on GPIO21 (EQEP1B) + GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pull-up on GPIO22 (EQEP1S) + GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pull-up on GPIO23 (EQEP1I) + //GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0; // Enable pull-up on GPIO50 (EQEP1A) + //GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0; // Enable pull-up on GPIO51 (EQEP1B) + //GpioCtrlRegs.GPBPUD.bit.GPIO52 = 0; // Enable pull-up on GPIO52 (EQEP1S) + //GpioCtrlRegs.GPBPUD.bit.GPIO53 = 0; // Enable pull-up on GPIO53 (EQEP1I) + + // + // Inputs are synchronized to SYSCLKOUT by default. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0; // Sync to SYSCLKOUT GPIO20 (EQEP1A) + GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0; // Sync to SYSCLKOUT GPIO21 (EQEP1B) + GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0; // Sync to SYSCLKOUT GPIO22 (EQEP1S) + GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0; // Sync to SYSCLKOUT GPIO23 (EQEP1I) + + //GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 0; //Sync to SYSCLKOUT GPIO50(EQEP1A) + //GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 0; //Sync to SYSCLKOUT GPIO51(EQEP1B) + //GpioCtrlRegs.GPBQSEL2.bit.GPIO52 = 0; //Sync to SYSCLKOUT GPIO52(EQEP1S) + //GpioCtrlRegs.GPBQSEL2.bit.GPIO53 = 0; //Sync to SYSCLKOUT GPIO53(EQEP1I) + + // + // Configure eQEP-1 pins using GPIO regs + // This specifies which of the possible GPIO pins will be eQEP1 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // Configure GPIO20 as EQEP1A + GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // Configure GPIO21 as EQEP1B + GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1; // Configure GPIO22 as EQEP1S + GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; // Configure GPIO23 as EQEP1I + + //GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 1; // Configure GPIO50 as EQEP1A + //GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 1; // Configure GPIO51 as EQEP1B + //GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 1; // Configure GPIO52 as EQEP1S + //GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 1; // Configure GPIO53 as EQEP1I + + EDIS; +} +#endif // if DSP28_EQEP1 + +// +// InitEQep2Gpio - This function initializes GPIO pins to function as eQEP2 +// +#if DSP28_EQEP2 +void +InitEQep2Gpio(void) +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (EQEP2A) + GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (EQEP2B) + GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (EQEP2I) + GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // Enable pull-up on GPIO27 (EQEP2S) + + // + // Inputs are synchronized to SYSCLKOUT by default. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // Sync to SYSCLKOUT GPIO24 (EQEP2A) + GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0; // Sync to SYSCLKOUT GPIO25 (EQEP2B) + GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 0; // Sync to SYSCLKOUT GPIO26 (EQEP2I) + GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 0; // Sync to SYSCLKOUT GPIO27 (EQEP2S) + + // + // Configure eQEP-2 pins using GPIO regs + // This specifies which of the possible GPIO pins will be eQEP2 functional + // pins. Comment out other unwanted lines. + // + GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2; // Configure GPIO24 as EQEP2A + GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2; // Configure GPIO25 as EQEP2B + GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2; // Configure GPIO26 as EQEP2I + GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 2; // Configure GPIO27 as EQEP2S + + EDIS; +} +#endif // endif DSP28_EQEP2 + +// +// End of file +// + diff --git a/F28335/DSP2833x_GlobalVariableDefs.c b/F28335/DSP2833x_GlobalVariableDefs.c new file mode 100644 index 0000000..8be4d20 --- /dev/null +++ b/F28335/DSP2833x_GlobalVariableDefs.c @@ -0,0 +1,376 @@ +//########################################################################### +// +// FILE: DSP2833x_GlobalVariableDefs.c +// +// TITLE: DSP2833x Global Variables and Data Section Pragmas. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#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 +volatile 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 +// + diff --git a/F28335/DSP2833x_Gpio.c b/F28335/DSP2833x_Gpio.c new file mode 100644 index 0000000..7276375 --- /dev/null +++ b/F28335/DSP2833x_Gpio.c @@ -0,0 +1,77 @@ +//########################################################################### +// +// FILE: DSP2833x_Gpio.c +// +// TITLE: DSP2833x General Purpose I/O Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitGpio - This function initializes the Gpio to a known (default) state. +// +// For more details on configuring GPIO's as peripheral functions, +// refer to the individual peripheral examples and/or GPIO setup example. +// +void +InitGpio(void) +{ + EALLOW; + + // + // Each GPIO pin can be: + // a) a GPIO input/output + // b) peripheral function 1 + // c) peripheral function 2 + // d) peripheral function 3 + // By default, all are GPIO Inputs + // + GpioCtrlRegs.GPAMUX1.all = 0x0000; // GPIO functionality GPIO0-GPIO15 + GpioCtrlRegs.GPAMUX2.all = 0x0000; // GPIO functionality GPIO16-GPIO31 + GpioCtrlRegs.GPBMUX1.all = 0x0000; // GPIO functionality GPIO32-GPIO39 + GpioCtrlRegs.GPBMUX2.all = 0x0000; // GPIO functionality GPIO48-GPIO63 + GpioCtrlRegs.GPCMUX1.all = 0x0000; // GPIO functionality GPIO64-GPIO79 + GpioCtrlRegs.GPCMUX2.all = 0x0000; // GPIO functionality GPIO80-GPIO95 + + GpioCtrlRegs.GPADIR.all = 0x0000; // GPIO0-GPIO31 are inputs + GpioCtrlRegs.GPBDIR.all = 0x0000; // GPIO32-GPIO63 are inputs + GpioCtrlRegs.GPCDIR.all = 0x0000; // GPI064-GPIO95 are inputs + + // + // Each input can have different qualification + // a) input synchronized to SYSCLKOUT + // b) input qualified by a sampling window + // c) input sent asynchronously (valid for peripheral inputs only) + // + GpioCtrlRegs.GPAQSEL1.all = 0x0000; // GPIO0-GPIO15 Synch to SYSCLKOUT + GpioCtrlRegs.GPAQSEL2.all = 0x0000; // GPIO16-GPIO31 Synch to SYSCLKOUT + GpioCtrlRegs.GPBQSEL1.all = 0x0000; // GPIO32-GPIO39 Synch to SYSCLKOUT + GpioCtrlRegs.GPBQSEL2.all = 0x0000; // GPIO48-GPIO63 Synch to SYSCLKOUT + + // + // Pull-ups can be enabled or disabled + // + GpioCtrlRegs.GPAPUD.all = 0x0000; // Pullup's enabled GPIO0-GPIO31 + GpioCtrlRegs.GPBPUD.all = 0x0000; // Pullup's enabled GPIO32-GPIO63 + GpioCtrlRegs.GPCPUD.all = 0x0000; // Pullup's enabled GPIO64-GPIO79 + //GpioCtrlRegs.GPAPUD.all = 0xFFFF; // Pullup's disabled GPIO0-GPIO31 + //GpioCtrlRegs.GPBPUD.all = 0xFFFF; // Pullup's disabled GPIO32-GPIO34 + //GpioCtrlRegs.GPCPUD.all = 0xFFFF; // Pullup's disabled GPIO64-GPIO79 + + EDIS; +} + +// +// End of file +// + diff --git a/F28335/DSP2833x_I2C.c b/F28335/DSP2833x_I2C.c new file mode 100644 index 0000000..83bf050 --- /dev/null +++ b/F28335/DSP2833x_I2C.c @@ -0,0 +1,79 @@ +//########################################################################### +// +// FILE: DSP2833x_I2C.c +// +// TITLE: DSP2833x SCI Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitI2C - This function initializes the I2C to a known state. +// +void +InitI2C(void) +{ + // + // Initialize I2C-A + // +} + +// +// InitI2CGpio - This function initializes GPIO pins to function as I2C pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +// Caution: +// Only one GPIO pin should be enabled for SDAA operation. +// Only one GPIO pin shoudl be enabled for SCLA operation. +// Comment out other unwanted lines. +// +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 to SDAA + GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // Configure GPIO33 to SCLA + + EDIS; +} + +// +// End of file +// + diff --git a/F28335/DSP2833x_MemCopy.c b/F28335/DSP2833x_MemCopy.c new file mode 100644 index 0000000..6dbe540 --- /dev/null +++ b/F28335/DSP2833x_MemCopy.c @@ -0,0 +1,50 @@ +//########################################################################### +// +// FILE: DSP2833x_MemCopy.c +// +// TITLE: Memory Copy Utility +// +// ASSUMPTIONS: +// +// DESCRIPTION: +// +// This function will copy the specified memory contents from +// one location to another. +// +// Uint16 *SourceAddr Pointer to the first word to be moved +// SourceAddr < SourceEndAddr +// Uint16* SourceEndAddr Pointer to the last word to be moved +// Uint16* DestAddr Pointer to the first destination word +// +// No checks are made for invalid memory locations or that the +// end address is > then the first start address. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" + +// +// MemCopy - +// +void +MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr) +{ + while(SourceAddr < SourceEndAddr) + { + *DestAddr++ = *SourceAddr++; + } + return; +} + +// +// End of file +// + diff --git a/F28335/DSP2833x_PieCtrl.c b/F28335/DSP2833x_PieCtrl.c new file mode 100644 index 0000000..83fa8e6 --- /dev/null +++ b/F28335/DSP2833x_PieCtrl.c @@ -0,0 +1,95 @@ +//########################################################################### +// +// FILE: DSP2833x_PieCtrl.c +// +// TITLE: DSP2833x Device PIE Control Register Initialization Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#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/F28335/DSP2833x_PieVect.c b/F28335/DSP2833x_PieVect.c new file mode 100644 index 0000000..8ec72c0 --- /dev/null +++ b/F28335/DSP2833x_PieVect.c @@ -0,0 +1,231 @@ +//########################################################################### +// +// FILE: DSP2833x_PieVect.c +// +// TITLE: DSP2833x Devices PIE Vector Table Initialization Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#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; + volatile 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/F28335/DSP2833x_Sci.c b/F28335/DSP2833x_Sci.c new file mode 100644 index 0000000..c9f4c00 --- /dev/null +++ b/F28335/DSP2833x_Sci.c @@ -0,0 +1,193 @@ +//########################################################################### +// +// FILE: DSP2833x_Sci.c +// +// TITLE: DSP2833x SCI Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitSci - This function initializes the SCI(s) to a known state. +// +void +InitSci(void) +{ + // + // Initialize SCI-A + // + + // + // Initialize SCI-B + // + + // + // Initialize SCI-C + // +} + +// +// InitSciGpio - This function initializes GPIO to function as SCI-A, SCI-B, or +// SCI-C +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +// Caution: +// Only one GPIO pin should be enabled for SCITXDA/B operation. +// Only one GPIO pin shoudl be enabled for SCIRXDA/B operation. +// Comment out other unwanted lines. +// +void +InitSciGpio() +{ + InitSciaGpio(); +#if DSP28_SCIB + InitScibGpio(); +#endif // if DSP28_SCIB + +#if DSP28_SCIC + InitScicGpio(); +#endif // if DSP28_SCIC +} + +// +// InitSciaGpio - This function initializes GPIO pins to function as SCI-A pins +// +void +InitSciaGpio() +{ + 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. + // + GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pull-up for GPIO28 (SCIRXDA) + GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pull-up for GPIO29 (SCITXDA) + + // + // Set qualification for selected pins to asynch only + // Inputs are synchronized to SYSCLKOUT by default. + // This will select asynch (no qualification) for the selected pins. + // + GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input GPIO28 (SCIRXDA) + + // + // Configure SCI-A pins using GPIO regs + // This specifies which of the possible GPIO pins will be SCI functional + // pins. + // + GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // Configure GPIO28 to SCIRXDA + GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // Configure GPIO29 to SCITXDA + + EDIS; +} + +#if DSP28_SCIB +// +// InitScibGpio - This function initializes GPIO pins to function as SCI-B pins +// +void +InitScibGpio() +{ + 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.GPAPUD.bit.GPIO9 = 0; //Enable pull-up for GPIO9 (SCITXDB) + //GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; //Enable pull-up for GPIO14 (SCITXDB) + GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; //Enable pull-up for GPIO18 (SCITXDB) + //GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; //Enable pull-up for GPIO22 (SCITXDB) + + //GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; //Enable pull-up for GPIO11 (SCIRXDB) + //GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; //Enable pull-up for GPIO15 (SCIRXDB) + GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; //Enable pull-up for GPIO19 (SCIRXDB) + //GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; //Enable pull-up for GPIO23 (SCIRXDB) + + // + // Set qualification for selected pins to asynch only + // This will select asynch (no qualification) for the selected pins. + // Comment out other unwanted lines. + // + //GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3; // Asynch input GPIO11 (SCIRXDB) + //GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // Asynch input GPIO15 (SCIRXDB) + GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SCIRXDB) + //GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3; // Asynch input GPIO23 (SCIRXDB) + + // + // Configure SCI-B pins using GPIO regs + // This specifies which of the possible GPIO pins will be SCI functional + // pins. + // Comment out other unwanted lines. + // + //GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 2; //Configure GPIO9 to SCITXDB + //GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 2; //Configure GPIO14 to SCITXDB + GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 2; //Configure GPIO18 to SCITXDB + //GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 3; //Configure GPIO22 to SCITXDB + + //GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 2; //Configure GPIO11 for SCIRXDB + //GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 2; //Configure GPIO15 for SCIRXDB + GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 2; //Configure GPIO19 for SCIRXDB + //GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 3; //Configure GPIO23 for SCIRXDB + + EDIS; +} +#endif // if DSP28_SCIB + +#if DSP28_SCIC +// +// InitScicGpio - This function initializes GPIO pins to function as SCI-C pins +// +void +InitScicGpio() +{ + 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. + // + GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; // Enable pull-up for GPIO62 (SCIRXDC) + GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; // Enable pull-up for GPIO63 (SCITXDC) + + // + // Set qualification for selected pins to asynch only + // Inputs are synchronized to SYSCLKOUT by default. + // This will select asynch (no qualification) for the selected pins. + // + GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; // Asynch input GPIO62 (SCIRXDC) + + // + // Configure SCI-C pins using GPIO regs + // This specifies which of the possible GPIO pins will be SCI functional + // pins. + // + GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; // Configure GPIO62 to SCIRXDC + GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; // Configure GPIO63 to SCITXDC + + EDIS; +} +#endif // if DSP28_SCIC + +// +// End of file +// + diff --git a/F28335/DSP2833x_Spi.c b/F28335/DSP2833x_Spi.c new file mode 100644 index 0000000..353ea73 --- /dev/null +++ b/F28335/DSP2833x_Spi.c @@ -0,0 +1,113 @@ +//########################################################################### +// +// FILE: DSP2833x_Spi.c +// +// TITLE: DSP2833x SPI Initialization & Support Functions. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +#include "DSP2833x_Examples.h" // DSP2833x Examples Include File + +// +// InitSPI - This function initializes the SPI(s) to a known state. +// +void +InitSpi(void) +{ + // + // Initialize SPI-A/B/C/D + // +} + +// +// InitSpiGpio - This function initializes GPIO pins to function as SPI pins +// +// Each GPIO pin can be configured as a GPIO pin or up to 3 different +// peripheral functional pins. By default all pins come up as GPIO +// inputs after reset. +// +// Caution: +// For each SPI peripheral +// Only one GPIO pin should be enabled for SPISOMO operation. +// Only one GPIO pin should be enabled for SPISOMI operation. +// Only one GPIO pin should be enabled for SPICLKA operation. +// Only one GPIO pin should be enabled for SPISTEA operation. +// Comment out other unwanted lines. +// +void +InitSpiGpio() +{ + InitSpiaGpio(); +} + +// +// InitSpiaGpio - This function initializes GPIO poins to function as SPI pins +// +void +InitSpiaGpio() +{ + EALLOW; + + // + // Enable internal pull-up for the selected pins + // Pull-ups can be enabled or disabled by the user. + // This will enable the pullups for the specified pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; //Enable pull-up on GPIO16 (SPISIMOA) + GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; //Enable pull-up on GPIO17 (SPISOMIA) + GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; //Enable pull-up on GPIO18 (SPICLKA) + GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; //Enable pull-up on GPIO19 (SPISTEA) + + //GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0; //Enable pull-up on GPIO54 (SPISIMOA) + //GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0; //Enable pull-up on GPIO55 (SPISOMIA) + //GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0; //Enable pull-up on GPIO56 (SPICLKA) + //GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0; //Enable pull-up on GPIO57 (SPISTEA) + + // + // Set qualification for selected pins to asynch only + // This will select asynch (no qualification) for the selected pins. + // Comment out other unwanted lines. + // + GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA) + GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA) + GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA) + GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA) + + //GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // Asynch input GPIO16 (SPISIMOA) + //GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // Asynch input GPIO17 (SPISOMIA) + //GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // Asynch input GPIO18 (SPICLKA) + //GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // Asynch input GPIO19 (SPISTEA) + + // + // 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. + // + 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 = 1; // Configure GPIO19 as SPISTEA + + //GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // Configure GPIO54 as SPISIMOA + //GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // Configure GPIO55 as SPISOMIA + //GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // Configure GPIO56 as SPICLKA + //GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1; // Configure GPIO57 as SPISTEA + + EDIS; +} + +// +// End of file +// + diff --git a/F28335/DSP2833x_SysCtrl.c b/F28335/DSP2833x_SysCtrl.c new file mode 100644 index 0000000..8bb7b0a --- /dev/null +++ b/F28335/DSP2833x_SysCtrl.c @@ -0,0 +1,422 @@ +//########################################################################### +// +// FILE: DSP2833x_SysCtrl.c +// +// TITLE: DSP2833x Device System Control Initialization & Support Functions. +// +// DESCRIPTION: Example initialization of system resources. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#include "DSP2833x_Device.h" // Headerfile Include File +#include "DSP2833x_Examples.h" // Examples Include File + +// +// 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 +// +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(); +} + +// +// 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"); +} + +// +// ServiceDog - This function resets the watchdog timer. +// Enable this function for using ServiceDog in the application +// +void +ServiceDog(void) +{ + EALLOW; + SysCtrlRegs.WDKEY = 0x0055; + SysCtrlRegs.WDKEY = 0x00AA; + EDIS; +} + +// +// DisableDog - This function disables the watchdog timer. +// +void +DisableDog(void) +{ + EALLOW; + SysCtrlRegs.WDCR= 0x0068; + EDIS; +} + +// +// InitPll - This function initializes the PLLCR register. +// +void +InitPll(Uint16 val, Uint16 divsel) +{ + // + // 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 = val; + EDIS; + + // + // 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; + } + + // + // NOTE: ONLY USE THIS SETTING IF PLL IS BYPASSED (I.E. PLLCR = 0) OR OFF + // 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(divsel == 3) + { + EALLOW; + SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; + DELAY_US(50L); + SysCtrlRegs.PLLSTS.bit.DIVSEL = 3; + EDIS; + } +} + +// +// 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) +{ + EALLOW; + + // + // HISPCP/LOSPCP prescale register settings, normally it will be set to + // default values + // + SysCtrlRegs.HISPCP.all = 0x0001; + SysCtrlRegs.LOSPCP.all = 0x0002; + + // + // 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; +} + +// +// 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/F28335/DSP2833x_Xintf.c b/F28335/DSP2833x_Xintf.c new file mode 100644 index 0000000..ef81a42 --- /dev/null +++ b/F28335/DSP2833x_Xintf.c @@ -0,0 +1,303 @@ +//########################################################################### +// +// 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: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### + +// +// Included Files +// +#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"); +} + +// +// InitXintf32Gpio - +// +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(); +} + +// +// 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; +} + +// +// End of File +// + diff --git a/F28335/DSP2833x_usDelay.asm b/F28335/DSP2833x_usDelay.asm new file mode 100644 index 0000000..e0c8600 --- /dev/null +++ b/F28335/DSP2833x_usDelay.asm @@ -0,0 +1,78 @@ +;// 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: F2833x/F2823x Header Files and Peripheral Examples V142 $ +;// $Release Date: November 1, 2016 $ +;// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +;// http://www.ti.com/ ALL RIGHTS RESERVED $ +;//########################################################################### + + .def _DSP28x_usDelay + .sect "ramfuncs" + + .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/Protocol/CAN.cpp b/Protocol/CAN.cpp new file mode 100644 index 0000000..8e63be6 --- /dev/null +++ b/Protocol/CAN.cpp @@ -0,0 +1,188 @@ +#include "CAN.h" + +CAN::CAN(){ + +} + +void CAN::initGpio(CAN_VARIANT canVarinat){ + if(canVarinat == CAN_VARIAN::CANA) InitECanaGpio(); + else if (canVarinat == CAN_VARIAN::CANB) InitECanbGpio(); +} + +void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){ + if (CAN == CANA){ + EALLOW; + SysCtrlRegs.PCLKCR0.bit.ECANAENCLK = 1; + EDIS; + p_CanRegs_ = &ECanaRegs; + p_CanMBoxes_ = &ECanaMboxes; + } + else if (CAN == CANB){ + EALLOW; + SysCtrlRegs.PCLKCR0.bit.ECANBENCLK = 1; + EDIS; + p_CanRegs_ = &ECanbRegs; + p_CanMBoxes_ = &ECanbMboxes; + } + else { return; } + + // + // Create a shadow register structure for the CAN control registers. This + // is needed, since only 32-bit access is allowed to these registers. + // 16-bit access to these registers could potentially corrupt the register + // contents or return false data. This is especially true while writing + // to/reading from a bit (or group of bits) among bits 16 - 31 + // + struct ECAN_REGS ECanShadow; + + EALLOW; // EALLOW enables access to protected bits + + // + // Configure eCAN RX and TX pins for CAN operation using eCAN regs + // + ECanShadow.CANTIOC.all = p_CanRegs_.CANTIOC.all; + ECanShadow.CANTIOC.bit.TXFUNC = 1; + p_CanRegs_.CANTIOC.all = ECanShadow.CANTIOC.all; + + ECanShadow.CANRIOC.all = p_CanRegs_.CANRIOC.all; + ECanShadow.CANRIOC.bit.RXFUNC = 1; + p_CanRegs_.CANRIOC.all = ECanShadow.CANRIOC.all; + + // + // Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31) + // HECC mode also enables time-stamping feature + // + ECanShadow.CANMC.all = p_CanRegs_.CANMC.all; + ECanShadow.CANMC.bit.SCB = 1; + p_CanRegs_.CANMC.all = ECanShadow.CANMC.all; + + // + // Initialize all bits of 'Master Control Field' to zero + // Some bits of MSGCTRL register come up in an unknown state. For proper + // operation, all bits (including reserved bits) of MSGCTRL must be + // initialized to zero + // + p_CanMBoxes_.MBOX0.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX1.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX2.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX3.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX4.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX5.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX6.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX7.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX8.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX9.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX10.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX11.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX12.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX13.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX14.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX15.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX16.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX17.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX18.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX19.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX20.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX21.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX22.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX23.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX24.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX25.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX26.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX27.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX28.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX29.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX30.MSGCTRL.all = 0x00000000; + p_CanMBoxes_.MBOX31.MSGCTRL.all = 0x00000000; + + // + // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again + // as a matter of precaution. + // + p_CanRegs_.CANTA.all = 0xFFFFFFFF; // Clear all TAn bits + + p_CanRegs_.CANRMP.all = 0xFFFFFFFF; // Clear all RMPn bits + + p_CanRegs_.CANGIF0.all = 0xFFFFFFFF; // Clear all interrupt flag bits + p_CanRegs_.CANGIF1.all = 0xFFFFFFFF; + + // + // Configure bit timing parameters for eCANA + // + ECanShadow.CANMC.all = p_CanRegs_.CANMC.all; + ECanShadow.CANMC.bit.CCR = 1 ; // Set CCR = 1 + p_CanRegs_.CANMC.all = ECanShadow.CANMC.all; + + ECanShadow.CANES.all = p_CanRegs_.CANES.all; + + do + { + ECanShadow.CANES.all = p_CanRegs_.CANES.all; + } while(ECanShadow.CANES.bit.CCE != 1 ); // Wait for CCE bit to be set + + ECanShadow.CANBTC.all = 0; + + // The following block for all 150 MHz SYSCLKOUT + // (75 MHz CAN clock) - default. Bit rate = 1 Mbps + // + + switch (baudrate) { + case : 1000 + ECanShadow.CANBTC.bit.BRPREG = 4; + ECanShadow.CANBTC.bit.TSEG2REG = 3; + ECanShadow.CANBTC.bit.TSEG1REG = 9; + break; + + case : 500 + ECanShadow.CANBTC.bit.BRPREG = 9; + ECanShadow.CANBTC.bit.TSEG2REG = 3; + ECanShadow.CANBTC.bit.TSEG1REG = 9; + break; + + case : 250 + ECanShadow.CANBTC.bit.BRPREG = 19; + ECanShadow.CANBTC.bit.TSEG2REG = 3; + ECanShadow.CANBTC.bit.TSEG1REG = 9; + break; + + case : 100 + ECanShadow.CANBTC.bit.BRPREG = 49; + ECanShadow.CANBTC.bit.TSEG2REG = 3; + ECanShadow.CANBTC.bit.TSEG1REG = 9; + break; + + default: return; + } + + ECanShadow.CANBTC.bit.SAM = 1; + p_CanRegs_.CANBTC.all = ECanShadow.CANBTC.all; + + ECanShadow.CANMC.all = p_CanRegs_.CANMC.all; + ECanShadow.CANMC.bit.CCR = 0 ; // Set CCR = 0 + p_CanRegs_.CANMC.all = ECanShadow.CANMC.all; + + ECanShadow.CANES.all = p_CanRegs_.CANES.all; + + do + { + ECanShadow.CANES.all = p_CanRegs_.CANES.all; + } while(ECanShadow.CANES.bit.CCE != 0 );// Wait for CCE bit to be cleared + + // + // Disable all Mailboxes + // + p_CanRegs_.CANME.all = 0; // Required before writing the MSGIDs + + EDIS; + + + +} + +void CAN::transmitMsg(){ + +} + +void CAN::receiveMsg(){ + +} diff --git a/Protocol/CAN.h b/Protocol/CAN.h new file mode 100644 index 0000000..c2e3a02 --- /dev/null +++ b/Protocol/CAN.h @@ -0,0 +1,25 @@ +#pragma once + +#include "DSP2833x_Device.h" +#include "DSP28x_Project.h" + +enum CAN_VARIANT{ + NONE = 0, + CANA, + CANB +}; + +class CAN{ +public: + CAN(); + + void initGpio(CAN_VARIANT canVarinat); + void config(CAN_VARIANT canVarinat, Uint16 baudrate); + + void transmitMsg(); + void receiveMsg(); + +private: + volatile struct ECAN_REGS* p_CanRegs_; + volatile struct ECAN_MBOXES* p_CanMBoxes_; +}; diff --git a/cmd/28335_RAM_lnk.cmd b/cmd/28335_RAM_lnk.cmd new file mode 100644 index 0000000..18d59bf --- /dev/null +++ b/cmd/28335_RAM_lnk.cmd @@ -0,0 +1,177 @@ +/* +//########################################################################### +// +// FILE: 28335_RAM_lnk.cmd +// +// TITLE: Linker Command File For 28335 examples that run out of RAM +// +// This ONLY includes all SARAM blocks on the 28335 device. +// This does not include flash or OTP. +// +// Keep in mind that L0 and L1 are protected by the code +// security module. +// +// What this means is in most cases you will want to move to +// another memory map file which has more memory defined. +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### +*/ + +/* ====================================================== +// 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 : + /* BEGIN is used for the "boot to SARAM" bootloader mode */ + + BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */ + RAMM0 : origin = 0x000050, length = 0x0003B0 + RAML0 : origin = 0x008000, length = 0x001000 + RAML1 : origin = 0x009000, length = 0x001000 + RAML2 : origin = 0x00A000, length = 0x001000 + RAML3 : origin = 0x00B000, length = 0x001000 + ZONE7A : origin = 0x200000, length = 0x00FC00 /* XINTF zone 7 - program space */ + CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ + ADC_CAL : origin = 0x380080, length = 0x000009 + RESET : origin = 0x3FFFC0, length = 0x000002 + IQTABLES : origin = 0x3FE000, length = 0x000b50 + IQTABLES2 : origin = 0x3FEB50, length = 0x00008c + FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 + BOOTROM : origin = 0x3FF27C, length = 0x000D44 + + +PAGE 1 : + /* BOOT_RSVD is used by the boot ROM for stack. */ + /* This section is only reserved to keep the BOOT ROM from */ + /* corrupting this area during the debug process */ + + BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */ + RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ + RAML4 : origin = 0x00C000, length = 0x001000 + RAML5 : origin = 0x00D000, length = 0x001000 + RAML6 : origin = 0x00E000, length = 0x001000 + RAML7 : origin = 0x00F000, length = 0x001000 + ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ +} + + +SECTIONS +{ + /* Setup for "boot to SARAM" mode: + The codestart section (found in DSP28_CodeStartBranch.asm) + re-directs execution to the start of user code. */ + codestart : > BEGIN, PAGE = 0 + ramfuncs : > RAML0, PAGE = 0 + .text : > RAML1, PAGE = 0 + .InitBoot : > RAML1, PAGE = 0 + .cinit : > RAML0, PAGE = 0 + .pinit : > RAML0, PAGE = 0 + .switch : > RAML0, PAGE = 0 + + .stack : > RAMM1, PAGE = 1 + .ebss : > RAML4, PAGE = 1 + .econst : > RAML5, PAGE = 1 + .esysmem : > RAMM1, PAGE = 1 + + IQmath : > RAML1, PAGE = 0 + 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 + + DMARAML4 : > RAML4, PAGE = 1 + DMARAML5 : > RAML5, PAGE = 1 + DMARAML6 : > RAML6, PAGE = 1 + DMARAML7 : > RAML7, PAGE = 1 + + ZONE7DATA : > ZONE7B, PAGE = 1 + + .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */ + csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ + csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ + + /* 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/cmd/DSP2833x_Headers_nonBIOS.cmd b/cmd/DSP2833x_Headers_nonBIOS.cmd new file mode 100644 index 0000000..9d3b6eb --- /dev/null +++ b/cmd/DSP2833x_Headers_nonBIOS.cmd @@ -0,0 +1,183 @@ +/* +//########################################################################### +// +// 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: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### +*/ + +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/cmd/F28335.cmd b/cmd/F28335.cmd new file mode 100644 index 0000000..fadb771 --- /dev/null +++ b/cmd/F28335.cmd @@ -0,0 +1,204 @@ +/* +//########################################################################### +// +// FILE: F28335.cmd +// +// TITLE: Linker Command File For F28335 Device +// +//########################################################################### +// $TI Release: F2833x/F2823x Header Files and Peripheral Examples V142 $ +// $Release Date: November 1, 2016 $ +// $Copyright: Copyright (C) 2007-2016 Texas Instruments Incorporated - +// http://www.ti.com/ ALL RIGHTS RESERVED $ +//########################################################################### +*/ + +/* ====================================================== +// 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 = 0x001000 /* 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 */ + ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */ + ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */ + 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 */ + RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */ + RAML5 : origin = 0x00D000, length = 0x001000 /* 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 */ + 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 : > FLASHA PAGE = 0 + .pinit : > FLASHA, PAGE = 0 + .text : > FLASHA PAGE = 0 + codestart : > BEGIN PAGE = 0 + ramfuncs : LOAD = FLASHD, + RUN = RAML0, + LOAD_START(_RamfuncsLoadStart), + LOAD_END(_RamfuncsLoadEnd), + RUN_START(_RamfuncsRunStart), + LOAD_SIZE(_RamfuncsLoadSize), + PAGE = 0 + + csmpasswds : > CSM_PWL PAGE = 0 + csm_rsvd : > CSM_RSVD PAGE = 0 + + /* Allocate uninitalized data sections: */ + .stack : > RAML7 PAGE = 1 // CHANGES RAMM1 was here. Also 0x400 was added in linker general options (in -heap) and 0x300 at stack was changed to 0x400 + .ebss : > RAML4 PAGE = 1 + .esysmem : > RAMM1 PAGE = 1 + + /* Initalized sections go in Flash */ + /* For SDFlash to program these, they must be allocated to page 0 */ + .econst : > FLASHA PAGE = 0 + .switch : > FLASHA 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/main.cpp b/main.cpp new file mode 100644 index 0000000..8c34739 --- /dev/null +++ b/main.cpp @@ -0,0 +1,111 @@ +// Some comments about author +#include +#include +#include +#include + + +#include "DSP28x_Project.h" // Device Headerfile and Examples Include File +#include "DSP2833x_Examples.h" +#include "SysConfig/f2833x_pinmux.h" +#include "Protocol/CAN.h" + + +//Functions declarations +void idle_loop(void); +interrupt void cpu_timer0_isr(void); +//interrupt void adc_isr(void); + + +void main() +{ + ServiceDog(); + DisableDog(); + + InitSysCtrl(); + + DINT; + + InitPieCtrl(); + + IER = 0x0000; + IFR = 0x0000; + + InitPieVectTable(); + + EALLOW; + PieVectTable.TINT0 = &cpu_timer0_isr; + EDIS; + +// memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize); + + // Call Flash Initialization to setup flash waitstates + // This function must reside in RAM +// InitFlash(); + + +// flash.setup(SECTORD, (Uint16*)0x320000, (Uint16*)0x327FFF); + +// configuration_parameters.setup(TIME_SAMPLE_CONTROL, TIME_SAMPLE_CONTROL_SLOW, TIME_SAMPLE_SERVICE, TPWM, FCPU, FPWM); +// configuration_parameters.load_flash(); + //configuration_parameters.extract_configuration(system_config); +// configuration_parameters.extract_configuration(test_config); + + InitCpuTimers(); + ConfigCpuTimer(&CpuTimer0, 150, 800); + + IER |= M_INT1; // Enable CPU Interrupt 1 + // Enable ADCINT in PIE +// PieCtrlRegs.PIEIER1.bit.INTx6 = 1; + PieCtrlRegs.PIEIER1.bit.INTx7 = 1; + + + // + // Enable global Interrupts and higher priority real-time debug events: + // + EINT; // Enable Global interrupt INTM + ERTM; // Enable Global realtime interrupt DBGM + + + // + // Start CPU Timer + // +// core.cpu_timers.start(); + // + + InitECanGpio(); + InitECan(); + + CpuTimer0.RegsAddr->TCR.bit.TSS = 0; + + idle_loop(); + // +}//end main() +// +// + +void idle_loop() +{ + while (true) + { +/* + if (ECanaRegs.CANRMP.bit.RMP31) + { + GpioDataRegs.GPADAT.bit.GPIO14 = 1;} + else{ + GpioDataRegs.GPADAT.bit.GPIO14 = 0; + } +*/ + + + }//end while + // +}//end idle_loop() +// + +interrupt void cpu_timer0_isr(void) +{ + + // + PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1; +}//end diff --git a/targetConfigs/TMS320F28335.ccxml b/targetConfigs/TMS320F28335.ccxml new file mode 100644 index 0000000..e034bb0 --- /dev/null +++ b/targetConfigs/TMS320F28335.ccxml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/targetConfigs/readme.txt b/targetConfigs/readme.txt new file mode 100644 index 0000000..d783fef --- /dev/null +++ b/targetConfigs/readme.txt @@ -0,0 +1,9 @@ +The 'targetConfigs' folder contains target-configuration (.ccxml) files, automatically generated based +on the device and connection settings specified in your project on the Properties > General page. + +Please note that in automatic target-configuration management, changes to the project's device and/or +connection settings will either modify an existing or generate a new target-configuration file. Thus, +if you manually edit these auto-generated files, you may need to re-apply your changes. Alternatively, +you may create your own target-configuration file for this project and manage it manually. You can +always switch back to automatic target-configuration management by checking the "Manage the project's +target-configuration automatically" checkbox on the project's Properties > General page. \ No newline at end of file