Added VirtualSerial_LCD demo firmware and updated avrlib to compile with "Atmel AVR 8-bit Toolchain 3.4.1 - Linux 32-bit".

This commit is contained in:
opendous
2013-03-18 17:20:53 +00:00
parent 9fe665ba3a
commit 39919e6ee5
16 changed files with 853 additions and 52 deletions

View File

@@ -192,9 +192,9 @@ const USB_Descriptor_String_t PROGMEM LanguageString =
*/ */
const USB_Descriptor_String_t PROGMEM ManufacturerString = const USB_Descriptor_String_t PROGMEM ManufacturerString =
{ {
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, .Header = {.Size = USB_STRING_LEN(20), .Type = DTYPE_String},
.UnicodeString = L"Dean Camera" .UnicodeString = L"www.micropendous.org"
}; };
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form, /** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
@@ -203,9 +203,9 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString =
*/ */
const USB_Descriptor_String_t PROGMEM ProductString = const USB_Descriptor_String_t PROGMEM ProductString =
{ {
.Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, .Header = {.Size = USB_STRING_LEN(30), .Type = DTYPE_String},
.UnicodeString = L"LUFA CDC Demo" .UnicodeString = L"VirtualSerial HD44780 LCD Demo"
}; };
/** 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"

View File

@@ -37,7 +37,7 @@
* the demo and is responsible for the initial application hardware configuration. * the demo and is responsible for the initial application hardware configuration.
*/ */
#include "VirtualSerial.h" #include "VirtualSerial_LCD.h"
// Global buffer for use with STDIO functions // Global buffer for use with STDIO functions
@@ -79,6 +79,9 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
*/ */
static FILE USBSerialStream; static FILE USBSerialStream;
// global variable for use with HD44780 LCD display
volatile uint8_t lcd_character_count;
volatile uint8_t lcd_current_line;
/** Main program entry point. This routine contains the overall program flow, including initial /** Main program entry point. This routine contains the overall program flow, including initial
* setup of all components and the main program loop. * setup of all components and the main program loop.
@@ -107,14 +110,14 @@ int main(void)
/** Configures the board hardware and chip peripherals for the demo's functionality. */ /** Configures the board hardware and chip peripherals for the demo's functionality. */
void SetupHardware(void) void SetupHardware(void)
{ {
/* Disable watchdog if enabled by bootloader/fuses */ // Disable watchdog if enabled by bootloader/fuses
MCUSR &= ~(1 << WDRF); MCUSR &= ~(1 << WDRF);
wdt_disable(); wdt_disable();
/* Disable clock division */ // Disable clock division
clock_prescale_set(clock_div_1); clock_prescale_set(clock_div_1);
/* Disable JTAG; allows upper nibble of Port F to be used as GPIO */ // Disable JTAG; allows upper nibble of Port F to be used as GPIO
#if ( defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \ #if ( defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \ defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \ defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
@@ -122,7 +125,26 @@ void SetupHardware(void)
JTAG_DISABLE(); JTAG_DISABLE();
#endif #endif
/* Hardware Initialization */
// Hardware Initialization
// 16-bit Timer1 Initialization
TCCR1A = 0; //start the timer
//TCCR1B = (1 << CS10); // no Timer1 prescaling, use CLK
TCCR1B = (1 << CS12); // prescale Timer1 by CLK/256
// 8000000 / 256 = 31250 ticks per second
// 16-bit = 2^16 = 65536 maximum ticks for Timer1
// 65536 / 31250 =~ 2.1
// so Timer1 will overflow back to 0 about every 2 seconds
uint16_t Timer1Val = TCNT1; // get current Timer1 value
Timer1Val = 345;
// AVRlib HD44780 LCD initialization
lcdInit();
rprintfInit(lcdDataWrite); // direct rprintf to LCD
lcdClear(); // clear the LCD
rprintf("GO AVRlib!");
// Hardware Initialization
LEDs_Init(); LEDs_Init();
LEDs_TurnOnLEDs(LEDS_LED1); LEDs_TurnOnLEDs(LEDS_LED1);
DISABLE_VOLTAGE_TXRX(); // used on Micropendous REV1/2 boards DISABLE_VOLTAGE_TXRX(); // used on Micropendous REV1/2 boards
@@ -160,23 +182,62 @@ void EVENT_USB_Device_ControlRequest(void)
} }
uint16_t firstNumber = 12345;
void MainTask(void) void MainTask(void)
{ {
int count = 0; int tempInt = 0;
uint8_t tempChar = 0;
// If the host has sent data then echo it back // example usage
// Throughput is maximized if the full EP buffer is read and sent each time if (firstNumber == 12345) {
// Throughput approaches CDC_TXRX_EPSIZE kbytes/second and depends on transfer size from host lcdClear();
if ((count = fread(&buffer, 1, CDC_TXRX_EPSIZE, &USBSerialStream)) > 0) { rprintfChar('#'); // print a single character to the LCD
fwrite(&buffer, 1, count, &USBSerialStream); // print a value to the LCD in Base-10 using 5 digits. It is FALSE that the
// number can be negative (so it is positive) and use '0' to pad to 5 digits
rprintfNum(10, 5, FALSE, '0', firstNumber);
rprintf(" ABC"); // print some text to the LCD
lcdGotoXY(0, 1); // go to the first character of the second line (counting starts at 0)
lcdProgressBar(100, 255, 16); // display a progress bar of 100/255 using 16 characters from current XY position
lcdGotoXY(0, 0); // return to start position
firstNumber = 0; // do not run this if (...) code again
}
// while there are characters in the USB stream, write them to LCD
// Each character is written sequentially,
// first to the top line, then to the next, etc...
while ((tempInt = fgetc(&USBSerialStream)) > 0)
{
tempChar = (uint8_t)tempInt;
// send char back for echo'ing on terminal
fputc(tempChar, &USBSerialStream);
lcd_character_count++;
rprintfChar(tempChar); // print char to the LCD
// once we hit the end of a single line, loop to next line
if (lcd_character_count >= LCD_LINE_LENGTH)
{
lcd_character_count = 0;
lcd_current_line++;
// once we hit the end of the last line, loop to the first line
if (lcd_current_line >= LCD_LINES)
{
lcd_current_line = 0;
}
lcdGotoXY(0, lcd_current_line);
}
} }
// If HWB Button is pressed then send formatted strings // If HWB Button is pressed then send formatted strings over VirtualSerial and to LCD
if (Buttons_GetStatus()) { if (Buttons_GetStatus()) {
fprintf_P(&USBSerialStream, PSTR("\r\nHWB has been pressed!\r\n")); // send a constant string stored in FLASH fprintf_P(&USBSerialStream, PSTR("\r\nHWB has been pressed!\r\n")); // send a constant string stored in FLASH
fprintf(&USBSerialStream, "PORTD = %3x\r\n", PIND); // send a string that is dynamic and stored in SRAM fprintf(&USBSerialStream, "PORTB = %3x\r\n", PINB); // send a string that is dynamic and stored in SRAM
rprintf("PORTB=0x");
// print a value to the LCD in Base-16 (Hex) using 2 digits. It is FALSE that the
// number can be negative (so it is positive) and use '0' to pad to 2 digits
rprintfNum(16, 2, FALSE, '0', PINB);
} }
} }

View File

@@ -33,8 +33,8 @@
* Header file for VirtualSerial.c. * Header file for VirtualSerial.c.
*/ */
#ifndef _VIRTUALSERIAL_H_ #ifndef _VIRTUALSERIAL_LCD_H_
#define _VIRTUALSERIAL_H_ #define _VIRTUALSERIAL_LCD_H_
/* Includes: */ /* Includes: */
#include <avr/io.h> #include <avr/io.h>
@@ -50,6 +50,12 @@
#include <LUFA/Drivers/Board/Buttons.h> #include <LUFA/Drivers/Board/Buttons.h>
#include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/USB.h>
#include "global.h"
#include "lcdconf.h"
#include <lcd.h>
#include <timer.h>
#include <rprintf.h>
/* Macros: */ /* Macros: */
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1 #define LEDMASK_USB_NOTREADY LEDS_LED1
@@ -72,5 +78,5 @@
void EVENT_USB_Device_ConfigurationChanged(void); void EVENT_USB_Device_ConfigurationChanged(void);
void EVENT_USB_Device_ControlRequest(void); void EVENT_USB_Device_ControlRequest(void);
#endif #endif // _VIRTUALSERIAL_LCD_H_

View File

@@ -0,0 +1,549 @@
:1000000011C100002EC100002CC100002AC1000057
:1000100028C1000026C1000024C1000022C1000048
:1000200020C100001EC100003DC4000008C5000042
:1000300018C1000016C1000014C1000012C1000068
:100040000C948D0D0C942B0D0C945C0D0AC10000CA
:100050000C94FA0C06C1000004C100000C94A30C1F
:1000600000C10000FEC00000FCC00000FAC000009B
:10007000F8C00000F6C00000F4C00000F2C00000AC
:10008000F0C00000EEC00000ECC00000EAC00000BC
:10009000E8C00000E6C00000474F204156526C699E
:1000A00062210020414243000D0A48574220686106
:1000B00073206265656E2070726573736564210DCF
:1000C0000A00504F5254423D3078003E03560069BA
:1000D0000072007400750061006C005300650072CE
:1000E00000690061006C00200048004400340034C6
:1000F0000037003800300020004C0043004400204E
:1001000000440065006D006F0000002A037700774F
:100110000077002E006D006900630072006F0070B0
:100120000065006E0064006F00750073002E006FA4
:10013000007200670000000403090409023E000287
:100140000100C03209040000010202010005240080
:100150001001042402060524060001070582030895
:1001600000FF09040100020A000000070504021054
:1001700000050705830210000512011001020000AE
:1001800008EB03442001000102DC0130313233343A
:10019000353637383941424344454600001F000098
:1001A00000001F00001F101010101F00001F181863
:1001B00018181F00001F1C1C1C1C1F00001F1E1EE7
:1001C0001E1E1F00001F1F1F1F1F1F0003070F1FE2
:1001D0000F070300001F1F1F1F1F1F001B1B1B1BE0
:1001E0001B1B1B00181C1E1F1E1C18000004040EE5
:1001F0000E1F1F00001F1F0E0E0404000000000051
:1002000000000000000E1915130E0000000E151559
:10021000150E0000000E1315190E0000000E111F20
:10022000110E000011241FBECFEFD0E2DEBFCDBF04
:1002300011E0A0E0B1E0E6EFF1E200E00BBF02C0A8
:1002400007900D92AC33B107D9F71BBE11E0ACE3B8
:10025000B1E001C01D92A538B107E1F70CD10C94B3
:10026000F910CECE84B7877F84BF88E10FB6F894AB
:1002700080936000109260000FBE80E090E020E864
:100280000FB6F89420936100809361000FBE85B78C
:10029000806890E00FB6F89485BF0FBE85BF1092BE
:1002A000800084E08093810080918400909185009B
:1002B0000E94120C8FE49BE024D70E94CA0B00D04E
:1002C0000F9281E0EDB7FEB7818388E990E09383D8
:1002D0008283DCD7219A299A299A73986B9A6C9A0F
:1002E000749A77986F9A0F900F900F90C0C22998C8
:1002F0000895299A089580E191E010D6882311F09D
:1003000090E001C092E085B18D7F892B85B9089579
:1003100080E191E056C5EF92FF920F931F93CF9328
:10032000DF9380910E0190910F0120E389339207B2
:1003300009F057C00E94CA0B83E2E8D6E0900E0194
:10034000F0900F0100E010E08AE065E040E020E37B
:10035000F7D600D00F9281E0ADB7BEB711968C935F
:10036000119783EA90E013969C938E9312978ED701
:100370000F900F900F9080E061E00E94CC0B84E61C
:1003800090E06FEF70E040E10E94490C80E060E097
:100390000E94CC0B10920F0110920E0122C0802FF0
:1003A00090E0BE010E945F0E80915A018F5F8093A2
:1003B0005A01802FABD680915A01803190F0109273
:1003C0005A0180915B018F5F80935B0180915B019B
:1003D000823010F010925B0160915B0180E00E941E
:1003E000CC0BCCE3D1E0CE010E94F40D8C011816A9
:1003F0001906ACF28CB182FD37C000D000D0EDB749
:10040000FEB7D283C18388EA90E0948383830E94FD
:10041000430E23B100D0EDB7FEB73196ADB7BEB7EE
:100420001296DC93CE93119780E091E093838283C0
:10043000248315820E94340E0F900F900F9081E05C
:10044000EDB7FEB7818382EC90E0938382831ED761
:10045000E3B00F900F900F90FF2400E010E080E1D8
:1004600062E040E020E36CD6DF91CF911F910F91C5
:10047000FF90EF900895F6DE80E191E06CE371E08B
:100480002CD6789448DF80E191E0D1D57ED4FACFA4
:10049000923029F0933041F09130E9F417C08EE3A7
:1004A00090E0EBE3F1E01BC0813041F0813018F0C7
:1004B000823089F406C0E7E3F1E005C0EBE0F1E04B
:1004C00002C0EBECF0E0849190E009C082E190E0A2
:1004D000E9E7F1E004C080E090E0E0E0F0E0DA017C
:1004E0001196FC93EE930895209177013091780155
:1004F0002617370720F4B901FC0120E037C0611549
:100500007105D1F72091E8002E772093E800F4CF11
:1005100080917001882309F43FC08530C9F1809132
:10052000E80083FD37C08091E80082FD2BC08091F8
:10053000E80080FF1BC08091F2009091F30006C09C
:1005400021912093F1006150704001966115710571
:1005500019F088309105A0F321E08830910509F069
:1005600020E08091E8008E778093E80061157105A6
:1005700079F6222369F606C080917001882361F024
:10058000853061F08091E80082FFF6CF80E0089529
:1005900083E0089581E0089582E0089583E008955E
:1005A00020917701309178012617370720F4B9019F
:1005B000FC0120E038C061157105D1F72091E800F9
:1005C0002E772093E800F4CF80917001882309F4FE
:1005D00040C08530D1F18091E80083FD38C0809122
:1005E000E80082FD2CC08091E80080FF1CC0809153
:1005F000F2009091F30007C024912093F10031960E
:100600006150704001966115710519F088309105AF
:1006100098F321E08830910509F020E08091E8000E
:100620008E778093E8006115710571F6222361F6DB
:1006300006C080917001882361F0853061F080915F
:10064000E80082FFF6CF80E0089583E0089581E01E
:10065000089582E0089583E00895982F2AC090932A
:10066000E900981739F07091EC002091ED0050915D
:10067000F00003C0242F762F50E021FF19C03091E5
:10068000EB003E7F3093EB003091ED003D7F3093E7
:10069000ED003091EB0031603093EB007093EC0093
:1006A0002093ED005093F0002091EE0027FF08C04A
:1006B0009F5F9730A0F28F708093E90081E00895EA
:1006C00080E008950F931F93CF93DF93162FEC01D3
:1006D00000E02AC09881992329F16B81E981FA8190
:1006E0002C81892F8F70873018F56295660F660F01
:1006F000607C991F9927991F692B223010F096E092
:1007000001C092E028E030E040E003C04F5F220FDC
:10071000331F2E173F07D0F34295407F492B9DDFB3
:10072000882331F00F5F25960117A1F681E001C003
:1007300080E0DF91CF911F910F9108958091710119
:1007400087FF13C004C0809170018823B9F08091A5
:10075000E80082FFF8CF8091E8008B778093E80073
:10076000089580917001882349F08091E80080FF0E
:10077000F8CF8091E8008E778093E800089580910B
:10078000E4009091E50045E601C0C9012091EC002C
:1007900020FF23C02091E80020FD15C020917001AA
:1007A000222399F0253099F02091EB0025FD11C00E
:1007B0002091E4003091E5002817390739F34150C2
:1007C00021F784E0089580E0089582E0089583E0B1
:1007D000089581E0089580E008952091E80022FFC7
:1007E000DDCFF9CF0F931F93CF93DF934ED055D02A
:1007F000C8EDD0E088818F7788838881806888837E
:1008000088818F7D8883E7EDF0E080818068808338
:1008100019BC1092700110926C0110926E0110922E
:100820006D0100EE10E0F80180818B7F808388816C
:100830008160888380E060E042E00FDFE1EEF0E07D
:1008400080818E7F8083E2EEF0E080818160808312
:10085000808188608083F80180818E7F8083888199
:1008600080618883DF91CF911F910F910895E8ED0A
:10087000F0E080818F7E8083E7EDF0E08081816011
:10088000808381E080936F01ADCFE8EDF0E080815F
:100890008C7F80831092E20008951092DA0010920B
:1008A000E10008951F920F920FB60F920BB60F92B0
:1008B00011242F933F934F935F936F937F938F9365
:1008C0009F93AF93BF93EF93FF938091E10082FFDB
:1008D0000AC08091E20082FF06C08091E1008B7F18
:1008E0008093E10051D28091DA0080FF1DC0809199
:1008F000D80080FF19C08091DA008E7F8093DA00E3
:100900008091D90080FF0CC084E189BD86E189BD5A
:1009100009B400FEFDCF81E080937001E8DC04C0E3
:1009200019BC10927001E5DC8091E10080FF18C0D5
:100930008091E20080FF14C08091E2008E7F80935E
:10094000E2008091E20080618093E2008091D80013
:1009500080628093D80019BC85E08093700114D226
:100960008091E10084FF2DC08091E20084FF29C0C6
:1009700084E189BD86E189BD09B400FEFDCF809187
:10098000D8008F7D8093D8008091E1008F7E809386
:10099000E1008091E2008F7E8093E2008091E2008E
:1009A00081608093E20080916C01882321F4809122
:1009B000E30087FF02C084E001C081E08093700102
:1009C000E3D18091E10083FF27C08091E20083FFA3
:1009D00023C08091E100877F8093E10082E08093D3
:1009E000700110926C018091E1008E7F8093E10094
:1009F0008091E2008E7F8093E2008091E20080612E
:100A00008093E20080E060E042E027DE8091F00029
:100A100088608093F000B8D1FF91EF91BF91AF91C2
:100A20009F918F917F916F915F914F913F912F9106
:100A30000F900BBE0F900FBE0F901F9018951F9236
:100A40000F920FB60F920BB60F9211242F933F9374
:100A50004F935F936F937F938F939F93AF93BF93C6
:100A6000CF93EF93FF93C091E900CF708091EC009A
:100A70001092E9008091F000877F8093F0007894D5
:100A80001DD01092E9008091F00088608093F00002
:100A9000C093E900FF91EF91CF91BF91AF919F91EA
:100AA0008F917F916F915F914F913F912F910F9017
:100AB0000BBE0F900FBE0F901F9018951F93CF93F2
:100AC000DF93CDB7DEB7AC970FB6F894DEBF0FBE9D
:100AD000CDBF80E0E1E7F1E09091F10091938F5F6D
:100AE0008830D1F715DC8091E80083FF35C1809113
:100AF000710120917201253009F484C0263040F440
:100B00002130A1F1213070F0233009F025C12EC031
:100B1000283009F4F3C0293009F402C1263009F065
:100B20001BC193C0803821F0823809F015C108C07C
:100B300080916D0190916E01992371F082600CC0DB
:100B4000809175018F708093E9009091EB0081E0B6
:100B500095FF80E01092E9009091E800977F9093D4
:100B6000E8008093F1001092F100D3C0882319F0BF
:100B7000823009F0F1C090E08F719070009729F0F9
:100B80008230910509F0E8C00BC08091730181307B
:100B900009F0E2C0233009F080E080936E012CC0A0
:100BA00080917301882341F5209175012F7009F41C
:100BB000D3C02093E9008091EB0080FF1DC080919D
:100BC0007201833021F48091EB00806213C0809128
:100BD000EB0080618093EB0081E090E002C0880F21
:100BE000991F2A95E2F78093EA001092EA0080911B
:100BF000EB0088608093EB001092E9008091E800A0
:100C0000877F8AC0882309F0A7C0109173011F77DE
:100C10008091E3008078812B8093E3008091E8004D
:100C2000877F8093E8008ADD8091E80080FFFCCF19
:100C30008091E30080688093E300112311F083E04A
:100C400001C082E08093700187C08058823008F034
:100C500083C0809173019091740123E08C3D9207D1
:100C6000A9F583E08C838AE28B835FB7F894DE0179
:100C7000139680E090E04EE061E2E42FF0E06093B4
:100C80005700E49180FF03C0E295EF704F5FEF7073
:100C90002E2F30E0EA3018F0295C3F4F02C0205D73
:100CA0003F4F13963C932E931297019612968431E0
:100CB000910519F75FBF8091E800877F8093E80076
:100CC000CE0103966AE270E00FDC12C060917501FC
:100CD000AE014F5F5F4FDCDBBC01009709F43CC005
:100CE0008091E800877F8093E80089819A8158DCB1
:100CF0008091E8008B778093E8002EC0803861F502
:100D00008091E800877F8093E80080916C01809358
:100D1000F1008091E8008E778093E8000FDD1CC021
:100D20008823D1F4909173019230B0F48091E8005F
:100D3000877F8093E80090936C0100DD80916C01C7
:100D4000882321F48091E30087FF02C084E001C082
:100D500081E080937001CFDA8091E80083FF0AC0C0
:100D60008091E800877F8093E8008091EB008062AB
:100D70008093EB00AC960FB6F894DEBF0FBECDBFEC
:100D8000DF91CF911F9108950895CF9380917001C5
:100D90008823A9F08091E9008F709091EC0090FF7A
:100DA00002C0C0E801C0C0E0C82B1092E9008091E9
:100DB000E80083FF01C082DECF70C093E900CF91CD
:100DC0000895CF93DF93EC018091E80083FFA3C0E7
:100DD000888190E0209175013091760128173907BC
:100DE00009F099C080917201813269F0823220F459
:100DF000803209F090C03CC0823209F46BC083326B
:100E000009F089C07AC080917101813A09F083C0EC
:100E10008091E800877F8093E8008091E80080FF60
:100E2000FCCF8C899D89AE89BF898093F100492FC1
:100E30005A2F6B2F77274093F100AD016627772754
:100E40004093F1008B2F9927AA27BB278093F100AD
:100E5000888D8093F100898D8093F1008A8D809335
:100E6000F1008091E8008E778093E80067DC53C042
:100E700080917101813209F04EC08091E800877F36
:100E80008093E80005C080917001882309F443C075
:100E90008091E80082FFF7CF3091F1002091F100BE
:100EA0009091F1008091F1003C8B2D8B9E8B8F8B6C
:100EB0008091F100888F8091F100898F8091F100FD
:100EC0008A8F8091E8008B778093E80037DCCE0131
:100ED00017D121C0809171018132E9F48091E8003D
:100EE000877F8093E8002ADC8091730190917401E0
:100EF000998B888BCE0104D10EC080917101813213
:100F000051F48091E800877F8093E80017DCCE01E0
:100F100060917301F5D0DF91CF910895CF93DF9366
:100F2000EC014096FC018BE0DF011D928A95E9F708
:100F300082E08C83898783E08E87CE01019661E011
:100F4000C1DB882359F0CE01069661E0BBDB882324
:100F500029F0CE010B9661E0B5DB01C080E0DF91A6
:100F6000CF910895CF93FC01C62F809170018430FA
:100F7000E9F44489558966897789411551056105E8
:100F80007105A1F081818F708093E9008091E80064
:100F900085FD08C08091E8008E778093E800EFDB44
:100FA000882329F4C093F10080E001C082E0CF9152
:100FB0000895282FFB0184859585622FD3DF882330
:100FC00019F08FEF9FEF089580E090E00895FC0105
:100FD00080917001843029F5448955896689778923
:100FE0004115510561057105E1F081818F70809394
:100FF000E9008091F2009091F3000097A1F09091A8
:10100000E8008091E8008E778093E80095FD0DC0A0
:10101000B6DB882359F49091E8009E779093E8001E
:10102000089582E0089580E0089580E00895209179
:101030007001243099F4FC014489558966897789C7
:10104000411551056105710549F021812F702093EB
:10105000E9002091E80020FF01C0B9CF0895FC010C
:1010600080917001843051F544895589668977896A
:10107000411551056105710509F186818F708093D5
:10108000E9008091E80082FF1CC08091F2009091FD
:10109000F300009721F08091F10090E002C08FEF03
:1010A0009FEF2091F2003091F3002115310559F4A2
:1010B0002091E8002B772093E80008958FEF9FEFB1
:1010C00008958FEF9FEF0895FC0184859585C7DF14
:1010D00097FF02C08EEF9FEF0895FB012EE0DB012A
:1010E0001D922A95E9F723E0238329ED37E0318724
:1010F000208724E638E03387228795878487089500
:10110000089590934B0180934A010895CF93C82F7F
:101110008A3031F4E0914A01F0914B018DE009955C
:10112000E0914A01F0914B018C2F0995CF910895E0
:10113000E82FF0E0EF70F070E557FE4F8491E6CFB6
:101140002F923F924F925F926F927F928F929F92D7
:10115000AF92BF92CF92DF92EF92FF920F931F93C5
:10116000CF93DF93CDB7DEB7A0970FB6F894DEBF6D
:101170000FBECDBF282EA62EB42E722E6701780189
:10118000442351F0F7FE08C066277727CB016C197E
:101190007D098E099F0902C0C701B6016A2C6A94B5
:1011A00021E0BB2009F420E0621A18A23324442471
:1011B0005524A2019101F6D4DC01CB01FC01EF70B2
:1011C000F070E557FE4FE491EF8FC901DA012EE18F
:1011D000822E912C8C0E9D1E062D1CC00097A10501
:1011E000B10591F0BC01CD01A2019101DBD4DC017C
:1011F000CB01FC01EF70F070E557FE4FE491D40194
:10120000EC93C901DA0102C0F40170820150089424
:1012100081089108002311F78E01015E1F4F061906
:101220001109BB20C1F001501040F7FE02C08DE251
:101230000AC0C114D104E104F10421F08BE2F801E9
:10124000808309C080E2D8018C9305C0F8018191A8
:101250008F015CDFAA94AA20C9F7A0960FB6F89474
:10126000DEBF0FBECDBFDF91CF911F910F91FF90D9
:10127000EF90DF90CF90BF90AF909F908F907F9036
:101280006F905F904F903F902F9008954F925F9294
:101290006F927F928F929F92AF92BF92CF92DF9286
:1012A000EF92FF920F931F93CF93DF930F92CDB7DF
:1012B000DEB78C88CD88DE8867E1E62EF12CEC0E57
:1012C000FD1E7AE0472E512C19C08823A1F480E03E
:1012D00090E00F90DF91CF911F910F91FF90EF90D1
:1012E000DF90CF90BF90AF909F908F907F906F9046
:1012F0005F904F9008950ADF57017501D60111964E
:10130000F601882019F06D01849102C080816D0181
:101310008532D9F69D012F5F3F4F882021F069016A
:10132000FD01849102C08C916901843629F08837CF
:1013300081F0833601F706C05AE0652E712C00E17A
:1013400017E20CC0F701808122E030E0E20EF31ECC
:10135000D2CF40E1642E712C00E010E132E0A32EE8
:10136000B12CAE0CBF1CF701E080F180843699F4FB
:10137000F7FE0EC0F094E194F108F3948DE2C6DE1E
:1013800007C0C801B201FAD38B016230710518F0B1
:10139000E016F106B0F3C701B801F0D3982E862FFE
:1013A0009983C6DEE92C9981F92EC801B301E6D3F1
:1013B0008B016115710579F7A0CF589859985A9803
:1013C000509A519A529A8AB18F708AB98BB1806FB4
:1013D0008BB9089558988AB18F708AB98BB1806F94
:1013E0008BB9599A5A9A66C05A98000000000000BA
:1013F00000000000000000000000000000000000ED
:1014000000000000000000000000000000000000DC
:1014100000000000000000000000000000000000CC
:1014200000005A9A000000000000000000000000C8
:1014300000000000000000000000000000000000AC
:10144000000000000000000000000000000000009C
:101450000000000000000000000000005A9800009A
:10146000000000000000000000000000000000007C
:10147000000000000000000000000000000000006C
:10148000000000000000000000000000000000005C
:101490000000000000005A9A000000000000000058
:1014A000000000000000000000000000000000003C
:1014B000000000000000000000000000000000002C
:1014C000000000000000000000000000000000001C
:1014D0004F998ACF5A980895CF93DF930F92CDB743
:1014E000DEB7898377DF589859985A9A9AB1906FE6
:1014F0009AB92BB18981982F907F2F70922B9BB92D
:1015000000000000000000000000000000000000DB
:1015100000000000000000000000000000000000CB
:1015200000000000000000000000000000000000BB
:1015300000000000000000005A98000000000000B9
:10154000000000000000000000000000000000009B
:10155000000000000000000000000000000000008B
:10156000000000000000000000000000000000007B
:1015700000005A9A9BB18295807F9F70892B8BB90E
:10158000000000000000000000000000000000005B
:10159000000000000000000000000000000000004B
:1015A000000000000000000000000000000000003B
:1015B00000000000000000005A988AB18F708AB9BC
:1015C0008BB1806F8BB90F90DF91CF91089502DFBF
:1015D0008AB18F708AB98BB1806F8BB95898599A3C
:1015E0005A9A000000000000000000000000000007
:1015F00000000000000000000000000000000000EB
:1016000000000000000000000000000000000000DA
:101610000000000000000000000089B1807F5A989F
:1016200000000000000000000000000000000000BA
:1016300000000000000000000000000000000000AA
:10164000000000000000000000000000000000009A
:1016500000000000000000005A9A00000000000096
:10166000000000000000000000000000000000007A
:10167000000000000000000000000000000000006A
:10168000000000000000000000000000000000005A
:10169000000099B15A9892959F70892B0895CF9325
:1016A000DF930F92CDB7DEB7898394DE589A5998AD
:1016B0005A9A9AB1906F9AB92BB18981982F907FDD
:1016C0002F70922B9BB9000000000000000000006A
:1016D000000000000000000000000000000000000A
:1016E00000000000000000000000000000000000FA
:1016F00000000000000000000000000000005A98F8
:1017000000000000000000000000000000000000D9
:1017100000000000000000000000000000000000C9
:1017200000000000000000000000000000000000B9
:1017300000000000000000005A9A9BB18295807F53
:101740009F70892B8BB90000000000000000000092
:101750000000000000000000000000000000000089
:101760000000000000000000000000000000000079
:1017700000000000000000000000000000005A9877
:101780008AB18F708AB98BB1806F8BB90F90DF915E
:10179000CF91089581E0A0CE623031F0633031F016
:1017A000613029F4805C03C08C5E01C08C5A806873
:1017B00093CECF92DF92FF920F931F93CF93DF933D
:1017C0000F92CDB7DEB78C01F42E698300DF982F1E
:1017D0009F77FF0CFF0CFF0C6981660F660F660F89
:1017E000CC24DD24060F111D8C2D8F0D8064998370
:1017F00073DEF801EC0DFD1D849151DF0894C11CCE
:10180000D11C998188E0C816D10471F7892F8068AE
:1018100063DE0F90DF91CF911F910F91FF90DF90CA
:10182000CF900895CF93DF93C8DD88E255DE81E045
:1018300053DE80E69AEE86D086E04EDE8CE04CDE0B
:1018400082E04ADE80E848DECCE9D1E0CE0160E00B
:1018500040E0AFDFCE0161E041E0ABDFCE0162E00E
:1018600042E0A7DFCE0163E043E0A3DFCE0164E006
:1018700044E09FDFCE0165E045E09BDFCE0166E0FE
:1018800046E097DFCE0167E047E093DFDF91CF913D
:1018900008958F929F92AF92BF92CF92DF92EF9274
:1018A000FF921F93CF93DF93C42F9C01220F331F0E
:1018B000280F391F220F331F4C2F50E0249FC001E7
:1018C000259F900D349F900D112458D14B01AA24CF
:1018D000BB24C501B40126E030E040E050E062D115
:1018E000162FCC24DD247601D0E01EC0D701C6011E
:1018F0000596A11DB11D88169906AA06BB0638F4E7
:101900008C149D04AE04BF0420F0812F03C085E039
:1019100001C080E0C4DEDF5F86E090E0A0E0B0E0E0
:10192000C80ED91EEA1EFB1EDC1701F7DF91CF910E
:101930001F91FF90EF90DF90CF90BF90AF909F905E
:101940008F90089508951F920F920FB60F920BB6C5
:101950000F9211242F933F934F935F936F937F9335
:101960008F939F93AF93BF93EF93FF9380917901F0
:1019700090917A01A0917B01B0917C010196A11D0B
:10198000B11D8093790190937A01A0937B01B0936C
:101990007C0180917D0190917E01A0917F01B091A9
:1019A00080010196A11DB11D80937D0190937E0160
:1019B000A0937F01B093800180914C0190914D01E3
:1019C000009729F0E0914C01F0914D010995FF91AC
:1019D000EF91BF91AF919F918F917F916F915F91A7
:1019E0004F913F912F910F900BBE0F900FBE0F9014
:1019F0001F9018951F920F920FB60F920BB60F9271
:101A000011242F933F934F935F936F937F938F9303
:101A10009F93AF93BF93EF93FF9380914E0190916B
:101A20004F01009729F0E0914E01F0914F01099587
:101A3000FF91EF91BF91AF919F918F917F916F91A6
:101A40005F914F913F912F910F900BBE0F900FBE62
:101A50000F901F9018951F920F920FB60F920BB612
:101A60000F9211242F933F934F935F936F937F9324
:101A70008F939F93AF93BF93EF93FF938091500108
:101A800090915101009729F0E0915001F09151019E
:101A90000995FF91EF91BF91AF919F918F917F91A8
:101AA0006F915F914F913F912F910F900BBE0F90CF
:101AB0000FBE0F901F9018951F920F920FB60F92A6
:101AC0000BB60F9211242F933F934F935F936F9315
:101AD0007F938F939F93AF93BF93EF93FF938091E7
:101AE000520190915301009729F0E0915201F09139
:101AF00053010995FF91EF91BF91AF919F918F9104
:101B00007F916F915F914F913F912F910F900BBEFD
:101B10000F900FBE0F901F9018951F920F920FB647
:101B20000F920BB60F9211242F933F934F935F9315
:101B30006F937F938F939F93AF93BF93EF93FF9395
:101B40008091540190915501009729F0E091540142
:101B5000F09155010995FF91EF91BF91AF919F9140
:101B60008F917F916F915F914F913F912F910F9046
:101B70000BBE0F900FBE0F901F901895AA1BBB1B9A
:101B800051E107C0AA1FBB1FA617B70710F0A61B7D
:101B9000B70B881F991F5A95A9F780959095BC019E
:101BA000CD010895A1E21A2EAA1BBB1BFD010DC099
:101BB000AA1FBB1FEE1FFF1FA217B307E407F507FD
:101BC00020F0A21BB30BE40BF50B661F771F881FD9
:101BD000991F1A9469F760957095809590959B016F
:101BE000AC01BD01CF010895CF93DF93EC012B81B0
:101BF00020FF35C026FF09C02F7B2B838E819F815C
:101C000001969F838E838A8128C022FF0FC0E881BE
:101C1000F9818081992787FD9095009719F42062BA
:101C20002B831DC03196F983E88311C0EA85FB85BB
:101C3000CE01099597FF0BC02B813FEF8F3F930794
:101C400011F480E101C080E2822B8B8308C02E81D9
:101C50003F812F5F3F4F3F832E8390E002C08FEF85
:101C60009FEFDF91CF910895CF93DF93CDB7DEB78C
:101C7000AE01475F5F4F8D819E816F8178854BD02C
:101C8000DF91CF9108950F931F93CF93DF93CDB73B
:101C9000DEB70F811885AE01455F5F4FF801838184
:101CA00088608383C80169857A8535D0F8012381EE
:101CB000277F2383DF91CF911F910F9108950F9379
:101CC0001F93CF93DF938C01EB018B8181FF1BC0AE
:101CD00082FF0DC02E813F818C819D81281739079D
:101CE00064F4E881F9810193F983E88306C0E8850B
:101CF000F985802F0995009731F48E819F81019697
:101D00009F838E8302C00FEF1FEFC801DF91CF9139
:101D10001F910F9108952F923F924F925F926F9271
:101D20007F928F929F92AF92BF92CF92DF92EF926B
:101D3000FF920F931F93CF93DF93CDB7DEB72D970D
:101D40000FB6F894DEBF0FBECDBF3C017D876C8718
:101D50005A01FC0117821682838181FFBBC12E01CB
:101D60000894411C511CF3019381EC85FD8593FD82
:101D7000859193FF8191FD87EC87882309F4A6C1A3
:101D8000853241F493FD859193FF8191FD87EC8726
:101D9000853221F490E0B30192DFE5CFFF24EE24F9
:101DA00010E01032B0F48B3269F08C3228F48032BB
:101DB00051F0833271F40BC08D3239F0803349F425
:101DC00011602CC01260146029C0186027C0106117
:101DD00025C017FD2EC0282F20532A3098F416FF57
:101DE00008C08F2D880FF82EFF0CFF0CF80EF20E96
:101DF00015C08E2D880FE82EEE0CEE0CE80EE20ECC
:101E000010620CC08E3221F416FD60C1106406C051
:101E10008C3611F4106802C0883659F4EC85FD85C3
:101E200093FD859193FF8191FD87EC87882309F0CD
:101E3000B8CF982F9554933018F09052933038F4CF
:101E400024E030E0A20EB31E3FE339830FC0833697
:101E500031F0833781F0833509F056C021C0F50198
:101E60008081898322E030E0A20EB31E21E0C22EE1
:101E7000D12C420113C092E0292E312C2A0C3B1C9C
:101E8000F5018080918016FF03C06F2D70E002C0C5
:101E90006FEF7FEFC40144D16C0151011F7714C073
:101EA00082E0282E312C2A0C3B1CF5018080918089
:101EB00016FF03C06F2D70E002C06FEF7FEFC4010B
:101EC00024D16C011068510113FD1AC005C080E2D5
:101ED00090E0B301F4DEEA948E2D90E0C816D906A6
:101EE000B0F30EC0F40117FD859117FF81914F01EA
:101EF00090E0B301E4DEE110EA940894C108D1084F
:101F0000C114D10479F7DFC0843611F0893649F560
:101F1000F50117FF07C080819181A281B38124E080
:101F200030E008C080819181AA2797FDA095BA2F43
:101F300022E030E0A20EB31E012F0F76B7FF08C0DB
:101F4000B095A095909581959F4FAF4FBF4F00687A
:101F5000BC01CD01A2012AE030E0EDD0D82ED4188A
:101F60003EC0853721F41F7E2AE030E020C0197F73
:101F70008F36A9F0803720F4883509F0A7C00BC050
:101F8000803721F0883709F0A1C001C0106114FF2B
:101F900009C0146007C014FF08C0166006C028E01E
:101FA00030E005C020E130E002C020E132E0F50180
:101FB00017FF07C0608171818281938144E050E006
:101FC00006C06081718180E090E042E050E0A40EA4
:101FD000B51EA201B0D0D82ED418012F0F7706FF5E
:101FE00009C00E7FDF1430F404FF06C002FD04C0F8
:101FF0000F7E02C01D2D01C01F2D802F90E004FF19
:102000000CC0FE01ED0DF11D2081203311F4097E7D
:1020100009C002FF06C01E5F05C086789070009759
:1020200009F01F5F802E992403FD11C000FF0CC032
:10203000FD2C1E1548F4FE0CF11A1E2D05C080E281
:1020400090E0B3013CDE1F5F1E15C8F304C01E15EF
:1020500010F4E11A01C0EE2484FE0EC080E390E08B
:10206000B3012DDE82FE1DC081FE03C088E590E035
:1020700010C088E790E00DC0C4018678907000978A
:1020800081F081FC02C080E201C08BE207FD8DE29D
:1020900090E0B30114DE05C080E390E0B3010FDEF1
:1020A000FA94DF14C8F3DA94F201ED0DF11D80818A
:1020B00090E0B30104DEDD20B1F705C080E290E0DE
:1020C000B301FDDDEA94EE20C9F74DCEF301868120
:1020D000978102C08FEF9FEF2D960FB6F894DEBF69
:1020E0000FBECDBFDF91CF911F910F91FF90EF9069
:1020F000DF90CF90BF90AF909F908F907F906F9028
:102100005F904F903F902F900895FC010590615093
:1021100070400110D8F7809590958E0F9F1F0895FD
:10212000FC016150704001900110D8F780959095A6
:102130008E0F9F1F0895FA01AA27283051F12031F0
:1021400081F1E8946F936E7F6E5F7F4F8F4F9F4F4B
:10215000AF4FB1E03ED0B4E03CD0670F781F891F8D
:102160009A1FA11D680F791F8A1F911DA11D6A0F5B
:10217000711D811D911DA11D20D009F468943F910E
:102180002AE0269F11243019305D3193DEF6CF010D
:102190000895462F4770405D4193B3E00FD0C9F7D3
:1021A000F6CF462F4F70405D4A3318F0495D31FD40
:1021B0004052419302D0A9F7EACFB4E0A695979593
:1021C000879577956795BA95C9F700976105710569
:1021D00008959B01AC010A2E0694579547953795B3
:1021E0002795BA95C9F7620F731F841F951FA01D0D
:0621F0000895F894FFCFF2
:1021F600504F525442203D202533780D0A00393085
:102206000083100000010410000001820800000194
:102216000000000000000000000000A120000000F7
:0C222600000200A1010000000000000008
:00000001FF

