2023. 8. 10. 16:08ㆍEmbedded/ARM Cortex
- 파이프라인
임베디드 시스템에서의 파이프라인은 프로세서의 성능을 향상시키기 위해 사용되는 중요한 개념이다. 파이프라인은 명령어 실행 과정을 여러 단계로 나누어 동시에 여러 명령어가 실행될 수 있도록 하는 기술이다. 이렇게 하면 단일 명령어의 실행 시간을 줄이고, 전체 시스템 성능을 향상시킬 수 있다. 명령어를 가지고 와서 비트단위로 분석하는 것이다.
sfp파일에 값이 변경되면 이 값에 따른 하드웨어가 반응을 한다.
Cortex -m의 메모리맵에선 pheripheral의 주소가 4천만번대이다.
Cortex m의 메모리맵에 맞춰서 주소를 입력해줘야 한다.
Peripheral은 2가지 존재 – 칩제조사가 만든 것과 cortex가 만든 것
Sfp파일 통해 하드웨어 설정 가능
System timer : 떨어지는 주기를 시스템 클럭에 맞춰서 설정가능
x값이 얼마로 설정해둬야 1ms로 맞출 수 있을까 (내부 클럭 : 72MHz)
è X : 71999로 맞추면 1ms로 맞출 수 있다. 인터럽트를 줄지 말지 결정가능
1.초기값설정
2.주기설정
3.타이머가 0이될 시 arm core에게 인터럽트를 줄지 말지 결정
4. 클럭소스를 1로 하면 / 0으로 하면
카운터값이 0이
시스템타이머가 인터럽트 요청을 받을 때 코어는 어떤역할을하는ㄴ가
- ㅡ main 함수 실행 -> 인터럽트 -> 무한루프 도는 중
- 시스템타이머는 벡터테이블에서 internal이다.
- 15 0x3c (xxxxxxx -> pc, 시스템 타이머에서 주소값나타냄. 해당 값의)
어셈블리 명령어가 아닌 디렉토리 명령어
MySystemTimerIsr 디렉토리를 추가한다는 뜻
폴링 방식 인터럽트
Cortex m
Nor flash에 머신코드가 존재
Cortex-m의 코어는 nor flash의 머신코드를 들고와 수행한다. (main문의)
Nvic – 카운터값이 0이 되면 인터럽트를 주라고 코딩했다.
Pc가 0x3c번지의 4바이트를 읽으면 함수의 에섬블리 명령어에 해당하는 주소를 읽어온다.
시스템 타이머 -> nvic -> core -> core에서 시스템 타이머의 nvic에 해당하는 인터럽트를 nor flash의 벡터테이블에서 읽어온다. ->nor flash의 벡터테이블에서 읽어온 함수의 주소에 있는 변수를 sram에서 읽어온다(core가) -> core에서 연산 한다. -> 결과값 반환한다. (주소값에 맞는)
#define rSCSR (*(int *) 0xE000E010)
#define rSRVR (*(int *) 0xE000E014)
#define rSCVR (*(int *) 0xE000E018)
unsigned int gTickCount;
//it use systemtimer
void MySystemTimerIsr(){
gTickCount = gTickCount + 1;
}
void main(){
rSRVR = 72000 - 1;
rSCSR = 7;
인터럽트 서비스 루틴은 시간이 많이 걸리지 않는 작업을 걸어주는 것이 좋다.
è 많이 걸리는 것은 MAIN문에서 작업하는 것이 좋다.
인터럽트 – 주변장치 IP가 인터럽트를 주고 PROCESSOR가 받는다.
인터럽트 마스크 = 인터럽트를 ENABLE / DISABLE한다는 것
마스크 = 임베디드에서 마스크는 금지한다는 뜻
레퍼런스 매뉴얼에 해당 절대주소들이 나온다.
모든 하드웨어 제어를 SFP를 통해 하고 있다.
팬딩 = 인터럽트 서비스 루틴을 처리하기 전까지의 기다리는 시간
Center key PA2 -> EXTI -2 -> irq8 (이 부분부턴 processor))
arm core는 시스템 타이머로부터 1ms 주기로 동작
이 함수의 주소 / 벡터테이블의 0x60에 exit_2_isr함수를 집어넣는다.
프로세서는 while루프에서 돌고있다 키 누르는 순간 irq8로 요청을 받는다(cortex m 은 irq로 요청받음) 그렇다면 메모리맵의 0x60번지에 있는 exit_2_isr에 있는 함수를 pc에 넣는다.
EXTI는 SMT32 (칩 제조사)
IRQ 는 ARM cortex (arm사)
ISER = ISER | (0xIF<<6)
ISER = (0xIF<<6)
인터럽트가 만약 중첩으로 들어온다면 우선순위에 따라 인터럽트가 작동된다.
UP : EXTI – 0 (IRQ6)
RIGHT : EXTI – 4 (IRQ10)
'Embedded > ARM Cortex' 카테고리의 다른 글
[IDEC] ARM Cortex-M 프로세서 기반의 펌웨어 설계실무 3 (0) | 2023.08.10 |
---|---|
[IDEC] ARM Cortex-M 프로세서 기반의 펌웨어 설계실무 1 (0) | 2023.08.09 |