?? ti_cc_spi.c
字號:
}
void TI_CC_SPIStrobe(char strobe)
{
IFG2 &= ~UCB1RXIFG; // Clear flag
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USCIB1_PxIN&TI_CC_SPI_USCIB1_SOMI);// Wait for CCxxxx ready
UCB1TXBUF = strobe; // Send strobe
// Strobe addr is now being TX'ed
while (!(IFG2&UCB1RXIFG)); // Wait for end of addr TX
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
void TI_CC_PowerupResetCCxxxx(void)
{
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; // /CS enable
while (TI_CC_SPI_USCIB1_PxIN&TI_CC_SPI_USCIB1_SOMI);// Wait for CCxxxx ready
UCB1TXBUF = TI_CCxxx0_SRES; // Send strobe
// Strobe addr is now being TX'ed
IFG2 &= ~UCB1RXIFG; // Clear flag
while (!(IFG2&UCB1RXIFG)); // Wait for end of addr TX
while (TI_CC_SPI_USCIB1_PxIN&TI_CC_SPI_USCIB1_SOMI);
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
#elif TI_CC_RF_SER_INTF == TI_CC_SER_INTF_USI
void TI_CC_SPISetup(void)
{
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
TI_CC_CSn_PxDIR |= TI_CC_CSn_PIN; // /CS disable
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE;// Port, SPI master
USICKCTL = USISSEL_2 + USICKPL; // SCLK = SMCLK
USICTL0 &= ~USISWRST; // USI released for operation
USISRL = 0x00; // Ensure SDO low instead of high,
USICNT = 1; // to avoid conflict with CCxxxx
}
void TI_CC_SPIWriteReg(char addr, char value)
{
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);// Wait for CCxxxx ready
USISRL = addr; // Load address
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
USISRL = value; // Load value
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count)
{
unsigned int i;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);// Wait for CCxxxx ready
USISRL = addr | TI_CCxxx0_WRITE_BURST; // Load address
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
for (i = 0; i < count; i++)
{
USISRL = buffer[i]; // Load data
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
}
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
char TI_CC_SPIReadReg(char addr)
{
char x;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);// Wait for CCxxxx ready
USISRL = addr | TI_CCxxx0_READ_SINGLE; // Load address
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
USICNT = 8; // Dummy write so we can read data
while (!(USICTL1&USIIFG)); // Wait for RX to finish
x = USISRL; // Store data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
return x;
}
void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count)
{
unsigned int i;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);// Wait for CCxxxx ready
USISRL = addr | TI_CCxxx0_READ_BURST; // Load address
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
for (i = 0; i < count; i++)
{
USICNT = 8; // Dummy write so we can read data
while (!(USICTL1&USIIFG)); // Wait for RX to finish
buffer[i] = USISRL; // Store data
}
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
char TI_CC_SPIReadStatus(char addr)
{
char x;
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);// Wait for CCxxxx ready
USISRL = addr | TI_CCxxx0_READ_BURST; // Load address
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
USICNT = 8; // Dummy write so we can read data
while (!(USICTL1&USIIFG)); // Wait for RX to finish
x = USISRL; // Store data
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
return x;
}
void TI_CC_SPIStrobe(char strobe)
{
TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN; // /CS enable
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);// Wait for CCxxxx ready
USISRL = strobe; // Load strobe
USICNT = 8; // Send it
while (!(USICTL1&USIIFG)); // Wait for TX to finish
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN; // /CS disable
}
void TI_CC_PowerupResetCCxxxx(void)
{
// Sec. 27.1 of CC1100 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_USI_PxIN&TI_CC_SPI_USI_SOMI);
USISRL = TI_CCxxx0_SRES;
USICNT = 8;
while (!(USICTL1&USIIFG));
while (TI_CC_SPI_USI_PxIN&TI_CC_SPI_USI_SOMI);
TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;
}
#elif TI_CC_RF_SER_INTF == TI_CC_SER_INTF_BITBANG
void TI_CC_SPI_bitbang_out(char);
char TI_CC_SPI_bitbang_in();
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(char value)
{
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
char TI_CC_SPI_bitbang_in()
{
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(char addr, 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(char addr, char *buffer, char count)
{
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
}
char TI_CC_SPIReadReg(char addr)
{
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(char addr, char *buffer, char count)
{
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
}
char TI_CC_SPIReadStatus(char addr)
{
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(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 CC1100 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;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -