📄 s12co_spiio.c
字号:
//=============================================================================
// 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -