diff options
author | Bernhard Tittelbach <xro@realraum.at> | 2012-05-19 20:12:46 +0000 |
---|---|---|
committer | Bernhard Tittelbach <xro@realraum.at> | 2012-05-19 20:12:46 +0000 |
commit | 3124500c95baa742decab16063c016800c27a5ae (patch) | |
tree | 04d1410dc701d21accd270d31ea448b9ef2af8b3 /software/hhd70dongle/hhd70.c | |
parent | first attempt at RX/TX w/ 2 dongles (diff) |
refactor functionnames so name fits file and interface
git-svn-id: https://svn.spreadspace.org/mur.sat@441 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software/hhd70dongle/hhd70.c')
-rw-r--r-- | software/hhd70dongle/hhd70.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/software/hhd70dongle/hhd70.c b/software/hhd70dongle/hhd70.c new file mode 100644 index 0000000..2d4ff93 --- /dev/null +++ b/software/hhd70dongle/hhd70.c @@ -0,0 +1,115 @@ +/* + * + * mur.sat + * + * Somewhen in the year 2012, mur.at will have a nano satellite launched + * into a low earth orbit (310 km above the surface of our planet). The + * satellite itself is a TubeSat personal satellite kit, developed and + * launched by interorbital systems. mur.sat is a joint venture of mur.at, + * ESC im Labor and realraum. + * + * Please visit the project hompage at sat.mur.at for further information. + * + * + * Copyright (C) 2012 Bernhard Tittelbach <xro@realraum.at> + * + * This file is part of mur.sat. + * + * mur.sat is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * mur.sat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with mur.sat. If not, see <http://www.gnu.org/licenses/>. + * + */ +#include "avr/io.h" + +#include "hhd70.h" + +void hhd70_init(void) +{ + //configure Direction of SS / PB0 , MOSI and SCLK as Output to drive CS of CC1101 + SPI_PORT = (1<<CS); + SPI_DDR = (1<<MOSI)|(1<<SCK)|(1<<CS)|(1<<RE)|(1<<TE); + SPCR = (1<<SPE)|(1<<MSTR); // | (0<<DORD) //select MSB first: DORD == 0 + // SPSR = (0<<SPI2X) // f_osc/4 + // SPSR = (1<<SPI2X) // f_osc/2 + // SPSR = (1<<SPI2X); (4MHz vs. 8MHz) +} + +void hhd70_spi_cs_enable(void) +{ + //pull low + SPI_PORT &= ~(1<<CS); +} + +void hhd70_spi_cs_disable(void) +{ + //pull high + SPI_PORT |= (1<<CS); +} + +#include "usb_rawhid.h" +#include "util.h" + +void hhd70_c1101_wait_chip_rdy(void) +{ + //c1101 will set MISO to low if ready + while (SPI_PINB_REG & (1<<MISO)); + //~ unsigned int c; + //~ for (c=0; c < 0xFFFFFFFF && (SPI_PINB_REG & (1<<MISO)); c++); + //~ uint8_t debug_buff[6]; + //~ usb_rawhid_send((uint8_t*)"spi waited for:",255); + //~ debug_sprint_int16hex(debug_buff, c); + //~ usb_rawhid_send(debug_buff,255); +} + +void hhd70_spi_write_byte(char byte) +{ + SPDR = byte; //Load byte to Data register + while(!(SPSR & (1<<SPIF))); // Wait for transmission complete +} + +char hhd70_spi_exchange_byte(char byte) +{ + hhd70_spi_write_byte(byte); + return SPDR; +} + +char hhd70_spi_read_byte(void) +{ + //transmit something so SCLK runs for 8 bits, so that slave can transfer 1 byte + return hhd70_spi_exchange_byte(0); +} + +void hhd70_pa_enable(void) +{ + SPI_PORT |= ~(1<<TE); +} + +void hhd70_pa_disable(void) +{ + SPI_PORT &= ~(1<<TE); +} + +void hhd70_lna_enable(void) +{ + SPI_PORT |= ~(1<<RE); +} + +void hhd70_lna_disable(void) +{ + SPI_PORT &= ~(1<<RE); +} + +int8_t hhd70_rx_data_available(void) +{ + return SPI_PINB_REG & (1 << GDO2); +}
\ No newline at end of file |