본문 바로가기

[TI]/LM3S8962

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

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




가속도 센서 테스트 드라이버
myMCU-EXP 보드의 가속도 센서(LIS3LV02)는 SPI0, CS(J18->16) ->RD3에 연결되어 있으므로 아래와 같이 드라이버 코드를 작성할 수 있다.
//-----------------------------------------------------------------------------
// myAccel3LV02 HAL
#define MY_ACCEL3LV02_SPI_MODE   1
#define MY_ACCEL3LV02_I2C_MODE   0

#define ACCEL_CS_BIT     BIT3
#define ACCEL_CS_PORT     PORTD

#define ACCEL_CS_INIT()     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);\
          GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, ACCEL_CS_BIT);\
          GPIOPadConfigSet(GPIO_PORTD_BASE, ACCEL_CS_BIT, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
          
#define ACCEL_CS_ASSERT()    Cbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_CS_DEASSERT()    Sbi(ACCEL_CS_PORT, ACCEL_CS_BIT)

#define ACCEL_SPI_INIT()    SPI0_Init()
#define ACCEL_Read      SPI0_WriteReadByte
#define ACCEL_Write      SPI0_WriteReadByte
//-----------------------------------------------------------------------------


LM3S8962 SPI데이터 송수신 드라이버 함수 작성
unsigned char SPI0_WriteReadByte(unsigned char Data)
{
 unsigned long rcv_data;
    SSIDataPut(SSI0_BASE,Data);
 SSIDataGet(SSI0_BASE, &rcv_data);
 return rcv_data;
}



[LM3S8962 EVM] SPI 테스트 소스 코드
#include "system.h"
#include "serial.h"
#include "myAccel.h"

int main()
{
 short data;
 
 SystemInit();

 Led1Init();
 Led1On();

 U0_Init(BAUD_115200);
 DebugPrint("CANTUS SPI - Accel LIS3LV02 Test\r\n");

 //가속도 센서 초기화
 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xC7);
 
 while(1)
 {
  if(U0_IsGetByte())
  {
   switch(U0_GetByte())
   {
    case '0':
     DebugPrint("Led1 Off\r\n");
     Led1Off();
     break;

    case '1':
     DebugPrint("Led1 On\r\n");     
     Led1On();
    break;
    
    case 'i':
     myAccel3lvWrite(CTRL_REG1, 0xC7);  //1000.0111 Power on, enable all axis, self test off
     DebugPrint("Accel Init\r\n");
     break;   

    case 'r':
     data = myAccel3lvRead(WHO_AM_I);

     DebugPrint("Who am I? 0x%02X\r\n", data);  
     break; 
     
    case 'x':
     GetAccelValue(AXIS_X, &data);

     DebugPrint("%d\r\n", data);  
     break; 
   }
  }
반응형