Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build on Ubuntu 14.04.1 LTS #38

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
*.[oa]
*.pyc
*.*~
*.s
.pida-metadata
build
tags
TAGS
doc/*.html
output.map
*.pyc
*.swp
*.o
.gitignore
build/
*.map

142 changes: 71 additions & 71 deletions driver/display.c
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
// *************************************************************************************************
//
// Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
//
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
//
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// *************************************************************************************************
Expand Down Expand Up @@ -97,18 +97,18 @@ void lcd_init(void)

// LCD_FREQ = ACLK/12/8 = 341.3Hz flickers in the sun
// LCD_FREQ = ACLK/10/8 = 409.6Hz still flickers in the sun when watch is moving (might be negligible)

// LCD_FREQ = ACLK/8/8 = 512Hz no flickering, even when watch is moving
// Frame frequency = 512Hz/2/4 = 64Hz, LCD mux 4, LCD on
LCDBCTL0 = (LCDDIV0 + LCDDIV1 + LCDDIV2) | (LCDPRE0 + LCDPRE1) | LCD4MUX | LCDON;

// LCB_BLK_FREQ = ACLK/8/4096 = 1Hz
LCDBBLKCTL = LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2 | LCDBLKMOD0;
LCDBBLKCTL = LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2 | LCDBLKMOD0;

// I/O to COM outputs
P5SEL |= (BIT5 | BIT6 | BIT7);
P5DIR |= (BIT5 | BIT6 | BIT7);

// Activate LCD output
LCDBPCTL0 = 0xFFFF; // Select LCD segments S0-S15
LCDBPCTL1 = 0x00FF; // Select LCD segments S16-S22
Expand All @@ -131,11 +131,11 @@ void clear_display_all(void)
// Clear generic content
clear_line(LINE1);
clear_line(LINE2);

// Clean up function-specific content
fptr_lcd_function_line1(LINE1, DISPLAY_LINE_CLEAR);
fptr_lcd_function_line2(LINE2, DISPLAY_LINE_CLEAR);
fptr_lcd_function_line2(LINE2, DISPLAY_LINE_CLEAR);

}


Expand Down Expand Up @@ -183,15 +183,15 @@ void clear_line(u8 line)
// bits Segments to address
// bitmask Bitmask for particular display item
// mode On, off or blink segments
// @return
// @return
// *************************************************************************************************
void write_lcd_mem(u8 * lcdmem, u8 bits, u8 bitmask, u8 state)
{
if (state == SEG_ON)
{
// Clear segments before writing
*lcdmem = (u8)(*lcdmem & ~bitmask);

// Set visible segments
*lcdmem = (u8)(*lcdmem | bits);
}
Expand All @@ -205,7 +205,7 @@ void write_lcd_mem(u8 * lcdmem, u8 bits, u8 bitmask, u8 state)
// Clear visible / blink segments before writing
*lcdmem = (u8)(*lcdmem & ~bitmask);
*(lcdmem+0x20) = (u8)(*(lcdmem+0x20) & ~bitmask);

// Set visible / blink segments
*lcdmem = (u8)(*lcdmem | bits);
*(lcdmem+0x20) = (u8)(*(lcdmem+0x20) | bits);
Expand All @@ -214,7 +214,7 @@ void write_lcd_mem(u8 * lcdmem, u8 bits, u8 bitmask, u8 state)
{
// Clear visible segments before writing
*lcdmem = (u8)(*lcdmem & ~bitmask);

// Set visible segments
*lcdmem = (u8)(*lcdmem | bits);

Expand All @@ -239,45 +239,45 @@ void write_lcd_mem(u8 * lcdmem, u8 bits, u8 bitmask, u8 state)
// Option to convert leading '0' into whitespace (blanks)
// @param u32 n integer to convert
// u8 digits number of digits
// u8 blanks fill up result string with number of whitespaces instead of leading zeros
// u8 blanks fill up result string with number of whitespaces instead of leading zeros
// @return u8 string
// *************************************************************************************************
u8 * itoa(u32 n, u8 digits, u8 blanks)
{
u8 i;
u8 digits1 = digits;

// Preset result string
memcpy(itoa_str, "0000000", 7);

// Return empty string if number of digits is invalid (valid range for digits: 1-7)
if ((digits == 0) || (digits > 7)) return (itoa_str);

// Numbers 0 .. 180 can be copied from itoa_conversion_table without conversion
if (n <= 180)
{
if (digits >= 3)
{
memcpy(itoa_str+(digits-3), itoa_conversion_table[n], 3);
}
else // digits == 1 || 2
else // digits == 1 || 2
{
memcpy(itoa_str, itoa_conversion_table[n]+(3-digits), digits);
}
}
else // For n > 180 need to calculate string content
{
// Calculate digits from least to most significant number
do
{
itoa_str[digits-1] = n % 10 + '0';
do
{
itoa_str[digits-1] = n % 10 + '0';
n /= 10;
} while (--digits > 0);
} while (--digits > 0);
}

// Remove specified number of leading '0', always keep last one
i = 0;
while ((itoa_str[i] == '0') && (i < digits1-1))
i = 0;
while ((itoa_str[i] == '0') && (i < digits1-1))
{
if (blanks > 0)
{
Expand All @@ -287,9 +287,9 @@ u8 * itoa(u32 n, u8 digits, u8 blanks)
}
i++;
}
return (itoa_str);
}

return (itoa_str);
}


// *************************************************************************************************
Expand Down Expand Up @@ -347,7 +347,7 @@ void display_hours_12_or_24(u8 segments, u32 value, u8 digits, u8 blanks, u8 dis
{
#endif
#if (OPTION_TIME_DISPLAY != CLOCK_AM_PM)
// Display hours in 24H time format
// Display hours in 24H time format
display_value1(segments, (u16) value, digits, blanks, disp_mode);
#endif
#if (OPTION_TIME_DISPLAY == CLOCK_DISPLAY_SELECT)
Expand Down Expand Up @@ -391,19 +391,19 @@ void display_symbol(u8 symbol, u8 mode)
u8 * lcdmem;
u8 bits;
u8 bitmask;
if (symbol <= LCD_SEG_L2_DP)

if (symbol <= LCD_SEG_L2_DP)
{
// Get LCD memory address for symbol from table
lcdmem = (u8 *)segments_lcdmem[symbol];

// Get bits for symbol from table
bits = segments_bitmask[symbol];

// Bitmask for symbols equals bits
bitmask = bits;
// Write LCD memory

// Write LCD memory
write_lcd_mem(lcdmem, bits, bitmask, mode);
}
}
Expand All @@ -412,7 +412,7 @@ void display_symbol(u8 symbol, u8 mode)
// *************************************************************************************************
// @fn display_char
// @brief Write to 7-segment characters.
// @param u8 segment A valid LCD segment
// @param u8 segment A valid LCD segment
// u8 chr Character to display
// u8 mode SEG_ON, SEG_OFF, SEG_BLINK
// @return none
Expand All @@ -422,7 +422,7 @@ void display_char(u8 segment, u8 chr, u8 mode)
u8 * lcdmem; // Pointer to LCD memory
u8 bitmask; // Bitmask for character
u8 bits, bits1; // Bits to write

// Write to single 7-segment character
if ((segment >= LCD_SEG_L1_3) && (segment <= LCD_SEG_L2_DP))
{
Expand All @@ -431,9 +431,9 @@ void display_char(u8 segment, u8 chr, u8 mode)

// Get bitmask for character from table
bitmask = segments_bitmask[segment];

// Get bits from font set
if ((chr >= 0x30) && (chr <= 0x5A))
if ((chr >= 0x30) && (chr <= 0x5A))
{
// Use font set
bits = lcd_font[chr-0x30];
Expand All @@ -451,29 +451,29 @@ void display_char(u8 segment, u8 chr, u8 mode)

// When addressing LINE2 7-segment characters need to swap high- and low-nibble,
// because LCD COM/SEG assignment is mirrored against LINE1
if (segment >= LCD_SEG_L2_5)
if (segment >= LCD_SEG_L2_5)
{
bits1 = ((bits << 4) & 0xF0) | ((bits >> 4) & 0x0F);
bits = bits1;

// When addressing LCD_SEG_L2_5, need to convert ASCII '1' and 'L' to 1 bit,
// because LCD COM/SEG assignment is special for this incomplete character
if (segment == LCD_SEG_L2_5)
if (segment == LCD_SEG_L2_5)
{
if ((chr == '1') || (chr == 'L')) bits = BIT7;
}
}
// Physically write to LCD memory

// Physically write to LCD memory
write_lcd_mem(lcdmem, bits, bitmask, mode);
}
}
}


// *************************************************************************************************
// @fn display_chars
// @brief Write to consecutive 7-segment characters.
// @param u8 segments LCD segment array
// @param u8 segments LCD segment array
// u8 * str Pointer to a string
// u8 mode SEG_ON, SEG_OFF, SEG_BLINK
// @return none
Expand All @@ -483,7 +483,7 @@ void display_chars(u8 segments, u8 * str, u8 mode)
u8 i;
u8 length = 0; // Write length
u8 char_start; // Starting point for consecutive write

//single charakter
if ((segments >= LCD_SEG_L1_3) && (segments <= LCD_SEG_L2_DP))
{
Expand Down Expand Up @@ -512,7 +512,7 @@ void display_chars(u8 segments, u8 * str, u8 mode)
case LCD_SEG_L2_4_2: length=3; char_start=LCD_SEG_L2_4; break;
case LCD_SEG_L2_4_3: length=2; char_start=LCD_SEG_L2_4; break;
}

// Write to consecutive digits
for(i=0; i<length; i++)
{
Expand All @@ -524,7 +524,7 @@ void display_chars(u8 segments, u8 * str, u8 mode)

// *************************************************************************************************
// @fn switch_seg
// @brief Returns index of 7-segment character. Required for display routines that can draw
// @brief Returns index of 7-segment character. Required for display routines that can draw
// information on both lines.
// @param u8 line LINE1, LINE2
// u8 index1 Index of LINE1
Expand All @@ -546,7 +546,7 @@ u8 switch_seg(u8 line, u8 index1, u8 index2)

// *************************************************************************************************
// @fn start_blink
// @brief Start blinking.
// @brief Start blinking.
// @param none
// @return none
// *************************************************************************************************
Expand Down Expand Up @@ -576,20 +576,20 @@ void stop_blink(void)
// *************************************************************************************************
void clear_blink_mem(void)
{
LCDBMEMCTL |= LCDCLRBM;
LCDBMEMCTL |= LCDCLRBM;
}


// *************************************************************************************************
// @fn set_blink_rate
// @brief Set blink rate register bits.
// @brief Set blink rate register bits.
// @param none
// @return none
// *************************************************************************************************
void set_blink_rate(u8 bits)
{
LCDBBLKCTL &= ~(BIT7 | BIT6 | BIT5);
LCDBBLKCTL |= bits;
LCDBBLKCTL &= ~(BIT7 | BIT6 | BIT5);
LCDBBLKCTL |= bits;
}


Expand All @@ -603,10 +603,10 @@ void display_all_off(void)
{
u8 * lcdptr = (u8*)0x0A20;
u8 i;
for (i=1; i<=12; i++)

for (i=1; i<=12; i++)
{
*lcdptr = 0x00;
*lcdptr = 0x00;
lcdptr++;
}
}
Loading