?? 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 + -