[DSP]/DSP283352014. 1. 4. 23:00

TMS320F28335 - SSD1963 7" TFT LCD테스트 (SD Card를 이용한 BMP이미지 출력)

TMS320F28335 - SSD1963 7" TFT LCD테스트 (SD Card를 이용한 BMP이미지 출력)




TFT LCD 컨트롤러 SSD1963 테스트 보드를 이용하여 TMS320F28335에서 TFT LCD제어 테스트를 했다.




TMS32F28335 TFT-LCD 테스트 동영상
TMS320F28335를 이용하여 SD Card의 BMP파일을 읽어 TFT-LCD에 표시하는 예제이다.  SPI클럭의 한계로 SD Card 이용시 고속 출력은 무리가 있는듯...




TMS320F28335 TFT-LCD드라이버 코드

extern volatile Uint16 gExinf0Buff[100];

//-----------------------------------------------------------------------------

// TFT LCD Driver

#define _USE_EXINF 1


#define TFT_DRV_HD66791 0

#define TFT_DRV_COM44 0

#define TFT_DRV_AT070 1

#define TFT_DRV_LMS700K 0



#define LCD_LAT_BIT BIT2 //-> GPIO34

#define LCD_LAT_PORT PORTB


#define LCD_LAT_ON() //Sbi(LCD_LAT_PORT, LCD_LAT_BIT);NOP();

#define LCD_LAT_OFF() //Cbi(LCD_LAT_PORT, LCD_LAT_BIT);NOP();



#define LCD_DATA_LATCH() LCD_LAT_ON();LCD_LAT_OFF();


#define LCD_EN_BIT BIT4 //GP36

#define LCD_EN_PORT GPIOB

#define LCD_ENABLE() //cbi(LCD_EN_PORT, LCD_EN_BIT);

#define LCD_DISABLE() //sbi(LCD_EN_PORT, LCD_EN_BIT);


#define LCD_RST_BIT BIT25

#define LCD_RST_PORT GPIOA

#define LCD_RST_ON() sbi(LCD_RST_PORT, LCD_RST_BIT);

#define LCD_RST_OFF() cbi(LCD_RST_PORT, LCD_RST_BIT);



#define _LCD_CMD_OUT(Data) gExinf0Buff[0] = Data

#define _LCD_DAT_OUT(Data) gExinf0Buff[1] = Data



#define TFTGpioInit() EALLOW;\

GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0;\

GpioCtrlRegs.GPADIR.bit.GPIO25 = 1;\

GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0;\

GpioCtrlRegs.GPADIR.bit.GPIO24 = 1;\

EDIS;

//-----------------------------------------------------------------------------



TMS320F28335 7" TFT-LCD 출력 테스트










Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352013. 9. 22. 20:38

TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test

TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test




W5300은 하드웨어적으로 TCP/IP를 구현한 Ethernet Controller이지만 Ethernet 데이터 부분을 사용자 임의 데이터를 보낼수 있는 MACRAW 모드로 구동할 수 있다. MACRAW 모드를 이용하면 임의이 데이터를 보낼수 있는데.. EtherCat 페킷을 보내면  EhterCat 통신을 할 수 있다. 특히 TMS320F28335와 같이 실시간 처리가 가능한 DSP를 이용하면 EtheCat구현이 쉬어진다. 





아래 표는 EtherCat Frame 데이터 구조이다.

간단히 구조를 살펴 보면 목적지, 출발지 MAC주소와 EtherType에 0x88A4를 사용하고 EtherCat Data를 전송하면 된다.




EhterCat Data 필더에는 2Byte의 총 데이터 길이와 Cmd, Idx, Address... 등등의 Data Headerd와 데이터로 채워진다.

데이터는 2+26 번째 버퍼 부터 시작된다.





W5300 MACRAW 모드 초기화

Sn_MR_MACRAW 모드로 소켓을 생성하면 된다. 여기서 주의 사항은 MACRAW모드는 반드시 소켓 0번만 가능하다.

void Init_EtheCat(void)

{

socket(0, Sn_MR_MACRAW, 3000, Sn_MR_MF);

}




EtherCat 데이터 전송함수

데이터 송신시 첫 2Byte의 EtherHeader 와 마지막 2Byte CRC는 W5300에서 자동 생성된다. 다만 수신은 모든 페킷이 수신되므로 이부분을 적절히 처리해 주어야 한다.

uint32   EtherCatSend(SOCKET s, uint8 * buf, uint32 len)

{

   uint8 status=0;

   uint8 isr=0;

   uint32 ret=0;

   

   // check size not to exceed MAX size.

   if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); 

   else ret = len;

   

   // copy data

   wiz_write_buf(s, buf, ret); 


   // send

   setSn_TX_WRSR(s,ret);

   setSn_CR(s, Sn_CR_SEND);

   

   

   // wait SEND command completion

   while (!((isr = getSn_IR(s)) & Sn_IR_SENDOK)) 

   {

      status = getSn_SSR(s);                               

      if ((status == SOCK_CLOSED) || (isr & Sn_IR_TIMEOUT)) 

      {                                                    

         setSn_IR(s,Sn_IR_TIMEOUT);

         return 0;

      }

   }

   

   // Clear Sn_IR_SENDOK

   setSn_IR(s, Sn_IR_SENDOK); 


   return ret;   

}





TMS320F28335, W5300을 이용한 EtherCat 테스트

테스트는 두세트의 이더넷 모듈을 이용해서 스위치를 누르면 EtherCat 페킷으로 데이터를 전송하고 수신된 데이터를 분석해서 LED를 On/Off 하도록 했다. 


