#include "xparameters.h" #include "xil_cache.h" #include "xil_printf.h" #include "xil_io.h" #include #include "sleep.h" #include "xil_types.h" #include "xstatus.h" #include "xil_exception.h" #include "xscugic.h" #include "xuartps.h" #include "xiicps.h" #define PMOD_TMP3_BASEADDR 0x40000000 // PMOD TMP3 base address #define PMOD_TMP3_IIC_ADDR 0x4B // PMOD TMP3 I2C address int main() { // Initialize I2C XIicPs_Config *i2c_config; XIicPs i2c_instance; i2c_config = XIicPs_LookupConfig(XPAR_XIICPS_0_DEVICE_ID); XIicPs_CfgInitialize(&i2c_instance, i2c_config, i2c_config->BaseAddress); XIicPs_SetSClk(&i2c_instance, XPAR_XIICPS_0_I2C_CLK_FREQ_HZ); // Set up PMOD TMP3 I2C u8 write_buf[1] = {0x01}; // write configuration XIicPs_MasterSendPolled(&i2c_instance, write_buf, 1, PMOD_TMP3_IIC_ADDR); u8 read_buf[2] = {0x00}; // read configuration XIicPs_MasterRecvPolled(&i2c_instance, read_buf, 2, PMOD_TMP3_IIC_ADDR); // Read temperature from PMOD TMP3 u16 raw_temp = 0; float temp = 0.0; while (1) { // Read raw temperature write_buf[0] = 0x00; // write address of temperature register XIicPs_MasterSendPolled(&i2c_instance, write_buf, 1, PMOD_TMP3_IIC_ADDR); XIicPs_MasterRecvPolled(&i2c_instance, (u8*)&raw_temp, 2, PMOD_TMP3_IIC_ADDR); raw_temp = (raw_temp >> 8) | (raw_temp << 8); // swap bytes (MSB first) // Convert to temperature (°C) temp = ((float)raw_temp / 256.0) - 273.15; // Print temperature printf("Temperature: %.2f°C\n", temp); // Wait for 1 second sleep(1); } return 0; }