'TMS320/F28335'에 해당되는 글 23건

  1. 2014.08.18 ADC(1)
  2. 2014.08.18 Gpio
  3. 2014.08.18 기본자료
TMS320/F283352014. 8. 18. 17:32

출처 : http://blog.naver.com/zeratool2/80109561219


본인이 작성한것이 아니라 퍼온것임을 밝힌다.

읽으면서 이해하고 이후 프로젝트와 연결하여 다시 설명한다. 내용은 거의 같게 하겠다.


ADC Registers


ADCTRL1~3마다 각각 다루는 영역이 다르다.

====================================================================================================

ADCTRL1




14 : Reset 핀

ADC모듈의 소프트웨어 리셋. 1을 주면 DSP가 리셋되는듯이 ADC의 모든 값, 설정이 초기화 된다.


13~12 : SUSMOD[1:0]

에뮬레이션 도중 브레이크를 만났을때는 행동지침을 설정한다.

00:에뮬레이션 서스펜드를 무시한다. : 브레이크를 무시하고 그냥 진행한다.

01:현재 시퀀서의 동작이 완료된 후 ADC를 정지한다.

10:현재 변환중인 시퀀서가 변환을 완료한 후 정지한다. 

11:시퀀서나 로직을 그 즉시 정지한다.


11~8 : ACQ_PS[3:0]

데이터 수집 윈도우 사이즈. SOC펄스의 길이를 조절하기 위한 비트필드로 샘플링 스위치의 주기가 끝나는 시간을 정한다. SOC펄스의 길이는 ADCLK주기의 (ADCTRL1[11:8]+1)배이다.

무슨말이냐면 


순차 샘플링시 타이밍도와 변환주기 공식




동시 샘플링시 타이밍도와 변환 주기공식


위 두 경우의 ACQPS에 들어가는 값을 정해주는 것이다.

변환주기란, 변환을 시작하여 모든 채널의 변환을 끝마칠 때까지의 시간이다.

위의 식은 28335에서 제공하는 16개의 ADC채널을 모두 변환한다는 전제하의 공식이다.


ADC의 클럭설정의 처리과정은 아래와 같은데


ADC공급 클럭, S/H(sample-and-hold)의 생성과정


위 과정에서 제일 마지막에 ACQPS가 사용된다.

Tadcclk는 ADCCLK의 역수로써각각 주기와 주파수를 뜻한다.


7 : CPS

위 그림의 6번째 단계에서 ADCCLK를 정하기 위한 최종옵션으로 0이면 1분주, 1이면 2분주이다.

즉, ADCCLK = Fclk/1 or Fclk/2 인것이다.


6 : CONT RUN

Continuous run. 1일 때 Continuous run mode가 된다. 나는 잘 모르는 AVR의 프리런 모드와 같다는데, 한번의 변환이 끝나면 자동으로 다음 변환을 하게 된다고 한다. 0이면 단발성 변환인 Start-Stop mode가 된다고 한다.


5 : SEQ OVRD

Continus mode에서만 유효하다. 1일경우 Override mode가 활성화 된다.

Override mode의 경우, 선택된 모든 채널의 변환 결과가 저장된 후에도 시퀀서의 상태 레지스터가 초기화 되지 않는다.

16개의 결과저장 레지스터가 꽉 찬 후에야 다시 처음부터 채우기 시작한다.


0일 경우 1회 변환이 종료되었을 때, 상태 레지스터가 초기화 되므로 결과저장 레지스터가 16개 다 채워지지 않아도 다음 변환때 다시 처음부터 채우게 된다.


4 : SEQ CASC[Cascaded Sequencer operation]

1일 경우 직렬시퀀서 모드[Cascaded Sequencer Mode]를 활성화 시키고

0일 경우 병렬시퀀서 모드[Dual-sequencer Mode]를 활성화 시킨다.



사진의 하단부에 시퀀서 1, 2를 확인할 수 있다.

시퀀서 1은 ADC0~7을, 2는 ADC8~15를 관장한다. 또한 시퀀서 1은 입력수단이 3가지 2는 2가지 이다.

