/* Initialize ADC for reading sensors */ void hal_adc_init(void) { /* Enable peripheral clock. */ #if SAM3S || SAM3N || SAM3XA || SAM4S uint32_t i; pmc_enable_periph_clk(ID_ADC); #elif SAM3U #ifdef ADC_12B pmc_enable_periph_clk(ID_ADC12B); #else pmc_enable_periph_clk(ID_ADC); #endif #endif /* Initialize ADC. */ #if SAM3S || SAM3N || SAM3XA || SAM4S adc_init(ADC, SystemCoreClock, ADC_FREQ_MAX, ADC_STARTUP_FAST); #elif SAM3U #ifdef ADC_12B adc12b_init(ADC12B, sysclk_get_cpu_hz(), 6400000, 10, 10); #else adc_init(ADC, sysclk_get_cpu_hz(), 6400000, 10); #endif #endif // adc_configure_timing(ADC, 0, ADC_SETTLING_TIME_3, 1); adc_configure_trigger(ADC, ADC_TRIG_SW, 0); // Disable hardware trigger. adc_disable_interrupt(ADC, 0xFFFFFFFF); // Disable all ADC interrupts. adc_disable_all_channel(ADC); }
// Module initialisation void AnalogInInit() { #if SAM3XA || SAM4S pmc_enable_periph_clk(ID_ADC); adc_init(ADC, SystemCoreClock, 2000000, ADC_STARTUP_TIME_12); // 2MHz clock adc_configure_timing(ADC, 3, ADC_SETTLING_TIME_3, 1); // Add transfer time adc_configure_trigger(ADC, ADC_TRIG_SW, 0); // Disable hardware trigger adc_disable_interrupt(ADC, 0xFFFFFFFF); // Disable all ADC interrupts adc_disable_all_channel(ADC); #elif SAM4E || SAME70 afec_enable(AFEC0); afec_enable(AFEC1); afec_config cfg; afec_get_config_defaults(&cfg); #if 0 // these are probably not needed, the defaults should be OK // cfg.afec_clock = 2000000UL; // reduce clock frequency // cfg.settling_time = AFEC_SETTLING_TIME_3; #endif while (afec_init(AFEC0, &cfg) != STATUS_OK) { (void)afec_get_latest_value(AFEC0); } while (afec_init(AFEC1, &cfg) != STATUS_OK) { (void)afec_get_latest_value(AFEC1); } afec_disable_interrupt(AFEC0, AFEC_INTERRUPT_ALL); afec_disable_interrupt(AFEC1, AFEC_INTERRUPT_ALL); afec_set_trigger(AFEC0, AFEC_TRIG_SW); afec_set_trigger(AFEC1, AFEC_TRIG_SW); #endif }
void init( void ) { SystemInit(); // Set Systick to 1ms interval, common to all SAM3 variants if (SysTick_Config(SystemCoreClock / 1000)) { // Capture error while (true); } // Disable watchdog WDT_Disable(WDT); // Initialize C library __libc_init_array(); // Disable pull-up on every pin for (int i = 0; i < PINS_COUNT; i++) digitalWrite(i, LOW); // Enable parallel access on PIO output data registers PIOA->PIO_OWER = 0xFFFFFFFF; PIOB->PIO_OWER = 0xFFFFFFFF; PIOC->PIO_OWER = 0xFFFFFFFF; PIOD->PIO_OWER = 0xFFFFFFFF; // Initialize Serial port U(S)ART pins PIO_Configure( g_APinDescription[PINS_UART].pPort, g_APinDescription[PINS_UART].ulPinType, g_APinDescription[PINS_UART].ulPin, g_APinDescription[PINS_UART].ulPinConfiguration); digitalWrite(0, HIGH); // Enable pullup for RX0 PIO_Configure( g_APinDescription[PINS_USART0].pPort, g_APinDescription[PINS_USART0].ulPinType, g_APinDescription[PINS_USART0].ulPin, g_APinDescription[PINS_USART0].ulPinConfiguration); PIO_Configure( g_APinDescription[PINS_USART1].pPort, g_APinDescription[PINS_USART1].ulPinType, g_APinDescription[PINS_USART1].ulPin, g_APinDescription[PINS_USART1].ulPinConfiguration); PIO_Configure( g_APinDescription[PINS_USART3].pPort, g_APinDescription[PINS_USART3].ulPinType, g_APinDescription[PINS_USART3].ulPin, g_APinDescription[PINS_USART3].ulPinConfiguration); // Initialize USB pins PIO_Configure( g_APinDescription[PINS_USB].pPort, g_APinDescription[PINS_USB].ulPinType, g_APinDescription[PINS_USB].ulPin, g_APinDescription[PINS_USB].ulPinConfiguration); // Initialize CAN pins /* PIO_Configure( g_APinDescription[PINS_CAN0].pPort, g_APinDescription[PINS_CAN0].ulPinType, g_APinDescription[PINS_CAN0].ulPin, g_APinDescription[PINS_CAN0].ulPinConfiguration); PIO_Configure( g_APinDescription[PINS_CAN1].pPort, g_APinDescription[PINS_CAN1].ulPinType, g_APinDescription[PINS_CAN1].ulPin, g_APinDescription[PINS_CAN1].ulPinConfiguration); */ // Initialize Analog Controller pmc_enable_periph_clk(ID_ADC); adc_init(ADC, SystemCoreClock, ADC_FREQ_MAX, ADC_STARTUP_FAST); adc_configure_timing(ADC, 0, ADC_SETTLING_TIME_3, 1); adc_configure_trigger(ADC, ADC_TRIG_SW, 0); // Disable hardware trigger. adc_disable_interrupt(ADC, 0xFFFFFFFF); // Disable all ADC interrupts. adc_disable_all_channel(ADC); // Initialize analogOutput module analogOutputInit(); }
void init( void ) { SystemInit(); // Set Systick to 1ms interval if (SysTick_Config(SystemCoreClock / 1000)) { // Capture error while (true); } // Disable watchdog WDT_Disable(WDT); // Initialize C library __libc_init_array(); // Disable pull-up on every pin for (uint i = 0u; i < PINS_COUNT; i++) digitalWrite(i, LOW); // Enable parallel access on PIO output data registers PIOA->PIO_OWER = 0xFFFFFFFF; PIOB->PIO_OWER = 0xFFFFFFFF; //PIOC->PIO_OWER = 0xFFFFFFFF; //PIOD->PIO_OWER = 0xFFFFFFFF; //turn off ERASE and JTAG pins MATRIX->CCFG_SYSIO = CCFG_SYSIO_SYSIO12 | CCFG_SYSIO_SYSIO7 | CCFG_SYSIO_SYSIO6 | CCFG_SYSIO_SYSIO5 | CCFG_SYSIO_SYSIO4; // Initialize Serial port UART pins PIO_Configure( g_APinDescription[PINS_USART0].pPort, g_APinDescription[PINS_USART0].ulPinType, g_APinDescription[PINS_USART0].ulPin, g_APinDescription[PINS_USART0].ulPinConfiguration); digitalWrite(0u, HIGH); // Enable pullup for RX0 // Initialize Serial port USART pins // Pins are disconnected from PIO controller and hooked to the peripheral. // Currently PIO_Configure always enables the pullup resistor for peripherals. This appears to be a bug, as it is not written correctly for that purpose, but has that affect. PIO_Configure( g_APinDescription[PINS_UART1].pPort, g_APinDescription[PINS_UART1].ulPinType, g_APinDescription[PINS_UART1].ulPin, g_APinDescription[PINS_UART1].ulPinConfiguration); PIO_Configure( g_APinDescription[B1].pPort, g_APinDescription[B1].ulPinType, g_APinDescription[B1].ulPin, g_APinDescription[B1].ulPinConfiguration); /* TODO: wire up USB ID line and check out USB configuration // Initialize USB pins PIO_Configure( g_APinDescription[PINS_USB].pPort, g_APinDescription[PINS_USB].ulPinType, g_APinDescription[PINS_USB].ulPin, g_APinDescription[PINS_USB].ulPinConfiguration); //TODO: Initialize I2C pins for crypto IC PIO_Configure( g_APinDescription[PINS_SPI].pPort, g_APinDescription[PINS_SPI].ulPinType, g_APinDescription[PINS_SPI].ulPin, g_APinDescription[PINS_SPI].ulPinConfiguration); */ // Initialize Analog Controller pmc_enable_periph_clk(ID_ADC); adc_init(ADC, SystemCoreClock, ADC_FREQ_MAX, ADC_STARTUP_FAST); adc_configure_timing(ADC, 0, ADC_SETTLING_TIME_3, 1); adc_configure_trigger(ADC, ADC_TRIG_SW, 0); // Disable hardware trigger. adc_disable_interrupt(ADC, 0xFFFFFFFF); // Disable all ADC interrupts. adc_disable_all_channel(ADC); // Initialize analogOutput module analogOutputInit(); }