[DSP]/DSP283352011. 11. 13. 18:12

[DSP28335 EVM] ADC테스트 - 보드의 광센서 그래프 출력 예제

[DSP28335 EVM] ADC테스트 - 보드의 광센서 그래프 출력 예제



[DSP28335 EVM] 보드에는 ADC를 테스트 하기 위한  CdS 센서가 있고, ADCA1에 연결되어 있다
CdS센서를 사용하지 않는다면 R157을 제거하면 된다.





TMS320F28335 ADC테스트용 PC프로그램





TMS320F28335 ADC테스트 동영상




TMS320F28335 ADC초기화 함수
//ADC Initialize
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 = 0x0;
   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run 
  
     // Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;
}


채널별 ADC 값 읽기 함수
//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = Channel;
 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

 while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
    // Software wait = (HISPCP*2) * (ADCCLKPS*2) * (CPS+1) cycles
    //               = (3*2)      * (1*2)        * (0+1)   = 12 cycles
    asm(" RPT #11 || NOP");
    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
    return (AdcRegs.ADCRESULT0>>4);
}



Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2011. 5. 1. 20:00

[FX2 EVM] UART 테스트

[FX2 EVM] UART 테스트


FX2에는 2개의 UART가 있다. 그냥 8051용 UART이므로 별 다른건 없는것 같다.
[serial.c] 에 Rx, Tx 드라이버 함수만 수정하면 기존 코드를 그대로 사용할 수 있다.
unsigned char U0_GetByte(void)
{
 while (!RI);
 RI = 0;          
 return SBUF0;
}

void U0_PutByte(unsigned char Data)
{
 while (TI == 0) ;
 TI = 0 ;
 SBUF0 = Data ;
}


USB2UART에 연결하면 쉽게 디버깅 가능하다.





FX2 Ez-USB Serial 테스트 프로그램 소스코드
void main(void)
{
 int cnt = 0;
 
 SystemInit();

 Led1Init();
 Led1On();
 Led2Init();
 Led2Off();

 DebugInit(BAUD_38400);
 DebugPrint("FX2 EVM CY7C68013 Serial Test.\r\n");
  
 DebugPrint("printf: %d\r\n", cnt++);
 
 while(1)
 {
  if(U0_IsGetByte())
  {
   switch(U0_GetByte())
   {
    case '0':
     DebugPrint("Led1 Off\r\n");
     Led1Off();
     break;

    case '1':
     DebugPrint("Led1 On\r\n");     
     Led1On();
     break;
   }
   
  }
 }
}

Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 4. 29. 22:30

[TMS320F28069 EVM] UART 테스트

[TMS320F28069 EVM] UART 테스트


UART를 테스트 하기 위해 예제 코드를 수정해서 테스트했다. 기존 TMS320F2808 예제 소스코드와 거의 동일하기 때문에 특별히 수정할것이 없을것 같았는데... 컴파일까지는 에러없이 된다.

다운로드 후 테스트 해보니 UART로 아무런 데이터도 전송되지 않는다.
무엇때문일까?


예제 코드를 보니 TMS320F2808과 같은 구조이다.(거의 코드 수정없이 가능하다. 코드는 문제가 아니라는 것인데...) 그렇다면 큰 문제없어야 할텐데...
클럭이 다르긴 한데.. 클럭이 달라진다고 해도 보레이트만 달라질 뿐 뭐라도 날아와야 하는데..


일단 TMS320F2806x에서 하드웨어 적으로 뭔가 달라진 것이 없는지 체크할 필요가 있다.
핀맵은 동일하고.. 내부 구조나 enable, 클럭등을 확인할 필요가 있다.

혹시 메모리 맵이나. 기타 설정에 문제가 있는것이 아닌지...
데이터시트를 좀더 자세히 들여다 봐야 할것 같다.

TMS320F28069 SCI 블록도




TMS320F28069 SCI UART 초기화코드

void U0_Init(unsigned char baud)
{
  InitSciaGpio();

  SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
 SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
 SciaRegs.SCICTL2.all =0x0003;
 SciaRegs.SCICTL2.bit.TXINTENA =1;
 SciaRegs.SCICTL2.bit.RXBKINTENA =1;

 U0_SetBaud(baud);

 SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
}


코드적으로 한가지 의심스러운 것은  TX,RX인터럽트를 설정하고 있는데... 물론 기존 코드에서도 문제가 없긴하지만 인터럽트 백터가 이상하다면 문제가 될 수 있을것 같다. 이부분 삭제하고 테스트 해볼 필요가 있을것 같다.
 SciaRegs.SCICTL2.all =0x0003;
 SciaRegs.SCICTL2.bit.TXINTENA =1;
 SciaRegs.SCICTL2.bit.RXBKINTENA =1;
