[Tiva] I2CMasterControl()

임베디드/TI 2014. 8. 25. 23:58

 void I2CMasterControl(uint32_t ui32Baseuint32_t ui32Cmd)

 설명 : I2C 통신시 Master의 동작을 설정하는 함수입니다.

 

 uint32_t ui32Base

 I2C 통신을 하게 될 Master의 Base Address를 설정합니다.


 uint32_t ui32Cmd

 I2C 통신을 하게 될 Master가 하게 될 동작을 설정합니다. 이 인자의 경우 다음과 같은 값들을 입력하실 수 있습니다.


I2C_MASTER_CMD_SINGLE_SEND

I2C_MASTER_CMD_SINGLE_RECEIVE

I2C_MASTER_CMD_BURST_SEND_START

I2C_MASTER_CMD_BURST_SEND_CONT

I2C_MASTER_CMD_BURST_SEND_FINISH

I2C_MASTER_CMD_BURST_SEND_ERROR_STOP

I2C_MASTER_CMD_BURST_RECEIVE_START

I2C_MASTER_CMD_BURST_RECEIVE_CONT

I2C_MASTER_CMD_BURST_RECEIVE_FINISH

I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP

I2C_MASTER_CMD_QUICK_COMMAND

I2C_MASTER_CMD_HS_MASTER_CODE_SEND


 이들 중 빈번하게 사옹되는 것으로 다음과 같은 값들이 있습니다.


 I2C_MASTER_CMD_SINGLE_SEND

 Master가 Slave에게 명령어를 전달하는 모드입니다.


 I2C_MASTER_CMD_SINGLE_RECEIVE

 Master가 Slave로부터 명령어를 전달받는 모드입니다.


 I2C_MASTER_CMD_BURST_SEND_START

 Master가 Slave에게 명령어를 전달하는 모드입니다. 위의 I2C_MASTER_CMD_SINGLE_SEND와 달리 바로 명령어를 전달하지 않고 일단 Slave에게 명령어를 전달하겠다는 설정만 합니다.


 I2C_MASTER_CMD_BURST_SEND_CONT

 위의 I2C_MASTER_CMD_BURST_SEND_START를 실행한 후 Slave에게 입력할 명령어를 전달합니다.


 I2C_MASTER_CMD_BURST_SEND_FINISH

 Slave에게 마지막 명령어를 전달한 후 I2C 통신을 종료합니다.


 I2C_MASTER_CMD_BURST_RECEIVE_START

 I2C_MASTER_CMD_BURST_RECEIVE_CONT

 I2C_MASTER_CMD_BURST_RECEIVE_FINISH


 Master가 Slave로부터 명령어를 전달받는 모드로 SINGLE모드와 BURST 모드의 차이는 위의 SEND와 유사합니다.


다음은 SINGLE 모드와 BURST 모드로 I2C통신시 파형을 나타냅니다.


SINGLE_SEND


ROM_I2CMasterSlaveAddrSet(I2C0_BASE, 0xE0 / 2, false);

ROM_I2CMasterDataPut(I2C0_BASE, 0x7E);

ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);


while (ROM_I2CMasterBusy(I2C0_BASE)) {


}




BURST_SEND


ROM_I2CMasterSlaveAddrSet(I2C0_BASE, 0xE0 / 2, true);

ROM_I2CMasterDataPut(I2C0_BASE, 0x02);

ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);


while (ROM_I2CMasterBusy(I2C0_BASE)) {


}


ROM_I2CMasterDataPut(I2C0_BASE, 0xFF);

ROM_I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);


while (ROM_I2CMasterBusy(I2C0_BASE)) {


}









300x250