본문 바로가기
개발

[STM32] STM32 세미나

by 마스터누누 2017. 4. 18.
728x90
반응형

STM32 세미나 





강좌의 순서 


Core 레벨(Cortex)-> CPU 레벨(STM32)-주변장치가 어떻게 연결되어있는가 -> 개발보드-사용법


 


fetch -> Decode -> excution



fetch - 명령을 가지고 오는 행위

① PC가 가리키는 주소의 명령어를 가지고 온다

② PC의 값이 4증가(명령어 하나가 32비트-4바이트이기 때문에)

-> 다음 명령을 가리킨다


Decode - 가져온 명령어를 해석하여 세팅함

① 명령어 해석

② ARM은 R0에서부터 R15까지 내부 범용 레지스터(레지스터 뱅크)가 존재한다.

-> 레지스터끼리 역할을 분담함


excution - 명령어 수행(Data 처리)

① Berrel Shift 연산을 진행한다.

② ALU 연산을 진행한다.

 

CPU 구조의 변화

stored program -> 폰노이만 -> 하버드

cisc->risk

 

ARM은 반도체회사가 아니다 -> CPU 설계회사이다

반도체회사는 설계된 CPU를 가져와서 반도체를 설계함






- ISA 레벨 -



○ ISA(instruction set architecture)


CPU는 명령을 처리 한 후 결과(Data)를 도출 한다.

컴퓨터는 조작이 가능한 기계-> Input Output이 있음

Data는 레지스터(Direct Access)와 메모리(numbering), 그리고 명령어(operand)에 있음

입력이 있을 때 명령에 따른 제어를 통해 출력을 내는 기계장치를 컴퓨터라고 한다.

 

ISA Thumb-2 명령어를 사용한다.

-> ISA를 가지고 코어를 만듬. ARM이라는 회사에서 만든 코어가 Cortex 시리즈

-> 이걸 반도체 회사(Co.STM)에서 사서 CPU(MCU)를 만든 것이 STM32 시리즈.

-> 여기서 만들어진 CPU를 이용하여 만든 것이 개발보드이다.


궁극적으로 CPU는 명령어를 얼마나 빨리 처리하느냐가 과제이다.

, CPU의 성능은 처리속도에 달려있다.

따라서 회사들은 CPU의 처리속도를 높이기 위해서 여러 가지 구조적 속도 향상(하버드구조, RISK구조 등)을 연구한다.


 32비트 ALU를 가지고 있으나 16비트 명령어는 fetch되고 디코딩 명령에서 제어기가 Thumb-2를 이용하여 Translation하여 연산한다.

① 코드의 공간을 효율적으로 사용 할 수 있다.

② 2번 가져올 데이터를 1번가져올 수 있다.(32비트를 가져와서 16비트씩처리)

-> fetch의 시간이 줄어든다, 파이프라인 헤저드를 줄 일수 있다.


※ 파이프라인 헤저드(원하는때 데이터를 가져오지 못함)

메모리는 느리고 CPU는 빠르기 때문에 제때 가져오지 못하고 지연되는 경우

따라서 CPU는 이러한 헤저드 현상을 줄이는데 성능이 향상된다.






- CORE 레벨 -



○ ARM CPU


ARM7(ARMv4T) -> ARM9(ARMv5) -> ARM11(ARMv6)

순서로 개발이 진행되다가 cortex A.R.M 시리즈가 개발됨

분야별로 CPU의 종류를 분리하자는 취지로 Cortex 개발






○ Cortex M3의 특징


- 하버드 구조 -> 데이터 버스와 명령어 버스가 분리되어 있어서 데이터와 명령어를 동시에 사용 할 수 있다.

(데이터,명령어 버스가 하나이면 폰 노이만 구조이다)

- Thumb-2 명령을 이용하여 32bit 16bit를 동시에 사용(동시에 사용하면 메모리를 효율적으로 사용 할 수 있다) -> thumb-2 16bit 명령어를 디코드 과정에서 32bit로 변환시킨다.

- 곱셈(가산기 추가)과 나눗셈을 하는 연산자까지 들어가 있음

- 기존의 ARM7과 비교하였을 때 35% 더 빠르고 45% 더 적은 코드로 구동 가능





○ ISA와의 관계


 

ISA에 외부적인 기능/장치를 추가하여 코어를 만든다


