[W7100 EVM] 외부 인터럽트 테스트 - 스위치 제어 예제
W7100 EVM 보드에서 스위치는 INT3에 연결되어 있다.
INT3은 인터럽트 소스 이고 GPIO로 접근할수 없다. EIF레지스터에서 인터럽트 플래그를 체크해서 확인할수 있다. 물론 이때는 인터럽트를 Enable해야 하고 확인후 플래그를 클리어 해야 한다.
EIF 레지스터
인터럽트 확인할 수 있는 레지스터로 확인후 클리어 해야 한다.
EIE레지스터
인터럽트 Enable설정 레지스터이다.
참고로 Keil에서 레지스터 비트 정의로 아래와 같이 설정하면
sbit EIF1 = EIF^0;
에러가 발생하는데... 메뉴얼을 살표 보니 P1과 같이 레지스터가 8bit로 구성되어 있으면 문제가 없는데 EIF와 같이 4bit로 되어 있다면 정의가 안된다고 한다.
그냥 Cbi, Sbi이용하면 된다고 한다.
config.h 파일에 Switch Driver 작성하자.
W7100 스위치 테스트 프로그램
폴링모드
void main()
{
unsigned char sw_flag = 0;
SystemInit(); //Initialize iMCU
Led1Init(); Led1On();
Led2Init(); Led2Off();
U0_Init(BAUD_115200);
U0_PutStr("iMCU Serial Test\r\n");
Sw1Init();
while(1)
{
//스위치 처리
if(GetSw1())
{
Sw1Reset();
sw_flag ^= 1;
if(sw_flag == 1)Led2On();
else Led2Off();
Delay(100);
}
}
}
인터럽트를 사용할 경우
W7100 EVM 보드에서 스위치는 INT3에 연결되어 있다.
INT3은 인터럽트 소스 이고 GPIO로 접근할수 없다. EIF레지스터에서 인터럽트 플래그를 체크해서 확인할수 있다. 물론 이때는 인터럽트를 Enable해야 하고 확인후 플래그를 클리어 해야 한다.
EIF 레지스터
인터럽트 확인할 수 있는 레지스터로 확인후 클리어 해야 한다.
EIE레지스터
인터럽트 Enable설정 레지스터이다.
참고로 Keil에서 레지스터 비트 정의로 아래와 같이 설정하면
sbit EIF1 = EIF^0;
에러가 발생하는데... 메뉴얼을 살표 보니 P1과 같이 레지스터가 8bit로 구성되어 있으면 문제가 없는데 EIF와 같이 4bit로 되어 있다면 정의가 안된다고 한다.
그냥 Cbi, Sbi이용하면 된다고 한다.
config.h 파일에 Switch Driver 작성하자.
//Switch Driver
#define Sw1Init() EINT3 = 1;
#define GetSw1() (EIF&BIT1)
#define Sw1Reset() Cbi(EIF, BIT1);
#define Sw1Init() EINT3 = 1;
#define GetSw1() (EIF&BIT1)
#define Sw1Reset() Cbi(EIF, BIT1);
W7100 스위치 테스트 프로그램
폴링모드
void main()
{
unsigned char sw_flag = 0;
SystemInit(); //Initialize iMCU
Led1Init(); Led1On();
Led2Init(); Led2Off();
U0_Init(BAUD_115200);
U0_PutStr("iMCU Serial Test\r\n");
Sw1Init();
while(1)
{
//스위치 처리
if(GetSw1())
{
Sw1Reset();
sw_flag ^= 1;
if(sw_flag == 1)Led2On();
else Led2Off();
Delay(100);
}
}
}
인터럽트를 사용할 경우
void int_test(void) interrupt 9//Timer1 interrupt
{
disable();
Sw1Reset();
sw_flag ^= 1;
if(sw_flag == 1)Led2On();
else Led2Off();
counter++;
enalbe();
}
{
disable();
Sw1Reset();
sw_flag ^= 1;
if(sw_flag == 1)Led2On();
else Led2Off();
counter++;
enalbe();
}
반응형