병렬시퀀서 모드는 시퀀서 1,2가 각각 핀들을 관장하며 직렬시퀀서 모드의 경우 시퀀서 1이 모든 핀을 관장한다.


개발자가 보내는 신호를 ADC시퀀서에서 디지털 신호로 변환하는데, 신호를 주는 방법은 총 3가지로

1. 소프트웨어적으로 특정 레지스터를 통해 신호를 주는 방법

2. ePWMx 내부 타이머에 의한 방법

3. 외부인터럽트2(XINT2)로 정해진 핀을 트리거 시키는 방법


직렬시퀀서 모드일 때는 시퀀서 1이 모든 입력채널을 관장하지만 8~15번 핀에 대해서 방법3을 사용할 수는 없다.


====================================================================================================

ADCTRL2





15 : ePWM_SOCB_SEQ

ePWM SOCB enable for cascaded sequencer (Note: This bit is active only in cascaded mode.)

직렬 시퀀서 모드에서만 사용가능하고 ePWM SOCB를 사용가능하게 한다.

ePWM SOCB를 변환의 시작신호로 사용할 수 있다. 1로 셋팅하면 사용가능하다.


14 : RST SEQ1

시퀀서 1 또는 직렬 시퀀서를 즉시 정지시키고 초기화한다. 다음 변환은 선택된 입력채널의 처음순서부터 변환을 시작한다.


13 : SOC_SEQ1

시퀀서 1에 변환시작신호를 전달한다(S/W신호).

시퀀서1이 이미 동작 중일 경우, 변환환료까지 대기하다 변환이 완료되는 즉시 대기중인 신호가 시퀀서에 전달되어 변환을 시작한다.

신호가 들어가면 SOC_SEQ1은 0으로 클리어 된다.


11 : INT ENA SEQ1

시퀀서 1에 의한 인터럽트 활성화

인터럽트가 요청되면 해당 서비스 루틴을 실행한다.


10 : INT MOD SEQ1

인터럽트 모드의 선택비트

1일 경우 시퀀서1이 매번 두 번째 변환 종료 때마다 인터럽트가 요청 된다.

0일 때, 매번 변환 종료 때마다 인터럽트가 요청된다.


8 : ePWM SOC SEQ1

ePWM SOC1 신호를 변환 시작신호로 사용한다(1을 쓰면)

0으로 비활성화 시킨다.


7 : EXT SOC SEQ1[External signal start-of-conversion bit for SEQ1]

1을 쓰면 외부인터럽트2의 트리거 신호를 시퀀서1의 변환 시작신호로 쓴다.

0은 비활성화


6 : RST SEQ2

1을 쓰면, 시퀀서2를 즉시 초기화 하여 변환동작을 정지시킨다. 다음 변환은 선택된 입력채널의 처음순서부터 변환을 시작한다.


5 : SOC SEQ2

시퀀서 2에 변환시작신호 전달(S/W신호)

이미 동작 중이라면 변환완료까지 대기. 변환이 완료되면 즉시 대기중인 신호가 시퀀서에 전달되고 SOC SEQ2는 0으로 클리어


3 : INT ENA SEQ2

시퀀서2에 의한 인터럽트 활성화


2 : INT MOD SEQ2

인터럽트 모드 선택비트. 1일 경우 시퀀서2가 매번 두 번째 변환 종료 때마다 인터럽트가 요청 된다.

0일 때, 매번 변환 종료 때마다 인터럽트가 요청된다.


====================================================================================================

ADCTRL3



7~6 : ADCBGRFDN

ADC analog core의 Bandgap 회로와 Reference회로의 기동 혹은 정지를 제어한다.

1 : 기동, 0 : 정지


5 : ADCPWDN

Bandgap회로와 Reference회로를 제외한 모든 ADC analog회로를 제어한다.

1은 기동, 0은 정지


위 5~7에 대한 설명




4~1 : ADCCLKPS(Core Clock Divider ADCLK)

위의 tadcclk의 역수값으로 PLL회로의 HSPCLK를 거친 주파수를 또 한번 분주한다.

0일 때 : HSPCLK/1