View File

@@ -0,0 +1,33 @@
//*****************************************************************************
//
// File Name : 'global.h'
// Title : AVR project global include
// Author : Pascal Stang
// Created : 7/12/2001
// Revised : 9/30/2002
// Version : 1.1
// Target MCU : Atmel AVR series
// Editor Tabs : 4
//
// Description : This include file is designed to contain items useful to all
// code files and projects.
//
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************
#ifndef GLOBAL_H
#define GLOBAL_H
// global AVRLIB defines
#include <avrlibdefs.h>
// global AVRLIB types definitions
#include <avrlibtypes.h>
// project/system dependent defines
#define CYCLES_PER_US ((F_CPU+500000)/1000000) // cpu cycles per microsecond
#endif

View File

@@ -0,0 +1,127 @@
/*! \file lcdconf.h \brief Character LCD driver configuration. */
//*****************************************************************************
//
// File Name : 'lcdconf.h'
// Title : Character LCD driver for HD44780/SED1278 displays
// (usable in mem-mapped, or I/O mode)
// Author : Pascal Stang - Copyright (C) 2000-2002
// Created : 11/22/2000
// Revised : 4/30/2002
// Version : 1.1
// Target MCU : Atmel AVR series
// Editor Tabs : 4
//
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************
#ifndef LCDCONF_H
#define LCDCONF_H
// Define type of interface used to access the LCD
// LCD_MEMORY_INTERFACE:
// To use this mode you must supply the necessary hardware to connect the
// LCD to the CPU's memory bus. The CONTROL and DATA registers of the LCD
// (HD44780 chip) must appear in the CPU's memory map. This mode is faster
// than the port interface but requires a little extra hardware to make it
// work. It is especially useful when your CPU is already configured to
// use an external memory bus for other purposes (like accessing memory).
//
// LCD_PORT_INTERFACE:
// This mode allows you to connect the control and data lines of the LCD
// directly to the I/O port pins (no interfacing hardware is needed),
// but it generally runs slower than the LCD_MEMORY_INTERFACE.
// Depending on your needs, when using the LCD_PORT_INTERFACE, the LCD may
// be accessed in 8-bit or 4-bit mode. In 8-bit mode, one whole I/O port
// (pins 0-7) is required for the LCD data lines, but transfers are faster.
// In 4-bit mode, only I/O port pins 4-7 are needed for data lines, but LCD
// access is slower. In either mode, three additional port pins are
// required for the LCD interface control lines (RS, R/W, and E).
// Enable one of the following interfaces to your LCD
//#define LCD_MEMORY_INTERFACE
#define USE_4BIT_LCD_INTERFACE
#define LCD_PORT_INTERFACE
// LCD display geometry
// change these definitions to adapt settings
#define LCD_LINES 2 // visible lines
#define LCD_LINE_LENGTH 16 // line length (in characters)
// Enter the parameters for your chosen interface
// if you chose the LCD_PORT_INTERFACE:
#ifdef USE_4BIT_LCD_INTERFACE
#ifdef LCD_PORT_INTERFACE
#ifndef LCD_CTRL_PORT
// port and pins you will use for control lines
#define LCD_CTRL_PORT PORTD
#define LCD_CTRL_DDR DDRD
#define LCD_CTRL_RS 0
#define LCD_CTRL_RW 1
#define LCD_CTRL_E 2
#endif
#ifndef LCD_DATA_POUT
// port you will use for data lines
#define LCD_DATA_POUT PORTD
#define LCD_DATA_PIN PIND
#define LCD_DATA_DDR DDRD
// access mode you will use (default is 8bit unless 4bit is selected)
#define LCD_DATA_4BIT
#endif
#endif
#else // USE 8BIT LCD INTERFACE
#ifdef LCD_PORT_INTERFACE
#ifndef LCD_CTRL_PORT
// port and pins you will use for control lines
#define LCD_CTRL_PORT PORTC
#define LCD_CTRL_DDR DDRC
#define LCD_CTRL_RS 7
#define LCD_CTRL_RW 6
#define LCD_CTRL_E 5
#endif
#ifndef LCD_DATA_POUT
// port you will use for data lines
#define LCD_DATA_POUT PORTB
#define LCD_DATA_PIN PINB
#define LCD_DATA_DDR DDRB
#endif
#endif
#endif
// if you chose the LCD_MEMORY_INTERFACE:
#ifdef LCD_MEMORY_INTERFACE
#ifndef LCD_CTRL_ADDR
// CPU memory address of the LCD control register
#define LCD_CTRL_ADDR 0x1000
#endif
#ifndef LCD_DATA_ADDR
// CPU memory address of the LCD data register
#define LCD_DATA_ADDR 0x1001
#endif
#endif
// cursor position to DDRAM mapping
#define LCD_LINE0_DDRAMADDR 0x00
#define LCD_LINE1_DDRAMADDR 0x40
#define LCD_LINE2_DDRAMADDR 0x14
#define LCD_LINE3_DDRAMADDR 0x54
// LCD delay
// This delay affects how quickly accesses are made to the LCD controller.
// The HD44780 LCD controller requires an access time of at least 1us.
// LCD_DELAY should be scaled to take at least half that time (500us).
// Each NOP takes 1 CPU clock cycle to execute. Thus, at 4MHz, you should
// use at least 2 NOPs, at 8MHz at least 4 NOPs, etc.
// You can also use the delay_us(xx) command for longer access times.
// LCD_DELAY is now automatically set in lcd.h,
// however, if you define it here, this definition will override the automatic setting
// use this for a fail-safe delay
// #define LCD_DELAY delay_us(5);
#endif // LCDCONF_H

