STM32H7 Dua-core 에서 어떻게 Peripheral을 제어하고 할당하는지에 대해 어플리케이션 AN5557을 번역하여 확인해 봅시다.
주변 장치 할당은 CPU 및 도메인 모드에 따라 클록 게이팅을 자동으로 제어하기 위해 리셋 및 클록 컨트롤러(RCC)에서 사용되며, 전원 컨트롤러(PWR)에서 D1, D2 및 D3 도메인의 공급 전압을 제어하기 위해 사용됩니다.
그림 4. RCC 블록 다이어그램에서 볼 수 있듯이 RCC는 주로 시스템 리셋 제어, 클록 분배, 클록 게이팅 제어, 레지스터 인터페이스 및 다양한 클록 소스로 구성됩니다.
클럭 게이팅 제어는 주변 장치 할당을 담당합니다. RCC는 리셋, 시스템 및 주변 장치 클록 생성을 관리합니다. 내부 발진기 4개, 외부 크리스탈 또는 레조네이터 발진기 2개, 위상 고정 루프(PLL) 3개를 사용합니다. 따라서 많은 주변 장치에는 시스템 클럭과 별개로 자체 클럭이 있습니다. RCC의 높은 유연성으로 클록 소스를 선택할 때 시스템 설계자가 전력 소비와 정확도 요구 사항을 충족할 수 있습니다.
수많은 독립 주변 장치 클록을 통해 설계자는 통신 전송 속도에 영향을 주지 않고 시스템 전력 소비를 조정하고 일부 주변 장치를 저전력 모드에서 활성 상태로 유지할 수 있습니다.
STM32H7 듀얼 코어의 다수의 주변 장치에는 프로세서 버스 인터페이스를 통한 데이터 및 제어 스트림용 클럭과 주변 장치별 인터페이스용 클럭이 있습니다. 일반적으로 프로세서 버스 인터페이스를 통한 데이터 및 제어 스트림에 대한 클럭은 'Bus 클럭'으로 명명되고 주변기기 특정 인터페이스에 대한 클럭은 'Kernel 클럭'으로 명명됩니다. 그림 5에서 볼 수 있듯이 주변 장치 클럭은 'Bus 클럭'과 'Kernel 클럭'과 같이 주변 장치에서 수신한 클럭을 나타냅니다.
별도의 Bus 클럭과 Kernel 클럭을 사용하면 애플리케이션이 주변 장치에 영향을 주지 않고 상호 연결 및 프로세서 동작 주파수를 변경할 수 있습니다. 일부 주변 장치의 경우 주변 장치가 시스템에 데이터를 전송할 필요가 없는 한 Bus 클럭을 비활성화할 수도 있습니다. 따라서 Bus 프로세서 및 메모리에 대한 주파수 선택과 주변 장치 인터페이스의 실제 요구에 대해 우수한 유연성을 제공합니다.
예를 들어, UART에는 직렬 인터페이스 통신을 위한 보레이트 생성기에 의해 사용되는 Kernel 클럭과 레지스터 인터페이스를 위한 APB 클럭이 있습니다. 따라서 시스템 클럭이 변경된 경우에도 전송 속도에는 영향을 받지 않습니다. 또한 일부 주변 장치는 특정 이벤트를 감지했을 때 Kernel 클럭를 요청할 수 있습니다.
앞에서 언급했듯이 주변 장치는 일반적으로 Bus 클럭과 Kernel 클럭의 두 가지 유형의 클럭을 수신합니다. 이러한 클럭은 각 주변 장치에 대해 하나 또는 여러 개일 수 있습니다. 각 프로세서는 RCC에 있는 전용 레지스터를 통해 주변 클록의 클록 게이팅을 제어할 수 있습니다.
그림 6에서 볼 수 있듯이 주변 장치 클록의 게이팅은 다음과 같은 여러 매개변수에 따라 달라집니다.
• 클록 활성화 비트, 각 프로세서에는 C1_PERxEN 및 C2_PERxEN이라는 전용 제어 비트가 있습니다.
• 저전력 클록 활성화 비트: C1_PERxLPEN 및 C2_PERxLPEN
• 프로세서 상태: CRUN, CSLEEP 또는 CSTOP
• D3 도메인에 있는 주변 장치용 자율 비트: D3_PERxAMEN
Table 2에서 주변장치 할당 동작은 다음과 같다.
• 비트 C1_PERxEN을 '1'로 설정하면 주변 장치 PERx가 CPU1에 대해 활성화되었음을 나타냅니다.
• 비트 C2_PERxEN을 '1'로 설정하면 주변 장치 PERx가 CPU2에 대해 활성화되었음을 나타냅니다.
• C1_PERxEN/C2_PERxEN이 모두 설정되면 주변 장치 클록은 두 CPU 상태를 따릅니다.
예를 들어, CPU1이 정지 상태이고 CPU2가 실행 중인 경우 주변 장치에 대한 클럭은 활성화된 상태로 유지됩니다.
RCC는 두 개의 레지스터 세트를 제공하므로 각 프로세서가 주변 장치를 활성화하거나 할당할 수 있습니다. 주변 장치 할당은 CPU1 또는 CPU2가 주변 장치를 활성화했음을 RCC에 알립니다. 이 정보는 저전력 모드에서 클록 제어를 위해 RCC에서 사용됩니다. 따라서 주변 장치를 사용하기 전에 CPU가 주변 장치를 할당해야 합니다. 두 프로세서에서 동일한 주변 장치를 할당할 수 있으며 리소스 충돌을 방지하는 것은 응용 프로그램에 달려 있습니다.
아래 그림에 소개된 것처럼 일부 주변 장치는 묵시적(Implicitly)으로 프로세서에 할당됩니다.
• FLASH, D1SRAM1, ITCM, DTCM1 및 DTCM2는 묵시적으로 CPU1에 할당되고 CPU2는 이들 중 하나를 할당할 수 있지만 기본적으로 CPU2에는 할당되지 않습니다.
• D2SRAM1, D2SRAM2 및 D2SRAM3은 묵시적으로 CPU2에 할당되며, CPU1은 이들 중 무엇이든 할당할 수 있지만 기본적으로 CPU1에는 할당되지 않습니다.
Note : 묵시적(Implicitly)이란 프로세서에 구조적으로 연결되어 있음을 의미합니다.
일부 다른 주변 장치는 두 프로세서에 모두 묵시적으로 할당되며, 이러한 경우는 다음과 같은 주변장치 IWDG1, IWDG2, RCC, PWR, AIEC 및 D3SRAM1의 경우입니다.
CPU가 주변기기를 할당하면 이 주변기기는 저전력 모드의 프로세서 상태에 연결됩니다. CPU와 이 CPU에 의해 할당된 주변 장치 및 연결된 상호 연결은 RCC에서 CPU 하위 시스템으로 간주됩니다. D1 및 D2 도메인 코어 전압을 끌 수 있습니다.
RCC에 의한 주변 장치 할당의 사용에 대한 간단한 예를 들자면, RCC는 이 도메인의 주변 장치 중 하나가 사용되지 않는 다른 도메인의 프로세서에 의해 사용되는 경우 해당 도메인이 꺼지는 것을 허용하지 않습니다.
참고: 주변 장치 할당에 대한 자세한 내용은 ST 웹사이트 www.st.com 에서 제공되는 애플리케이션 노트 AN5215 "STM32H747/757 고급 전원 관리"를 참조하세요.
'▶ ARM Core' 카테고리의 다른 글
DSB, ISB, DMB Barrier 명령어들 (0) | 2023.11.17 |
---|---|
IRQ Handler table을 RAM에 올리기 (0) | 2023.11.17 |
[AN4838] STM32 MPU (3) (0) | 2023.11.17 |
[AN4838] STM32 MPU (2) (0) | 2023.11.17 |
[AN4838] STM32 MPU (1) (0) | 2023.11.17 |