Professional Documents
Culture Documents
#include <DAVE.h>
#include "xmc_gpio.h"
#include "xmc_scu.h"
#include "xmc_i2c.h"
XMC_SCU_CLOCK_CONFIG_t clock_config =
{
.pclk_src = XMC_SCU_CLOCK_PCLKSRC_DOUBLE_MCLK, /*PCLK = 2*MCLK*/
.rtc_src = XMC_SCU_CLOCK_RTCCLKSRC_DCO2,
.fdiv = 0, /**< Fractional divider */
.idiv = 4, /**MCLK = 8MHz */
};
XMC_GPIO_CONFIG_t gpio_output_config =
{
.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH,
};
XMC_GPIO_CONFIG_t gpio_scl_config =
{
.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT6,
.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH,
};
XMC_GPIO_CONFIG_t gpio_sda_config =
{
.mode = XMC_GPIO_MODE_OUTPUT_OPEN_DRAIN_ALT7,
.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH,
};
void SysTick_Handler(void)
{
static uint32_t ticks = 0;
ticks++;
if (ticks == TICKS_WAIT)
{
//XMC_GPIO_ToggleOutput(LED1);
//XMC_GPIO_ToggleOutput(LED2);
//XMC_GPIO_ToggleOutput(LED3);
//XMC_GPIO_ToggleOutput(LED4);
//XMC_GPIO_ToggleOutput(LED5);
//XMC_GPIO_ToggleOutput(LED6);
ticks = 0;
}
}
XMC_I2C_CH_CONFIG_t i2c_config = {
.baudrate = 100000//,
//.address = 0x40
};
int main(void)
{
/* Ensure clock frequency is set at 8MHz (MCLK) */
XMC_SCU_CLOCK_Init(&clock_config);
XMC_GPIO_Init(P0_7, &gpio_scl_config);
XMC_GPIO_Init(P1_0, &gpio_sda_config);
XMC_I2C_CH_MasterRepeatedStart(i2c_channel, SENSOR_ADDRESS,
XMC_I2C_CH_CMD_READ);
while((XMC_I2C_CH_GetStatusFlag(i2c_channel) &
XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)== 0U)
{}
XMC_I2C_CH_ClearStatusFlag(i2c_channel, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
// MSB
XMC_I2C_CH_MasterReceiveAck(i2c_channel);
while((XMC_I2C_CH_GetStatusFlag(i2c_channel) &
(XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) == 0U)
{}
XMC_I2C_CH_ClearStatusFlag(i2c_channel,
XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION);
// LSB + status
XMC_I2C_CH_MasterReceiveAck(i2c_channel);
while((XMC_I2C_CH_GetStatusFlag(i2c_channel) &
(XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) == 0U)
{}
XMC_I2C_CH_ClearStatusFlag(i2c_channel,
XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION);
received_data[1] = XMC_I2C_CH_GetReceivedData(i2c_channel);
// Checksum
XMC_I2C_CH_MasterReceiveNack(i2c_channel);
while((XMC_I2C_CH_GetStatusFlag(i2c_channel) &
(XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) == 0U)
{}
XMC_I2C_CH_ClearStatusFlag(i2c_channel,
XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION);
received_data[2] = XMC_I2C_CH_GetReceivedData(i2c_channel);
XMC_I2C_CH_MasterStop(i2c_channel);
//
/* Initialise P0.0 as an output pin */
XMC_GPIO_Init(LED1, &gpio_output_config);
XMC_GPIO_Init(LED2, &gpio_output_config);
XMC_GPIO_Init(LED3, &gpio_output_config);
XMC_GPIO_Init(LED4, &gpio_output_config);
XMC_GPIO_Init(LED5, &gpio_output_config);
XMC_GPIO_Init(LED6, &gpio_output_config);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_0);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_0);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_1);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_1);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_2);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_2);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_3);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_3);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_4);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_4);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_5);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_5);
for(i=0;i<0x3FFFF;++i);
}
else
{
int i;
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_0);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_5);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputLow (&DIGITAL_IO_5);
for(i=0;i<0x3FFFF;++i);
DIGITAL_IO_SetOutputHigh (&DIGITAL_IO_0);
for(i=0;i<0x3FFFF;++i);
}
}
}