TLE5012B  3.1.0
The TLE5012B is a pre-calibrated 360° angle sensor that detects the orientation of a magnetic field. The raw signals (sine and cosine) are digitally processed internally to calculate the angle orientation of the magnetic field (magnet).
spi3w-ino.hpp
Go to the documentation of this file.
1 /*
2  * @file spi3w-ino.hpp
3  * @brief TLE5012 Arduino SPIClass extension
4  * @date October 2020
5  * @copyright Copyright (c) 2019-2020 Infineon Technologies AG
6  *
7  * SPDX-License-Identifier: MIT
8  */
9 #include "../../../config/tle5012-conf.hpp"
10 
11 #if (TLE5012_FRAMEWORK == TLE5012_FRMWK_ARDUINO)
12 
13 #include "Arduino.h"
14 #include "SPI.h"
15 #include "Wire.h"
16 
33 #ifndef SPI3W_INO_HPP
34 #define SPI3W_INO_HPP
35 
36 #define SPI3W_ARD 1
37 #define SPI3W_XMC 2
38 
39 #define MAX_SLAVE_NUM 4
40 #define SPEED 1000000U
41 
42 class SPIClass3W : public SPIClass
43 {
44 
45  public:
46  #if defined(UC_FAMILY) && (UC_FAMILY == 1 || UC_FAMILY == 4)
47  #define SPI3W_INO SPI3W_XMC
48  #else
49  #define SPI3W_INO SPI3W_ARD
50  #endif
51 
52 
53  uint8_t mCS;
54  uint8_t mSpiNum;
55 
56  SPIClass3W();
57  ~SPIClass3W();
58  void begin(uint8_t miso, uint8_t mosi, uint8_t sck, uint8_t cs);
59  void setCSPin(uint8_t cs);
60  void sendReceiveSpi(uint16_t* sent_data, uint16_t size_of_sent_data, uint16_t* received_data, uint16_t size_of_received_data);
61 
62  private:
63 
64  uint8_t mMOSI;
65  uint8_t mMISO;
66  uint8_t mSCK;
67 
68 
69  #if defined(UC_FAMILY) && (UC_FAMILY == 1 || UC_FAMILY == 4)
74  typedef struct
75  {
76  XMC_USIC_CH_t* channel;
77  XMC_SPI_CH_CONFIG_t channel_config;
78  XMC_PORT_PIN_t mosi;
79  XMC_GPIO_CONFIG_t mosi_open;
80  XMC_GPIO_CONFIG_t mosi_close;
81  XMC_PORT_PIN_t miso;
82  XMC_GPIO_CONFIG_t miso_open;
83  XMC_GPIO_CONFIG_t miso_close;
84  XMC_USIC_INPUT_t input_source;
85  XMC_PORT_PIN_t sck;
86  XMC_GPIO_CONFIG_t sck_config;
87  XMC_PORT_PIN_t cs;
88  XMC_GPIO_CONFIG_t cs_config;
89  } XMC_3W_SPI_t;
90 
91  XMC_3W_SPI_t m3Wire;
92 
93  void setupSPI();
94  void initSpi();
95  #endif
96 };
97 
102 extern SPIClass3W SPI3W;
103 #if (NUM_SPI > 1)
104  extern SPIClass3W SPI3W1;
105 # if (NUM_SPI > 2)
106  extern SPIClass3W SPI3W2;
107 # if (NUM_SPI > 3)
108  extern SPIClass3W SPI3W3;
109 # if (NUM_SPI > 4)
110  extern SPIClass3W SPI3W4;
111 # endif
112 # endif
113 # endif
114 #endif
115 
118 #endif /* SPI3W_INO_HPP */
119 #endif /* TLE5012_FRAMEWORK */
uint8_t mCS
Pin for chip select.
Definition: spi3w-ino.hpp:53
uint8_t mSpiNum
Number of used SPI channel.
Definition: spi3w-ino.hpp:54
Definition: spi3w-ino.hpp:43
void sendReceiveSpi(uint16_t *sent_data, uint16_t size_of_sent_data, uint16_t *received_data, uint16_t size_of_received_data)
Main SPI three wire communication functions for sending and receiving data.
Definition: spi3w-ard.cpp:82
SPIClass3W SPI3W
define a new SPI3W macro for handling more than the default SPI channel
void setCSPin(uint8_t cs)
Set the chipselect pin. This function is needed if more than one sensor is in the SPI bus.
Definition: spi3w-ard.cpp:69
void begin(uint8_t miso, uint8_t mosi, uint8_t sck, uint8_t cs)
New for fetching SPI parameter.
Definition: spi3w-ard.cpp:52
~SPIClass3W()
Destroy the SPIClass3W::SPIClass3W object.
Definition: spi3w-ard.cpp:40
SPIClass3W()
Construct a new SPIClass3W::SPIClass3W object.
Definition: spi3w-ard.cpp:27