[TI]/LM3S1xx2014. 6. 6. 21:27

LM3S101 SPI 테스트

LM3S101 SPI 테스트



LM3S101 SPI 초기화 함수

//----------------------------------------------------------------

// SPI 통신 초기화 함수

void SPI0_Init(void) 

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);

GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);

GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5,

GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU);

 

SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,

  SSI_MODE_MASTER, 1000000, 8);

SSIEnable(SSI0_BASE);

SPI0_SetSpeed(SPI_SPEED_1MHZ);

}

//----------------------------------------------------------------




LM3S101 SPI 송수신 함수

SUINT SPI0_WriteReadByte(SUINT Data)

{

    // Wait until there is space.

    while(!(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_TNF))

    {

    }


    // Write the data to the SSI.

    HWREG(SSI0_BASE + SSI_O_DR) = Data;

    while(!(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_RNE))

    {

    }


    // Read data from SSI.

    return (HWREG(SSI0_BASE + SSI_O_DR));

}


Posted by nexp

댓글을 달아 주세요

[TI]/LM3S8xx2009. 3. 30. 21:03

[LM3S608] Simple I2C 테스트 - simple polling mode

[LM3S608] Simple I2C 테스트 - simple polling mode
간단히 [LM3S608]의 I2C 개념 잡기 위해 우선 polling모드로 I2C Slave의 데이터를 읽어오는 실험을 했다.


I2C 구조


I2C초기화 함수
void i2c_init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); 

    //
    // Enable processor interrupts.
    //
    IntMasterEnable();

    //
    // Configure the appropriate pins to be I2C instead of GPIO.
    //
    GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3);

    //
    // Initialize the I2C master.
    //
    I2CMasterInitExpClk(I2C0_MASTER_BASE, SysCtlClockGet(), false);

    //
    // Enable the I2C interrupt.
    //
//IntEnable(INT_I2C0);

    //
    // Enable the I2C master interrupt.
    //
//I2CMasterIntEnable(I2C0_MASTER_BASE);  
}

Start 및 Address 설정
7bit Address이므로 1bit 시프트해 주고 Data 레지스터에 값쓴후 I2CMasterControl() 함수 호출하면 Start+Address날아 간다.
unsigned char i2c_start(unsigned char address)
{
    // Start
    I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, 0xFF&(address>>1), true);   

    // Write Address
    I2CMasterDataPut(I2C0_MASTER_BASE, 0xFF&(address>>1));
    I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_SINGLE_SEND);
   
    return 0;
}

I2C Data Read
데이터 읽을때는 Slave의 ACK확인하고 I2CMasterDataGet()함수로 데이터 읽어오면 끝..
하드웨어로 I2C처리되니 상당히 간단하게 작성할 수 있다.
unsigned char i2c_readAck(void)
{
    unsigned char read_data = 0;

    //데이터 들어올 때 까지 대기.. 추가
    while(1)
    {
        if(!I2CMasterBusy(I2C0_MASTER_BASE))break;
        //ToDo Timeout
    }
   
    /*
    while(g_ulState != STATE_IDLE)
    {
        //ToDo Timeout
    } */  
   
    read_data = I2CMasterDataGet(I2C0_MASTER_BASE);

#define i2c_stop()
//-----------------------------------------------------------------------------

Posted by nexp

댓글을 달아 주세요

[TI]/LM3S8xx2008. 12. 3. 20:16

[ LM3Sx08 EVM] 테스트예제 - USB이용 PC에서 LED제어 예제

[ LM3Sx08 EVM] 테스트예제 - USB이용 PC에서 LED제어 예제



[ LM3Sx08 EVM] 보드 예제소스
를 이용하여 PC에서 LED제어하는 예제를 작성해 보았다.
USB2Seiral 칩을 이용하여 USB를 통해 보드상의 LED를 마우스 클릭으로 제어 하도록 했다. 원리는 시리얼포트로 특정 커멘드를 보내서 LED를 제어하는 간단한 예제이다.

예제소스 :
ex03_serial.zip


테스트 동영상
LM3S308 (LM3S608, LM3S808 호환)보드를 이용 PC에서 LED제어 동영상

Posted by nexp

댓글을 달아 주세요