1~15일 때 : HSPCLK/(2*ADCCLKPS)


0 : SMODE_SEL

샘플링 모드를 선택한다.

0은 순차 샘플링, 1은 동시 샘플링



그림을 다시 확인해 보면, ADCIN0~7에 대하여 A와 B로 나누어져 있음을 알 수 있다. 즉, ADCINA0~7, ADCINB0~7이다.

샘플링 모드와 시퀀서 모드가 각각 2가지씩 있으므로 모드의 조합은 총 4가지가 된다.

순차샘플링 모드에서는 선택된 입력채널 내에서 지정된 순서에 따라 순차적으로 한번에 하나씩 입력신호를 샘플링 한다.

동시샘플링 모드의 경우 시퀀서 1과 2에 대응하는 각각의 채널이 한 쌍을 이루어 처리된다.

입력채널의 처리순서는 시퀀서1에 해당되는 입력채널만으로 설정한다.(1에의해 2는 자동으로)

동시샘플링 모드에서 직렬시퀀서 모드일 경우, 입력채널 선택은 0~7만으로 한다.


ADC신호의 변환처리 순서 기준

1. 샘플링된 두개의 신호 중 먼저 변환모듈에 도착한 신호를 먼저 변환한다.

도중에 다른 신호가 동착한다면 변환중인 신호의 완료까지 대기한다.

2. 두 신호가 동시에 도착했을 경우 ADCINA를 우선한다.


단어:

SOC : Start Of Conversion

Bandgap 회로

Reference 회로

'TMS320 > F28335' 카테고리의 다른 글

Cpu Timer(2)  (0) 2014.08.19
Cpu Timer(1)  (1) 2014.08.19
ADC(2)  (0) 2014.08.18
Gpio  (0) 2014.08.18
기본자료  (0) 2014.08.18
Posted by 십자성군
TMS320/F283352014. 8. 18. 12:01

2812와는 약간 다른 명칭과 구조를 가지고 있다.



2812 

28335 

GpioMuxRegs 

GpioCtrlRegs

GpioDataRegs 

GpioDataRegs 

 

GpioIntRegs 


28335에서 GpioIntRegs는 인터럽트 관련 GPIO_INT_REGS 구조체변수로 구조체는 아래와 같다.

struct GPIO_INT_REGS {

   union  GPIOXINT_REG     GPIOXINT1SEL; // XINT1 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXINT2SEL; // XINT2 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXNMISEL;  // XNMI_Xint13 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXINT3SEL; // XINT3 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXINT4SEL; // XINT4 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXINT5SEL; // XINT5 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXINT6SEL; // XINT6 GPIO Input Selection

   union  GPIOXINT_REG     GPIOXINT7SEL; // XINT7 GPIO Input Selection

   union  GPADAT_REG       GPIOLPMSEL;   // Low power modes GP I/O input select

};


GpioDataRegs는 형태가 같으며 GpioCtrlRegs가 GpioMuxRegs를 대신하며 그 구조 역시 바뀌었다.

struct GPIO_MUX_REGS {

   union  GPAMUX_REG   GPAMUX;

   union  GPADIR_REG   GPADIR;

   union  GPAQUAL_REG  GPAQUAL;

   Uint16              rsvd1;

   union  GPBMUX_REG   GPBMUX;

   union  GPBDIR_REG   GPBDIR;

   union  GPBQUAL_REG  GPBQUAL;   

   Uint16              rsvd2[5];

   union  GPDMUX_REG   GPDMUX;

   union  GPDDIR_REG   GPDDIR;

   union  GPDQUAL_REG  GPDQUAL;   

   Uint16              rsvd3;

   union  GPEMUX_REG   GPEMUX;

   union  GPEDIR_REG   GPEDIR;

   union  GPEQUAL_REG  GPEQUAL;   

   Uint16              rsvd4;

   union  GPFMUX_REG   GPFMUX;

   union  GPFDIR_REG   GPFDIR;

   Uint16              rsvd5[2];

   union  GPGMUX_REG   GPGMUX;

   union  GPGDIR_REG   GPGDIR;

   Uint16              rsvd6[6];

};


struct GPIO_CTRL_REGS {

   union  GPACTRL_REG  GPACTRL;   // GPIO A Control Register (GPIO0 to 31)

   union  GPA1_REG     GPAQSEL1;  // GPIO A Qualifier Select 1 Register (GPIO0 to 15)

   union  GPA2_REG     GPAQSEL2;  // GPIO A Qualifier Select 2 Register (GPIO16 to 31)

   union  GPA1_REG     GPAMUX1;   // GPIO A Mux 1 Register (GPIO0 to 15)

   union  GPA2_REG     GPAMUX2;   // GPIO A Mux 2 Register (GPIO16 to 31)

   union  GPADAT_REG   GPADIR;    // GPIO A Direction Register (GPIO0 to 31)

   union  GPADAT_REG   GPAPUD;    // GPIO A Pull Up Disable Register (GPIO0 to 31)

   Uint32              rsvd1;

   union  GPBCTRL_REG  GPBCTRL;   // GPIO B Control Register (GPIO32 to 63)

   union  GPB1_REG     GPBQSEL1;  // GPIO B Qualifier Select 1 Register (GPIO32 to 47)

   union  GPB2_REG     GPBQSEL2;  // GPIO B Qualifier Select 2 Register (GPIO48 to 63)

   union  GPB1_REG     GPBMUX1;   // GPIO B Mux 1 Register (GPIO32 to 47)

   union  GPB2_REG     GPBMUX2;   // GPIO B Mux 2 Register (GPIO48 to 63)

   union  GPBDAT_REG   GPBDIR;    // GPIO B Direction Register (GPIO32 to 63)

   union  GPBDAT_REG   GPBPUD;    // GPIO B Pull Up Disable Register (GPIO32 to 63)

   Uint16              rsvd2[8];

   union  GPC1_REG     GPCMUX1;   // GPIO C Mux 1 Register (GPIO64 to 79)

   union  GPC2_REG     GPCMUX2;   // GPIO C Mux 2 Register (GPIO80 to 95)

   union  GPCDAT_REG   GPCDIR;    // GPIO C Direction Register (GPIO64 to 95)

   union  GPCDAT_REG   GPCPUD;    // GPIO C Pull Up Disable Register (GPIO64 to 95)

};


2812와 비교해 새로운 것은 CTRL과 PUD의 존재이다.
============================================================================================
GPIOMUX

아래를 참고하자





Mux값을 설정하여 핀의 기능을 정할 수 있다.


28335는 총 88개의 핀이 존재하며 이는 A,B,C로 나뉜다. 또한 여기서도 각각 MUX1, MUX2의 2부분으로 나뉜다.

GPIOA

-GPAMUX1 : 0~15(16 pin)

-GPAMUX2 : 16~31(16 pin)


GPIOB

-GPBMUX1 : 32~47(16 pin)

-GPBMUX2 : 48~63(16 pin)


GPIOC

-GPCMUX : 64~79(16 pin)

-GPCMUX : 80~87(8 pin)


이 핀들은 MUX설정에 따라 어떤 기능을 할 것인가를 정할 수 있으며 최대 4종류가 있기에 핀당 2비트가 할당되어있다.

따라서 MUX1, MUX2모두 32비트씩을 갖는다.


============================================================================================

GPIOCTRL




DSP에서 받는 신호는 우리가 원하는 신호뿐만 아니라 노이즈(잡음)이 섞여 들어오기도 한다. 따라서 Qualification이라는 단계에서 수집된 신호에 대한 샘플링(동기화)를 하게 되는데, 여기서 중요한것이 Sampling Window이다.


실례를 들면서 설명하자.


SYSCLKOUT cycle : 시스템클럭의 주기(한 클럭당 시간).

SYSCLKOUT : 시스템클럭 주파수. 초당 클럭 수

QUALPRD(CTRL) : 동기 펄스 갯수

Sampling Window : 샘플링 횟수(샘플링 횟수-1)


3번째와 4번째는 같은 말인것 같지만 넘어가자...

위 그림에서는 Sampling Window = 6-1=5이다.


