s12co_spiio.c

来自「source code for a sample alarm control p」· C语言 代码 · 共 101 行

C
101
字号
//=============================================================================
// File: S12CO_SPIIO.C - V1.00
// Rem.: The ACPRD Project Page on the Web -> http://hc12web.de/acprd
//=============================================================================

//-- Includes -----------------------------------------------------------------

#include "datatypes.h"
#include "hcs12dp256.h"
#include "s12_spi.h"
#include "s12co_spiio.h"

//-- Code ---------------------------------------------------------------------

void initSPIIO(void) {
	PTH  = S12CO_SPICSH;
	DDRH = S12CO_SPICSH;
	}

//-----------------------------------------------------------------------------

// Note: CPHA=0, CPOL=0 required
//		 clock rate max. 2MHz
//		 conversion takes max. 8祍
//
UINT16 getADS8344(UINT8 channel) {

	volatile UINT8 n;
	UINT16 adcresult;

	// set up SPI mode
	SPI0CR1 = BM_SPE | BM_MSTR;			// CPOL=0 CPHA=0
	// send conversion command
	PTH = S12CO_SPICS2;					// enable /CS2 
	xferSPI0((channel << 4) | 0x86);	// single ended, internal clock mode
	PTH = S12CO_SPICSH;					// disable /CS2
	// wait 8祍
	for(n=0; n<100; n++) ;
	// get conversion result
	PTH = S12CO_SPICS2; 				// enable /CS2
	adcresult = xferSPI0(0) << 8;		// get bits 15..9
	adcresult += xferSPI0(0);			// get bits 8..1
	adcresult <<= 1;
	if(xferSPI0(0) & 0x80) adcresult++;	// get bit 0
	PTH = S12CO_SPICSH;					// disable /CS2
	return adcresult;	
	}


//-----------------------------------------------------------------------------

// Note: CPHA=0, CPOL=0 required
//
void putDAC8532(UINT8 channel, UINT16 value) {

	// set up SPI mode
	SPI0CR1 = BM_SPE | BM_MSTR | BM_CPHA; // CPOL=0 CPHA=1
	// send command
	PTH = S12CO_SPICS1;					// enable /CS1 
	if((channel & 1) == 0)
		xferSPI0(0x10);					// load & set DACA
	else
		xferSPI0(0x24); 				// load & set DACB
	// send data
	xferSPI0(value >> 8);				// send bits 15..8
	xferSPI0(value);					// send bits 7..0
	PTH = S12CO_SPICSH;					// disable /CS1
	}
 
//-----------------------------------------------------------------------------

UINT8 getSPIPI(void) {

	UINT8 abyte;

	// set up SPI mode
	SPI0CR1 = BM_SPE | BM_MSTR;			// CPOL=0 CPHA=0
	// latch input data
	PTH = S12CO_SPICS4; 
	PTH = S12CO_SPICSH;
	// serialize latched data
	PTH = S12CO_SPICS3;
	abyte = xferSPI0(0);
	PTH = S12CO_SPICSH;
	return abyte;
	}

//-----------------------------------------------------------------------------

void putSPIPO(UINT8 abyte) {

	// set up SPI mode
	SPI0CR1 = BM_SPE | BM_MSTR;			// CPOL=0 CPHA=0
	// send data
	PTH = S12CO_SPICS5;					// enable /CS5
	xferSPI0(abyte);
	PTH = S12CO_SPICSH;					// disable /CS5
	}

//=============================================================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?