12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * CC2500 helper routines
- */
-
- #include <util/delay.h>
-
- #include "spi.h"
- #include "cc2500.h"
-
- void cc2500ReadFifo(uint8_t *dpbuffer, int len) {
- cc2500ReadRegisterMulti(CC2500_3F_RXFIFO | CC2500_READ_BURST, dpbuffer, len);
- }
-
- void cc2500ReadRegisterMulti(uint8_t address, uint8_t data[], uint8_t length) {
- CS_off;
- spiWrite(address);
- for (uint8_t i = 0; i < length; i++) {
- data[i] = spiRead();
- }
- CS_on;
- }
-
- void cc2500WriteRegisterMulti(uint8_t address, const uint8_t data[], uint8_t length) {
- CS_off;
- spiWrite(CC2500_WRITE_BURST | address);
- for (uint8_t i = 0; i < length; i++) {
- spiWrite(data[i]);
- }
- CS_on;
- }
-
- void cc2500WriteFifo(uint8_t *dpbuffer, uint8_t len) {
- cc2500Strobe(CC2500_SFTX); // 0x3B
- cc2500WriteRegisterMulti(CC2500_3F_TXFIFO, dpbuffer, len);
- cc2500Strobe(CC2500_STX); // 0x35
- }
-
- void cc2500WriteReg(uint8_t address, uint8_t data) {
- CS_off;
- spiWrite(address);
- NOP();
- spiWrite(data);
- CS_on;
- }
-
- uint8_t cc2500ReadReg(uint8_t address) {
- uint8_t result;
- CS_off;
- address |= 0x80; // bit 7 =1 for reading
- spiWrite(address);
- result = spiRead();
- CS_on;
- return result;
- }
-
- void cc2500Strobe(uint8_t address) {
- CS_off;
- spiWrite(address);
- CS_on;
- }
-
- void cc2500ResetChip(void) {
- // Toggle chip select signal
- CS_on;
- _delay_us(30);
- CS_off;
- _delay_us(30);
- CS_on;
- _delay_us(45);
- cc2500Strobe(CC2500_SRES);
- _delay_ms(100);
- }
|