ADCMAXCPNV : Maximum Conversion Channels Register
MAX_CONVn 비트필드는 자동변환 세션에서의 최대 변환채널 수를 정해준다. 시퀀서 모드(병렬, 직렬)에 따라 사용하는 비트필드 및 작업이 다양하다.
시퀀서1에 대해서 MAX_CONV1[2:0] (0~2번)이 사용되며
시퀀서2에 대해서 MAX_CONV2[2:0] (4~6번)이 사용된다.
위 둘 모두 병렬 시퀀서의 경우가 될 것이다.
직렬 시퀀서 모드일 때, 두 시퀀서 1,2를 하나의 시퀀서처럼 사용하기 때문에 총 16개 채널을 입력으로 설정할 수 있으며 이 설정을 위해 4비트를 사용한다.
==================================================================================================
ADCCHSELSEQ1~4 : ADC Input Channel Select Sequecning Control Registers
DSP의 ADC가 한번의 변환주기에 여러 개의 채널에서 신호를 입력받아 한번에 처리하는데 그 처리 순서와 관련된 레지스터이다.
각각이 4비트의 레지스터를 가지며 아래의 초기화 예시를 보면 이해가 갈것이다.
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup conv from ADCINA0 & ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // Setup conv from ADCINA1 & ADCINB1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // Setup conv from ADCINA2 & ADCINB2
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; // Setup conv from ADCINA3 & ADCINB3
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x4; // Setup conv from ADCINA4 & ADCINB4
AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x5; // Setup conv from ADCINA5 & ADCINB5
AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x6; // Setup conv from ADCINA6 & ADCINB6
AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x7; // Setup conv from ADCINA7 & ADCINB7
0에서 7은 ADCINA0~7을, 8~15는 ADCINB0~7 입력채널을 의미한다.
==================================================================================================
ADCASEQSR : Autosequence Status Register
11~8 : SEQ_CNTR [Sequencing counter status bits]
시퀀서 변환채널 카운터, SEQ_CNTR[3:0]의 비트필트는 4비트의 카운터로 변환과정 시작과 동시에 MAX CONVn레지스터(입력채널 개수 설정)의 값을 여기로 불러와 매 변환마다 1씩 감소하여 남은 변환채널 갯수를 표시한다. 병렬시퀀서 모드의 경우 시퀀서1과 2의 입력채널 개수를 더한 값을 Load한다.
6~4 : SEQ2_STATE
SEQ2인 ADCINB의 입력채널 중 어떤 채널이 변환 중인지 표시된다
3~9 : SEQ1_STATE
SEQ1인 ADCINA의 입력채널 중 어떤 채널이 변환 중인지 표시된다.
==================================================================================================
ADCST : ADC Status and Flag Register
read-only 상태레지스터
7 : EOS_BUF2[End of sequence buffer bit for SEQ2]
시퀀서 2의 변환완료횟수 버퍼. 인터럽트 모드0(매 변환 완료때마다 인터럽트 발생)에서는 사용되지 않으며 모드1에서 매 EOS마다 Toggle된다.
인터럽트 Flag비트의 Clear나 시퀀서의 리셋에 의해서 Clear되지 않으며 오직 칩의 리셋 과정에서 Clear된다.
6 : EOS_BUF1[End of sequence buffer bit for SEQ1]
시퀀서 1 변환완료 횟수 버퍼. 위와 같다
5 : INT_SEQ2_CLR[Interrupt clear bit]
1을 쓰면 INT_SEQ2비트를 클리어 한다.
인터럽트 서비스 루틴 마지막에는 항상 INT_SEQ2비트를 클리어 해주는 코드가 있어야 한다.
4 : INT_SEQ1_CLR[Interrupt clear bit]
1을 쓰면 INT_SEQ1비트를 클리어 한다.
인터럽트 서비스 루틴 마지막에는 항상 INT_SEQ1비트를 클리어 해주는 코드가 있어야 한다.
3 : SEQ2_BSY[SEQ2 busy status bit]
1이면 시퀀스2의 입력채널이 변환중임을 뜻한다.
2 : SEQ1_BSY[SEQ1 busy status bit]
1이면 시퀀스1의 입력채널이 변환중임을 뜻한다.
1 : INT_SEQ2[SEQ2 interrupt flag bit]
시퀀서2의 인터럽트 요청 플래그 비트
0 : INT_SEQ1[SEQ1 interrupt flag bit]
시퀀서1의 인터럽트 요청 플래그 비트
==================================================================================================
ADCREFSEL[ADC Reference Select Register]
내부 레퍼런스 전압 설정 레지스터
15~14 |
00일 때, 내부 레퍼런스 전압을 사용한다 |
|
01일 때, 외부의 2.048V를 ADCREFIN핀을 통해서 레퍼런스 전압으로 사용한다 |
|
10일 때, 외부의 1.500V를 ADCREFIN핀을 통해서 레퍼런스 전압으로 사용한다 |
|
11일 때, 외부의 1.024V를 ADCREFIN핀을 통해서 레퍼런스 전압으로 사용한다 |
==================================================================================================
ADCOFFTRIM[ADC Offset Trim Register]
DSP초기화 함수에서 선행 함수인 InitSysCtrl()함수 안에 InitPeripheralClock()이라는 함수가 있다.
이 함수 안의 ADC_cal()이라는 함수에서 사용되는 레지스터로 ADC_cal()함수는 ADC의 INL,DNL,Gain,Offset오차 중 Gain과 Offset오차를 교정하기 위해서 사용한다. 과정은 아래와 같다.
1. GND와 연결되어 있는 ADCLO핀을 20번 AD변환을 한다.
2. AD변환 값이 0이 나오지 않을 때까지 OFFTRIM에 십진수 40을 계속 더한다.
3. AD변환 값이 0이 나오지 않으면 AD변환 값들의 평균치를 계산한다.
4. ADCOFFTRIM에 평균치를 빼고 OFFTRIM에 저장되어 실제 offset에러 값이 저장되게 된다.
5. ADC결과값에 ADCOFFTRIM레지스터에 있는 값을 뺀다.
6. 교정된 ADC결과값이 저장된다.
ADCLO는 AGND와 직결되어 있으므로 0V이다. 즉, 0V를 ADC하여 오차를 잡는 작업이다.
==================================================================================================
ADCRESULT
16개의 12비트 결과 저장 레지스터.
개당 두 개의 주소를 가지며 0x7108~0x7117에는 왼쪽 정렬되어 저장
0ㅌ0B00~0x0B0F에는 오른쪽 정렬되어 저장
결과 저장 레지스터의 저장 규칙이 있는데
1. 순차샘플링 & 직렬시퀀서 모드
:무조건 먼저 ADC변환된 순서대로 ADCRESULT0부터 차례대로 채워진다.
2. 순차샘플링 & 병렬시퀀서 모드
:시퀀서1은 변환된 순서대로 ADCRESULT0부터 차례대로
:시퀀서2는 먼저 변환된 순서대로 ADCRESULT8부터 차례대로 저장
3. 동시샘플링 모드
:최대 8번 변환을 하며 한번에 두 채널씩 변환을 한다(시퀀서1 1회, 시퀀서2 1회)
ADCRESULT0부터 채워지며 시퀀서1의 결과가 2의 결과보다 먼저 채워진다.
'TMS320 > F28335' 카테고리의 다른 글
Cpu Timer(2) (0) | 2014.08.19 |
---|---|
Cpu Timer(1) (1) | 2014.08.19 |
ADC(1) (0) | 2014.08.18 |
Gpio (0) | 2014.08.18 |
기본자료 (0) | 2014.08.18 |