Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
5.4 kB
5
Indexable
Never
//###########################################################################
//
// FILE:    Flax_DelfinoEvbGpioToggle.c
//
// TITLE:   DSP2833x Device GPIO toggle test program. 
// This template was written by Eli Flaxer for DelfinoEvb Evaluation Board
//
//
//###########################################################################
// $TI Release: 2833x/2823x Header Files and Peripheral Examples V133 $
// $Release Date: June 8, 2012 $
//###########################################################################

#include "DSP28x_Project.h"     // Device Header file and Examples Include File
#include "LCD2x16Display.h"

void DelfinoEvbGpioSelect(void);
void MyMainProg(void);

void MyLedTrain_withSW8(void); // My program for exercise 2- question 3

void MyLedSwitches(void); // My program for exercise 2- question 4

int32 MyDelayLoop = 200000L;

/*****************************************************************************/
void GpioCSetClear(int k,int x)
{
	if (x)
		GpioDataRegs.GPCSET.all = (1L<<k);
	else
		GpioDataRegs.GPCCLEAR.all = (1L<<k);
}
/*****************************************************************************/
void main(void)
{

// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
   InitSysCtrl();
   
// Step 2. Initalize GPIO: 
// This example function is found in the DSP2833x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();  // Skipped for this example
 
// For this example use the following configuration:
   DelfinoEvbGpioSelect();

// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.
   InitPieVectTable();

	
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
	
// Step 5. User specific code:
	
    // This example uses DATA, SET, CLEAR and TOGGEL registers to toggle I/O's
   MyMainProg();
}
/*****************************************************************************/
void MyMainProg(void)
{ 
   GpioDataRegs.GPASET.bit.GPIO27 = 1;		// Turn on the buzzer
   DELAY_US(200000);
   GpioDataRegs.GPACLEAR.bit.GPIO27 = 1;	// Turn off the buzzer

//   BackLightLCD(1);
//   InItLCD();
//   DELAY_US(10000);
//   ClearLCD();
//   PrintLCD("AFEKA LAB");

   MyLedSwitches(); // My program for exercise 2- question 4

   MyLedTrain_withSW8(); // My program for exercise 2- question 3


}
/*****************************************************************************/
void DelfinoEvbGpioSelect(void)
{
    EALLOW;

	GpioCtrlRegs.GPAMUX1.all = 0x00000000;  	// All GPIO
	GpioCtrlRegs.GPAMUX2.all = 0x00000000;  	// All GPIO

    GpioCtrlRegs.GPADIR.all = 0x0000000F;   	// Outputs 4 Leds
    GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;   		// Buzzer
    GpioCtrlRegs.GPBDIR.all = 0x07FF0000;   	// Outputs LCD 8 Bus 3 Control
    //GpioCtrlRegs.GPBDIR.all = 0x07FF??00;   	// Extended Bus Direction GPIO40-GPIO47 KB
    //GpioCtrlRegs.GPCDIR.all = 0x0000FFFF;   	// Outputs 8 Leds 4 TP 4 TestLed
    //GpioCtrlRegs.GPCDIR.all = 0x000?FFFF;   	// Extended Bus Direction GPIO80-GPIO83 Button

    //GpioCtrlRegs.GPBPUD.all = 0x0000FF00;   	// Extended Bus Pull-Up Resistors

    // addition for experiment 2
    GpioCtrlRegs.GPCMUX1.all = 0x00000000; // ALL GPIO
    GpioCtrlRegs.GPCDIR.all = 0x0000FF00; // GPIO 72-79 are outputs

    EDIS;
}
/*****************************************************************************/
void MyLedTrain_withSW8 (void) // My program for exercise 2- question 3
{
	long i;
	long j = (1<<8)-1<<8;
	i = 0x00000080; 							// initial condition for SW8=1
	if (GpioDataRegs.GPADAT.bit.GPIO12 == 0)
		i = 0x00010000; 						// initial condition for SW8=0
	while(1)
	{
	  GpioDataRegs.GPCSET.all = i;				// set the Led i is currently pointing to
	  GpioDataRegs.GPCCLEAR.all = j&(~i);		// clear other the other Led not pointed to by i
	  DELAY_US(500000L);
	  if (GpioDataRegs.GPADAT.bit.GPIO12 == 1) 	//running check for state if SW8 with appropriate operations
	  { if (i == 0x00008000)
		  	  		  {i = 0x00000080;}
		  	  i = i<<1;}
	  else
	  {
		  if (i == 0x00000100)
		  {i = 0x00010000;}
			  i = i>>1;
	  }
	}
}
/*****************************************************************************/
void MyLedSwitches(void) // My program for exercise 2- question 4
{
	while(1)
	{
		GpioDataRegs.GPCSET.all = (0x0000FF00)&(GpioDataRegs.GPADAT.all);
		DELAY_US(250000);
		GpioDataRegs.GPCCLEAR.all=0x0000FF00;
		DELAY_US(250000);
	}
}