//============================================================================ // FILE: HVBLDC_Sensored-DevInit_F2803x.c // TITLE: Device initialization for F2803x series //============================================================================ /*************************** Note that the CLA is not used nor initialized in this project. Please download the Peripheral Files and Example Projects collection (SPRC832) and look at the cla_adc project for information on how to use and configure the CLA. ***************************/ #include "PeripheralHeaderIncludes.h" // Functions that will be run from RAM need to be assigned to // a different section. This section will then be mapped to a load and // run address using the linker cmd file. #pragma CODE_SECTION(InitFlash, "ramfuncs"); #define Device_cal (void (*)(void))0x3D7C80 void DeviceInit(void); void PieCntlInit(void); void PieVectTableInit(void); void WDogDisable(void); void PLLset(Uint16); void ISR_ILLEGAL(void); //-------------------------------------------------------------------- // Configure Device for target Application Here //-------------------------------------------------------------------- void DeviceInit(void) { WDogDisable(); // Disable the watchdog initially DINT; // Global Disable all Interrupts IER = 0x0000; // Disable CPU interrupts IFR = 0x0000; // Clear all CPU interrupt flags // Switch to Internal Oscillator 1 and turn off all other clock // sources to minimize power consumption /* EALLOW; SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=0; // Clk Src = INTOSC1 SysCtrlRegs.CLKCTL.bit.XCLKINOFF=1; // Turn off XCLKIN SysCtrlRegs.CLKCTL.bit.XTALOSCOFF=1; // Turn off XTALOSC SysCtrlRegs.CLKCTL.bit.INTOSC2OFF=1; // Turn off INTOSC2 EDIS;*/ //外部20M晶振 EALLOW; SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0; // Turn on XTALOSC SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; // Turn off XCLKIN SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0; // Switch to external clock SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1; // Switch from INTOSC1 to INTOSC2/ext clk SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 0; // Clock Watchdog off of INTOSC1 SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; // Turn off INTOSC2 SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; // Leave INTOSC1 on EDIS; // SYSTEM CLOCK speed based on internal oscillator = 10 MHz // 0xC = 60 MHz (12) // 0xB = 55 MHz (11) // 0xA = 50 MHz (10) // 0x9 = 45 MHz (9) // 0x8 = 40 MHz (8) // 0x7 = 35 MHz (7) // 0x6 = 30 MHz (6) // 0x5 = 25 MHz (5) // 0x4 = 20 MHz (4) // 0x3 = 15 MHz (3) // 0x2 = 10 MHz (2) PLLset(0x6); // choose from options above // Initialise interrupt controller and Vector Table // to defaults for now. Application ISR mapping done later. PieCntlInit(); PieVectTableInit(); EALLOW; // below registers are "protected", allow access. // LOW SPEED CLOCKS prescale register settings SysCtrlRegs.LOSPCP.all = 0x0002; // Sysclk / 4 (15 MHz) SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2; // ADC CALIBRATION //--------------------------------------------------- // The Device_cal function, which copies the ADC & oscillator calibration values // from TI reserved OTP into the appropriate trim 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 and oscillators to function according // to specification. SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // Enable ADC peripheral clock (*Device_cal)(); // Auto-calibrate from TI OTP SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0; // Return ADC clock to original state // PERIPHERAL CLOCK ENABLES //--------------------------------------------------- // If you are not using a peripheral you may want to switch // the clock off to save power, i.e. set to =0 // // Note: not all peripherals are available on all 280x derivates. // Refer to the datasheet for your particular device. SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC //------------------------------------------------ SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1; // COMP1 SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK = 1; // COMP2 SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK = 1; // COMP3 //------------------------------------------------ SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; //eCAP1 //------------------------------------------------ SysCtrlRegs.PCLKCR0.bit.ECANAENCLK= 1; // eCAN-A //------------------------------------------------ SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1; // eQEP1 //------------------------------------------------ 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.PCLKCR1.bit.EPWM7ENCLK = 1; // ePWM7 SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK = 0; // HRPWM //------------------------------------------------ SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 0; // I2C //------------------------------------------------ SysCtrlRegs.PCLKCR0.bit.LINAENCLK = 0; // LIN-A //------------------------------------------------ SysCtrlRegs.PCLKCR3.bit.CLA1ENCLK = 0; // CLA1 //------------------------------------------------ SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A //------------------------------------------------ SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 0; // SPI-A SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 0; // SPI-B //------------------------------------------------ SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK //------------------------------------------------ //-------------------------------------------------------------------------------------- // GPIO (GENERAL PURPOSE I/O) CONFIG //-------------------------------------------------------------------------------------- //----------------------- // QUICK NOTES on USAGE: //----------------------- // If GpioCtrlRegs.GP?MUX?bit.GPIO?= 1, 2 or 3 (i.e. Non GPIO func), then leave // rest of lines commented // If GpioCtrlRegs.GP?MUX?bit.GPIO?= 0 (i.e. GPIO func), then: // 1) uncomment GpioCtrlRegs.GP?DIR.bit.GPIO? = ? and choose pin to be IN or OUT // 2) If IN, can leave next to lines commented // 3) If OUT, uncomment line with ..GPACLEAR.. to force pin LOW or // uncomment line with ..GPASET.. to force pin HIGH or //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // GPIO-00 - PIN FUNCTION = PWM1A GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // 0=GPIO, 1=EPWM1A, 2=Resv, 3=Resv // GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO0 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-01 - PIN FUNCTION = PWM1B GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // 0=GPIO, 1=EPWM1B, 2=Resv, 3=COMP1OUT // GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO1 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO1 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-02 - PIN FUNCTION = PWM2A GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // 0=GPIO, 1=EPWM2A, 2=Resv, 3=Resv // GpioCtrlRegs.GPADIR.bit.GPIO2 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO2 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-03 - PIN FUNCTION = PWM2B GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; // 0=GPIO, 1=EPWM2B, 2=SPISOMI-A, 3=COMP2OUT // GpioCtrlRegs.GPADIR.bit.GPIO3 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO3 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO3 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-04 - PIN FUNCTION = PWM3A GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; // 0=GPIO, 1=EPWM3A, 2=Resv, 3=Resv // GpioCtrlRegs.GPADIR.bit.GPIO4 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO4 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-05 - PIN FUNCTION = PWM3B GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; // 0=GPIO, 1=EPWM3B, 2=SPISIMO-A, 3=ECAP1 // GpioCtrlRegs.GPADIR.bit.GPIO5 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO5 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO5 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-06 - PIN FUNCTION = PWM4A GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1; // 0=GPIO, 1=EPWM4A, 2=SYNCI, 3=SYNCO // GpioCtrlRegs.GPADIR.bit.GPIO6 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO6 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO6 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-07 - PIN FUNCTION = PWM4B GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1; // 0=GPIO, 1=EPWM4B, 2=SCIRX-A, 3=Resv // GpioCtrlRegs.GPADIR.bit.GPIO7 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO7 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO7 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-08 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 1; // 0=GPIO, 1=EPWM5A, 2=Resv, 3=ADCSOC-A // GpioCtrlRegs.GPADIR.bit.GPIO8 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO8 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO8 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-09 - PIN FUNCTION = Clear Fault GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // 0=GPIO, 1=EPWM5B, 2=LINTX-A, 3=Resv GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO9 = 1; // uncomment if --> Set Low initially GpioDataRegs.GPASET.bit.GPIO9 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-10 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 1; // 0=GPIO, 1=EPWM6A, 2=Resv, 3=ADCSOC-B // GpioCtrlRegs.GPADIR.bit.GPIO10 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO10 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO10 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-11 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 1; // 0=GPIO, 1=EPWM6B, 2=LINRX-A, 3=Resv // GpioCtrlRegs.GPADIR.bit.GPIO11 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO11 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-12 - PIN FUNCTION = TZ1 GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 1; // 0=GPIO, 1=TZ1, 2=SCITX-A, 3=SPISIMO-B GpioCtrlRegs.GPADIR.bit.GPIO12 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO12 = 0; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO12 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-13 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0; // 0=GPIO, 1=TZ2, 2=Resv, 3=SPISOMI-B GpioCtrlRegs.GPADIR.bit.GPIO13 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO13 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO13 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-14 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0; // 0=GPIO, 1=TZ3, 2=LINTX-A, 3=SPICLK-B GpioCtrlRegs.GPADIR.bit.GPIO14 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO14 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO14 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-15 - PIN FUNCTION = OCP GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0; // 0=GPIO, 1=TZ1, 2=LINRX-A, 3=SPISTE-B GpioCtrlRegs.GPADIR.bit.GPIO15 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO15 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO15 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // GPIO-16 - PIN FUNCTION = SPISIMO-A fault GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0; // 0=GPIO, 1=SPISIMO-A, 2=Resv, 3=TZ2 GpioCtrlRegs.GPADIR.bit.GPIO16 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO16 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-17 - PIN FUNCTION = SPISOMI-A GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; // 0=GPIO, 1=SPISOMI-A, 2=Resv, 3=TZ3 // GpioCtrlRegs.GPADIR.bit.GPIO17 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO17 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO17 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-18 - PIN FUNCTION = SPICLK-A GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // 0=GPIO, 1=SPICLK-A, 2=LINTX-A, 3=XCLKOUT // GpioCtrlRegs.GPADIR.bit.GPIO18 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO18 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO18 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-19 - PIN FUNCTION = SPISTE-A GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // 0=GPIO, 1=SPISTE-A, 2=LINRX-A, 3=ECAP1 // GpioCtrlRegs.GPADIR.bit.GPIO19 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO19 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-20 - PIN FUNCTION = EQEPA-1 GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // 0=GPIO, 1=EQEPA-1, 2=Resv, 3=COMP1OUT // GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO20 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO20 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-21 - PIN FUNCTION = EQEPB-1 GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // 0=GPIO, 1=EQEPB-1, 2=Resv, 3=COMP2OUT // GpioCtrlRegs.GPADIR.bit.GPIO21 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO21 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-22 - PIN FUNCTION = GPIO LED低电平有效 GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0; // 0=GPIO, 1=EQEPS-1, 2=Resv, 3=LINTX-A GpioCtrlRegs.GPADIR.bit.GPIO22 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO22 = 1; // uncomment if --> Set Low initially GpioDataRegs.GPASET.bit.GPIO22 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-23 - PIN FUNCTION = EQEPI-1 GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; // 0=GPIO, 1=EQEPI-1, 2=Resv, 3=LINRX-A // GpioCtrlRegs.GPADIR.bit.GPIO23 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO23 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO23 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-24 - PIN FUNCTION = Hall1 使用cap就不能都IO口 GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0; // 0=GPIO, 1=ECAP1, 2=Resv, 3=SPISIMO-B GpioCtrlRegs.GPADIR.bit.GPIO24 = 0; // 1=OUTput, 0=INput //GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // Synch to SYSCLKOUT GPIO24 (CAP1) //GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // GpioCtrlRegs.GPAPUD.bit.GPIO24 =0; // GpioDataRegs.GPACLEAR.bit.GPIO24 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO24 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-25 - PIN FUNCTION = Hall2 GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=SPISOMI-B GpioCtrlRegs.GPADIR.bit.GPIO25 = 0; // 1=OUTput, 0=INput // GpioCtrlRegs.GPAPUD.bit.GPIO25 =0; // GpioDataRegs.GPACLEAR.bit.GPIO25 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO25 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-26 - PIN FUNCTION = Hall3 GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=SPICLK-B GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; // 1=OUTput, 0=INput // GpioCtrlRegs.GPAPUD.bit.GPIO26 =0; // GpioDataRegs.GPACLEAR.bit.GPIO26 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO26 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-27 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=SPISTE-B GpioCtrlRegs.GPADIR.bit.GPIO27 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO27 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO27 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-28 - PIN FUNCTION = SCI-RX GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // 0=GPIO, 1=SCIRX-A, 2=I2CSDA-A, 3=TZ2 // GpioCtrlRegs.GPADIR.bit.GPIO28 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO28 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO28 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-29 - PIN FUNCTION = SCI-TX GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // 0=GPIO, 1=SCITXD-A, 2=I2CSCL-A, 3=TZ3 // GpioCtrlRegs.GPADIR.bit.GPIO29 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO29 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO29 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-30 - PIN FUNCTION = CANRX-A GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; // 0=GPIO, 1=CANRX-A, 2=Resv, 3=Resv GpioCtrlRegs.GPADIR.bit.GPIO30 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO30 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO30 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-31 - PIN FUNCTION = CANTX-A GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; // 0=GPIO, 1=CANTX-A, 2=Resv, 3=Resv GpioCtrlRegs.GPADIR.bit.GPIO31 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPACLEAR.bit.GPIO31 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPASET.bit.GPIO31 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // GPIO-32 - PIN FUNCTION = I2CSDA-A GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; // 0=GPIO, 1=I2CSDA-A, 2=SYNCI, 3=ADCSOCA GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1; // uncomment if --> Set Low initially GpioDataRegs.GPBSET.bit.GPIO32 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-33 - PIN FUNCTION = I2CSCL-A GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; // 0=GPIO, 1=I2CSCL-A, 2=SYNCO, 3=ADCSOCB GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1; // uncomment if --> Set Low initially GpioDataRegs.GPBSET.bit.GPIO33 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-34 - PIN FUNCTION = LED3 on controlCARD // GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=Resv // GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO34 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // GPIO 35-38 are defaulted to JTAG usage, and are not shown here to enforce JTAG debug // usage. //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // GPIO-39 - PIN FUNCTION = GPIO GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=Resv GpioCtrlRegs.GPBDIR.bit.GPIO39 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO39 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO39 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-40 - PIN FUNCTION = EPWM7A GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 1; // 0=GPIO, 1=EPWM7A, 2=Resv, 3=Resv // GpioCtrlRegs.GPBDIR.bit.GPIO40 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO40 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO40 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-41 - PIN FUNCTION = EPWM7B GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 1; // 0=GPIO, 1=EPWM7B, 2=Resv, 3=Resv // GpioCtrlRegs.GPBDIR.bit.GPIO41 = 1; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO41 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO41 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-42 - PIN FUNCTION = LED2 GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=COMP1OUT GpioCtrlRegs.GPBDIR.bit.GPIO42 = 1; // 1=OUTput, 0=INput GpioDataRegs.GPBCLEAR.bit.GPIO42 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO42 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-43 - PIN FUNCTION = --Spare-- GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=COMP2OUT GpioCtrlRegs.GPBDIR.bit.GPIO43 = 0; // 1=OUTput, 0=INput // GpioDataRegs.GPBCLEAR.bit.GPIO43 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO43 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- // GPIO-44 - PIN FUNCTION = LED1 GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 0; // 0=GPIO, 1=Resv, 2=Resv, 3=Resv GpioCtrlRegs.GPBDIR.bit.GPIO44 = 1; // 1=OUTput, 0=INput GpioDataRegs.GPBCLEAR.bit.GPIO44 = 1; // uncomment if --> Set Low initially // GpioDataRegs.GPBSET.bit.GPIO44 = 1; // uncomment if --> Set High initially //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- EDIS; // Disable register access } //============================================================================ // NOTE: // IN MOST APPLICATIONS THE FUNCTIONS AFTER THIS POINT CAN BE LEFT UNCHANGED // THE USER NEED NOT REALLY UNDERSTAND THE BELOW CODE TO SUCCESSFULLY RUN THIS // APPLICATION. //============================================================================ void WDogDisable(void) { EALLOW; SysCtrlRegs.WDCR= 0x0068; EDIS; } // This function initializes the PLLCR register. //void InitPll(Uint16 val, Uint16 clkindiv) void PLLset(Uint16 val) { volatile Uint16 iVol; // Make sure the PLL is not running in limp mode if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0) { EALLOW; // OSCCLKSRC1 failure detected. PLL running in limp mode. // Re-enable missing clock logic. SysCtrlRegs.PLLSTS.bit.MCLKCLR = 1; EDIS; // Replace this line with a call to an appropriate // SystemShutdown(); function. asm(" ESTOP0"); // Uncomment for debugging purposes } // 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 WDogDisable(); while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1) {} EALLOW; SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; EDIS; } //divide down SysClk by 2 to increase stability EALLOW; SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; EDIS; } // This function initializes the PIE control registers to a known state. // void PieCntlInit(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; } void PieVectTableInit(void) { int16 i; PINT *Dest = &PieVectTable.TINT1; EALLOW; for(i=0; i < 115; i++) *Dest++ = &ISR_ILLEGAL; EDIS; // Enable the PIE Vector Table PieCtrlRegs.PIECTRL.bit.ENPIE = 1; } interrupt void ISR_ILLEGAL(void) // Illegal operation TRAP { // Insert ISR Code here // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code asm(" ESTOP0"); for(;;); } // 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. //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; // 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"); } // 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. void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr) { while(SourceAddr < SourceEndAddr) { *DestAddr++ = *SourceAddr++; } return; } //=========================================================================== // End of file. //===========================================================================