[DSP]/DSP283352011.11.12 18:30

[DSP28335 EVM] W5200 TCP Server 전송 속도 테스트 (SPI속도 테스트)

[DSP28335 EVM]  W5200 TCP Server 전송 속도 테스트 (SPI속도 테스트)


TM320F28335와 같이 OS없는 MCU에서 이더넷 처리를 하려며 하드웨어 TCP/P 모듈을 이용하는 것이 가장 간단한 벙법이다. TCP/IP처리를 위한 복잡한 스텍이 필요 없이 간단히 이더넷을 연결 할 수 있다.
드라이버 코드만 수정하면  아주 간단하게 포팅 가능도록 코드를 작성해 두었기 때문에  W5200 모듈을 이용하여 테스트 해볼 예정이다.


TMS320F28335 의 클럭은 150Mhz로 동작한다. 하지만 SPI 동작속도는 최대 10Mhz이다. 참고로 TMS320F2808는 6Mhz, PICCOLO시리즈 TMS320F28069는 4.5Mhz로 이들과 비교 하면 두배 정도 빠른 속도 이다.
요즘 SPI가 대부분인데 최대속도가 다소 느려서 많이 아쉽다.




[LCD_EXP_EVM] 보드에 연결하면 W5100, W5200 TCP/IP 모듈을 쉽게 테스트 가능한다. SPI CS는 TMS320F28335의 GPIO14에 연결되어 있고 Reset(INT)는 GPIO15에 연결되어 있다.






 TMS32F28335에서 SPI방식의 W5200을 이용하여 TCP Server 전송 속도 테스트 결과 SPI Clock 10MHz에서 대략 2.3Mbps정도 출력된다.





W5100/W5200 제어 드라이버 코드
드라이버 코드만 수정하면 모든 MCU에서 쉽게 포팅 가능하도록 코드를 작성해 두고 있다.

//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     GPIOA
#define W5100_CS_BIT     BIT14

#define W5100_RST_PORT     GPIOA
#define W5100_RST_BIT     BIT15

#define IINCHIP_RSToff()    cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     sbi(W5100_RST_PORT, W5100_RST_BIT)


#define W5100_IO_INIT()     EALLOW;\
          GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;\
          GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;\
          EDIS;\


#define IINCHIP_CSoff()     cbi(W5100_CS_PORT, W5100_CS_BIT)
#define IINCHIP_CSon()     sbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_SPI_INIT()    SPI0_Init()
#define IINCHIP_SpiSendData    SPI0_WriteReadByte
#define IINCHIP_SpiRecvData    SPI0_WriteReadByte
#define IINCHIP_SPI_SPEED()    SPI0_SetSpeed(SPI_SPEED_MAX)
//-----------------------------------------------------------------------------



 

Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2014.08.06 13:01 [ ADDR : EDIT/ DEL : REPLY ]

[DSP]/DSP283352011.11.11 23:00

[DSP28335 EVM] 로터리 엔코더 테스트 - TMS320F28335 QEP

[DSP28335 EVM] 로터리 엔코더 테스트 - TMS320F28335  QEP


TMS320F28335는 2채널의 EQEP 모듈이 있어 엔코더를 쉽게 연결 할 수 있다.

[DSP28335 EVM] EQEP 핀맵







[EXP-ALL EVM] 보드를 이용하면 로터리 엔코더를 이용하여 간단히 TMS320F28335의 EQEP를 테스트 해 볼 수 있다.
로터리 엔코더는  EQEP 채널 1에 연결되어 있다.
GPIO50/EQEP1A <- GPIO0/EPWM1A (simulates EQEP Phase A signal)    
GPIO51/EQEP1B <- GPIO1/EPWM1B (simulates EQEP Phase B signal)    
GPIO23/EQEP1I <- GPIO4 (simulates EQEP Index Signal)


[EXP-ALL EVM]보드의 로터리 엔코더 회로도








TMS320F28355 QEP 테스트 동영상





