/*******************************************************************
* Copyright (c) 2011, HXGROUP
* All rights reserved.
*
* 文件名称:spiSoft.c
* 摘 要: spi接口通讯程序
*
* 应用系统:
*
* 版本号: 1.0 作者:zwk
*完成日期:2011.02.16
****************************************************************/
#include "..\Include\macro.h"
//-------------------------------------------------------//
// SPI 接口示意说明
//-------------------------------------------------------//
// MCU ------------- SPI接口器件
// SPI_DI <------------ DO
// SPI_DO ------------> DI
// SPI_CLK ------------> CLK
//-------------------------------------------------------//
//DO PORT-RC5
//DI PORT-RC4
//CLK PORT-RC3
//-------------------------------------------------------//
// soft spi port define
//-------------------------------------------------------//
#define SPI_DI_IN PORTCbits.RC4
#define SPI_DO_OUT LATCbits.LATC5
#define SPI_CLK_OUT LATCbits.LATC3
#define SPI_DI_DIR TRISCbits.TRISC4
#define SPI_DO_DIR TRISCbits.TRISC5
#define SPI_CLK_DIR TRISCbits.TRISC3
//-------------------------------------------------------//
// spi line operating define
//-------------------------------------------------------//
#define SPI_DO_HIGH SPI_DO_OUT = 1
#define SPI_DO_LOW SPI_DO_OUT = 0
#define SPI_CLK_HIGH SPI_CLK_OUT = 1
#define SPI_CLK_LOW SPI_CLK_OUT = 0
#define SPI_DI_JUDGE SPI_DI_IN
//-------------------------------------------------------//
// SPI 数据信号操作延时预定义 20uS
//-------------------------------------------------------//
#define HOLD_SPI_CLK() {
Nop(); Nop(); Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
Nop(); Nop(); Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
Nop(); Nop(); Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
Nop(); Nop(); Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();
}
//*****************************************************************
// Function: void InitPort_SoftSPI(void)
// Others:
//
//***************************************************************
void InitPort_SoftSPI(void)
{
SPI_DI_DIR = IO_DIR_IN; //
SPI_DO_DIR = IO_DIR_OUT; //
SPI_CLK_DIR = IO_DIR_OUT; //
}
//-------------------------------------------------------------------------------//
// Function: unsigned char Soft_SPI_rxtxByte( unsigned char txData )
// Description: 软件模拟的SPI接口全双工读写1个字节的程序
// Parameters: txData: MCU通过SPI接口发送的单字节数据
// Returns: rxData: MCU通过SPI接口接收的单字节数据
// Others: HOLD_SPI_CLK()在此处使用的意义在于灵活调整
// SPI
//-------------------------------------------------------------------------------//
INT8U Soft_SPI_rxtxByte( INT8U txData )
{
INT8U i;
INT8U rxData=0;
HOLD_SPI_CLK(); // delay for x uS
for ( i=0; i<8; i++ )
{
NOP(); //delay use
SPI_CLK_LOW; // clk =0
HOLD_SPI_CLK(); // delay for x uS
if ( txData & 0x80 ) //TX one BIT
{
SPI_DO_HIGH ;
}
else
{
SPI_DO_LOW;
}
txData = txData<<1;
rxData = rxData<<1; //RX one BIT
if ( SPI_DI_JUDGE)
{
rxData |= 0x01;
}
SPI_CLK_HIGH; // clk =1
HOLD_SPI_CLK(); // delay for x uS
}
return rxData;
}
/*--------------------------------------------------------------*/
//end of file
/*--------------------------------------------------------------*/
评论5
最新资源