S3C6410 베어 메탈 - 외부 인터럽트
외부 인터럽트 그룹 0 GROUP0 GPN0-GPN15 GPL8--GPL14 GPM0-GPM4
외부 인터럽트 그룹 1 GROUP1 GPA0-GPA7 GPB0-GPB6
외부 인터럽트 그룹 2 GROUP2 GPC0--GPC7
외부 인터럽트 그룹 3 GROUP3 GPD0 - GPD5
외부 인터럽트 그룹 4 GROUP4 GPF0 - GPF14
외부 인터럽트 그룹 5 GROUP5 GPG0-GPG7
외부 인터럽트 그룹 6 GROUP6 GPH0 - GPH9
외부 인터럽트 그룹 7 GROUP7 GPO0-GPO15
외부 인터럽트 그룹 8 GROUP8 GPP0 - GPP14
외부 인터럽트 그룹 9 GROUP9 GPQ0 - GPQ9
2. 중단 그룹의 중단 번호:
NO 인터럽트 소스 설명 GROUP
0 INT_EINT0 외부 인터럽트 그룹 0 bit[0-3] VIC0
1 INT_EINT1 외부 인터럽트 그룹 0 bit [4-11] VIC0
32 INT_EINT2 외부 인터럽트 그룹 0 bit[12-19] VIC1
33 INT_EINT3 외부 인터럽트 그룹 0 bit[20-27] VIC1
53 INT_EINT4 외부 브레이크 그룹 1-9 VIC1
3. 프로그램 설정을 중단한다.
1. 해당하는 GPIO 입구를 외부 인터럽트 모드로 설정한다.
사용된 레지스터: GPxCON
1 // GPN0 GPN1
2 GPNCON &=~(3 << 0);
3 GPNCON &=~(3 << 2);
4
5 //GPN0 GPN1
6 GPNCON |= (1 << 1);
7 GPNCON |= (1 << 3);
2. 외부 인터럽트와 관련된 설정 레지스터 설정;
사용된 레지스터: EINT0CONx(인터럽트 트리거 구성)
EINT0MASK(인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트 인터럽트)
PRIORITY(브레이크 우선 순위 구성)
1 //EINT0,1
2 EINT0CON0 &=~(7 << 0);
3 EINT0CON0 |= (2 << 0);
4
5 //
6 EINT0MASK &=~(1 << 0);
7 EINT0MASK &=~(1 << 1);
3. 에너지 중단 소스 요청
사용된 레지스터: VICxINTENABLE
1 //
2 VIC0INTENABLE |= (1 << 0);
4. 벡터 주소 구성
사용한 레지스터: VIC0VECTADDRx (서비스 중단 함수의 주소를 벡터 주소 레지스터에 쓰기)
1 //
2 VIC0VECTADDR0 = (int)IRQ_Handle_Exit;
5. 벡터 인터럽트 허용(6410은 비벡터 인터럽트와 벡터 인터럽트를 지원합니다. 210은 벡터 인터럽트만 지원합니다. 이 절차는 필요 없습니다.)
사용된 레지스터: 협동 프로세서 CP15의 C1 제어 레지스터(bit24)
6, 에너지 IRQ 중단(총 중단)
사용된 레지스터: 프로그램 상태 레지스터 CPSR
1 __asm__(
2 //
3 "mrc p15, 0, r0, c1, c0, 0
"
4 "orr r0, r0, #(1 << 24)
"
5 "mcr p15, 0, r0, c1, c0, 0
"
6 // RIQ
7 "mrs r0, cpsr
"
8 "bic r0, r0, #(1 << 7)
"
9 "msr cpsr_c, r0
"
10 :
11 :
12 );
7. 인터럽트 서비스 프로그램 작성
현장을 보호하다
프로그램 중단
인터럽트 플래그 지우기
EINT0PEND 중단 플래그 지우기(쓰기 1 지우기)
VICxADDRESS 벡터 주소 지우기
복구 현장
1 void IRQ_Handle_Exit(void)
2 {
3 //
4 __asm__(
5 "sub lr, lr, #4
"
6 "stmfd sp!, {r0-r12, lr}
"
7 :
8 :
9 );
10
11 //
12 if(EINT0PEND & (1 << 0)) //EINT0
13 {
14 led_all_on();
15 }
16 else if(EINT0PEND & (1 << 1)) //EINT1
17 {
18 led_all_off();
19 }
20
21 //
22 EINT0PEND = 0xFFFFFFFF;
23 VIC0ADDRESS = 0x00000000;
24
25 //
26 __asm__(
27 "ldmfd sp!, {r0-r12, pc}^
"
28 :
29 :
30 );
31 }
8. 부팅 코드 설정
IRQ 스택 설정
1 //start.S
2 init_stack:
3 // IRQ SP
4 msr cpsr_c, #0xd2
5 ldr sp, =0x53000000
6
7 // SVC SP
8 msr cpsr_c, #0xd3
9 ldr sp, =0x54000000
10 mov pc ,lr
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.