Related pages:
// *************************************************************** // ** CONFIGURATION WITH USB ** // *************************************************************** //! The following clock configuraiton can be used for USB operation //! It allows to operate USB using On-Chip RC oscillator at 48MHz //! The RC oscillator is calibrated via USB Start Of Frame //! Clk USB = 48MHz (used by USB) //! Clk sys = 48MHz //! Clk cpu/per = 24MHz #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC #define CONFIG_OSC_RC32_CAL 48000000UL #define CONFIG_OSC_AUTOCAL OSC_ID_RC32MHZ #define CONFIG_OSC_AUTOCAL_REF_OSC OSC_ID_USBSOF #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_2 #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1
//! Device definition (mandatory) #define USB_DEVICE_VENDOR_ID 0x03EB #define USB_DEVICE_PRODUCT_ID 0x2404
/** * \file stdio_demo.h * \date 2011-11-13 * \brief Stdin / Stdout Demo * \author Rolf Hemmerling, http://www.hemmerling.com */ #ifndef STDIO_DEMO_H_ #define STDIO_DEMO_H_ // #define USE_EXTERNAL_STDIOLIB #undef USE_EXTERNAL_STDIOLIB #include <asf.h> #include <stdio.h> #include <sleepmgr.h> #include <sysclk.h> void system_init(void); void graphics_welcome(void); void graphics_print(uint32_t aValue); void communication_welcome(void); int communication_start(void); void avrstdio_demo(void); int main(void); #endif /* STDIO_DEMO_H_ */
/**
* \file stdio_demo.h
* \date 2011-11-13
* \brief Stdin / Stdout Demo
* \author Rolf Hemmerling, http://www.hemmerling.com
*/
#include "avrstdio.h"
#include "stdio_demo.h"
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
FILE uart_str_external = FDEV_SETUP_STREAM(uart_putchar_external, uart_getchar_external, _FDEV_SETUP_RW);
/**
* \brief General system initialization
*/
void system_init(void)
{
/* Initialize the microcontroller board */
board_init();
/* Initialize and enable the ITs routine */
irq_initialize_vectors();
cpu_irq_enable();
/* Initialize the sleep manager service */
sleepmgr_init();
/* Initialize the clock service */
sysclk_init();
}
/**
* \brief Print a welcome message on the graphics system of XMEGA-A3BU
*/
void graphics_welcome(void)
{
/**
* After initialization the example will write the "Stdin / Stdout Demo"
* to position 0, 0 on the display.
* Use the system font sysfont.
*/
gfx_mono_init();
ioport_set_pin_high(NHD_C12832A1Z_BACKLIGHT);
st7565r_set_contrast ( ST7565R_DISPLAY_CONTRAST_MIN );
gfx_mono_draw_string("Stdin / Stdout Demo", 0, 0, &sysfont);
}
/**
* \brief Print a number on the graphics system of XMEGA-A3BU
*/
void graphics_print(uint32_t aValue)
{
char aStringBuf[15];
snprintf(aStringBuf, sizeof(aStringBuf), "%12lu", aValue);
gfx_mono_draw_string(aStringBuf, 8, 8, &sysfont);
}
/**
* \brief Print a welcome message by Stdout
*/
void communication_welcome(void)
{
printf("Stdin / Stdout Demo\n");
}
/**
* \brief Start of the Stdin / Stdout communication
*/
int communication_start(void)
{
int aKeyboardInput = 0;
/* Wait for a single "blindly typed" keyboard input */
while (aKeyboardInput == 0)
{
aKeyboardInput = getchar();
};
return (aKeyboardInput);
}
/**
* \brief Demo of communication by Stdin / Stdout
*/
void avrstdio_demo(void)
{
int aStartCommand;
graphics_welcome();
#ifdef USE_EXTERNAL_STDIOLIB
avrstdio_start_external();
stdout = &uart_str_external;
stdin = &uart_str_external;
#else
avrstdio_start();
stdout = &uart_str;
stdin = &uart_str;
#endif
aStartCommand = communication_start();
communication_welcome();
uint32_t aCounter = 0u;
while (true) {
graphics_print(aCounter);
printf("-Hello World %12lu-", aCounter);
aCounter++;
}
}
/**
* \brief Main entry of example application
*/
int main(void)
{
system_init();
avrstdio_demo();
}
/** * \file avrstdio.h * \date 2011-11-13 * \brief Stdin / Stdout for Atmel AVR XMEGA-A3BU Xplained kit", by CDC protocol via USB * \author Rolf Hemmerling, http://www.hemmerling.com * * \details Include these statements in your applicatation * FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); * stdout = &uart_str; * stdin = &uart_str; */ #ifndef AVRSTDIO_H_ #define AVRSTDIO_H_ #include <asf.h> #include <stdio.h> #include <sleepmgr.h> #include <sysclk.h> #include <udc.h> int uart_putchar(char c, FILE *stream); int uart_getchar(FILE *stream); void avrstdio_start(void); void avrstdio_stop(void); int uart_putchar_external(char c, FILE *stream); int uart_getchar_external(FILE *stream); void avrstdio_start_external(void); void avrstdio_stop_external(void); #endif /* AVRSTDIO_H_ */
/**
* \file avrstdio.c
* \date 2011-11-13
* \brief Stdin / Stdout for Atmel AVR XMEGA-A3BU Xplained kit", by CDC protocol via USB
* \author Rolf Hemmerling, http://www.hemmerling.com
*/
#include "avrstdio.h"
/**
* \brief Send character c to CDC
*/
int uart_putchar(char c, FILE *stream)
{
if (c == '\n')
uart_putchar('\r', stream);
udi_cdc_putc(c);
return 0;
}
/**
* \brief Receive a character by CDC.
*/
int uart_getchar(FILE *stream)
{
uint8_t c;
c = udi_cdc_getc();
return c;
}
/**
* \brief Initialization of the Stdio communication
*/
void avrstdio_start(void)
{
/* Initialize the microcontroller board */
// board_init();
/* Initialize and enable the ITs routine */
// irq_initialize_vectors();
// cpu_irq_enable();
/* Initialize the sleep manager service */
// sleepmgr_init();
/* Initialize the clock service */
// sysclk_init();
/* Enable the USB device stack */
udc_start();
/* Attach the USB device to the host ( to start communications ) */
udc_attach();
}
/**
* \brief Stop of the Stdio communication
*/
void avrstdio_stop(void)
{
// By stopping USB communications during the application runtime,
// you risk that some previous output is not delivered :-(
// If you don't delay the stop of the USB connection, there will be no output.
// cdc_delay();
/* Detach the USB device to the host ( to start communications ) */
// udc_detach();
/* Disable the USB device stack */
// udc_stop();
// cpu_irq_disable();
}
int aKeyboardInput = 0;
while (aKeyboardInput == 0) { aKeyboardInput = udi_cdc_getc(); };
int aKeyboardInput = 0;
while (aKeyboardInput == 0) { aKeyboardInput = getchar(); };