Exemplo n.º 1
0
void vInitialiseTimerForIntQueueTest( void )
{
const uint32_t ulDivider = 128UL, ulTCCLKS = 3UL;

	/* Enable the TC clocks. */
	PMC->PMC_PCER0 = 1 << ID_TC0;
	PMC->PMC_PCER0 = 1 << ID_TC1;

	/* Configure TC0 channel 0 for a tmrTIMER_0_FREQUENCY frequency and trigger
	on RC compare. */
	TC_Configure( TC0, tmrTC0_CHANNEL_0, ulTCCLKS | TC_CMR_CPCTRG );
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_RC = BOARD_MCK / ( tmrTIMER_0_FREQUENCY * ulDivider );
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_IER = TC_IER_CPCS;

	/* Configure TC0 channel 1 for a tmrTIMER_1_FREQUENCY frequency and trigger
	on RC compare. */
	TC_Configure( TC0, tmrTC0_CHANNEL_1, ulTCCLKS | TC_CMR_CPCTRG );
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_RC = BOARD_MCK / ( tmrTIMER_1_FREQUENCY * ulDivider );
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_IER = TC_IER_CPCS;

	/* Configure TC1 channel 0 tmrTIMER_2_FREQUENCY frequency and trigger on
	RC compare. */
	TC_Configure( TC1, tmrTC1_CHANNEL_0, ulTCCLKS | TC_CMR_CPCTRG );
	TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_RC = BOARD_MCK / ( tmrTIMER_2_FREQUENCY * ulDivider );
	TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_IER = TC_IER_CPCS;

	/* Enable interrupts and start the timers. */
	IRQ_ConfigureIT( ID_TC0, tmrLOWER_PRIORITY, prvTC0_Handler );
	IRQ_ConfigureIT( ID_TC1, tmrHIGHER_PRIORITY, prvTC1_Handler );
	IRQ_EnableIT( ID_TC0 );
	IRQ_EnableIT( ID_TC1 );
	TC_Start( TC0, tmrTC0_CHANNEL_0 );
	TC_Start( TC0, tmrTC0_CHANNEL_1 );
	TC_Start( TC1, tmrTC1_CHANNEL_0 );
}
//------------------------------------------------------------------------------
/// Invoked after the USB driver has been initialized. By default, configures
/// the UDP/UDPHS interrupt.
//------------------------------------------------------------------------------
void USBDCallbacks_Initialized(void)
{
#if defined(BOARD_USB_UDP)
    // Configure and enable the UDP interrupt
    IRQ_ConfigureIT(AT91C_ID_UDP, USB_PRIORITY, USBD_InterruptHandler);
    IRQ_EnableIT(AT91C_ID_UDP);

#elif defined(BOARD_USB_UDPHS)
    // Configure and enable the UDPHS interrupt
    IRQ_ConfigureIT(AT91C_ID_UDPHS, USB_PRIORITY, USBD_InterruptHandler);
    IRQ_EnableIT(AT91C_ID_UDPHS);
#else
    #error Unsupported controller.
#endif
}
Exemplo n.º 3
0
void usb_init() {
  // If they are present, configure Vbus & Wake-up pins
  unsigned int priority = 0;
  #ifdef AT91C_ID_PIOD_E
    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOD_E;
    AT91C_BASE_PIOD->PIO_ISR;
    AT91C_BASE_PIOD->PIO_IDR = 0xFFFFFFFF;
    AT91C_BASE_PIOE->PIO_ISR;
    AT91C_BASE_PIOE->PIO_IDR = 0xFFFFFFFF;
    IRQ_ConfigureIT(AT91C_ID_PIOD_E, priority, PIO_IT_InterruptHandler);
    IRQ_EnableIT(AT91C_ID_PIOD_E);
  #endif

  // If there is on board power, switch it off
  #ifdef PIN_USB_POWER_ENB
  { const Pin pinUsbPwr = PIN_USB_POWER_ENB;
    PIO_Configure(&pinUsbPwr, 1);
  }
  #endif
  
  // BOT driver initialization
  CDCDSerialDriver_Initialize();

  // connect if needed
  VBUS_CONFIGURE();

  // Connect pull-up, wait for configuration
  USBD_Connect();
}
/*
 * The application must provide a function that configures a peripheral to
 * create the FreeRTOS tick interrupt, then define configSETUP_TICK_INTERRUPT()
 * in FreeRTOSConfig.h to call the function.  This file contains a function
 * that is suitable for use on the Atmel SAMA5.
 */
