본문 바로가기

[DSP]/PICCOLO

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

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


SPI테스트 하기에는 가속도센서를 이용하면 상당히 편리하다. 제어 자체도 간단하지만 API로 작성해 둔것이 있으므로 SPI 드라이버 부분과 /CS핀 설정만 하면 쉽게 SPI동작여부를 테스트 할 수 있다.

SPI구조는 TMS320F2808과 같은 구조이고 특별하게 변한것이 없고 코드 또한 동일하게 호환된다. 다만 FIFO가 16 level에서 4 level로 줄었다. 아무래도 가격때문이지 않을까...

[NET-EVM] 보드에서 가속도 센서의 CS는 CN7-P8에 연결되어 있으므로  [TMS320F28069 EVM] 보드에서는 CN6의 P8->GP20에 연결되어 있다.




TMS320F28069 SPI 가속도 센서 초기화 드라이버 코드
#define _SPI0_ENABLE     1

//-----------------------------------------------------------------------------
// myAccel3LV02 HAL
#define MY_ACCEL3LV02_SPI_MODE   1
#define MY_ACCEL3LV02_I2C_MODE   0

#define ACCEL_CS_BIT     BIT19
#define ACCEL_CS_PORT     

#define ACCEL_CS_ASSERT()    cbi(GPIOA_C, LCD_RS_BIT);NOP();
#define ACCEL_CS_DEASSERT()    sbi(GPIOA_S, LCD_RS_BIT);NOP();

#define ACCEL_CS_INIT()     EALLOW;\
          GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;\
          EDIS;\
          ACCEL_CS_DEASSERT()
          
#define ACCEL_SPI_INIT()    SPI0_Init()
#define ACCEL_Read      SPI0_WriteReadByte
#define ACCEL_Write      SPI0_WriteReadByte
//-----------------------------------------------------------------------------


[EXP-DSP EVM]확장 보드의 SPI포트에 연결하기 위해 점퍼핀으로 연결 했다.



TMS320F28069 3축 가속도 센서 테스트 동영상




TMS320F28069 SPI테스트 소스코드
void main(void)
{
 short data = 1;
 unsigned int flag = 1;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 //시리얼 포트 초기화
 DebugInit(BAUD_115200);
 DebugPrint("TMS320F28069 EVM SPI Test(%d)Mhz\r\n", _SYS_CLK);

 //가속도 센서 LIS3LV02 초기화
 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xD7);  //1000.0111 Power on, enable all axis, self test off

 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 'h':
    DebugPrint("Device ID=%02X\r\n", myAccel3lvRead(WHO_AM_I));
    break;

   case 'r':
    GetAccelValue(AXIS_X, &data);
    DebugPrint("X=%d\r\n", data);
    break;
  }

  if(flag)
  {
   GetAccelValue(AXIS_X, &data);
   DebugPrint("%d\r\n", data);
   Delay(100);
  }
   
 }//end while
}




반응형