Esempio n. 1
0
int main(void)
{

  WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer

  if (CALBC1_16MHZ==0xFF)					// If calibration constant erased
  {
    while(1);                               // do not load, trap CPU!!
  }

  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_16MHZ;                   // Set range
  DCOCTL = CALDCO_16MHZ;                    // Set DCO step + modulation*/

  //configure ACLK to use clock crystal
  //DIVA is the ACLK divider.
  //When DIVA0 and DIVA1 Bits are zero, ACLK is divided
  //by 1
  BCSCTL1 &= ~(DIVA0 | DIVA1);

  //No touch, BCSTL2, only handles SMCLK and MCLK

  //clear the Low Freq XTal 1 sel bits 0 and 1 to select
  //32768Hz clk for LFXT1 oscillator
  //This also routes LFXT1 into ACLK. if LFXT1Sx = 10, ACLK uses VLOCLK instead
  BCSCTL3 &= ~(LFXT1S0 | LFXT1S1);

  //set XCAP to 11 to select a 12.5pF crystal capacitance
  BCSCTL3 |= XCAP1 | XCAP0;

BUTTONS_INIT:
  //configure P1.3 to switch on falling edge interrupts
  //force the pin to use the typical GPIO
  P1SEL  &= ~(FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON);
  P1SEL2 &= ~(FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON);

  //select HIGH to LOW transition
  P1IES |= FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON;
  P1IE  |= FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON;
  P1IFG &= ~(FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON);
  P1DIR &= ~(FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON);
  P1REN |= FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON;

  lcd_init();
  display_reset();

//FUNCTION_GENERATOR_INIT:
  fg_init();

  //why not, just go back to home clear everything again

   P1IFG |= FREQ_SEL_BUTTON;

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}
Esempio n. 2
0
void display_init(u08 clock_div)
{
    // LED/RESET are output, CLK+MOSI
    DDRB  |= _BV(LED_PIN) | _BV(RST_PIN) | _BV(CLK_PIN) | _BV(MOSI_PIN);
    // MISO is input
    DDRB  &= ~_BV(MISO_PIN);
    // LED=HI, MISO=Pullop
    PORTB |= _BV(LED_PIN) | _BV(MISO_PIN);
    PORTB &= ~(_BV(RST_PIN) | _BV(CLK_PIN));
    
    // CS is output and HI
    DDRD  |= _BV(CS_PIN);
    PORTD |= _BV(CS_PIN);

    // make sure SS_PIN is pull up
    if(!(DDRB & (1<<SS_PIN))) //SS is input
    {
        PORTB |= (1<<SS_PIN); //pull-up on
    }

    //init hardware spi
    switch(clock_div)
    {
    case 2:
      SPCR = (1<<SPE)|(1<<MSTR); //enable SPI, Master, clk=Fcpu/4
      SPSR = (1<<SPI2X); //clk*2 = Fcpu/2
      break;
    case 4:
      SPCR = (1<<SPE)|(1<<MSTR); //enable SPI, Master, clk=Fcpu/4
      SPSR = (0<<SPI2X); //clk*2 = off
      break;
    case 8:
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //enable SPI, Master, clk=Fcpu/16
      SPSR = (1<<SPI2X); //clk*2 = Fcpu/8
      break;
    case 16:
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //enable SPI, Master, clk=Fcpu/16
      SPSR = (0<<SPI2X); //clk*2 = off
      break;
    case 32:
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1); //enable SPI, Master, clk=Fcpu/64
      SPSR = (1<<SPI2X); //clk*2 = Fcpu/32
      break;
    }
    
    display_reset();
}
Esempio n. 3
0
__interrupt void read_buttons(void)
{
	if(!debounce()) return;

    //wave state can be 0, 1, 2
	// 0 is SINE
	// 1 is SAW TOOTH
	// 2 is SQUARE

	static u8 wave_type = 1;

	//frequency can be 1, 2, 3, 4, 5
	//1 100Hz
	//2 200Hz
	//3 300Hz
	//4 400Hz
	//5 500Hz
	static u8 frequency = 1;
	//duty cycle can be 1, 2, 3, 4, 5, 6, 7, 8, 9
	//for 10, 20, 30, 40, 50.. % duty cycle
	static u8 duty_cycle = 10;

	u8 flags = P1IFG & (FREQ_SEL_BUTTON | WAVE_SEL_BUTTON | DUTY_SEL_BUTTON);

	display_reset();

	switch(flags)
	{
	case WAVE_SEL_BUTTON:
		LCD_FIRST_LINE();
		lcd_print("Set Wave Type");

		if (wave_type >= 3) wave_type = 1;
		else wave_type++;

		LCD_SECOND_LINE();

		switch(wave_type)
		{
		case 1:
			lcd_print("Square");
			break;
		case 2:
			lcd_print("Tri");
			break;
		case 3:
			lcd_print("Sine");
			break;
		}

        fg_change_waveform(wave_type);

		P1IFG &= ~WAVE_SEL_BUTTON;
		break;

	case FREQ_SEL_BUTTON:
		LCD_FIRST_LINE();

		if (frequency >= 5) { frequency = 1; }
		else {frequency ++; }

        lcd_print("Freq:");
        LCD_SECOND_LINE();
        print_frequency(frequency);

        fg_change_frequency(frequency);

		P1IFG &= ~FREQ_SEL_BUTTON;
		break;

	case DUTY_SEL_BUTTON:
		lcd_print("Duty:");
		P1IFG &= ~DUTY_SEL_BUTTON;
		break;
	default:
		P1IFG = 0;
	}

}
Esempio n. 4
0
void display_init(void)
{
  display_reset();
  if ( (md380_radio_config_bank2[0x1d] & 3) != 2 && (md380_radio_config_bank2[0x1d] & 3) != 3 ) {
    md380_Write_Command_2display(0x11);
    OSTimeDly(120);
    md380_Write_Command_2display(0xB1);
    md380_Write_Data_2display(5);
    md380_Write_Data_2display(0x3C);
    md380_Write_Data_2display(0x3C);
    md380_Write_Command_2display(0xB2);
    md380_Write_Data_2display(5);
    md380_Write_Data_2display(0x3C);
    md380_Write_Data_2display(0x3C);
    md380_Write_Command_2display(0xB3);
    md380_Write_Data_2display(5);
    md380_Write_Data_2display(0x3C);
    md380_Write_Data_2display(0x3C);
    md380_Write_Data_2display(5);
    md380_Write_Data_2display(0x3C);
    md380_Write_Data_2display(0x3C);
    md380_Write_Command_2display(0xB4);
    md380_Write_Data_2display(3);
    md380_Write_Command_2display(0xC0);
    md380_Write_Data_2display(0x28);
    md380_Write_Data_2display(8);
    md380_Write_Data_2display(4);
    md380_Write_Command_2display(0xC1);
    md380_Write_Data_2display(0xC0);
    md380_Write_Command_2display(0xC2);
    md380_Write_Data_2display(0xD);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xC3);
    md380_Write_Data_2display(0x8D);
    md380_Write_Data_2display(0x2A);
    md380_Write_Command_2display(0xC4);
    md380_Write_Data_2display(0x8D);
    md380_Write_Data_2display(0xEE);
    md380_Write_Command_2display(0xC5);
    md380_Write_Data_2display(0x1A);
    md380_Write_Command_2display(0x36);
    md380_Write_Data_2display(8);
    md380_Write_Command_2display(0xE0);
    md380_Write_Data_2display(4);
    md380_Write_Data_2display(0xC);
    md380_Write_Data_2display(7);
    md380_Write_Data_2display(0xA);
    md380_Write_Data_2display(0x2E);
    md380_Write_Data_2display(0x30);
    md380_Write_Data_2display(0x25);
    md380_Write_Data_2display(0x2A);
    md380_Write_Data_2display(0x28);
    md380_Write_Data_2display(0x26);
    md380_Write_Data_2display(0x2E);
    md380_Write_Data_2display(0x3A);
    md380_Write_Data_2display(0);
    md380_Write_Data_2display(1);
    md380_Write_Data_2display(3);
    md380_Write_Data_2display(0x13);
    md380_Write_Command_2display(0xE1);
    md380_Write_Data_2display(4);
    md380_Write_Data_2display(0x16);
    md380_Write_Data_2display(6);
    md380_Write_Data_2display(0xD);
    md380_Write_Data_2display(0x2D);
    md380_Write_Data_2display(0x26);
    md380_Write_Data_2display(0x23);
    md380_Write_Data_2display(0x27);
    md380_Write_Data_2display(0x27);
    md380_Write_Data_2display(0x25);
    md380_Write_Data_2display(0x2D);
    md380_Write_Data_2display(0x3B);
    md380_Write_Data_2display(0);
    md380_Write_Data_2display(1);
    md380_Write_Data_2display(4);
    md380_Write_Data_2display(0x13);
    md380_Write_Command_2display(0x3A);
    md380_Write_Data_2display(5);
    md380_Write_Command_2display(0x36);
    if ( (md380_radio_config_bank2[0x1d] & 3) == 1 )
      md380_Write_Data_2display(200);
    else
      md380_Write_Data_2display(8);
    md380_Write_Command_2display(0x29);
    md380_Write_Command_2display(0x2C);
  }else{
    md380_Write_Command_2display(0x3A);
    md380_Write_Data_2display(5);
    md380_Write_Command_2display(0x36);
    if ( (md380_radio_config_bank2[0x1d] & 3) == 3 )
      md380_Write_Data_2display(8);
    else
      md380_Write_Data_2display(0x48);
    md380_Write_Command_2display(0xFE);
    md380_Write_Command_2display(0xEF);
    md380_Write_Command_2display(0xB4);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xFF);
    md380_Write_Data_2display(0x16);
    md380_Write_Command_2display(0xfd);
    if ( (md380_radio_config_bank2[0x1d] & 3) == 3 )
      md380_Write_Data_2display(0x40);
    else
      md380_Write_Data_2display(0x4F);
    md380_Write_Command_2display(0xA4);
    md380_Write_Data_2display(0x70);
    md380_Write_Command_2display(0xE7);
    md380_Write_Data_2display(0x94);
    md380_Write_Data_2display(0x88);
    md380_Write_Command_2display(0xEA);
    md380_Write_Data_2display(0x3A);
    md380_Write_Command_2display(0xED);
    md380_Write_Data_2display(0x11);
    md380_Write_Command_2display(0xE4);
    md380_Write_Data_2display(0xC5);
    md380_Write_Command_2display(0xE2);
    md380_Write_Data_2display(0x80);
    md380_Write_Command_2display(0xA3);
    md380_Write_Data_2display(18);
    md380_Write_Command_2display(0xE3);
    md380_Write_Data_2display(7);
    md380_Write_Command_2display(0xE5);
    md380_Write_Data_2display(0x10);
    md380_Write_Command_2display(0xF0);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xF1);
    md380_Write_Data_2display(0x55);
    md380_Write_Command_2display(0xF2);
    md380_Write_Data_2display(5);
    md380_Write_Command_2display(0xF3);
    md380_Write_Data_2display(0x53);
    md380_Write_Command_2display(0xF4);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xF5);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xF7);
    md380_Write_Data_2display(0x27);
    md380_Write_Command_2display(0xF8);
    md380_Write_Data_2display(0x22);
    md380_Write_Command_2display(0xF9);
    md380_Write_Data_2display(0x77);
    md380_Write_Command_2display(0xFA);
    md380_Write_Data_2display(0x35);
    md380_Write_Command_2display(0xFB);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xFC);
    md380_Write_Data_2display(0);
    md380_Write_Command_2display(0xFE);
    md380_Write_Command_2display(0xEF);
    md380_Write_Command_2display(0xE9);
    md380_Write_Data_2display(0);
    OSTimeDly(20);
    md380_Write_Command_2display(0x11);
    OSTimeDly(130);
    md380_Write_Command_2display(0x29);
    md380_Write_Command_2display(0x2C);
  }
}
Esempio n. 5
0
void display_init(display_t* display)
{
    display_reset(display);
    display->surface = SDL_SetVideoMode(800, 350, 0, SDL_HWSURFACE);
}
Esempio n. 6
0
File: HW5.c Progetto: shn1988110/HW5
int main ()
{
    
    __builtin_disable_interrupts();

// set the CP0 CONFIG register to indicate that
// kseg0 is cacheable (0x3) or uncacheable (0x2)
// see Chapter 2 "CPU for Devices with M4K Core"
// of the PIC32 reference manual
__builtin_mtc0(_CP0_CONFIG, _CP0_CONFIG_SELECT, 0xa4210583);

// no cache on this chip!

// 0 data RAM access wait states
BMXCONbits.BMXWSDRM = 0x0;

// enable multi vector interrupts
INTCONbits.MVEC = 0x1;

// disable JTAG to be able to use TDI, TDO, TCK, TMS as digital
DDPCONbits.JTAGEN = 0;

__builtin_enable_interrupts();


TRISBbits.TRISB7 = 0;       // set up LED1 pin as a digital output
//    int i,a;
//    display_init();
//    for (i = 0; i<10; ++i)
//    {
//        a = 30+i;
//        display_pixel_set(15,a,1);
//        display_draw();
//    }
    char input[100]; 
    int i=0;
    short accels[3]; // accelerations for the 3 axes
    short mags[3]; // magnetometer readings for the 3 axes
    short temp; 
    
    acc_setup();    //initialize accelerometer
	display_init(); //initialize LED screen
    

    
    float xg, yg, zg;

    
    while(1)
    {
    start_position[0] = 0;
    start_position[1] = 0;
    center_position[0] = 32;
    center_position[1] = 64;
    acc_read_register(OUT_X_L_A, (unsigned char *) accels, 6);
    acc_read_register(OUT_X_L_M, (unsigned char *) mags, 6);
    acc_read_register(TEMP_OUT_L, (unsigned char *) &temp, 2);
    
    xg = (float) accels[0]/16000;
    yg = (float) accels[1]/16000;
    zg = (float) accels[2]/16000;
    
    sprintf(input,"x: %.2f y: %.2f z: %.2f ", xg,yg,zg);
    display_reset();
    display_draw();
    display_ggraph(xg,yg);
    while(input[i])
    {

        display_message(input[i]);
        i++;
        start_position[1] = start_position[1]+5;
//        if(start_position[1]+5>128)
//        {start_position[0]+1;}
//        else
//        {start_position[1] = start_position[1]+5;}
    }
    i = 0;
    display_draw();
    _CP0_SET_COUNT(0);
    while(_CP0_GET_COUNT()<5000000)
    {;}
    
    }
	return (0);
}