Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: arduino/ArduinoCore-zephyr
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 1036efa58c163b47810dd31d08aaa30edb25b5b4
Choose a base ref
..
head repository: arduino/ArduinoCore-zephyr
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: e653548709ed2d97f68b9cff64cf4778285e4b4f
Choose a head ref
Showing with 21 additions and 19 deletions.
  1. +1 −0 cores/arduino/Arduino.h
  2. +7 −0 cores/arduino/time_macros.h
  3. +11 −18 libraries/SPI/SPI.cpp
  4. +2 −1 libraries/SPI/SPI.h
1 change: 1 addition & 0 deletions cores/arduino/Arduino.h
Original file line number Diff line number Diff line change
@@ -118,6 +118,7 @@ int digitalPinToInterrupt(pin_size_t pin);
#include <zephyrSerial.h>
#include <strings.h>
#include <api/itoa.h>
#include <time_macros.h>

// Allow namespace-less operations if Arduino.h is included
using namespace arduino;
7 changes: 7 additions & 0 deletions cores/arduino/time_macros.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once

#include <zephyr/sys/time_units.h>

#define clockCyclesPerMicrosecond() (1000000 / k_cyc_to_ns_near64(1000))
#define clockCyclesToMicroseconds(a) (a / clockCyclesPerMicrosecond())
#define microsecondsToClockCycles(a) (a * clockCyclesPerMicrosecond())
29 changes: 11 additions & 18 deletions libraries/SPI/SPI.cpp
Original file line number Diff line number Diff line change
@@ -8,9 +8,7 @@
#include "zephyrInternal.h"
#include <zephyr/kernel.h>

arduino::ZephyrSPI::ZephyrSPI(const struct device *spi) : spi_dev(spi) {
memset(&config, 0, sizeof(config));
}
arduino::ZephyrSPI::ZephyrSPI(const struct device *spi) : spi_dev(spi) {}

uint8_t arduino::ZephyrSPI::transfer(uint8_t data) {
int ret;
@@ -26,10 +24,6 @@ uint8_t arduino::ZephyrSPI::transfer(uint8_t data) {
.count = 1,
};

if (config.frequency == 0) {
beginTransaction(DEFAULT_SPI_SETTINGS);
}

ret = spi_transceive(spi_dev, &config, &tx_buf_set, &rx_buf_set);
if (ret < 0) {
return 0;
@@ -52,11 +46,7 @@ uint16_t arduino::ZephyrSPI::transfer16(uint16_t data) {
.count = 1,
};

if (config.frequency == 0) {
beginTransaction(DEFAULT_SPI_SETTINGS);
}

ret = spi_transceive(spi_dev, &config, &tx_buf_set, &rx_buf_set);
ret = spi_transceive(spi_dev, &config16, &tx_buf_set, &rx_buf_set);
if (ret < 0) {
return 0;
}
@@ -65,7 +55,7 @@ uint16_t arduino::ZephyrSPI::transfer16(uint16_t data) {
}

void arduino::ZephyrSPI::transfer(void *buf, size_t count) {

int ret;
const struct spi_buf tx_buf = {.buf = buf, .len = count};
const struct spi_buf_set tx_buf_set = {
.buffers = &tx_buf,
@@ -79,10 +69,6 @@ void arduino::ZephyrSPI::transfer(void *buf, size_t count) {
.count = 1,
};

if (config.frequency == 0) {
beginTransaction(DEFAULT_SPI_SETTINGS);
}

spi_transceive(spi_dev, &config, &tx_buf_set, &rx_buf_set);
memcpy(buf, rx, count);
}
@@ -99,7 +85,10 @@ void arduino::ZephyrSPI::notUsingInterrupt(int interruptNumber) {

void arduino::ZephyrSPI::beginTransaction(SPISettings settings) {
memset(&config, 0, sizeof(config));
memset(&config16, 0, sizeof(config16));
config.frequency = settings.getClockFreq() > SPI_MIN_CLOCK_FEQUENCY ? settings.getClockFreq() : SPI_MIN_CLOCK_FEQUENCY;
config16.frequency = config.frequency;

auto mode = SPI_MODE_CPOL | SPI_MODE_CPHA;
switch (settings.getDataMode()) {
case SPI_MODE0:
@@ -112,6 +101,7 @@ void arduino::ZephyrSPI::beginTransaction(SPISettings settings) {
mode = SPI_MODE_CPOL | SPI_MODE_CPHA; break;
}
config.operation = SPI_WORD_SET(8) | (settings.getBitOrder() == MSBFIRST ? SPI_TRANSFER_MSB : SPI_TRANSFER_LSB) | mode;
config16.operation = SPI_WORD_SET(16) | (settings.getBitOrder() == MSBFIRST ? SPI_TRANSFER_MSB : SPI_TRANSFER_LSB) | mode;
}

void arduino::ZephyrSPI::endTransaction(void) {
@@ -123,7 +113,10 @@ void arduino::ZephyrSPI::attachInterrupt() {}
void arduino::ZephyrSPI::detachInterrupt() {}


void arduino::ZephyrSPI::begin() {}
void arduino::ZephyrSPI::begin() {
beginTransaction(SPISettings());
endTransaction();
}

void arduino::ZephyrSPI::end() {}

3 changes: 2 additions & 1 deletion libraries/SPI/SPI.h
Original file line number Diff line number Diff line change
@@ -50,9 +50,10 @@ class ZephyrSPI : public HardwareSPI {
virtual void begin();
virtual void end();

private:
protected:
const struct device *spi_dev;
struct spi_config config;
struct spi_config config16;
int interrupt[INTERRUPT_COUNT];
size_t interrupt_pos = 0;
};