void ms2001_arch_init( void ) { ms2001_cur_axe = 0; /* configure SS pin */ Ms2001Unselect(); /* pin idles high */ SetBit(MS2001_SS_IODIR, MS2001_SS_PIN); /* pin is output */ /* configure RESET pin */ Ms2001Reset(); /* pin idles low */ SetBit(MS2001_RESET_IODIR, MS2001_RESET_PIN); /* pin is output */ /* configure DRDY pin */ /* connected pin to EXINT */ MS2001_DRDY_PINSEL |= MS2001_DRDY_PINSEL_VAL << MS2001_DRDY_PINSEL_BIT; SetBit(EXTMODE, MS2001_DRDY_EINT); /* EINT is edge trigered */ SetBit(EXTPOLAR,MS2001_DRDY_EINT); /* EINT is trigered on rising edge */ SetBit(EXTINT,MS2001_DRDY_EINT); /* clear pending EINT */ /* initialize interrupt vector */ VICIntSelect &= ~VIC_BIT( MS2001_DRDY_VIC_IT ); /* select EINT as IRQ source */ VICIntEnable = VIC_BIT( MS2001_DRDY_VIC_IT ); /* enable it */ _VIC_CNTL(MS2001_DRDY_VIC_SLOT) = VIC_ENABLE | MS2001_DRDY_VIC_IT; _VIC_ADDR(MS2001_DRDY_VIC_SLOT) = (uint32_t)EXTINT_ISR; // address of the ISR }
void ms2100_arch_init( void ) { ms2100_cur_axe = 0; /* set mag SS and reset as output and assert them (SS on PC12 reset on PC13) ----*/ Ms2001Unselect(); Ms2001Set(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); /* configure data ready on PB5 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); #ifdef MS2100_HANDLES_DMA_IRQ /* Enable DMA1 channel4 IRQ Channel */ NVIC_InitTypeDef NVIC_init_structure_dma = { .NVIC_IRQChannel = DMA1_Channel4_IRQn, .NVIC_IRQChannelPreemptionPriority = 0, .NVIC_IRQChannelSubPriority = 0, .NVIC_IRQChannelCmd = ENABLE }; NVIC_Init(&NVIC_init_structure_dma); #endif /* MS2100_HANDLES_DMA_IRQ */ #ifdef MS2100_HANDLES_SPI_IRQ NVIC_InitTypeDef NVIC_init_structure_spi = { .NVIC_IRQChannel = SPI2_IRQn, .NVIC_IRQChannelPreemptionPriority = 0, .NVIC_IRQChannelSubPriority = 1, .NVIC_IRQChannelCmd = ENABLE }; NVIC_Init(&NVIC_init_structure_spi); #endif /* MS2100_HANDLES_SPI_IRQ */ } #ifdef MS2100_HANDLES_SPI_IRQ void spi2_irq_handler(void) { Ms2001OnSpiIrq(); } #endif #ifdef MS2100_HANDLES_DMA_IRQ void dma1_c4_irq_handler(void) { Ms2001OnDmaIrq(); }