📄 ssp.c
字号:
#include "SSP.H"
uchar T_data[34];
uchar R_data[34];
void SPI_init(void);
UINT SPI_SendData(uchar *T_data, uchar *R_data, uchar No);
void SSP_init(void);
UINT SSP_SendData(uchar *T_data, uchar *R_data, uchar No);
void SPI_init(void)
{
PINSEL0 &= 0xFFFF00FF;
PINSEL0 |= 0x00001500;
IO0DIR |= SLAVE0_CS;
IO0SET = SLAVE0_CS;
S0SPCR = S0SPCR_val;
S0SPCCR = S0SPCCR_val;
}
UINT SPI_SendData(uchar *T_data, uchar *R_data, uchar No)
{
UINT i;
IO0CLR = SLAVE0_CS;
for ( i = 0; i < No; i++ )
{
S0SPDR = T_data[i];
while ((S0SPSR & 0x80) == 0);
R_data[i] = S0SPDR; /* Flush the RxFIFO */
}
IO0SET = SLAVE0_CS;
return 1;
}
void SSP_init(void)
{
PINSEL1 = (PINSEL1 & (~(0xFF << 2))) | (0xAA << 2) ;
IO0DIR |= SLAVE_CS;
IO0SET = SLAVE_CS;
SSPCR0 = SSPCR0_val;
SSPCR1 = SSPCR1_val;
SSPCPSR = SSPCPSR_val; // PCLK分频值
// SSPIMSC = 0x07; // 中断屏蔽寄存器
SSPICR = 0x03; // 中断清除寄存器,清除所有的中断状态
}
/*
UINT SLAVE_CS, UINT *T_data, UINT *R_data, UINT No
从机片选,发送数据地址,接受数据地址,数据个数
发送,接收数据位数由初始化程序决定(<=16,>=4),数据个数<8
*/
UINT SSP_SendData(uchar *T_data, uchar *R_data, uchar No)
{
UINT i;
while ((SSPSR & 0x10) != 0); // 等待BSY置0,即空闲
while ((SSPSR & 0x04) != 0) // 清空接收缓冲区
i = SSPDR;
IO0CLR = SLAVE_CS; // 选择从机
for (i=0; i<No; i++)
{
SSPDR = T_data[i];
while((SSPSR & 0x10) != 0); // 等待TFE置位,即发送FIFO空
R_data[i] = SSPDR;
}
IO0SET = SLAVE_CS;
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -