Solution

Solution to the assignment.

Q1

See P3T1755 paragraph 7.5.

  • T_LOW = 0x4B00 = 75 degrees Celsius
  • T_HIGH = 0x5000 = 80 degrees Celsius

p3t1755_interrupt.h

#ifndef P3T1755_H
#define P3T1755_H

#include <MCXA153.h>

void p3t1755_init(void);
void p3t1755_set_configuration_reg(uint8_t val);
uint8_t p3t1755_get_configuration_reg(void);
float p3t1755_get_temperature(void);

uint16_t p3t1755_get_t_low(void);
uint16_t p3t1755_get_t_high(void);

#endif // P3T1755_H

p3t1755_interrupt.c

uint16_t p3t1755_get_t_low(void)
{
    uint8_t data[2] = {0};

    // Device address: 0b1001000 (P3T1755)
    // Pointer byte: 0b00000010 (T_LOW register)
    lpi2c0_read(0b1001000, 0b00000010, data, 2);

    // Wait until the reading is finished
    while(!lpi2c0_read_done())
    {}

    return ((uint16_t)(data[0]) << 8) | data[1];
}

uint16_t p3t1755_get_t_high(void)
{
    uint8_t data[2] = {0};

    // Device address: 0b1001000 (P3T1755)
    // Pointer byte: 0b00000011 (T_HIGH register)
    lpi2c0_read(0b1001000, 0b00000011, data, 2);

    // Wait until the reading is finished
    while(!lpi2c0_read_done())
    {}

    return ((uint16_t)(data[0]) << 8) | data[1];
}

Timing diagrams

I2C t_low

I2C t_high