Add RS232 port option to jackdaw USB stick

This commit is contained in:
dak664 2010-03-15 18:52:55 +00:00
parent 3f8b346c29
commit 0265f09a5c
4 changed files with 139 additions and 14 deletions

View file

@ -1,4 +1,4 @@
# $Id: Makefile.avr,v 1.21 2010/02/16 21:56:15 dak664 Exp $
# $Id: Makefile.avr,v 1.22 2010/03/15 18:52:55 dak664 Exp $
### Check if we are running under Windows
@ -31,7 +31,7 @@ ifdef USB
### Add the directories for the USB stick and remove the default rs232 driver
CONTIKI_CPU_DIRS += dev/usb dev/usb/serial dev/usb/rndis dev/usb/storage
CONTIKI_TARGET_SOURCEFILES += $(USB)
AVR = clock.c mtarch.c eeprom.c flash.c leds-arch.c watchdog.c rtimer-arch.c
//AVR = clock.c mtarch.c eeprom.c flash.c leds-arch.c watchdog.c rtimer-arch.c
endif
#For a coffee file system, the application makefile can define COFFEE_FILES=n

View file

@ -28,7 +28,7 @@
*
* This file is part of the Contiki operating system.
*
* @(#)$Id: rs232.c,v 1.5 2009/03/17 20:32:22 adamdunkels Exp $
* @(#)$Id: rs232.c,v 1.6 2010/03/15 18:52:55 dak664 Exp $
*/
#include <stdio.h>
@ -80,10 +80,6 @@ static rs232_t rs232_ports[2] = {
NULL
}
};
#else
#error Please define the UART registers for your MCU!
#endif
/*---------------------------------------------------------------------------*/
ISR(USART0_TX_vect)
{
@ -101,7 +97,6 @@ ISR(USART0_RX_vect)
rs232_ports[RS232_PORT_0].input_handler(c);
}
}
/*---------------------------------------------------------------------------*/
ISR(USART1_TX_vect)
{
@ -120,6 +115,50 @@ ISR(USART1_RX_vect)
}
}
#elif defined (__AVR_AT90USB1287__)
/* Has only UART1, map it to port 0 */
typedef struct {
volatile uint8_t * UDR;
volatile uint8_t * UBRRH;
volatile uint8_t * UBRRL;
volatile uint8_t * UCSRB;
volatile uint8_t * UCSRC;
volatile uint8_t txwait;
int (* input_handler)(unsigned char);
} rs232_t;
static rs232_t rs232_ports[1] = {
{ // UART1
&UDR1,
&UBRR1H,
&UBRR1L,
&UCSR1B,
&UCSR1C,
0,
NULL
}
};
/*---------------------------------------------------------------------------*/
ISR(USART1_TX_vect)
{
rs232_ports[RS232_PORT_0].txwait = 0;
}
/*---------------------------------------------------------------------------*/
ISR(USART1_RX_vect)
{
unsigned char c;
c = *(rs232_ports[RS232_PORT_0].UDR);
if(rs232_ports[RS232_PORT_0].input_handler != NULL) {
rs232_ports[RS232_PORT_0].input_handler(c);
}
}
#else
#error Please define the UART registers for your MCU!
#endif
/*---------------------------------------------------------------------------*/
void
rs232_init (uint8_t port, uint8_t bd, uint8_t ffmt)

View file

