build: W600-SDK importiert, Firmware-Build und Hello am EVK
Docker-Build mit gcc-arm-none-eabi 4.9-2014q4 (statt Homebrew-Cask) verwendet, Dockerfile/tools/docker.sh dafür aus Task 13 vorgezogen. cmake/sdk.cmake schont gcc 4.9 (kennt -fcommon/-Wno-error=... nicht). Zwei zusätzliche SDK-Stubs (EarlyInit, pre_gpio_config) in src/sys/sdk_stubs.c ergänzt, siehe sdk/PATCHES.md.
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
/**************************************************************************//**
|
||||
* @file wm_lcd.c
|
||||
* @author
|
||||
* @version
|
||||
* @date
|
||||
* @brief
|
||||
*
|
||||
* Copyright (c) 2014 Winner Microelectronics Co., Ltd. All rights reserved.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "wm_lcd.h"
|
||||
|
||||
#define RTC_CLK (32000UL)
|
||||
|
||||
/**
|
||||
* @brief Initialize LCD Frame Counter
|
||||
* @param[in] freq LCD reference refresh frequency in Hz that will be used
|
||||
*/
|
||||
void tls_lcd_fresh_ratio(uint16_t freq)
|
||||
{
|
||||
uint8_t com_num;
|
||||
|
||||
if (freq == 0)
|
||||
{
|
||||
freq = 60;
|
||||
}
|
||||
|
||||
com_num = tls_bitband_read(HR_LCD_CR, LCD_CR_MODE_Pos) ? 4 : 8;
|
||||
LCD->FRAMECNT = RTC_CLK/(com_num * freq);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Turn on or clear a segment
|
||||
*
|
||||
* @param[in] com
|
||||
* Which COM line to update
|
||||
*
|
||||
* @param[in] bit
|
||||
* Bit index of which field to change
|
||||
*
|
||||
* @param[in] enable
|
||||
* When one will set segment, when zero will clear segment
|
||||
*
|
||||
* @param[in] mode
|
||||
* when one max configuration is 4x20, when zero max configuration is 8x16
|
||||
*
|
||||
*/
|
||||
void tls_lcd_seg_set(int com, int bit, int on_off)
|
||||
{
|
||||
int mode;
|
||||
|
||||
/** get the mode congfig when one max configuration is 4x20, when zero max configuration is 8x16 */
|
||||
mode = tls_bitband_read(HR_LCD_CR, LCD_CR_MODE_Pos);
|
||||
|
||||
if (!mode && (com < 0 || com > 7) && (bit < 0 || bit > 15))
|
||||
{
|
||||
return ;
|
||||
}
|
||||
if (mode && (com < 0 || com > 3) && (bit < 0 || bit > 19))
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
switch(com)
|
||||
{
|
||||
/** COM0 */
|
||||
case 0:
|
||||
tls_bitband_write(HR_LCD_COM0_1_SEG, bit, on_off);
|
||||
break;
|
||||
|
||||
/** COM1 */
|
||||
case 1:
|
||||
if (mode)
|
||||
tls_bitband_write(HR_LCD_COM2_3_SEG, bit, on_off);
|
||||
else
|
||||
{
|
||||
bit += 16;
|
||||
tls_bitband_write(HR_LCD_COM0_1_SEG, bit, on_off);
|
||||
}
|
||||
break;
|
||||
|
||||
/** COM2 */
|
||||
case 2:
|
||||
if (mode)
|
||||
tls_bitband_write(HR_LCD_COM4_5_SEG, bit, on_off);
|
||||
else
|
||||
tls_bitband_write(HR_LCD_COM2_3_SEG, bit, on_off);
|
||||
break;
|
||||
|
||||
/** COM3 */
|
||||
case 3:
|
||||
if (mode)
|
||||
tls_bitband_write(HR_LCD_COM6_7_SEG, bit, on_off);
|
||||
else
|
||||
{
|
||||
bit += 16;
|
||||
tls_bitband_write(HR_LCD_COM2_3_SEG, bit, on_off);
|
||||
}
|
||||
break;
|
||||
|
||||
/** COM4 */
|
||||
case 4:
|
||||
tls_bitband_write(HR_LCD_COM4_5_SEG, bit, on_off);
|
||||
break;
|
||||
|
||||
/** COM5 */
|
||||
case 5:
|
||||
bit += 16;
|
||||
tls_bitband_write(HR_LCD_COM4_5_SEG, bit, on_off);
|
||||
break;
|
||||
|
||||
/** COM6 */
|
||||
case 6:
|
||||
tls_bitband_write(HR_LCD_COM6_7_SEG, bit, on_off);
|
||||
break;
|
||||
|
||||
/** COM7 */
|
||||
case 7:
|
||||
bit += 16;
|
||||
tls_bitband_write(HR_LCD_COM6_7_SEG, bit, on_off);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief enable or disable the LCD module gpio
|
||||
*
|
||||
* @param[in] the config value per bit for one of LCD gpios, set 1 gpio output enable ,0 output disabled
|
||||
*
|
||||
*/
|
||||
void tls_lcd_io_config(unsigned int val)
|
||||
{
|
||||
tls_reg_write32(HR_LCD_IO_EN, val);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* select the voltage of LCD module
|
||||
*
|
||||
*/
|
||||
void tls_lcd_vlcd_sel(LCD_VlcdDef vlcd)
|
||||
{
|
||||
LCD->CTRL &= ~LCD_VLCD_MASK;
|
||||
LCD->CTRL |= vlcd;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* set the duty of LCD module
|
||||
*
|
||||
*/
|
||||
void tls_lcd_duty_set(LCD_DutyDef duty)
|
||||
{
|
||||
LCD->CTRL &= ~LCD_DUTY_MASK;
|
||||
LCD->CTRL |= duty;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* set the bias of LCD module
|
||||
*
|
||||
*/
|
||||
void tls_lcd_bias_set(LCD_BiasDef bias)
|
||||
{
|
||||
LCD->CTRL &= ~LCD_BIAS_MASK;
|
||||
LCD->CTRL |= bias;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* initialize the lcd module
|
||||
*
|
||||
*/
|
||||
void tls_lcd_init(tls_lcd_options_t *opts)
|
||||
{
|
||||
LCD->CTRL = 0;
|
||||
LCD->CTRL = opts->mode | opts->bias | opts->duty | opts->vlcd | (1 << 12);
|
||||
tls_lcd_fresh_ratio(opts->fresh_rate);
|
||||
TLS_LCD_ENABLE(opts->enable);
|
||||
TLS_LCD_POWERDOWM(0);
|
||||
}
|
||||
Reference in New Issue
Block a user