ARM Cortex M3 Programming1 - Overview, GPIO, UART Control
ARM Cortex M3 프로그래밍1 - 개요, GPIO, UART 제어
(추천) Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발 강의 - 입문편
ARM M3 프로세서
- 기본 환경 세팅 -
1. TeraTerm 설치
2. IAR Embedded Workbench IDE 설치
3. 테라텀에서 보드 연결 확인(장치관리자를 통해 com4~)
4. 구현한 코드 빌드해서 .bin파일을 TeraTerm 통해서 Y모뎀 전송
- RISC -> 명령어 크기를 줄여서 전력 down
- 저전력 프로세서 -> IoT에 활용 가능한 이점
- GPIO 입출력 제어 -> 각종 포트, LED, Key, Memory Mapped I/O를 이용한 메모리 접근
- 비트별 SET-RST 레지스터 제공: 비트연산 없이 빠르게 GPIO 비트 제어 (GPIOx->BSRR)
- 비트별 RESET 레지스터 제공: " (GPIOx->BRR)
- PORT 설정 잠금 기능
: 실수 방지를 위한 LOCK 필요 (GPIOx->LCKR)
- 비트 밴딩: 일반 비트 연산보다 빠른 비트제어
- 시간 지연용으로 for문 이용할 때, for문에 사용되는 변수는 volatile 선언하여 최적화 방지
- volatile 필요한 경우 (프로세스 외부적으로 바뀔 가능성이 있는 곳에 volatile적용!
- Memory Mapped I/O: 하드웨어적인 원인으로 값 변경되는 경우
- IPC: 다른 프로세스에서 그 값을 변경하는 경우
- DMA에 의한 전송: DMA 사용하여 데이터 이동하는 경우 (CPU는 그러한 메모리 변화를 알 수 없음)
- 인터럽트 처리루틴: 인터럽트 처리루틴과 Main 루틴의 공유 변수의 경우
컴파일러는 인터럽트 처리 함수가 CPU 호출 함수인지 알 수 없음
- 멀티코어: 다른 코어가 변수 변경하는 경우
- ARM CMSIS(Cortex Microcontroller Software Interface Standard)
: 제조사와 무관하게 호환성을 위한 공통의 함수 제공 목적 (독립적인 디바이스 인터페이스)
: ARM이 CMSIS 기반 레지스터 정의 및 헤더 제공
-> 덕분에 RTOS 커널을 그대로 보드에 올릴 수 있음
-> 제조사 독립적인 기능을 제공하여 코드 호환성 유지 (제조사가 달라져도 포팅하기 수월해짐)
- Clock Enable
- AHB
: RCC->AHBENR: AHB에 속한 주변장치들의 clock을 ON-off
: 주변장치 사용 전에 반드시 해당 장치 clock ON
- APB1
: RCC->APB1ENR: APB1 " "
- APB2
: RCC->APB2ENR: APB2 " "
- Peripheral Reset
- APB1
: RCC->APB1RSTR: APB1에 속한 주변 장치들을 RESET
- APB2
: RCC->APB2RSTR: APB2 " "
- USART
- USARTx->CR1: USART의 기본적인 동작 설정
->CR2: 주로 LIN에 관한 설정
->CR3: 흐름제어 및 IrDA, Smart Cart 설정
->BRR: Baud Rate 제어
->SR: 상태 확인
->DR: 송수신 데이터 읽거나 쓰는 역할
(
- Basic environment settings -
1. Install TeraTerm
2. Install IAR Embedded Workbench IDE
3. Check the board connection in Teratum (com4~ through device manager)
4. Build the implemented code and transfer the .bin file through TeraTerm to Y modem
- RISC -> Power down by reducing instruction size
- Low power processor -> Benefits available for IoT
- GPIO input/output control -> Memory access using various ports, LEDs, keys, and Memory Mapped I/O
- Bitwise SET-RST register provided: GPIO bit control quickly without bit operation (GPIOx->BSRR)
- Bitwise RESET register provided: " (GPIOx->BRR)
- PORT setting lock function
: Requires LOCK to prevent mistakes (GPIOx->LCKR)
- Bitbanding: Bitsteuerung schneller als normaler Bitbetrieb
- Bei Verwendung der for-Anweisung für die Zeitverzögerung werden die in der for-Anweisung verwendeten Variablen als flüchtig deklariert, um eine Optimierung zu verhindern.
- ggf. flüchtig (flüchtig anwenden, wo es sich wahrscheinlich außerhalb des Prozesses ändern wird!
- Memory Mapped I/O: Wenn der Wert aus Hardwaregründen geändert wird
- IPC: Wenn der Wert durch einen anderen Prozess geändert wird
- Übertragung per DMA: Wenn Daten per DMA verschoben werden (der CPU sind solche Speicheränderungen nicht bekannt)
- Interrupt-Handling-Routine: Im Falle einer gemeinsam genutzten Variable zwischen Interrupt-Handling-Routine und Main-Routine
Der Compiler weiß nicht, ob eine Interrupt-Behandlungsfunktion eine CPU-Aufruffunktion ist
- Multicore: Wenn andere Kerne Variablen ändern
- ARM CMSIS (Cortex Microcontroller Software Interface Standard)
: Zweck der Bereitstellung gemeinsamer Funktionen für herstellerunabhängige Kompatibilität (unabhängige Geräteschnittstelle)
: ARM bietet CMSIS-basierte Registerdefinitionen und Header
-> Dank dessen können wir den RTOS-Kernel so wie er ist auf das Board legen.
-> Erhalt der Codekompatibilität durch Bereitstellung herstellerunabhängiger Funktionen (Einfache Portierung auch bei Herstellerwechsel)
- Uhr aktivieren
- ABH
: RCC->AHBENR: Ein-/Ausschalten der Uhr von Peripheriegeräten, die zu AHB gehören
: Stellen Sie sicher, dass die Geräteuhr eingeschaltet ist, bevor Sie ein Peripheriegerät verwenden
-APB1
: RCC->APB1ENR: APB1 " "
-APB2
: RCC->APB2ENR: APB2 " "
- Peripherie-Reset
-APB1
: RCC->APB1RSTR: ZURÜCKSETZEN von Peripheriegeräten, die zu APB1 gehören
-APB2
: RCC->APB2RSTR: APB2 " "
-USART
- USARTx->CR1: Legen Sie die grundlegende Funktionsweise von USART fest
->CR2: hauptsächlich bezogen auf LIN
->CR3: Flusskontrolle, IrDA, Smart Cart-Einstellung
->BRR: Baudratensteuerung
->SR: Status prüfen
->DR: Sende-/Empfangsdaten lesen oder schreiben
)
타이머와 카운터, NVIC, 인터럽트, DMA는 다음 게시글로 작성합니다.
ARM Cortex-M3 매뉴얼 보기
https://developer.arm.com/ip-products/processors/cortex-m/cortex-m3
본 게시글은 개인 공부용으로 작성하여 내용의 퀄리티가 부족할 수 있습니다.
상세한 회로도나 스펙을 보시려면 arm 매뉴얼 참고 바랍니다.
(추천) Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발 강의 - 입문편
'Development Solutions > Embedded System' 카테고리의 다른 글
RTOS 3 - ECB (0) | 2022.08.20 |
---|---|
RTOS 2 - uC/OS real-time kernel architecture (RTOS 2 - uC/OS 실시간 커널 구조) (0) | 2022.08.20 |
RTOS 1 - Overview (RTOS 1 - 개요) (0) | 2022.08.20 |
ARM Cortex M3 Programming3 - Interrupts, NVIC, DMA (ARM Cortex M3 프로그래밍3 - 인터럽트, NVIC, DMA) (0) | 2022.08.20 |
ARM Cortex M3 Programming2 - Counters, Timers (ARM Cortex M3 프로그래밍2 - 카운터, 타이머) (0) | 2022.08.20 |