View File

@@ -17,10 +17,12 @@ BOARD = MICROPENDOUS_REV2
F_CPU = 16000000 F_CPU = 16000000
F_USB = $(F_CPU) F_USB = $(F_CPU)
OPTIMIZATION = s OPTIMIZATION = s
TARGET = VirtualSerial TARGET = VirtualSerial_LCD
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) AVRLIB_PATH = ../../libs/avrlib
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) \
$(AVRLIB_PATH)/rprintf.c $(AVRLIB_PATH)/lcd.c $(AVRLIB_PATH)/timer.c
LUFA_PATH = ../../libs/LUFA/LUFA LUFA_PATH = ../../libs/LUFA/LUFA
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -I$(AVRLIB_PATH)
LD_FLAGS = LD_FLAGS =
CDC_BOOTLOADER_PORT = /dev/ttyACM0 CDC_BOOTLOADER_PORT = /dev/ttyACM0
#CDC_BOOTLOADER_PORT = COM5 #CDC_BOOTLOADER_PORT = COM5

View File

@@ -131,46 +131,56 @@
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
static inline void LEDs_Init(void) static inline void LEDs_Init(void)
{ {
_BOARD_LED_DDR |= LEDS_ALL_LEDS; //_BOARD_LED_DDR |= LEDS_ALL_LEDS;
_BOARD_LED_PORT &= ~LEDS_ALL_LEDS; //_BOARD_LED_PORT &= ~LEDS_ALL_LEDS;
DDRB |= (1 << PB1);
PORTB |= (1 << PB1);
} }
static inline void LEDs_Disable(void) static inline void LEDs_Disable(void)
{ {
_BOARD_LED_DDR &= ~LEDS_ALL_LEDS; //_BOARD_LED_DDR &= ~LEDS_ALL_LEDS;
_BOARD_LED_PORT &= ~LEDS_ALL_LEDS; //_BOARD_LED_PORT &= ~LEDS_ALL_LEDS;
DDRB &= ~(1 << PB1);
PORTB &= ~(1 << PB1);
} }
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{ {
_BOARD_LED_PORT |= LEDMask; //_BOARD_LED_PORT |= LEDMask;
PORTB |= LEDMask;
} }
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{ {
_BOARD_LED_PORT &= ~LEDMask; //_BOARD_LED_PORT &= ~LEDMask;
PORTB &= ~LEDMask;
} }
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{ {
_BOARD_LED_PORT = ((_BOARD_LED_PORT & ~LEDS_ALL_LEDS) | LEDMask); //_BOARD_LED_PORT = ((_BOARD_LED_PORT & ~LEDS_ALL_LEDS) | LEDMask);
PORTB = ((_BOARD_LED_PORT & ~LEDS_ALL_LEDS) | LEDMask);
} }
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, static inline void LEDs_ChangeLEDs(const uint8_t LEDMask,
const uint8_t ActiveMask) const uint8_t ActiveMask)
{ {
_BOARD_LED_PORT = ((_BOARD_LED_PORT & ~LEDMask) | ActiveMask); //_BOARD_LED_PORT = ((_BOARD_LED_PORT & ~LEDMask) | ActiveMask);
PORTB = ((_BOARD_LED_PORT & ~LEDMask) | ActiveMask);
} }
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{ {
_BOARD_LED_PIN = LEDMask; //_BOARD_LED_PIN = LEDMask;
PORTB = LEDMask;
} }
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void) static inline uint8_t LEDs_GetLEDs(void)
{ {
return (_BOARD_LED_PORT & LEDS_ALL_LEDS); //return (_BOARD_LED_PORT & LEDS_ALL_LEDS);
return (PORTB & (1 << PB0));
} }
#endif #endif