@ -41,20 +41,104 @@
#ifndef __RS232_AT90USB1287__
#define __RS232_AT90USB1287__
/******************************************************************************/
/*** Includes */
/******************************************************************************/
#include <avr/io.h>
/******************************************************************************/
/*** RS232 ports */
/*** RS232 ports - Has only UART1, map it into port 0 */
/******************************************************************************/
#define RS232_PORT_0 0
#define RS232_PORT_1 1
/******************************************************************************/
/*** Baud rates */
/******************************************************************************/
#if MCU_MHZ == 16
/* Single speed operation (U2X = 0)*/
#warning 16MHz
#define USART_BAUD_2400 416
#define USART_BAUD_4800 207
#define USART_BAUD_9600 103
#define USART_BAUD_14400 68
#define USART_BAUD_19200 51
#define USART_BAUD_28800 34
#define USART_BAUD_38400 25
#define USART_BAUD_57600 16
#define USART_BAUD_76800 12
#define USART_BAUD_115200 8
#define USART_BAUD_230400 3
#define USART_BAUD_250000 3
#define USART_BAUD_500000 1
#define USART_BAUD_1000000 0
#elif MCU_MHZ == 8
/* Single speed operation (U2X = 0)*/
#define USART_BAUD_2400 207
#define USART_BAUD_4800 103
#define USART_BAUD_9600 51
#define USART_BAUD_14400 34
#define USART_BAUD_19200 25
#define USART_BAUD_28800 16
#define USART_BAUD_38400 12
#define USART_BAUD_57600 8
#define USART_BAUD_76800 6
#define USART_BAUD_115200 3
#define USART_BAUD_230400 1
#define USART_BAUD_250000 1
#define USART_BAUD_500000 0
#else
#error "Please define the baud rates for your CPU clock: ATmega128 handbook p. \
195-198 or set the rate in contiki-conf.h"
#endif
/******************************************************************************/
/*** Interrupt settings */
/******************************************************************************/
#define USART_INTERRUPT_RX_COMPLETE _BV (RXCIE1)
#define USART_INTERRUPT_TX_COMPLETE _BV (TXCIE1)
#define USART_INTERRUPT_DATA_REG_EMPTY _BV (UDRIE1)
/******************************************************************************/
/*** Receiver / transmitter */
/******************************************************************************/
#define USART_RECEIVER_ENABLE _BV (RXEN1)
#define USART_TRANSMITTER_ENABLE _BV (TXEN1)
/******************************************************************************/
/*** Mode select */
/******************************************************************************/
#define USART_MODE_ASYNC 0x00
#define USART_MODE_SYNC _BV (UMSEL00)
/******************************************************************************/
/*** Parity */
/******************************************************************************/
#define USART_PARITY_NONE 0x00
#define USART_PARITY_EVEN _BV (UPM01)
#define USART_PARITY_ODD _BV (UPM01) | _BV (UPM00)
/******************************************************************************/
/*** Stop bits */
/******************************************************************************/
#define USART_STOP_BITS_1 0x00
#define USART_STOP_BITS_2 _BV (USBS)
/******************************************************************************/
/*** Character size */
/******************************************************************************/
#define USART_DATA_BITS_5 0x00
#define USART_DATA_BITS_6 _BV (UCSZ10)
#define USART_DATA_BITS_7 _BV (UCSZ11)
#define USART_DATA_BITS_8 _BV (UCSZ11) | _BV (UCSZ10)
// #define USART_DATA_BITS_9 (needs also UCSZ2 bit in UCSRnB)
/******************************************************************************/
/*** Clock polarity */
/******************************************************************************/
#define USART_RISING_XCKN_EDGE 0x00
#define USART_FALLING_XCKN_EDGE _BV (UCPOL0)
#endif /* #ifndef __RS232_AT90USB1287__ */

View file

@ -109,7 +109,7 @@ Bool usb_user_read_request(U8 type, U8 request)
return get_encapsulated_command();
break;
#if USB_CONF_STORAGE
case MASS_STORAGE_RESET:
Usb_ack_receive_setup();
Usb_send_control_in();
@ -124,8 +124,9 @@ Bool usb_user_read_request(U8 type, U8 request)
ms_multiple_drive = 1;
return TRUE;
break;
#endif /* USB_CONF_STORAGE */
#if USB_CONF_CDC
/* We don't have a real serial port - so these aren't applicable. We
advertise that we support nothing, so shouldn't get them anyway */
case GET_LINE_CODING:
@ -142,6 +143,7 @@ Bool usb_user_read_request(U8 type, U8 request)
cdc_set_control_line_state();
return TRUE;
break;
#endif /* USB_CONF_CDC */
default:
break;
@ -315,7 +317,7 @@ void usb_user_endpoint_init(U8 conf_nb)
}
#if USB_CONF_CDC
/******************** Virtual Serial Port ************************/
extern S_line_coding line_coding;
@ -377,4 +379,4 @@ void cdc_set_control_line_state (void)
Usb_send_control_in();
while(!(Is_usb_read_control_enabled()));
}
#endif /* USB_CONF_CDC */