예제 #1
0
int main(void){
    
    halInit();
    chSysInit();
 
    /*
     * Initializes the SPI driver 1.
     */
    spiStart(&SPID1, &spicfg);
    

    chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
    chThdCreateStatic(waSegThread1, sizeof(waSegThread1), NORMALPRIO+2, SegThread1, NULL);
    //chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO+2, Thread2, NULL);
    //chThdCreateStatic(waPWMThread2, sizeof(waPWMThread2), NORMALPRIO+1, PWMThread2, NULL);    
    
    init_digit_pins();
    init_SPI1();

    palSetPadMode(GPIOC, 8, PAL_MODE_OUTPUT_PUSHPULL);
    palSetPadMode(GPIOC, 9, PAL_MODE_OUTPUT_PUSHPULL);
//TestThread(&SD1);

    while (TRUE){
        palSetPad(GPIOC, 8);
        //TestThread(&SD1);
        chThdSleepMilliseconds(500);
        palClearPad(GPIOC, 8);
        chThdSleepMilliseconds(500);
    }
}
예제 #2
0
int main(void){
	
	uint8_t received_val = 0;
	
	init_SPI1();
	
	while(1){
		
		GPIOE->BSRRH |= GPIO_Pin_7; // set PE7 (CS) low
		SPI1_send(0xAA);  // transmit data
		received_val = SPI1_send(0x00); // transmit dummy byte and receive data
		GPIOE->BSRRL |= GPIO_Pin_7; // set PE7 (CS) high
	}
}
예제 #3
0
/********************************************************************
 * INITIALIZATION
 * ******************************************************************/
void enc424j600Init(void) {

	debug_entry;
	
    //Set default bank
    currentBank = 0;

   	init_SPI1();

   	DeassertChipSelect();
	ENCX24J600_Reset();
	delay_loop_ms (100);
	ENCX24J600_Unreset ();

    // Perform a reliable reset
    enc424j600SendSystemReset();

    // Initialize RX tracking variables and other control state flags
    nextPacketPointer = RXSTART;

    // Set up TX/RX/UDA buffer addresses
    enc424j600WriteReg(ETXST, TXSTART);
    enc424j600WriteReg(ERXST, RXSTART);
    enc424j600WriteReg(ERXTAIL, RAMSIZE - 2);
    enc424j600WriteReg(EUDAST, USSTART);
    enc424j600WriteReg(EUDAND, USEND);

    // If promiscuous mode is set, than allow accept all packets
#ifdef PROMISCUOUS_MODE
    enc424j600WriteReg(ERXFCON, (ERXFCON_CRCEN | ERXFCON_RUNTEN | ERXFCON_UCEN | ERXFCON_NOTMEEN | ERXFCON_MCEN));
    dd
#endif

    // Set PHY Auto-negotiation to support 10BaseT Half duplex,
    // 10BaseT Full duplex, 100BaseTX Half Duplex, 100BaseTX Full Duplex,
    // and symmetric PAUSE capability
    enc424j600WritePHYReg(PHANA, PHANA_ADPAUS0 | PHANA_AD10FD | PHANA_AD10 | PHANA_AD100FD | PHANA_AD100 | PHANA_ADIEEE0);

    // Enable RX packet reception
    enc424j600BFSReg(ECON1, ECON1_RXEN);

	// KUKU, supaya GPIO aktif untuk deteck packet 
    enc424j600WriteReg(EIE, EIE_INTIE | EIE_LINKIE | EIE_PKTIE | EIE_TXABTIE | EIE_RXABTIE);

    debug_leave;
}
예제 #4
0
파일: user.c 프로젝트: szkulisz/EAR_V2
void InitApp(void)
{
    /* Setup analog functionality and port direction */
    //IO configuration (pull-up CN interrupts enable


//    IEC1bits.CNIE=1;
//    IPC4bits.CNIP=1;


    /* Initialize peripherals */
    init_peripheral_pin_select();
    uart1_Initialize(19200);
    init_timer2();
    init_timer3();
    init_SPI1();
    init_SPI2();
}
예제 #5
0
void initGPS(){
    init_SPI1();
    init_DMA0();
}
예제 #6
0
int main(void)
{
    //инициализация анимации.
    //InitServosAnimations(&animations);


    //Инициализируем UART
    init_usart();

    //инициализация SPI1
    init_SPI1();

    init_servo_data(&servos_data);

    //настройка пределов

    struct GroupSettings g0 = {0, 0.02, 240,
            {{0.00039,0.00242,},
            {0.00048, 0.0025},
            {0.00048, 0.00249},
            {0.0004, 0.00242}}};

    set_servo_range(&servos_data, &g0);

    struct GroupSettings g1 = {1, 0.02, 240,
            {{0.00053,0.00255},
            {0.000449,0.00244},
            {0.00048,0.0025},
            {0.000459, 0.00248}}};
    set_servo_range(&servos_data, &g1);

    struct GroupSettings g2 = {2, 0.02, 240,
            {{0.000440, 0.002480},
            {0.000440, 0.002440},
            {0.000510, 0.002460},
            {0.000480,  0.002500}}};
    set_servo_range(&servos_data, &g2);

    struct GroupSettings g3 = {3, 0.02, 240,
            {{0.00048, 0.0025},
            {0.00048, 0.00249},
            {0.000449, 0.00243},
            {0.00047, 0.0025}}};
    set_servo_range(&servos_data, &g3);

    //Глобальное включение прерывания
    SysTick_Config(SystemCoreClock/50);
    __enable_irq();


    //тест порта
    /**
    GPIO_InitTypeDef gpio;
    GPIO_StructInit(&gpio);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    gpio.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    gpio.GPIO_Speed = GPIO_Speed_50MHz;
    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &gpio);

    GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11);
    */

    GPIO_InitTypeDef PORT;
    //Включаем порты А и С
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
    //Настраиваем ноги PC8 и PC9 на выход. Там у нас висят светодиоды
    PORT.GPIO_Pin = GPIO_Pin_0;
    PORT.GPIO_Mode = GPIO_Mode_AIN;
    PORT.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC , &PORT);

    RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE); //Включаем тактирование АЦП
    ADC1->CR2 |= ADC_CR2_CAL; //Запуск калибровки АЦП
    while (!(ADC1->CR2 & ADC_CR2_CAL));
    //Ожидаем окончания калибровки
    ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP1_0); //Задаем
    // длительность выборки
    ADC1->CR2 |= ADC_CR2_JEXTSEL; //Преобразование инжектированной группы
    //запустится установкой бита JSWSTART
    ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск инжектированной группы
    ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно за другим
    ADC1->CR1 |= ADC_CR1_JAUTO; //Разрешить преобразование инжектированной группы
    //после регулярной. Не понятно зачем, но без этого не работает
    ADC1->JSQR |= (10<<15); //Задаем номер канала (выбран ADC1)
    ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП
    ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований
    while (!(ADC1->SR & ADC_SR_JEOC)); //ждем пока первое преобразование завершится
    //Теперь можно читать результат из JDR1
    uint32_t adc_res; //Использовал переменную для отладки. Можно и без неё

    while(1)
    {
        adc_res=ADC1->JDR1;
        delay(adc_res);
    }

    while(1)
    {}
}
void systemInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    //uint32_t i;

    //GPIO_InitTypeDef GPIO_InitStructure;
				RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE, ENABLE);
				GPIO_InitStructure.GPIO_Pin = LED0_PIN | LED1_PIN | LED2_PIN| LED3_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOE, &GPIO_InitStructure);

#ifdef BUZZER
	{
	RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOD, ENABLE);
  GPIO_InitStructure.GPIO_Pin = BEEP_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;	
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOD, &GPIO_InitStructure);				
};

#endif
    
  //  uint8_t gpio_count = sizeof(gpio_cfg) / sizeof(gpio_cfg[0]);

    // This is needed because some shit inside Keil startup f***s with SystemCoreClock, setting it back to 72MHz even on HSI.
    SystemCoreClockUpdate();

    // Turn on clocks for stuff we use
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5 | RCC_APB1Periph_I2C2 | RCC_APB1Periph_SPI2 | RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3 , ENABLE);
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 | RCC_APB2Periph_TIM8 | RCC_APB2Periph_ADC1 | RCC_APB2Periph_USART1 | RCC_APB2Periph_SPI1, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA2, ENABLE);
    RCC_ClearFlag();

    /*/ Make all GPIO in by default to save power and reduce noise
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // Turn off JTAG port 'cause we're using the GPIO for leds
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

    // Configure gpio
    for (i = 0; i < gpio_count; i++) {
        GPIO_InitStructure.GPIO_Pin = gpio_cfg[i].pin;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = gpio_cfg[i].mode;
        GPIO_Init(gpio_cfg[i].gpio, &GPIO_InitStructure);
    }*/

    LED0_OFF;
    LED1_OFF;
    LED2_OFF;
    LED3_OFF;
    BEEP_OFF;

    // Init cycle counter
    cycleCounterInit();

    // SysTick
    SysTick_Config(SystemCoreClock / 1000);

    // Configure the rest of the stuff
#ifndef FY90Q
    i2cInit(I2C2);
		init_SPI1();
		init_SPI2();

#endif

    // sleep for 100ms
    delay(100);
}