📄 main.c
字号:
#define IN_MAIN
#include "config.h"
#include "SSP.h"
#include "SPI.h"
#include "UART.h"
#include "Enhance_GPIO.h"
#include "ISR.h"
#pragma import(__use_no_semihosting_swi) //don't delete this line
//定义SSP配置值
#define SSP_Type 0 //SPI通信格式
#define SSP_MODE 0 //从机
#define SSP_Fssp 0 //从机不关心通信速率
#define SSP_Int_En 4 //接收4帧数据时产生中断
//定义SPI配置值
#define SPI_MODE 1 //主机
#define SPI_Fspi 100000 //通信速率100K
#define SPI_INT_En 0 //中断禁止
//定义UART配置值
#define UARTn_n 0 //UART0
#define UARTn_baud 115200 //通信波特率为115200
#define UARTn_datab 8 //8位数据位
#define UARTn_stopb 1 //1位停止位
#define UARTn_parity 0 //无奇偶校验位
#define UARTn_Int_En 0 //中断禁止
#define SPI_CS (1<<7) //P0.7作为片选端口
uint8 RcvNew = 0;
/*********************************************************************************************************
** Function name: IRQ_Exception
**
** Descriptions: interrupt exceptional handler , change it as needed
** don't delete this function
********************************************************************************************************/
void IRQ_Exception(void)
{
}
/*********************************************************************************************************
** 函数名称:DelayNS()
** 函数功能:长软件延时
** 入口参数:dly 延时参数,值越大,延时越久
** 出口参数:无
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/*********************************************************************************************************
** 函数名称:IRQ_SSP()
** 函数功能:SSP中断服务程序。
** 入口参数:无
** 出口参数:无
********************************************************************************************************/
void IRQ_SSP(void)
{
uint8 tmp;
RcvNew = 1;
for(tmp = 0;tmp < 8;tmp++)
{
UARTn_SendByte(UARTn_n,SSPDR); //将接收到的数据发送到PC机上
}
SSPICR = 0x02; //清除超时中断
VICVectAddr = 0x00;
}
/*********************************************************************************************************
** 函数名称:Main()
** 函数功能:SSP作为SPI从机实验。主机为SPI接口,从机为SSP接口。主要检验SSP的FIFO。
** SPI接口发送‘1 2 3 4 5 6 7 8...’,并将SSP接收到的数据通过UART0发送到PC机上。
** 说明:P0.14连接P0.4、P0.19连接P0.5、P0.20连接P0.6、P0.21连接P0.7。
********************************************************************************************************/
void Main(void)
{
uint8 i = 1;
TargetInit(VPBDIV_DATA, PLLCFG_DATA, MAMTIM_DATA); // don't delete
while((PLLSTAT & (1 << 10)) == 0); // can delete
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
SSP_Init(SSP_Type,SSP_MODE,SSP_Fssp,SSP_Int_En); //SSP初始化为从机
SPI_Init(SPI_MODE,SPI_Fspi,SPI_INT_En); //SPI初始化为主机
//初始化UART
UARTn_Init(UARTn_n,UARTn_baud,UARTn_datab,UARTn_stopb,UARTn_parity,UARTn_Int_En);
P0_GPIOInit(SPI_CS,1); //SPI_CS初始化位GPIO输出模式
P0_GPIOSet(SPI_CS);
SetISR(SSP_INT,0, (uint32)IRQ_SSP); //设置SSP的IRQ中断
IRQEnable();
while(1)
{
for(;RcvNew == 0;i++) //发送数据,直到RcvNew = 1为止
{
P0_GPIOClr(SPI_CS);
SPI_SendByte(i);
P0_GPIOSet(SPI_CS);
}
RcvNew = 0;
DelayNS(500); //延时一段时间
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -