forked from mfulz_github/qmk_firmware
Added ability to set the serial baud rate via the user's terminal in the XPLAINBridge project.
This commit is contained in:
parent
40631e9fe5
commit
dfe50ff349
|
@ -15,6 +15,7 @@
|
||||||
* - Added new SWAPENDIAN_16() and SWAPENDIAN_32() macros to Common.h for statically initialized variables at compile time
|
* - Added new SWAPENDIAN_16() and SWAPENDIAN_32() macros to Common.h for statically initialized variables at compile time
|
||||||
* - Added new Drivers/USB/LowLevel/Device.c file to house Device mode specific functions that are more complicated than simple macros
|
* - Added new Drivers/USB/LowLevel/Device.c file to house Device mode specific functions that are more complicated than simple macros
|
||||||
* - Added new AVRStudio 4 project files for all library demos, projects and bootloaders
|
* - Added new AVRStudio 4 project files for all library demos, projects and bootloaders
|
||||||
|
* - Added ability to set the serial baud rate via the user's terminal in the XPLAINBridge project
|
||||||
*
|
*
|
||||||
* <b>Changed:</b>
|
* <b>Changed:</b>
|
||||||
* - The RingBuff library code has been replaced in the XPLAINBridge, Benito and USBtoSerial projects with an ultra lightweight
|
* - The RingBuff library code has been replaced in the XPLAINBridge, Benito and USBtoSerial projects with an ultra lightweight
|
||||||
|
|
|
@ -118,7 +118,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
.Data = {0x06}
|
.Data = {0x06}
|
||||||
},
|
},
|
||||||
|
|
||||||
.CDC_Functional_Union=
|
.CDC_Functional_Union =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
|
.Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
|
||||||
.SubType = 0x06,
|
.SubType = 0x06,
|
||||||
|
|
|
@ -130,7 +130,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
.Data = {0x06}
|
.Data = {0x06}
|
||||||
},
|
},
|
||||||
|
|
||||||
.CDC_Functional_Union=
|
.CDC_Functional_Union =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
|
.Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
|
||||||
.SubType = 0x06,
|
.SubType = 0x06,
|
||||||
|
|
|
@ -63,12 +63,13 @@ void SoftUART_Init(void)
|
||||||
EICRA = (1 << ISC01);
|
EICRA = (1 << ISC01);
|
||||||
EIMSK = (1 << INT0);
|
EIMSK = (1 << INT0);
|
||||||
|
|
||||||
/* Set reception timer compare period and enable compare ISR */
|
/* Set the transmission and reception timer compare values for the default baud rate */
|
||||||
OCR1A = BIT_TIME;
|
SoftUART_SetBaud(9600);
|
||||||
|
|
||||||
|
/* Setup reception timer compare ISR */
|
||||||
TIMSK1 = (1 << OCIE1A);
|
TIMSK1 = (1 << OCIE1A);
|
||||||
|
|
||||||
/* Set transmission timer compare period, enable compare ISR and start the timer */
|
/* Setup transmission timer compare ISR and start the timer */
|
||||||
OCR3A = BIT_TIME;
|
|
||||||
TIMSK3 = (1 << OCIE3A);
|
TIMSK3 = (1 << OCIE3A);
|
||||||
TCCR3B = ((1 << CS30) | (1 << WGM32));
|
TCCR3B = ((1 << CS30) | (1 << WGM32));
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,9 +42,6 @@
|
||||||
#include "LightweightRingBuff.h"
|
#include "LightweightRingBuff.h"
|
||||||
|
|
||||||
/* Macros: */
|
/* Macros: */
|
||||||
#define BAUD 9600
|
|
||||||
#define BIT_TIME ((F_CPU / BAUD) - 1)
|
|
||||||
|
|
||||||
#define SRX PD0
|
#define SRX PD0
|
||||||
#define SRXPIN PIND
|
#define SRXPIN PIND
|
||||||
#define SRXPORT PORTD
|
#define SRXPORT PORTD
|
||||||
|
@ -53,6 +50,15 @@
|
||||||
#define STXPORT PORTD
|
#define STXPORT PORTD
|
||||||
#define STXDDR DDRD
|
#define STXDDR DDRD
|
||||||
|
|
||||||
|
/* Inline Functions: */
|
||||||
|
static inline void SoftUART_SetBaud(const uint32_t Baud)
|
||||||
|
{
|
||||||
|
uint16_t BitTime = ((F_CPU / Baud) - 1);
|
||||||
|
|
||||||
|
OCR1A = BitTime;
|
||||||
|
OCR3A = BitTime;
|
||||||
|
}
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
void SoftUART_Init(void);
|
void SoftUART_Init(void);
|
||||||
|
|
||||||
|
|
|
@ -130,7 +130,7 @@ USART_USB_Descriptor_Configuration_t PROGMEM USART_ConfigurationDescriptor =
|
||||||
.Data = {0x06}
|
.Data = {0x06}
|
||||||
},
|
},
|
||||||
|
|
||||||
.CDC_Functional_Union=
|
.CDC_Functional_Union =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
|
.Header = {.Size = sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), .Type = 0x24},
|
||||||
.SubType = 0x06,
|
.SubType = 0x06,
|
||||||
|
|
|
@ -225,6 +225,16 @@ void EVENT_USB_Device_Disconnect(void)
|
||||||
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
|
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Event handler for the CDC Class driver Line Encoding Changed event.
|
||||||
|
*
|
||||||
|
* \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced
|
||||||
|
*/
|
||||||
|
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
|
||||||
|
{
|
||||||
|
/* Change the software UART's baud rate to match the new baud rate */
|
||||||
|
SoftUART_SetBaud(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS);
|
||||||
|
}
|
||||||
|
|
||||||
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
|
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
|
||||||
* documentation) by the application code so that the address and size of a requested descriptor can be given
|
* documentation) by the application code so that the address and size of a requested descriptor can be given
|
||||||
* to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
|
* to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
|
||||||
|
|
|
@ -91,6 +91,8 @@
|
||||||
void EVENT_USB_Device_Connect(void);
|
void EVENT_USB_Device_Connect(void);
|
||||||
void EVENT_USB_Device_Disconnect(void);
|
void EVENT_USB_Device_Disconnect(void);
|
||||||
|
|
||||||
|
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo);
|
||||||
|
|
||||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress);
|
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -54,12 +54,17 @@
|
||||||
* will enumerate as a regular COM port on the host, which can then be opened and data exchanged between the XMEGA and Host as if
|
* will enumerate as a regular COM port on the host, which can then be opened and data exchanged between the XMEGA and Host as if
|
||||||
* the XMEGA was connected directly to the host's serial port. If the pin is pulled low by shorting it to GND (pin 10), the device
|
* the XMEGA was connected directly to the host's serial port. If the pin is pulled low by shorting it to GND (pin 10), the device
|
||||||
* will enumerate as an AVRISP-MKII to the host, so that the XMEGA can be reprogrammed by AVRStudio or other compatible software
|
* will enumerate as an AVRISP-MKII to the host, so that the XMEGA can be reprogrammed by AVRStudio or other compatible software
|
||||||
* such as avrdude.
|
* such as avrdude by connecting to the board as if it was an Atmel AVRISP-MKII programmer.
|
||||||
*
|
*
|
||||||
* After running this project for the first time on a new computer, you will need to supply the .INF file located in this project
|
* After running this project in serial bridge mode for the first time on a new computer, you will need to supply the .INF file
|
||||||
* project's directory as the device's driver when running under Windows. This will enable Windows to use its inbuilt CDC drivers,
|
* located in this project project's directory as the device's driver when running under Windows. This will enable Windows to use
|
||||||
* negating the need for custom drivers for the device. Other Operating Systems should automatically use their own inbuilt CDC-ACM
|
* its inbuilt CDC virtual serial drivers, negating the need for custom drivers for the device. Other Operating Systems should
|
||||||
* drivers.
|
* automatically use their own inbuilt CDC-ACM drivers.
|
||||||
|
*
|
||||||
|
* In serial bridge mode, the UART baud rate can be altered through the host terminal software to select a new baud rate - the default
|
||||||
|
* baud is 9600. Note that parity, data bits and stop bits are fixed at none, eight and one respectively can cannot be altered. Changes
|
||||||
|
* to the connection's parity, data bits or stop bits are ignored by the firmware. As the serial link between the controllers on the
|
||||||
|
* XPLAIN is software emulated by the USB AVR, not all baud rates will work correctly.
|
||||||
*
|
*
|
||||||
* This project relies on files from the LUFA AVRISP-MKII project for compilation.
|
* This project relies on files from the LUFA AVRISP-MKII project for compilation.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue