Martin Johnson / gpio_test_ints

Dependencies:   STM32F3-Discovery

Committer:
MartinJohnson
Date:
Mon Apr 29 23:30:48 2019 +0000
Revision:
2:366bad33b2bd
Parent:
1:5d95bdb46dfd
External interrupt handler for the user button

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MartinJohnson 0:699994a61048 1
MartinJohnson 0:699994a61048 2 #include <stm32f3_discovery.h>
MartinJohnson 0:699994a61048 3
MartinJohnson 0:699994a61048 4 volatile unsigned sysTiming;
MartinJohnson 0:699994a61048 5 volatile unsigned sysTicks = 0;
MartinJohnson 0:699994a61048 6
MartinJohnson 0:699994a61048 7 void SysTick_Handler(void) {
MartinJohnson 0:699994a61048 8 sysTicks++;
MartinJohnson 0:699994a61048 9 if (sysTiming > 0) --sysTiming;
MartinJohnson 0:699994a61048 10 }
MartinJohnson 0:699994a61048 11
MartinJohnson 0:699994a61048 12 void sysDelayMs(unsigned dly) {
MartinJohnson 2:366bad33b2bd 13 //dly=dly;
MartinJohnson 0:699994a61048 14 sysTiming = dly;
MartinJohnson 0:699994a61048 15 while (sysTiming > 0) __wfi();
MartinJohnson 0:699994a61048 16
MartinJohnson 0:699994a61048 17 }
MartinJohnson 0:699994a61048 18
MartinJohnson 2:366bad33b2bd 19
MartinJohnson 2:366bad33b2bd 20 void EXTI0_IRQHandler() {
MartinJohnson 2:366bad33b2bd 21 if(EXTI->PR & 1) {
MartinJohnson 2:366bad33b2bd 22 GPIOE->ODR ^= 0xff00;
MartinJohnson 2:366bad33b2bd 23 //EXTI->PR |= 1;
MartinJohnson 2:366bad33b2bd 24 }
MartinJohnson 2:366bad33b2bd 25 }
MartinJohnson 2:366bad33b2bd 26
MartinJohnson 0:699994a61048 27 int main(void) {
MartinJohnson 0:699994a61048 28
MartinJohnson 0:699994a61048 29 SysTick_Config((SystemCoreClock / 1000));
MartinJohnson 0:699994a61048 30 RCC->AHBENR |= RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOA;
MartinJohnson 2:366bad33b2bd 31 RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
MartinJohnson 0:699994a61048 32 GPIOE->MODER = (GPIOE->MODER&0xffff) | 0x55550000; // output mode for PE8-15
MartinJohnson 0:699994a61048 33 GPIOA->MODER = (GPIOA->MODER&0xfffffffc) ; // input mode for PA0
MartinJohnson 2:366bad33b2bd 34 SYSCFG->EXTICR[0] &= ~0xf;
MartinJohnson 2:366bad33b2bd 35 EXTI->IMR |= 1; // int enable
MartinJohnson 2:366bad33b2bd 36 EXTI->RTSR |= 1; // rising
MartinJohnson 2:366bad33b2bd 37 EXTI->FTSR &= ~1; // falling
MartinJohnson 2:366bad33b2bd 38 NVIC->IP[EXTI0_IRQn]=32; // Interrupt Priority, lower is higher priority
MartinJohnson 2:366bad33b2bd 39 NVIC->ISER[EXTI0_IRQn >> 0x05] = 1 << (EXTI0_IRQn & 0x1F); // Interrupt enable
MartinJohnson 0:699994a61048 40 GPIOE->BSRR=0xff00;
MartinJohnson 0:699994a61048 41 sysDelayMs(500);
MartinJohnson 0:699994a61048 42 int b=0;
MartinJohnson 1:5d95bdb46dfd 43 while(1) {
MartinJohnson 0:699994a61048 44 GPIOE->BSRR=1<<(b+8);
MartinJohnson 2:366bad33b2bd 45 //while(GPIOA->IDR&1);
MartinJohnson 0:699994a61048 46 sysDelayMs(100);
MartinJohnson 0:699994a61048 47 GPIOE->BSRR=1<<(b+8+16);
MartinJohnson 0:699994a61048 48 b=(b+1)%8;
MartinJohnson 0:699994a61048 49 }
MartinJohnson 0:699994a61048 50 }
MartinJohnson 0:699994a61048 51
MartinJohnson 0:699994a61048 52