일반 데이터 처리 명령어 MOV : 데이터를 레지스터로 이동시키는 명령, 1cycle 소요 MOV , #imm // = #imm MOV R0, #5 //R0 = 5 계속 업데이트 예정입니다.
간혹 코드 수행시간을 타이트하게 관리 해야할 경우가 있습니다. 이럴 땐 각 함수별로 혹은 코드 흐름중에 해당 코드 수행시간을 측정할 수 있다면 좀 더 시간관리가 용이할 수 있습니다. 다행히 Arm cotex-m3, m4 에서는 CoreDebug라는 register를 통해 CPU cycle을 측정 해 볼 수 있습니다. uint32_t cycles = 0; CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; DWT->CYCCNT = 0; // 수행코드 삽입 cycles = DWT->CYCCNT; 물론 수행코드 사이에 interrupt가 발생하게되면 오차가 발생할 수 있습니다. cycles는 Core clock..
ARM-Cortex M 시리즈에서는 컴파일러의 최적화에 따라서 다르지만 서브루틴을 호출하면 원래의 위치로 복귀하기 위해서 LR(Link Register)에 PC의 내용을 저장하게 됩니다. 하지만 Exception(혹은 Interrupt)상황에서는 LR에 아래와 같은 이상한 값들이 저장됩니다. 0xFFFFFFF1 0xFFFFFFF9 0xFFFFFFFD 0xFFFFFFE1 0xFFFFFFE9 0xFFFFFFED 왜 이럴까요? 결론적으로 말씀드리자면 Exception 해제시 Handler/Thread Mode, MSP/PSP를 시스템이 알기 위해서 입니다. 위의 값을 EXC_RETURN 값이라고 하는데 이 값들이 LR에 저장이 되고 Exception 해제시 시스템이 LR을 읽어 진입시의 상태로 되돌릴 수 ..
Core Architecture Barrier 우리가 직관적으로 생각하기에는 ARM Core에서 메모리 시스템이 메모리 트랜잭션을 생성한 인스트럭션의 순서와 같은 순서로 트랜잭션이 실행될 것이라고 생각하기 쉬우나 이는 틀린 생각입니다. 메모리 트랜잭션의 순서는 하드웨어의 특성에 적응하기 위해 변경될 수 있습니다. 예를 들어, 기저 물리 메모리에 접근하기 위해 필요한 대기 상태나 마이크로코드 수준에서 구현된 추측 분기 예측 메커니즘 같은 것을 말합니다. Cortex-M 마이크로컨트롤러가 주변장치 및 시스템 구역에 걸쳐 엄격한 트랜잭션 순서를 보장하기는 하지만, 경우에 따라서는 실행 순서를 고려해 코드를 구현해야 합니다. 다음 인스트럭션을 실행하기 전에, 이전 메모리 트랜잭션이 수행됐음을 확인하기 위해 적절..
STM32CubeMX에서 기본적으로 생성되는 코드는 Flash 메모리에 IRQ Handler들을 올립니다. 그래서 Interrupt가 발생하게 되면 Flash에 올라가 있는 IRQ Handler를 호출하여 해당 Interrupt를 수행하게 됩니다. 간혹 Application이 Flash가 아닌 RAM에서 실행되어야 하는 경우가 생기는데요, 이러한 경우 보통 IRQ Handler를 RAM function으로 만들어 Interrupt가 발생하면 RAM 상에서 해당 Interrupt를 처리하도록 합니다. 여기서의 맹점은 무엇일까요? 바로 IRQ Handler의 Vector Table이 Flash에 있다는 것입니다. Interrupt가 발생하면 Flash의 Start 영역에 기록된 Vector Table을 참조..
STM32H7 Dua-core 에서 어떻게 Peripheral을 제어하고 할당하는지에 대해 어플리케이션 AN5557을 번역하여 확인해 봅시다. 주변 장치 할당은 CPU 및 도메인 모드에 따라 클록 게이팅을 자동으로 제어하기 위해 리셋 및 클록 컨트롤러(RCC)에서 사용되며, 전원 컨트롤러(PWR)에서 D1, D2 및 D3 도메인의 공급 전압을 제어하기 위해 사용됩니다. 그림 4. RCC 블록 다이어그램에서 볼 수 있듯이 RCC는 주로 시스템 리셋 제어, 클록 분배, 클록 게이팅 제어, 레지스터 인터페이스 및 다양한 클록 소스로 구성됩니다. 클럭 게이팅 제어는 주변 장치 할당을 담당합니다. RCC는 리셋, 시스템 및 주변 장치 클록 생성을 관리합니다. 내부 발진기 4개, 외부 크리스탈 또는 레조..
MPU setting example with STM32Cube HAL on Armv6 and Armv7 architectures 아래 표는 내부 SRAM, 플래시 메모리 및 주변 장치와 같은 메모리 영역으로 MPU를 설정하는 예를 설명합니다. 기본 메모리 맵은 권한 있는 액세스에 백그라운드 영역으로 사용되며 MPU는 HardFault 핸들러 및 NMI에 대해 활성화되지 않습니다. Internal SRAM: 8 Kbytes of internal SRAM is configured as Region0 내부 SRAM: 8KB의 내부 SRAM이 Region0으로 구성됨 Memory attributes: shareable memory, write through with no write allocate, fu..
Cortex-M33 memory types, registers and attributes MPU 작업에 대한 개념은 유사하지만 Armv8-M 아키텍처의 MPU는 이전 버전의 M-profile Arm 아키텍처의 MPU와 다른 프로그래머 모델을 가지고 있습니다. 모든 MPU 레지스터가 뱅크된다는 사실을 깨닫는 것이 중요합니다. Arm TrustZone®이 활성화된 경우 보안 상태에 대한 MPU 레지스터 세트와 비보안 상태에 대한 미러 세트가 있습니다. 0xE000 ED90과 0xE000 EDC4 사이의 MPU 주소에 액세스할 때 액세스되는 MPU 레지스터의 유형은 프로세서의 현재 상태에 의해 결정됩니다. 비보안 코드는 비보안 MPU 레지스터에 액세스할 수 있고 보안 코드는 보안 MPU 레지스터에 액세스할..