📄 spi.c
字号:
/*************************************** Copyright (c) *************************************************
*
* 力天电子
* http://www.LT430.com
*
* 文 件 名: SPIDisp.C
* 文件描述:使用硬件SPI接口输出显示。(硬件:74HC595输出控制数码管SMG1、SMG2显示)
*
* 说 明:分别将跳线器JP7的中间管脚与SCK、MISO、MOSI、CS短接;
*
********************************************************************************************************/
#include "config.h"
#include "sd.h"
#define SPI_CS 1<<18 /*片选*/
/********************************************************************************************************
*
* 函数名称:Delay(uint32 count)
*
* 功能描述:软件延时。
*
* 入口参数:count
* 出口参数:无
*
* 全局变量: 无
* 调用模块: 无
*
********************************************************************************************************/
void Delay(uint32 count)
{
uint32 tmp;
for(; count>0; count--)
for(tmp=0; tmp<50000; tmp++);
}
/********************************************************************************************************
*
* 函数名称:MasterSpiInit()
*
* 功能描述:初始化SPI接口,设置为主机。
*
* 入口参数:无
* 出口参数:无
*
* 全局变量: 无
* 调用模块: 无
*
********************************************************************************************************/
void MasterSpiInit(void)
{
//PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; // 设置管脚连接SPI
//PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x15 << 8) ; // SSEL0当作595片选
S0SPCCR = 0x52; // 设置SPI时钟分频
S0SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样
(1 << 4) | // CPOL = 1, SCK 为低有效
(1 << 5) | // MSTR = 1, SPI 处于主模式
(0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先
(0 << 7); // SPIE = 0, SPI 中断被禁止
}
/********************************************************************************************************
*
* 函数名称:MasterSendData()
*
* 功能描述:向SPI总线发送数据。
*
* 入口参数:无
* 出口参数:无
*
* 全局变量: 无
* 调用模块: 无
*
********************************************************************************************************/
uint8 MasterSendData(uint8 data)
{
//IOCLR |= SPI_CS; // 片选
S0SPDR = data;
while(0 == (S0SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕
//IOSET = SPI_CS;
return(S0SPDR);
}
void Write_Byte_SPI(unsigned char byte)
{
MasterSendData(byte);
//delay_nus(20);
}
unsigned char Read_Byte_SPI(void)
{
return(MasterSendData(0xff));
//delay_nus(20);
}
/********************************************************************************************************
*
* 函数名称:Init_Port()
*
* 功能描述:初始化
*
* 入口参数:无
* 出口参数:无
*
* 说 明:
*
********************************************************************************************************/
void Init_SPI(void)
{
PINSEL0 |= 0x00001500; // 设置SPI管脚连接-SSEL0当作595片选,故不作SPI管脚
PINSEL1 |= 0x00000000;
IODIR |= SPI_CS;
IOSET |= SPI_CS;
MasterSpiInit(); // 初始化SPI接口
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -