Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: STM32F3-Discovery
main.c@2:366bad33b2bd, 2019-04-29 (annotated)
- 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?
User | Revision | Line number | New 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 |