NVIC, Exception Vector Table
·
ARM arch/Cortex-M
NVICNested Vectored Interrupt Controller(중첩 벡터형 인터럽트 제어기)즉, 우선순위에 따라서 모든 인터럽트를 처리 가능Cortex-M 프로세서의 내부에 위치최대 256개의 서로 다른 우선 순위 설정 가능, 최대 240개 외부 인터럽트 지원 가능프로세스 상태: 인터럽트 진입시 자동으로 저장(by HW), 인터럽트 종료 시 복원인터럽트 테일 체인 지원Cortex-M의 벡터 테이블은 이전의 레거시 ARM 코어와 약간 다름하드웨어 인터럽트 처리를 메인 인터럽트 벡터테이블에서 처리 → 응답시간 개선레거시 ARM과 달리, 벡터 테이블에 명령어가 아닌 예외처리기 및 ISR의 주소가 포함Exception Vector Table총 n개의 인터럽트 처리를 위한 테이블벡터 테이블은 인터럽트 ..
cortex-m3 AMBA와 메모리 맵
·
ARM arch/Cortex-M
AMBAAdvanced Microcontroller Bus ArchitectureARM에서 제시한 SoC 내부 버스 구조 표준 규약다양한 IP블록을 어떻게 연결하고 통신할지에 대한 버스 인터페이스 프로토콜IP : Intellectual Property왜 사용?만약 각 MCU(SoC)마다 버스 구조가 다르면유지보수 어려움성능 편차 발생IP재사용성 떨어짐그래서 AMBA를 채택ARM기반 SoC간 호환성 확보버스 통신 효율성 향상디자인 재사용/모듈화AHBAdvanced High-performance Bus고속 메모리 접근RAM이나 프로세서같은 경우 고속의 장치이고 그에 맞는 고속Bus가 필요APBAdvanced Peripheral Bus저속 주변장치 연결I/O장치같은 것들은 상대적으로 저속이므로 저속 Bus를 ..
2025.07.09 - ARM assembly 프로그래밍2
·
ARM arch/Cortex-M
load / store 명령어ldrldr r1, =0x20000148ldr r0, [r1]r1에 주소를 저장하고r0에 해당 주소에 있는 값을 저장strstr r1, =0x20000154str r0, [r1]r1에 주소를 저장하고r0의 값을 해당 메모리주소에 저장ldrb메모리에서 1byte만 읽을 때ldr r1, =0x20000148ldrb r0, [r1]ldrb에서의 b는 byte를 의미함r1에 주소를 저장하고해당 주소에서 1byte를 읽어서 r0에 저장pre-indexed addressing modeldr r1, =0x20000140ldr r0, [r1, #8]실제 접근하는 주소는 0x20000148이 된다.post-indexed addressing modeldr r1, =0x20000140ldr r0..
2025.07.07 - ARM assembly 프로그래밍1
·
ARM arch/Cortex-M
분기문 - 두 수 중 큰 값을 반환max_prac: cmp r0,r1 @ compare with r0, r1 based on r0 bge 1f @ greator equal blt 2f @ less than1: @ r0가 더 클때 mov r0, r0 bx lr2: @ r1가 더 클때 mov r0, r1 @ r0이 반환 레지스터이기 때문에 결과를 r0에 저장 bx lr @ 복귀주소로 복귀AAPCS에 의해 r0에는 인자1, r1에는 인자2가 들어감r0과 r1을 r0 기준으로 비교r0이 크거나 같으면 분기 1, r1이 크면 분기 2리턴 레지스터가 r0이므로, 큰 값을 r0에 넣어두고 반환비트 연산 - 특정 비트 클리어 .global clear_unusedclear_unused: mov r2,#1 @r2에 숫자..
빅 엔디언, 리틀 엔디언
·
ARM arch/Cortex-M
엔디언 (Endian)컴퓨터의 메모리와 같은 1차원의 공간에 다 바이트 이상의 데이터를 저장할 때, 바이트 순서를 정하는 방식메모리 ↔ 레지스터 간의 읽기/쓰기 시 바이트 순서에 영향을 받는다.빅 엔디언 (Big-Endian)MSB를 먼저 저장리틀 엔디언 (Little-Endian)LSB를 먼저 저장메모리의 시작 주소에 있는 데이터에서 레지스터의 MSB부터 채워진다. 메모리의 시작 주소에 있는 데이터에서 레지스터의 LSB부터 채워진다.Cortext-M기본적으로 Little-Endian을 채택대부분의 MCU 및 저전력 임베디드 시스템에서의 성능 및 호환성 확보 목적
AAPCS
·
ARM arch/Cortex-M
procedure call standard for ARM instruction어셈블리 함수 C호출 예제ARM 어셈블리에서는 함수 호출과 반환이 AAPCS (ARM Architecture Procedure Call Standard)에 따라 이루어짐.아래는 2개의 int 값을 더해서 반환하는 어셈블리 함수를 C에서 호출하는 예제 어셈블리 함수 (libs.s) .global FIRST_ASM_FUNCFIRST_ASM_FUNC: @ 함수 시작 (전역 레이블) add r0, r1 @ r0 = r0 + r1 (r0: 첫 번째 인자, r1: 두 번째 인자) bx lr @ 복귀 (lr에 저장된 주소로 분기), r0 값이 반환됨C 코드에..