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 출력 테스트










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 테스트 동영상



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 테스트 동영상


[DSP28335 EVM] USB2UART CP2102 테스트

[DSP]/DSP28335 | 2012.04.15 22:00
Posted by nexp

[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

 

[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 데이터를 전송하는 테스트

 

 

[TMS320F28335 EVM] TI 무료 RTOS SYSBIOS 테스트




TI에서 제공하는 무료 RTOS인 SYSBIOS를 TMS320F28시리즈(TMS320F28335)에서 테스트 해보았다. 이번에는 기존 SYSBIOS 테스트 예제 에 추가하여세마포를 이용하여 쓰레드를 처리하는 예제를 테스트 했다.
 


SYSBIOS 프로젝트 생성
CCS4.0 이상에서 (예제는 CCS5에서 테스트 했다.) 에서 SYSBIOS 프로젝트 생성시 지원 가능하다.
CCS 프로젝트 생성시 SYSBIOS 항목에서 적당한 탬플릿을 선택하면 간단히 적용할 수 있다.






RTOS 버전 설정







SYSBIOS 등록 후 cfg파일에서 SYS/BIOS관련 각종 파라미터들을 쉽게 설정 할 수 있다.






SYSBIOS 구조






SYSBIOS 기본 골격
#include <xdc/std.h>
#include <xdc/runtime/Log.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Semaphore.h>

#include "system.h"
#include "serial.h"

/* Counter incremented by timer interrupt */
volatile UInt tickCount = 0;
volatile UInt tickCount2 = 0;

//세마포 생성
extern const Semaphore_Handle mySem;
extern const Semaphore_Handle mySem2;

Void main()
{
 //사용자 초기화 함수
//--------------------------------------------------------

 SystemInit();

 Led1Init();
 Led1On();

 Led2Init();
 Led2Off();

 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("SYS/BIOS Test Program.\r\n");
//--------------------------------------------------------

//--------------------------------------------------------
    //Start RTOS BIOS
    BIOS_start();
//--------------------------------------------------------
}


//수행될 TASK 함수
Void myTaskFxn(Void)
{
  wihle(1) 
  {
    :
   }
}

Void myTaskFxn2(Void)
{
  wihle(1) 
  {
    :
   }
}





기본 환경 설정이 마무리 되었기 때문에 간단한 예제를 작성하여 테스트 해보자.


TASK 설정 및 추가를 위한 cfg 파일 수정
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.swiEnabled = false;
BIOS.taskEnabled = true;
BIOS.clockEnabled = false;


/* Create a task with priority 1 */
var Task = xdc.useModule('ti.sysbios.knl.Task');
var taskParams = new Task.Params();
taskParams.priority = 1;
var myTask = Task.create('&myTaskFxn', taskParams);
var myTask2 = Task.create('&myTaskFxn2', taskParams);

/* Inhibit the creation of a task to run idle functions */
Task.enableIdleTask = false;



TASK 실행
cfg파일에서 정의한 TASK를 실행할 함수를 아래과 같이 작성해 준다. 아래 예제는 단순히 루프를 돌며 대기하다 세마포 이벤트가 발생하면 LED깜박이고 UART로 값을 출력하는 예제이다. 세마포 이벤트는 일정 간격으로  타이머 Task에서 호출하도록 했다.
//RTOS TASK1 - BIOS_start() thread.
Void myTaskFxn(Void)
{
    while (TRUE)
    {
        //세마포 핸들에 의해 호출 되기전 까지 대기
        Semaphore_pend(mySem, BIOS_WAIT_FOREVER);
       
        Led1Toggle();
        DebugPrint("Task1=%d\r\n", tickCount);
    }
}


//RTOS Task2
Void myTaskFxn2(Void)
{
 while(1)
 {
  //세마포 핸들에 의해 호출 되기전 까지 대기
        Semaphore_pend(mySem2, BIOS_WAIT_FOREVER);

  Led2Toggle();
  test_cnt2++;
  DebugPrint("Task2=%d\r\n", test_cnt2);
 }
}


예제를 실행하면 두개의 TASK가 원하는 시간에 동작되는 것을 LED및 UART를 통해 확인 할 수 있다.
Task1=41
Task2=418
Task2=419
Task2=420
Task2=421
Task2=422
Task2=423
Task2=424
Task2=425
Task2=426
Task2=427
Task1=42
Task2=428
Task2=429
Task2=430
Task2=431
Task2=432
Task2=433
Task2=434
Task2=435
Task2=436
Task2=437
Task1=43



결론
RTOS는 사용의 편리성 보다는 초기 설정이나 MCU별 포팅에 대한 문제 때문에 부담이 많이 가는것이 현실이다.
TI에서 제공되는 SYS/BIOS는 TI의 대부분 MCU를 지원하고 간단히 설정 가능하므로 여러가지 장점이 많다. 한번 설정 해 두면 앞으로 도움이 많이 될것 같다.
[DSP28335 EVM] VS1053모듈이용한 MP3 출력 테스트

 



[EXP-ALL EVM] 보드에서 VS1053 MP3모듈의 핀맵과 [DSP28335 EVM]의 핀맵









TMS320F28335 VS1053 모듈 드라이버 코드
#define VS_DREQ_BIT      BIT3
#define VS_DREQ_PORT     PORTA

#define VS_CS_BIT      BIT1
#define VS_CS_PORT      PORTA

#define VS_XDCS_BIT      BIT2
#define VS_XDCS_PORT     PORTA

#define VS_RST_BIT      
#define VS_RST_PORT 

#define VS1003_CS_H()      Sbi(VS_CS_PORT, VS_CS_BIT)
#define VS1003_CS_L()      Cbi(VS_CS_PORT, VS_CS_BIT)

#define VS1003_XDCS_H()      Sbi(VS_XDCS_PORT, VS_XDCS_BIT)
#define VS1003_XDCS_L()      Cbi(VS_XDCS_PORT, VS_XDCS_BIT)

#define VS1003_RESET_H()     //Sbi(VS_RST_PORT, VS_RST_BIT)
#define VS1003_RESET_L()     //Cbi(VS_RST_PORT, VS_RST_BIT)

#define IsVs1003DataReady()     (GPIOA->IDR&VS_DREQ_BIT)
#define VS1003_DREQ()           ((GPIOB->IDR&SW_BIT))

#define vs1003_enable()      VS1003_CS_L()
#define vs1003_disable()     VS1003_CS_H()


#define VS_SendByte       SPI1_WriteReadByte
#define VS_InitSpi()      SPI1_Init()
#define VS_SpiSpeed_Low()        SPI1_SetSpeed(SPI_SPEED_1MHZ)
#define VS_SpiSpeed_High()     SPI1_SetSpeed(SPI_SPEED_4MHZ)

#define MP3_PORT_INIT() 



TMS320F28335 SD Card 드라이버 코드

#define _SPI0_ENABLE     1
//-----------------------------------------------------------------------------
// SD Card HAL
#define MMC_CS_PORT      GPIOA
#define MMC_CS_BIT      BIT20

#define MMC_CS_INIT()     EALLOW;\
          GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;\
          EDIS;\
          MMC_CS_HIGH()
          
          
#define MMC_CS_HIGH()     sbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_CS_LOW()     cbi(MMC_CS_PORT, MMC_CS_BIT)


#define MMC_ASSERT_INIT()    MMC_CS_INIT();MMC_CS_HIGH()
#define MMC_ASSERT()     MMC_CS_LOW()
#define MMC_DEASSERT()     MMC_CS_HIGH()


#define MMC_SpiInit()     SPI0_Init()
#define MMC_SendByte     SPI0_WriteReadByte
#define MMC_Send(Data)      SPI0_WriteByte(Data)
#define MMC_Recv()      SPI0_WriteReadByte(0xFF)
#define MMC_RecvP(Data)     MMC_Send(0xFF); (*(Data)=SPI0_ReadByte())
#define MMC_SPISpeed     SPI0_SetSpeed

#define SPI_Mode3()
//-----------------------------------------------------------------------------
[DSP28335 EVM] Hardware TCP/IP W5300 TCP전송 테스트 - TMS320F28335 [EXP-ALL EVM]



[EXP-ALL EVM] 보드에는 wiznet사의 고속 Hardwired TCP/IP  W5300모듈을 연결할 수 있다.
TMS320F28335 외부 메모리 인터페이스로 제어 하면 고속의 이더넷 데이터를 전송할 수 있기 때문에 여러가지 실험해 볼것이 많을것 같다.
(좀더 자세한 내용은 TM320F28335 W5300포팅 참고)

[EXP-ALL EVM] 의 W5300모듈 연결 회로도
TMS320F28335는 16비트 모드를 지원하기 때문에 R49, R1을 제거한다. W5300의 CS는 TMS320F28335 의 CS0에 연결한다.





TMS320F28335를 이용하여 W5300 TCP 서버 루푸백 전송 속도 테스트 결과
대략 28Mbps 정도 출력된다.  55Mbyte 동영상 전송시 15초 정도 걸린다.
저렴하고 OS없는 임베디드 보드에서 간단한 코드로 TCP전송 속도가 이정도 이면.. 상당히 빠르다. (참고로 ARM9 2410으로 테스트시 45Mbps정도 나온다) .
물론 비교 대상은 아니지만 ATmega128(8Mhz) 에서 W5300 속도 테스트 결과(2.6Mbps)와 비교해 보면 아주 많은 차이가 난다.







TCP Server 처리 함수
Wiznet칩 제어를 위한 함수를 통합했다. 앞으로 손을 좀더 봐야 겠지만 이 코드로 수정 해 나갈 예정인다.
//-----------------------------------------------------------------------------
//TCP Server 처리함수
void ProcessTCPS(SOCKET s, unsigned int port)
{
 unsigned long len;
 unsigned int mode = 0;

 //TCP SOCKET status
 switch(getSn_SSR(s))               
 {     
  //초기에
  case SOCK_INIT:
   //접속대기
   temp = listen(s);
   if(!gTcpStatus)DebugPrint("%d : LOOPBACK_TCPS(%d) Started.\r\n",s,temp);
   gTcpStatus = 1;
   break; 
  
  // Socket CLOSED일 경우
  case SOCK_CLOSED:
   
   //닫고
   _close(s);  //C2000에서 close() 함수는 예약되어 있어서 함수명 변경했다.
  
   //새롭게 Open
   DebugPrint("TCP Server Opne.\r\n");
   socket(s,Sn_MR_TCP,port,mode);
   gTcpStatus = 0;
   break;
   
  //ESTABLISH?
  case SOCK_ESTABLISHED:          
   //수신된 데이터가 있으면
   if((len=getSn_RX_RSR(s)) > 0)
   {
    //수신하고
    len = recv(s,data_buf,len);

    //재전송(루프백 테스트)
    send(s, data_buf, len);
   }
   break;

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



W5300초기화 함수
//WIZENT Chip 초기화함수
void IINCHIP_NetInit(void)
{
 uint8 tx_mem_conf[8] = {8,8,8,8,8,8,8,8};          // for setting TMSR regsiter
 uint8 rx_mem_conf[8] = {8,8,8,8,8,8,8,8};          // for setting RMSR regsiter

 unsigned char addr[6] = MY_NET_MAC;

 //initiate W5300
 iinchip_init(); 

 /* allocate internal TX/RX Memory of W5300 */
 if(!sysinit(tx_mem_conf,rx_mem_conf))          
 {
  DebugPrint("MEMORY CONFIG ERR.\r\n");
  while(1);
 }

 // If Little-endian, set MR_FS.
    setMR(getMR() | MR_FS|BIT10|BIT11|BIT12);
 Delay(100);

 //set MAC
 IINCHIP_SET_MAC(addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); 

 //set subnet
    MY_SUBNET_SET();
 IINCHIP_SET_SUB(addr[0], addr[1], addr[2], addr[3]);
 
 //set Gateway
    MY_GWIP_SET(); 
 IINCHIP_SET_GAR(addr[0], addr[1], addr[2], addr[3]);
 
 //set IP
    MY_IP_SET();
 IINCHIP_SET_IP(addr[0], addr[1], addr[2], addr[3]); 
}



TMS320F28335 W5300 TCP Server 테스트 예제코드
void main(void)
{
 short data = 0;
 unsigned int flag = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("W5300 Test\r\n");

 //TMS320F28335 외부 메모리 초기화
 init_zone();  

 //W5300 초기화
 IINCHIP_NetInit();
 DisplayConfig();

 while(1)
 {
  //TCP 서버 루프백 처리함수
  ProcessTCPS(SOCK_TCPS, MY_LISTEN_PORT); 
 }
}  


[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);
}



[DSP28335 EVM] TFT LCD 출력 속도 테스트 - TMS320F28335 EXP_LCD EVM



[LCD_EXP_EVM] 보드 를 이용하여 TMS320F28335로 TFT LCD출력 테스트를 진행 했다.
TMS320F28335는 외부 메모리 인터페이스(EXINF)를 지원하므로 EXINF로 실험 해 보았다.

LCD_CS는 TMS320F28335 CS0로 할당 했고 LCD RS는 A0로  할당 했다.




240x400 픽셀의 한 프레임 출력시 GPIO로 제어 하면 10ms정도 시간이 걸린다.

외부 데이터/어드레스 버스로 제어 했을때  Function -2옵티마이즈 옵션으로 8ms정도 나온다
File -3로 최적화시에 한프레임 출력하는데  4ms 정도 나온다.
특히나 CS동기를 맞추기 때문에 다른 입출력 장치(Ethernet, ADC, DAC 등)와 함께 사용시 확실한 성능 차이를 보여줄 것 같다.

TMS320F28335 TFT-LCD 출력 테스트 동영상





TMS32F28335 TFT LCD 테스트 동영상 - Sd card를 이용한 BMP출력
SPI를 이용하여 SD Card의 BMP이미지 출력시 속도가 많이 느려지는데 TMS320F28335의 SPI클럭속도가 최대 10Mhz밖에 되지 않기 때문인것 같다.

블로그 이미지

nexp

카테고리

분류 전체보기 (1560)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (140)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (213)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (129)
[SENSOR] (41)
[DATA] (21)
[FPGA] (32)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)