void vConfigureTickInterrupt( void )
{
	/* NOTE:  The PIT interrupt is cleared by the configCLEAR_TICK_INTERRUPT()
	macro in FreeRTOSConfig.h. */

	/* Enable the PIT clock. */
	PMC->PMC_PCER0 = 1 << ID_PIT;

	/* Initialize the PIT to the desired frequency - specified in uS. */
	PIT_Init( 1000000UL / configTICK_RATE_HZ, BOARD_MCK / 1000000 );

	/* Configure interrupt on PIT.  Note this is on the system interrupt, which
	is shared with other system peripherals, so System_Handler() must be
	installed in place of FreeRTOS_Tick_Handler() if other system handlers are
	required.  The tick must be given the lowest priority (0 in the SAMA5 AIC) */
	IRQ_ConfigureIT( ID_PIT, AIC_SMR_SRCTYPE_EXT_POSITIVE_EDGE, FreeRTOS_Tick_Handler );
	/* See commend directly above IRQ_ConfigureIT( ID_PIT, 0, System_Handler ); */
	IRQ_EnableIT( ID_PIT );
	PIT_EnableIT();

	/* Enable the pit. */
	PIT_Enable();

	/* Prevent compiler warnings in the case where System_Handler() is not used
	as the handler.  See the comments above the System_Handler() function
	prototype at the top of this file. */
	( void ) System_Handler;
}
Exemplo n.º 5
0
void pot_init(void) {

    //sets up interrupts to trigger on every sucessful conversion
    IRQ_ConfigureIT(AT91C_ID_ADC, 0, ISR_ADC);

    //initilize ADC
    ADC_Initialize(AT91C_BASE_ADC,
            AT91C_ID_ADC,
            AT91C_ADC_TRGEN_DIS,
            0,
            AT91C_ADC_SLEEP_NORMAL_MODE,
            AT91C_ADC_LOWRES_10_BIT,
            BOARD_MCK,
            BOARD_ADC_FREQ,
            10,
            1200);

    ADC_EnableDataReadyIt(AT91C_BASE_ADC);

    ADC_EnableChannel(AT91C_BASE_ADC, POT_CHANNEL);

    IRQ_EnableIT(AT91C_ID_ADC);

    ADC_EnableIt(AT91C_BASE_ADC, POT_CHANNEL);

    //Starts the adc
    ADC_StartConversion(AT91C_BASE_ADC);
}
Exemplo n.º 6
0
//------------------------------------------------------------------------------
/// Initializes the DMA controller.
/// \param channel Particular channel number
/// \param defaultHandler Using the default dmad interrupt handler.
//------------------------------------------------------------------------------
void DMAD_Initialize(unsigned char channel, unsigned char defaultHandler)
{
    unsigned int status;
    unsigned int flag;
     
    // Enable peripheral clock
#if !defined(at91sam9rl64)    
    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_HDMA;    
#endif    
    
    // Read the channel handler status to ensure the channel is a free channel.
    status = DMA_GetChannelStatus();
    TRACE_INFO ("DMAD_Initialize channel %x  \n\r", channel);
    SANITY_CHECK(!(status & (1 << channel)));
    // Clear any pending interrupts on the channel.
    DMA_GetStatus();
    // Disble the channel.
    DMA_DisableChannel(channel);
    // Disable the interrupt
    flag = 0xffffff;
    DMA_DisableIt(flag);
    // Enable DMA.
    DMA_Enable();
    if(defaultHandler) 
    {
        IRQ_ConfigureIT(AT91C_ID_HDMA, 0, DMAD_Handler);
        IRQ_EnableIT(AT91C_ID_HDMA);
    }
    // Initialize transfer instance.
    dmad.transfers[channel].transferSize = 0;
}
Exemplo n.º 7
0
void initadc(int autos)
{
   // printf("-- Basic ADC Project %s --\n\r", SOFTPACK_VERSION);
  //  printf("-- %s\n\r", BOARD_NAME);
  //  printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
  if(autos)
    autosample=1;
#ifdef PINS_ADC
    PIO_Configure(pinsADC, PIO_LISTSIZE(pinsADC));
#endif

    ADC12_Initialize( AT91C_BASE_ADC,
                    AT91C_ID_ADC,
                    AT91C_ADC_TRGEN_DIS,
                    0,
                    AT91C_ADC_SLEEP_NORMAL_MODE,
                    AT91C_ADC_LOWRES_12_BIT,
                    BOARD_MCK,
                    BOARD_ADC_FREQ,
                    10,
                    1200);
	
	//int i;

/*	for(i=0;i<7;i++)
		if ((1<<chns[i]) & enchan)
	        	    ADC12_EnableChannel(AT91C_BASE_ADC, chns[i]);
*/
	ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_1);
	ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_2);
	ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_3);
