[DSP28335 EVM] TMS320F28335 SPI테스트 - 3축 가속도 센서 테스트
DSP2808335 SPI테스트를 위해 Code Composer Studio에 SPI관련 소스 및 가속도 센서 코드 추가
TMS320F28335 SPI블럭도
SPI Mode설정
LIS3LV02제어를 위해서는 SPI Mode0로 설정해야한다. SPICCR, SPICTL레지스터에서 설정할 수 있다.
SPI 설정
SPI클럭 속도 설정
SpiaRegs.SPIBRR 레지스터에서 설정 가능하다. TMS320F28335는 최대 10Mhz까지 가능하다.(좀 아쉽다.)
TMS320F280335 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
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);
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;
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;
}
}
{
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;
}
}
반응형