(SYSCLKOUT cycle*2*QUALPRD)    [1단계]

QUALPRD가 n이라고 할 때, Qualification 단계에 진입하는 신호의 2*n개째에서 값이 수집 된다. 만약 SYSCLKOUT cycle 이 10ms라고 하자. 이는 10ms당 1클럭씩 신호가 들어온다는 것이다. QUALRPD=4라고 한다면 2*4번째 신호를 샘플링 한다. 즉, 8*10ms주기로 신호를 수집한다는 것이다.


(SYSCLKOUT cycle*2*QUALPRD)*5    [2단계]

Sampling Window(width)=6일 때, 6-1=5 길이의 신호가 같은 값이면 이를 인정한다. 즉 80ms주기로 채집한 신호가 5회 연속으로 같은 값이어야 정상적인 신호로 인정한다는 것이다. 그렇다면 정상적인 한 신호의 판별에 최소 80*5ms가 걸린다는 의미가 될것이다.


QUALPRD는 총 8핀으로 값을 정할 수 있다. 0x00~0xFF까지 정할 수 있으며 0xFF일 때는 SYSCLKOUT cycle*2*255가 1단계의 길이(시간)이 될것이다.


P.S C포트에는 이 레지스터가 존재하지 않는다.

============================================================================================

GP QSEL[Qualification Select)(1,2)


이는 위에서 나온 Sampling window's width의 설정이다.

한 핀당 2비트씩 할당되어 4가지 설정이 가능하다.


00:미사용 (0샘플링. 시스템 클럭에만 동기화)

01 : width = 2(3샘플링)

10 : width = 5(6샘플링)

11 : 시스템 클럭에 비동기하게. 입력 신호의 샘플링 없이 연속적으로 받아들인다. 특수핀(주변회로)때만 유효하고 단순 GPIO일 경우 00과 같다.


============================================================================================

GPDIR

입, 출력 방향성 설정으로 GPIO로 쓸 경우 유효.

0 : 입력

1 : 출력


GPPUD

한 핀당 1비트씩 할당. I/O, 특수핀 모두 유효하며 0이면 내부 풀업. 1이면 Disable


============================================================================================

GPIO Data Registers


DAT : 32비트 레지스터. 헤당 핀의 출력의 Data를 결정

SET : 32비트 레지스터. 헤당 핀을 High로. 1만 사용 가능

CLEAR : 32비트 레지스터. 헤당 핀을 LOW로. 1만 사용 가능

TOGGLE : 32비트 레지스터. 헤당 핀의 상태를 반전. 1만 사용 가능


============================================================================================

GPIO INTx Select


GPIOXINT(1,2)SEL

하위 5비트(0~31)을 이용하여 A포트의 아무 핀이나 외부인터럽트 1,2기능을 부여 가능.

XINTnCR레지스터에서 설정 가능


GPIOXINT(3~7)SEL

하위 5비트(0~31)을 이용하여 B포트의 아무 핀이나 외부인터럽트 3~7기능을 부여 가능.

XINTnCR레지스터에서 설정 가능


GPIOXNMISEL

GPIOXINT(1,2)SEL

하위 5비트(0~31)을 이용하여 A포트의 아무 핀이나 Non-Maskable Interrupt(XNMI_XINT13핀)기능 부여 가능


GPIOLPMSEL

저전력 모드 관련

'TMS320 > F28335' 카테고리의 다른 글

Cpu Timer(2)  (0) 2014.08.19
Cpu Timer(1)  (1) 2014.08.19
ADC(2)  (0) 2014.08.18
ADC(1)  (0) 2014.08.18
기본자료  (0) 2014.08.18
Posted by 십자성군
TMS320/F283352014. 8. 18. 11:35




tms320f28335.pdf


'TMS320 > F28335' 카테고리의 다른 글

Cpu Timer(2)  (0) 2014.08.19
Cpu Timer(1)  (1) 2014.08.19
ADC(2)  (0) 2014.08.18
ADC(1)  (0) 2014.08.18
Gpio  (0) 2014.08.18
Posted by 십자성군