[TMS320F28069 EVM] ADC테스트 - TFT LCD에 VR값 표시
[TMS320F28069 EVM]에는 7개의 12비트 ADC를 할당해 두었다.
새로운 PICCOLO시리즈는 ADC쪽 기능이 향상되었다고 하는데.. 좀더 깊이 있는내용은 추후에 진행 하도록 하고 일단 기존 TMS320F2808 EVM예제를 포팅해서 간단한 테스트를 진행 해 보려고 한다.
TMS320F28069 ADC블록도
ADC부분은 기존 TMS320F2808 과 비교해 변화된 부분이 있으므로 수정이 필요하다. 레지스터명도 달라지고.. 구조 자체도 변경되었기 때문에 ADC.c 에 있는 초기화 함수를 수정해 주었다.
ADC 읽기 함수
TMS320F28069 EVM ADC테스트 동영상
[EXP-DSP EVM] ADC0에 연결되어 있는 VR을 가변하여 ADC값을 측정하고 이값을 TFT-LCD에 출력하는 테스트를 해 보았다.
[TMS320F28069 EVM]에는 7개의 12비트 ADC를 할당해 두었다.
새로운 PICCOLO시리즈는 ADC쪽 기능이 향상되었다고 하는데.. 좀더 깊이 있는내용은 추후에 진행 하도록 하고 일단 기존 TMS320F2808 EVM예제를 포팅해서 간단한 테스트를 진행 해 보려고 한다.
TMS320F28069 ADC블록도
ADC부분은 기존 TMS320F2808 과 비교해 변화된 부분이 있으므로 수정이 필요하다. 레지스터명도 달라지고.. 구조 자체도 변경되었기 때문에 ADC.c 에 있는 초기화 함수를 수정해 주었다.
void AdcInit(void)
{
InitAdc();
// Configure ADC
EALLOW;
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; // Enable non-overlap mode
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
AdcRegs.INTSEL1N2.bit.INT1E = 1; //Enabled ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0; //Disable ADCINT1 Continuous mode
AdcRegs.INTSEL1N2.bit.INT1SEL = 1; // setup EOC1 to trigger ADCINT1 to fire
AdcRegs.ADCSOC0CTL.bit.CHSEL = 4; // set SOC0 channel select to ADCINA4
AdcRegs.ADCSOC1CTL.bit.CHSEL = 2; // set SOC1 channel select to ADCINA2
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5; // set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6; //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
EDIS;
}
{
InitAdc();
// Configure ADC
EALLOW;
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; // Enable non-overlap mode
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
AdcRegs.INTSEL1N2.bit.INT1E = 1; //Enabled ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0; //Disable ADCINT1 Continuous mode
AdcRegs.INTSEL1N2.bit.INT1SEL = 1; // setup EOC1 to trigger ADCINT1 to fire
AdcRegs.ADCSOC0CTL.bit.CHSEL = 4; // set SOC0 channel select to ADCINA4
AdcRegs.ADCSOC1CTL.bit.CHSEL = 2; // set SOC1 channel select to ADCINA2
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5; // set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6; //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
EDIS;
}
ADC 읽기 함수
//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
AdcChanSelect(Channel);
//Force start of conversion on SOC0
AdcRegs.ADCSOCFRC1.all = 0x01;
//Wait for end of conversion.
while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){} //Wait for ADCINT1
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Clear ADCINT1
asm(" RPT #11 || NOP");
return (AdcResult.ADCRESULT0);
}
unsigned int AdcRead(unsigned char Channel)
{
AdcChanSelect(Channel);
//Force start of conversion on SOC0
AdcRegs.ADCSOCFRC1.all = 0x01;
//Wait for end of conversion.
while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){} //Wait for ADCINT1
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Clear ADCINT1
asm(" RPT #11 || NOP");
return (AdcResult.ADCRESULT0);
}
TMS320F28069 EVM ADC테스트 동영상
[EXP-DSP EVM] ADC0에 연결되어 있는 VR을 가변하여 ADC값을 측정하고 이값을 TFT-LCD에 출력하는 테스트를 해 보았다.
반응형