[MSP430]/MSP430F22xx2010. 3. 7. 23:00

[MSP430F2274 EVM] SPI테스트 - 가속도 센서 테스트

[MSP430F2274 EVM] SPI테스트 - 가속도 센서 테스트




MSP430F2274 SPI 블록도



[MSP430F2274 EVM] 보드에서 SPI는 P3.0~P3.3에 할당되어 있는 UCB0-SPI를 사용하고 있다.



spi.c 드라이이버 함수의 초기화 및 송수신 함수만 수정하면 기존 코드 그대로 사용할 수 있다.
#define SPI0_WRITE_BYTE(x)                 UCB0TXBUF = (x);
#define SPI0_READ_BYTE()     UCB0RXBUF
#define SPI0_WAIT_FOR_EN()     while (!(IFG2&UCB0TXIFG));
#define SPI0_WAIT_FOR_SEND()              while (UCB0STAT & UCBUSY);
#define SPI0_WAIT_FOR_RX()     while (!(IFG2&UCB0RXIFG))

//USCIB0 for 2271
#define TI_CC_SPI_USCIB0_PxSEL   P3SEL
#define TI_CC_SPI_USCIB0_PxDIR   P3DIR
#define TI_CC_SPI_USCIB0_PxIN    P3IN
#define TI_CC_SPI_USCIB0_SIMO    BIT1
#define TI_CC_SPI_USCIB0_SOMI    BIT2
#define TI_CC_SPI_USCIB0_UCLK    BIT3

void SPI0_Init(void)
{
 //MSP430 SPI초기화
 UCB0CTL1 |= UCSWRST;                      // **Disable USCI state machine**
 UCB0CTL0 |= UCMST+UCCKPH+UCMSB+UCSYNC;    // 3-pin, 8-bit SPI master
 UCB0CTL1 |= UCSSEL_2;                     // SMCLK
 UCB0BR0 = 0x02;                           // UCLK/2
 UCB0BR1 = 0;

 //SPI Port Init 
 TI_CC_SPI_USCIB0_PxSEL |= TI_CC_SPI_USCIB0_SIMO
         | TI_CC_SPI_USCIB0_SOMI
         | TI_CC_SPI_USCIB0_UCLK;
 // SPI option select
 TI_CC_SPI_USCIB0_PxDIR |= TI_CC_SPI_USCIB0_SIMO | TI_CC_SPI_USCIB0_UCLK;

  // Initialize USART state machine
 UCB0CTL1 &= ~UCSWRST;
}

unsigned char SPI0_WriteReadByte(unsigned char Data)
{
 SPI0_WAIT_FOR_EN();
 SPI0_WRITE_BYTE(Data);
 SPI0_WAIT_FOR_SEND();

 return SPI0_READ_BYTE();
}


SPI MODE설정시 주의 사항




SPI 가속도 센서를 테스트 하기위해 [NET-EVM] 보드를 이용하였는데 SPI CS는 CN7의 P8번에 연결되어 있고 이는 MSP430보드의 P3.7에 할당되어 있다. 드라이버 파일(config.h)에 아래와 같이 설정할 수 있다.
//AccelCS A8-P3.7
#define ACCEL_CS_BIT     BIT7
#define ACCEL_CS_PORT     P3OUT

#define ACCEL_CS_INIT()     Sbi(P3DIR, ACCEL_CS_BIT);


[MSP430F2274 EVM]보드를 이용한 SPI테스트 예제 - 가속도 센서 테스트
//-----------------------------------------------------------------------------
int main(void)
{
 int flag = 0;
 short data = 0;
 
    //System Init
 SystemInit();
 
    //LED Init
 Led1Init();
 Led1On();
 
 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("MSP430F2274 SPI Test Program.\r\n");
 
//SPI및 가속도 센서초기화
 myAccel3lvInit();
 
 while (1)
 {
  if(u0_IsReceiveData())
  {
   switch(U0_GetByte())
   {
    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%x\r\n", data);  
     break; 
     
    case 'x':
     GetAccelValue(AXIS_X, &data);
  
     DebugPrint("%d\r\n", data);  
     break;    
   }
  }  
 }
}



Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F22xx2009. 8. 14. 23:35

MSP430F2274 UART 테스트

MSP430F2274 UART 테스트
MSP430F2x의 레지스터명이 많이 바꼈다. 그대로 동작을 하지 않아 새로 작성하면서 정리해 보았다.



TI에서 제공하는 예제는 인터럽트 방식 밖에 없어서 폴링방식을 추가 해보았다.
 
데이터 전송
PutByte() 함수는 데이터 보내기전 UCAxSTAT레지스터의 BUSY비트를 체크하면 된다.
 
UCBUSY Bit 0 USCI busy. This bit indicates if a transmit or receive operation is in
progress.
0 USCI inactive
1 USCI transmitting or receiving
 
 
데이터 수신
GetByte()함수는 데이터를 받았는지 확인하기 위해 UC1IFG 레지스터의 UCA0RXIFG 를 확인하면 된다.
#define u0_WaitForReceive()     while((UC0IFG&UCA0RXIFG) == 0)
#define u0_RxData()        (UCA0RXBUF)

unsigned char U0_GetByte(void)
{
 u0_WaitForReceive();
 return u0_RxData();
}


 while (1)
 {
  if(u0_IsReceiveData())
  {
   switch(U0_GetByte())
   {
    case '0':
     Led1Off();
     DebugPrint("LED OFF\r\n");
     break;
  
    case '1':
     Led1On();
  
     DebugPrint("LED ON\r\n");   
     break;
     
    case 't':
     flag ^= 1;
     DebugPrint("flag=%d\r\n", flag);
     break;   
   }
  } 
Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F22xx2009. 7. 12. 18:55

[MSP430F2274 -SM EVM] 테스트



MSP430F2274 EVM을 SM타입으로 제작해서 테스트 했다.
MSP430 USB JTAG으로 테스트시 주의 사항은 Reset핀의 콘덴서는 제거 해야 한다. 이에 대한 자세한 내용이 없어서 한참을 고생했다. 주의 할것!




MSP430F2274 EVM 보드 테스트 동영상



Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F22xx2009. 6. 25. 22:45

[MSP430F2x-SM EVM]보드 제작 - MSP430F2274

[MSP430F2x-SM EVM]보드 제작 - MSP430F2274



MSP430F2x 시리즈 중 사이즈 작고, 저렴하며, 적당한 IO로 쓰기편한 MSP430F2274를 테스트 할수 있는 EVM 보드를 제작했다.
이전 버전은 너무 크게 만들어서 이번에는 소형이고 호환 가능한 SM타입으로 제작해 보았다.



MSP430F2274 확장 테스트 보드



SM타입이라 Bluetooth 모듈연결 가능하고 저전력의 무선기능을 쉽게 구현할 수 있다.

Posted by nexp

댓글을 달아 주세요