This commit is contained in:
Steven Dan
2025-12-11 09:43:42 +08:00
commit d8b2974133
1822 changed files with 280037 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
// Copyright 2018-2021 XMOS LIMITED.
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
/* A simple application example used for code snippets in the library
* documentation.
*/
#include <xs1.h>
#include <stdio.h>
#include "i2c.h"
void my_application(client i2c_master_async_if i2c, uint8_t target_device_addr);
void my_application_handle_bus_error(i2c_res_t result);
void my_application_fill_buffer(uint8_t buffer[]);
// I2C interface ports
port p_scl = XS1_PORT_1E;
port p_sda = XS1_PORT_1F;
#define BUFFER_BYTES 100
int main(void) {
i2c_master_async_if i2c[1];
static const uint8_t target_device_addr = 0x3c;
par {
i2c_master_async(i2c, 1, p_scl, p_sda, 100, BUFFER_BYTES);
my_application(i2c[0], target_device_addr);
}
return 0;
}
void my_application(client i2c_master_async_if i2c, uint8_t target_device_addr) {
uint8_t buffer[BUFFER_BYTES];
// Create and send initial block of data
my_application_fill_buffer(buffer);
i2c.write(target_device_addr, buffer, BUFFER_BYTES, 1);
// Start computing the next block of data
my_application_fill_buffer(buffer);
while (1) {
select {
case i2c.operation_complete():
size_t num_bytes_sent;
i2c_res_t result = i2c.get_write_result(num_bytes_sent);
if (num_bytes_sent != BUFFER_BYTES) {
my_application_handle_bus_error(result);
}
// Offload the next data bytes to be sent
i2c.write(target_device_addr, buffer, BUFFER_BYTES, 1);
// Compute the next block of data
my_application_fill_buffer(buffer);
break;
}
}
}
void my_application_handle_bus_error(i2c_res_t result) {
// Ignore for now
}
void my_application_fill_buffer(uint8_t buffer[]) {
static int offset = 0;
for (int i = 0; i < BUFFER_BYTES; ++i) {
buffer[i] = i + offset;
}
offset += 1;
}
// end