수신된 데이터는 WireShack를 이용하여 패킷을 캡쳐할 수 있고 EtherCat 데이터를 확인할수 있다.

26번 버퍼부터 데이터 필더 이다.  테스트에서는 스위치를 누를때 마다 1씩 증가해서 전송하도록 해서 테스트 했다.



그리고 시리얼포트를 이용하여 수신된 페킷을 확인할 수 있다.




TMS320F28335와 W5300 MACRAW모드를 이용한 EtherCat 테스트 동영상



Posted by nexp

댓글을 달아 주세요

  1. kiisae

    관리자의 승인을 기다리고 있는 댓글입니다

    2016.07.16 21:30 [ ADDR : EDIT/ DEL : REPLY ]

[DSP]/DSP283352013. 9. 15. 23:39

TMS320F28335 NET_EVM_EX 보드 + W5300 을 이용한 TCP/UDP 테스트

TMS320F28335 NET_EVM_EX 보드  + W5300 을 이용한 TCP/UDP 테스트




네트웍 및 MP3, Codec등을 테스트 할수 있는 [N_EX_NET EVM] 보드를 테스트 하기 위해 TMS320F28335에서 W5300을 이용한 TCP, UDP 테스틀 했다.


[N-EX_MCU] 보드는 다양한 타입의 MCU보드의 IO 및 Data/Address를 쉽게 확장해서 테스트 가능한보드이다.






W5300, W5100, W5200, Enc28J60등의 네트웍 컨트롤러를 쉽게 연결해서 테스트 가능하다.










TMS320F28335 EVM과 W5300을 이용한 TCP/UDP 테스트 동영상


Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352012. 4. 15. 22:00

[DSP28335 EVM] USB2UART CP2102 테스트

[DSP28335 EVM] USB2UART CP2102 테스트

 

 

[DSP28335 EVM] 보드에는 UART를 위해 USB2UART 변환 칩인 CP2102를 사용하고 GPIO28/SCIRXDA,  GPIO29/SCITXDA에 연결되어 있다.

 

CP2012 칩의 드라이버 파일은 아래 링크에서 최신파일을 받을 수 있다.

 

CP210x_VCP_Win2K.exe

 

http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

 

 


 

TMS320F28335 UART테스트 예제

 

DSP2833x_uart.zip

 

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352012. 4. 15. 11:45

[DSP28335 EVM] 이더넷 테스트 - W5300이용 ADC 데이터 수집

[DSP28335 EVM] 이더넷 테스트 - W5300이용 ADC 데이터 수집

 

[ EXP-ALL] 보드 VR(가변저항)의 ADC값을 이더넷을 통해 전송하는 테스트를 했다.

 

 

하드웨어

EXP 보드의 VR은 TMS320F28335  보드의 ADCB0에 연결되어 있다. 

 

 

펌웨어

펌웨어쪽 프로그램은 TCP서버로 동작하여 클라이언트 PC의 요청에 따라 가변저항의 전압값을 전송하도록 하는 아주 간단한 예제이다.

 

//-----------------------------------------------------------------------------
//W5300 수신데이터 처리
void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)
{
 unsigned int i;
 unsigned char temp;
 unsigned int adc;
 unsigned char buf[32];


 

 temp = (0xFF)&pRcvBuffer[0];
 if(temp == CMD_LED)
 {
  temp = (0xFF)&pRcvBuffer[1];
  if(temp == 1)
  {
   Led1On();
  }
  else if(temp == 0)
  {
   Led1Off();
  }
   }
 else if(temp == CMD_ADC_READ)
 {
  adc = AdcRead(8);
  buf[0] = adc&0xFF;
  buf[1] = adc>>8;
  send(0, buf, 2);

 }
}

 

 

TCP 처리 함수

void ProcessTCPS(SOCKET s, uint16 port)
{
 unsigned long len;
 uint16 mode = 0;

 //ESTABLISH?
 switch(getSn_SSR(s))
 {                  
 case SOCK_ESTABLISHED:

  if(getSn_IR(s) & Sn_IR_CON)   // check Sn_IR_CON bit
  {
   setSn_IR(s,Sn_IR_CON);     // clear Sn_IR_CON
  }

  //수신된 데이터가 있으면
  if((len=getSn_RX_RSR(s)) > 0) // check the size of received data
  {

   //수신받은 데이터 만큼 수신하고
   len = recv(s, data_buf, len);

   //수신 데이터 처리
   EthernetTest(s, data_buf, len);
   //send(s,data_buf,len);
  }
  break;


 //초기화시
 case SOCK_INIT:
  //TCP CLIENT로 부터 접속대기
  listen(s);
  status = 1;
  break;

 // PASSIVE CLOSED
 case SOCK_CLOSE_WAIT:              
  // disconnect
  disconnect(s);               
  break;

 // Socket CLOSED일 경우
 case SOCK_CLOSED:
  //C2000에서 close() 함수는 예약되어 있어서 함수명 변경했다.
  _close(s);

  //새롭게 Socket Open
  socket(s,Sn_MR_TCP,port,mode);
  status = 0;
  break;

 default:
  break;
 }
}

 

 

 

PC프로그램

void CEtherHostDlg::OnTimer(UINT_PTR nIDEvent)
{
 switch(nIDEvent)
 {
 case 1:
  unsigned char buf[10];

  buf[0] = CMD_ADC_READ;
  buf[1] = 0;
  m_ClientSocket.Send(buf, 2);
  
  break;
 }
 CDialog::OnTimer(nIDEvent);
}

 

 

 

 

 

 

 

테스트 동영상

W5300 이더넷을 이용하여 TMS320F28335 ADC 데이터를 전송하는 테스트

 

 

Posted by nexp

댓글을 달아 주세요