#include "DSP2833x_device.h"
#include "DSP2833x_GlobalPrototypes.h"
#include "GlobalProtoypesLee.h"
void Init_ADC()
{
// 현재 ADC_CLK으로
InitAdc();
// ADC 설정
AdcRegs.ADCTRL3.bit.ADCCLKPS = 15; // 재분주값 = HSPCLK /(2*ADCCLKPS)
AdcRegs.ADCTRL1.bit.CPS = 1; // ADCCLK = ADCCLKPS / 2 (ADC의 구동 클럭을 결정 : ADCCLK = 1.25MHz)
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 시퀀스 직렬 모드
AdcRegs.ADCTRL1.bit.ACQ_PS = 7 ; // 샘플링 윈도우 size를 8 ADC_CLK 설정
AdcRegs.ADCMAXCONV.all = 0x0004;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0; // Murata [ Gyro ]
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; // SA1 [ Tilt ] 4
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Cont. conv. mode
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // 시퀀스 시작
}
1. 현재 HSPCLK는 75MHz로 설정되어 있기에 분주된 값=2.5MHz로 설정되었다. : HSPCLK/(2*ADCCLKPS)
2. ADCCLK = Fclk/1 or 2로 CPS=1이므로 2분주이다.
3. SEQ_CASC = 1이면 시퀀스 직렬모드, 0이면 병렬모드이다.
4. SOC펄스의 길이는 ADCLK주기의 (ACQ_PS + 1)배이다. 즉, 여기서는 8배
Part2
5. MAXCONV.all = 0x0004로 인해, 최대 변환 채널수는 4개가 된다. 단, 직렬 시퀀서 모드는 두 시퀀서 1,2를 하나의 시퀀서처럼 사용하기 때문에 총 합쳐서 4개일 것이다.
6. ADCCHSELSEQ는 ADC변환의 순서와 관련된 것으로 위에서는 시퀀서1(1,2통합되있음)의 0번인 Gyro를 첫째로, 1번인 Tilt를 두번째 순서로 잡아줬다.
수정이 필요한 사항인것이, 현재 각각의 센서를 어느 핀에 연결했느냐에 따라 CONV0~15사이에서 선택해주어야 한다.
7.CONT_RUN = 1로 인해 Continus run mode로 설정하였다. 한번 변환이 끝나면 자동으로 다음 변환을 한다.
8.SOC_SEQ1에 1을 줌으로써 시퀀서 1에 변환시작신호를 전달하였다.
(굳이 줄 필요가 없다고 생각하는게, 이는 시퀀스에 대한 동작신호라기 보다는 변환강제신호로 볼 수 있다. 신호가 들어가면 0으로 클리어되고 끝나니 말이다.)
'Project > Balancing 28335' 카테고리의 다른 글
Init_Timer (0) | 2014.08.19 |
---|---|
GpioInit (0) | 2014.08.18 |