본문 바로가기

[DSP]/DSP6000

[TMS320C6720] SPI 테스트 - 3축 가속도 센서 CCS 를 이용한 그래프표시 하기

[TMS320C6720] SPI 테스트 - 3축 가속도 센서 CCS 를 이용한 그래프표시 하기

TMS320C6720에는 UART는 없지만 SPI포트가 2채널 있다.
테스트 결과 최대 클럭 스피드는 50Mhz(100Mhz//(1+1))까지 출력은 가능하다. FIFO가 없긴하지만, 클럭 설정도 유연하게 설정가능한것 같고...DMA도 지원한다니 SPI인터페이스에 좋을것 같다.



TMS320C6720SPI 관련 블록도





TMS320C672x SPI 주요 레지스터

SPIFMTx 레지스터
17 :  POLARITY
16 : PHASE
15-8 : PRESCALE[7:0]
  BR = SYSCLK2/(PRESCALEx + 1)

SPIDATx : 송신 버퍼

SPIBUF : 수신 버퍼


TMS320C6720 SPI Read/Write함수
SPI1BUF레지스터의 RXEMPTY(BIT31) 가 1이되면 수신이 완료된 것을 나타내고 데이터를 가져오면 된다.
unsigned char SPI1_WriteReadByte(unsigned char Data)

 _SPI1DATA0 = Data;

 while(_SPI1BUF & BIT31);

 return (_SPI1BUF & 0xFF);
}



TMS320C6720 SPI테스트 예제 소스코드
#include "system.h"
#include "myAccel.h"

void main()
{
 unsigned int idx = 0;
 short data = 0;
 short buf[128];

 SystemInit();

 //Led Init..
 Led1Init();
 Led2Init();

 Led1Off();
 Led2Off();

 DebugPrint("[TMS320C6720 EVM] Test Program - SPI Accel Test.\n");

myAccel3lvInit();
   //1000.0111 Power on, enable all axis, self test off
 myAccel3lvWrite(CTRL_REG1, 0xC7);  
    DebugPrint("Accel Init\r\n");   
   
 data = myAccel3lvRead(WHO_AM_I);
 DebugPrint("Who am I? 0x%02X\r\n", data);     

 while(1)
 {
  if(idx > 128)
  {
   for(idx=0;idx<128;idx++)buf[idx]=0;
   idx = 0;
  }

  GetAccelValue(AXIS_X, &data);
  buf[idx++] = data;

  Led1Toggle();
  DebugPrint("%d\r\n", data);
 }
}




[LCD_EXP_EVM] 보드 의 SPI커넥터



CCS3.3을 이용하면 데이터를 그래프로 볼 수 있어 편리한데, 3축 가속도 센서의 데이터값을 그래프로 보기 위해 적당한 값으로 버퍼 잡고 (short buf[128]), 브레이크 포인트 걸어서 실시간으로 센서 데이터값을 그래프로 확인 가능하다.




디버깅 툴이 그리 빠르지 않은넘이라... 실시간이라기는 좀 그렇지만 전체적인 센서의 추위는 확인 할 수 있다.




TMS320C 6720 SPI 가속도센서 테스트 동영상

반응형