#include </home/pi/Desktop/libraries/library_ad5761r_dac_1.c>
/* extern double func(double a); */
void write_read_dac_1_Start_wrapper(real_T *xD)
* Custom Start code goes here.
void write_read_dac_1_Outputs_wrapper(const uint16_T *u0,
int fd_dac_1 = open(DEVICE_dac_1, O_RDWR);
write_and_update_dac_register_dac_1(fd_dac_1,u0[0]);
void write_read_dac_1_Update_wrapper(const uint16_T *u0,
int fd_dac_init_1 = open(DEVICE_dac_1, O_RDWR);
software_full_reset_dac_1(fd_dac_init_1);
write_control_register_dac_1(fd_dac_init_1);
if(read_control_register_dac_1(fd_dac_init_1) == 0) {
printf("DAC1 erfoglreich konfiguriert \n");
void write_read_dac_1_Terminate_wrapper(real_T *xD)
int fd_dac_terminate_1 = open(DEVICE_dac_1, O_RDWR);
software_full_reset_dac_1(fd_dac_terminate_1);
close(fd_dac_terminate_1);
/* Library ad5671r DAC1*/
#include <linux/spi/spidev.h>
#define ARRAY_SIZE(array) sizeof(array) / sizeof(array[0])
// Parameter ad5761r == DAC1
static const char *DEVICE_dac_1 = "/dev/spidev0.1";
static uint8_t MODE_dac_1 = SPI_MODE_1;
static uint8_t BITS_dac_1 = 8;
static uint32_t CLOCK_dac_1 = 1000000;
static uint16_t DELAY_dac_1 = 5;
// funktionen ad5761r == DAC1
int32_t software_full_reset_dac_1(int fd) {
uint8_t tx_dac_1[] ={175,0,1} ;
struct spi_ioc_transfer tr_dac_1 = {
.tx_buf = (unsigned long)tx_dac_1,
.rx_buf = (unsigned long)rx_dac_1,
.len = ARRAY_SIZE(tx_dac_1),
.delay_usecs = DELAY_dac_1,
.bits_per_word = BITS_dac_1,
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr_dac_1);
printf("%s: Can't reset dac1\n\r", __func__);
/*Write_Control_register == Ground lösen und Einstellungen setzen*/
int32_t write_control_register_dac_1(int fd) {
uint8_t tx_dac_1[] = {164, 2, 104};
struct spi_ioc_transfer tr_dac_1 = {
.tx_buf = (unsigned long)tx_dac_1,
.rx_buf = (unsigned long)rx_dac_1,
.len = ARRAY_SIZE(tx_dac_1),
.delay_usecs = DELAY_dac_1,
.bits_per_word = BITS_dac_1,
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr_dac_1);
printf("%s: Can't send spi message\n\r", __func__);
/*Write/Update DAC-Register == Spannungsausgabe definieren*/
int32_t write_and_update_dac_register_dac_1(int fd, uint16_t dac_data) {
tx_dac_1[1] = (dac_data & 0xFF00) >> 8;
tx_dac_1[2] = (dac_data & 0x00FF) >> 0;
struct spi_ioc_transfer tr_dac_1 = {
.tx_buf = (unsigned long)tx_dac_1,
.rx_buf = (unsigned long)rx_dac_1,
.len = ARRAY_SIZE(tx_dac_1),
.delay_usecs = DELAY_dac_1,
.bits_per_word = BITS_dac_1,
int32_t ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr_dac_1);
int32_t read_control_register_dac_1(int fd) {
uint8_t tx_dac_1[] = {12, 2, 104};
struct spi_ioc_transfer tr_dac_1 = {
.tx_buf = (unsigned long)tx_dac_1,
.rx_buf = (unsigned long)rx_dac_1,
.len = ARRAY_SIZE(tx_dac_1),
.delay_usecs = DELAY_dac_1,
.bits_per_word = BITS_dac_1,
if (ioctl(fd, SPI_IOC_MESSAGE(1), &tr_dac_1) == 1) {
uint8_t tx_dac_1_1[] ={0, 1, 1};
struct spi_ioc_transfer tr_dac_1_1 = {
.tx_buf = (unsigned long)tx_dac_1_1,
.rx_buf = (unsigned long)rx_dac_1_1,
.len = ARRAY_SIZE(tx_dac_1_1),
.delay_usecs = DELAY_dac_1,
.bits_per_word = BITS_dac_1,