펌웨어 실습(인터럽트)
#define PINA (*((volatile unsigned char *)0x20))
#define DDRA (*((volatile unsigned char *)0x21)) //메모리 21번지에서 하는 일은 DDRA
#define PORTA (*((volatile unsigned char *)0x22))
#define EICRA (*((volatile unsigned char *)0x69))
#define EICRB (*((volatile unsigned char *)0x6A))
#define EIMSK (*((volatile unsigned char *)0x3D))
#define SREG (*((volatile unsigned char *)0x5F))
#define INT7 7
#define INT6 6
#define INT5 5
#define INT4 4
#define INT3 3
#define INT2 2
#define INT1 1
#define INT0 0
#define ISC7 6
#define ISC6 4
#define ISC5 2
#define ISC4 0
#define ISC3 6
#define ISC2 4
#define ISC1 2
#define ISC0 0
#define sei() __asm__ __volatile__ ("sei" ::) //어셈블리명령어 7번비트만 1로 만든다. 어셈블리가 더빠름
#define sleep() __asm__ __volatile__ ( "sleep" "\n\t" :: ) // 어셈블리어, 자라, 무한 while보다 좋다.
void __vector_1 (void) __attribute__((signal, used, externally_visible));
int main(void)
{
DDRA=0xff;
PORTA=0x00;
EICRA=(3<<ISC0); //ISC0은 INT0을 의미,OR이용해서 다른 인터럽터도 사용.
EIMSK=(1<<INT0);
SREG=SREG | (1<<7); // sei(); 랑 같다
while(1)
{
}
return 0;
}
void __vector_1 (void) //채터링현상 주의, 시간지연하는 방법이있음. sw적으로 해결가능하지만, hw적으로도 가능.
{
PORTA=~PORTA;
}
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160314- 이보원-스마트컨트롤러-펌웨어 (BK128을 이용한 스위치 점등 실험) (3) | 2016.03.16 |
---|---|
20160314-조재찬-업무일지-펌웨어 분석(외부 인터럽트) (3) | 2016.03.16 |
20160315_송민규_업무일지_펌웨어분석, 학습 (3) | 2016.03.16 |
20160311-허도경-업무일지-펌웨어분석 (0) | 2016.03.15 |
20160311_오아람_업무일지_데이터시트,실습+펌웨어분석 (1) | 2016.03.15 |
2016-03-14.강정수.펌웨어분석(EICRA,EICRB) (1) | 2016.03.15 |
main.h (0) | 2016.03.15 |
main.c (2) | 2016.03.15 |