예)

ETM : Core에 디버깅 기능을 추가

NVIC : Core에  인터럽트 기능을 추가





○ 컴파일 순서


 




○ 명령어 set Architecture


 

예) Add R0,R1,R2,|s|,R3

  A-Bus,  B-Bus


Fetch

① 메모리에 저장된 데이터를 불러온다(E0 81 03 12)

② fetch 후 PC는 4바이트씩 증가한다(a+4)


Decode

① a주소값의 데이터들이 들어오면 명령어를 해석한다.

② 레지스터를 알맞은 위치로 세팅한다


Excution

① Berrel Shift 연산을 진행한다

② ALU연산을 진행한다.

③ Write Back


즉, 

Rd는 R0, 

Rn은 R1,

Rm은 R2,

Rs 는 R3가된다.


※ Rn은 A 버스에 들어가는 레지스터

Rm은 Barrel Shifter에 들어가는 레지스터

Rs는 Shift된 값이 저장되는 레지스터

Rd는 연산결과가 저장되는 레지스터

->Rn은 R0에서 부터 R15까지 범용레지스터 누구나 다 될수 있다.




○ Cortex M3 파이프라인

- combination(조합로직), sequential 관점에서의 명령어 실행 과정




※ 파이프라인(Pipe line)

: 출력이 다시 입력으로 들어오는 구조를 파이프라고 하고 파이프들이 여러 개 조합되어있는것을 파이프라인이라고 한다. 

파이프라인에서 각각의 기능 블럭을 Stage라고 하고 Stage는 파이프로 연결되어있다.


파이프라인 동작원리

클럭 발생 시 순차논리회로는 주소값을 호출, PC값에 저장한다. 다시 클럭이 들어오면 저장된 PC값에 +4를 해주고 다시 뒤로 반환시키고 내부의 주소는 조합논리로 보낸다. 

조합논리회로는 들어온 PC값에 해당하는 명령어를 수행하고 다음 Stage로 보낸다.

순차논리는 닫혀있을때는 저장공간의 역할을 하고 열려있으면 주소값을 내보낸다. 


여기서 클럭이 들어와서 Stage가 열렸을 때 제대로 기능을 실행하지 못하여 파이프라인이 깨져버리는 것이 헤저드이다.




○ Cortex의 예외처리


예외처리 되는 기능들은 벡터 테이블로 생성되어 해당 이벤트가 발생하였을때 테이블로 진입하여 수행된다. 

인터럽트 중 16개는 Default 값으로 건드리면 안된다.(reset interrupt, SVcall, Debug Monitor 등) 나머지 값들은 업체에서 개별적으로 할당한다.



기존의 구조는 인터럽트를 Push나 Pop을 소프트웨어적으로 구성하였으나

Cortex M3는 하드웨어적으로 구성함으로써 유동적으로 인터럽트 상황을 판단하여 빠져나가게 하여 효율적이다.



○ 데이터 처리시 ARM7 Cortex의 차이점






- CPU 레벨 -



○ STM32의 특징(STM32F103CBT6 기준)

STM32/ F103/ C/ B/ T/ 6

회사 모델(M3)/ 핀수/ 메모리/ 패키지/ 온도범위

핀수 : T-32, C-48, R-64, V-100

메모리 : B-128

패키지 : T- 한 변당 핀이 12개씩 달려있음, Q, F, P


1. 저전력(27mA)

2. 속도가 굉장히 빠르다(72Mhz)

3. 핀마다 기능이 많음(Alternative function-중첩기능)

 

Power on reset -> boot 모드 체크 -> 클럭 setting






○ STM32의 구조



 

상단의 아키텍쳐가 다음과 같이 메모리에 매핑되어있다.

(코어와 CPU의 관계는 메모리 맵으로 규정된다.)

 각각의 기능은 번지수가 있다



○ 파워리셋

 



○ 클럭 생성


 



반응형

'개발' 카테고리의 다른 글

[Smartrobot] 아두이노 포팅  (0) 2017.04.18
[STM32] 소스에서 메모리 주소 찾기  (0) 2017.04.18
[STM32] GPIO 사용방법  (0) 2017.04.18
[STM32] keil설정 및 다운로드  (0) 2017.04.18
[Dummy]Microchip 전자시계 완성 소스  (0) 2017.04.18

댓글