86 lines
2.4 KiB
C
86 lines
2.4 KiB
C
#include "BSPSpi.h"
|
|
|
|
#include <cpu.h>
|
|
#include <os.h>
|
|
#include <bsp_int.h>
|
|
#include <bsp_sys.h>
|
|
#include <lib_def.h>
|
|
#include <os_cpu.h>
|
|
|
|
#include "BSPSys.h"
|
|
|
|
#include "driverlib/sysctl.h"
|
|
#include "driverlib/gpio.h"
|
|
#include "driverlib/pin_map.h"
|
|
#include "driverlib/ssi.h"
|
|
#include "driverlib/interrupt.h"
|
|
|
|
#include "inc/hw_memmap.h"
|
|
#include "inc/hw_ssi.h"
|
|
#include "inc/hw_ints.h"
|
|
|
|
int8_t Bsp_SpiInit(uint8_t spi_id)
|
|
{
|
|
INT32U pui32DataRx;
|
|
switch (spi_id) {
|
|
case BSP_SPI3:
|
|
// 初始化GPIO口
|
|
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3);
|
|
SysCtlPeripheralEnable(SPI3_SYS_PERIPH_GPIO);
|
|
GPIOPinConfigure(SPI3_GPIO_CLK_CFG);
|
|
GPIOPinConfigure(SPI3_GPIO_FSS_CFG);
|
|
GPIOPinConfigure(SPI3_GPIO_RX_CFG);
|
|
GPIOPinConfigure(SPI3_GPIO_TX_CFG);
|
|
// 配置SPI初始化的参数
|
|
GPIOPinTypeSSI(SPI3_GPIO_BASE, SPI3_GPIO_CLK | SPI3_GPIO_FSS |
|
|
SPI3_GPIO_RX | SPI3_GPIO_TX );
|
|
SSIConfigSetExpClk(SSI3_BASE, BspGetSysClock(), SSI_FRF_MOTO_MODE_0,
|
|
SSI_MODE_MASTER, 1000000, 8);
|
|
// 使能SPI时钟总线
|
|
SSIEnable(SSI3_BASE);
|
|
while(SSIDataGetNonBlocking(SSI3_BASE, &pui32DataRx)); // 清除接收缓冲区
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
uint8_t Bsp_RWByte(uint8_t spi_id, uint8_t data)
|
|
{
|
|
uint32_t rec = 0;
|
|
CPU_SR_ALLOC();
|
|
OS_ENTER_CRITICAL();
|
|
switch (spi_id) {
|
|
case BSP_SPI3:
|
|
while(SSIDataGetNonBlocking(SSI3_BASE, &rec)); // 清除接收缓冲区
|
|
SSIDataPut(SSI3_BASE, data);
|
|
while (SSIBusy(SSI3_BASE));
|
|
SSIDataGet(SSI3_BASE, &rec);
|
|
break;
|
|
}
|
|
OS_EXIT_CRITICAL();
|
|
return (uint8_t)(rec & 0xff);
|
|
}
|
|
|
|
void Bsp_SpiSetSpeed(uint8_t spi_id, uint32_t Speed)
|
|
{
|
|
switch (spi_id) {
|
|
case BSP_SPI3:
|
|
SSIDisable(SSI3_BASE);
|
|
SSIConfigSetExpClk(SSI3_BASE, BspGetSysClock(),
|
|
SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER,
|
|
Speed, 8);
|
|
SSIEnable(SSI3_BASE);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Bsp_SpiCS(uint8_t spi_id, uint8_t value)
|
|
{
|
|
switch (spi_id) {
|
|
case BSP_SPI3:
|
|
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2,
|
|
value == 1 ? GPIO_PIN_2 : ~ GPIO_PIN_2); // 低电平运行,高电平停止
|
|
break;
|
|
}
|
|
}
|