예제 #1
0
int main(int argc, char const *argv[]) {
  rpiInit();
  FramebufferInitialize();

  _init_vector_table();

  // disable IRQ
  *INTERRUPT_DISABLE_BASIC_IRQS = 0xffffffff;
  *INTERRUPT_DISABLE_IRQS1 = 0xffffffff;
  *INTERRUPT_DISABLE_IRQS2 = 0xffffffff;
  *INTERRUPT_FIQ_CTRL = 0;  // 20c

  _disable_IRQ();

  // set Timer Interrupt
  *INTERRUPT_ENABLE_BASIC_IRQS = 0x01;

  // stop timer
  *TIMER_CONTROL &= 0xffffff00;

  // set timer clock -> 1MHz
  //(0xF9=249: timer clock=250MHz/(249+1))
  *TIMER_PREDIVIDER = 0x000000F9;

  // Timer (100 msec)
  *TIMER_LOAD = 100000 - 1;
  *TIMER_RELOAD = 100000 - 1;

  // clear IRQ flag
  *TIMER_IRQ_CLR = 0;

  // start timer
  *TIMER_CONTROL |= 0x000000A2;

  // enable interrupts
  *INTERRUPT_ENABLE_BASIC_IRQS = 0x01;

  // enable IRQ
  _enable_IRQ();

  while (true) {
    _disable_IRQ();
    if (true == g_interrupt) {
      g_interrupt = false;
      _enable_IRQ();
      redraw();
    } else {
      _enable_IRQ();
    }
  }
  return 0;
}
void displayInit(void)
{
	// SPI Variables
	config.CS_HOLD = false;
	config.WDEL = true;
	config.DFSEL = SPI_FMT_0;
	config.CSNR = 0x00;

	// Sets up the environment
	_enable_IRQ(); // This enables interrupts
	rtiEnableNotification(rtiNOTIFICATION_COMPARE0); // This enables the Real Time Interrupt notification

	// Powers up the display
	gioSetBit(hetPORT1, VCCPIN, 1);

	// Resets the display
	resetDisplay();

	// Initialization commands
	writeData(0x21, commandData); // Extended instruction set control
	writeData(0xB8, commandData); //Set LCD Vop (Contrast)
	writeData(0x04, commandData); //Set Temp coefficent
	writeData(0x14, commandData); //LCD bias mode 1:48 (try 0x13)
	//We must send 0x20 before modifying the display control mode
	writeData(0x20, commandData);
	writeData(0x0C, commandData); //Set display control, normal mode.

	// Clears the display buffer variable
	clearBuffer(WHITE);
}
예제 #3
0
// called by _IRQ_interrupt in startup.s
void IRQ_handler(void) {
  // disable IRQ
  _disable_IRQ();

  if (*INTERRUPT_IRQ_BASIC_PENDING & 0x01 != 0) {
    // Timer interrupt handler
    /* timerIRQ_handler(); */
    g_interrupt = true;
    // clear interrupt flag
    *TIMER_IRQ_CLR = 0;
  }

  // enable IRQ
  _enable_IRQ();
}
예제 #4
0
int initTimer( uint32_t* regAdress){
	int statusInfo = 0; // hold inforamtion over the return values of the subtask
	_disable_interrupts();
	uint32_t * pTemp = regAdress;

	pTemp = (uint8_t*) regAdress +  GPTIMER_TIOCP_CFG;
	*pTemp |= (1<<1);

	pTemp = 0x48200010; //INTCPS_SYSCONFIG
	*pTemp |= (1<<1);

	pTemp = CM_CLKSEL_PER;
	*pTemp &= ~(1<<0);// ~(1<<2); //Timer4: 32 kHz clock (1 = SYSCLOCK)

	pTemp= (uint8_t*) regAdress + GPTIMER_TIER;
	*pTemp |= (1<<1); //Enable overflow interrupt

	pTemp= (uint8_t*) regAdress + GPTIMER_TISR;
	*pTemp = 0x00000003; //Set Interrupt pending = 0

	pTemp= (uint8_t*) regAdress + GPTIMER_TCLR;
	*pTemp &= ~(1<<0);
	*pTemp |= (1<<5); // turn on Prescaler
	*pTemp |= (1<<3); //When Prescaler is on, Divisor is used (Bits 4:2)
	//Register-Value in Bits 4 to 2: Divisor,
	//0: 2 faster
	//1: 4
	//2: 8
	//3: 16
	//4: 32
	//5: 64
	//6: 128
	//7: 256  slower

	pTemp= (uint32_t*) ((uint8_t*) regAdress + GPTIMER_TCRR);
	*pTemp = 0xFFFFFFFF - 10000;

	pTemp= (uint8_t*) regAdress + GPTIMER_TLDR;
	*pTemp = 0xFFFFFFFF - 10000; //1/2 sec  // sieht so aus als würde er das nicht ausführen

	pTemp =  INTCPS_SYSCONFIG;
	*pTemp |= (1<<1);
	*pTemp &= ~(1<<0);

	pTemp = INTCPS_IDLE;
	*pTemp &= ~(1<<0);
	*pTemp &= ~(1<<1);

	pTemp = MIRn_REG0;
	*pTemp = 0xFFFFFFFF;

	pTemp = MIRn_REG2;
	*pTemp = 0xFFFFFFFF;

	//MIRn_REG1 = 0xFFFFFFFB;
	pTemp = MIRn_REG1;
	*pTemp &= ~0x100; // all interrupts enable TEST

	pTemp = INTCPS_ILR40;  //
	*pTemp &= ~(1<<0); //IRQ enable and FIQ disable

	_enable_interrupts();
	_enable_IRQ();

	pTemp = ((uint8_t*) regAdress) + GPTIMER_TCLR ;
	*pTemp |= (1<<1);//Autoreload mode: nach Overflow in TCRR wieder bei 0 anfangen
	*pTemp &= ~(1<<10);//no trigger
	*pTemp |= (1<<12);//toggle modulation
	*pTemp &= ~(1<<11);//no trigger

	return startTimer(GPTIMER2);
}
예제 #5
0
void main(void)
{
/* USER CODE BEGIN (3) */
#if 1
    /** - Initialize LIN/SCI2 Routines to receive Command and transmit data */
    sciInit();

    UARTprintf("--> ITS SDCARD H/W Test V3.0<--\r\n ");
    UARTprintf("Type \'help\' for help.\r\n");
    UARTprintf("TI project modified for ITS. (Pradeepa) \r\n");

    /* Initialize RTI driver */
    rtiInit();
    /* Enable RTI Compare 3 interrupt notification */
    rtiEnableNotification(rtiNOTIFICATION_COMPARE3);
    /* Enable IRQ - Clear I flag in CPS register */
    _enable_IRQ();
    /* Start RTI Counter Block 1 */
    rtiStartCounter(rtiCOUNTER_BLOCK1);

    mmcSelectSpi(mibspiPORT5, mibspiREG5);  // SD card is on the SPI5

	safeti_SRAM_ECC_ERROR_FORCING_1BIT();
	safeti_SRAM_ECC_ERROR_FORCING_2BIT();
	safeti_FEE_ECC_DATA_CORR_MODE();
	safeti_FEE_ECC_TEST_MODE_1BIT();
	safeti_FEE_ECC_TEST_MODE_2BIT();
	safeti_FEE_ECC_SYN_REPORT_MODE();
	safeti_FEE_ECC_MALFUNCTION_MODE1();
	safeti_FEE_ECC_MALFUNCTION_MODE2();
	safeti_FLASH_ECC_ADDR_TAG_REG_MODE();
	safeti_FLASH_ECC_TEST_MODE_1BIT();
	safeti_FLASH_ECC_TEST_MODE_2BIT();
	safeti_PSCON_SELF_TEST();
	safeti_PSCON_ERROR_FORCING();
	safeti_PSCON_SELF_TEST_ERROR_FORCING();
	safeti_PSCON_PMA_TEST();
	safeti_EFUSE_SELF_TEST_STUCK_AT_ZERO();
	safeti_EFUSE_SELF_TEST_ECC();
	safeti_SRAM_RADECODE_DIAGNOSTICS();
	safeti_SRAM_PAR_ADDR_CTRL_SELF_TEST();
	safeti_SRAM_ECC_ERROR_PROFILING();
	safeti_FLASH_ADDRESS_PARITY_SELF_TEST();
	safeti_CCMR4F_SELF_TEST();
	safeti_CCMR4F_ERROR_FORCING_TEST();
	safeti_CCMR4F_SELF_TEST_ERROR_FORCING();

    SD_Test();

#endif

#if 0
uint16_t tx_buf = 5;
uint16_t rx_buf;



mibspiInit();
//while(!(mibspiIsTransferComplete(mibspiREG5, 0)));

mibspiPORT5-> DCLR = 0x00;
//mibspiEnableLoopback(mibspiREG5, Digital_Lbk);
mibspiSetData(mibspiREG5, 0, &tx_buf);

mibspiTransfer(mibspiREG5, 0);

while(!(mibspiIsTransferComplete(mibspiREG5, 0)));

mibspiGetData(mibspiREG5,0,&rx_buf);

mibspiPORT5-> DCLR = 0x01;
//mibspiEnableLoopback(mibspiREG5, Digital_Lbk);
mibspiSetData(mibspiREG5, 0, &tx_buf);

mibspiTransfer(mibspiREG5, 0);

while(!(mibspiIsTransferComplete(mibspiREG5, 0)));

mibspiGetData(mibspiREG5,0,&rx_buf);
#endif
    while(1);

/* USER CODE END */
}
예제 #6
0
void main(void)
{
/* USER CODE BEGIN (3) */

	// Some declarations
	unsigned int vol_num, num_trigs, trig_time, m, n;
	FILE *TMS_data_file;

	// Initialize some variables used in ISRs and initialize hardware state.
	irq_count = 0;
	train_count = 0;
	trig_in_train_count = 0;
	TMS_trig_in_progress = 0;

	// Read data from a file containing all the TMS delivery information.
    TMS_data_file = fopen("C:\\Users\\BIC\\workspace_v6_0\\Blinky\\TMS_trig_files\\TMS_trig_data","r");
    if(TMS_data_file == NULL){
      printf("\n Can't open TMS_trig_data \n");
      fflush(stdout);
      exit (1);
    }

    m = 0;
    while(fscanf(TMS_data_file, "%u %u", &vol_num, &num_trigs) != EOF){
      // Read the volume number for trigger train and the number of triggers in the train.
      TMS[m].trig_image_vol = vol_num;
      TMS[m].num_trigs_in_train = num_trigs;
      for(n=0; n<num_trigs; n++){
        fscanf(TMS_data_file, "%u", &trig_time);
        TMS[m].trig_time[n] = trig_time - TRIG_TO_TMS_PULSE_DELAY;  // Account for TMS unit delays. See TMS_scanner_synch.h
                                                                    // for more detail about this delay.

      }
      m = m + 1;
    }
    fclose(TMS_data_file);
    printf ("Ready to send triggers to TMS unit. \n");
    fflush(stdout);

	// Initialize rti, gio and associated hardware interrupts.
	rtiInit();
	gioInit();
	gioSetDirection(hetPORT1, 0xFFFFFFFF);

	/* The following line sets pins A0 and A2 of GIO PORTA to output and pin A7 of
    GIO PORTA to input. A0 is used for output to the TMS unit. A7 is used for input
	from the MRI TTL pulse. A2 controls an LED, used for testing, on the board. */
	gioSetDirection(gioPORTA, 0x00000005);

	rtiEnableNotification(rtiNOTIFICATION_COMPARE0);
	_enable_interrupt_();
	_enable_IRQ();

	// Start the rti counter.
	rtiStartCounter(rtiCOUNTER_BLOCK0);  // !!!!! Wont need this since I will be starting the counter in the gioNotification ISR
	                                     // and since the counter must be stopped before the reset done in the gioNotification ISR.

	// Initialize hardware state.
	gioSetPort(hetPORT1, 0x00000000); // Set output to D11 LED initially to low.

	// Initialize prescaler so that time units will be microseconds. Using 99 sets
	// the base frequency to 100th of the 100MHz operating frequency. See above
	// lines which set pulse_length and scanner_irq_to_gio_out_delay times.
	rtiREG1->CNT[0U].CPUCx = 99;
	//printf ("RTICPUC0: %d \n", rtiREG1->CNT[0U].CPUCx);

	while(1);

/* USER CODE END */
}