TMS320F28335 EQEP 를 이용한 로터리 엔코더 테스트 소스코드
QEP 레지스터에서 로터리 엔코더 값을 읽어와 FND에 출력하는 예제 코드 이다. 테스트를 위해 최대 QEP값은 100으로 설정했다.
void main(void)
{
 unsigned long cnt = 0;
 unsigned long old_cnt = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("DSP28335 QEP Test\r\n");

//FND 초기화
 FndInit();
 FndOut(10);

  //QEP1 초기화
   InitQep1();

 while(1)
 {

   //QEP 데이터 카운트값 읽어와서
  cnt = EQep1Regs.QPOSLAT;

  if(old_cnt != cnt)
  {
   Led1Toggle();
   FndOut((unsigned char)cnt);
   DebugPrint("cnt=%ld\r\n", cnt);
  }

 old_cnt = cnt;
  Delay(1);
 }
}  



Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011.11.04 22:00

[DSP28335 EVM] FND테스트 - [EXP-ALL EVM]보드 이용

[DSP28335 EVM] FND테스트 - [EXP-ALL EVM]보드 이용


[EXP-ALL EVM] 보드에는  FND모듈을 연결할 수 있고 아래와 같으 핀맵이다.
D0 - LATCH (GPIO79)
D2 - SCLK (GPSIO77)
D4 - DATA (GPIO75)







FND모듈 제어를 위한 드라이버 함수

#define D0_GPIO79    BIT15// 15     GPIO79
#define D2_GPIO77    BIT13// 13     GPIO77
#define D4_GPIO75    BIT11// 11     GPIO75

#define SHIFT_DATA_PORT   GPIOC
#define SHIFT_DATA_BIT   D4_GPIO75

#define SHIFT_CLK_PORT   GPIOC
#define SHIFT_CLK_BIT   D2_GPIO77

#define SHIFT_LATCH_PORT  GPIOC
#define SHIFT_LATCH_BIT   D0_GPIO79

#define ShiftDataSet()   sbi(SHIFT_DATA_PORT, SHIFT_DATA_BIT);
#define ShiftDataClear()  cbi(SHIFT_DATA_PORT, SHIFT_DATA_BIT);
#define ShiftClkSet()   sbi(SHIFT_CLK_PORT, SHIFT_CLK_BIT);
#define ShiftClkClear()   cbi(SHIFT_CLK_PORT, SHIFT_CLK_BIT);
#define ShiftLatchSet()   sbi(SHIFT_LATCH_PORT, SHIFT_LATCH_BIT);
#define ShiftLatchClear()  cbi(SHIFT_LATCH_PORT, SHIFT_LATCH_BIT);

#define SHIFT_HAL_INIT()  EALLOW;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO79 = 1;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO77 = 1;\
        GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 0;\
        GpioCtrlRegs.GPCDIR.bit.GPIO75 = 1;\
        EDIS;



TMS320F28335 FND출력 테스트 예제
#include "system.h"
#include "serial.h"
#include "shift.h"
#include "fnd_m.h"

void main(void)
{
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("DSP28335 QEP Test\r\n");

 FndInit();
 FndOut(10);

wihle(1)
{
}
}


[EXP-ALL EVM] 테스트 보드
Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352009.05.28 02:05

[DSP28335 EVM] TMS320F28335 SPI테스트 - 3축 가속도 센서 테스트

[DSP28335 EVM] TMS320F28335 SPI테스트 - 3축 가속도 센서 테스트


DSP2808335 SPI테스트를 위해 Code Composer Studio에 SPI관련 소스 및 가속도 센서 코드 추가



TMS320F28335 SPI블럭도






SPI Mode설정
LIS3LV02제어를 위해서는 SPI Mode0로 설정해야한다. SPICCR, SPICTL레지스터에서 설정할 수 있다.




SPI 설정


SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0

 //SPI 초기화
 SpiaRegs.SPICCR.bit.SPISWRESET = 0;
 SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
 SpiaRegs.SPICCR.bit.SPILBK = 0;  //루프백 비사용
 SpiaRegs.SPICCR.bit.SPICHAR = 7;  //8비트 모드 
 SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Ready to transmit

 SpiaRegs.SPICTL.bit.SPIINTENA = 0; //인터럽트 비사용
 SpiaRegs.SPICTL.bit.TALK = 1;   // Transmit enable
 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //SPI마스터 모드
 SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0
 SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0; //Overrun interrupt disable

 SpiaRegs.SPIPRI.bit.FREE = 1;       // Set so breakpoints don't disturb xmission


SPI클럭 속도 설정
SpiaRegs.SPIBRR 레지스터에서 설정 가능하다. TMS320F28335는 최대 10Mhz까지 가능하다.(좀 아쉽다.)

 //SPI 클럭속도 설정
 SPI0_SetSpeed(SPI_SPEED_4MHZ);



 //SPI GPIO초기화
 EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   // Enable pull-up on GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   // Enable pull-up on GPIO19 (SPISTEA)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
   
    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA
    EDIS;
 
 //SPI FIFO 초기화
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;


TMS320F280335  3축 가속도 센서 테스트 소스코드
void main(void)
{
 short data = 0;
 unsigned int flag = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("TMS320F28335 SPI Test\r\n");

 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xD7);  //1000.0111 Power on, enable all axis, self test off
 myAccel3lvWrite(CTRL_REG2, 0x40);

 while(1)
 {
  if(DebugIsByte())
  {
   switch(U0_GetByte())
   {
   case 'h':
    DebugPrint(("device_id=%02X\r\n", myAccel3lvRead(WHO_AM_I));
    break;

 case 'r':
    GetAccelValue(AXIS_X, &data);
    DebugPrint("Accel:%d\\n", data);  
    break;
}
}
Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352009.05.27 01:53

[DSP28335 EVM] TMS320F28335 XINTF 외부 메모리 테스트

[DSP28335 EVM] TMS320F28335 XINTF 외부 메모리 테스트

[DSP28335 EVM] 보드에는 외부 메모리 인터페이스 CS핀이 두포트 할당되어 있다.  SRAM 메모리는 CS7(GP37)에 할당 되어 있고 CS0(GP36)은 외부 제어용으로 할당되어 있다.





CS핀에 따른 메모리 블록



Each zone can be programmed with different wait states, setup and hold timings. A dedicated zone chip select
(XZCS) signal toggles when an access to a particular zone is performed. These features enable glueless connection
to many external memories and peripherals.
B Zones 1 − 5 are reserved for future expansion.
C When the XINTF clock is enabled in PCLKCR3, all zones are enabled.


외부 메모리 할당
ZONE7DATA 는 CMD파일에 할당한다.
//CS7 메모리 블록 할당
#pragma DATA_SECTION(gExinf7Buff,"ZONE7DATA");

#define BUF_SIZE   1024 
volatile unsigned int gExinf7Buff[BUF_SIZE];



TMS320F28335 SRAM제어 테스트 예제 소스코드
SRAM 메모리에 간단히 데이터 쓰고 읽어 시리얼 포트로 출력 하는 예제를 작성해 보았다.
void main(void)
{
 int cnt = 0;
 int flag = 0;
 int i = 0;
 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 init_zone();

 DebugInit(BAUD_115200);
 DebugPrint("DSP28335 EX-SRAM Test\r\n");

 DebugPrint("SRAM Write Start.\r\n");
 for(i=0;i<10;i++)
 {
  gExinf7Buff[i] = i;
 }
 
 DebugPrint("SRAM Read.\r\n");
 for(i=0;i<10;i++)
 {
  DebugPrint("val=%d\r\n", gExinf7Buff[i]);
  Led1Toggle();
  Delay(200);
 }

 while(1);
}
Posted by nexp

댓글을 달아 주세요