View File

@@ -69,15 +69,28 @@
#define GNUC_PACKED __attribute__((packed)) #define GNUC_PACKED __attribute__((packed))
// port address helpers // port address helpers
#define DDR(x) ((x)-1) // address of data direction register of port x #ifndef DDR
#define PIN(x) ((x)-2) // address of input register of port x #define DDR(x) ((x)-1) // address of data direction register of port x
#endif
#ifndef PIN
#define PIN(x) ((x)-2) // address of input register of port x
#endif
// MIN/MAX/ABS macros // MIN/MAX/ABS macros
#define MIN(a,b) ((a<b)?(a):(b)) #ifndef MIN
#define MAX(a,b) ((a>b)?(a):(b)) #define MIN(a,b) ((a<b)?(a):(b))
#define ABS(x) ((x>0)?(x):(-x)) #endif
#ifndef MAX
#define MAX(a,b) ((a>b)?(a):(b))
#endif
#ifndef ABS
#define ABS(x) ((x>0)?(x):(-x))
#endif
// constants // constants
#define PI 3.14159265359 #ifndef PI
#define PI 3.14159265359
#endif #endif
#endif // AVRLIBDEFS_H

View File

@@ -25,7 +25,7 @@
#include "lcd.h" #include "lcd.h"
// custom LCD characters // custom LCD characters
unsigned char __attribute__ ((progmem)) LcdCustomChar[] = unsigned const char __attribute__ ((progmem)) LcdCustomChar[] =
{ {
0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, // 0. 0/5 full progress block 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, // 0. 0/5 full progress block
0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, // 1. 1/5 full progress block 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00, // 1. 1/5 full progress block
@@ -419,7 +419,7 @@ void lcdPrintData(char* data, u08 nBytes)
} }
} }
#if (!defined(__AVR_AT90USB162__) && !defined(__AVR_AT90USB82__)) #if (!defined(__AVR_AT90USB162__) && !defined(__AVR_AT90USB82__))
void lcdProgressBar(u16 progress, u16 maxprogress, u08 length) void lcdProgressBar(u16 progress, u16 maxprogress, u08 length)
{ {
u08 i; u08 i;

View File

@@ -103,7 +103,7 @@
#define LCD_MODE_DEFAULT ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC)) #define LCD_MODE_DEFAULT ((1<<LCD_ENTRY_MODE) | (1<<LCD_ENTRY_INC))
// custom LCD characters // custom LCD characters
extern unsigned char __attribute__ ((progmem)) LcdCustomChar[]; extern unsigned const char __attribute__ ((progmem)) LcdCustomChar[];
#define LCDCHAR_PROGRESS05 0 // 0/5 full progress block #define LCDCHAR_PROGRESS05 0 // 0/5 full progress block
#define LCDCHAR_PROGRESS15 1 // 1/5 full progress block #define LCDCHAR_PROGRESS15 1 // 1/5 full progress block
#define LCDCHAR_PROGRESS25 2 // 2/5 full progress block #define LCDCHAR_PROGRESS25 2 // 2/5 full progress block
@@ -178,8 +178,8 @@ void lcdPrintData(char* data, u08 nBytes);
// <progress> is the value the bargraph should indicate // <progress> is the value the bargraph should indicate
// <maxprogress> is the value at the end of the bargraph // <maxprogress> is the value at the end of the bargraph
// <length> is the number of LCD characters that the bargraph should cover // <length> is the number of LCD characters that the bargraph should cover
#if (!defined(__AVR_AT90USB162__) && !defined(__AVR_AT90USB82__)) #if (!defined(__AVR_AT90USB162__) && !defined(__AVR_AT90USB82__))
void lcdProgressBar(u16 progress, u16 maxprogress, u08 length); void lcdProgressBar(u16 progress, u16 maxprogress, u08 length);
#endif #endif
#endif #endif

View File

@@ -42,7 +42,7 @@
//static char HexChars[] = "0123456789ABCDEF"; //static char HexChars[] = "0123456789ABCDEF";
// use this to store hex conversion in program memory // use this to store hex conversion in program memory
//static prog_char HexChars[] = "0123456789ABCDEF"; //static prog_char HexChars[] = "0123456789ABCDEF";
static char __attribute__ ((progmem)) HexChars[] = "0123456789ABCDEF"; static const char __attribute__ ((progmem)) HexChars[] = "0123456789ABCDEF";
#define hexchar(x) pgm_read_byte( HexChars+((x)&0x0f) ) #define hexchar(x) pgm_read_byte( HexChars+((x)&0x0f) )
//#define hexchar(x) ((((x)&0x0F)>9)?((x)+'A'-10):((x)+'0')) //#define hexchar(x) ((((x)&0x0F)>9)?((x)+'A'-10):((x)+'0'))
@@ -116,7 +116,7 @@ void rprintfStrLen(char str[], unsigned int start, unsigned int len)
// *** rprintfProgStr *** // *** rprintfProgStr ***
// prints a null-terminated string stored in program ROM // prints a null-terminated string stored in program ROM
void rprintfProgStr(const prog_char str[]) void rprintfProgStr(const char *str)
{ {
// print a string stored in program memory // print a string stored in program memory
register char c; register char c;

View File

@@ -82,7 +82,7 @@ void rprintfStrLen(char str[], unsigned int start, unsigned int len);
//! prints a string stored in program rom //! prints a string stored in program rom
/// \note This function does not actually store your string in /// \note This function does not actually store your string in
/// program rom, but merely reads it assuming you stored it properly. /// program rom, but merely reads it assuming you stored it properly.
void rprintfProgStr(const prog_char str[]); void rprintfProgStr(const char str[]);
//! Using the function rprintfProgStrM(...) automatically causes //! Using the function rprintfProgStrM(...) automatically causes
/// your string to be stored in ROM, thereby not wasting precious RAM. /// your string to be stored in ROM, thereby not wasting precious RAM.

View File

@@ -28,10 +28,10 @@
// Program ROM constants // Program ROM constants
// the prescale division values stored in order of timer control register index // the prescale division values stored in order of timer control register index
// STOP, CLK, CLK/8, CLK/64, CLK/256, CLK/1024 // STOP, CLK, CLK/8, CLK/64, CLK/256, CLK/1024
unsigned short __attribute__ ((progmem)) TimerPrescaleFactor[] = {0,1,8,64,256,1024}; unsigned const short __attribute__ ((progmem)) TimerPrescaleFactor[] = {0,1,8,64,256,1024};
// the prescale division values stored in order of timer control register index // the prescale division values stored in order of timer control register index
// STOP, CLK, CLK/8, CLK/32, CLK/64, CLK/128, CLK/256, CLK/1024 // STOP, CLK, CLK/8, CLK/32, CLK/64, CLK/128, CLK/256, CLK/1024
unsigned short __attribute__ ((progmem)) TimerRTCPrescaleFactor[] = {0,1,8,32,64,128,256,1024}; unsigned const short __attribute__ ((progmem)) TimerRTCPrescaleFactor[] = {0,1,8,32,64,128,256,1024};
// Global variables // Global variables
// time registers // time registers

View File

@@ -18,7 +18,7 @@
#include <string.h> #include <string.h>
#include "rprintf.h" #include "rprintf.h"
#include "timer.h" #include "timer.h"
#include "xmodem.h" #include "xmodem.h"
//#define XMODEM_BUFFER_SIZE 128 //#define XMODEM_BUFFER_SIZE 128

View File

@@ -32,7 +32,7 @@
#ifndef XMODEM_H #ifndef XMODEM_H
#define XMODEM_H #define XMODEM_H
// xmodem control characters // xmodem control characters
#define SOH 0x01 #define SOH 0x01
#define STX 0x02 #define STX 0x02