BASIC4MCU | 질문게시판 | AVR 인터럽트 질문드립니다 ㅠㅠ
페이지 정보
작성자 hello 작성일2019-04-30 12:06 조회4,242회 댓글0건본문
#include "stm32f767xx.h"
#include "OK-STM767.h"void SysTick_Handler(void); /* SysTick interrupt function */
void Display_key(U08 key); /* display key input *//* ----- 인터럽트 처리 프로그램 ----------------------------------------------- */
void SysTick_Handler(void)
{
LED_toggle(); // toggle LED
}/* ----- 메인 프로그램 -------------------------------------------------------- */
int main(void)
{
unsigned char key;Initialize_MCU(); // initialize MCU and kit
Delay_ms(50); // wait for system stabilization
Initialize_LCD(); // initialize text LCD module
Initialize_TFT_LCD(); // initialize TFT-LCD moduleLCD_string(0x80," OK-STM767 V1.0 "); // display title
LCD_string(0xC0," Exp09_1.c ");
Beep();TFT_string( 1, 4, White,Magenta, " SysTick 타이머 인터럽트 이용 LED 점멸 ");
TFT_string(10,10, Green, Black, " 50ms ON / 50ms OFF");
TFT_string(7,16, White,Black, "KEY1 - 50ms 주기 인터럽트");
TFT_string(7,19, White,Black, "KEY2 - 100ms 주기 인터럽트");
SysTick->LOAD = 1349999; // 27MHz/(1349999+1) = 20Hz
SysTick->VAL = 0; // clear SysTick Counter
SysTick->CTRL = 0x00000003; // 216MHz/8 = 27MHz, enable SysTick and interruptwhile(1)
{ key = Key_input(); // key input
switch(key)
{ case KEY1 : SysTick->LOAD = 1349999; // 27MHz/(1349999+1) = 20Hz
Display_key(KEY1);
TFT_string(10,10, Green, Black, " 50ms ON / 50ms OFF");
break;
case KEY2 : SysTick->LOAD = 2699999; // 27MHz/(2699999+1) = 10Hz
Display_key(KEY2);
TFT_string(10,10, Green, Black, "100ms ON / 100ms OFF");
break;
}
}
}/* ----- 사용자 정의 함수 ----------------------------------------------------- */
void Display_key(U08 key) /* display key input */
{
TFT_string(7,16, White,Black, "KEY1");
TFT_string(7,19, White,Black, "KEY2");if(key == KEY1) TFT_string(7,16, Magenta,Black, "KEY1");
else if(key == KEY2) TFT_string(7,19, Magenta,Black, "KEY2");
}
안녕하세요~arm coretex-m7 공부중인데요~ 이 소스를 인터럽트를 쓰지않고 실행하려고 합니다~
key 1을 누를때는 50ms 주기마다 LED가 깜박거리고 key2를 누를때는 100ms 주기마다 LED를 깜박거리게 하고 싶습니다~
우선 아래처럼 코딩을 하였는데 반복문 사용을 어떻게 해야 할지를 모르겠습니다 ㅠㅠ 도와주시면 정말 감사드리겠습니다!
#include "stm32f767xx.h"
#include "OK-STM767.h"
void Display_key(U08 key); /* display key input */
/* ----- 메인 프로그램 -------------------------------------------------------- */int main(void)
{
unsigned char key;Initialize_MCU(); // initialize MCU and kit
Delay_ms(50); // wait for system stabilization
Initialize_LCD(); // initialize text LCD module
Initialize_TFT_LCD(); // initialize TFT-LCD moduleLCD_string(0x80," OK-STM767 V1.0 "); // display title
LCD_string(0xC0," Exp09_1.c ");
Beep();TFT_string( 1, 4, White,Magenta, " SysTick 타이머 인터럽트 이용 LED 점멸 ");
TFT_string(10,10, Green, Black," 50ms ON / 50ms OFF");
TFT_string(7,16, White,Black, "KEY1 - 50ms 주기 인터럽트");
TFT_string(7,19, White,Black, "KEY2 - 100ms 주기 인터럽트");SysTick->CTRL = 0x00000001; // 216MHz/8 = 27MHz, enable SysTick and interrupt
while(1)
{ key = Key_input(); // key inputswitch(key)
{
case KEY1 :
LED_on();
Delay_ms(50);
Display_key(KEY1);
TFT_string(10,10, Green, Black, " 50ms ON / 50ms OFF");
LED_off();
break;
case KEY2 :
LED_on();
Display_key(KEY2);
TFT_string(10,10, Green, Black, "100ms ON / 100ms OFF");
Delay_ms(100);
LED_off();
break;
}
}
}/* ----- 사용자 정의 함수 ----------------------------------------------------- */
void Display_key(U08 key) /* display key input */
{
TFT_string(7,16, White,Black, "KEY1");
TFT_string(7,19, White,Black, "KEY2");if(key == KEY1) TFT_string(7,16, Magenta,Black, "KEY1");
else if(key == KEY2) TFT_string(7,19, Magenta,Black, "KEY2");
}
댓글 0
조회수 4,242등록된 댓글이 없습니다.