summaryrefslogtreecommitdiff
path: root/usb-spi
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2012-05-30 14:16:47 +0000
committerChristian Pointner <equinox@spreadspace.org>2012-05-30 14:16:47 +0000
commit547d352d5275345cd9c5a3948018f7158adf253a (patch)
tree325e20e815dec265c01c1326618dd2ff90586d25 /usb-spi
parentcleanup (diff)
usb-spi now uses LUFA spi
git-svn-id: https://svn.spreadspace.org/avr/trunk@49 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'usb-spi')
-rw-r--r--usb-spi/usb-spi.c124
1 files changed, 48 insertions, 76 deletions
diff --git a/usb-spi/usb-spi.c b/usb-spi/usb-spi.c
index 513df00..66c3671 100644
--- a/usb-spi/usb-spi.c
+++ b/usb-spi/usb-spi.c
@@ -72,27 +72,16 @@
#include "led.h"
#include <LUFA/Version.h>
+#include <LUFA/Drivers/Peripheral/SPI.h>
#include <LUFA/Drivers/Misc/RingBuffer.h>
#include <LUFA/Drivers/USB/USB.h>
/* Hardware Defines: */
-#define SPI_DDR DDRB
-#define SPI_PORT PORTB
-#define SPI_PINB_REG PINB
+#define SPI_CS_DDR DDRB
+#define SPI_CS_PORT PORTB
#define CS 0
-#define SCK 1
-#define MOSI 2
-#define MISO 3
-
- /* Function Prototypes: */
-void SetupHardware(void);
-void SPI_TransferBuffer(void);
-
-void EVENT_USB_Device_Connect(void);
-void EVENT_USB_Device_Disconnect(void);
-void EVENT_USB_Device_ConfigurationChanged(void);
-void EVENT_USB_Device_ControlRequest(void);
+ /* Global I/O Buffers: */
static RingBuffer_t USBtoSPI_Buffer;
static uint8_t USBtoSPI_Buffer_Data[128];
static RingBuffer_t SPItoUSB_Buffer;
@@ -122,6 +111,50 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
},
};
+void SetupHardware(void)
+{
+ MCUSR &= ~(1 << WDRF);
+ wdt_disable();
+
+ cpu_init();
+ led_init();
+ USB_Init();
+
+ TCCR0B = (1 << CS02);
+
+ SPI_CS_DDR |= (1<<CS);
+ SPI_CS_PORT |= (1<<CS);
+ SPI_Init(SPI_SPEED_FCPU_DIV_4 | SPI_MODE_MASTER | SPI_ORDER_MSB_FIRST |
+ SPI_SCK_LEAD_RISING | SPI_SAMPLE_LEADING);
+}
+
+void SPI_TransferBuffer()
+{
+ SPI_CS_PORT &= ~(1<<CS);
+ led_on();
+
+ while(!(RingBuffer_IsEmpty(&USBtoSPI_Buffer))) {
+ uint8_t ReceivedByte = SPI_TransferByte(RingBuffer_Remove(&USBtoSPI_Buffer));
+ if (USB_DeviceState == DEVICE_STATE_Configured) {
+ RingBuffer_Insert(&SPItoUSB_Buffer, ReceivedByte);
+ if(RingBuffer_IsFull(&USBtoSPI_Buffer))
+ break;
+ }
+ }
+
+ led_off();
+ SPI_CS_PORT |= (1<<CS);
+}
+
+void EVENT_USB_Device_ConfigurationChanged(void)
+{
+ CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
+}
+
+void EVENT_USB_Device_ControlRequest(void)
+{
+ CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
+}
int main(void)
{
@@ -163,64 +196,3 @@ int main(void)
USB_USBTask();
}
}
-
-void SetupHardware(void)
-{
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- cpu_init();
- led_init();
- USB_Init();
-
- TCCR0B = (1 << CS02);
-
- SPI_DDR = (1<<MOSI)|(1<<SCK)|(1<<CS);
- SPI_PORT = (1<<CS);
- SPCR = (1<<SPE)|(1<<MSTR);
-}
-
-void SPI_TransferBuffer()
-{
- SPI_PORT &= ~(1<<CS);
-
- while(!(RingBuffer_IsEmpty(&USBtoSPI_Buffer))) {
- SPDR = RingBuffer_Remove(&USBtoSPI_Buffer);
- while(!(SPSR & (1<<SPIF)));
-
- uint8_t ReceivedByte = SPDR;
- if (USB_DeviceState == DEVICE_STATE_Configured) {
- RingBuffer_Insert(&SPItoUSB_Buffer, ReceivedByte);
- if(RingBuffer_IsFull(&USBtoSPI_Buffer))
- break;
- }
- }
-
- SPI_PORT |= (1<<CS);
-}
-
-void EVENT_USB_Device_Connect(void)
-{
- led_on();
-}
-
-void EVENT_USB_Device_Disconnect(void)
-{
- led_off();
-}
-
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
- bool ConfigSuccess = true;
-
- ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
-
- led_toggle();
- _delay_ms(10);
- led_toggle();
-}
-
-void EVENT_USB_Device_ControlRequest(void)
-{
- CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
-}