?? spi.c
字號:
/*spi.c*/
#include "msp430x22x4.h"
#include "hardware.h"
#include "cc2500.h"
#include "spi.h"
void TI_CC_Wait(unsigned int cycles)
{
while(cycles>15) // 15 cycles consumed by overhead
cycles = cycles - 6; // 6 cycles consumed each iteration
}
void TI_CC_SPISetup(void)
{
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
TI_CC_CSn_PxDIR |= TI_CC_CSn_PIN; // /CS disable
// Config bitbang pins
TI_CC_SPI_BITBANG_PxOUT |= TI_CC_SPI_BITBANG_SIMO|TI_CC_SPI_BITBANG_UCLK;
TI_CC_SPI_BITBANG_PxDIR |= TI_CC_SPI_BITBANG_SIMO | TI_CC_SPI_BITBANG_UCLK;
}
// Output eight-bit value using selected bit-bang pins
void TI_CC_SPI_bitbang_out(unsigned char value)
{
unsigned char x;
for(x=8;x>0;x--)
{
if(value & 0x80) // If bit is high...
TI_CC_SPI_BITBANG_PxOUT |= TI_CC_SPI_BITBANG_SIMO; // Set SIMO high...
else
TI_CC_SPI_BITBANG_PxOUT &= ~TI_CC_SPI_BITBANG_SIMO;// Set SIMO low...
value = value << 1; // Rotate bits
TI_CC_SPI_BITBANG_PxOUT &= ~TI_CC_SPI_BITBANG_UCLK; // Set clock low
TI_CC_SPI_BITBANG_PxOUT |= TI_CC_SPI_BITBANG_UCLK; // Set clock high
}
}
// Input eight-bit value using selected bit-bang pins
unsigned char TI_CC_SPI_bitbang_in()
{
unsigned char x=0,shift=0;
int y;
// Determine how many bit positions SOMI is from least-significant bit
x = TI_CC_SPI_BITBANG_SOMI;
while(x>1)
{
shift++;
x = x >> 1;
};
x = 0;
for(y=8;y>0;y--)
{
TI_CC_SPI_BITBANG_PxOUT &= ~TI_CC_SPI_BITBANG_UCLK;// Set clock low
TI_CC_SPI_BITBANG_PxOUT |= TI_CC_SPI_BITBANG_UCLK;// Set clock high
x = x << 1; // Make room for next bit
x = x | ((TI_CC_SPI_BITBANG_PxIN & TI_CC_SPI_BITBANG_SOMI) >> shift);
} // Store next bit
return(x);
}
void TI_CC_SPIWriteReg(unsigned char addr, unsigned char value)
{
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_BITBANG_PxIN&TI_CC_SPI_BITBANG_SOMI); // Wait CCxxxx ready
TI_CC_SPI_bitbang_out(addr); // Send address
TI_CC_SPI_bitbang_out(value); // Send data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
void TI_CC_SPIWriteBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
unsigned char i;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_BITBANG_PxIN&TI_CC_SPI_BITBANG_SOMI); // Wait CCxxxx ready
TI_CC_SPI_bitbang_out(addr | TI_CCxxx0_WRITE_BURST); // Send address
for (i = 0; i < count; i++)
TI_CC_SPI_bitbang_out(buffer[i]); // Send data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
unsigned char TI_CC_SPIReadReg(unsigned char addr)
{
unsigned char x;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
TI_CC_SPI_bitbang_out(addr | TI_CCxxx0_READ_SINGLE);//Send address
x = TI_CC_SPI_bitbang_in(); // Read data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
return x;
}
void TI_CC_SPIReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
unsigned char i;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_BITBANG_PxIN&TI_CC_SPI_BITBANG_SOMI); // Wait CCxxxx ready
TI_CC_SPI_bitbang_out(addr | TI_CCxxx0_READ_BURST); // Send address
for (i = 0; i < count; i++)
buffer[i] = TI_CC_SPI_bitbang_in(); // Read data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
unsigned char TI_CC_SPIReadStatus(unsigned char addr)
{
unsigned char x;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_BITBANG_PxIN & TI_CC_SPI_BITBANG_SOMI); // Wait CCxxxx ready
TI_CC_SPI_bitbang_out(addr | TI_CCxxx0_READ_BURST); // Send address
x = TI_CC_SPI_bitbang_in(); // Read data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
return x;
}
void TI_CC_SPIStrobe(unsigned char strobe)
{
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_BITBANG_PxIN&TI_CC_SPI_BITBANG_SOMI);// Wait for CCxxxx ready
TI_CC_SPI_bitbang_out(strobe); // Send strobe
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
void TI_CC_PowerupResetCCxxxx(void)
{
// Sec. 27.1 of CC2500 datasheet
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
TI_CC_Wait(30);
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;
TI_CC_Wait(30);
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
TI_CC_Wait(45);
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;
while (TI_CC_SPI_BITBANG_PxIN&TI_CC_SPI_BITBANG_SOMI);
TI_CC_SPI_bitbang_out(TI_CCxxx0_SRES);
while (TI_CC_SPI_BITBANG_PxIN&TI_CC_SPI_BITBANG_SOMI);
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -