You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1004 B
C
61 lines
1004 B
C
3 weeks ago
|
#include "SWM221.h"
|
||
|
|
||
|
#define PIN_CS PIN2
|
||
|
#define PIN_CLK PIN3
|
||
|
#define PIN_MOSI PIN4
|
||
|
#define PIN_MISO PIN5
|
||
|
|
||
|
|
||
|
void IOSPI_Init(void) // Mode: 3
|
||
|
{
|
||
|
GPIO_Init(GPIOA, PIN_CS, 1, 0, 0, 0);
|
||
|
GPIO_Init(GPIOA, PIN_CLK, 1, 0, 0, 0);
|
||
|
GPIO_Init(GPIOA, PIN_MOSI, 1, 0, 0, 0);
|
||
|
GPIO_Init(GPIOA, PIN_MISO, 0, 1, 0, 0);
|
||
|
|
||
|
GPIO_SetBit(GPIOA, PIN_CS);
|
||
|
GPIO_SetBit(GPIOA, PIN_CLK);
|
||
|
}
|
||
|
|
||
|
void IOSPI_CS_Low(void)
|
||
|
{
|
||
|
GPIO_ClrBit(GPIOA, PIN_CS);
|
||
|
}
|
||
|
|
||
|
void IOSPI_CS_High(void)
|
||
|
{
|
||
|
GPIO_SetBit(GPIOA, PIN_CS);
|
||
|
}
|
||
|
|
||
|
static void delay(uint32_t us)
|
||
|
{
|
||
|
uint32_t i;
|
||
|
|
||
|
for(i = 0; i < CyclesPerUs / 4 * us; i++) __NOP();
|
||
|
}
|
||
|
|
||
|
uint32_t IOSPI_ReadWrite(uint32_t data, uint32_t len)
|
||
|
{
|
||
|
uint32_t i;
|
||
|
uint32_t recv = 0;
|
||
|
|
||
|
for(i = 0; i < len; i++)
|
||
|
{
|
||
|
GPIO_ClrBit(GPIOA, PIN_CLK);
|
||
|
if(data & (1 << (len - 1 - i)))
|
||
|
GPIO_SetBit(GPIOA, PIN_MOSI);
|
||
|
else
|
||
|
GPIO_ClrBit(GPIOA, PIN_MOSI);
|
||
|
|
||
|
delay(5);
|
||
|
|
||
|
GPIO_SetBit(GPIOA, PIN_CLK);
|
||
|
if(GPIO_GetBit(GPIOA, PIN_MISO))
|
||
|
recv |= (1 << (len - 1 - i));
|
||
|
|
||
|
delay(5);
|
||
|
}
|
||
|
|
||
|
return recv;
|
||
|
}
|