[Cortex-M3] 6. DMA와 ADC

2019. 9. 16. 22:11개발 관련 학습정리/ARM(cortex-m3) Register 분석

반응형

 

오늘은 DMA(Direct Memory Access)와 ADC(Analog to Digital Converter)에 대하여 알아보자

 

 

 

 

 

 

 

 

DMA는 메모리로 데이터를 전송해주는 페리퍼럴로, ADC의 값을 전달하는데도 유용하게 쓰인다.

 

DMA는 1부터 7까지의 채널로 이루어져 있으며  각각의 우선순위를 결정할 수 있다는 특징이 있다.

 

그럼 이제 DMA를 다루기 위한 레지스터들을 알아보자.

 

 

DMA register


1. DMA_CCRx (DMA channel x configuration register)

 

MEM2MEM (Memory to memory bit) : 메모리에서 메모리로 보내는 모드를 설정하는 비트이다.

 

MSIZE1...0 (Memory size) : 보낼 메모리의 비트 단위를 설정한다. 8/16/32비트로 설정할 수 있다.

 

PSIZE1...0 (Peripheral size) : 보내는 페리퍼럴의 비트 단위를 설정한다. 8/16/32비트로 설정할 수 있다.

 

MINC (Memory increment mode) : 데이터를 보내고 나서 메모리의 주소 증가 여부를 결정하는 비트이다.

 

PINC (Peripheral increment mode) : 데이터를 보내고 나서 페리퍼럴의 주소 증가 여부를 결정하는 비트이다.

 

CICR (Circular mode) : 데이터를 다 보내고 난뒤 다시 첫 주소로 회귀 여부를 결정하는 비트이다.

 

DIR (Data transfer direction) : 데이터를 페리퍼럴에서 읽을지 메모리에서 읽을지 결정하는 비트이다.

 

EN (Channel enable) : 해당 DMA채널을 활성화 시키는 비트이다.

 

 

 

 

 

 

2. DMA_CNDTRx (DMA channel x number of data register)

 

NDT (Number of Data to Transfer) : 메모리를 카운트 만큼 이동시키는 비트이다. 

카운트의 단위는 위의 주소 증가여부 비트인 PSIZE/MSIZE에 의해 결정된다.

 

 

 

 

 

 

3. DMA_CPARx (DMA channel x peripheral address register)

 

PA (Peripheral Address) : DMA에 사용할 페리퍼럴의 주소를 설정하는 비트이다.

 

 

 

 

 

 

4. DMA_CMARx (DMA channel x memory address register)

 

MA (Memory Address) : DMA에 사용할 메모리의 주소를 설정하는 비트이다.

 


 

 

 

데이터를 이동시켜줄 DMA의 레지스터를 알아보았으니 센서값을 받아올 ADC의 레지스터들을 알아보자.

 

Cortex-M3의 ADC는 16개의 시퀀스, 18개의 채널과 사이클 주기를 갖고있다.

 

이번에는 ADC를 이용하여 아날로그값을 디지털화 시켜 DMA를 통해 변수로 보내는 것이 목표이니

 

목표에 맞춰 설명해 보도록 하겠다.

 

간단하게 ADC 레지스터들을 살펴보자

 

 

ADC Register


1. ADC_CR1 (ADC control register 1)

이 레지스터는 대부분 인터럽트와 watchdog과 관한 레지스터이니 일부분만 알아두고 넘어가자

 

AWDEN (Analog watchdog enable) : 채널에서 watchdog 사용여부를 결정하는 비트이다.

 

SCAN (Scan mode) : 스캔모드 결정여부 비트이다. 스캔모드 활성화시 ADC_SQR비트에서 값을 읽어온다.

 

EOCIE (Interrupt enable for EOC) : EOC interrupt 활성화 비트로, EOC는 ADC가 변환 완료 되었을때를 의미한다.

 

 

 

 

 

 

2. ADC_CR1 (ADC control register 2)

 

SWSTART (Start conversion of channel) : EXTSEL비트에 의해 SWSTART모드가 활성화되면,

이 비트가 활성화될때 ADC가 시작된다.

 

EXTSEL (External event select for regular group) : ADC start 모드를 설정하는 비트들이다.

000~110 까지는 타이머와 외부 인터럽트에 의해 시작되는 모드이고,

111이 SWSTART 모드이다.

 

DMA (Direct memory access mode) : DMA 사용여부를 결정하는 비트이다.''

 

ADON (A/D converter ON/Off)ADC자체를 on/off 하는 비트이다.

 

 

 

 

3. ADC_SQR1 (ADC regular sequence register 1)

 

L[3:0] (Regular channel sq length) : 시퀀스 길이를 설정하는 비트이다.

ARM으로 배우는 임베디드 리눅스 시스템:CPU에서 안드로이드까지 총망라, 한빛미디어
반응형