샘플 시퀀서 설정은.. 소스상으로는 간단한데
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable(ADC0_BASE, 3); |
설정되는 레지스터는 참.. 여러개다 ㄷㄷ
Hardware Averager
ADCSAC
FIFO Block
ADCSSFIFO0
Sample Sequencer
ADCSSMUX0
ADCSSCTL0
ADCSSFSTAT0
CTRL/STA
ADCACTSS
ADCOSTAT
ADCUSTAT
ADCSSPRI
---
ADCSequenceConfigure()는 ADC Event MUX를 설정하고
ADC_TRIGGER_PROCESSOR는 Controller(자기 자신?)을 지칭한다.
그러고 보니.. ADC0을 3번 샘플러에 연결하는 건가?
ADCSequenceStepConfigure()가 설정되는 부분으로
ADC_CTL_TS 설정시 내부 온도센서가 설정되며 adc 채널 설정은 무효화 된다(내부 센서 설정이 우선권을 가짐)
그러고 보니.. ADC_CTL_END는 3번 시퀀서에서는 기본으로 설정되는데..
FIFO 뎁스가 SS3은 1이라서 무조건 마지막 샘플만 가능한 걸지도..
그래서 예제는 간단한 SS3 시퀀서를 사용하는 것으로 추측된다.
아무튼 ADC_CTL_TS가 설정되지 않으면 ADC_CTL_CH0~ADC_CTL_CH15 값이
ADC Sample Sequence MUX에 설정이 된다.
음.. 데이터 시트 보면 adc 채널은 8개 인데 시퀀서는 4개(lm3s1968 기준)
그러면 실제로는 4개 채널만 동시 입력이 가능한걸려나?
아니면 시퀀서 설정을 통해 하나의 시퀀서에 FIFO를 통해 8개 채널을 한번에 받을수도 있는 걸려나?
811은 adc가 4채널이니.. 이렇게 2비트로 고르고..
1968은 8채널이라 3비트로 선택이 가능한데.. 흐음..
driverlib에서 ADCSSMUX를 건드리는 함수로는 이렇게만 존재
extern void
ADCSequenceStepConfigure(unsigned long ulBase, unsigned long ulSequenceNum,
unsigned long ulStep, unsigned long ulConfig)
extern void
ADCSoftwareOversampleStepConfigure(unsigned long ulBase,
unsigned long ulSequenceNum,
unsigned long ulStep,
unsigned long ulConfig)
3. 시퀀서란? 시퀀서란 한마디로 말해서 입력 채널을 조작할 때 외부 회로의 도움 없이 채널의 순서등을 바꿀 수 있게 해주는 기능으로 개발자가 필요 채널을 설정 하거나 한 포인트에서 입력을 중복으로 받아 오거나 할 때 사용한다.
4. 시퀀서 응용 시퀀서의 레지스터 설정은 Data sheet의 레지스터를 보면 알 수 있으니 참고 하도록 하고 이번엔 시퀀서를 응용해서 노이즈를 줄이는 방법을 살펴본다.
[링크 : http://egloos.zum.com/circle5940/v/45303] |