I'm attempting to transmit data from a 28034 to one of 4 slave 28027s through SPI, but by slightly altering the SPI Loopback example code, I have not been able to accomplish this. I've flashed the 28034 and have a scope on it. I can see that the signal I'm sending from the master is reaching the SOMI pins on each of the slave 28027s, but I haven't been able to actually receive the signal while debugging on any of the 28027s.
Here are the files I'm using for my 28027:
// TI File $Revision: /main/4 $ // Checkin $Date: October 6, 2010 14:43:16 $ //########################################################################### // // FILE: Example_2802xSpi_FFDLB.c // // TITLE: DSP2802x Device Spi Digital Loop Back program. // // ASSUMPTIONS: // // This program requires the DSP2802x header files. // // This program uses the internal loop back test mode of the peripheral. // Other then boot mode pin configuration, no other hardware configuration // is required. // // As supplied, this project is configured for "boot to SARAM" // operation. The 2802x Boot Mode table is shown below. // For information on configuring the boot mode of an eZdsp, // please refer to the documentation included with the eZdsp, // // $Boot_Table // While an emulator is connected to your device, the TRSTn pin = 1, // which sets the device into EMU_BOOT boot mode. In this mode, the // peripheral boot modes are as follows: // // Boot Mode: EMU_KEY EMU_BMODE // (0xD00) (0xD01) // --------------------------------------- // Wait !=0x55AA X // I/O 0x55AA 0x0000 // SCI 0x55AA 0x0001 // Wait 0x55AA 0x0002 // Get_Mode 0x55AA 0x0003 // SPI 0x55AA 0x0004 // I2C 0x55AA 0x0005 // OTP 0x55AA 0x0006 // Wait 0x55AA 0x0007 // Wait 0x55AA 0x0008 // SARAM 0x55AA 0x000A <-- "Boot to SARAM" // Flash 0x55AA 0x000B // Wait 0x55AA Other // // Write EMU_KEY to 0xD00 and EMU_BMODE to 0xD01 via the debugger // according to the Boot Mode Table above. Build/Load project, // Reset the device, and Run example // // $End_Boot_Table // // DESCRIPTION: // // This program is a SPI example that uses the internal loopback of // the peripheral. Interrupts are not used. // // A stream of data is sent and then compared to the recieved stream. // // The sent data looks like this: // 0000 0001 0002 0003 0004 0005 0006 0007 .... FFFE FFFF // // This pattern is repeated forever. // // Watch Variables: // sdata - sent data // rdata - received data // ////########################################################################### // Original Author: S.S. // // $TI Release: 2802x C/C++ Header Files and Peripheral Examples V1.28 $ // $Release Date: October 15, 2010 $ //########################################################################### #include "DSP28x_Project.h" // Device Headerfile and Examples Include File // Prototype statements for functions found within this file. // interrupt void ISRTimer2(void); void delay_loop(void); void spi_xmit(Uint16 a); void spi_fifo_init(void); void spi_init(void); void error(void); void main(void) { Uint16 sdata; // send data Uint16 rdata; // received data // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2802x_SysCtrl.c file. InitSysCtrl(); // Step 2. Initalize GPIO: // This example function is found in the DSP2802x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example // Setup only the GP I/O only for SPI-A functionality // This function is found in DSP2802x_Spi.c InitSpiaGpio(); // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT; // Initialize PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2802x_PieCtrl.c file. InitPieCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2802x_DefaultIsr.c. // This function is found in DSP2802x_PieVect.c. InitPieVectTable(); // Step 4. Initialize all the Device Peripherals: // This function is found in DSP2802x_InitPeripherals.c // InitPeripherals(); // Not required for this example spi_fifo_init(); // Initialize the Spi FIFO spi_init(); // init SPI // Step 5. User specific code: // Interrupts are not used in this example. sdata = 0x0000; for(;;) { /* * 2802x processors are slaves, so they will just receive data */ // Wait until data is received while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { } rdata = SpiaRegs.SPIRXBUF; if (rdata == 0x00AA) { spi_xmit(0x000A); } } } // Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here: void delay_loop() { long i; for (i = 0; i < 1000000; i++) {} } void error(void) { asm(" ESTOP0"); // Test failed!! Stop! for (;;); } void spi_init() { SpiaRegs.SPICCR.all =0x000F; // Reset on, rising edge, 16-bit char bits SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase, // enable talk, and SPI int disabled. SpiaRegs.SPICTL.bit.SPIINTENA = 1; SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0; // Changing it to slave SpiaRegs.SPIBRR =0x007F; SpiaRegs.SPICCR.all =0x009F; // Relinquish SPI from Reset SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission } void spi_xmit(Uint16 a) { SpiaRegs.SPITXBUF=a; } void spi_fifo_init() { // Initialize SPI FIFO registers SpiaRegs.SPIFFTX.all=0xE040; SpiaRegs.SPIFFRX.all=0x2044; SpiaRegs.SPIFFCT.all=0x0; } //=========================================================================== // No more. //===========================================================================
And
// TI File $Revision: /main/1 $ // Checkin $Date: August 14, 2008 16:58:49 $ //########################################################################### // // FILE: DSP2802x_Spi.c // // TITLE: DSP2802x SPI Initialization & Support Functions. // //########################################################################### // $TI Release: 2802x C/C++ Header Files and Peripheral Examples V1.28 $ // $Release Date: October 15, 2010 $ //########################################################################### #include "DSP2802x_Device.h" // DSP2802x Headerfile Include File #include "DSP2802x_Examples.h" // DSP2802x Examples Include File //--------------------------------------------------------------------------- // InitSPI: //--------------------------------------------------------------------------- // This function initializes the SPI(s) to a known state. // void InitSpi(void) { // Initialize SPI-A //tbd... } //--------------------------------------------------------------------------- // Example: 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(); } 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) /* 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) /* 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 EDIS; } //=========================================================================== // End of file. //===========================================================================
The ones for my Master 28034:
//########################################################################### // Description: //! \addtogroup f2803x_example_list //! <h1>ePWM Timer Interrupt From Flash (flash_f28035)</h1> //! //! This example runs the ePWM interrupt example from flash. ePwm1 Interrupt //! will run from RAM and puts the flash into sleep mode. ePwm2 Interrupt //! will run from RAM and puts the flash into standby mode. ePWM3 Interrupt //! will run from FLASH. All timers have the same period. The timers are //! started sync'ed. An interrupt is taken on a zero event for each ePWM //! timer.GPIO34 is toggled while in the background loop. //! Note: //! - ePWM1: takes an interrupt every event //! - ePWM2: takes an interrupt every 2nd event //! - ePWM3: takes an interrupt every 3rd event //! Thus the Interrupt count for ePWM1, ePWM4-ePWM6 should be equal //! The interrupt count for ePWM2 should be about half that of ePWM1 //! and the interrupt count for ePWM3 should be about 1/3 that of ePWM1 //! //! Follow these steps to run the program. //! - Build the project //! - Flash the .out file into the device. //! - Set the hardware jumpers to boot to Flash (put position 1 and 2 of //! SW2 on control Card to ON position). //! - Use the included GEL file to load the project, symbols //! defined within the project and the variables into the watch //! window. //! //! Steps that were taken to convert the ePWM example from RAM //! to Flash execution: //! - Change the linker cmd file to reflect the flash memory map. //! - Make sure any initialized sections are mapped to Flash. //! In SDFlash utility this can be checked by the View->Coff/Hex //! status utility. Any section marked as "load" should be //! allocated to Flash. //! - Make sure there is a branch instruction from the entry to Flash //! at 0x3F7FF6 to the beginning of code execution. This example //! uses the DSP0x_CodeStartBranch.asm file to accomplish this. //! - Set boot mode Jumpers to "boot to Flash" //! - For best performance from the flash, modify the waitstates //! and enable the flash pipeline as shown in this example. //! Note: any code that manipulates the flash waitstate and pipeline //! control must be run from RAM. Thus these functions are located //! in their own memory section called ramfuncs. //! //! \b Watch \b Variables \n //! - EPwm1TimerIntCount //! - EPwm2TimerIntCount //! - EPwm3TimerIntCount // //########################################################################### // $TI Release: F2803x C/C++ Header Files and Peripheral Examples V127 $ // $Release Date: March 30, 2013 $ //########################################################################### #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include <string.h> #include <stdint.h> // Prototype statements for functions found within this file. void spi_xmit(Uint16 a); void spi_fifo_init(void); void spi_init(void); void error(void); // Configure which ePWM timer interrupts are enabled at the PIE level: // 1 = enabled, 0 = disabled #define PWM1_INT_ENABLE 1 #define PWM2_INT_ENABLE 1 #define PWM3_INT_ENABLE 1 // Configure the period for each timer #define PWM1_TIMER_TBPRD 0x1FFF #define PWM2_TIMER_TBPRD 0x1FFF #define PWM3_TIMER_TBPRD 0x1FFF // Make this long enough so that we can see an LED toggle #define DELAY 1000000L // Functions that will be run from RAM need to be assigned to // a different section. This section will then be mapped using // the linker cmd file. #pragma CODE_SECTION(epwm1_timer_isr, "ramfuncs"); #pragma CODE_SECTION(epwm2_timer_isr, "ramfuncs"); // Prototype statements for functions found within this file. __interrupt void epwm1_timer_isr(void); __interrupt void epwm2_timer_isr(void); __interrupt void epwm3_timer_isr(void); void InitEPwmTimer(void); // Global variables used in this example Uint32 EPwm1TimerIntCount; Uint32 EPwm2TimerIntCount; Uint32 EPwm3TimerIntCount; Uint32 LoopCount; // These are defined by the linker (see F2808.cmd) extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadSize; extern Uint16 RamfuncsRunStart; void main(void) { Uint16 sdata; // send data Uint16 rdata; // received data // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2803x_SysCtrl.c file. InitSysCtrl(); // Step 2. Initalize GPIO: // This example function is found in the DSP2803x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example InitSpiaGpio(); // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT; // Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2803x_PieCtrl.c file. InitPieCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2803x_DefaultIsr.c. // This function is found in DSP2803x_PieVect.c. InitPieVectTable(); // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.EPWM1_INT = &epwm1_timer_isr; PieVectTable.EPWM2_INT = &epwm2_timer_isr; PieVectTable.EPWM3_INT = &epwm3_timer_isr; EDIS; // This is needed to disable write to EALLOW protected registers // Step 4. Initialize all the Device Peripherals: // This function is found in DSP2803x_InitPeripherals.c // InitPeripherals(); // Not required for this example InitEPwmTimer(); // For this example, only initialize the ePWM Timers // Step 5. User specific code, enable interrupts: // Copy time critical code and Flash setup code to RAM // This includes the following ISR functions: epwm1_timer_isr(), epwm2_timer_isr() // epwm3_timer_isr and and InitFlash(); // The RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart // symbols are created by the linker. Refer to the F2808.cmd file. memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize); // Call Flash Initialization to setup flash waitstates // This function must reside in RAM InitFlash(); // Initalize counters: EPwm1TimerIntCount = 0; EPwm2TimerIntCount = 0; EPwm3TimerIntCount = 0; LoopCount = 0; // Enable CPU INT3 which is connected to EPWM1-3 INT: IER |= M_INT3; // Enable EPWM INTn in the PIE: Group 3 interrupt 1-3 PieCtrlRegs.PIEIER3.bit.INTx1 = PWM1_INT_ENABLE; PieCtrlRegs.PIEIER3.bit.INTx2 = PWM2_INT_ENABLE; PieCtrlRegs.PIEIER3.bit.INTx3 = PWM3_INT_ENABLE; // Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM // Step 6. IDLE loop. Just sit and loop forever (optional): EALLOW; GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; EDIS; // Step 4. Initialize all the Device Peripherals: // This function is found in DSP2803x_InitPeripherals.c // InitPeripherals(); // Not required for this example spi_fifo_init(); // Initialize the Spi FIFO spi_init(); // init SPI // Step 5. User specific code: // Interrupts are not used in this example. sdata = 0x00AA; for(;;) { /* * 2803x is the Master, master will just transmit data */ // Transmit data spi_xmit(sdata); //sdata++; } } void error(void) { __asm(" ESTOP0"); // Test failed!! Stop! for (;;); } void spi_init() { SpiaRegs.SPICCR.all =0x000F; // Reset on, rising edge, 16-bit char bits SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase, // enable talk, and SPI int disabled. SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; // Set to master SpiaRegs.SPIBRR =0x007F; SpiaRegs.SPICCR.all =0x009F; // Relinquish SPI from Reset SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission } void spi_xmit(Uint16 a) { SpiaRegs.SPITXBUF=a; } void spi_fifo_init() { // Initialize SPI FIFO registers SpiaRegs.SPIFFTX.all=0xE040; SpiaRegs.SPIFFRX.all=0x2044; SpiaRegs.SPIFFCT.all=0x0; } void InitEPwmTimer() { EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks EDIS; InitEPwm1Gpio(); InitEPwm2Gpio(); InitEPwm3Gpio(); // Setup Sync EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through // Allow each timer to be sync'ed EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm1Regs.TBPHS.half.TBPHS = 100; EPwm2Regs.TBPHS.half.TBPHS = 200; EPwm3Regs.TBPHS.half.TBPHS = 300; EPwm1Regs.TBPRD = PWM1_TIMER_TBPRD; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; // Enable INT EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event EPwm2Regs.TBPRD = PWM2_TIMER_TBPRD; EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event EPwm2Regs.ETSEL.bit.INTEN = PWM2_INT_ENABLE; // Enable INT EPwm2Regs.ETPS.bit.INTPRD = ET_2ND; // Generate INT on 2nd event EPwm3Regs.TBPRD = PWM3_TIMER_TBPRD; EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event EPwm3Regs.ETSEL.bit.INTEN = PWM3_INT_ENABLE; // Enable INT EPwm3Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced EDIS; } // This ISR MUST be executed from RAM as it will put the Flash into Sleep // Interrupt routines uses in this example: __interrupt void epwm1_timer_isr(void) { // Put the Flash to sleep EALLOW; FlashRegs.FPWR.bit.PWR = FLASH_SLEEP; EDIS; EPwm1TimerIntCount++; // Clear INT flag for this timer EPwm1Regs.ETCLR.bit.INT = 1; // Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; } // This ISR MUST be executed from RAM as it will put the Flash into Standby __interrupt void epwm2_timer_isr(void) { EPwm2TimerIntCount++; // Put the Flash into standby EALLOW; FlashRegs.FPWR.bit.PWR = FLASH_STANDBY; EDIS; // Clear INT flag for this timer EPwm2Regs.ETCLR.bit.INT = 1; // Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; } __interrupt void epwm3_timer_isr(void) { Uint16 i; EPwm3TimerIntCount++; // Short Delay to simulate some ISR Code for(i = 1; i < 0x01FF; i++) {} // Clear INT flag for this timer EPwm3Regs.ETCLR.bit.INT = 1; // Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; } //=========================================================================== // No more. //===========================================================================
And
//########################################################################### // // FILE: DSP2803x_Spi.c // // TITLE: DSP2803x SPI Initialization & Support Functions. // //########################################################################### // $TI Release: F2803x C/C++ Header Files and Peripheral Examples V127 $ // $Release Date: March 30, 2013 $ //########################################################################### #include "DSP2803x_Device.h" // DSP2803x Headerfile Include File #include "DSP2803x_Examples.h" // DSP2803x Examples Include File //--------------------------------------------------------------------------- // InitSPI: //--------------------------------------------------------------------------- // This function initializes the SPI(s) to a known state. // void InitSpi(void) { // Initialize SPI-A //tbd... } //--------------------------------------------------------------------------- // Example: 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 SPICLK operation. // Only one GPIO pin should be enabled for SPISTE operation. // Comment out other unwanted lines. void InitSpiGpio() { InitSpiaGpio(); #if DSP28_SPIB InitSpibGpio(); #endif // endif DSP28_SPIB } 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.GPIO5 = 0; // Enable pull-up on GPIO5 (SPISIMOA) GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pull-up on GPIO17 (SPISOMIA) // GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pull-up on GPIO3 (SPISOMIA) GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pull-up on GPIO18 (SPICLKA) GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // Enable pull-up on GPIO19 (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.GPAQSEL1.bit.GPIO5 = 3; // Asynch input GPIO5 (SPISIMOA) GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA) // GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3; // Asynch input GPIO3 (SPISOMIA) GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA) GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 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.GPAMUX1.bit.GPIO5 = 2; // Configure GPIO5 as SPISIMOA GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA // GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 2; // Configure GPIO3 as SPISOMIA GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA /* * For SPI input to Channel 1*/ GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pull-up on GPIO19 (SPISTEA) GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3; GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 2; /* * For SPI input to Channel 2*/ //GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Enable pull-up on GPIO19 (SPISTEA) //GpioCtrlRegs.GPAQSEL1.bit.GPIO4 = 3; //GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 2; //*/ /* * For SPI input to Channel 3 GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pull-up on GPIO19 (SPISTEA) GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3; GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 2; */ /* * For SPI input to Channel 4 GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pull-up on GPIO19 (SPISTEA) GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3; GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 2; */ // GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pull-up on GPIO19 (SPISTEA) // GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pull-up on GPIO19 (SPISTEA) // GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pull-up on GPIO19 (SPISTEA) // GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; EDIS; } #if DSP28_SPIB void InitSpibGpio() { 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.GPIO12 = 0; // Enable pull-up on GPIO12 (SPISIMOB) // GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pull-up on GPIO24 (SPISIMOB) GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0; // Enable pull-up on GPIO13 (SPISOMIB) // GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // Enable pull-up on GPIO25 (SPISOMIB) GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pull-up on GPIO14 (SPICLKB) // GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // Enable pull-up on GPIO26 (SPICLKB) GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pull-up on GPIO15 (SPISTEB) // GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // Enable pull-up on GPIO27 (SPISTEB) /* 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.GPIO12 = 3; // Asynch input GPIO12 (SPISIMOB) // GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3; // Asynch input GPIO24 (SPISIMOB) GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // Asynch input GPIO13 (SPISOMIB) // GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // Asynch input GPIO25 (SPISOMIB) GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3; // Asynch input GPIO14 (SPICLKB) // GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; // Asynch input GPIO26 (SPICLKB) GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // Asynch input GPIO15 (SPISTEB) // GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3; // Asynch input GPIO27 (SPISTEB) /* Configure SPI-B pins using GPIO regs*/ // This specifies which of the possible GPIO pins will be SPI functional pins. // Comment out other unwanted lines. GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 3; // Configure GPIO12 as SPISIMOB // GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3; // Configure GPIO24 as SPISIMOB GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 3; // Configure GPIO13 as SPISOMIB // GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3; // Configure GPIO25 as SPISOMIB GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3; // Configure GPIO14 as SPICLKB // GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 3; // Configure GPIO26 as SPICLKB GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 3; // Configure GPIO15 as SPISTEB // GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 3; // Configure GPIO27 as SPISTEB EDIS; } #endif //endif DSP28_SPIB //=========================================================================== // End of file. //===========================================================================
Thanks!