📄 io.c
字号:
/****************************************************************************
文件名:IO.c
功 能:IO口驱动文件
****************************************************************************/
#include "config.h"
/****************************************************************************
* 名称:IOInit()
* 功能:初始化SPI0及IO口,设置为主机。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void IOInit(void)
{
PINSEL0 |= 0x00005500; // 设置SPI0管脚连接
IO1DIR |=(ST|PS); // 设置ST与PS引脚为输出
S0SPCCR = 0x52; // 设置SPI0时钟分频
S0SPCR = 0x30; // 设置SPI0接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
}
/****************************************************************************
* 名称:SendoutputData()
* 功能:向SPI总线发送数据
* 入口参数:data 待发送的16位数据
* 出口参数:no
****************************************************************************/
void SendoutputData(uint16 data)
{
//uint16 result; // 临时变量
IO1CLR = ST; // 锁存595数据
S0SPDR = (data>>8); // 发送高8位
while( 0==(S0SPSR&0x80) ); // 等待SPIF置位,即等待数据发送完毕
S0SPDR = (data&0xff); // 发送低8位
while( 0==(S0SPSR&0x80) ); // 等待SPIF置位,即等待数据发送完毕
IO1SET = ST; // 595数据输出
}
/****************************************************************************
* 名称: RcvinputData()
* 功能:向SPI总线发送数据,并接收从机发回的数据。
* 入口参数:data I/O输出值
* 出口参数:返回值为接收到的16位数据
****************************************************************************/
uint16 RcvinputData(uint16 data)
{
uint16 result; // 临时变量
IO1CLR = ST; // 595数据输出
IO1SET = PS; // 将4021的数据锁入锁存器
IO1CLR = PS;
S0SPDR = (data>>8); // 发送高8位
while( 0==(S0SPSR&0x80) ); // 等待SPIF置位,即等待数据发送完毕
//DelayNS(10);
result=S0SPDR; // 得到输入的高8位数据
result=(result<<8); // 移入高8位
S0SPDR = (data&0xff); // 发送低8位
while( 0==(S0SPSR&0x80) ); // 等待SPIF置位,即等待数据发送完毕
//DelayNS(10);
result|=S0SPDR; // 放入低8位
IO1SET = ST; // 595数据输出
return(result); // 返回输入的16位数据
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -