mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-12-01 22:17:11 +02:00
atusb/fw/: added reporting of RF interrupts via bulk EP1
- board.h (board_app_init), board_app.c (board_app_init): new function for application-specific board initialization - atusb.c (main): call board_app_init - board_app.c (INT0_vect): on RF interrupt, read REG_IRQ_STATUS and send the status byte on EP1 - board_app.c (board_app_init): set up interrupt on rising edge of INT0 (INT_RF) - descr.c (config_descriptor): added EP1 as bulk IN
This commit is contained in:
parent
244e449131
commit
0120f62242
@ -28,6 +28,7 @@
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
board_init();
|
board_init();
|
||||||
|
board_app_init();
|
||||||
reset_rf();
|
reset_rf();
|
||||||
|
|
||||||
user_get_descriptor = sernum_get_descr;
|
user_get_descriptor = sernum_get_descr;
|
||||||
|
@ -83,5 +83,6 @@ void timer_init(void);
|
|||||||
int gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res);
|
int gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res);
|
||||||
|
|
||||||
void board_init(void);
|
void board_init(void);
|
||||||
|
void board_app_init(void);
|
||||||
|
|
||||||
#endif /* !BOARD_H */
|
#endif /* !BOARD_H */
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@ -19,6 +20,8 @@
|
|||||||
#define F_CPU 8000000UL
|
#define F_CPU 8000000UL
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
#include "usb.h"
|
||||||
|
#include "at86rf230.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
@ -131,3 +134,25 @@ int gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res)
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ISR(INT0_vect)
|
||||||
|
{
|
||||||
|
static uint8_t irq;
|
||||||
|
|
||||||
|
if (eps[1].state != EP_IDLE)
|
||||||
|
return;
|
||||||
|
spi_begin();
|
||||||
|
spi_send(AT86RF230_REG_READ | REG_IRQ_STATUS);
|
||||||
|
irq = spi_recv();
|
||||||
|
spi_end();
|
||||||
|
usb_send(&eps[1], &irq, 1, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void board_app_init(void)
|
||||||
|
{
|
||||||
|
/* enable INT0, trigger on rising edge */
|
||||||
|
EICRA = 1 << ISC01 | 1 << ISC00;
|
||||||
|
EIMSK = 1;
|
||||||
|
}
|
||||||
|
@ -56,7 +56,7 @@ const uint8_t config_descriptor[] = {
|
|||||||
#if 0
|
#if 0
|
||||||
LE(9+9+7+7), /* wTotalLength */
|
LE(9+9+7+7), /* wTotalLength */
|
||||||
#else
|
#else
|
||||||
LE(9+9+9), /* wTotalLength */
|
LE(9+9+7+9), /* wTotalLength */
|
||||||
#endif
|
#endif
|
||||||
2, /* bNumInterfaces */
|
2, /* bNumInterfaces */
|
||||||
1, /* bConfigurationValue (> 0 !) */
|
1, /* bConfigurationValue (> 0 !) */
|
||||||
@ -70,11 +70,7 @@ const uint8_t config_descriptor[] = {
|
|||||||
USB_DT_INTERFACE, /* bDescriptorType */
|
USB_DT_INTERFACE, /* bDescriptorType */
|
||||||
0, /* bInterfaceNumber */
|
0, /* bInterfaceNumber */
|
||||||
0, /* bAlternateSetting */
|
0, /* bAlternateSetting */
|
||||||
#if 0
|
1, /* bNumEndpoints */
|
||||||
2, /* bNumEndpoints */
|
|
||||||
#else
|
|
||||||
0,
|
|
||||||
#endif
|
|
||||||
USB_CLASS_VENDOR_SPEC, /* bInterfaceClass */
|
USB_CLASS_VENDOR_SPEC, /* bInterfaceClass */
|
||||||
0, /* bInterfaceSubClass */
|
0, /* bInterfaceSubClass */
|
||||||
0, /* bInterfaceProtocol */
|
0, /* bInterfaceProtocol */
|
||||||
@ -89,7 +85,9 @@ const uint8_t config_descriptor[] = {
|
|||||||
0x02, /* bmAttributes (bulk) */
|
0x02, /* bmAttributes (bulk) */
|
||||||
LE(EP1_SIZE), /* wMaxPacketSize */
|
LE(EP1_SIZE), /* wMaxPacketSize */
|
||||||
0, /* bInterval */
|
0, /* bInterval */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
/* EP IN */
|
/* EP IN */
|
||||||
|
|
||||||
7, /* bLength */
|
7, /* bLength */
|
||||||
|
Loading…
Reference in New Issue
Block a user