//	ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_4);
    ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_5);
//	ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_6);
//	ADC12_EnableChannel(AT91C_BASE_ADC, ADC_NUM_7);
	
	IRQ_ConfigureIT(AT91C_ID_ADC, ADCC0_IRQ_PRIORITY, ADCC0_IrqHandler);
	IRQ_EnableIT(AT91C_ID_ADC);
	
	ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_1);
	ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_2);
	ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_3);
//	ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_4);
    ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_5);
//	ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_6);
//	ADC12_EnableIt(AT91C_BASE_ADC, 1<<ADC_NUM_7);
	
/*
	for(i=0;i<7;i++)
		if ((1<<chns[i]) & enchan)
	        	ADC12_EnableIt(AT91C_BASE_ADC, 1<<chns[i]);
*/
	    conversionDone=0;
	    ADC12_StartConversion(AT91C_BASE_ADC);
	//printf("adc init done\n");
    
}
Exemplo n.º 8
0
void USBDCallbacks_Initialized( void )
{
	/* CDC specific re-implementation of weak callback function.  Invoked after
	the USB driver has been initialised. By default, configures the UDP/UDPHS
	interrupt.  The interrupt priority is set to the highest to ensure the
	interrupt nesting tests interfer as little as possible with the USB. */
	IRQ_ConfigureIT( ID_UDPHS, 7, USBD_IrqHandler );
	IRQ_EnableIT( ID_UDPHS );
}
//------------------------------------------------------------------------------
/// Invoked after the USB driver has been initialized. By default, configures
/// the UDP/UDPHS interrupt.
//------------------------------------------------------------------------------
void USBDCallbacks_Initialized(void)
{
#if defined(CHIP_USB_UDP)
    // Configure and enable the UDP interrupt
    IRQ_ConfigureIT(AT91C_ID_UDP, 0, USBD_IrqHandler);
    IRQ_EnableIT(AT91C_ID_UDP);

#elif defined(CHIP_USB_UDPHS)
    // Configure and enable the UDPHS interrupt
    IRQ_ConfigureIT(AT91C_ID_UDPHS, 0, USBD_IrqHandler);
    IRQ_EnableIT(AT91C_ID_UDPHS);

#elif defined(CHIP_USB_OTGHS)
    IRQ_ConfigureIT(AT91C_ID_OTGHS, 1, (void*) 0);
    IRQ_EnableIT(AT91C_ID_OTGHS);

#else
    #error Unsupported controller.
#endif
}
Exemplo n.º 10
0
//------------------------------------------------------------------------------
/// Initialize EEPROM device. 
//------------------------------------------------------------------------------
static void EepromInit()
{
    TRACE_INFO("Init TWI EEPROM %s\n\r", NAME_REF);

    // Configure Pins
    PIO_Configure(pins, PIO_LISTSIZE(pins));

    // Configure TWI
    AT91C_BASE_PMC->PMC_PCER = 1 << BOARD_ID_TWI;
    TWI_ConfigureMaster(BOARD_BASE_TWI, TWCK, BOARD_MCK);
    TWID_Initialize(&twid, BOARD_BASE_TWI);
    IRQ_ConfigureIT(BOARD_ID_TWI, 0, ISR_Twi);
    IRQ_EnableIT(BOARD_ID_TWI);

}
Exemplo n.º 11
0
/*
 * See the serial2.h header file.
 */
