//============================================================================//
//============================================================================//
#include "N76E003.h"
#include "Global.h"
#include "SPI.h"
#include "Timer.h"
#define SPI_SPEED_8M 0
#define SPI_SPEED_4M 1
#define SPI_SPEED_2M 2
#define SPI_SPEED_1M 3
#define SPI_CLOCK SPI_SPEED_4M
//***************************************//
// SPI 初始化
//***************************************//
void SPI_init(void)
{
P15_Quasi_Mode; // P15 (SS) Quasi mode
P10_Quasi_Mode; // P10(SPCLK) Quasi mode
P00_Quasi_Mode; // P00 (MOSI) Quasi mode
P01_Quasi_Mode; // P22 (MISO) Quasi mode
SPI_CLK = 0;
/***************************************/
#if SPI_CLOCK == SPI_SPEED_8M
clr_SPR1;
clr_SPR0;
#elif SPI_CLOCK == SPI_SPEED_4M
clr_SPR1;
set_SPR0;
#elif SPI_CLOCK == SPI_SPEED_2M
set_SPR1;
clr_SPR0;
#elif SPI_CLOCK == SPI_SPEED_1M
set_SPR1;
set_SPR0;
#endif
/* /SS General purpose I/O ( No Mode Fault ) */
set_DISMODF;
clr_SSOE;
/* SPI in Master mode */
set_MSTR;
/* MSB first */
clr_LSBFE;
clr_CPOL;
clr_CPHA;
/* Enable SPI function */
set_SPIEN;
/***************************************/
}
//***************************************//
// SPI 读写
//***************************************//
uint8_t SPI_RW(uint8_t value)
{
/*******************************************/
// 软件spi
/*******************************************/
// uint8_t i;
// for(i = 0; i < 8; i++)
// {
// SPI_CLK = 0;
// if(value & 0x80)
// {
// SPI_MOSI = 1;
// }
// else
// {
// SPI_MOSI = 0;
// }
// value <<= 1;
// SPI_CLK = 1;
// if(SPI_MISO)
// {
// value |= 0x01;
// }
// }
// SPI_CLK = 0;
/*******************************************/
// 硬件spi
/*******************************************/
SPDR = value;
while(!(SPSR&0x80));
value = SPDR;
clr_SPIF;
/*******************************************/
return value;
}
//
评论1