[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 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;
}
}
}
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);
}
{
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;
}
}
}
반응형