#include"tm4c123gh6pm.h" #include #include #include "pin_map.h" #include "gpio.h" #include "hw_memmap.h" #include "hw_types.h" #include "sysctl.h" #include "i2c.h" #include "interrupt.h" #include "hw_i2c.h" #include "systick.h" #define TARGET_IS_BLIZZARD_RB1 #include "rom.h" #define I2C_O_MTPR 0x0000000C // I2C Master Timer Period #define I2C_HS_PREAMBLE 0000100 #define GPIO_PA6_I2C1SCL 0x00001803 #define GPIO_PA7_I2C1SDA 0x00001C03 #define I2C_MCS_HS 0x00000010 // High-Speed Enable #define I2C_MTPR_HS 0x00000080 // High-Speed Enable #define I2C_PP_HS 0x00000001 // High-Speed Capable #define I2C_PC_HS 0x00000001 // High-Speed Capable unsigned char sec,min,hour; uint32_t ui32TPR; void Master_Transmit_Receive() { ROM_I2CMasterSlaveAddrSet(I2C1_BASE, 0x68, false); ROM_I2CMasterSlaveAddrSet(I2C1_BASE, I2C_HS_PREAMBLE, true); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_HS_MASTER_CODE_SEND); while(ROM_I2CMasterBusy(I2C1_BASE)){}; ROM_I2CMasterSlaveAddrSet(I2C1_BASE, 0x68, false); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START); ROM_I2CMasterDataPut(I2C1_BASE, 0x00); while(ROM_I2CMasterBusy(I2C1_BASE)){}; ROM_I2CMasterDataPut(I2C1_BASE, 0x00); //sec ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); while(ROM_I2CMasterBusy(I2C1_BASE)); ROM_I2CMasterDataPut(I2C1_BASE, 0x00);//MIN ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); while(ROM_I2CMasterBusy(I2C1_BASE)); ROM_I2CMasterDataPut(I2C1_BASE, 0x00);//HOUR ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); while(ROM_I2CMasterBusy(I2C1_BASE)); while(1) { ROM_I2CMasterSlaveAddrSet(I2C1_BASE, 0x68, false); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START); ROM_I2CMasterDataPut(I2C1_BASE, 0x00); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); while(ROM_I2CMasterBusy(I2C1_BASE)); ROM_I2CMasterSlaveAddrSet(I2C1_BASE, 0x68, true); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); while(ROM_I2CMasterBusy(I2C1_BASE)); sec = ROM_I2CMasterDataGet(I2C1_BASE); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); while(ROM_I2CMasterBusy(I2C1_BASE)); min = ROM_I2CMasterDataGet(I2C1_BASE); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); while(ROM_I2CMasterBusy(I2C1_BASE)); hour = ROM_I2CMasterDataGet(I2C1_BASE); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); while(ROM_I2CMasterBusy(I2C1_BASE)); ROM_I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_FIFO_BURST_RECEIVE_FINISH); } } int main(void) { //ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); ROM_SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); ROM_GPIOPinConfigure(GPIO_PA6_I2C1SCL); ROM_GPIOPinConfigure(GPIO_PA7_I2C1SDA); ROM_GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6); ROM_GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_7); //ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); //ROM_GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD); //ROM_GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_DIR_MODE_HW); //ROM_GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_7, GPIO_DIR_MODE_HW); ROM_I2CMasterInitExpClk(I2C1_BASE, ROM_SysCtlClockGet(), false); //ui32TPR = 0x01; //HWREG(I2C1_BASE+I2C_O_MTPR) = ui32TPR; Master_Transmit_Receive(); }