[DSP]/DSP280x-M2010. 5. 2. 23:02

[DSP280x-M EVM] 보드테스트 - ADC, UART 테스트 (TMS320F2808)

[DSP280x-M EVM] 보드테스트 - ADC, UART 테스트 (TMS320F2808)



TMS320F2808 의 ADC값을 UART로 전송하는 테스트 프로그램 작성.

[DSP280x-M EVM]보드에는 ADCB0~ADCB7까지 8개의 ADC가 할당되어 있다. 확장 테스트 보드의 ADC0가 ADCB0에 연결되어 있기 때문에 TMS320F2809 ADC Channel8에서 VR값을 읽을 수 있다.




TMS320F2808 ADC, UART 테스트 동영상



PC프로그램
ADC값을 읽어 UART로 전송하면 그 값을 디버깅하기 위한 PC프로그램



TMS320F2808 ADC, UART(SCI)테스트 소스코드
 void AdcInit(void)
{
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;
    
   InitAdc();  // For this example, init the ADC

   // Specific ADC setup for this example:
   AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    
   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x8;
   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run 
  
     // Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;
}

unsigned int AdcRead(unsigned int Cnannel)
{     
 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = Cnannel;
 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

  while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt

   asm(" RPT #11 || NOP");
  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
   return (AdcRegs.ADCRESULT0>>4);
}



void main(void)
{
 unsigned int temp = 0;
 unsigned int cnt = 0;
 
 //DSP System Initialize
 SystemInit()
 Led1Init();
 Led1On();

DebugInit(BAUD_57600);

 DebugPrint("ADC TEst Test\r\n");
 AdcInit();

 while(1)
 {
  switch(U0_GetByte())
  {
  case '0':
     Led1Off();
   DebugPrint("LED OFF\r\n");
     break;
  case '1':
   Led1On();DebugPrint("LED ON\r\n");   
     break;
 case 'c':
   DebugPrint("CNT="); 
   U0_PutInt(cnt++);
   break;
      
  case 'r':
   DebugPrint("ADC="); 
   temp = AdcRead(8);
   U0_PutInt(temp);
   break; 
  } 
 }
}  
Posted by nexp

댓글을 달아 주세요