->테스트 결과 문제없다.  인터럽트는 사용하지 않으므로 문제가 없다.



무엇이 문제 일까? 항상 새로운 칩들은 문제가 발생하기 마련이다. 이런 문제를 풀어나가는 과정을 즐겨야 한다. 항상 해결하고나면 아무것도 아닌데...


USER Guide를 천천히 읽어보니 약간의  차이를 발견할 수 있다.

문제는 보레이트 설정에 있었던것 같다. 기존 TMS320F2808과는 보레이트 설정에 차이가 있다.


BRR = LSPCLK/8/Baudrate @LSPCLK 20Mhz


결정적으로 TI에서 제공하는 예제코드에 문제가 있다. 보레이트 설정 레지스터(SCIHBAUD, SCILBAUD)가 각각 8비트만 의미 있다.
    SciaRegs.SCIHBAUD    =0x0000;  // 9600 baud @LSPCLK = 20MHz (80 MHz SYSCLK).
    SciaRegs.SCILBAUD    =0x0103;

TI에서 제공하는것인데.. 좀이상하다. 컴파일러 환경이 달라서 그런가? CCS 4.x에서 테스트 해볼 필요가 있겠다.
->아무튼 아래와 같이 수정하니 잘 동작한다.
      SciaRegs.SCIHBAUD    =0x0001;
      SciaRegs.SCILBAUD    =0x0003;


PICCOLO TMS320F28069 UART테스트 예제 소스코드
나머지는 TMS320F2808 기존 코드를 그대로 사용해도 잘 동작한다. 프로그램을 좀 수정하여 printf 도 사용 가능하도록 수정하였다.
#include "system.h"
#include "serial.h"

void main(void)
{
 unsigned int cnt = 0;

 //DSP System Initialize
 SystemInit();

 DebugInit(BAUD_115200);
 DebugPrint("TMS320F28069 EVM Serial Test(%d)Mhz\r\n", _SYS_CLK);

 Led1Init();
 Led2Init();
 Led1On();

 while(1)
 {
  if(DebugIsByte())
  {
   switch(U0_GetByte())
   {
   case '0':
    Led1Off();
    DebugPrint("LED OFF\r\n");
    break;

   case '1':
    Led1On();

    DebugPrint("LED ON\r\n");   
    break;

   case '+':
    DebugPrint("Cnt Value=%d(0x%02X)\r\n", cnt++);   
    break;
   } 
  }
 }
}  
Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352009. 5. 9. 01:59

[DSP28335] UART 테스트 - TMS320F28335 SCI

[DSP28335] UART 테스트 - TMS320F28335 SCI

TMS320F28335의 UART Baudrate 설정 LSPCLK에서 부터 생성되며 다른 C2000 (TMS320F2812, TMS320F2808)과 다르게 37.5Mhz의 내부 발진기로 할당된다. 따라서 보레이트 설정 부분을 수정해야 정상 동작한다.



보레이트 설정은 아래와 같이 설정하면된다.





UART 송수신을 위한 함수 포팅
unsigned char U0_GetByte(void)
{
 // wait for RRDY/RXFFST =1 for 1 data available in FIFO
 while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { };  
 return RxData();
}

void U0_PutByte(unsigned char Data)
{
    while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {};
    TxData(Data);
}


TMS320F28335 SCI (UART) 초기화 함수
void U0_Init(unsigned char baud)
{
 InitSciaGpio();

    SciaRegs.SCIFFTX.all=0xE040;
    SciaRegs.SCIFFRX.all=0x204f;
    SciaRegs.SCIFFCT.all=0x0;

 U0_SetBaud(baud);

  SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
 SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
 SciaRegs.SCICTL2.all =0x0003;
 SciaRegs.SCICTL2.bit.TXINTENA =1;
 SciaRegs.SCICTL2.bit.RXBKINTENA =1;
 
 SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset 
}
Posted by nexp

댓글을 달아 주세요

[TI]/LM3S8xx2008. 12. 3. 20:16

[ LM3Sx08 EVM] 테스트예제 - USB이용 PC에서 LED제어 예제

[ LM3Sx08 EVM] 테스트예제 - USB이용 PC에서 LED제어 예제



[ LM3Sx08 EVM] 보드 예제소스
를 이용하여 PC에서 LED제어하는 예제를 작성해 보았다.
USB2Seiral 칩을 이용하여 USB를 통해 보드상의 LED를 마우스 클릭으로 제어 하도록 했다. 원리는 시리얼포트로 특정 커멘드를 보내서 LED를 제어하는 간단한 예제이다.

예제소스 :
ex03_serial.zip


테스트 동영상
LM3S308 (LM3S608, LM3S808 호환)보드를 이용 PC에서 LED제어 동영상

Posted by nexp

댓글을 달아 주세요