8 #include "RtosInclude.hpp"
10 DrvSpi* DrvSpi::sInstances[2];
16 void DrvSpi::init(DrvTypes::SPI port, DrvGpio* cs,
int baudrate,
bool invertPhase,
bool invertPolarity) {
22 case DrvTypes::DRV_SPI1:
26 case DrvTypes::DRV_SPI2:
34 sInstances[port - 1] =
this;
36 NVIC ->IP[irqType] = RTOS_INT_PRI;
37 NVIC_EnableIRQ(irqType);
38 setBaudrate(baudrate);
39 mSpi->CR2 = SPI_CR2_RXNEIE;
40 mSpi->CR1 |= SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM;
42 mSpi->CR1 |= SPI_CR1_CPHA;
45 mSpi->CR1 |= SPI_CR1_CPOL;
47 mSpi->CR1 |= SPI_CR1_SPE;
50 void DrvSpi::setBaudrate(
int baudrate) {
53 clk = DRV_CFG_PCLK2_FREQ;
56 clk = DRV_CFG_PCLK1_FREQ;
59 while (baudrate <= clk) {
63 mSpi->CR1 &= ~(7 << 3);
64 mSpi->CR1 |= ((br & 7) << 3);
67 void DrvSpi::select() {
71 void DrvSpi::deselect() {
75 uint8_t DrvSpi::readWrite(
const uint8_t value) {
81 void DrvSpi::readWrite(
const uint8_t* src,
int srcLen, uint8_t* dst,
int dstLen) {
82 int bigger = (srcLen > dstLen) ? srcLen : dstLen;
84 for (
int i = 0; i < bigger; i++) {
86 value = readWrite(src[i]);
89 value = readWrite(0xFF);
97 void DrvSpi::onInterrupt() {
102 void RtosInterrupt::IRQ_SPI1() {
103 DrvSpi::sInstances[0]->onInterrupt();
106 void RtosInterrupt::IRQ_SPI2() {
107 DrvSpi::sInstances[1]->onInterrupt();