[DSP]/DSP283352009. 5. 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. 5. 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

댓글을 달아 주세요

[DSP]/DSP283352009. 5. 9. 01:59

[DSP28335] UART 테스트 - TMS320F28335 SCI

[DSP28335] UART 테스트 - TMS320F28335 SCI

TMS320F28335의 UART Baudrate 설정 LSPCLK에서 부터 생성되며 다른 C2000 (TMS320F2812, TMS320F2808)과 다르게 37.5Mhz의 내부 발진기로 할당된다. 따라서 보레이트 설정 부분을 수정해야 정상 동작한다.



보레이트 설정은 아래와 같이 설정하면된다.





UART 송수신을 위한 함수 포팅
unsigned char U0_GetByte(void)
{
 // wait for RRDY/RXFFST =1 for 1 data available in FIFO
 while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { };  
 return RxData();
}

void U0_PutByte(unsigned char Data)
{
    while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {};
    TxData(Data);
}


TMS320F28335 SCI (UART) 초기화 함수
void U0_Init(unsigned char baud)
{
 InitSciaGpio();

    SciaRegs.SCIFFTX.all=0xE040;
    SciaRegs.SCIFFRX.all=0x204f;
    SciaRegs.SCIFFCT.all=0x0;

 U0_SetBaud(baud);

  SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
 SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
 SciaRegs.SCICTL2.all =0x0003;
 SciaRegs.SCICTL2.bit.TXINTENA =1;
 SciaRegs.SCICTL2.bit.RXBKINTENA =1;
 
 SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset 
}
Posted by nexp

댓글을 달아 주세요