xComPortHandle xSerialPortInitMinimal( unsigned long ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
{
    xComPortHandle xReturn = serHANDLE;
    extern void ( vUART_ISR )( void );
    const Pin xUSART_Pins[] = { BOARD_PIN_USART_RXD, BOARD_PIN_USART_TXD };


    /* Create the queues used to hold Rx and Tx characters. */
    xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed char ) );
    xCharsForTx = xQueueCreate( uxQueueLength + 1, ( unsigned portBASE_TYPE ) sizeof( signed char ) );

    /* If the queues were created correctly then setup the serial port
    hardware. */
    if( ( xRxedChars != serINVALID_QUEUE ) && ( xCharsForTx != serINVALID_QUEUE ) )
    {
        portENTER_CRITICAL();
        {
            /* Enable the peripheral clock in the PMC. */
            PMC_EnablePeripheral( BOARD_ID_USART );

            /* Configure the USART. */
            USART_Configure( BOARD_USART_BASE, AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE | AT91C_US_NBSTOP_1_BIT, ulWantedBaud, configCPU_CLOCK_HZ );

            /* Configure the interrupt.  Note the pre-emption priority is set
            in bits [8:15] of the priority value passed as the parameter. */
            IRQ_ConfigureIT( BOARD_ID_USART, ( configMAX_SYSCALL_INTERRUPT_PRIORITY << 8 ), vSerialISR );
            IRQ_EnableIT( BOARD_ID_USART );

            /* Enable receiver & transmitter. */
            USART_SetTransmitterEnabled( BOARD_USART_BASE, pdTRUE );
            USART_SetReceiverEnabled( BOARD_USART_BASE, pdTRUE );

            /* Configure IO for USART use. */
            PIO_Configure( xUSART_Pins, PIO_LISTSIZE( xUSART_Pins ) );
        }
        portEXIT_CRITICAL();
    }
    else
    {
        xReturn = ( xComPortHandle ) 0;
    }

    /* This demo file only supports a single port but we have to return
    something to comply with the standard demo header file. */
    return xReturn;
}
BOOL CPU_INTC_InterruptEnable(UINT32 Irq_Index)
{
	BOOL WasEnabled;

	if (Irq_Index >= ID_PERIPH_COUNT)
		return FALSE;

	GLOBAL_LOCK(irq);

	AIC->AIC_SSR = Irq_Index;

	WasEnabled = ((AIC->AIC_IMR & AIC_IMR_INTM) != 0) ? TRUE : FALSE;

	IRQ_EnableIT(Irq_Index);

	return WasEnabled;
}
Exemplo n.º 13
0
//------------------------------------------------------------------------------
/// Configures the PIT to generate 1ms ticks.
//------------------------------------------------------------------------------
static void ConfigurePit(void)
{
    // Initialize and enable the PIT
    PIT_Init(PIT_PERIOD, BOARD_MCK / 1000000);

    // Disable the interrupt on the interrupt controller
    IRQ_DisableIT(AT91C_ID_SYS);

    // Configure the AIC for PIT interrupts
    IRQ_ConfigureIT(AT91C_ID_SYS, 0, ISR_Pit);

    // Enable the interrupt on the interrupt controller
    IRQ_EnableIT(AT91C_ID_SYS);

    // Enable the interrupt on the pit
    PIT_EnableIT();

    // Enable the pit
    PIT_Enable();
}
Exemplo n.º 14
0
//--------------------------------------------------
// Init Timer 1 for Soft PWM (Hotend 1 & 2)
//--------------------------------------------------
void ConfigureTc_1(void)
{

	// Enable peripheral clock
	AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC1;
	unsigned int freq=10000; 
	// Configure TC for a 10 kHz frequency and trigger on RC compare
	//TC_FindMckDivisor(freq, BOARD_MCK, &div, &tcclks);
	TC_Configure(AT91C_BASE_TC1, 3 | AT91C_TC_CPCTRG);
	AT91C_BASE_TC1->TC_RB = 3;
	AT91C_BASE_TC1->TC_RC = (BOARD_MCK / 128) / freq; // timerFreq / desiredFreq

	// Configure and enable interrupt on RC compare
	//IRQ_ConfigureIT(AT91C_ID_TC1, 2, TC1_IrqHandler);
	AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS | AT91C_TC_CPBS;
	IRQ_EnableIT(AT91C_ID_TC1);

	// Start the counter if LED is enabled.
	TC_Start(AT91C_BASE_TC1);

}
BOOL CPU_INTC_ActivateInterrupt(UINT32 Irq_Index, HAL_CALLBACK_FPN ISR, void* ISR_Param)
{
	// figure out the interrupt
	IRQ_VECTORING* IsrVector = IRQToIRQVector(Irq_Index);

	if (!IsrVector)
		return FALSE;

	GLOBAL_LOCK(irq);

	IRQ_DisableIT(Irq_Index);

	IRQ_ClearIT(Irq_Index);

	// set the vector
	IsrVector->Handler.Initialize(ISR, ISR_Param);

	IRQ_EnableIT(Irq_Index);

	return TRUE;
}
Exemplo n.º 16
0
//------------------------------------------------------------------------------
/// Initializes a Media instance and the associated physical interface
/// \param  media Pointer to the Media instance to initialize
/// \return 1 if success.
//------------------------------------------------------------------------------
unsigned char MEDSdusb_Initialize(Media *media, unsigned char mciID)
{
    TRACE_INFO("MEDSdusb init\n\r");
    
    // Initialize SDcard
    //--------------------------------------------------------------------------
    
    if (!CardIsConnected(mciID)) return 0;
    
    // Configure SDcard pins
    ConfigurePIO(mciID);
    
#if defined(MCI2_INTERFACE)
    DMAD_Initialize(BOARD_MCI_DMA_CHANNEL, DMAD_NO_DEFAULT_IT);
#endif
    // Initialize the MCI driver
    if(mciID == 0) {
        IRQ_ConfigureIT(BOARD_SD_MCI_ID,  MCI0_IRQ_PRIORITY, MCI0_IrqHandler);
        MCI_Init(mciDrv, BOARD_SD_MCI_BASE, BOARD_SD_MCI_ID, BOARD_SD_SLOT, MCI_INTERRUPT_MODE);
        IRQ_EnableIT(BOARD_SD_MCI_ID);
    } else {
#ifdef BOARD_SD_MCI1_ID
        IRQ_ConfigureIT(BOARD_SD_MCI1_ID,  MCI0_IRQ_PRIORITY, MCI0_IrqHandler);
        MCI_Init(mciDrv, BOARD_SD_MCI1_BASE, BOARD_SD_MCI1_ID, BOARD_SD_SLOT, MCI_INTERRUPT_MODE);
        IRQ_EnableIT(BOARD_SD_MCI1_ID);
#else
        TRACE_ERROR("SD/MMC card initialization failed (MCI1 not supported)\n\r");
#endif
    }
#if MCI_BUSY_CHECK_FIX && defined(BOARD_SD_DAT0)
    MCI_SetBusyFix(mciDrv, &pinSdDAT0);
#endif
    
    // Initialize the SD card driver
    if (SD_Init(sdDrv, (SdDriver *)mciDrv)) {
        
        TRACE_ERROR("SD/MMC card initialization failed\n\r");
        return 0;
    }
    else {
        
        TRACE_INFO("SD/MMC card initialization successful\n\r");
        TRACE_INFO("Card size: %d MB\n\r", (int)(MMC_GetTotalSizeKB(sdDrv)/1024));
    }
    MCI_SetSpeed(mciDrv, sdDrv->transSpeed, sdDrv->transSpeed, BOARD_MCK);
    
    // Initialize media fields
    //--------------------------------------------------------------------------
    media->interface = sdDrv;
    media->write = MEDSdusb_Write;
    media->read = MEDSdusb_Read;
    media->lock = 0;
    media->unlock = 0;
    media->handler = 0;
    media->flush = 0;
    
    media->blockSize = SD_BLOCK_SIZE;
    media->baseAddress = 0;
    media->size = SD_TOTAL_BLOCK(sdDrv);
    
    media->mappedRD  = 0;
    media->mappedWR  = 0;
    media->writeProtected = CardIsProtected(mciID);
    media->removable = 1;
    
    media->state = MED_STATE_READY;
    
    media->transfer.data = 0;
    media->transfer.address = 0;
    media->transfer.length = 0;
    media->transfer.callback = 0;
    media->transfer.argument = 0;
    
    return 1;
}