📄 main.c
字号:
/****************************************Copyright (c)***************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info--------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**-------------------------------------------------------------------------------------------------------
** Created by: Chen Mingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**-------------------------------------------------------------------------------------------------------
** Modified by: Li Baihua
** Modified date: 2008-04-07
** Version: 1.1
** Descriptions: SSP做主机、SPI做从机进行数据通信,将SSP发送的数据通过串口发送到PC机显示
**
*********************************************************************************************************/
# include "config.h"
# include "UART.h"
uint8 const uiBuf[8] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07};
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时
** input parameters: uiDly延时控制值,值越大,延时越长
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void DelayNS (uint32 uiDly)
{
uint32 i;
for(; uiDly > 0; uiDly--){
for(i = 0; i < 50000; i++);
}
}
/*********************************************************************************************************
** Function name: SPIInit
** Descriptions: 初始化SPI接口,设置为从机
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void SPIInit(void)
{
PINSEL0 = (PINSEL0 & 0xCFFF00FF) | 0x20005500; /* 设置SPI引脚连接 */
SPI_SPCCR = 0x52; /* 设置SPI时钟分频 */
SPI_SPCR = 0 << 3 | /* CPHA = 0第一个时钟采样 */
1 << 4 | /* CPOL = 1,SCK低有效 */
0 << 5 | /* MSTR = 0,设置为从模式 */
0 << 6 | /* LSBF = 0,SPI传输MSB在先 */
0 << 7 ; /* SPIE = 0,SPI中断禁止 */
}
/*********************************************************************************************************
** Function name: SSPIInit
** Descriptions: 初始化SSP接口,设置为主机
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void SSPIInit(void)
{
PINSEL1 = (PINSEL1 & 0xFFFFF00F) | 0x00000540; /* 设置SSP引脚连接 */
SSPCR0 = 0x07 << 0 | /* DSS 数据长度为8位 */
0x00 << 4 | /* FRF 格式:SPI */
0x01 << 6 | /* CPOL = 1,SCK低有效 */
0x00 << 7 | /* CPHA = 0, 第一个时钟采样 */
0x01 << 8 ; /* SCR 设置SPI时钟分频 */
SSPCR1 = 0 << 0 | /* LBM 回写模式 */
1 << 1 | /* SSE SSP使能 */
0 << 2 | /* MSTR = 0,设置为主机 */
0 << 3 ; /* SOD = 0, 从机输出允许 */
SSPCPSR = 0x52; /* 设置SSP时钟分频 */
SSPIMSC = 0x02; /* 使能接收超时中断 */
SSPICR = 0x03; /* 清除中断标志 */
}
/*********************************************************************************************************
** Function name: SPIRcvByte
** Descriptions: 从SPI总线接收1字节数据
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
uint8 SPIRcvByte (void)
{
while ((SPI_SPSR & 0x80) == 0); /* 等待数据接收完成 */
return (SPI_SPDR);
}
/*********************************************************************************************************
** Function name: SSPSendByte
** Descriptions: SSP接口向总线发送1字节数据
** input parameters: uiDat 待发送的数据
** output parameters: 无
** Returned value: 接收到的数据
*********************************************************************************************************/
uint8 SSPSendByte(uint8 uiDat)
{
SSPDR = uiDat;
while((SSPSR & 0x01) == 0); /* 等待TFE置位,即发送FIFO空 */
return(SSPDR);
}
/*********************************************************************************************************
** Function name: main
** Descriptions: SSP做主机、SPI做从机进行数据通信,并将SSP发送的数据通过串口发送到PC机显示
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main(void)
{
uint8 i;
uint8 j;
uint8 uiRcvData;
UARTInit();
SPIInit(); /* 初始化SPI接口 */
SSPIInit(); /* 初始化SSP接口 */
for(;;){
for ( i = 0; i < 8; i++){ /* SPI发送数据 */
SSPSendByte(uiBuf[i]);
DelayNS(20);
uiRcvData = SPIRcvByte(); /* SSP接收数据 */
DelayNS(10);
for ( j = 0; j < 8; j++){
PCDispChar (j, uiRcvData); /* 将SSP接收到的数据发送到PC机 */
}
DelayNS(50);
}
}
return 0;
}
/*********************************************************************************************************
** End Of File
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -