Seongbin Lim
/
sb_first_project
This is a very simple guide, reviewing the steps required to get Blinky working on an Mbed OS platform.
Diff: main.cpp
- Revision:
- 117:cc2a98cdd8fa
- Parent:
- 116:82faef102371
- Child:
- 118:88f30fadf08f
--- a/main.cpp Mon Apr 13 14:31:17 2020 +0000 +++ b/main.cpp Wed Apr 15 07:17:28 2020 +0000 @@ -1,24 +1,82 @@ #include "mbed.h" -RawSerial pc(PA_2, PA_3, 115200); // USART2 -DigitalOut led(LED2); +int interval; + +void led2_init(void); +void button_init(void); +void led2_toggle(void); + +void button_Handler(void); + +int main() { -void rx_handler(void) { - int ch = pc.getc(); - pc.putc(ch); - if(ch == 0x0D) { - while(!pc.writeable()); - pc.putc(0x0A); - } + led2_init(); + button_init(); + + NVIC_SetVector(EXTI15_10_IRQn,(uint32_t)button_Handler); + + interval = 500; + + while(true) { + + led2_toggle(); + + ThisThread::sleep_for(interval); + } +} +void led2_init(void) { + __HAL_RCC_GPIOA_CLK_ENABLE(); + GPIOA->MODER &= ~(0b11<< (5 * 2)); // reset PA5 mode + GPIOA->MODER |= 0b01<< (5 * 2); // 01 - write mode } -int main() { - pc.attach(&rx_handler); - pc.printf("\r\n Welcome to UART Lab_2_2!\r\n"); - pc.printf("Enter characters..\r\n"); + +void led2_toggle(void){ + + uint32_t isOn; + + isOn = GPIOA->IDR & (0b1 << 5); //recent write value + + if(isOn > 0) { + + GPIOA->BSRR &= ~(0b1 << 5); //set 0 on PA_5_5 + GPIOA->BSRR |= 0b1<< (5 + 16); // set 1 on PA5_21 + + } else { + + GPIOA->BSRR |= 0b1 << 5; // set 1 on PA5_5 + GPIOA->BSRR &= ~(0b1 << (5 + 16)); // set 0 on PA5_21 + } +} + + +void button_init(void) { + + __HAL_RCC_GPIOC_CLK_ENABLE(); - while(true) { - ThisThread::sleep_for(500); - led = !led; - } + RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; +// RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; + SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI13_PC; + + GPIOC->MODER &= ~(GPIO_MODER_MODER13); // input mode for PC13 + GPIOC->PUPDR &= ~(GPIO_PUPDR_PUPDR13); + + EXTI->RTSR |= EXTI_RTSR_TR13; + EXTI->IMR |= EXTI_IMR_MR13; + + NVIC_SetPriority(EXTI15_10_IRQn, 1); + NVIC_EnableIRQ(EXTI15_10_IRQn); + + +} + +void button_Handler(void){ + + if(interval < 2000) { + interval *= 2; + } else { + interval = 500; + } + + EXTI->PR = (0b1 << 13); } \ No newline at end of file