删除目录「HDMI」

This commit is contained in:
jf
2026-11-04 06:31:20 +00:00
parent 5bffc3c666
commit 3b2d5c3a0a
95 changed files with 0 additions and 32077 deletions
-301
View File
@@ -1,301 +0,0 @@
diff --git a/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi b/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
--- a/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
+++ b/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
@@ -42,9 +42,9 @@
hfront-porch = <88>;
hsync-len = <44>;
hback-porch = <148>;
- vfront-porch = <56>;
- vsync-len = <6>;
- vback-porch = <60>;
+ vfront-porch = <4>;
+ vsync-len = <5>;
+ vback-porch = <36>;
};
};
};
diff --git a/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi b/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
--- a/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
+++ b/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
@@ -42,9 +42,9 @@
hfront-porch = <88>;
hsync-len = <44>;
hback-porch = <148>;
- vfront-porch = <56>;
- vsync-len = <6>;
- vback-porch = <60>;
+ vfront-porch = <4>;
+ vsync-len = <5>;
+ vback-porch = <36>;
};
};
};
diff --git a/source/bsp/u-boot22/arch/arm/dts/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi b/source/bsp/u-boot22/arch/arm/dts/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
--- a/source/bsp/u-boot22/arch/arm/dts/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
+++ b/source/bsp/u-boot22/arch/arm/dts/lcd/lcd_lt8912b_mipi_hdmi_1080p.dtsi
@@ -47,9 +47,9 @@
hfront-porch = <88>;
hsync-len = <44>;
hback-porch = <148>;
- vfront-porch = <56>;
+ vfront-porch = <38>;
vsync-len = <6>;
- vback-porch = <60>;
+ vback-porch = <40>;
};
};
};
diff --git a/source/kernel/kernel5.4/drivers/video/LT8912B/src/LT8912B.c b/source/kernel/kernel5.4/drivers/video/LT8912B/src/LT8912B.c
--- a/source/kernel/kernel5.4/drivers/video/LT8912B/src/LT8912B.c
+++ b/source/kernel/kernel5.4/drivers/video/LT8912B/src/LT8912B.c
@@ -9,6 +9,7 @@
u8 Hsync_L, Hsync_H, Vsync_L, Vsync_H;
u8 mipi_det_fail_count = 0;
u8 mipi_relock_count = 0;
+bool mipi_video_ready = 0;
bool suspend_on = 0;
@@ -24,11 +25,13 @@
struct video_timing video_1280x720_60Hz = {110, 40, 220, 1280, 1650, 5, 5, 20, 720, 750, 1,1, 4, AR_16_9, 74250};
struct video_timing video_1280x800_60Hz = {28, 32, 100, 1280, 1440, 2, 6, 15, 800, 823, 0,0, 0, AR_16_9, 71000};
//struct video_timing video_1920x1080_60Hz = {88, 44, 148, 1920, 2200, 4, 5, 36, 1080, 1125, 1,1,16, AR_16_9, 148500};
-struct video_timing video_1920x1080_60Hz = {88, 44, 148, 1920, 2200, 56, 6, 60, 1080, 1202, 1,1, 0, AR_16_9, 153600};
+struct video_timing video_1920x1080_60Hz = {88, 44, 148, 1920, 2200, 4, 5, 36, 1080, 1125, 1,1,16, AR_16_9, 153600};
struct video_timing *video;
-void DDSConfig(void);
+void DDSConfig(struct video_timing *video_format);
+void HdmiOutput(bool on);
+u8 LT8912_Get_HPD(void);
void DigitalClockEn(void)
{
@@ -72,25 +75,66 @@
{
u8 VIC = video_format->vic;
u8 AR = video_format->aspact_ratio;
- u8 pb0,pb2,pb4,Sync_Polarity;
+ u8 pb0,pb1,pb2,pb4,Sync_Polarity;
+ u8 pb6, pb7, pb8, pb9, pb10, pb11, pb12, pb13;
+ u8 checksum;
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x3c,0x41); //enable null package
Sync_Polarity = (video_format->h_polarity*0x02) + (video_format->v_polarity*0x01);
- pb2 = (AR<<4) + 0x08;
- pb4 = VIC;
- pb0 = (((pb2 + pb4) <= 0x5f)?(0x5f - pb2 - pb4):(0x15f - pb2 - pb4));
+ if (video_format->hact == 1920 && video_format->vact == 1080) {
+ Sync_Polarity = 0x03;
+ pb1 = 0x1c;
+ pb2 = 0xa8;
+ pb4 = 0x10;
+ pb6 = 0x29;
+ pb7 = 0x00;
+ pb8 = 0x61;
+ pb9 = 0x04;
+ pb10 = 0xc0;
+ pb11 = 0x00;
+ pb12 = 0x40;
+ pb13 = 0x08;
+ } else {
+ pb1 = 0x10;
+ pb2 = (AR<<4) + 0x08;
+ pb4 = VIC;
+ pb6 = 0x00;
+ pb7 = 0x00;
+ pb8 = 0x00;
+ pb9 = 0x00;
+ pb10 = 0x00;
+ pb11 = 0x00;
+ pb12 = 0x00;
+ pb13 = 0x00;
+ }
+
+ checksum = 0x82 + 0x02 + 0x0d + pb1 + pb2 + pb4;
+ checksum += pb6 + pb7 + pb8 + pb9;
+ checksum += pb10 + pb11 + pb12 + pb13;
+ pb0 = 0x100 - checksum;
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0xab,Sync_Polarity); //sync polarity
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x43,pb0); //PB0:check sum
- HDMI_WriteI2C_Byte(0x44,0x10); //PB1:RGB888
+ HDMI_WriteI2C_Byte(0x44,pb1); //PB1
HDMI_WriteI2C_Byte(0x45,pb2); //PB2
HDMI_WriteI2C_Byte(0x46,0x00); //PB3
HDMI_WriteI2C_Byte(0x47,pb4); //PB4:vic
+ HDMI_WriteI2C_Byte(0x49,pb6);
+ HDMI_WriteI2C_Byte(0x4a,pb7);
+ HDMI_WriteI2C_Byte(0x4b,pb8);
+ HDMI_WriteI2C_Byte(0x4c,pb9);
+ HDMI_WriteI2C_Byte(0x4d,pb10);
+ HDMI_WriteI2C_Byte(0x4e,pb11);
+ HDMI_WriteI2C_Byte(0x4f,pb12);
+ HDMI_WriteI2C_Byte(0x50,pb13);
+ printk("%s AviInfoframe %ux%u pb0=0x%02x pb1=0x%02x pb2=0x%02x vic=%u sync=0x%02x\n",
+ LOG_FLAG, video_format->hact, video_format->vact,
+ pb0, pb1, pb2, pb4, Sync_Polarity);
}
void MipiAnalog(void)
@@ -128,7 +172,13 @@
void MIPI_Video_Setup(struct video_timing *video_format)
{
+ u8 settle = 0x10;
+
+ if (video_format->vact == 1080)
+ settle = 0x0a;
+
I2CADR = 0x92;
+ HDMI_WriteI2C_Byte(0x11, settle); // settle
HDMI_WriteI2C_Byte(0x18,(u8)(video_format->hs%256)); // hwidth
HDMI_WriteI2C_Byte(0x19,(u8)(video_format->vs%256)); // vwidth
HDMI_WriteI2C_Byte(0x1c,(u8)(video_format->hact%256)); // H_active[7:0]
@@ -146,6 +196,10 @@
HDMI_WriteI2C_Byte(0x3d,(u8)(video_format->hbp/256)); // HBP[15:8]
HDMI_WriteI2C_Byte(0x3e,(u8)(video_format->hfp%256)); // HFP[7:0]
HDMI_WriteI2C_Byte(0x3f,(u8)(video_format->hfp/256)); // HFP[15:8]
+ printk("%s MIPI_Video_Setup %ux%u total=%ux%u pclk=%u settle=0x%02x vic=%u\n",
+ LOG_FLAG, video_format->hact, video_format->vact,
+ video_format->htotal, video_format->vtotal,
+ video_format->pclk_khz, settle, video_format->vic);
video = video_format;
}
@@ -168,19 +222,26 @@
MipiAnalog();
MipiBasicSet();
- DDSConfig();
+ DDSConfig(&video_1920x1080_60Hz);
MIPI_Video_Setup(&video_1920x1080_60Hz);
AviInfoframe(&video_1920x1080_60Hz);
MIPIRxLogicRes();
}
-void DDSConfig(void)
+void DDSConfig(struct video_timing *video_format)
{
+ u32 dds_word;
+
+ dds_word = (video_format->pclk_khz / 1000) * 0x16C16;
+ dds_word += ((video_format->pclk_khz % 1000) * 0x16C16 + 500) / 1000;
+
I2CADR = 0x92;
- HDMI_WriteI2C_Byte(0x4e,0x93);//strm_sw_freq_word[ 7: 0]
- HDMI_WriteI2C_Byte(0x4f,0x3E);//strm_sw_freq_word[15: 8]
- HDMI_WriteI2C_Byte(0x50,0x29);//strm_sw_freq_word[23:16]
+ HDMI_WriteI2C_Byte(0x4e,(u8)(dds_word & 0xff));//strm_sw_freq_word[ 7: 0]
+ HDMI_WriteI2C_Byte(0x4f,(u8)((dds_word >> 8) & 0xff));//strm_sw_freq_word[15: 8]
+ HDMI_WriteI2C_Byte(0x50,(u8)((dds_word >> 16) & 0xff));//strm_sw_freq_word[23:16]
HDMI_WriteI2C_Byte(0x51,0x80);//[0]=strm_sw_freq_word[24]
+ printk("%s DDSConfig pclk=%u kHz word=0x%06x\n",
+ LOG_FLAG, video_format->pclk_khz, dds_word);
HDMI_WriteI2C_Byte(0x1e,0x4f);
HDMI_WriteI2C_Byte(0x1f,0x5e);//full_value 464
HDMI_WriteI2C_Byte(0x20,0x01);
@@ -231,8 +292,15 @@
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x06,0x08);
HDMI_WriteI2C_Byte(0x07,0xF0);
- HDMI_WriteI2C_Byte(0x34,0xD2);//0xE2:32FS; 0xD2:64FS
+ HDMI_WriteI2C_Byte(0x09,0x00);
+ HDMI_WriteI2C_Byte(0x34,0xE2);//0xE2:32FS; 0xD2:64FS
+ HDMI_WriteI2C_Byte(0x35,0x00);//N = 6144(0x1800)
+ HDMI_WriteI2C_Byte(0x36,0x18);
+ HDMI_WriteI2C_Byte(0x37,0x00);
+ HDMI_WriteI2C_Byte(0x3c,0x41);
+ HDMI_WriteI2C_Byte(0x3e,0x0a);
HDMI_WriteI2C_Byte(0x0F,0x2B);
+ printk("%s HDMI audio packet setup: 48k N=0x1800\n", LOG_FLAG);
}
void AudioSpdifEn(void)
@@ -500,11 +568,8 @@
if (mipi_det_fail_count < 0xff)
mipi_det_fail_count++;
- if (mipi_det_fail_count >= 10 && mipi_relock_count < 5) {
- mipi_relock_count++;
- mipi_det_fail_count = 0;
- LT8912B_MIPI_Relock();
- }
+ if (mipi_det_fail_count == 10)
+ printk("%s MIPI input invalid, skip auto relock\n", LOG_FLAG);
} else {
mipi_det_fail_count = 0;
}
@@ -525,7 +590,7 @@
video_valid = true;
printk("%s videoformat = VESA_1280x800_60\n",LOG_FLAG);
}
- else if(Vsync_H == 0x04 && Vsync_L <= 0xb6&&Vsync_L >= 0x63)//0x4b2
+ else if(Vsync_H == 0x04 && Vsync_L <= 0x67&&Vsync_L >= 0x63)//0x465
{
video = &video_1920x1080_60Hz;
video_valid = true;
@@ -544,9 +609,21 @@
if (video_valid) {
mipi_det_fail_count = 0;
mipi_relock_count = 0;
+ mipi_video_ready = 1;
+ DDSConfig(video);
MIPI_Video_Setup(video);
AviInfoframe(video);
MIPIRxLogicRes();
+
+ #ifdef _hdmi_output
+ if (LT8912_Get_HPD() && !Tx_HPD) {
+ msleep(50);
+ HdmiOutput(1);
+ Tx_HPD = 1;
+ printk("%s HDMI output enabled after valid MIPI video\n",
+ LOG_FLAG);
+ }
+ #endif
}
}
@@ -716,7 +793,7 @@
HDMIPllAnalog();
MipiAnalog();
MipiBasicSet();
- DDSConfig();
+ DDSConfig(&video_1920x1080_60Hz);
MIPI_Video_Setup(&video_1920x1080_60Hz);
MIPI_Input_det();
AudioIIsEn();
@@ -726,7 +803,7 @@
lt8912_check_dds(); // can be removed when debug stage.
#endif
- #ifdef _lvds_bypass
+ #ifdef _lvds_output
lvds_output_cfg();
LvdsOutput(1);
#endif
@@ -737,7 +814,7 @@
/////////////////////////////////////////////////////////////
#ifdef _hdmi_output
- if(LT8912_Get_HPD())
+ if(LT8912_Get_HPD() && mipi_video_ready)
{
if(!Tx_HPD)
{
@@ -769,7 +846,7 @@
#ifdef _hdmi_output
if(LT8912_Get_HPD())
{
- if(!Tx_HPD)
+ if(mipi_video_ready && !Tx_HPD)
{
LT8912B_Suspend(0);
HdmiOutput(1);
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -1,5 +0,0 @@
LT8912B PCB layout建议:
1、差分(MIPI、HDMI、LVDS)周围40mil的范围不要有地或信号线、敷铜,控制好100欧姆阻抗匹配
2、差分信号对(MIPI、HDMI、LVDS)之间控制三倍线宽间距,伴随GND离差分3倍线宽间距,并且在GND线上多打些孔,若空间不够可以不加伴随
3、晶振布线尽量短,可以将反馈电阻放在晶振与IC之间
Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,9 +0,0 @@
config LT8912B
tristate "LT8912B Driver"
default m
help
Control LT8912B Chip
Select m:build as a separate module;
Select y:Build into the kernel
Select n:Not build
@@ -1,5 +0,0 @@
lt8912b-y := src/LontiumDrv.o src/LT8912B_Main.o src/LT8912B.o src/OcmI2cMaster.o \
obj-$(CONFIG_LT8912B) += lt8912b.o
@@ -1,27 +0,0 @@
# 1. Be sure to change KERN_DIR when using a different board kernel
# 2. The kernel in KERN_DIR must be configured and compiled in advance, and the following environment variables must be set in order to compile the kernel:
# 2.1 ARCH, For example: export ARCH=arm64
# 2.2 CROSS_COMPILE, For example: export CROSS_COMPILE=aarch64-linux-gnu-
# 2.3 PATH, For example: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
# Note: The above three environment variables may not be the same for different development boards and different compilers.
# For details, see the Advanced user manual of each development board
KERN_DIR = /home/ysy/workspace/imx6ull_pro/Imx6ull_source_code/Linux-4.9.88
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
lt8912b-y := src/LontiumDrv.o src/LT8912B_Main.o src/LT8912B.o src/OcmI2cMaster.o \
obj-m += lt8912b.o
@@ -1,72 +0,0 @@
#ifndef _LT8912B_H
#define _LT8912B_H
#define _1080P_60Hz
/* output mode */
#define _hdmi_output
#define _lvds_bypass
//#define _pattern_test_
#define _lane_swap_ //mipi input 3210
//#define _pn_swap_ //mipi input lane pn swap
#define dds_debug
/* lanes */
#define lane_cnt 0 /*0: 4lane; 1: 1lane; 2: 2lane; 3: 3lane;*/
typedef struct video_timing{
u16 hfp;
u16 hs;
u16 hbp;
u16 hact;
u16 htotal;
u16 vfp;
u16 vs;
u16 vbp;
u16 vact;
u16 vtotal;
bool h_polarity;
bool v_polarity;
u16 vic;
u8 aspact_ratio; // 0=no data, 1=4:3, 2=16:9, 3=no data.
u32 pclk_khz;
}_video_timing;
typedef enum
{
I2S_2CH,
I2S_8CH,
SPDIF
}_Audio_Input_Mode;
#define Audio_Input_Mode I2S_2CH
#define AR_ND 0x00
#define AR_4_3 0x01
#define AR_16_9 0x02
typedef struct panel_parameter
{
u16 hfp;
u16 hs;
u16 hbp;
u16 hact;
u16 htotal;
u16 vfp;
u16 vs;
u16 vbp;
u16 vact;
u16 vtotal;
u32 pclk_khz;
}_panel_parameter;
extern void LT8912B_Config(void);
extern u8 Tx_HPD;
#endif
@@ -1,5 +0,0 @@
#ifndef _LT8912B_MAIN_H_
#define _LT8912B_MAIN_H_
extern int LT8912B_Main(void *data);
#endif
@@ -1,39 +0,0 @@
#ifndef _LONTIUMDRV_H_
#define _LONTIUMDRV_H_
struct _lt8912b{
struct device *dev;
struct mutex ocm_lock;
struct gpio_desc *reset_gpio;
struct gpio_desc *power_gpio;
struct i2c_client *i2c_stu;
struct regmap *chip_regmap;
struct addr_1{
struct i2c_client *i2c_stu;
struct regmap *regmap;
}*addr_1;
struct addr_2{
struct i2c_client *i2c_stu;
struct regmap *regmap;
}*addr_2;
};
typedef struct
{
u8 address;
u8 value;
} Chip_Control_Args;
extern struct _lt8912b *lt8912b;
extern volatile bool Main_Loop;
extern const char *LOG_FLAG;
extern u8 addr_1;
extern u8 addr_2;
#endif
@@ -1,10 +0,0 @@
#ifndef _OCMI2CMASTER_H_
#define _OCMI2CMASTER_H_
extern int HDMI_WriteI2C_Byte(u8 addr,u8 data);
extern int HDMI_ReadI2C_Byte(u8 addr);
extern u8 I2CADR;
#endif
@@ -1,41 +0,0 @@
#ifndef _INCLUDE_H_
#define _INCLUDE_H_
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include <linux/gpio.h>
#include <linux/kobject.h>
#include <linux/sysfs.h>
#include <linux/printk.h>
#include <linux/miscdevice.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/mutex.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/kmod.h>
#include <linux/gfp.h>
#include <linux/module.h>
#include <linux/kthread.h>
#include <linux/atomic.h>
#include "LontiumDrv.h"
#include "LT8912B_Main.h"
#include "LT8912B.h"
#include "OcmI2cMaster.h"
#endif
@@ -1,749 +0,0 @@
#include "../include/include.h"
u8 Hsync_H_last = 0x00;
u8 Hsync_L_last = 0x00;
u8 Vsync_H_last = 0x00;
u8 Vsync_L_last = 0x00;
u8 Hsync_L, Hsync_H, Vsync_L, Vsync_H;
bool suspend_on = 0;
u8 Tx_HPD=0;
// hfp, hs, hbp, hact, htotal, vfp, vs, vbp, vact, vtotal, hfp, hs, hbp, hact, htotal, vfp, vs, vbp, vact, vtotal, h_polary, v_polary, vic, aspact_ratio, pclk_khz
struct video_timing video_640x480_60Hz = {16, 96, 48, 640, 800, 10, 2, 33, 480, 525, 0,0, 1, AR_4_3, 25000};
struct video_timing video_720x480_60Hz = {16, 62, 60, 720, 858, 9, 6, 30, 480, 525, 0,0, 2, AR_4_3, 27000};
struct video_timing video_720x576_50Hz = {12, 64, 68, 720, 864, 5, 5, 39, 576, 625, 0,0,17, AR_4_3, 27000};
struct video_timing video_800x600_60Hz = {48, 128, 88, 800, 1056, 1, 4, 23, 600, 628, 1,1, 0, AR_16_9, 40000};
struct video_timing video_1024x768_60Hz = {24, 136, 160, 1024, 1344, 3, 6, 29, 768, 806, 0,0, 0, AR_16_9, 65000};
struct video_timing video_1280x720_60Hz = {110, 40, 220, 1280, 1650, 5, 5, 20, 720, 750, 1,1, 4, AR_16_9, 74250};
struct video_timing video_1280x800_60Hz = {28, 32, 100, 1280, 1440, 2, 6, 15, 800, 823, 0,0, 0, AR_16_9, 71000};
struct video_timing video_1920x1080_60Hz = {88, 44, 148, 1920, 2200, 4, 5, 36, 1080, 1125, 1,1,16, AR_16_9, 148500};
struct video_timing *video;
void DigitalClockEn(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x02,0xf7);
HDMI_WriteI2C_Byte(0x08,0xff);
HDMI_WriteI2C_Byte(0x09,0xff);
HDMI_WriteI2C_Byte(0x0a,0xff);
HDMI_WriteI2C_Byte(0x0b,0x7c);
HDMI_WriteI2C_Byte(0x0c,0xff);
}
void TxAnalog(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x31,0xE1);
HDMI_WriteI2C_Byte(0x32,0xE1);
HDMI_WriteI2C_Byte(0x33,0x0c); //en/disable hdmid output
HDMI_WriteI2C_Byte(0x37,0x00);
HDMI_WriteI2C_Byte(0x38,0x22);
HDMI_WriteI2C_Byte(0x60,0x82);
}
void CbusAnalog(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x39,0x45);
HDMI_WriteI2C_Byte(0x3a,0x00); //20180719
HDMI_WriteI2C_Byte(0x3b,0x00);
}
void HDMIPllAnalog(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x44,0x31);
HDMI_WriteI2C_Byte(0x55,0x44);
HDMI_WriteI2C_Byte(0x57,0x01);
HDMI_WriteI2C_Byte(0x5a,0x02);
}
void AviInfoframe(struct video_timing *video_format)
{
u8 VIC = video_format->vic;
u8 AR = video_format->aspact_ratio;
u8 pb0,pb2,pb4,Sync_Polarity;
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x3c,0x41); //enable null package
Sync_Polarity = (video_format->h_polarity*0x02) + (video_format->v_polarity*0x01);
pb2 = (AR<<4) + 0x08;
pb4 = VIC;
pb0 = (((pb2 + pb4) <= 0x5f)?(0x5f - pb2 - pb4):(0x15f - pb2 - pb4));
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0xab,Sync_Polarity); //sync polarity
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x43,pb0); //PB0:check sum
HDMI_WriteI2C_Byte(0x44,0x10); //PB1:RGB888
HDMI_WriteI2C_Byte(0x45,pb2); //PB2
HDMI_WriteI2C_Byte(0x46,0x00); //PB3
HDMI_WriteI2C_Byte(0x47,pb4); //PB4:vic
}
void MipiAnalog(void)
{
I2CADR = 0x90;
#ifdef _pn_swap_
HDMI_WriteI2C_Byte(0x3e,0xf6); //P/N swap
#else
HDMI_WriteI2C_Byte(0x3e,0xd6); //if mipi pin map follow reference design, no need swap P/N.
#endif
HDMI_WriteI2C_Byte(0x3f,0xd4);//EQ
HDMI_WriteI2C_Byte(0x41,0x3c);//EQ
}
void MipiBasicSet(void)
{
I2CADR = 0x92;
HDMI_WriteI2C_Byte(0x10,0x01); // term en
HDMI_WriteI2C_Byte(0x11,0x10); // settle
//HDMI_WriteI2C_Byte(0x12,0x08); // trail
HDMI_WriteI2C_Byte(0x13,lane_cnt); //00 4 lane //01 1 lane //02 2 lane //03 3lane
HDMI_WriteI2C_Byte(0x14,0x00); //debug mux
#ifdef _lane_swap_ //for EVB only, if mipi pin map follow reference design, no need swap lane.
HDMI_WriteI2C_Byte(0x15,0xa8); //lane swap:3210
printk("%s nmipi basic set: lane swap 3210, %d\n",LOG_FLAG,lane_cnt);
#else
HDMI_WriteI2C_Byte(0x15,0x00); //lane swap:0123
#endif
HDMI_WriteI2C_Byte(0x1a,0x03); // hshift 3
HDMI_WriteI2C_Byte(0x1b,0x03); // vshift 3
}
void MIPI_Video_Setup(struct video_timing *video_format)
{
I2CADR = 0x92;
HDMI_WriteI2C_Byte(0x18,(u8)(video_format->hs%256)); // hwidth
HDMI_WriteI2C_Byte(0x19,(u8)(video_format->vs%256)); // vwidth
HDMI_WriteI2C_Byte(0x1c,(u8)(video_format->hact%256)); // H_active[7:0]
HDMI_WriteI2C_Byte(0x1d,(u8)(video_format->hact/256)); // H_active[15:8]
HDMI_WriteI2C_Byte(0x2f,0x0c); // fifo_buff_length 12
HDMI_WriteI2C_Byte(0x34,(u8)(video_format->htotal%256)); // H_total[7:0]
HDMI_WriteI2C_Byte(0x35,(u8)(video_format->htotal/256)); // H_total[15:8]
HDMI_WriteI2C_Byte(0x36,(u8)(video_format->vtotal%256)); // V_total[7:0]
HDMI_WriteI2C_Byte(0x37,(u8)(video_format->vtotal/256)); // V_total[15:8]
HDMI_WriteI2C_Byte(0x38,(u8)(video_format->vbp%256)); // VBP[7:0]
HDMI_WriteI2C_Byte(0x39,(u8)(video_format->vbp/256)); // VBP[15:8]
HDMI_WriteI2C_Byte(0x3a,(u8)(video_format->vfp%256)); // VFP[7:0]
HDMI_WriteI2C_Byte(0x3b,(u8)(video_format->vfp/256)); // VFP[15:8]
HDMI_WriteI2C_Byte(0x3c,(u8)(video_format->hbp%256)); // HBP[7:0]
HDMI_WriteI2C_Byte(0x3d,(u8)(video_format->hbp/256)); // HBP[15:8]
HDMI_WriteI2C_Byte(0x3e,(u8)(video_format->hfp%256)); // HFP[7:0]
HDMI_WriteI2C_Byte(0x3f,(u8)(video_format->hfp/256)); // HFP[15:8]
video = video_format;
}
void MIPIRxLogicRes(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x03,0x7f); //mipi rx reset
msleep(10);
HDMI_WriteI2C_Byte(0x03,0xff);
HDMI_WriteI2C_Byte(0x05,0xfb); //dds reset
msleep(10);
HDMI_WriteI2C_Byte(0x05,0xff);
}
void DDSConfig(void)
{
I2CADR = 0x92;
HDMI_WriteI2C_Byte(0x4e,0x93);//strm_sw_freq_word[ 7: 0]
HDMI_WriteI2C_Byte(0x4f,0x3E);//strm_sw_freq_word[15: 8]
HDMI_WriteI2C_Byte(0x50,0x29);//strm_sw_freq_word[23:16]
HDMI_WriteI2C_Byte(0x51,0x80);//[0]=strm_sw_freq_word[24]
HDMI_WriteI2C_Byte(0x1e,0x4f);
HDMI_WriteI2C_Byte(0x1f,0x5e);//full_value 464
HDMI_WriteI2C_Byte(0x20,0x01);
HDMI_WriteI2C_Byte(0x21,0x2c);//full_value1 416
HDMI_WriteI2C_Byte(0x22,0x01);
HDMI_WriteI2C_Byte(0x23,0xfa);//full_value2 400
HDMI_WriteI2C_Byte(0x24,0x00);
HDMI_WriteI2C_Byte(0x25,0xc8);//full_value3 384
HDMI_WriteI2C_Byte(0x26,0x00);
HDMI_WriteI2C_Byte(0x27,0x5e);//empty_value 464
HDMI_WriteI2C_Byte(0x28,0x01);
HDMI_WriteI2C_Byte(0x29,0x2c);//empty_value1 416
HDMI_WriteI2C_Byte(0x2a,0x01);
HDMI_WriteI2C_Byte(0x2b,0xfa);//empty_value2 400
HDMI_WriteI2C_Byte(0x2c,0x00);
HDMI_WriteI2C_Byte(0x2d,0xc8);//empty_value3 384
HDMI_WriteI2C_Byte(0x2e,0x00);
HDMI_WriteI2C_Byte(0x42,0x64);//tmr_set[ 7:0]:100us
HDMI_WriteI2C_Byte(0x43,0x00);//tmr_set[15:8]:100us
HDMI_WriteI2C_Byte(0x44,0x04);//timer step
HDMI_WriteI2C_Byte(0x45,0x00);
HDMI_WriteI2C_Byte(0x46,0x59);
HDMI_WriteI2C_Byte(0x47,0x00);
HDMI_WriteI2C_Byte(0x48,0xf2);
HDMI_WriteI2C_Byte(0x49,0x06);
HDMI_WriteI2C_Byte(0x4a,0x00);
HDMI_WriteI2C_Byte(0x4b,0x72);
HDMI_WriteI2C_Byte(0x4c,0x45);
HDMI_WriteI2C_Byte(0x4d,0x00);
HDMI_WriteI2C_Byte(0x52,0x08);// trend step
HDMI_WriteI2C_Byte(0x53,0x00);
HDMI_WriteI2C_Byte(0x54,0xb2);
HDMI_WriteI2C_Byte(0x55,0x00);
HDMI_WriteI2C_Byte(0x56,0xe4);
HDMI_WriteI2C_Byte(0x57,0x0d);
HDMI_WriteI2C_Byte(0x58,0x00);
HDMI_WriteI2C_Byte(0x59,0xe4);
HDMI_WriteI2C_Byte(0x5a,0x8a);
HDMI_WriteI2C_Byte(0x5b,0x00);
HDMI_WriteI2C_Byte(0x5c,0x34);
HDMI_WriteI2C_Byte(0x51,0x00);
}
void AudioIIsEn(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0xB2,0x01);//DVI mode:0x00; HDMI mode:0x01;
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x06,0x08);
HDMI_WriteI2C_Byte(0x07,0xF0);
HDMI_WriteI2C_Byte(0x34,0xD2);//0xE2:32FS; 0xD2:64FS
HDMI_WriteI2C_Byte(0x0F,0x2B);
}
void AudioSpdifEn(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0xB2,0x01);
I2CADR = 0x94;
HDMI_WriteI2C_Byte(0x06,0x0e);
HDMI_WriteI2C_Byte(0x07,0x00);
HDMI_WriteI2C_Byte(0x34,0xD2);//0xE2:32FS; 0xD2:64FS
}
void Core_Pll_setup(struct panel_parameter *panel)
{
u8 cpll_m, cpll_k1,cpll_k2; //cpll_k3;
u32 temp;
temp=(panel->pclk_khz*7)/25;
cpll_m=temp/1000;
temp=(panel->pclk_khz*7)/25;
temp=temp%1000;
//temp=temp*16.384;
temp=temp*16384/1000;
cpll_k1=temp%256;
cpll_k2=temp/256;
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x50,0x24);//cp=50uA
HDMI_WriteI2C_Byte(0x51,0x05);//xtal_clk as reference,second order passive LPF PLL
HDMI_WriteI2C_Byte(0x52,0x14);//use second-order PLL
HDMI_WriteI2C_Byte(0x69,cpll_m);//CP_PRESET_DIV_RATIO
HDMI_WriteI2C_Byte(0x69,(cpll_m|0x80));
HDMI_WriteI2C_Byte(0x6c,(cpll_k2|0x80));//RGD_CP_SOFT_K_EN,RGD_CP_SOFT_K[13:8]
HDMI_WriteI2C_Byte(0x6b,cpll_k1);
HDMI_WriteI2C_Byte(0x04,0xfb);//core pll reset
HDMI_WriteI2C_Byte(0x04,0xff);
}
void Core_Pll_bypass(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x50,0x24); //cp=50uA
HDMI_WriteI2C_Byte(0x51,0x2d); //Pix_clk as reference,second order passive LPF PLL
HDMI_WriteI2C_Byte(0x52,0x04); //loopdiv=0;use second-order PLL
HDMI_WriteI2C_Byte(0x69,0x0e); //CP_PRESET_DIV_RATIO
HDMI_WriteI2C_Byte(0x69,0x8e);
HDMI_WriteI2C_Byte(0x6a,0x00);
HDMI_WriteI2C_Byte(0x6c,0xb8); //RGD_CP_SOFT_K_EN,RGD_CP_SOFT_K[13:8]
HDMI_WriteI2C_Byte(0x6b,0x51);
HDMI_WriteI2C_Byte(0x04,0xfb); //core pll reset
HDMI_WriteI2C_Byte(0x04,0xff);
}
void Lvds_Pll_Reset(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x02,0xf7); //lvds pll reset
HDMI_WriteI2C_Byte(0x02,0xff);
}
void Scaler_bypass(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x7f,0x00);//disable scaler
HDMI_WriteI2C_Byte(0xa8,0x13);
}
void Scaler_setup(struct video_timing *input_video,struct panel_parameter *panel)
{
//for example: 720P to 1280x800
//These register base on MIPI resolution and LVDS panel resolution.
u32 h_ratio,v_ratio;
u8 i;
u32 htotal;
// h_ratio = input_video->hact*4096.00/panel->hact;
// v_ratio = input_video->vact*4096.00/panel->vact;
h_ratio = input_video->hact*4096/panel->hact;
v_ratio = input_video->vact*4096/panel->vact;
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x80,0x00);
HDMI_WriteI2C_Byte(0x81,0xff);
HDMI_WriteI2C_Byte(0x82,0x03);
HDMI_WriteI2C_Byte(0x83,(u8)(input_video->hact%256));
HDMI_WriteI2C_Byte(0x84,(u8)(input_video->hact/256));
HDMI_WriteI2C_Byte(0x85,0x80);
HDMI_WriteI2C_Byte(0x86,0x10);
HDMI_WriteI2C_Byte(0x87,(u8)(panel->htotal%256));
HDMI_WriteI2C_Byte(0x88,(u8)(panel->htotal/256));
HDMI_WriteI2C_Byte(0x89,(u8)(panel->hs%256));
HDMI_WriteI2C_Byte(0x8a,(u8)(panel->hbp%256));
HDMI_WriteI2C_Byte(0x8b,(u8)(panel->vs%256));
HDMI_WriteI2C_Byte(0x8c,(u8)(panel->hact%256));
HDMI_WriteI2C_Byte(0x8d,(u8)(panel->vact%256));
HDMI_WriteI2C_Byte(0x8e,(u8)(panel->vact/256)*16+(panel->hact/256));
HDMI_WriteI2C_Byte(0x8f,(u8)(h_ratio%256));
HDMI_WriteI2C_Byte(0x90,(u8)(h_ratio/256));
HDMI_WriteI2C_Byte(0x91,(u8)(v_ratio%256));
HDMI_WriteI2C_Byte(0x92,(u8)(v_ratio/256));
HDMI_WriteI2C_Byte(0x7f,0x96);
//HDMI_WriteI2C_Byte(0x7f,0xb0);
//HDMI_WriteI2C_Byte(0xa8,0x3b);
HDMI_WriteI2C_Byte(0xa8,0x13);
HDMI_WriteI2C_Byte(0x02,0xf7);//lvds pll reset
HDMI_WriteI2C_Byte(0x02,0xff);
HDMI_WriteI2C_Byte(0x03,0xcf);//scaler reset
HDMI_WriteI2C_Byte(0x03,0xff);
HDMI_WriteI2C_Byte(0x7f,0xb0);
for(i = 0; i < 300; i++)
{
if(HDMI_ReadI2C_Byte(0xa7)&0x20)
{
htotal = (HDMI_ReadI2C_Byte(0xa7)&0x0f)*0x100 + HDMI_ReadI2C_Byte(0xa6);
printk("%s scaler setup htotal = %d.\n",LOG_FLAG,htotal);
break;
//please set "htotal" to panel_parameter's htotal.
}
printk("%s scaler loop = %d\n",LOG_FLAG, i);
msleep(100);
}
}
void LvdsPowerUp(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x44,0x30);
HDMI_WriteI2C_Byte(0x51,0x05);
}
void LvdsPowerDown(void)
{
I2CADR = 0x90;
//HDMI_WriteI2C_Byte(0x44,0x31);
HDMI_WriteI2C_Byte(0x51,0x15); //
//HDMI_WriteI2C_Byte(0x03,0xfb);
}
void LvdsBypass(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x50,0x24); //cp=50uA
HDMI_WriteI2C_Byte(0x51,0x2d); //Pix_clk as reference,second order passive LPF PLL
HDMI_WriteI2C_Byte(0x52,0x04); //loopdiv=0;use second-order PLL
HDMI_WriteI2C_Byte(0x69,0x0e); //CP_PRESET_DIV_RATIO
HDMI_WriteI2C_Byte(0x69,0x8e);
HDMI_WriteI2C_Byte(0x6a,0x00);
HDMI_WriteI2C_Byte(0x6c,0xb8); //RGD_CP_SOFT_K_EN,RGD_CP_SOFT_K[13:8]
HDMI_WriteI2C_Byte(0x6b,0x51);
HDMI_WriteI2C_Byte(0x04,0xfb); //core pll reset
HDMI_WriteI2C_Byte(0x04,0xff);
HDMI_WriteI2C_Byte(0x7f,0x00); //disable scaler
HDMI_WriteI2C_Byte(0xa8,0x13); //0x13:VSEA ; 0x33:JEIDA;
}
void LvdsOutput(bool on)
{
if(on)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x02,0xf7); //lvds pll reset
HDMI_WriteI2C_Byte(0x02,0xff); //scaler module reset
HDMI_WriteI2C_Byte(0x03,0xcb); //lvds tx module reset
HDMI_WriteI2C_Byte(0x03,0xfb);
HDMI_WriteI2C_Byte(0x03,0xff);
HDMI_WriteI2C_Byte(0x44,0x30); //enbale lvds output
printk("%s LT8912_lvds_output_enable!\n",LOG_FLAG);
}else{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x44,0x31);
}
}
void HdmiOutput(bool on)
{
if(on)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x33,0x0e); //enable hdmi output
printk("%s HDMI output Enable.\n",LOG_FLAG);
}
else
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x33,0x0c); //disable hdmi output
printk("%s HDMI output Disable.\n",LOG_FLAG);
}
}
void LvdsScalerResult(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x7f,0xb0);
}
void ScalerReset(void)
{
I2CADR = 0x90;
HDMI_WriteI2C_Byte(0x03,0xcf);
HDMI_WriteI2C_Byte(0x03,0xff);
}
void lt8912_check_dds(void)
{
u8 reg_920c, reg_920d, reg_920e, reg_920f;
u8 i;
for(i = 0; i < 10; i++)
{
I2CADR = 0x92;
reg_920c = HDMI_ReadI2C_Byte(0x0c);
reg_920d = HDMI_ReadI2C_Byte(0x0d);
reg_920e = HDMI_ReadI2C_Byte(0x0e);
reg_920f = HDMI_ReadI2C_Byte(0x0f);
printk("%s 0x0c~0f = %02x, %02x, %02x\n",LOG_FLAG,reg_920c, reg_920d, reg_920e);
// if((reg_920e == 0xd2)&&(reg_920d < 0xff)&&(reg_920d > 0xd0)) //shall update threshold here base on actual dds result.
// {
// printk("%s lvds_check_dds: stable!\n",LOG_FLAG);
// break;
// }
msleep(500);
}
}
void lvds_output_cfg(void)
{
LvdsPowerUp();
#ifdef _lvds_bypass
LvdsBypass();
#else
//Core_Pll_setup(&AA070M0C1);
Core_Pll_setup(&KD101FM_1_C001A);
Scaler_setup(&video_1280x720_60Hz,&KD101FM_1_C001A);
#endif
}
void MIPI_Input_det(void)
{
I2CADR = 0x90;
Hsync_L = HDMI_ReadI2C_Byte(0x9c);
Hsync_H = HDMI_ReadI2C_Byte(0x9d);
Vsync_L = HDMI_ReadI2C_Byte(0x9e);
Vsync_H = HDMI_ReadI2C_Byte(0x9f);
if((Hsync_H!=Hsync_H_last)||(Vsync_H!=Vsync_H_last)) /*hiht byte changed*/
{
printk("%s 0x9c~9f = %x, %x, %x, %x.\n", LOG_FLAG,Hsync_H, Hsync_L,Vsync_H, Vsync_L);
if(Vsync_H==0x02 && Vsync_L <= 0xef&&Vsync_L >= 0xec)//0x2EE
{
video = &video_1280x720_60Hz;
printk("%s videoformat = VESA_1280x720_60\n",LOG_FLAG);
}
else if(Vsync_H == 0x03 && Vsync_L <= 0x3a &&Vsync_L >= 0x34)//0x337
{
video = &video_1280x800_60Hz;
printk("%s videoformat = VESA_1280x800_60\n",LOG_FLAG);
}
else if(Vsync_H == 0x04 && Vsync_L <= 0x67&&Vsync_L >= 0x63)//0x465
{
video = &video_1920x1080_60Hz;
printk("%s videoformat = VESA_1920x1080_60\n",LOG_FLAG);
}
else
{
printk("%s videoformat = video_none\n",LOG_FLAG);
}
Hsync_L_last = Hsync_L;
Hsync_H_last = Hsync_H;
Vsync_L_last = Vsync_L;
Vsync_H_last = Vsync_H;
MIPI_Video_Setup(video);
AviInfoframe(video);
MIPIRxLogicRes();
}
}
//void dds_clock_debug(void)
//{
// #ifdef dds_debug
// u8 reg_920c, reg_920d, reg_920e, reg_920f;
//
// while(1)
// {
// I2CADR = 0x92;
// reg_920c = HDMI_ReadI2C_Byte(0x0c);
// reg_920d = HDMI_ReadI2C_Byte(0x0d);
// reg_920e = HDMI_ReadI2C_Byte(0x0e);
// reg_920f = HDMI_ReadI2C_Byte(0x0f);
//
// printk("\r\n0x0c~0e = %02x, %02x, %02x",reg_920c, reg_920d, reg_920e);
// printk("\r\nEnter the dds_clock_debug cycle");
//
// msleep(1000);
// }
// #endif
//}
void pattern_test(void)
{
u32 DDS_initial_value;
u8 pclk_Mhz;
// video = &video_640x480_60Hz;
// video = &video_720x480_60Hz;
// video = &video_800x600_60Hz;
// video = &video_1280x720_60Hz;
// video = &video_1280x800_60Hz;
video = &video_1920x1080_60Hz;
DigitalClockEn();
TxAnalog();
CbusAnalog();
HDMIPllAnalog();
AudioIIsEn();
AviInfoframe(video);
lvds_output_cfg();
I2CADR = 0x92;
//////////////////Pattern resolution set////////////////////
HDMI_WriteI2C_Byte(0x72,0x12);
HDMI_WriteI2C_Byte(0x73,(u8)((video->hs+video->hbp)%256)); //RGD_PTN_DE_DLY[7:0]
HDMI_WriteI2C_Byte(0x74,(u8)((video->hs+video->hbp)/256)); //RGD_PTN_DE_DLY[11:8]
HDMI_WriteI2C_Byte(0x75,(u8)((video->vs+video->vbp)%256)); //RGD_PTN_DE_TOP[6:0]
HDMI_WriteI2C_Byte(0x76,(u8)(video->hact%256)); //RGD_PTN_DE_CNT[7:0]
HDMI_WriteI2C_Byte(0x77,(u8)(video->vact%256)); //RGD_PTN_DE_LIN[7:0]
HDMI_WriteI2C_Byte(0x78,((((u8)(video->vact/256))<<4)+((u8)(video->hact/256)))); //RGD_PTN_DE_LIN[10:8],RGD_PTN_DE_CNT[11:8]
HDMI_WriteI2C_Byte(0x79,(u8)(video->htotal%256)); //RGD_PTN_H_TOTAL[7:0]
HDMI_WriteI2C_Byte(0x7a,(u8)(video->vtotal%256)); //RGD_PTN_V_TOTAL[7:0]
HDMI_WriteI2C_Byte(0x7b,((((u8)(video->vtotal/256))<<4)+((u8)(video->htotal/256)))); //RGD_PTN_V_TOTAL[10:8],RGD_PTN_H_TOTAL[11:8]
HDMI_WriteI2C_Byte(0x7c,(u8)(video->hs%256)); //RGD_PTN_HWIDTH[7:0]
HDMI_WriteI2C_Byte(0x7d,((((u8)(video->hs/256))<<6)+((u8)(video->vs%256)))); //RGD_PTN_HWIDTH[9:8],RGD_PTN_VWIDTH[5:0]
HDMI_WriteI2C_Byte(0x70,0x80); //pattern enable
HDMI_WriteI2C_Byte(0x71,0x51);
HDMI_WriteI2C_Byte(0x42,0x12);
///////////////////////////////////////////////////////////
HDMI_WriteI2C_Byte(0x1e,0x67); //h v d pol hdmi sel pll sel
//////////////////pattern pixl clock set///////////////////
pclk_Mhz = (u8)(video->pclk_khz/1000);
DDS_initial_value = (u32)(pclk_Mhz*0x16C16);
HDMI_WriteI2C_Byte(0x4e,(u8)(DDS_initial_value&0x000000ff)); //strm_sw_freq_word[ 7: 0]
HDMI_WriteI2C_Byte(0x4f,(u8)((DDS_initial_value&0x0000ff00)>>8)); //strm_sw_freq_word[15: 8]
HDMI_WriteI2C_Byte(0x50,(u8)((DDS_initial_value&0x00ff0000)>>16)); //strm_sw_freq_word[23:16]
HDMI_WriteI2C_Byte(0x51,0x80);
// HDMI_WriteI2C_Byte(0x4e,0x3E); //strm_sw_freq_word[ 7: 0]
// HDMI_WriteI2C_Byte(0x4f,0xE9); //strm_sw_freq_word[15: 8]
// HDMI_WriteI2C_Byte(0x50,0xD3); //strm_sw_freq_word[23:16]
// HDMI_WriteI2C_Byte(0x51,0x80); //pattern en
///////////////////////////////////////////////////////////
HdmiOutput(1);
LvdsOutput(1);
}
u8 LT8912_Get_HPD(void)
{
//(0x90)0xc1[bit7] description HPD is High or Low
I2CADR = 0x90;
if((HDMI_ReadI2C_Byte(0xc1)&0x80)==0x80)
{
printk("%s LT8912_Get_HPD: high\n",LOG_FLAG);
return 1;
}
else
{
printk("%s LT8912_Get_HPD: low\n",LOG_FLAG);
return 0;
}
}
void LT8912B_chip_ID(void)
{
I2CADR=0x90;
printk("%s chip ID: 0x%x, 0x%x\n",LOG_FLAG,HDMI_ReadI2C_Byte(0x00), HDMI_ReadI2C_Byte(0x01));
}
void LT8912B_Suspend(bool on)
{
//9mA,HPD detect is normal.
if(on)
{
if(!suspend_on)
{
// enter suspend mode
I2CADR = 0x90;
HDMI_WriteI2C_Byte( 0x54, 0x1d );
HDMI_WriteI2C_Byte( 0x51, 0x15 );
HDMI_WriteI2C_Byte( 0x44, 0x31 );
HDMI_WriteI2C_Byte( 0x41, 0xbd );
HDMI_WriteI2C_Byte( 0x5c, 0x11 );
suspend_on = 1;
printk("%s suspend on.\n",LOG_FLAG);
}
}else{
if(suspend_on)
{
//exist suspend mode
I2CADR = 0x90;
HDMI_WriteI2C_Byte( 0x5c, 0x10 );
HDMI_WriteI2C_Byte( 0x54, 0x1c );
HDMI_WriteI2C_Byte( 0x51, 0x2d );
HDMI_WriteI2C_Byte( 0x44, 0x30 );
HDMI_WriteI2C_Byte( 0x41, 0xbc );
msleep(10);
HDMI_WriteI2C_Byte(0x03,0x7f);
msleep(10);
HDMI_WriteI2C_Byte(0x03,0xff);
HDMI_WriteI2C_Byte(0x05,0xfb);
msleep(10);
HDMI_WriteI2C_Byte(0x05,0xff);
suspend_on = 0;
printk("%s suspend off.\n",LOG_FLAG);
}
}
}
void LT8912B_Config(void)
{
LT8912B_chip_ID();
#ifdef _pattern_test_
pattern_test();
while(Main_Loop);
#else
DigitalClockEn();
TxAnalog();
CbusAnalog();
HDMIPllAnalog();
MipiAnalog();
MipiBasicSet();
DDSConfig();
MIPI_Video_Setup(&video_1920x1080_60Hz);
MIPI_Input_det();
AudioIIsEn();
#ifdef dds_debug
lt8912_check_dds(); // can be removed when debug stage.
#endif
#ifdef _lvds_bypass
lvds_output_cfg();
LvdsOutput(1);
#endif
///////////////////////////////////////////////////////////// test use
// HdmiOutput(1);
// while(1);
/////////////////////////////////////////////////////////////
#ifdef _hdmi_output
if(LT8912_Get_HPD())
{
if(!Tx_HPD)
{
HdmiOutput(1);
Tx_HPD = 1;
printk("%s LT8912_Get_HPD: high\n",LOG_FLAG);
}
}else{
if(Tx_HPD)
{
LT8912B_Suspend(1);
printk("%s LT8912 Suspend!\n",LOG_FLAG);
HdmiOutput(0);
Tx_HPD = 0;
printk("%s LT8912_Get_HPD: low\n",LOG_FLAG);
}
}
#endif
#endif
while(Main_Loop)
{
MIPI_Input_det();
msleep(300);
#ifdef _hdmi_output
if(LT8912_Get_HPD())
{
if(!Tx_HPD)
{
LT8912B_Suspend(0);
HdmiOutput(1);
Tx_HPD = 1;
}
}else{
if(Tx_HPD)
{
LT8912B_Suspend(1);
HdmiOutput(0);
Tx_HPD = 0;
}
}
#endif
}
}
@@ -1,35 +0,0 @@
#include "../include/include.h"
void LT8912B_Power_On(void)
{
gpiod_set_value(lt8912b->power_gpio,1);
msleep(5);
printk("%s Set power High level.\n ",LOG_FLAG);
}
void LT8912B_Reset(void)
{
//complete chip reset logic
gpiod_set_value(lt8912b->reset_gpio,1);
msleep(5);
gpiod_set_value(lt8912b->reset_gpio,0);
msleep(5);
gpiod_set_value(lt8912b->reset_gpio,1);
msleep(100);
printk("%s Reset chip.\n",LOG_FLAG);
}
int LT8912B_Main(void *data)
{
printk("%s Init Start!\n",LOG_FLAG);
LT8912B_Power_On();
LT8912B_Reset();
LT8912B_Config();
Tx_HPD = 0;
return 0;
}
@@ -1,385 +0,0 @@
#include "../include/include.h"
struct _lt8912b *lt8912b;
static struct task_struct *kthread_obj;
volatile bool Main_Loop=true;
char *ChipName = "lt8912b"; //Define Lontium Chip Name
static int major = 0;
static struct cdev chip_cdev;
static struct class *chip_class;
const char *LOG_FLAG = "LT8912B";
u8 I2CADR;
u8 addr_1_value = 0x00;
u8 addr_2_value = 0x00;
static int chip_open(struct inode *inode, struct file *filp)
{
printk("chip open\n");
return 0;
}
static int chip_close (struct inode *node, struct file *file)
{
printk("chip close\n");
return 0;
}
static ssize_t chip_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)
{
Chip_Control_Args parameter;
if (copy_from_user(&parameter, buf, sizeof(parameter))) {
return -EFAULT;
}
parameter.value = HDMI_ReadI2C_Byte(parameter.address);
if (copy_to_user(buf, &parameter, sizeof(parameter))) {
return -EFAULT;
}
return sizeof(parameter);
}
static ssize_t chip_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offt)
{
Chip_Control_Args parameter;
if (copy_from_user(&parameter, buf, sizeof(parameter))) {
return -EFAULT;
}
HDMI_WriteI2C_Byte(parameter.address, parameter.value);
return sizeof(parameter);
}
static struct file_operations chip_drv = {
.owner = THIS_MODULE,
.open = chip_open,
.release = chip_close,
.read = chip_read,
.write = chip_write,
};
static int chip_dev_init(void)
{
int ret;
dev_t devid;
ret = alloc_chrdev_region(&devid, 0, 1, ChipName);
if (ret < 0) {
return ret;
}
major = MAJOR(devid);
cdev_init(&chip_cdev, &chip_drv);
cdev_add(&chip_cdev, devid, 1);
chip_class = class_create(THIS_MODULE, "chip_class");
if (IS_ERR(chip_class)) {
unregister_chrdev(major, ChipName);
return -1;
}
device_create(chip_class, NULL, MKDEV(major, 0), NULL, ChipName); /* /dev/ChipName */
return 0;
}
static void chip_dev_exit(void)
{
device_destroy(chip_class, MKDEV(major, 0));
class_destroy(chip_class);
cdev_del(&chip_cdev);
unregister_chrdev_region(MKDEV(major,0), 1);
}
static const struct regmap_range chip_ranges[] = {
{ .range_min = 0, .range_max = 0xffff },
};
static const struct regmap_access_table chip_table = {
.yes_ranges = chip_ranges,
.n_yes_ranges = ARRAY_SIZE(chip_ranges),
};
static const struct regmap_config chip_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
.volatile_table = &chip_table,
.cache_type = REGCACHE_NONE,
};
static int chip_parse_dts(struct device *dev)
{
/*
* devm_gpiod_get_optional - If this fails, NULL is returned and no error pointer.
*
* devm_gpiod_get - If this fails, an error pointer is returned, usually ERR_PTR(-ENOENT).
*
* The devm_gpiod_get function is recommended for practical use.
*/
//Gets the handle to power gpio in dts
lt8912b->power_gpio=devm_gpiod_get_optional(dev, "power", GPIOD_OUT_HIGH);
if (IS_ERR(lt8912b->power_gpio)) {
dev_err(dev, "Failed to get power GPIO\n");
return PTR_ERR(lt8912b->power_gpio);
}
//Gets the handle to reset gpio in dts
lt8912b->reset_gpio=devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
if (IS_ERR(lt8912b->reset_gpio)) {
dev_err(dev, "Failed to get reset GPIO\n");
return PTR_ERR(lt8912b->reset_gpio);
}
// Additional GPIO pins can be added here if needed
return 0;
}
static int chip_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
struct i2c_board_info addr_1_board_info = {
I2C_BOARD_INFO("lt8912b_addr_1", addr_1_value),
};
struct i2c_board_info addr_2_board_info = {
I2C_BOARD_INFO("lt8912b_addr_2", addr_2_value),
};
struct device_node *np = client->dev.of_node;
struct device_node *addr_1_node;
struct device_node *addr_2_node;
int ret;
if (!np) {
dev_err(&client->dev, "Device tree node missing");
return -EINVAL;
}
chip_dev_init();
lt8912b = devm_kzalloc(&client->dev, sizeof(*lt8912b), GFP_KERNEL);
if (lt8912b == NULL)
return -ENOMEM;
lt8912b->i2c_stu = client;
lt8912b->dev = &client->dev;
////////////////////////////////////////////////
//addr_0
lt8912b->chip_regmap = devm_regmap_init_i2c(client, &chip_regmap_config);
if (IS_ERR(lt8912b->chip_regmap)) {
dev_err(&client->dev, "Failed to initialize regmap\n");
return PTR_ERR(lt8912b->chip_regmap);
}
////////////////////////////////////////////////
/////////////////////////////////////////////////
//addr_1
addr_1_node = of_get_child_by_name(np, "lt8912b_addr_1");
if (!addr_1_node) {
dev_err(&client->dev, "Failed to find lt8912b_addr_1 node");
return -EINVAL;
}
lt8912b->addr_1 = devm_kzalloc(&client->dev, sizeof(struct addr_1), GFP_KERNEL);
if (!lt8912b->addr_1)
return -ENOMEM;
if (of_property_read_u8(addr_1_node, "addr_1_reg", &addr_1_value)) {
dev_err(&client->dev, "Failed to get addr_1_reg address");
return -EINVAL;
}
addr_1_board_info.addr =addr_1_value;
lt8912b->addr_1->i2c_stu = i2c_new_device(client->adapter, &addr_1_board_info);
if (!lt8912b->addr_1->i2c_stu) {
dev_err(&client->dev, "Failed to create I2C client for addr_1");
return -ENODEV;
}
lt8912b->addr_1->regmap = devm_regmap_init_i2c(lt8912b->addr_1->i2c_stu, &chip_regmap_config);
if (IS_ERR(lt8912b->addr_1->regmap)) {
dev_err(&client->dev, "Failed to initialize addr_1 regmap");
i2c_unregister_device(lt8912b->addr_1->i2c_stu);
return PTR_ERR(lt8912b->addr_1->regmap);
}
///////////////////////////////////////////////////
/////////////////////////////////////////////////
//addr_2
addr_2_node = of_get_child_by_name(np, "lt8912b_addr_2");
if (!addr_2_node) {
dev_err(&client->dev, "Failed to find lt8912b_addr_2 node");
return -EINVAL;
}
lt8912b->addr_2 = devm_kzalloc(&client->dev, sizeof(struct addr_2), GFP_KERNEL);
if (!lt8912b->addr_2)
return -ENOMEM;
if (of_property_read_u8(addr_2_node, "addr_2_reg", &addr_2_value)) {
dev_err(&client->dev, "Failed to get addr_2_reg address");
return -EINVAL;
}
addr_2_board_info.addr =addr_2_value;
lt8912b->addr_2->i2c_stu = i2c_new_device(client->adapter, &addr_2_board_info);
if (!lt8912b->addr_2->i2c_stu) {
dev_err(&client->dev, "Failed to create I2C client for addr_2");
return -ENODEV;
}
lt8912b->addr_2->regmap = devm_regmap_init_i2c(lt8912b->addr_2->i2c_stu, &chip_regmap_config);
if (IS_ERR(lt8912b->addr_2->regmap)) {
dev_err(&client->dev, "Failed to initialize addr_2 regmap");
i2c_unregister_device(lt8912b->addr_2->i2c_stu);
return PTR_ERR(lt8912b->addr_2->regmap);
}
///////////////////////////////////////////////////
mutex_init(&lt8912b->ocm_lock);
ret = chip_parse_dts(lt8912b->dev);
if (ret<0){
dev_err(&client->dev, "Failed to parse device tree\n");
return ret;
}
i2c_set_clientdata(client, lt8912b);
kthread_obj = kthread_run(LT8912B_Main, NULL, "LT8912B_kthread");
if (IS_ERR(kthread_obj)) {
dev_err(&client->dev, "Failed to create kernel thread\n");
return PTR_ERR(kthread_obj);
}
return 0;
}
static int chip_remove(struct i2c_client *client)
{
Main_Loop = false;
msleep(500);
mutex_destroy(&lt8912b->ocm_lock);
i2c_unregister_device(lt8912b->addr_1->i2c_stu);
i2c_unregister_device(lt8912b->addr_2->i2c_stu);
chip_dev_exit();
printk("driver removed\n");
return 0;
}
static int chip_suspend(struct device *dev)
{
printk(KERN_INFO "%s Suspend.\n",LOG_FLAG);
gpiod_set_value(lt8912b->reset_gpio,0);
msleep(10);
Main_Loop =false;
return 0;
}
static int chip_resume(struct device *dev)
{
printk(KERN_INFO "%s Resume.\n",LOG_FLAG);
gpiod_set_value(lt8912b->reset_gpio,1);
msleep(5);
Main_Loop = true;
msleep(5);
kthread_obj = kthread_run(LT8912B_Main, NULL, "LT8912B_kthread");
return 0;
}
static const struct dev_pm_ops chip_pm_ops = {
.suspend = chip_suspend,
.resume = chip_resume,
};
static const struct i2c_device_id chip_ids[] = {
{"lt8912b", 0},
{ }
};
MODULE_DEVICE_TABLE(i2c, chip_ids);
static const struct of_device_id chip_id_table[] = {
{.compatible = "lontium,lt8912b"},
{ }
};
MODULE_DEVICE_TABLE(of, chip_id_table);
static struct i2c_driver chip_driver = {
.driver = {
.owner = THIS_MODULE,
.name = "lt8912b",
.pm = &chip_pm_ops,
.of_match_table = chip_id_table,
},
.probe = chip_probe,
.remove = chip_remove,
.id_table = chip_ids,
};
module_i2c_driver(chip_driver);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("LT8912B driver");
MODULE_AUTHOR("Tony Yang<syyang@lontium.com>");
@@ -1,91 +0,0 @@
#include "../include/include.h"
int HDMI_WriteI2C_Byte(u8 addr,u8 data)
{
int ret = 0;
mutex_lock(&lt8912b->ocm_lock);
if(I2CADR==0x90)
{
ret = regmap_write(lt8912b->chip_regmap, addr, data);
if (ret < 0) {
printk("regmap_write error: (0x%02x 0x%02x 0x%02x) %d",
lt8912b->i2c_stu->addr, addr, data, ret);
mutex_unlock(&lt8912b->ocm_lock);
return ret;
}
}else if(I2CADR==0x92){
ret = regmap_write(lt8912b->addr_1->regmap, addr, data);
if (ret < 0) {
printk("regmap_write error: (0x%02x 0x%02x 0x%02x) %d",
lt8912b->addr_1->i2c_stu->addr, addr, data, ret);
mutex_unlock(&lt8912b->ocm_lock);
return ret;
}
}else if(I2CADR==0x94){
ret = regmap_write(lt8912b->addr_2->regmap, addr, data);
if (ret < 0) {
printk("regmap_write error: (0x%02x 0x%02x 0x%02x) %d",
lt8912b->addr_2->i2c_stu->addr, addr, data, ret);
mutex_unlock(&lt8912b->ocm_lock);
return ret;
}
}
mutex_unlock(&lt8912b->ocm_lock);
return 0;
}
int HDMI_ReadI2C_Byte(u8 addr)
{
int ret = 0;
unsigned int val = 0;
mutex_lock(&lt8912b->ocm_lock);
if(I2CADR==0x90){
ret = regmap_read(lt8912b->chip_regmap, addr, &val);
if (ret < 0) {
printk("regmap_read error: (0x%02x 0x%02x) %d",
lt8912b->i2c_stu->addr, addr, ret);
mutex_unlock(&lt8912b->ocm_lock);
return ret;
}
}else if(I2CADR==0x92){
ret = regmap_read(lt8912b->addr_1->regmap, addr, &val);
if (ret < 0) {
printk("regmap_read error: (0x%02x 0x%02x) %d",
lt8912b->addr_1->i2c_stu->addr, addr, ret);
mutex_unlock(&lt8912b->ocm_lock);
return ret;
}
}else if(I2CADR==0x94){
ret = regmap_read(lt8912b->addr_2->regmap, addr, &val);
if (ret < 0) {
printk("regmap_read error: (0x%02x 0x%02x) %d",
lt8912b->addr_2->i2c_stu->addr, addr, ret);
mutex_unlock(&lt8912b->ocm_lock);
return ret;
}
}
mutex_unlock(&lt8912b->ocm_lock);
return (u8)val;
}
EXPORT_SYMBOL(HDMI_WriteI2C_Byte);
EXPORT_SYMBOL(HDMI_ReadI2C_Byte);
@@ -1,4 +0,0 @@
---- _LVDS_Bypass_ Matches (3 in 3 files) ----
LT8912B.c (src):#ifdef _LVDS_Bypass_
Main.c:#ifdef _LVDS_Bypass_
Main.h (inc)://#define _LVDS_Bypass_
File diff suppressed because it is too large Load Diff
@@ -1,25 +0,0 @@
main.c␍
src\i2c_master.c␍
src\interrupt.c␍
src\stm8s_clk.c␍
src\stm8s_exti.c␍
src\stm8s_gpio.c␍
src\stm8s_itc.c␍
stm8_interrupt_vector.c␍
inc\i2c_master.h␍
inc\include.h␍
inc\lt8522ex.h␍
inc\stm8s.h␍
inc\stm8s_clk.h␍
inc\stm8s_conf.h␍
inc\stm8s_exti.h␍
inc\stm8s_it.h␍
inc\stm8s_macro.h␍
inc\stm8s_type.h␍
..\..\..\..\..\..\..\..\program files (x86)\cosmic\cxstm8_32k\hstm8\mods0.h␍
..\..\..\..\..\..\..\..\program files (x86)\cosmic\cxstm8_32k\hstm8\string.h␍
inc\edid.h␍
inc\main.h␍
inc\stm8s_gpio.h␍
inc\stm8s_itc.h␍
inc\stm8s_iwdg.h␍
@@ -1,9 +0,0 @@
;
; ** Welcome to ST Visual Debug SPY System **
; ** Copyright STMicroelectronics (c) 1999, all rights reserved **
; Level 1
; Date 04/12/14
; Time 11:09:57
;
<.\confmenu.cpp:170-11:09:57>
Error: resource handle has not been restored in .\mainfrm.cpp:3205
@@ -1,16 +0,0 @@
#ifndef _Delay_H
#define _Delay_H
extern void Timer0_Delay100us(UINT32 u32CNT);
extern void Timer0_Delay1ms(UINT32 u32CNT);
extern void Timer1_Delay10ms(UINT32 u32CNT);
extern void Timer2_Delay500us(UINT32 u32CNT);
extern void Timer3_Delay100ms(UINT32 u32CNT);
extern void Timer0_Delay40ms(UINT32 u32CNT);
extern void Timer3_Delay10us(UINT32 u32CNT);
extern bit BIT_TMP;
#endif
@@ -1,539 +0,0 @@
/*--------------------------------------------------------------------------
N76E003 Function_define.h V1.02
All function define inital setting file for Nuvoton N76E003
--------------------------------------------------------------------------*/
#include <intrins.h>
#include <stdio.h>
#define nop _nop_( );
//16 --> 8 x 2
#define HIBYTE( v1 ) ( (UINT8)( ( v1 ) >> 8 ) ) //v1 is UINT16
#define LOBYTE( v1 ) ( (UINT8)( ( v1 ) & 0xFF ) )
//8 x 2 --> 16
#define MAKEWORD( v1, v2 ) ( ( ( (UINT16)( v1 ) ) << 8 ) + (UINT16)( v2 ) ) //v1,v2 is UINT8
//8 x 4 --> 32
#define MAKELONG( v1, v2, v3, v4 ) (UINT32)( ( v1 << 32 ) + ( v2 << 16 ) + ( v3 << 8 ) + v4 ) //v1,v2,v3,v4 is UINT8
//32 --> 16 x 2
#define YBYTE1( v1 ) ( (UINT16)( ( v1 ) >> 16 ) ) //v1 is UINT32
#define YBYTE0( v1 ) ( (UINT16)( ( v1 ) & 0xFFFF ) )
//32 --> 8 x 4
#define TBYTE3( v1 ) ( (UINT8)( ( v1 ) >> 24 ) ) //v1 is UINT32
#define TBYTE2( v1 ) ( (UINT8)( ( v1 ) >> 16 ) )
#define TBYTE1( v1 ) ( (UINT8)( ( v1 ) >> 8 ) )
#define TBYTE0( v1 ) ( (UINT8)( ( v1 ) & 0xFF ) )
#define SET_BIT0 0x01
#define SET_BIT1 0x02
#define SET_BIT2 0x04
#define SET_BIT3 0x08
#define SET_BIT4 0x10
#define SET_BIT5 0x20
#define SET_BIT6 0x40
#define SET_BIT7 0x80
#define SET_BIT8 0x0100
#define SET_BIT9 0x0200
#define SET_BIT10 0x0400
#define SET_BIT11 0x0800
#define SET_BIT12 0x1000
#define SET_BIT13 0x2000
#define SET_BIT14 0x4000
#define SET_BIT15 0x8000
#define CLR_BIT0 0xFE
#define CLR_BIT1 0xFD
#define CLR_BIT2 0xFB
#define CLR_BIT3 0xF7
#define CLR_BIT4 0xEF
#define CLR_BIT5 0xDF
#define CLR_BIT6 0xBF
#define CLR_BIT7 0x7F
#define CLR_BIT8 0xFEFF
#define CLR_BIT9 0xFDFF
#define CLR_BIT10 0xFBFF
#define CLR_BIT11 0xF7FF
#define CLR_BIT12 0xEFFF
#define CLR_BIT13 0xDFFF
#define CLR_BIT14 0xBFFF
#define CLR_BIT15 0x7FFF
#define FAIL 1
#define PASS 0
/*****************************************************************************************
* For GPIO INIT setting
*****************************************************************************************/
//------------------- Define Port as Quasi mode -------------------
#define P00_Quasi_Mode P0M1 &= ~SET_BIT0; P0M2 &= ~SET_BIT0
#define P01_Quasi_Mode P0M1 &= ~SET_BIT1; P0M2 &= ~SET_BIT1
#define P02_Quasi_Mode P0M1 &= ~SET_BIT2; P0M2 &= ~SET_BIT2
#define P03_Quasi_Mode P0M1 &= ~SET_BIT3; P0M2 &= ~SET_BIT3
#define P04_Quasi_Mode P0M1 &= ~SET_BIT4; P0M2 &= ~SET_BIT4
#define P05_Quasi_Mode P0M1 &= ~SET_BIT5; P0M2 &= ~SET_BIT5
#define P06_Quasi_Mode P0M1 &= ~SET_BIT6; P0M2 &= ~SET_BIT6
#define P07_Quasi_Mode P0M1 &= ~SET_BIT7; P0M2 &= ~SET_BIT7
#define P10_Quasi_Mode P1M1 &= ~SET_BIT0; P1M2 &= ~SET_BIT0
#define P11_Quasi_Mode P1M1 &= ~SET_BIT1; P1M2 &= ~SET_BIT1
#define P12_Quasi_Mode P1M1 &= ~SET_BIT2; P1M2 &= ~SET_BIT2
#define P13_Quasi_Mode P1M1 &= ~SET_BIT3; P1M2 &= ~SET_BIT3
#define P14_Quasi_Mode P1M1 &= ~SET_BIT4; P1M2 &= ~SET_BIT4
#define P15_Quasi_Mode P1M1 &= ~SET_BIT5; P1M2 &= ~SET_BIT5
#define P16_Quasi_Mode P1M1 &= ~SET_BIT6; P1M2 &= ~SET_BIT6
#define P17_Quasi_Mode P1M1 &= ~SET_BIT7; P1M2 &= ~SET_BIT7
#define P30_Quasi_Mode P3M1 &= ~SET_BIT0; P3M2 &= ~SET_BIT0
//------------------- Define Port as Push Pull mode -------------------
#define P00_PushPull_Mode P0M1 &= ~SET_BIT0; P0M2 |= SET_BIT0
#define P01_PushPull_Mode P0M1 &= ~SET_BIT1; P0M2 |= SET_BIT1
#define P02_PushPull_Mode P0M1 &= ~SET_BIT2; P0M2 |= SET_BIT2
#define P03_PushPull_Mode P0M1 &= ~SET_BIT3; P0M2 |= SET_BIT3
#define P04_PushPull_Mode P0M1 &= ~SET_BIT4; P0M2 |= SET_BIT4
#define P05_PushPull_Mode P0M1 &= ~SET_BIT5; P0M2 |= SET_BIT5
#define P06_PushPull_Mode P0M1 &= ~SET_BIT6; P0M2 |= SET_BIT6
#define P07_PushPull_Mode P0M1 &= ~SET_BIT7; P0M2 |= SET_BIT7
#define P10_PushPull_Mode P1M1 &= ~SET_BIT0; P1M2 |= SET_BIT0
#define P11_PushPull_Mode P1M1 &= ~SET_BIT1; P1M2 |= SET_BIT1
#define P12_PushPull_Mode P1M1 &= ~SET_BIT2; P1M2 |= SET_BIT2
#define P13_PushPull_Mode P1M1 &= ~SET_BIT3; P1M2 |= SET_BIT3
#define P14_PushPull_Mode P1M1 &= ~SET_BIT4; P1M2 |= SET_BIT4
#define P15_PushPull_Mode P1M1 &= ~SET_BIT5; P1M2 |= SET_BIT5
#define P16_PushPull_Mode P1M1 &= ~SET_BIT6; P1M2 |= SET_BIT6
#define P17_PushPull_Mode P1M1 &= ~SET_BIT7; P1M2 |= SET_BIT7
#define P30_PushPull_Mode P3M1 &= ~SET_BIT0; P3M2 |= SET_BIT0
#define GPIO1_PushPull_Mode P1M1 &= ~SET_BIT0; P1M2 |= SET_BIT0
//------------------- Define Port as Input Only mode -------------------
#define P00_Input_Mode P0M1 |= SET_BIT0; P0M2 &= ~SET_BIT0
#define P01_Input_Mode P0M1 |= SET_BIT1; P0M2 &= ~SET_BIT1
#define P02_Input_Mode P0M1 |= SET_BIT2; P0M2 &= ~SET_BIT2
#define P03_Input_Mode P0M1 |= SET_BIT3; P0M2 &= ~SET_BIT3
#define P04_Input_Mode P0M1 |= SET_BIT4; P0M2 &= ~SET_BIT4
#define P05_Input_Mode P0M1 |= SET_BIT5; P0M2 &= ~SET_BIT5
#define P06_Input_Mode P0M1 |= SET_BIT6; P0M2 &= ~SET_BIT6
#define P07_Input_Mode P0M1 |= SET_BIT7; P0M2 &= ~SET_BIT7
#define P10_Input_Mode P1M1 |= SET_BIT0; P1M2 &= ~SET_BIT0
#define P11_Input_Mode P1M1 |= SET_BIT1; P1M2 &= ~SET_BIT1
#define P12_Input_Mode P1M1 |= SET_BIT2; P1M2 &= ~SET_BIT2
#define P13_Input_Mode P1M1 |= SET_BIT3; P1M2 &= ~SET_BIT3
#define P14_Input_Mode P1M1 |= SET_BIT4; P1M2 &= ~SET_BIT4
#define P15_Input_Mode P1M1 |= SET_BIT5; P1M2 &= ~SET_BIT5
#define P16_Input_Mode P1M1 |= SET_BIT6; P1M2 &= ~SET_BIT6
#define P17_Input_Mode P1M1 |= SET_BIT7; P1M2 &= ~SET_BIT7
#define P30_Input_Mode P3M1 |= SET_BIT0; P3M2 &= ~SET_BIT0
//-------------------Define Port as Open Drain mode -------------------
#define P00_OpenDrain_Mode P0M1 |= SET_BIT0; P0M2 |= SET_BIT0
#define P01_OpenDrain_Mode P0M1 |= SET_BIT1; P0M2 |= SET_BIT1
#define P02_OpenDrain_Mode P0M1 |= SET_BIT2; P0M2 |= SET_BIT2
#define P03_OpenDrain_Mode P0M1 |= SET_BIT3; P0M2 |= SET_BIT3
#define P04_OpenDrain_Mode P0M1 |= SET_BIT4; P0M2 |= SET_BIT4
#define P05_OpenDrain_Mode P0M1 |= SET_BIT5; P0M2 |= SET_BIT5
#define P06_OpenDrain_Mode P0M1 |= SET_BIT6; P0M2 |= SET_BIT6
#define P07_OpenDrain_Mode P0M1 |= SET_BIT7; P0M2 |= SET_BIT7
#define P10_OpenDrain_Mode P1M1 |= SET_BIT0; P1M2 |= SET_BIT0
#define P11_OpenDrain_Mode P1M1 |= SET_BIT1; P1M2 |= SET_BIT1
#define P12_OpenDrain_Mode P1M1 |= SET_BIT2; P1M2 |= SET_BIT2
#define P13_OpenDrain_Mode P1M1 |= SET_BIT3; P1M2 |= SET_BIT3
#define P14_OpenDrain_Mode P1M1 |= SET_BIT4; P1M2 |= SET_BIT4
#define P15_OpenDrain_Mode P1M1 |= SET_BIT5; P1M2 |= SET_BIT5
#define P16_OpenDrain_Mode P1M1 |= SET_BIT6; P1M2 |= SET_BIT6
#define P17_OpenDrain_Mode P1M1 |= SET_BIT7; P1M2 |= SET_BIT7
#define P30_OpenDrain_Mode P3M1 |= SET_BIT0; P3M2 |= SET_BIT0
//--------- Define all port as quasi mode ---------
#define Set_All_GPIO_Quasi_Mode P0M1 = 0; P0M2 = 0; P1M1 = 0; P1M2 = 0; P3M1 = 0; P3M2 = 0
#define set_GPIO1 P12 = 1
#define clr_GPIO1 P12 = 0
/****************************************************************************
Enable INT port 0~3
***************************************************************************/
#define Enable_INT_Port0 PICON &= 0xFB;
#define Enable_INT_Port1 PICON |= 0x01;
#define Enable_INT_Port2 PICON |= 0x02;
#define Enable_INT_Port3 PICON |= 0x03;
/*****************************************************************************
Enable each bit low level trig mode
*****************************************************************************/
#define Enable_BIT7_LowLevel_Trig PICON &= 0x7F; PINEN |= 0x80; PIPEN &= 0x7F
#define Enable_BIT6_LowLevel_Trig PICON &= 0x7F; PINEN |= 0x40; PIPEN &= 0xBF
#define Enable_BIT5_LowLevel_Trig PICON &= 0xBF; PINEN |= 0x20; PIPEN &= 0xDF
#define Enable_BIT4_LowLevel_Trig PICON &= 0xBF; PINEN |= 0x10; PIPEN &= 0xEF
#define Enable_BIT3_LowLevel_Trig PICON &= 0xDF; PINEN |= 0x08; PIPEN &= 0xF7
#define Enable_BIT2_LowLevel_Trig PICON &= 0xEF; PINEN |= 0x04; PIPEN &= 0xFB
#define Enable_BIT1_LowLevel_Trig PICON &= 0xF7; PINEN |= 0x02; PIPEN &= 0xFD
#define Enable_BIT0_LowLevel_Trig PICON &= 0xFD; PINEN |= 0x01; PIPEN &= 0xFE
/*****************************************************************************
Enable each bit high level trig mode
*****************************************************************************/
#define Enable_BIT7_HighLevel_Trig PICON &= 0x7F; PINEN &= 0x7F; PIPEN |= 0x80
#define Enable_BIT6_HighLevel_Trig PICON &= 0x7F; PINEN &= 0xBF; PIPEN |= 0x40
#define Enable_BIT5_HighLevel_Trig PICON &= 0xBF; PINEN &= 0xDF; PIPEN |= 0x20
#define Enable_BIT4_HighLevel_Trig PICON &= 0xBF; PINEN &= 0xEF; PIPEN |= 0x10
#define Enable_BIT3_HighLevel_Trig PICON &= 0xDF; PINEN &= 0xF7; PIPEN |= 0x08
#define Enable_BIT2_HighLevel_Trig PICON &= 0xEF; PINEN &= 0xFB; PIPEN |= 0x04
#define Enable_BIT1_HighLevel_Trig PICON &= 0xF7; PINEN &= 0xFD; PIPEN |= 0x02
#define Enable_BIT0_HighLevel_Trig PICON &= 0xFD; PINEN &= 0xFE; PIPEN |= 0x01
/*****************************************************************************
Enable each bit falling edge trig mode
*****************************************************************************/
#define Enable_BIT7_FallEdge_Trig PICON |= 0x80; PINEN |= 0x80; PIPEN &= 0x7F
#define Enable_BIT6_FallEdge_Trig PICON |= 0x80; PINEN |= 0x40; PIPEN &= 0xBF
#define Enable_BIT5_FallEdge_Trig PICON |= 0x40; PINEN |= 0x20; PIPEN &= 0xDF
#define Enable_BIT4_FallEdge_Trig PICON |= 0x40; PINEN |= 0x10; PIPEN &= 0xEF
#define Enable_BIT3_FallEdge_Trig PICON |= 0x20; PINEN |= 0x08; PIPEN &= 0xF7
#define Enable_BIT2_FallEdge_Trig PICON |= 0x10; PINEN |= 0x04; PIPEN &= 0xFB
#define Enable_BIT1_FallEdge_Trig PICON |= 0x08; PINEN |= 0x02; PIPEN &= 0xFD
#define Enable_BIT0_FallEdge_Trig PICON |= 0x04; PINEN |= 0x01; PIPEN &= 0xFE
/*****************************************************************************
Enable each bit rasing edge trig mode
*****************************************************************************/
#define Enable_BIT7_RasingEdge_Trig PICON |= 0x80; PINEN &= 0x7F; PIPEN |= 0x80
#define Enable_BIT6_RasingEdge_Trig PICON |= 0x80; PINEN &= 0xBF; PIPEN |= 0x40
#define Enable_BIT5_RasingEdge_Trig PICON |= 0x40; PINEN &= 0xDF; PIPEN |= 0x20
#define Enable_BIT4_RasingEdge_Trig PICON |= 0x40; PINEN &= 0xEF; PIPEN |= 0x10
#define Enable_BIT3_RasingEdge_Trig PICON |= 0x20; PINEN &= 0xF7; PIPEN |= 0x08
#define Enable_BIT2_RasingEdge_Trig PICON |= 0x10; PINEN &= 0xFB; PIPEN |= 0x04
#define Enable_BIT1_RasingEdge_Trig PICON |= 0x08; PINEN |= 0xFD; PIPEN &= 0x02
#define Enable_BIT0_RasingEdge_Trig PICON |= 0x04; PINEN |= 0xFE; PIPEN &= 0x01
/*****************************************************************************************
* For TIMER VALUE setting is base on " option -> C51 -> Preprocesser Symbols -> Define "
*****************************************************************************************/
#ifdef FOSC_110592 // if Fsys = 11.0592MHz
#define TIMER_DIV12_VALUE_10us 65536 - 9 //9*12/11.0592 = 10 uS, // Timer divider = 12 for TM0/TM1
#define TIMER_DIV12_VALUE_1ms 65536 - 923 //923*12/11.0592 = 1 mS // Timer divider = 12
#define TIMER_DIV12_VALUE_10ms 65536 - 9216 //18432*12/22118400 = 10 ms // Timer divider = 12
#define TIMER_DIV4_VALUE_10us 65536 - 28 //28*4/11.0592 = 10 uS // Timer divider = 4 for TM2/TM3
#define TIMER_DIV4_VALUE_1ms 65536 - 2765 //2765*4/11.0592 = 1 mS // Timer divider = 4
#define TIMER_DIV4_VALUE_100us 65536 - 277 //553*4/22118400 = 100 us // Timer divider = 4
#define TIMER_DIV4_VALUE_200us 65536 - 553 //1106*4/22118400 = 200 us // Timer divider = 4
#define TIMER_DIV4_VALUE_500us 65536 - 1383 //2765*4/22118400 = 500 us // Timer divider = 4
#define TIMER_DIV16_VALUE_10ms 65536 - 6912 //1500*16/22118400 = 10 ms // Timer divider = 16
#define TIMER_DIV64_VALUE_30ms 65536 - 5184 //10368*64/22118400 = 30 ms // Timer divider = 64
#define TIMER_DIV128_VALUE_100ms 65536 - 8640 //17280*128/22118400 = 100 ms // Timer divider = 128
#define TIMER_DIV128_VALUE_200ms 65536 - 17280 //34560*128/22118400 = 200 ms // Timer divider = 128
#define TIMER_DIV256_VALUE_500ms 65536 - 21600 //43200*256/22118400 = 500 ms // Timer divider = 256
#define TIMER_DIV512_VALUE_1s 65536 - 21600 //43200*512/22118400 = 1 s // Timer divider = 512
#endif
#ifdef FOSC_160000 // if Fsys = 16MHz
#define TIMER_DIV12_VALUE_10us 65536 - 13 //13*12/16000000 = 10 uS, // Timer divider = 12 for TM0/TM1
#define TIMER_DIV12_VALUE_100us 65536 - 130 //130*12/16000000 = 10 uS, // Timer divider = 12
#define TIMER_DIV12_VALUE_1ms 65536 - 1334 //1334*12/16000000 = 1 mS, // Timer divider = 12
#define TIMER_DIV12_VALUE_10ms 65536 - 13334 //13334*12/16000000 = 10 mS // Timer divider = 12
#define TIMER_DIV12_VALUE_40ms 65536 - 53336 //53336*12/16000000 = 40 ms // Timer divider = 12
#define TIMER_DIV4_VALUE_10us 65536 - 40 //40*4/16000000 = 10 uS, // Timer divider = 4 for TM2/TM3
#define TIMER_DIV4_VALUE_100us 65536 - 400 //400*4/16000000 = 100 us // Timer divider = 4
#define TIMER_DIV4_VALUE_200us 65536 - 800 //800*4/16000000 = 200 us // Timer divider = 4
#define TIMER_DIV4_VALUE_500us 65536 - 2000 //2000*4/16000000 = 500 us // Timer divider = 4
#define TIMER_DIV4_VALUE_1ms 65536 - 4000 //4000*4/16000000 = 1 mS, // Timer divider = 4
#define TIMER_DIV16_VALUE_10ms 65536 - 10000 //10000*16/16000000 = 10 ms // Timer divider = 16
#define TIMER_DIV64_VALUE_30ms 65536 - 7500 //7500*64/16000000 = 30 ms // Timer divider = 64
#define TIMER_DIV128_VALUE_100ms 65536 - 12500 //12500*128/16000000 = 100 ms // Timer divider = 128
#define TIMER_DIV128_VALUE_200ms 65536 - 25000 //25000*128/16000000 = 200 ms // Timer divider = 128
#define TIMER_DIV256_VALUE_500ms 65536 - 31250 //31250*256/16000000 = 500 ms // Timer divider = 256
#define TIMER_DIV512_VALUE_1s 65536 - 31250 //31250*512/16000000 = 1 s. // Timer Divider = 512
#endif
#ifdef FOSC_184320 // if Fsys = 18.432MHz
#define TIMER_DIV12_VALUE_10us 65536 - 15 //15*12/18.432 = 10 uS, Timer Clock = Fsys/12
#define TIMER_DIV12_VALUE_1ms 65536 - 1536 //1536*12/18.432 = 1 mS, Timer Clock = Fsys/12
#define TIMER_DIV4_VALUE_10us 65536 - 46 //46*4/18.432 = 10 uS, Timer Clock = Fsys/4
#define TIMER_DIV4_VALUE_1ms 65536 - 4608 //4608*4/18.432 = 1 mS, Timer Clock = Fsys/4
#endif
#ifdef FOSC_200000 // if Fsys = 20 MHz
#define TIMER_DIV12_VALUE_10us 65536 - 17 //17*12/20000000 = 10 uS, Timer Clock = Fsys/12
#define TIMER_DIV12_VALUE_1ms 65536 - 1667 //1667*12/20000000 = 1 mS, Timer Clock = Fsys/12
#define TIMER_DIV4_VALUE_10us 65536 - 50 //50*4/20000000 = 10 uS, Timer Clock = Fsys/4
#define TIMER_DIV4_VALUE_1ms 65536 - 5000 //5000*4/20000000 = 1 mS, Timer Clock = Fsys/4
#endif
#ifdef FOSC_221184 // if Fsys = 22.1184 MHz
#define TIMER_DIV12_VALUE_10us 65536 - 18 //18*12/22118400 = 10 uS, // Timer divider = 12
#define TIMER_DIV12_VALUE_1ms 65536 - 1843 //1843*12/22118400 = 1 mS, // Timer divider = 12
#define TIMER_DIV12_VALUE_10ms 65536 - 18432 //18432*12/22118400 = 10 ms // Timer divider = 12
#define TIMER_DIV4_VALUE_10us 65536 - 56 //9*4/22118400 = 10 uS, // Timer divider = 4
#define TIMER_DIV4_VALUE_1ms 65536 - 5530 //923*4/22118400 = 1 mS, // Timer divider = 4
#define TIMER_DIV4_VALUE_100us 65536 - 553 //553*4/22118400 = 100 us // Timer divider = 4
#define TIMER_DIV4_VALUE_200us 65536 - 1106 //1106*4/22118400 = 200 us // Timer divider = 4
#define TIMER_DIV4_VALUE_500us 65536 - 2765 //2765*4/22118400 = 500 us // Timer divider = 4
#define TIMER_DIV16_VALUE_10ms 65536 - 13824 //1500*16/22118400 = 10 ms // Timer divider = 16
#define TIMER_DIV64_VALUE_30ms 65536 - 10368 //10368*64/22118400 = 30 ms // Timer divider = 64
#define TIMER_DIV128_VALUE_100ms 65536 - 17280 //17280*128/22118400 = 100 ms // Timer divider = 128
#define TIMER_DIV128_VALUE_200ms 65536 - 34560 //34560*128/22118400 = 200 ms // Timer divider = 128
#define TIMER_DIV256_VALUE_500ms 65536 - 43200 //43200*256/22118400 = 500 ms // Timer divider = 256
#define TIMER_DIV512_VALUE_1s 65536 - 43200 //43200*512/22118400 = 1 s // Timer divider = 512
#endif
#ifdef FOSC_240000 // if Fsys = 20 MHz
#define TIMER_DIV12_VALUE_10us 65536 - 20 //20*12/24000000 = 10 uS, // Timer divider = 12
#define TIMER_DIV12_VALUE_1ms 65536 - 2000 //2000*12/24000000 = 1 mS, // Timer divider = 12
#define TIMER_DIV12_VALUE_10ms 65536 - 20000 //2000*12/24000000 = 10 mS // Timer divider = 12
#define TIMER_DIV4_VALUE_10us 65536 - 60 //60*4/24000000 = 10 uS, // Timer divider = 4
#define TIMER_DIV4_VALUE_100us 65536 - 600 //600*4/24000000 = 100 us // Timer divider = 4
#define TIMER_DIV4_VALUE_200us 65536 - 1200 //1200*4/24000000 = 200 us // Timer divider = 4
#define TIMER_DIV4_VALUE_500us 65536 - 3000 //3000*4/24000000 = 500 us // Timer divider = 4
#define TIMER_DIV4_VALUE_1ms 65536 - 6000 //6000*4/24000000 = 1 mS, // Timer divider = 4
#define TIMER_DIV16_VALUE_10ms 65536 - 15000 //15000*16/24000000 = 10 ms // Timer divider = 16
#define TIMER_DIV64_VALUE_30ms 65536 - 11250 //11250*64/24000000 = 30 ms // Timer divider = 64
#define TIMER_DIV128_VALUE_100ms 65536 - 18750 //37500*128/24000000 = 200 ms // Timer divider = 128
#define TIMER_DIV128_VALUE_200ms 65536 - 37500 //37500*128/24000000 = 200 ms // Timer divider = 128
#define TIMER_DIV256_VALUE_500ms 65536 - 46875 //46875*256/24000000 = 500 ms // Timer divider = 256
#define TIMER_DIV512_VALUE_1s 65536 - 46875 //46875*512/24000000 = 1 s. // Timer Divider = 512
#endif
//-------------------- Timer0 function define --------------------
#define TIMER1_MODE0_ENABLE TMOD &= 0x0F
#define TIMER1_MODE1_ENABLE TMOD &= 0x0F; TMOD |= 0x10
#define TIMER1_MODE2_ENABLE TMOD &= 0x0F; TMOD |= 0x20
#define TIMER1_MODE3_ENABLE TMOD &= 0x0F; TMOD |= 0x3F
//-------------------- Timer1 function define --------------------
#define TIMER0_MODE0_ENABLE TMOD &= 0xF0
#define TIMER0_MODE1_ENABLE TMOD &= 0xF0; TMOD |= 0x01
#define TIMER0_MODE2_ENABLE TMOD &= 0xF0; TMOD |= 0x02
#define TIMER0_MODE3_ENABLE TMOD &= 0xF0; TMOD |= 0xF3
//-------------------- Timer2 function define --------------------
#define TIMER2_DIV_4 T2MOD |= 0x10; T2MOD &= 0x9F
#define TIMER2_DIV_16 T2MOD |= 0x20; T2MOD &= 0xAF
#define TIMER2_DIV_32 T2MOD |= 0x30; T2MOD &= 0xBF
#define TIMER2_DIV_64 T2MOD |= 0x40; T2MOD &= 0xCF
#define TIMER2_DIV_128 T2MOD |= 0x50; T2MOD &= 0xDF
#define TIMER2_DIV_256 T2MOD |= 0x60; T2MOD &= 0xEF
#define TIMER2_DIV_512 T2MOD |= 0x70
#define TIMER2_Auto_Reload_Delay_Mode T2CON &= ~SET_BIT0; T2MOD |= SET_BIT7; T2MOD |= SET_BIT3
#define TIMER2_Compare_Capture_Mode T2CON |= SET_BIT0; T2MOD &= ~SET_BIT7; T2MOD |= SET_BIT2
#define TIMER2_CAP0_Capture_Mode T2CON &= ~SET_BIT0; T2MOD = 0x89
#define TIMER2_CAP1_Capture_Mode T2CON &= ~SET_BIT0; T2MOD = 0x8A
#define TIMER2_CAP2_Capture_Mode T2CON &= ~SET_BIT0; T2MOD = 0x8B
//-------------------- Timer2 Capture define --------------------
//--- Falling Edge -----
#define IC0_P12_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC1_P11_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x01; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC2_P10_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x02; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC3_P00_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x03; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC3_P04_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x04; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC4_P01_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x05; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC5_P03_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x06; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC6_P05_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x07; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC7_P15_CAP0_FallingEdge_Capture CAPCON1 &= 0xFC; CAPCON3 &= 0xF0; CAPCON3 |= 0x08; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC0_P12_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC1_P11_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x10; CAPCON0 |= SET_BIT5; CAPCON0 |= SET_BIT5
#define IC2_P10_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x20; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC3_P00_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x30; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC3_P04_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x40; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC4_P01_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x50; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC5_P03_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x60; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC6_P05_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x70; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC7_P15_CAP1_FallingEdge_Capture CAPCON1 &= 0xF3; CAPCON3 &= 0x0F; CAPCON3 |= 0x80; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC0_P12_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC1_P11_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x10; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC2_P10_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x20; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC3_P00_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x30; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC3_P04_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x40; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC4_P01_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x50; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC5_P03_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x60; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC6_P05_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x70; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
#define IC7_P15_CAP2_FallingEdge_Capture CAPCON1 &= 0x0F; CAPCON4 &= 0xF0; CAPCON4 |= 0x80; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6
//----- Rising edge ----
#define IC0_P12_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC1_P11_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x01; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC2_P10_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x02; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC3_P00_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x03; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC3_P04_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x04; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC4_P01_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x05; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC5_P03_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x06; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC6_P05_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x07; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC7_P15_CAP0_RisingEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x01; CAPCON3 &= 0xF0; CAPCON3 |= 0x08; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4;
#define IC0_P12_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0FCAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC1_P11_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x10; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC2_P10_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x20; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC3_P00_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x30; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC3_P04_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x40; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC4_P01_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x50; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC5_P03_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x60; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC6_P05_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x70; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC7_P15_CAP1_RisingEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x04; CAPCON3 &= 0x0F; CAPCON3 |= 0x80; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC0_P12_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC1_P11_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x01; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC2_P10_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x02; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC3_P00_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x03; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC3_P04_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x04; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC4_P01_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x05; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC5_P03_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x06; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC6_P05_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x07; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC7_P15_CAP3_RisingEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x10; CAPCON4 &= 0xF0; CAPCON4 |= 0x08; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
//-----BOTH edge ----
#define IC0_P12_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC1_P11_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x01; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC2_P10_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x02; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC3_P00_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x03; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC3_P04_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x04; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC4_P01_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x05; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC5_P03_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x06; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC6_P05_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x07; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC7_P15_CAP0_BothEdge_Capture CAPCON1 &= 0xFC; CAPCON1 |= 0x02; CAPCON3 &= 0xF0; CAPCON3 |= 0x08; CAPCON0 |= SET_BIT4; CAPCON2 |= SET_BIT4
#define IC0_P12_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5
#define IC1_P11_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x10; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC2_P10_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x20; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC3_P00_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x30; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC3_P04_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x40; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC4_P01_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x50; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC5_P03_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x60; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC6_P05_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x70; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC7_P15_CAP1_BothEdge_Capture CAPCON1 &= 0xF3; CAPCON1 |= 0x08; CAPCON3 &= 0x0F; CAPCON3 |= 0x80; CAPCON0 |= SET_BIT5; CAPCON2 |= SET_BIT5;
#define IC0_P12_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC1_P11_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x01; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC2_P10_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x02; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC3_P00_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x03; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC3_P04_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x04; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC4_P01_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x05; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC5_P03_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x06; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC6_P05_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x07; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define IC7_P15_CAP3_BothEdge_Capture CAPCON1 &= 0x0F; CAPCON1 |= 0x20; CAPCON4 &= 0xF0; CAPCON4 |= 0x08; CAPCON0 |= SET_BIT6; CAPCON2 |= SET_BIT6;
#define TIMER2_IC2_DISABLE CAPCON0 &= ~SET_BIT6
#define TIMER2_IC1_DISABLE CAPCON0 &= ~SET_BIT5
#define TIMER2_IC0_DISABLE CAPCON0 &= ~SET_BIT4
/*****************************************************************************************
* For PWM setting
*****************************************************************************************/
//--------- PMW clock source select define ---------------------
#define PWM_CLOCK_FSYS CKCON &= 0xBF
#define PWM_CLOCK_TIMER1 CKCON |= 0x40
//--------- PWM clock devide define ----------------------------
#define PWM_CLOCK_DIV_2 PWMCON1 |= 0x01; PWMCON1 &= 0xF9
#define PWM_CLOCK_DIV_4 PWMCON1 |= 0x02; PWMCON1 &= 0xFA
#define PWM_CLOCK_DIV_8 PWMCON1 |= 0x03; PWMCON1 &= 0xFB
#define PWM_CLOCK_DIV_16 PWMCON1 |= 0x04; PWMCON1 &= 0xFC
#define PWM_CLOCK_DIV_32 PWMCON1 |= 0x05; PWMCON1 &= 0xFD
#define PWM_CLOCK_DIV_64 PWMCON1 |= 0x06; PWMCON1 &= 0xFE
#define PWM_CLOCK_DIV_128 PWMCON1 |= 0x07
//--------- PWM I/O select define ------------------------------
#define PWM5_P15_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 |= 0x20; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P1.5 as PWM5 output enable
#define PWM5_P03_OUTPUT_ENABLE PIOCON0 |= 0x20 //P0.3 as PWM5
#define PWM4_P01_OUTPUT_ENABLE PIOCON0 |= 0x10 //P0.1 as PWM4 output enable
#define PWM3_P04_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 |= 0x08; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P0.4 as PWM3 output enable
#define PWM3_P00_OUTPUT_ENABLE PIOCON0 |= 0x08 //P0.0 as PWM3
#define PWM2_P05_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 |= 0x04; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P1.0 as PWM2 output enable
#define PWM2_P10_OUTPUT_ENABLE PIOCON0 |= 0x04 //P1.0 as PWM2
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 |= 0x02; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P1.4 as PWM1 output enable
#define PWM1_P11_OUTPUT_ENABLE PIOCON0 |= 0x02 //P1.1 as PWM1
#define PWM0_P12_OUTPUT_ENABLE PIOCON0 |= 0x01 //P1.2 as PWM0 output enable
#define ALL_PWM_OUTPUT_ENABLE PIOCON0 = 0xFF; PIOCON1 = 0xFF
#define PWM5_P15_OUTPUT_DISABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 &= 0xDF; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P1.5 as PWM5 output disable
#define PWM5_P03_OUTPUT_DISABLE PIOCON0 &= 0xDF //P0.3 as PWM5
#define PWM4_P01_OUTPUT_DISABLE PIOCON0 &= 0xEF //P0.1 as PWM4 output disable
#define PWM3_P04_OUTPUT_DISABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 &= 0xF7; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P0.4 as PWM3 output disable
#define PWM3_P00_OUTPUT_DISABLE PIOCON0 &= 0xF7 //P0.0 as PWM3
#define PWM2_P05_OUTPUT_DISABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 &= 0xFB; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P1.0 as PWM2 output disable
#define PWM2_P10_OUTPUT_DISABLE PIOCON0 &= 0xFB //P1.0 as PWM2
#define PWM1_P14_OUTPUT_DISABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS |= 0x01; PIOCON1 &= 0xFD; TA = 0xAA; TA = 0x55; SFRS &= 0xFE; EA = BIT_TMP //P1.4 as PWM1 output disable
#define PWM1_P11_OUTPUT_DISABLE PIOCON0 &= 0xFD //P1.1 as PWM1
#define PWM0_P12_OUTPUT_DISABLE PIOCON0 &= 0xFE //P1.2 as PWM0 output disable
#define ALL_PWM_OUTPUT_DISABLE PIOCON0 = 0x00; PIOCON1 = 0x00
//--------- PWM I/O Polarity Control ---------------------------
#define PWM5_OUTPUT_INVERSE PNP |= 0x20
#define PWM4_OUTPUT_INVERSE PNP |= 0x10
#define PWM3_OUTPUT_INVERSE PNP |= 0x08
#define PWM2_OUTPUT_INVERSE PNP |= 0x04
#define PWM1_OUTPUT_INVERSE PNP |= 0x02
#define PWM0_OUTPUT_INVERSE PNP |= 0x01
#define PWM_OUTPUT_ALL_INVERSE PNP = 0xFF
#define PWM5_OUTPUT_NORMAL PNP &= 0xDF
#define PWM4_OUTPUT_NORMAL PNP &= 0xEF
#define PWM3_OUTPUT_NORMAL PNP &= 0xF7
#define PWM2_OUTPUT_NORMAL PNP &= 0xFB
#define PWM1_OUTPUT_NORMAL PNP &= 0xFD
#define PWM0_OUTPUT_NORMAL PNP &= 0xFE
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00
//--------- PWM type define ------------------------------------
#define PWM_EDGE_TYPE PWMCON1 &= ~SET_BIT4
#define PWM_CENTER_TYPE PWMCON1 |= SET_BIT4
//--------- PWM mode define ------------------------------------
#define PWM_IMDEPENDENT_MODE PWMCON1 &= 0x3F
#define PWM_COMPLEMENTARY_MODE PWMCON1 |= 0x40; PWMCON1 &= 0x7F
#define PWM_SYNCHRONIZED_MODE PWMCON1 |= 0x80; PWMCON1 &= 0xBF
#define PWM_GP_MODE_ENABLE PWMCON1 |= 0x20
#define PWM_GP_MODE_DISABLE PWMCON1 &= 0xDF
//--------- PMW interrupt setting ------------------------------
#define PWM_FALLING_INT BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xCF; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_RISING_INT BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC |= 0x10; PWMCON0 &= 0xDF; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_CENTRAL_POINT_INT BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC |= 0x20; PWMCON0 &= 0xEF; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_PERIOD_END_INT BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC |= 0x30; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
//--------- PWM interrupt pin select ---------------------------
#define PWM_INT_PWM0 BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xF8; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_INT_PWM1 BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xF8; PWMINTC |= 0x01; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_INT_PWM2 BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xF8; PWMINTC |= 0x02; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_INT_PWM3 BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xF8; PWMINTC |= 0x03; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_INT_PWM4 BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xF8; PWMINTC |= 0x04; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
#define PWM_INT_PWM5 BIT_TMP = EA; TA = 0xAA; TA = 0x55; SFRS = 0x01; PWMINTC &= 0xF8; PWMINTC |= 0x05; TA = 0xAA; TA = 0x55; SFRS = 0x00; EA = BIT_TMP
//--------- PWM Dead time setting ------------------------------
#define PWM45_DEADTIME_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; PDTEN |= 0x04; EA = BIT_TMP
#define PWM34_DEADTIME_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; PDTEN |= 0x02; EA = BIT_TMP
#define PWM01_DEADTIME_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; PDTEN |= 0x01; EA = BIT_TMP
/*****************************************************************************************
* For ADC INIT setting
*****************************************************************************************/
#define Enable_ADC_AIN0 ADCCON0 &= 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT0; ADCCON1 |= SET_BIT0 //P17
#define Enable_ADC_AIN1 ADCCON0 &= 0xF0; ADCCON0 |= 0x01; P30_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT1; ADCCON1 |= SET_BIT0 //P30
#define Enable_ADC_AIN2 ADCCON0 &= 0xF0; ADCCON0 |= 0x02; P07_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT2; ADCCON1 |= SET_BIT0 //P07
#define Enable_ADC_AIN3 ADCCON0 &= 0xF0; ADCCON0 |= 0x03; P06_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT3; ADCCON1 |= SET_BIT0 //P06
#define Enable_ADC_AIN4 ADCCON0 &= 0xF0; ADCCON0 |= 0x04; P05_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT4; ADCCON1 |= SET_BIT0 //P05
#define Enable_ADC_AIN5 ADCCON0 &= 0xF0; ADCCON0 |= 0x05; P04_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT5; ADCCON1 |= SET_BIT0 //P04
#define Enable_ADC_AIN6 ADCCON0 &= 0xF0; ADCCON0 |= 0x06; P03_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT6; ADCCON1 |= SET_BIT0 //P03
#define Enable_ADC_AIN7 ADCCON0 &= 0xF0; ADCCON0 |= 0x07; P11_Input_Mode; AINDIDS = 0x00; AINDIDS |= SET_BIT7; ADCCON1 |= SET_BIT0 //P11
#define Enable_ADC_BandGap ADCCON0 |= SET_BIT3; ADCCON0 &= 0xF8; ADCCON1 |= SET_BIT0 //Band-gap 1.22V
#define PWM0_FALLINGEDGE_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 &= ~SET_BIT3; ADCCON1 &= ~SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM2_FALLINGEDGE_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 |= SET_BIT4; ADCCON1 &= ~SET_BIT3; ADCCON1 &= ~SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM4_FALLINGEDGE_TRIG_ADC ADCCON0 |= SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 &= ~SET_BIT3; ADCCON1 &= ~SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM0_RISINGEDGE_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 &= ~SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM2_RISINGEDGE_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 |= SET_BIT4; ADCCON1 &= ~SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM4_RISINGEDGE_TRIG_ADC ADCCON0 |= SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 &= ~SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM0_CENTRAL_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 |= SET_BIT3; ADCCON1 &= ~SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM2_CENTRAL_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 |= SET_BIT4; ADCCON1 |= SET_BIT3; ADCCON1 &= ~SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM4_CENTRAL_TRIG_ADC ADCCON0 |= SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 |= SET_BIT3; ADCCON1 &= ~SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM0_END_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 |= SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM2_END_TRIG_ADC ADCCON0 &= ~SET_BIT5; ADCCON0 |= SET_BIT4; ADCCON1 |= SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1
#define PWM4_END_TRIG_ADC ADCCON0 |= SET_BIT5; ADCCON0 &= ~SET_BIT4; ADCCON1 |= SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1
#define P04_FALLINGEDGE_TRIG_ADC ADCCON0 |= 0x30; ADCCON1 &= 0xF3; ADCCON1 |= SET_BIT1; ADCCON1 &= ~SET_BIT6
#define P13_FALLINGEDGE_TRIG_ADC ADCCON0 |= 0x30; ADCCON1 &= 0xF3; ADCCON1 |= SET_BIT1; ADCCON1 |= SET_BIT6
#define P04_RISINGEDGE_TRIG_ADC ADCCON0 |= 0x30; ADCCON1 &= ~SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1; ADCCON1 &= ~SET_BIT6
#define P13_RISINGEDGE_TRIG_ADC ADCCON0 |= 0x30; ADCCON1 &= ~SET_BIT3; ADCCON1 |= SET_BIT2; ADCCON1 |= SET_BIT1; ADCCON1 |= SET_BIT6
/*****************************************************************************************
* For SPI INIT setting
*****************************************************************************************/
#define SPICLK_DIV2 clr_SPR0; clr_SPR1
#define SPICLK_DIV4 set_SPR0; clr_SPR1
#define SPICLK_DIV8 clr_SPR0; set_SPR1
#define SPICLK_DIV16 set_SPR0; set_SPR1
#define Enable_SPI_Interrupt set_ESPI; set_EA
#define SS P15
/************************************** The End Of File **************************************/
@@ -1,27 +0,0 @@
/************************************************************
* ProjectName: LT8522EX
* FileName: lt8522ex.c
* BuildData: 2014-03-27
* Version£º V1.00
* Company: Lontium
************************************************************/
//#include "stm8s.h"
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
extern bit FLAG_I2C_ERROR;
extern u8 I2CADR;
//extern Pin_Status GET_GPIO_InputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);
extern void Delay_ms(u16 mscount);
extern u8 HDMI_ReadI2C_Byte(u8 RegAddr);
//extern bit HDMI_ReadI2C_ByteN(u8 RegAddr,u8 *p_data,u8 N);
extern bool HDMI_WriteI2C_Byte(u8 RegAddr, u8 d);
extern bool HDMI_WriteI2C_ByteN(u8 RegAddr, u8 *d,u8 N);
#endif
@@ -1,126 +0,0 @@
/************************************************************
* ProjectName: LT8619C
* FileName: LT8912B.h
* BuildData: 2017-04-20
* Version£º V1.00
* Company: Lontium
************************************************************/
#ifndef _LT8912B_H
#define _LT8912B_H
#define _LT8912B_EVB_
#define _VESA_ 0x00
#define _JEIDA_ 0x20
#define _De_mode_ 0x08
#define _Sync_Mode_ 0x00
#define _8_Bit_Color_ 0x13
#define _6_Bit_Color_ 0x17
#define _HDMI_Output_ 0x01
#define _DVI_Output_ 0x00
#define _IIS_Output_ TRUE
#define _SPDIF_Output_ FALSE
#define _PLL_Devider_1 0x00; // no devide
#define _PLL_Devider_2 0x20; // /2 devide 2
#define _PLL_Devider_4 0x40; // /4 devide 4
#define _PLL_Devider_8 0x60; // /8 devide 8
#define _Channel_3210 0xa8
#define _Channel_0123 0x00
#define _PN_Swap_En 0x20
#define _PN_Swap_Dis 0x00
//*/
union Temp
{
u8 Temp8[4];
u16 Temp16[2];
u32 Temp32;
};
union Temp2
{
u8 Temp8[2];
u16 Temp16;//[2];
};
enum
{
H_act = 0,
V_act,
H_tol,
V_tol,
H_bp,
H_sync,
V_sync,
V_bp
};
//*
#define VESA_720x480_60 0
//#define VESA_800x600_60 1
#define VESA_1024x768_60 (VESA_720x480_60+1)
#define VESA_1280x720_60 (VESA_1024x768_60+1)
//#define VESA_1280x768_60 4
#define VESA_1280x800_60 (VESA_1280x720_60+1)
//#define VESA_1280x1024_60 6
//#define VESA_1360x768_60 7
//#define VESA_1366x768_60NB (VESA_1280x800_60+1)
#define VESA_1024x600_60 (VESA_1280x800_60+1)
//#define VESA_1400x1050_60 9
//#define VESA_1440x900_60 10
//#define VESA_1600x900_60RB 11
//#define VESA_1600x1200_60 12
//#define VESA_1680x1050_60 13
#define VESA_1920x1080_60 (VESA_1024x600_60+1)
//#define VESA_1920x1200_60 (VESA_1920x1080_60+1)
//#define VESA_1280x480_60 (VESA_1920x1080_60+1)
//#define VESA_1080x1920_60 16
//*/
extern u8 videoformat;
extern u8 Pre_videoformat;
extern void LT812B_Config(void);
extern void MIPI_Input_det(void);
extern void MIPIDig_Format_Config(void);
extern void DDSConfig(void);
extern void AudioIIsEn(void);
extern void MIPIRxLogicRes(void);
extern void LvdsPowerUp(void);
extern void LvdsPowerDown(void);
extern void Collpll_Config(void);
extern void LVDS_ScaleRatioConfig(void);
extern void LVDS_Bypass_Config( void );
extern void GCMWindow1080P(void);
extern void GCMWindow720P(void);
extern void GCMWindow480P(void);
extern void GCMWindow576P(void);
extern void GCMWindow1024x600P( void );
void GCMWindow1280x800P( void );
#endif
@@ -1,371 +0,0 @@
/*--------------------------------------------------------------------------
N76E003.H
Header file for Nuvoton N76E003
--------------------------------------------------------------------------*/
/*
51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和
串口通信模块(串行I/O口)
51单片机内部共有21个SFR,其布局如图2,从图中可以看出,每个SFR占1个字节,
多数字节单元中的每一位又有专用的“位名称”。这21个SFR又按是否可以位寻址
分为两大部分,ACC、IE、P1等11个可以位寻址,SP、TMOD等不可以位寻址。
*/
//*
sfr P0 = 0x80;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr RCTRIM0 = 0x84;
sfr RCTRIM1 = 0x85;
sfr RWK = 0x86;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr CKCON = 0x8E;
sfr WKCON = 0x8F;
sfr P1 = 0x90;
sfr SFRS = 0x91; //TA Protection
sfr CAPCON0 = 0x92;
sfr CAPCON1 = 0x93;
sfr CAPCON2 = 0x94;
sfr CKDIV = 0x95;
sfr CKSWT = 0x96; //TA Protection
sfr CKEN = 0x97; //TA Protection
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr SBUF_1 = 0x9A;
sfr EIE = 0x9B;
sfr EIE1 = 0x9C;
sfr CHPCON = 0x9F; //TA Protection
sfr P2 = 0xA0;
sfr AUXR1 = 0xA2;
sfr BODCON0 = 0xA3; //TA Protection
sfr IAPTRG = 0xA4; //TA Protection
sfr IAPUEN = 0xA5; //TA Protection
sfr IAPAL = 0xA6;
sfr IAPAH = 0xA7;
sfr IE = 0xA8;
sfr SADDR = 0xA9;
sfr WDCON = 0xAA; //TA Protection
sfr BODCON1 = 0xAB; //TA Protection
sfr P3M1 = 0xAC;
sfr P3S = 0xAC; //Page1
sfr P3M2 = 0xAD;
sfr P3SR = 0xAD; //Page1
sfr IAPFD = 0xAE;
sfr IAPCN = 0xAF;
sfr P3 = 0xB0;
sfr P0M1 = 0xB1;
sfr P0S = 0xB1; //Page1
sfr P0M2 = 0xB2;
sfr P0SR = 0xB2; //Page1
sfr P1M1 = 0xB3;
sfr P1S = 0xB3; //Page1
sfr P1M2 = 0xB4;
sfr P1SR = 0xB4; //Page1
sfr P2S = 0xB5;
sfr IPH = 0xB7;
sfr PWMINTC = 0xB7; //Page1
sfr IP = 0xB8;
sfr SADEN = 0xB9;
sfr SADEN_1 = 0xBA;
sfr SADDR_1 = 0xBB;
sfr I2DAT = 0xBC;
sfr I2STAT = 0xBD;
sfr I2CLK = 0xBE;
sfr I2TOC = 0xBF;
sfr I2CON = 0xC0;
sfr I2ADDR = 0xC1;
sfr ADCRL = 0xC2;
sfr ADCRH = 0xC3;
sfr T3CON = 0xC4;
sfr PWM4H = 0xC4; //Page1
sfr RL3 = 0xC5;
sfr PWM5H = 0xC5; //Page1
sfr RH3 = 0xC6;
sfr PIOCON1 = 0xC6; //Page1
sfr TA = 0xC7;
sfr T2CON = 0xC8;
sfr T2MOD = 0xC9;
sfr RCMP2L = 0xCA;
sfr RCMP2H = 0xCB;
sfr TL2 = 0xCC;
sfr PWM4L = 0xCC; //Page1
sfr TH2 = 0xCD;
sfr PWM5L = 0xCD; //Page1
sfr ADCMPL = 0xCE;
sfr ADCMPH = 0xCF;
sfr PSW = 0xD0;
sfr PWMPH = 0xD1;
sfr PWM0H = 0xD2;
sfr PWM1H = 0xD3;
sfr PWM2H = 0xD4;
sfr PWM3H = 0xD5;
sfr PNP = 0xD6;
sfr FBD = 0xD7;
sfr PWMCON0 = 0xD8;
sfr PWMPL = 0xD9;
sfr PWM0L = 0xDA;
sfr PWM1L = 0xDB;
sfr PWM2L = 0xDC;
sfr PWM3L = 0xDD;
sfr PIOCON0 = 0xDE;
sfr PWMCON1 = 0xDF;
sfr ACC = 0xE0;
sfr ADCCON1 = 0xE1;
sfr ADCCON2 = 0xE2;
sfr ADCDLY = 0xE3;
sfr C0L = 0xE4;
sfr C0H = 0xE5;
sfr C1L = 0xE6;
sfr C1H = 0xE7;
sfr ADCCON0 = 0xE8;
sfr PICON = 0xE9;
sfr PINEN = 0xEA;
sfr PIPEN = 0xEB;
sfr PIF = 0xEC;
sfr C2L = 0xED;
sfr C2H = 0xEE;
sfr EIP = 0xEF;
sfr B = 0xF0;
sfr CAPCON3 = 0xF1;
sfr CAPCON4 = 0xF2;
sfr SPCR = 0xF3;
sfr SPCR2 = 0xF3; //Page1
sfr SPSR = 0xF4;
sfr SPDR = 0xF5;
sfr AINDIDS = 0xF6;
sfr EIPH = 0xF7;
sfr SCON_1 = 0xF8;
sfr PDTEN = 0xF9; //TA Protection
sfr PDTCNT = 0xFA; //TA Protection
sfr PMEN = 0xFB;
sfr PMD = 0xFC;
sfr EIP1 = 0xFE;
sfr EIPH1 = 0xFF;
/* BIT Registers */
/* SCON_1 */
sbit SM0_1 = SCON_1^7;
sbit FE_1 = SCON_1^7;
sbit SM1_1 = SCON_1^6;
sbit SM2_1 = SCON_1^5;
sbit REN_1 = SCON_1^4;
sbit TB8_1 = SCON_1^3;
sbit RB8_1 = SCON_1^2;
sbit TI_1 = SCON_1^1;
sbit RI_1 = SCON_1^0;
/* ADCCON0 */
sbit ADCF = ADCCON0^7;
sbit ADCS = ADCCON0^6;
sbit ETGSEL1 = ADCCON0^5;
sbit ETGSEL0 = ADCCON0^4;
sbit ADCHS3 = ADCCON0^3;
sbit ADCHS2 = ADCCON0^2;
sbit ADCHS1 = ADCCON0^1;
sbit ADCHS0 = ADCCON0^0;
/* PWMCON0 */
sbit PWMRUN = PWMCON0^7;
sbit LOAD = PWMCON0^6;
sbit PWMF = PWMCON0^5;
sbit CLRPWM = PWMCON0^4;
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
/* T2CON */
sbit TF2 = T2CON^7;
sbit TR2 = T2CON^2;
sbit CM_RL2 = T2CON^0;
/* I2CON */
sbit I2CEN = I2CON^6;
sbit STA = I2CON^5;
sbit STO = I2CON^4;
sbit SI = I2CON^3;
sbit AA = I2CON^2;
sbit I2CPX = I2CON^0;
/* IP */
sbit PADC = IP^6;
sbit PBOD = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
/* P3 */
sbit P30 = P3^0;
/* IE */
sbit EA = IE^7;
sbit EADC = IE^6;
sbit EBOD = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
/* P2 */
sbit P20 = P2^0;
/* SCON */
sbit SM0 = SCON^7;
sbit FE = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
/* P1 */
sbit P17 = P1^7;
sbit P16 = P1^6;
sbit TXD_1 = P1^6;
sbit P15 = P1^5;
sbit P14 = P1^4;
sbit SDA = P1^4;
sbit P13 = P1^3;
sbit SCL = P1^3;
sbit P12 = P1^2;
sbit P11 = P1^1;
sbit P10 = P1^0;
/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
/* P0 */
sbit P07 = P0^7;
sbit RXD = P0^7;
sbit P06 = P0^6;
sbit TXD = P0^6;
sbit P05 = P0^5;
sbit P04 = P0^4;
sbit STADC = P0^4;
sbit P03 = P0^3;
sbit P02 = P0^2;
sbit RXD_1 = P0^2;
sbit P01 = P0^1;
sbit MISO = P0^1;
sbit P00 = P0^0;
sbit MOSI = P0^0;
//*/
typedef bit BIT;
typedef unsigned char UINT8;
typedef unsigned int UINT16;
typedef unsigned long UINT32;
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
typedef enum {FALSE = 0, TRUE = !FALSE} PinStatus;
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus, BitStatus, BitAction;
typedef enum
{
Bit_RESET = 0,
Bit_SET = !Bit_RESET
}bool;
typedef enum
{
OFF = 0,
ON = 1
}
Fun_Status;
typedef enum
{
LOW = 0,
HIGH = !LOW
}
Pin_Status;
typedef enum
{
Input = 0,
Output = !Input
}
GPIO_Status;
#define CID_READ 0x0B
#define DID_READ 0x0C
#define ERASE_APROM 0x22
#define READ_APROM 0x00
#define PROGRAM_APROM 0x21
#define ERASE_LDROM
#define READ_LDROM
#define PROGRAM_LDROM
#define READ_CFG 0xC0
#define PROGRAM_CFG 0xE1
#define READ_UID 0x04
@@ -1,33 +0,0 @@
/************************************************************
* ProjectName: LT8619C
* FileName: Include.h
* BuildData: 2014-03-27
* Version£º V1.00
* Company: Lontium
************************************************************/
#ifndef _INCLUDE_H
#define _INCLUDE_H
#define _N76E003_
#include <stdarg.h>
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "string.h"
#include "Delay.h"
#include "stdio.h"
#include "type.h"
#include "Uart0.h"
#include "main.h"
#include "i2c_master.h"
#include "LT8912B.h"
//#include "interrupt.h"
#endif
@@ -1,61 +0,0 @@
/************************************************************
* ProjectName: LT86104EX
* FileName: main.h
* BuildData: 2013-01-05
* Version£º V3.20
* Company: Lontium
************************************************************/
#ifndef _MAIN_H
#define _MAIN_H
#define _uart_debug_
//#define _LVDS_Output_
#ifdef _LVDS_Output_
//#define _LVDS_Bypass_
//extern bit LVDS_Output_En; // = 1; //
extern u16 Panel_Pixel_CLK; // = 4925; // 49.25MHz
extern u8 PLL_Devider;
extern u8 LVDS_Map; // = _VESA_;
extern u8 LVDS_mode; // = _Sync_Mode_;
extern u8 Color_Depth; // = _8_Bit_Color_;
extern const u16 Panel_Timing[8];
#endif
extern u8 MIPI_Lane; // = 2; // 2 lane ; 0 : 4 lane
extern u8 MIPI_Lane_CH_Swap;
extern u8 MIPI_Lane_PN_Swap;
extern u8 HDMI_DVI_Output;
extern bit IIS_Format_En; // 1: IIS ; 0 : SPDIF
extern bit Test_Pattern_En;
extern bit SDA_Ack;
extern const u16 MIPI_Timing[6][8];
extern void GPIO_Initial( void );
//extern void CLK_Configuration( void );
#endif
/************************************** The End Of File **************************************/
@@ -1,38 +0,0 @@
#ifndef _TYPE_H
#define _TYPE_H
//Variable Type Definition
typedef char CHAR, *PCHAR ;
typedef unsigned char uchar, *puchar ;
typedef unsigned char UCHAR, *PUCHAR ;
typedef unsigned char byte, *pbyte ;
typedef unsigned char BYTE, *PBYTE ;
typedef short SHORT, *PSHORT ;
typedef unsigned short ushort, *pushort ;
typedef unsigned short USHORT, *PUSHORT ;
typedef unsigned short word, *pword ;
typedef unsigned short WORD, *PWORD ;
typedef long LONG, *PLONG ;
typedef unsigned long ulong, *pulong ;
typedef unsigned long ULONG, *PULONG ;
typedef unsigned long dword, *pdword ;
typedef unsigned long DWORD, *PDWORD ;
typedef unsigned int UINT, uint;
//Public Definition
#define HIGH 1
#define LOW 0
#ifndef NULL
#define NULL (void *)0
#endif
#endif
@@ -1,25 +0,0 @@
#ifndef _UART0_H
#define _UART0_H
void InitialUART0_Timer1(UINT32 u32Baudrate); //T1M = 1, SMOD = 1
void InitialUART0_Timer3(UINT32 u32Baudrate); //Timer3 as Baudrate, SMOD=1, Prescale=0
//void Send_Data_To_UART0(UINT8 c);
//UINT8 Receive_Data_From_UART0(void);
//
//UINT8 UID_BYTE(UINT8 Addr);
//void READ_MCU_UID(void);
//void Debug_printf(unsigned char *str);
//void printByte(u8 U8Data);
//void printByteWithSpace(u8 U8Data);
//void printWord(u16 U16Data);
extern void printdec_u32(u32 u32_dec);
extern void print(char* fmt, ...);
extern void printhex(int hex);
#endif
@@ -1,293 +0,0 @@
/************************************************************
* ProjectName: LT8619C
* FileName: Main.c
* BuildData: 2017-04-20
* Version: V1.00
* Company: Lontium
************************************************************/
#include "include.h"
u8 MIPI_Lane; // = 2; // 2 lane ; 0 : 4 lane
u8 MIPI_Lane_CH_Swap;
u8 MIPI_Lane_PN_Swap;
u8 HDMI_DVI_Output; // _HDMI_Output_ ; _DVI_Output_
bit IIS_Format_En; // 1: IIS ; 0 : SPDIF
bit Test_Pattern_En;
// bit LT8912B_IIC_En;
bit SDA_Ack;
const u16 MIPI_Timing[6][8] =
{
//H_act V_act H_total V_total H_BP H_sync V_sync V_BP
{ 720, 480, 858, 525, 60, 62, 6, 30 }, // 480P Vesa Timing
{ 1024, 768, 1344, 806, 160, 136, 6, 29 }, // 1024x768
{ 1280, 720, 1650, 750, 220, 40, 5, 20 }, // 720P Vesa Timing
{ 1280, 800, 1440, 823, 80, 32, 6, 14 }, // 1280x800 timing
{ 1024, 600, 1344, 635, 140, 20, 3, 20 }, // 1024x600
// { 1024, 600, 1274, 645, 80, 10, 10, 23 }, // 1024x600
{ 1920, 1080, 2200, 1125, 148, 44, 5, 36 }, // 1080P Vesa Timing
// { 1920, 1200, 2080, 1235, 80, 32, 6, 26 }, // 1920x1200 154MHz Vesa Timing
// { 1280, 480, 1460, 530, 80, 20, 10, 20 }, // 1280x480
};
#ifdef _LVDS_Output_
// bit LVDS_Output_En; // = 1; //
u16 Panel_Pixel_CLK; // = 4925; // 49.25MHz
u8 PLL_Devider;
u8 LVDS_Map; // = _VESA_;
u8 LVDS_mode; // = _Sync_Mode_;
u8 Color_Depth; // = _8_Bit_Color_;
// 根据LVDS屏规格书设置LVDS输出s的屏参:
const u16 Panel_Timing[8] =
//H_act V_act H_total V_total H_BP H_sync V_sync V_BP
// {1920, 1080, 2200, 1125, 148, 44, 5, 36};// 1080P Vesa Timing
// {1280, 800, 1440, 823, 80, 32, 6, 14};// 1280x800
{ 1024, 600, 1344, 635, 140, 20, 3, 20 }; // 1024x600
// { 1024, 600, 1274, 645, 80, 10, 10, 23 }; // 1024x600
// { 1280, 480, 1460, 530, 80, 20, 10, 20 };
#endif
#ifdef _LT8912B_EVB_ // for 8912B demo board
/***********************************************************
***********************************************************/
void GPIO_Initial( void )
{
P03_OpenDrain_Mode; // OpenDrain_Mode // 8912 SDA
P04_OpenDrain_Mode; // OpenDrain_Mode // 8912 SCL
P00_OpenDrain_Mode; // 8912 Reset // P03_PushPull_Mode; P03_OpenDrain_Mode
// P01_Input_Mode; // IRQ
P13_Input_Mode;
P14_Input_Mode;
// P11_PushPull_Mode;
//EA=1;
InitialUART0_Timer1( 115200 ); //UART_INTI
// Enable_INT_Port0;
// Enable_BIT1_FallEdge_Trig;
// set_EPI;
//set_EX1;
//set_IT1;
//set_IE1;
// set_EA;
}
#endif
#define _LT8912B_RSTN_LOW P00 = 0
#define _LT8912B_RSTN_High P00 = 1
#ifdef _LT8912B_EVB_ // for 8912B demo
/***********************************************************
****************************/
void Initstate_LT8912B( void )
{
// LT8912_IIC_En = 1;
I2CADR = 0x92;
}
#endif
#ifdef _LT8912B_EVB_ // for 8912B demo
/***********************************************************
***********************************************************/
void LT8912B_Reset( void )
{
_LT8912B_RSTN_LOW;
Delay_ms( 100 );
_LT8912B_RSTN_High;
Delay_ms( 100 );
}
#endif
/***********************************************************
***********************************************************/
void LT8912B_Config( void )
{
HDMI_DVI_Output = _HDMI_Output_; // _HDMI_Output_ ; _DVI_Output_
IIS_Format_En = _IIS_Output_; // 1: IIS ; 0 : SPDIF
MIPI_Lane = 4; // 4 lane ; 0 ~ 4 lane
MIPI_Lane_CH_Swap = _Channel_0123; // _Channel_3210; _Channel_0123
MIPI_Lane_PN_Swap = _PN_Swap_Dis; // _PN_Swap_En; _PN_Swap_Dis
Test_Pattern_En = 1; //
#ifdef _LVDS_Output_
// if( LVDS_Output_En )
{
Panel_Pixel_CLK = 5125; // 51.25MHz
PLL_Devider = _PLL_Devider_1; // _PLL_Devider_1;_PLL_Devider_2;_PLL_Devider_4;_PLL_Devider_8
LVDS_Map = _VESA_; // _VESA_ ; _JEIDA_
LVDS_mode = _Sync_Mode_; // _Sync_Mode_ ; _De_Mode_
Color_Depth = _8_Bit_Color_; // _8_Bit_Color_ ; _6_Bit_Color_
}
#endif
}
/***********************************************************
***********************************************************/
void main( void )
{
u8 temp = 0x00;
// CLK_Configuration( );
GPIO_Initial( );
Delay_ms( 200 );
Delay_ms( 200 );
Delay_ms( 200 );
Delay_ms( 200 );
Delay_ms( 200 );
print( "\r\n**********************start*************************" );
Initstate_LT8912B( );
LT8912B_Reset( );
print( "\r\n " );
print( "\r\n*****************LT8912B reset done*****************" );
LT8912B_Config( );
videoformat = VESA_1280x800_60; // VESA_1280x800_60 ;
LT812B_Config( );
print( "\r\n " );
print( "\r\n****************LT8912B Initial done****************" );
print( "\r\n " );
/*
if( Test_Pattern_En )
{
GCMWindow1080P( );
// GCMWindow1280x480P();
// GCMWindow720P( );
// GCMWindow480P( );
// GCMWindow576P( );
}
//*/
#ifdef _LVDS_Output_
// if( LVDS_Output_En )
{
Collpll_Config( );
LVDS_ScaleRatioConfig( );
Delay_ms( 300 );
LvdsPowerUp( );
}
#endif
Delay_ms( 200 );
while( 1 )
{
#if 1
if( temp < 10 )
{
// temp++;
MIPI_Input_det( );
if( Pre_videoformat != videoformat )
{
Pre_videoformat = videoformat;
if( videoformat != 0xff )
{
#ifdef _LVDS_Output_
// if( LVDS_Output_En )
{
LvdsPowerDown( );
}
#endif
//*
MIPIDig_Format_Config( );
DDSConfig( );
AudioIIsEn( );
MIPIRxLogicRes( );
I2CADR = 0x92;
HDMI_WriteI2C_Byte( 0x70, 0x00 ); // pattern disable
print( "\r\n " );
print( "\r\nLT8912B HDMI config done..." );
print( "\r\n " );
//*/
// LT812B_Config( );
#ifdef _LVDS_Output_
#ifdef _LVDS_Bypass_
LVDS_Bypass_Config( );
#else
Collpll_Config( );
LVDS_ScaleRatioConfig( );
#endif
Delay_ms( 300 );
LvdsPowerUp( );
#endif
}
//*
else
if( Test_Pattern_En )
{
GCMWindow1280x800P( );
#ifdef _LVDS_Output_
videoformat = VESA_1024x600_60;
Collpll_Config( );
LVDS_ScaleRatioConfig( );
Delay_ms( 300 );
LvdsPowerUp( );
videoformat = 0xff;
#endif
// GCMWindow1280x480P();
// GCMWindow720P( );
// GCMWindow480P( );
// GCMWindow576P( );
} //*/
}
Delay_ms( 1000 );
}
#endif
}
}
/************************************** The End Of File **************************************/
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,386 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<CLK51>16000000</CLK51>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>0</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<nTsel>10</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\Nuvoton_8051_Keil_uVision_Driver.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>Nuvoton_8051_Keil_uVision_Driver</Key>
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Startup</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\STARTUP.A51</PathWithFileName>
<FilenameWithoutPath>STARTUP.A51</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>src</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\Delay.c</PathWithFileName>
<FilenameWithoutPath>Delay.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\I2C_MASTER.C</PathWithFileName>
<FilenameWithoutPath>I2C_MASTER.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\LT8912B.c</PathWithFileName>
<FilenameWithoutPath>LT8912B.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\uart0.c</PathWithFileName>
<FilenameWithoutPath>uart0.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>inc</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\Delay.h</PathWithFileName>
<FilenameWithoutPath>Delay.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\Function_Define.h</PathWithFileName>
<FilenameWithoutPath>Function_Define.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\I2C_Master.h</PathWithFileName>
<FilenameWithoutPath>I2C_Master.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\include.h</PathWithFileName>
<FilenameWithoutPath>include.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\LT8912B.h</PathWithFileName>
<FilenameWithoutPath>LT8912B.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\main.h</PathWithFileName>
<FilenameWithoutPath>main.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\N76E003.h</PathWithFileName>
<FilenameWithoutPath>N76E003.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\SFR_Macro.h</PathWithFileName>
<FilenameWithoutPath>SFR_Macro.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\type.h</PathWithFileName>
<FilenameWithoutPath>type.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\inc\uart0.h</PathWithFileName>
<FilenameWithoutPath>uart0.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>
@@ -1,463 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>N76E003</Device>
<Vendor>Nuvoton</Vendor>
<Cpu>IRAM(0 - 0xFF) IROM(0 - 0x47FF) XRAM(0 - 0x2FF) CLOCK(16000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>N76E003.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>Nuvoton\</RegisterFilePath>
<DBRegisterFilePath>Nuvoton\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>LT8912B_EVB</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>DP51.DLL</SimDlgDll>
<SimDlgDllArguments></SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments></TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>0</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>10</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\Nuvoton_8051_Keil_uVision_Driver.dll</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4102</DriverSelection>
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2>BIN\Nuvoton_8051_Keil_uVision_Driver.dll</Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp>src</pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>2</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>1</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x4800</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x300</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>1</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define>FOSC_160000</Define>
<Undefine></Undefine>
<IncludePath>..\inc</IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Startup</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>.\STARTUP.A51</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>src</GroupName>
<Files>
<File>
<FileName>Delay.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\Delay.c</FilePath>
</File>
<File>
<FileName>I2C_MASTER.C</FileName>
<FileType>1</FileType>
<FilePath>..\src\I2C_MASTER.C</FilePath>
</File>
<File>
<FileName>LT8912B.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\LT8912B.c</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\main.c</FilePath>
</File>
<File>
<FileName>uart0.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\uart0.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>inc</GroupName>
<Files>
<File>
<FileName>Delay.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\Delay.h</FilePath>
</File>
<File>
<FileName>Function_Define.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\Function_Define.h</FilePath>
</File>
<File>
<FileName>I2C_Master.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\I2C_Master.h</FilePath>
</File>
<File>
<FileName>include.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\include.h</FilePath>
</File>
<File>
<FileName>LT8912B.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\LT8912B.h</FilePath>
</File>
<File>
<FileName>main.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\main.h</FilePath>
</File>
<File>
<FileName>N76E003.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\N76E003.h</FilePath>
</File>
<File>
<FileName>SFR_Macro.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\SFR_Macro.h</FilePath>
</File>
<File>
<FileName>type.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\type.h</FilePath>
</File>
<File>
<FileName>uart0.h</FileName>
<FileType>5</FileType>
<FilePath>..\inc\uart0.h</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>
@@ -1,163 +0,0 @@
C51 COMPILER V9.54 DELAY 06/12/2026 11:01:29 PAGE 1
C51 COMPILER V9.54, COMPILATION OF MODULE DELAY
OBJECT MODULE PLACED IN .\Objects\Delay.obj
COMPILER INVOKED BY: D:\Keil\MDK\download\C51\BIN\C51.EXE ..\src\Delay.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\inc) D
-EFINE(FOSC_160000) DEBUG OBJECTEXTEND PRINT(.\Listings\Delay.lst) TABS(2) OBJECT(.\Objects\Delay.obj)
line level source
1 /*--------------------------------------------------------------------------------------------------------
--*/
2 /*
- */
3 /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.
- */
4 /*
- */
5 /*--------------------------------------------------------------------------------------------------------
--*/
6
7 //********************************************************************************************************
-***
8 // Nuvoton Technoledge Corp.
9 // Website: http://www.nuvoton.com
10 // E-Mail : MicroC-8bit@nuvoton.com
11 // Date : Apr/21/2016
12 //********************************************************************************************************
-***
13
14 #include "Include.h"
15
16 bit BIT_TMP;
17
18
19 /***********************************************************
20
21 ***********************************************************/
22 void Timer0_Delay100us( UINT32 u32CNT )
23 {
24 1 clr_T0M; //T0M=0, Timer0 Clock = Fsys/12
25 1 TMOD |= 0x01; //Timer0 is 16-bit mode
26 1 set_TR0; //Start Timer0
27 1 while( u32CNT != 0 )
28 1 {
29 2 TL0 = LOBYTE( TIMER_DIV12_VALUE_100us ); //Find define in "Function_define.h" "TIMER VALUE"
30 2 TH0 = HIBYTE( TIMER_DIV12_VALUE_100us );
31 2 while( TF0 != 1 )
32 2 {
33 3 ; //Check Timer0 Time-Out Flag
34 3 }
35 2 clr_TF0;
36 2 u32CNT--;
37 2 }
38 1 clr_TR0; //Stop Timer0
39 1 }
40
41 /***********************************************************
42
43 ***********************************************************/
44 void Timer0_Delay1ms( UINT32 u32CNT )
45 {
46 1 clr_T0M; //T0M=0, Timer0 Clock = Fsys/12
47 1 TMOD |= 0x01; //Timer0 is 16-bit mode
C51 COMPILER V9.54 DELAY 06/12/2026 11:01:29 PAGE 2
48 1 set_TR0; //Start Timer0
49 1 while( u32CNT != 0 )
50 1 {
51 2 TL0 = LOBYTE( TIMER_DIV12_VALUE_1ms ); //Find define in "Function_define.h" "TIMER VALUE"
52 2 TH0 = HIBYTE( TIMER_DIV12_VALUE_1ms );
53 2 while( TF0 != 1 )
54 2 {
55 3 ; //Check Timer0 Time-Out Flag
56 3 }
57 2 clr_TF0;
58 2 u32CNT--;
59 2 }
60 1 clr_TR0; //Stop Timer0
61 1 }
62
63 /*
64 //------------------------------------------------------------------------------
65 void Timer1_Delay10ms(UINT32 u32CNT)
66 {
67 clr_T1M; //T1M=0, Timer1 Clock = Fsys/12
68 TMOD |= 0x10; //Timer1 is 16-bit mode
69 set_TR1; //Start Timer1
70 while (u32CNT != 0)
71 {
72 TL1 = LOBYTE(TIMER_DIV12_VALUE_10ms); //Find define in "Function_define.h" "TIMER VALUE"
73 TH1 = HIBYTE(TIMER_DIV12_VALUE_10ms);
74 while (TF1 != 1); //Check Timer1 Time-Out Flag
75 clr_TF1;
76 u32CNT --;
77 }
78 clr_TR1; //Stop Timer1
79 }
80 //------------------------------------------------------------------------------
81 void Timer2_Delay500us(UINT32 u32CNT)
82 {
83 clr_T2DIV2; //Timer2 Clock = Fsys/4
84 clr_T2DIV1;
85 set_T2DIV0;
86 set_TR2; //Start Timer2
87 while (u32CNT != 0)
88 {
89 TL2 = LOBYTE(TIMER_DIV4_VALUE_500us); //Find define in "Function_define.h" "TIMER VALUE"
90 TH2 = HIBYTE(TIMER_DIV4_VALUE_500us);
91 while (TF2 != 1); //Check Timer2 Time-Out Flag
92 clr_TF2;
93 u32CNT --;
94 }
95 clr_TR2; //Stop Timer2
96 }
97 //------------------------------------------------------------------------------
98 void Timer3_Delay100ms(UINT32 u32CNT)
99 {
100 T3CON = 0x07; //Timer3 Clock = Fsys/128
101 set_TR3; //Trigger Timer3
102 while (u32CNT != 0)
103 {
104 RL3 = LOBYTE(TIMER_DIV128_VALUE_100ms); //Find define in "Function_define.h" "TIMER VALUE"
105 RH3 = HIBYTE(TIMER_DIV128_VALUE_100ms);
106 while ((T3CON&SET_BIT4) != SET_BIT4); //Check Timer3 Time-Out Flag
107 clr_TF3;
108 u32CNT --;
109 }
C51 COMPILER V9.54 DELAY 06/12/2026 11:01:29 PAGE 3
110 clr_TR3; //Stop Timer3
111 }
112 //------------------------------------------------------------------------------
113 void Timer3_Delay10us(UINT32 u32CNT)
114 {
115 T3CON = 0x07; //Timer3 Clock = Fsys/128
116 set_TR3; //Trigger Timer3
117 while (u32CNT != 0)
118 {
119 RL3 = LOBYTE(TIMER_DIV4_VALUE_10us); //Find define in "Function_define.h" "TIMER VALUE"
120 RH3 = HIBYTE(TIMER_DIV4_VALUE_10us);
121 while ((T3CON&SET_BIT4) != SET_BIT4); //Check Timer3 Time-Out Flag
122 clr_TF3;
123 u32CNT --;
124 }
125 clr_TR3; //Stop Timer3
126 }
127 //*/
128
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 178 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 8
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
@@ -1,294 +0,0 @@
C51 COMPILER V9.54 I2C_MASTER 06/12/2026 11:01:29 PAGE 1
C51 COMPILER V9.54, COMPILATION OF MODULE I2C_MASTER
OBJECT MODULE PLACED IN .\Objects\I2C_MASTER.obj
COMPILER INVOKED BY: D:\Keil\MDK\download\C51\BIN\C51.EXE ..\src\I2C_MASTER.C LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\i
-nc) DEFINE(FOSC_160000) DEBUG OBJECTEXTEND PRINT(.\Listings\I2C_MASTER.lst) TABS(2) OBJECT(.\Objects\I2C_MASTER.obj)
line level source
1 /************************************************************
2 * ProjectName: LT8522EX
3 * FileName: lt8522ex.c
4 * BuildData: 2014-03-27
5 * Version£º V1.00
6 * Company: Lontium
7 ************************************************************/
8
9 #include "include.h"
10
11 //bit FLAG_I2C_ERROR;
12 bit ack;
13 u8 I2CADR = 0x90;
14
15 void Delay_ms( u16 mscount )
16 {
17 1 u16 i, x;
18 1 for( i = 0; i < mscount; i++ )
19 1 {
20 2 for( x = 0; x < 2000; x++ )
21 2 {
22 3 ;
23 3 }
24 2 // IWDG_ReloadCounter();
25 2 }
26 1 }
27
28 #define SCL_H P04=1
29 #define SCL_L P04=0
30
31 #define SDA_H P03=1
32 #define SDA_L P03=0
33
34 #define I2C_SDA_READ P03
35
36 static void I2C_Delay_us(u8 uscount)
37 {
38 1 u8 x;
39 1 for(x=0; x<uscount; x++)
40 1 {
41 2 ;
42 2 }
43 1 }
44
45 static void Start_I2c(void)
46 {
47 1 SDA_H;
48 1 I2C_Delay_us(1);
49 1 SCL_H;
50 1 I2C_Delay_us(10);
51 1 SDA_L;
52 1 I2C_Delay_us(7);
53 1 SCL_L;
54 1 I2C_Delay_us(1);
C51 COMPILER V9.54 I2C_MASTER 06/12/2026 11:01:29 PAGE 2
55 1 }
56
57 static void Stop_I2c(void)
58 {
59 1 SDA_L;
60 1 I2C_Delay_us(2);
61 1 SCL_H;
62 1 I2C_Delay_us(10);
63 1 SDA_H;
64 1 I2C_Delay_us(10);
65 1 }
66
67
68 static void I2C_SendByte(u8 c)
69 {
70 1 u8 bit_Cnt;
71 1
72 1 for(bit_Cnt=0; bit_Cnt<8; bit_Cnt++)
73 1 {
74 2 if((c<<bit_Cnt) & 0x80)
75 2 {
76 3 SDA_H;
77 3 }
78 2 else
79 2 {
80 3 SDA_L;
81 3 }
82 2 I2C_Delay_us(3);
83 2 SCL_H;
84 2 I2C_Delay_us(4);
85 2 SCL_L;
86 2 }
87 1
88 1 I2C_Delay_us(1);
89 1 SDA_H;
90 1 I2C_Delay_us(3);
91 1 SCL_H;
92 1 I2C_Delay_us(3);
93 1
94 1 if(I2C_SDA_READ != 0)
95 1 {
96 2 ack=0;
97 2 }
98 1 else
99 1 {
100 2 ack=1;
101 2 }
102 1 SCL_L;
103 1 I2C_Delay_us(3);
104 1 }
105
106 static u8 RcvByte(void)
107 {
108 1 u8 retc;
109 1 u8 bit_Cnt;
110 1
111 1 retc=0;
112 1 SDA_H;
113 1 for (bit_Cnt=0; bit_Cnt<8; bit_Cnt++)
114 1 {
115 2 I2C_Delay_us(1);
116 2 SCL_L;
C51 COMPILER V9.54 I2C_MASTER 06/12/2026 11:01:29 PAGE 3
117 2 I2C_Delay_us(4);
118 2 SCL_H;
119 2 I2C_Delay_us(2);
120 2 retc=retc<<1;
121 2 if (I2C_SDA_READ != 0)
122 2 {
123 3 retc = retc+1;
124 3 }
125 2 I2C_Delay_us(2);
126 2 }
127 1 SCL_L;
128 1 I2C_Delay_us(5);
129 1 return retc;
130 1 }
131
132 static void Ack_I2c(bool a)
133 {
134 1 if (a == 0)
135 1 {
136 2 SDA_L;
137 2 }
138 1 else
139 1 {
140 2 SDA_H;
141 2 }
142 1
143 1 I2C_Delay_us(8);
144 1 SCL_H;
145 1 I2C_Delay_us(15);
146 1 SCL_L;
147 1 I2C_Delay_us(8);
148 1 }
149
150 static bool i2c_write_byte(u8 sla,u8 suba,u8 *s,u8 no)
151 {
152 1 u8 i;
153 1
154 1 Start_I2c();
155 1
156 1 I2C_SendByte(sla);
157 1
158 1 if(ack==0)
159 1 {
160 2 Stop_I2c();
161 2 return FALSE;
162 2 }
163 1 I2C_SendByte(suba);
164 1 if(ack == 0)
165 1 {
166 2 Stop_I2c();
167 2 return FALSE;
168 2 }
169 1
170 1 for(i=0;i<no;i++)
171 1 {
172 2 I2C_SendByte(*s);
173 2 if(ack == 0)
174 2 {
175 3 Stop_I2c();
176 3 return FALSE;
177 3 }
178 2 s++;
C51 COMPILER V9.54 I2C_MASTER 06/12/2026 11:01:29 PAGE 4
179 2 }
180 1 Stop_I2c();
181 1 return TRUE;
182 1 }
183
184 static bool i2c_read_byte(u8 sla,u8 suba,u8 *s,u8 no)
185 {
186 1 u8 i;
187 1 Start_I2c();
188 1 I2C_SendByte(sla);
189 1 if(ack==0)
190 1 {
191 2 Stop_I2c();
192 2 *s = 0x00;
193 2 return FALSE;
194 2 }
195 1 I2C_SendByte(suba);
196 1 if (ack == 0)
197 1 {
198 2 Stop_I2c();
199 2 *s = 0x00;
200 2 return FALSE;
201 2 }
202 1 Start_I2c();
203 1 I2C_SendByte(sla+1);
204 1 if (ack == 0)
205 1 {
206 2 Stop_I2c();
207 2 *s = 0x00;
208 2 return FALSE;
209 2 }
210 1 for (i=0; i<no-1; i++)
211 1 {
212 2 *s= RcvByte();
213 2 Ack_I2c(0);
214 2 s++;
215 2 }
216 1 *s = RcvByte();
217 1 Ack_I2c(1);
218 1 Stop_I2c();
219 1 return TRUE;
220 1 }
221
222 u8 HDMI_ReadI2C_Byte(u8 RegAddr)
223 {
224 1 u8 p_data=0;
225 1
226 1 if (i2c_read_byte(I2CADR, RegAddr, &p_data,1) != FALSE)
227 1 {
228 2 return p_data;
229 2 }
230 1 return 0;
231 1 }
232
233 bool HDMI_ReadI2C_ByteN(u8 RegAddr,u8 *p_data,u8 N)
234 {
235 1 bool flag;
236 1
237 1 flag = i2c_read_byte(I2CADR, RegAddr, p_data,N);
238 1
239 1 return flag;
240 1 }
C51 COMPILER V9.54 I2C_MASTER 06/12/2026 11:01:29 PAGE 5
241
242 bool HDMI_WriteI2C_Byte(u8 RegAddr, u8 d)
243 {
244 1 bool flag;
245 1
246 1 flag=i2c_write_byte(I2CADR, RegAddr,&d,1);
247 1
248 1 return flag;
249 1 }
250
251 bool HDMI_WriteI2C_ByteN(u8 RegAddr, u8 *d,u8 N)
252 {
253 1 bool flag;
254 1
255 1 flag=i2c_write_byte(I2CADR, RegAddr,d,N) ;
256 1
257 1 return flag;
258 1 }
259
260 /************************************** The End Of File **************************************/
261
262
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 559 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 26
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
@@ -1,253 +0,0 @@
A51 MACRO ASSEMBLER STARTUP 06/12/2026 11:01:29 PAGE 1
MACRO ASSEMBLER A51 V8.02c
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: D:\Keil\MDK\download\C51\BIN\A51.EXE STARTUP.A51 SET(LARGE) DEBUG PRINT(.\Listings\STARTUP.lst) OB
JECT(.\Objects\STARTUP.obj) EP
LOC OBJ LINE SOURCE
1 $nomod51
2 ;------------------------------------------------------------------------------
3 ; This file is part of the C51 Compiler package
4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
5 ; Version 8.01
6 ;
7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
8 ;------------------------------------------------------------------------------
9 ; STARTUP.A51: This code is executed after processor reset.
10 ;
11 ; To translate this file use A51 with the following invocation:
12 ;
13 ; A51 STARTUP.A51
14 ;
15 ; To link the modified STARTUP.OBJ file to your application use the following
16 ; Lx51 invocation:
17 ;
18 ; Lx51 your object file list, STARTUP.OBJ controls
19 ;
20 ;------------------------------------------------------------------------------
21 ;
22 ; User-defined <h> Power-On Initialization of Memory
23 ;
24 ; With the following EQU statements the initialization of memory
25 ; at processor reset can be defined:
26 ;
27 ; <o> IDATALEN: IDATA memory size <0x0-0x100>
28 ; <i> Note: The absolute start-address of IDATA memory is always 0
29 ; <i> The IDATA space overlaps physically the DATA and BIT areas.
0080 30 IDATALEN EQU 80H
31 ;
32 ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
33 ; <i> The absolute start address of XDATA memory
0000 34 XDATASTART EQU 0
35 ;
36 ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
37 ; <i> The length of XDATA memory in bytes.
0000 38 XDATALEN EQU 0
39 ;
40 ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
41 ; <i> The absolute start address of PDATA memory
0000 42 PDATASTART EQU 0H
43 ;
44 ; <o> PDATALEN: PDATA memory size <0x0-0xFF>
45 ; <i> The length of PDATA memory in bytes.
0000 46 PDATALEN EQU 0H
47 ;
48 ;</h>
49 ;------------------------------------------------------------------------------
50 ;
51 ;<h> Reentrant Stack Initialization
52 ;
53 ; The following EQU statements define the stack pointer for reentrant
54 ; functions and initialized it:
55 ;
56 ; <h> Stack Space for reentrant functions in the SMALL model.
57 ; <q> IBPSTACK: Enable SMALL model reentrant stack
A51 MACRO ASSEMBLER STARTUP 06/12/2026 11:01:29 PAGE 2
58 ; <i> Stack space for reentrant functions in the SMALL model.
0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
60 ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
61 ; <i> Set the top of the stack to the highest location.
0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
63 ; </h>
64 ;
65 ; <h> Stack Space for reentrant functions in the LARGE model.
66 ; <q> XBPSTACK: Enable LARGE model reentrant stack
67 ; <i> Stack space for reentrant functions in the LARGE model.
0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
69 ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
70 ; <i> Set the top of the stack to the highest location.
0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
72 ; </h>
73 ;
74 ; <h> Stack Space for reentrant functions in the COMPACT model.
75 ; <q> PBPSTACK: Enable COMPACT model reentrant stack
76 ; <i> Stack space for reentrant functions in the COMPACT model.
0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
78 ;
79 ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
80 ; <i> Set the top of the stack to the highest location.
0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
82 ; </h>
83 ;</h>
84 ;------------------------------------------------------------------------------
85 ;
86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
87 ; <e>Compact Model Page Definition
88 ;
89 ; <i>Define the XDATA page used for PDATA variables.
90 ; <i>PPAGE must conform with the PPAGE set in the linker invocation.
91 ;
92 ; Enable pdata memory page initalization
0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
94 ;
95 ; <o> PPAGE number <0x0-0xFF>
96 ; <i> uppermost 256-byte address of the page used for PDATA variables.
0000 97 PPAGE EQU 0
98 ;
99 ; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
100 ; <i> most 8051 variants use P2 as uppermost address byte
00A0 101 PPAGE_SFR DATA 0A0H
102 ;
103 ; </e>
104 ;------------------------------------------------------------------------------
105
106 ; Standard SFR Symbols
00E0 107 ACC DATA 0E0H
00F0 108 B DATA 0F0H
0081 109 SP DATA 81H
0082 110 DPL DATA 82H
0083 111 DPH DATA 83H
112
113 NAME ?C_STARTUP
114
115
116 ?C_C51STARTUP SEGMENT CODE
117 ?STACK SEGMENT IDATA
118
---- 119 RSEG ?STACK
0000 120 DS 1
121
122 EXTRN CODE (?C_START)
123 PUBLIC ?C_STARTUP
A51 MACRO ASSEMBLER STARTUP 06/12/2026 11:01:29 PAGE 3
124
---- 125 CSEG AT 0
0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1
127
---- 128 RSEG ?C_C51STARTUP
129
0000 130 STARTUP1:
131
132 IF IDATALEN <> 0
0000 787F 133 MOV R0,#IDATALEN - 1
0002 E4 134 CLR A
0003 F6 135 IDATALOOP: MOV @R0,A
0004 D8FD 136 DJNZ R0,IDATALOOP
137 ENDIF
138
139 IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
153
154 IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
157
158 IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
166
167 IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
172
173 IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
179
180 IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
184
0006 758100 F 185 MOV SP,#?STACK-1
186
187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
188 ;<h> Code Banking
189 ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
A51 MACRO ASSEMBLER STARTUP 06/12/2026 11:01:29 PAGE 4
190
195 ;</h>
0009 020000 F 196 LJMP ?C_START
197
198 END
A51 MACRO ASSEMBLER STARTUP 06/12/2026 11:01:29 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_C51STARTUP. . . C SEG 000CH REL=UNIT
?C_START . . . . . C ADDR ----- EXT
?C_STARTUP . . . . C ADDR 0000H A
?STACK . . . . . . I SEG 0001H REL=UNIT
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
IBPSTACK . . . . . N NUMB 0000H A
IBPSTACKTOP. . . . N NUMB 0100H A
IDATALEN . . . . . N NUMB 0080H A
IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP
PBPSTACK . . . . . N NUMB 0000H A
PBPSTACKTOP. . . . N NUMB 0100H A
PDATALEN . . . . . N NUMB 0000H A
PDATASTART . . . . N NUMB 0000H A
PPAGE. . . . . . . N NUMB 0000H A
PPAGEENABLE. . . . N NUMB 0000H A
PPAGE_SFR. . . . . D ADDR 00A0H A
SP . . . . . . . . D ADDR 0081H A
STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
XBPSTACK . . . . . N NUMB 0000H A
XBPSTACKTOP. . . . N NUMB 0000H A
XDATALEN . . . . . N NUMB 0000H A
XDATASTART . . . . N NUMB 0000H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
@@ -1,327 +0,0 @@
C51 COMPILER V9.54 MAIN 06/12/2026 11:01:29 PAGE 1
C51 COMPILER V9.54, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: D:\Keil\MDK\download\C51\BIN\C51.EXE ..\main.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\inc) DEFINE
-(FOSC_160000) DEBUG OBJECTEXTEND PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj)
line level source
1 /************************************************************
2 * ProjectName: LT8619C
3 * FileName: Main.c
4 * BuildData: 2017-04-20
5 * Version: V1.00
6 * Company: Lontium
7 ************************************************************/
8 #include "include.h"
9
10 u8 MIPI_Lane; // = 2; // 2 lane ; 0 : 4 lane
11
12 u8 MIPI_Lane_CH_Swap;
13
14 u8 MIPI_Lane_PN_Swap;
15
16 u8 HDMI_DVI_Output; // _HDMI_Output_ ; _DVI_Output_
17
18 bit IIS_Format_En; // 1: IIS ; 0 : SPDIF
19
20 bit Test_Pattern_En;
21
22 // bit LT8912B_IIC_En;
23
24 bit SDA_Ack;
25
26 const u16 MIPI_Timing[6][8] =
27 {
28 //H_act V_act H_total V_total H_BP H_sync V_sync V_BP
29 { 720, 480, 858, 525, 60, 62, 6, 30 }, // 480P Vesa Timing
30 { 1024, 768, 1344, 806, 160, 136, 6, 29 }, // 1024x768
31 { 1280, 720, 1650, 750, 220, 40, 5, 20 }, // 720P Vesa Timing
32
33 { 1280, 800, 1440, 823, 80, 32, 6, 14 }, // 1280x800 timing
34
35 { 1024, 600, 1344, 635, 140, 20, 3, 20 }, // 1024x600
36 // { 1024, 600, 1274, 645, 80, 10, 10, 23 }, // 1024x600
37 { 1920, 1080, 2200, 1125, 148, 44, 5, 36 }, // 1080P Vesa Timing
38 // { 1920, 1200, 2080, 1235, 80, 32, 6, 26 }, // 1920x1200 154MHz Vesa Timing
39 // { 1280, 480, 1460, 530, 80, 20, 10, 20 }, // 1280x480
40 };
41
42 #ifdef _LVDS_Output_
// bit LVDS_Output_En; // = 1; //
u16 Panel_Pixel_CLK; // = 4925; // 49.25MHz
u8 PLL_Devider;
u8 LVDS_Map; // = _VESA_;
u8 LVDS_mode; // = _Sync_Mode_;
u8 Color_Depth; // = _8_Bit_Color_;
C51 COMPILER V9.54 MAIN 06/12/2026 11:01:29 PAGE 2
// 根据LVDS屏规格书设置LVDS输出s的屏参:
const u16 Panel_Timing[8] =
//H_act V_act H_total V_total H_BP H_sync V_sync V_BP
// {1920, 1080, 2200, 1125, 148, 44, 5, 36};// 1080P Vesa Timing
// {1280, 800, 1440, 823, 80, 32, 6, 14};// 1280x800
{ 1024, 600, 1344, 635, 140, 20, 3, 20 }; // 1024x600
// { 1024, 600, 1274, 645, 80, 10, 10, 23 }; // 1024x600
// { 1280, 480, 1460, 530, 80, 20, 10, 20 };
#endif
66
67 #ifdef _LT8912B_EVB_ // for 8912B demo board
68
69
70 /***********************************************************
71
72 ***********************************************************/
73 void GPIO_Initial( void )
74 {
75 1 P03_OpenDrain_Mode; // OpenDrain_Mode // 8912 SDA
76 1 P04_OpenDrain_Mode; // OpenDrain_Mode // 8912 SCL
77 1 P00_OpenDrain_Mode; // 8912 Reset // P03_PushPull_Mode; P03_OpenDrain_Mode
78 1
79 1 // P01_Input_Mode; // IRQ
80 1
81 1 P13_Input_Mode;
82 1 P14_Input_Mode;
83 1
84 1 // P11_PushPull_Mode;
85 1
86 1 //EA=1;
87 1 InitialUART0_Timer1( 115200 ); //UART_INTI
88 1
89 1 // Enable_INT_Port0;
90 1 // Enable_BIT1_FallEdge_Trig;
91 1 // set_EPI;
92 1
93 1 //set_EX1;
94 1 //set_IT1;
95 1 //set_IE1;
96 1 // set_EA;
97 1 }
98
99 #endif
100
101 #define _LT8912B_RSTN_LOW P00 = 0
102 #define _LT8912B_RSTN_High P00 = 1
103
104 #ifdef _LT8912B_EVB_ // for 8912B demo
105
106
107 /***********************************************************
108 ****************************/
109 void Initstate_LT8912B( void )
110 {
111 1 // LT8912_IIC_En = 1;
112 1
113 1 I2CADR = 0x92;
114 1 }
115
116 #endif
C51 COMPILER V9.54 MAIN 06/12/2026 11:01:29 PAGE 3
117
118 #ifdef _LT8912B_EVB_ // for 8912B demo
119
120
121 /***********************************************************
122
123 ***********************************************************/
124 void LT8912B_Reset( void )
125 {
126 1 _LT8912B_RSTN_LOW;
127 1 Delay_ms( 100 );
128 1 _LT8912B_RSTN_High;
129 1 Delay_ms( 100 );
130 1 }
131
132 #endif
133
134
135 /***********************************************************
136
137 ***********************************************************/
138 void LT8912B_Config( void )
139 {
140 1 HDMI_DVI_Output = _HDMI_Output_; // _HDMI_Output_ ; _DVI_Output_
141 1
142 1 IIS_Format_En = _IIS_Output_; // 1: IIS ; 0 : SPDIF
143 1
144 1 MIPI_Lane = 4; // 4 lane ; 0 ~ 4 lane
145 1
146 1 MIPI_Lane_CH_Swap = _Channel_0123; // _Channel_3210; _Channel_0123
147 1 MIPI_Lane_PN_Swap = _PN_Swap_Dis; // _PN_Swap_En; _PN_Swap_Dis
148 1
149 1 Test_Pattern_En = 1; //
150 1
151 1 #ifdef _LVDS_Output_
// if( LVDS_Output_En )
{
Panel_Pixel_CLK = 5125; // 51.25MHz
PLL_Devider = _PLL_Devider_1; // _PLL_Devider_1;_PLL_Devider_2;_PLL_Devider_4;_PLL_Devider_8
LVDS_Map = _VESA_; // _VESA_ ; _JEIDA_
LVDS_mode = _Sync_Mode_; // _Sync_Mode_ ; _De_Mode_
Color_Depth = _8_Bit_Color_; // _8_Bit_Color_ ; _6_Bit_Color_
}
#endif
166 1 }
167
168 /***********************************************************
169
170 ***********************************************************/
171 void main( void )
172 {
173 1 u8 temp = 0x00;
174 1 // CLK_Configuration( );
175 1 GPIO_Initial( );
176 1
177 1 Delay_ms( 200 );
178 1 Delay_ms( 200 );
C51 COMPILER V9.54 MAIN 06/12/2026 11:01:29 PAGE 4
179 1 Delay_ms( 200 );
180 1 Delay_ms( 200 );
181 1 Delay_ms( 200 );
182 1
183 1 print( "\r\n**********************start*************************" );
184 1 Initstate_LT8912B( );
185 1 LT8912B_Reset( );
186 1 print( "\r\n " );
187 1 print( "\r\n*****************LT8912B reset done*****************" );
188 1
189 1 LT8912B_Config( );
190 1
191 1 videoformat = VESA_1280x800_60; // VESA_1280x800_60 ;
192 1 LT812B_Config( );
193 1 print( "\r\n " );
194 1 print( "\r\n****************LT8912B Initial done****************" );
195 1 print( "\r\n " );
196 1
197 1
198 1 /*
199 1 if( Test_Pattern_En )
200 1 {
201 1 GCMWindow1080P( );
202 1 // GCMWindow1280x480P();
203 1 // GCMWindow720P( );
204 1 // GCMWindow480P( );
205 1 // GCMWindow576P( );
206 1 }
207 1 //*/
208 1 #ifdef _LVDS_Output_
// if( LVDS_Output_En )
{
Collpll_Config( );
LVDS_ScaleRatioConfig( );
Delay_ms( 300 );
LvdsPowerUp( );
}
#endif
218 1
219 1 Delay_ms( 200 );
220 1
221 1 while( 1 )
222 1 {
223 2 #if 1
224 2 if( temp < 10 )
225 2 {
226 3 // temp++;
227 3 MIPI_Input_det( );
228 3
229 3 if( Pre_videoformat != videoformat )
230 3 {
231 4 Pre_videoformat = videoformat;
232 4 if( videoformat != 0xff )
233 4 {
234 5 #ifdef _LVDS_Output_
// if( LVDS_Output_En )
{
LvdsPowerDown( );
}
#endif
240 5 //*
C51 COMPILER V9.54 MAIN 06/12/2026 11:01:29 PAGE 5
241 5 MIPIDig_Format_Config( );
242 5 DDSConfig( );
243 5 AudioIIsEn( );
244 5 MIPIRxLogicRes( );
245 5
246 5 I2CADR = 0x92;
247 5 HDMI_WriteI2C_Byte( 0x70, 0x00 ); // pattern disable
248 5 print( "\r\n " );
249 5 print( "\r\nLT8912B HDMI config done..." );
250 5 print( "\r\n " );
251 5 //*/
252 5 // LT812B_Config( );
253 5 #ifdef _LVDS_Output_
#ifdef _LVDS_Bypass_
LVDS_Bypass_Config( );
#else
Collpll_Config( );
LVDS_ScaleRatioConfig( );
#endif
Delay_ms( 300 );
LvdsPowerUp( );
#endif
264 5 }
265 4 //*
266 4 else
267 4 if( Test_Pattern_En )
268 4 {
269 5 GCMWindow1280x800P( );
270 5
271 5 #ifdef _LVDS_Output_
videoformat = VESA_1024x600_60;
Collpll_Config( );
LVDS_ScaleRatioConfig( );
Delay_ms( 300 );
LvdsPowerUp( );
videoformat = 0xff;
#endif
280 5 // GCMWindow1280x480P();
281 5 // GCMWindow720P( );
282 5 // GCMWindow480P( );
283 5 // GCMWindow576P( );
284 5 } //*/
285 4 }
286 3
287 3 Delay_ms( 1000 );
288 3 }
289 2 #endif
290 2 }
291 1 }
292
293 /************************************** The End Of File **************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 312 ----
CONSTANT SIZE = 199 ----
XDATA SIZE = 100 1
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
C51 COMPILER V9.54 MAIN 06/12/2026 11:01:29 PAGE 6
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
@@ -1,442 +0,0 @@
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 1
C51 COMPILER V9.54, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN .\Objects\uart0.obj
COMPILER INVOKED BY: D:\Keil\MDK\download\C51\BIN\C51.EXE ..\src\uart0.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\inc) D
-EFINE(FOSC_160000) DEBUG OBJECTEXTEND PRINT(.\Listings\uart0.lst) TABS(2) OBJECT(.\Objects\uart0.obj)
line level source
1
2 #include "include.h"
3
4
5 //----------------------------------------------------------------------------------
6 // UART0 baud rate initial setting
7 //----------------------------------------------------------------------------------
8 void InitialUART0_Timer1(UINT32 u32Baudrate) //T1M = 1, SMOD = 1
9 {
10 1 P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
11 1 P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
12 1
13 1 SCON = 0x50; //UART0 Mode1,REN=1,TI=1
14 1 TMOD |= 0x20; //Timer1 Mode1
15 1
16 1 set_SMOD; //UART0 Double Rate Enable
17 1 set_T1M;
18 1 clr_BRCK; //Serial port 0 baud rate clock source = Timer1
19 1
20 1 #ifdef FOSC_160000
21 1 TH1 = 256 - (1000000/u32Baudrate+1); /*16 MHz */
22 1 #endif
23 1 #ifdef FOSC_166000
TH1 = 256 - (1037500/u32Baudrate); /*16.6 MHz */
#endif
26 1 set_TR1;
27 1 set_TI; //For printf function must setting TI = 1
28 1 }
29 //---------------------------------------------------------------
30 void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
31 {
32 1 P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
33 1 P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
34 1
35 1 SCON = 0x50; //UART0 Mode1,REN=1,TI=1
36 1 set_SMOD; //UART0 Double Rate Enable
37 1 T3CON &= 0xF8; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
38 1 set_BRCK; //UART0 baud rate clock source = Timer3
39 1
40 1 #ifdef FOSC_160000
41 1 RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
42 1 RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
43 1 #endif
44 1 #ifdef FOSC_166000
RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
RL3 = LOBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
#endif
48 1 set_TR3; //Trigger Timer3
49 1 set_TI; //For printf function must setting TI = 1
50 1 }
51
52 UINT8 Receive_Data_From_UART0(void)
53 {
54 1 UINT8 c;
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 2
55 1 while (!RI);
56 1 c = SBUF;
57 1 RI = 0;
58 1 return (c);
59 1 }
60
61 void Send_Data_To_UART0 (UINT8 c)
62 {
63 1 TI = 0;
64 1 SBUF = c;
65 1 while(TI==0);
66 1 }
67
68 void printByte(u8 UData)
69 {
70 1 u8 reg_H,reg_L;
71 1 reg_L=UData&0x0f;
72 1 reg_H=(UData&0xf0)>>4;
73 1
74 1 reg_L = (reg_L<0x0a) ? (reg_L+0x30):(reg_L+0x37); //map reg_L to asicc 'a' to a (0x41), a = 0x37 + 0
-x0a = 0x41
75 1 reg_H = (reg_H<0x0a) ? (reg_H+0x30):(reg_H+0x37);
76 1 Send_Data_To_UART0(reg_H);
77 1 Send_Data_To_UART0(reg_L);
78 1 Send_Data_To_UART0(0x20); //space
79 1 }
80
81 void printnewline(void)
82 {
83 1 Send_Data_To_UART0(0x0a); //huanhang
84 1 }
85
86
87 void Debug_printf(unsigned char *str)
88 {
89 1 #ifdef _uart_debug_
90 1 printf(str);
91 1 #endif
92 1 }
93
94 void printWord(u16 U16Data)
95 {
96 1 printByte((U16Data&0xFF00)>>8);
97 1 printByte((U16Data&0x00FF));
98 1 Send_Data_To_UART0(0x0a); //???
99 1 }
100
101
102 void printByteWithSpace(u8 U8Data)
103 {
104 1 Send_Data_To_UART0(U8Data);
105 1 Send_Data_To_UART0(0x20); //space
106 1 //0x3c |, 0x3e ~
107 1 }
108 /*
109 出厂前,每颗 N76E003都会预烧一个96位的序列号
110 ,用以确保该芯片的唯一性,这个唯一代码被称为
111 序列号UID (Unique Code)。用户获得序列号的唯
112 一方式是通过 IAP指令读取,
113 */
114 UINT8 UID_BYTE(UINT8 Addr)
115 {
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 3
116 1 UINT8 DATATEMP;
117 1 set_IAPEN;
118 1 IAPAL = Addr;
119 1 IAPAH = 0x00;
120 1 IAPCN = READ_UID;
121 1 set_IAPGO;
122 1 DATATEMP = IAPFD;
123 1 clr_IAPEN;
124 1 return DATATEMP;
125 1 }
126
127 void READ_MCU_UID(void)
128 {
129 1 UINT8 READ1,READ2;
130 1
131 1 READ1 = UID_BYTE(0x02);
132 1 READ2 = UID_BYTE(0x05);
133 1
134 1 printf ("\n UID1 = 0x%bx",READ1);
135 1 printf ("\n UID2 = 0x%bx",READ2);
136 1 }
137
138
139
140 void printch(char ch)
141 {
142 1 Send_Data_To_UART0(ch);
143 1 }
144
145 void printdec(int dec)
146 {
147 1 if((dec/10) < 10)
148 1 {
149 2 printch((char)((dec/10) + '0'));
150 2 }
151 1 else
152 1 {
153 2 printch((char)((dec/10) - 10 + 'a' ));
154 2 }
155 1
156 1 if((dec%10) < 10)
157 1 {
158 2 printch((char)(dec%10 + '0'));
159 2 }
160 1 else
161 1 {
162 2 printch((char)(dec%10 - 10 + 'a' ));
163 2 }
164 1 }
165
166 void printhex(int hex)
167 {
168 1 printf("0x");
169 1 Timer0_Delay1ms(2);
170 1
171 1 if((hex/16) < 10)
172 1 {
173 2 printch((char)((hex/16) + '0'));
174 2 }
175 1 else
176 1 {
177 2 printch((char)((hex/16) - 10 + 'a' ));
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 4
178 2 }
179 1
180 1 if((hex%16) < 10)
181 1 {
182 2 printch((char)(hex%16 + '0'));
183 2 }
184 1 else
185 1 {
186 2 printch((char)(hex%16 - 10 + 'a' ));
187 2 }
188 1 }
189
190
191 /* max input 99999999*/
192 void printdec_u32(u32 u32_dec)
193 {
194 1 #ifdef _uart_debug_
195 1 bool start_flag = 0;
196 1 u32 dec = 0;
197 1 dec = u32_dec;
198 1
199 1 printch((char)(' ')); //print blank;
200 1
201 1 if(dec > 9999999)
202 1 {
203 2 if((dec/10000000) < 10)
204 2 {
205 3 printch((char)((dec/10000000) + '0'));
206 3 }
207 2 else
208 2 {
209 3 printch((char)((dec/10000000) - 10 + 'a' ));
210 3 }
211 2 dec %= 10000000;
212 2 start_flag = 1;
213 2 }
214 1
215 1 if(dec > 999999)
216 1 {
217 2 if((dec/1000000) < 10)
218 2 {
219 3 printch((char)((dec/1000000) + '0'));
220 3 }
221 2 else
222 2 {
223 3 printch((char)((dec/1000000) - 10 + 'a' ));
224 3 }
225 2 dec %= 1000000;
226 2 start_flag = 1;
227 2 }else
228 1 {
229 2 if(start_flag)
230 2 printch((char)('0'));
231 2 }
232 1
233 1
234 1 if(dec > 99999)
235 1 {
236 2 if((dec/100000) < 10)
237 2 {
238 3 printch((char)((dec/100000) + '0'));
239 3 }
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 5
240 2 else
241 2 {
242 3 printch((char)((dec/100000) - 10 + 'a' ));
243 3 }
244 2 dec %= 100000;
245 2 start_flag = 1;
246 2 }else
247 1 {
248 2 if(start_flag)
249 2 printch((char)('0'));
250 2 }
251 1
252 1 if(dec > 9999)
253 1 {
254 2 if((dec/10000) < 10)
255 2 {
256 3 printch((char)((dec/10000) + '0'));
257 3 }
258 2 else
259 2 {
260 3 printch((char)((dec/10000) - 10 + 'a' ));
261 3 }
262 2 dec %= 10000;
263 2 start_flag = 1;
264 2 }else
265 1 {
266 2 if(start_flag)
267 2 printch((char)('0'));
268 2 }
269 1
270 1 if(dec > 999)
271 1 {
272 2 if((dec/1000) < 10)
273 2 {
274 3 printch((char)((dec/1000) + '0'));
275 3 }
276 2 else
277 2 {
278 3 printch((char)((dec/1000) - 10 + 'a' ));
279 3 }
280 2 dec %= 1000;
281 2 start_flag = 1;
282 2 }else
283 1 {
284 2 if(start_flag)
285 2 printch((char)('0'));
286 2 }
287 1
288 1 if(dec > 99)
289 1 {
290 2 if((dec/100) < 10)
291 2 {
292 3 printch((char)((dec/100) + '0'));
293 3 }
294 2 else
295 2 {
296 3 printch((char)((dec/100) - 10 + 'a' ));
297 3 }
298 2 dec %= 100;
299 2 start_flag = 1;
300 2 }
301 1 else
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 6
302 1 {
303 2 if(start_flag)
304 2 printch((char)('0'));
305 2 }
306 1
307 1 if((dec/10) < 10)
308 1 {
309 2 printch((char)((dec/10) + '0'));
310 2 }
311 1 else
312 1 {
313 2 printch((char)((dec/10) - 10 + 'a' ));
314 2 }
315 1
316 1 if((dec%10) < 10)
317 1 {
318 2 printch((char)(dec%10 + '0'));
319 2 }
320 1 else
321 1 {
322 2 printch((char)(dec%10 - 10 + 'a' ));
323 2 }
324 1 #endif
325 1 }
326
327
328 void print(char* fmt, ...)
329 {
330 1 #ifdef _uart_debug_
331 1 double vargflt = 0;
332 1 int vargint = 0;
333 1 char* vargpch = NULL;
334 1 char vargch = 0;
335 1 char* pfmt = NULL;
336 1 va_list vp;
337 1
338 1 va_start(vp, fmt);
339 1 pfmt = fmt;
340 1
341 1 while(*pfmt)
342 1 {
343 2 if(*pfmt == '%')
344 2 {
345 3 switch(*(++pfmt))
346 3 {
347 4
348 4 case 'c':
349 4 vargch = va_arg(vp, int);
350 4 /* va_arg(ap, type), if type is narrow type (char, short, float) an error is given in
- strict ANSI
351 4 mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any
-expression. */
352 4 printch(vargch);
353 4 break;
354 4 case 'd':
355 4 case 'D':
356 4 vargint = va_arg(vp, u8);
357 4 printdec((u8)vargint);
358 4
359 4 break;
360 4 //
361 4 // case 'f':
C51 COMPILER V9.54 UART0 06/12/2026 11:01:30 PAGE 7
362 4 // case 'F':
363 4 // vargflt = va_arg(vp, double);
364 4 // /* va_arg(ap, type), if type is narrow type (char, short, float) an error is give
-n in strict ANSI
365 4 // mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be an
-y expression. */
366 4 // printflt(vargflt);
367 4 // break;
368 4 // case 's':
369 4 // case 'S':
370 4 // vargpch = va_arg(vp, char*);
371 4 // printstr(vargpch);
372 4 // break;
373 4 // case 'b':
374 4 // case 'B':
375 4 // vargint = va_arg(vp, int);
376 4 // printbin(vargint);
377 4 // break;
378 4 case 'x':;
379 4 case 'X':
380 4 vargint = va_arg(vp,u8);
381 4 printhex(vargint);
382 4 break;
383 4
384 4 case '%':
385 4 printch('%');
386 4 break;
387 4 default:
388 4 break;
389 4 }
390 3 pfmt++;
391 3 }
392 2 else
393 2 {
394 3 printch(*pfmt++);
395 3 //*pfmt++;
396 3 }
397 2 }
398 1 va_end(vp);
399 1 #endif
400 1 }
401
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2158 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- 75
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
@@ -1,22 +0,0 @@
[Version]
Nu_LinkVersion=V1.2
[Process]
ProcessID=0x00007710
ProcessCreationTime_L=0x55c986ac
ProcessCreationTime_H=0x01dcfa08
NuLinkID=0x77886a52
NuLinkIDs_Count=0x00000001
NuLinkID0=0x77886a52
[Option]
MaxClock=1
EnablePCLK=1
Erase=0
Program=1
Verify=1
ResetAndRun=1
UpdateSprom=0
IOVoltage=3300
EnableMemAcc=0
MemAccPeriod=1000
MemAccShowDelay=0
EnableLog=0
@@ -1,68 +0,0 @@
<html>
<body>
<pre>
<h1>礦ision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: μVision V5.24.2.0
Copyright (C) 2017 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: 1 admin, 1, LIC=UJ5FJ-UG2KK-D8YFM-XTN5V-H7EGL-DYRC5
Tool Versions:
Toolchain: PK51 Prof. Developers Kit Version: 9.54
Toolchain Path: D:\Keil\MDK\download\C51\BIN
C Compiler: C51.exe V9.54
Assembler: A51.exe V8.02c
Linker/Locator: BL51.exe V6.22
Library Manager: LIB51.exe V4.30.1.0
Hex Converter: OH51.exe V2.7.0.0
CPU DLL: S8051.DLL V3.100.0.0
Dialog DLL: DP51.DLL V2.62.0.1
Target DLL: Nuvoton_8051_Keil_uVision_Driver.dll V3.21
Dialog DLL: TP51.DLL V2.58
<h2>Project:</h2>
D:\昂宇电子\我的\龙讯\测试程序\6911C-9211C-9611\LT8912B_MIPI_to_HDMI_V1.00_20200815_Ok_N76E003\sourcecode\pro\LT8912B_EVB.uvproj
Project File Date: 06/11/2026
<h2>Output:</h2>
Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling Delay.c...
compiling I2C_MASTER.C...
compiling LT8912B.c...
compiling main.c...
compiling uart0.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_TIMER0_DELAY100US?DELAY
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_HDMI_READI2C_BYTEN?I2C_MASTER
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_HDMI_WRITEI2C_BYTEN?I2C_MASTER
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?GCMWINDOW1080P?LT8912B
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?GCMWINDOW1024X600P?LT8912B
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?LT8912B_STANDBY?LT8912B
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_INITIALUART0_TIMER3?UART0
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?RECEIVE_DATA_FROM_UART0?UART0
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?PRINTNEWLINE?UART0
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_DEBUG_PRINTF?UART0
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_PRINTWORD?UART0
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_PRINTBYTEWITHSPACE?UART0
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?READ_MCU_UID?UART0
Program Size: data=15.6 xdata=265 code=9843
creating hex file from ".\Objects\LT8912B_EVB"...
".\Objects\LT8912B_EVB" - 0 Error(s), 13 Warning(s).
Build Time Elapsed: 00:00:01
</pre>
</body>
</html>
@@ -1,685 +0,0 @@
:03000000021CB32C
:0C1CB300787FE4F6D8FD758121021CFA50
:102034009000FF120674538EF7438901D28CE4FF9B
:10204400FEFDFC9000FFE0F8A3E0F9A3E0FAA3E0B2
:10205400FBC3120650602F758A7E758CFF308DFD90
:10206400C28D9000FFE0FCA3E0FDA3E0FEA3E0240A
:10207400FFFFEE34FFFEED34FFFDEC34FFFC900077
:09208400FF12067480B8C28C2220
:10208D00900042120674538EF7438901D28CE4FFFF
:10209D00FEFDFC900042E0F8A3E0F9A3E0FAA3E016
:1020AD00FBC3120650602F758ACA758CFA308DFDF0
:1020BD00C28D900042E0FCA3E0FDA3E0FEA3E0246E
:1020CD00FFFFEE34FFFEED34FFFDEC34FFFC90001E
:0920DD004212067480B8C28C2284
:041C1C0041010790EB
:10255300E4FDFCC3ED9FEC9E5015E4FBFA0BBB00BE
:0F256300010ABA07F8BBD0F50DBD00010C80E4EA
:012572002246
:07261900122620D2847F0A83
:0A262000E4FEEEC39F50030E80F8A5
:01262A00228D
:1025C700D2837F01122619C2837F07122620C28475
:0525D7007F0102262037
:0C263D00C2837F02122619D283022620DD
:02218B00AD079E
:10218D00E4FCEDA804088002C333D8FC30E704D288
:10219D00838002C2837F03122620D2840F12262051
:1021AD00C2840CECB408DB7F01122620D2837F039E
:1021BD00122620D284122620308304C20D8002D232
:0821CD000DC2847F03022620ED
:10238200E4FDD283FC7F01122620C2847F04122640
:1023920020D2847F02122620ED25E0FD3083010D3C
:1023A2007F021226200CECB408DBC2847F051226C1
:0323B20020AF0554
:0123B5002205
:10259100EF7004C2838002D2837F08122620D28486
:0C25A1007F0F122620C2847F0802262033
:0720E600900006EDF0AC07CD
:1020ED001225C7AF0412218B200D02802790000608
:1020FD00E0FF12218B200D02801AE490000BF0906E
:10210D00000AE0FFA3E0C39F501F12049DFF1221A0
:10211D008B200D0612263D7F0022740129F9E43A29
:0E212D00FA90000BE004F080D612263D7F01F0
:01213B002281
:081ECF00900006EFF0A3EDF016
:101ED7001225C7900006E0FF12218B200D02801CFF
:101EE700900007E0FF12218B200D02800F1225C7FB
:101EF700900006E004FF12218B200D0912263DE415
:101F07001204E3FF22E490000CF090000BE014FFB2
:101F1700A3E0C39F501B122382EF1204E3E4FF12D6
:101F27002591740129F9E43AFA90000CE004F08055
:101F3700D9122382EF1204E37F0112259112263D65
:021F47007F0118
:011F49002275
:02247600AE07AF
:10247800E4900005F0900107E0FFAD067B017A00CB
:10248800790590000B7401F0121ECFEF60069000E2
:0624980005E0FF227F00B9
:01249E00221B
:0225DC00AE0748
:1025DE00900107E0FFAD069000F9E090000BF012BD
:0225EE001ECFFE
:0125F00022C8
:07257300900004EDF0AE073B
:10257A00900107E0FFAD067B017A00790490000A1A
:06258A007401F01220E6CE
:012590002228
:0225F100AE0733
:1025F300900107E0FFAD069000FEE090000AF012A4
:0226030020E6CF
:0126050022B2
:10179C000D0A4C5438393132422049443A20000D5C
:1017AC002C20000D0A20000D0A202A2A2A2A2A2A77
:1017BC002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A7D
:1017CC002A2A2A2A2A2A2A2A000D0A4820746F61FA
:1017DC00746C20636E74203A20000D0A5620746FCE
:1017EC0061746C203A20000D0A4E6F204D4950490F
:1017FC00207369676E616C20696E7075743A200095
:10180C000D0A3130323478363030204D4950492071
:10181C00696E70757420000D0A31303234783736A9
:10182C0038204D49504920696E70757420000D0A9E
:10183C003132383078373230204D49504920696E7A
:10184C0070757420000D0A31323830783830302001
:10185C004D49504920696E70757420000D0A31395C
:10186C0032307831303830204D49504920696E7013
:04187C00757420005F
:101C20004100E4FF4100E5804100F4004E00D61081
:101C3000001880180031003000620060004E00E69D
:0E1C4000003000000020008000A000C000E086
:10234D009001077490F07BFF7A17799C12166AE45E
:10235D00FF1224767E00121F4A7BFF7A1779AB128B
:10236D00166A7F011224767E00121F4A7BFF7A17B0
:05237D0079AF02166AB1
:102316009001077490F07DFF7F081225737D817F01
:10232600091225737DFF7F0A1225737D647F0B12C8
:1023360025737DFF7F0C1225737D317F4412257333
:072346007D1F7F510225738A
:1023E8009001077490F07DA17F311225737DBF7F26
:1023F800321225737D177F33122573E4FD7F371260
:1024080025737D227F381225737D827F60022573B4
:102448009001077490F07D457F39122573E4FD7F74
:102458003A122573E4FD7F3B122573900072E02445
:0E246800C6FD7F3E1225737D7C7F41022573E9
:1024EF009001077490F07D317F441225737D447FF6
:1024FF00551225737D017F571225737D027F5A0276
:02250F00257332
:1021D5009001077492F07D017F101225737D087FB1
:1021E500111225737D047F12122573900073E0543C
:1021F50003FD7F13122573E4FD7F141225739000F0
:10220500D5E0FD7F151225737D037F1A1225737D99
:06221500037F1B0225738C
:1010B3009001077492F09000E4E0C454F0247FF5AB
:1010C30082E43400F583A3E0FD7F181225739000BA
:1010D300E4E0C454F02481F582E43400F583A3E012
:1010E300FD7F191225739000E4E0C454F02475F5D4
:1010F30082E43400F583A3E0FD7F1C122573900086
:10110300E4E0C454F02475F582E43400F583E0FD93
:101113007F1D1225737D677F1E1225737D0C7F2F24
:101123001225739000E4E0C454F02479F582E4348A
:1011330000F583A3E0FD7F341225739000E4E0C43F
:1011430054F02479F582E43400F583E0FD7F351211
:1011530025739000E4E0C454F0247BF582E434006A
:10116300F583A3E0FD7F361225739000E4E0C454B9
:10117300F0247BF582E43400F583E0FD7F3712250C
:10118300739000E4E0C454F02483F582E43400F562
:1011930083A3E0FD7F381225739000E4E0C454F08C
:1011A3002483F582E43400F583E0FD7F391225734F
:1011B3009000E4E0FFC454F02477F582E43400F5B2
:1011C30083E0FCA3E0FDEFC454F0247BF582E43418
:1011D30000F583E0FEA3E0C39DFFEE9CFE9000E4D8
:1011E300E0FDC454F02483F582E43400F583E0FA8F
:1011F300A3E0FBC3EF9BFFEE9AFEEDC454F0248102
:10120300F582E43400F583E0FCA3E0FDC3EF9DFF2A
:10121300EE9CAD077F3A1225739000E4E0FFC454BF
:10122300F02477F582E43400F583E0FCA3E0FDEFDE
:10123300C454F0247BF582E43400F583E0FEA3E09C
:10124300C39DFFEE9CFE9000E4E0FDC454F02483B4
:10125300F582E43400F583E0FAA3E0FBC3EF9BFFE0
:10126300EE9AFEEDC454F02481F582E43400F58354
:10127300E0FCA3E0FDC3EF9DEE9CFD7F3B122573D5
:101283009000E4E0C454F0247DF582E43400F58357
:10129300A3E0FD7F3C1225739000E4E0C454F024E6
:1012A3007DF582E43400F583E0FD7F3D12257390E4
:1012B30000E4E0FFC454F02475F582E43400F583C0
:1012C300E0FCA3E0FDEFC454F02479F582E434009C
:1012D300F583E0FEA3E0C39DFFEE9CFE9000E4E0F7
:1012E300FDC454F0247DF582E43400F583E0FAA3D1
:1012F300E0FBC3EF9BFFEE9AFEEDC454F0247FF5B1
:1013030082E43400F583E0FCA3E0FDC3EF9DFFEE30
:101313009CAD077F3E1225739000E4E0FFC454F0B8
:101323002475F582E43400F583E0FCA3E0FDEFC40B
:1013330054F02479F582E43400F583E0FEA3E0C39E
:101343009DFFEE9CFE9000E4E0FDC454F0247DF587
:1013530082E43400F583E0FAA3E0FBC3EF9BFFEEE6
:101363009AFEEDC454F0247FF582E43400F583E063
:0F137300FCA3E0FDC3EF9DEE9CFD7F3F022573C1
:102418009001077490F07D7F7F031225737F0A7EF9
:10242800001225537DFF7F031225737DFB7F051264
:1024380025737F0A7E001225537DFF7F05022573D1
:101529009001077492F07D527F4E1225737DDE7F04
:101539004F1225737DC07F501225737D807F511214
:1015490025737D4F7F1E1225737D5E7F1F122573C4
:101559007D017F201225737D2C7F211225737D014A
:101569007F221225737DFA7F23122573E4FD7F24E0
:101579001225737DC87F25122573E4FD7F26122568
:10158900737D5E7F271225737D017F281225737D68
:101599002C7F291225737D017F2A1225737DFA7FFD
:1015A9002B122573E4FD7F2C1225737DC87F2D1224
:1015B9002573E4FD7F2E1225737D647F4212257306
:1015C900E4FD7F431225737D047F44122573E4FDF6
:1015D9007F451225737D597F46122573E4FD7F47A8
:1015E9001225737DF27F481225737D067F491225E6
:1015F90073E4FD7F4A1225737D727F4B1225737D3B
:10160900457F4C122573E4FD7F4D1225737D087FBC
:1016190052122573E4FD7F531225737DB27F541254
:101629002573E4FD7F551225737DE47F56122573DA
:101639007D0D7F57122573E4FD7F581225737DE4D4
:101649007F591225737D8A7F5A122573E4FD7F5BCA
:101659001225737D347F5C122573E4FD7F510225C9
:01166900730D
:101A2300E4900001F0A3F0A3F0900074E06401607F
:101A330003021ADD9001077494F07D0A7F3E12259C
:101A4300739000F47410F0900002F0A3742AF0E095
:101A5300FF900002E02FFFE433FE9000F4E0F9FD75
:101A63007C002FFFEC3EFED3EF946FEE64809480F6
:101A7300900002E0FF501BC3746F9FFFE49400FECD
:101A8300A3E0FBC3EF9BFFEE9400CFC39DCF9CFE6F
:101A9300801FC3746F9FFF74019400FEA3E0FDC316
:101AA300EF9DFFEE9400FEE9FDC3EF9DFFEE940072
:101AB300FE900001EFF0FD7F43122573900002E0DA
:101AC300FD7F44122573900003E0FD7F45122573CB
:0A1AD3009000F4E0FD7F4712257338
:011ADD0022E6
:101E4E009001077490F0900074E0FD7FB21225733C
:101E5E00900074E0640170689001077494F07D083E
:101E6E007F061225737DF07F07122573E4FD7F092F
:101E7E001225739000EAA3E0240BFD7F0F12257349
:101E8E009000DAE0FEA3E0FFE4FCFDFBFA7901F836
:101E9E0012225FAD077F371225739000DAE0FEA3A2
:101EAE00EEFD7F361225739000DAA3E0FD7F35122A
:101EBE0025737DD27F341225737D417F3C122573AD
:011ECE0022F1
:1025110012234D1223161223E81224481224EF121B
:1025210021D51210B3121529121E4E121A2302249C
:012531001891
:10138200E4900001F0A3F0A3F0A3F09001077490A1
:10139200F07F9D122476EF7F00FEC006C0077F9C7F
:1013A200122476EFFDD0E02DFED0E0340090000153
:1013B200F0A3CEF07F9F122476EF54077F00FEC089
:1013C20006C0077F9E122476EFFDD0E02DFFD0E00D
:1013D2003400FE900003F0A3EFF0C3EE9402401439
:1013E200D3E0941D900003E094025008E49000E4DE
:1013F200F0021485900003E0FEA3E0FFC39416EE12
:1014020094034011D3EF942EEE940350089000E41D
:101412007401F0806EC3EF94E0EE94024011D3EFBA
:1014220094FEEE940250089000E47402F08054D3CB
:10143200EF942FEE94034011D3EF9448EE940350AF
:10144200089000E47403F0803AC3EF9467EE9402CC
:101452004011D3EF948FEE940250089000E474048C
:10146200F08020C3EF9455EE94044011D3EF9475AD
:10147200EE940450089000E47405F080069000E4B5
:1014820074FFF07BFF7A1779B312166A7BFF7A1723
:1014920079D512166A900001E0FEA3E0FFE4FCFD9C
:1014A20012074C7BFF7A1779E612166A900003E066
:1014B200FEA3E0FFE4FCFD12074C7BFF7A1779AF35
:1014C20012166A9000E4E0B4FF087BFF7A1779F302
:1014D20080499000E4E0B404087BFF7A18790C801C
:1014E2003A9000E4E0B401087BFF7A187923802B5C
:1014F2009000E4E0B402087BFF7A18793A801C90ED
:1015020000E4E0B403087BFF7A187951800D900063
:10151200E4E0B405097BFF7A18796812166A7BFF4A
:071522007A1779AF02166A87
:101DCA009001077492F07D127F721225737DC07F95
:101DDA0073122573E4FD7F741225737D297F7512B2
:101DEA0025737D807F761225737D387F7712257360
:101DFA007D477F781225737D987F791225737D65DB
:101E0A007F7A1225737D487F7B1225737D2C7F7C18
:101E1A001225737D057F7D1225737D807F701225C3
:101E2A00737D767F711225737D337F4E1225737D04
:101E3A00337F4F1225737DD37F501225737D807FA8
:041E4A0051022573A9
:101ADE009001077492F07D127F721225737DA07FA4
:101AEE0073122573E4FD7F741225737D177F7512B3
:101AFE002573E4FD7F761225737D587F771225734B
:101B0E007D247F781225737D407F791225737D7B2E
:101B1E007F7A1225737D257F7B1225737D147F7C42
:101B2E001225737D037F7D1225737D807F701225B4
:101B3E00737D767F711225737D8D7F4E1225737D99
:101B4E00E37F4F1225737D487F501225737D807F72
:101B5E00511225739001077490F07D7F7F0312253B
:0F1B6E00737F0A7E001225537DFF7F03022573CC
:101B7D009001077492F07D127F721225737D707F34
:101B8D0073122573E4FD7F741225737D147F751216
:101B9D002573E4FD7F761225737D207F77122573E3
:101BAD007D357F781225737DA07F791225737D3762
:101BBD007F7A1225737D357F7B1225737D207F7C87
:101BCD001225737D067F7D1225737D807F70122512
:101BDD00737D767F711225737D4F7F4E1225737D38
:101BED00FA7F4F1225737D647F501225737D807FA0
:101BFD00511225739001077490F07D7F7F0312259C
:0F1C0D00737F0A7E001225537DFF7F030225732C
:101D3F009001077490F0E4FD7F081225737D817F79
:101D4F0009122573E4FD7F0A1225737D207F0B1284
:101D5F002573E4FD7F0C1225737D1D7F54122573AF
:101D6F007D157F511225737D317F441225737DBD03
:101D7F007F411225737D117F5C1225737D087F30A3
:101D8F00122573E4FD7F31122573E4FD7F32122596
:101D9F0073E4FD7F33122573E4FD7F34122573E462
:101DAF00FD7F35122573E4FD7F36122573E4FD7F29
:0B1DBF0037122573E4FD7F3802257306
:10195C000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2A18
:10196C002A2A2A2A2A2A2A2A73746172742A2A2A6F
:10197C002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2ABB
:10198C002A2A2A2A2A2A000D0A20000D0A2A2A2A83
:10199C002A2A2A2A2A2A2A2A2A2A2A2A2A2A4C544F
:1019AC00383931324220726573657420646F6E650C
:1019BC002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A7B
:1019CC002A000D0A2A2A2A2A2A2A2A2A2A2A2A2AD2
:1019DC002A2A2A2A4C54383931324220496E6974E9
:1019EC0069616C20646F6E652A2A2A2A2A2A2A2A9F
:1019FC002A2A2A2A2A2A2A2A000D0A4C5438393132
:101A0C0032422048444D4920636F6E6669672064FA
:071A1C006F6E652E2E2E00F7
:101C4E006060007502D001E0035A020D003C003EB8
:101C5E000006001E040003000540032600A00088B5
:101C6E000006001D050002D0067202EE00DC002800
:101C7E00000500140500032005A0033700500020C6
:101C8E000006000E040002580540027B008C001472
:101C9E000003001407800438089804650094002C93
:041CAE000005002409
:10249F0043B10843B20843B11043B21043B10143F3
:1024AF00B20143B30853B4F743B31053B4EF7F00F3
:0924BF007EC27D017C000222DDD9
:072661009001077492F022C2
:10262B00C2807F647E00122553D2807F647E0002BD
:02263B00255325
:1025AD009000747401F0D2099000737404F0E490FB
:0A25BD0000D5F0900072F0D20B225E
:10188000E4900000F012249F7FC87E001225537F51
:10189000C87E001225537FC87E001225537FC87E64
:1018A000001225537FC87E001225537BFF7A1979D9
:1018B0005C12166A12266112262B7BFF7A19799325
:1018C00012166A7BFF7A19799712166A1225AD9063
:1018D00000E47403F01225117BFF7A197993121634
:1018E0006A7BFF7A1979CE12166A7BFF7A1979938F
:1018F00012166A7FC87E00122553900000E0C39440
:101900000A50F71213829000E4E0FF9000E5E06FC8
:101910006041EFF0F460361210B3121529121E4E1A
:101920001224189001077492F0E4FD7F7012257361
:101930007BFF7A19799312166A7BFF7A1A7905125E
:10194000166A7BFF7A19799312166A8006300B03A8
:0C195000121B7D7FE87E03122553809E51
:102532000A2055494431203D203078256278000A2E
:102542002055494432203D20307825627800307889
:012552000088
:1022DD0053B1BF53B2BF53B17F53B27F75985043C3
:1022ED008920438780438E1053C4DFAB07AA06A90C
:1022FD0005A8047F407E427D0F7C001205BEEF04D1
:09230D00F404F58DD28ED2992260
:101FC10090010312067453B1BF53B2BF53B17F5393
:101FD100B27F75985043878053C4F843C420900161
:101FE10003E0F8A3E0F9A3E0FAA3E0FB7F407E421F
:101FF1007D0F7C001205BEC374FF9FFF74FF9EFE20
:10200100E49DFDE49CFC78081206618FC6900103F3
:10201100E0F8A3E0F9A3E0FAA3E0FB7F407E427D74
:102021000F7C001205BEC374FF9FFF8FC543C40818
:03203100D299221F
:072649003098FDAF99C29823
:012650002267
:08265100C2998F993099FD2216
:1022A300EF540FFEEF54F0C4540FFFEEC3940AEE45
:1022B30050052430FD80032437FDAE05EFC3940A97
:1022C300EF50052430FD80032437FDAF051226515E
:0A22D300AF061226517F20022651AB
:052668007F0A0226516B
:03266D00020C9BC1
:10260600AB07AA06EEFF1222A3AF031222A37F0A8C
:0326160002265148
:082659001226517F20022651D8
:10221B00A2AF920CC2AF75C7AA75C755439F01A257
:10222B000C92AF8FA6E4F5A775AF04A2AF920CC2C8
:10223B00AF75C7AA75C75543A401A20C92AFAFAE39
:10224B00A2AF920CC2AF75C7AA75C755539FFEA21A
:03225B000C92AF33
:01225E00225D
:1023B6007F0212221BAE077F0512221B900108EF37
:1023C600F07BFF7A257932AF06900045EFF0120CCC
:1023D6009B7BFF7A257941900108E0900045F00249
:0223E6000C9B4E
:03267000022651EE
:10213C00AB07AA067C007D0A1204F5C3EF940AEEE5
:10214C00648094805005EF2430800E7C007D0AAFB3
:10215C0003AE021204F5EF2457FF1226707C007DAB
:10216C000AAF03AE021204F5C3ED940AEC6480943A
:0F217C0080ED5004243080022457FF1226702279
:101F4A00900040EEF0A3EFF07BFF7A257950120C57
:101F5A009B7F027E007D007C0012208D900040E075
:101F6A00FEA3E0FF7C007D101204F5C3EF940AEE95
:101F7A00648094805005EF24308012900040E0FE87
:101F8A00A3E0FF7C007D101204F5EF2457FF122610
:101F9A0070900040E0FEA3E0FF7C007D101204F583
:101FAA00C3ED940AEC64809480ED500424308002DE
:071FBA002457FF12267022DC
:06074C0090000512067486
:10075200E4900009F0A3120680000000009000055A
:10076200E0FCA3E0FDA3E0FEA3E0FF90000A120676
:10077200747F201226707F7F7E967D987C00900089
:100782000AE0F8A3E0F9A3E0FAA3E0FBD3120650D3
:10079200407A7B807A967998780090000AE0FCA3F0
:1007A200E0FDA3E0FEA3E0FF1205BEE47B0AFAF936
:1007B200F8D31206507B807A967998780090000AD6
:1007C200E0FCA3E0FDA3E0FEA3E0FF40081205BEAB
:1007D200EF243080061205BEEF2457FF12267090D8
:1007E200000AE0FCA3E0FDA3E0FEA3E0FF7B807A29
:1007F20096799878001205BEAC00AD01AE02AF0347
:1008020090000A1206749000097401F07F3F7E4244
:100812007D0F7C0090000AE0F8A3E0F9A3E0FAA3C0
:10082200E0FBD3120650407C7B407A42790F78007D
:1008320090000AE0FCA3E0FDA3E0FEA3E0FF1205A6
:10084200BEE47B0AFAF9F8D31206507B407A427969
:100852000F780090000AE0FCA3E0FDA3E0FEA3E015
:10086200FF40081205BEEF243080061205BEEF24B9
:1008720057FF12267090000AE0FCA3E0FDA3E0FE01
:10088200A3E0FF7B407A42790F78001205BEAC00EC
:10089200AD01AE02AF0390000A1206749000097413
:1008A20001F0800B900009E060057F301226707F16
:1008B2009F7E867D017C0090000AE0F8A3E0F9A308
:1008C200E0FAA3E0FBD3120650500302095D7BA0BD
:1008D2007A867901780090000AE0FCA3E0FDA3E0AB
:1008E200FEA3E0FF1205BEE47B0AFAF9F8D3120672
:1008F200507BA07A86401909780090000AE0FCA398
:10090200E0FDA3E0FEA3E0FF1205BEEF2430801855
:100912007901780090000AE0FCA3E0FDA3E0FEA3C9
:10092200E0FF1205BEEF2457FF12267090000AE086
:10093200FCA3E0FDA3E0FEA3E0FF7BA07A867901A1
:1009420078001205BEAC00AD01AE02AF0390000A02
:100952001206749000097401F0800B900009E060A7
:10096200057F30122670E47F0F7E27FDFC90000A7F
:10097200E0F8A3E0F9A3E0FAA3E0FBD3120650509B
:1009820003020A0EE47B107A27F9F890000AE0FCD1
:10099200A3E0FDA3E0FEA3E0FF1205BEE47B0AFA9A
:1009A200F9F8D3120650E47B107A274017F890002A
:1009B2000AE0FCA3E0FDA3E0FEA3E0FF1205BEEF08
:1009C20024308016F9F890000AE0FCA3E0FDA3E0D1
:1009D200FEA3E0FF1205BEEF2457FF12267090001F
:1009E2000AE0FCA3E0FDA3E0FEA3E0FFE47B107AB3
:1009F20027F9F81205BEAC00AD01AE02AF039000BC
:100A02000A1206749000097401F0800B900009E04C
:100A120060057F30122670E47FE77E03FDFC9000C4
:100A22000AE0F8A3E0F9A3E0FAA3E0FBD312065030
:100A32005003020ABFE47BE87A03F9F890000AE067
:100A4200FCA3E0FDA3E0FEA3E0FF1205BEE47B0AE7
:100A5200FAF9F8D3120650E47BE87A034017F890CB
:100A6200000AE0FCA3E0FDA3E0FEA3E0FF1205BE46
:100A7200EF24308016F9F890000AE0FCA3E0FDA311
:100A8200E0FEA3E0FF1205BEEF2457FF122670908E
:100A9200000AE0FCA3E0FDA3E0FEA3E0FFE47BE8A4
:100AA2007A03F9F81205BEAC00AD01AE02AF0390B5
:100AB200000A1206749000097401F0800B9000097C
:100AC200E060057F30122670E47F63FEFDFC90003B
:100AD2000AE0F8A3E0F9A3E0FAA3E0FBD312065080
:100AE2005003020B6CE47B64FAF9F890000AE0FC14
:100AF200A3E0FDA3E0FEA3E0FF1205BEE47B0AFA39
:100B0200F9F8D3120650E47B644017F890000AE02B
:100B1200FCA3E0FDA3E0FEA3E0FF1205BEEF24303C
:100B22008017FAF9F890000AE0FCA3E0FDA3E0FECA
:100B3200A3E0FF1205BEEF2457FF12267090000AB1
:100B4200E0FCA3E0FDA3E0FEA3E0FFE47B64FAF98E
:100B5200F81205BEAC00AD01AE02AF0390000A125E
:100B620006749000097401F0800B900009E06005A2
:100B72007F30122670E47B0AFAF9F890000AE0FC52
:100B8200A3E0FDA3E0FEA3E0FF1205BEE47B0AFAA8
:100B9200F9F8D3120650E44017F890000AE0FCA3DB
:100BA200E0FDA3E0FEA3E0FF1205BEEF24308019B2
:100BB2007B0AFAF9F890000AE0FCA3E0FDA3E0FE4C
:100BC200A3E0FF1205BEEF2457FF122670E47B0A52
:100BD200FAF9F890000AE0FCA3E0FDA3E0FEA3E02E
:100BE200FF1205BEAC00AD01AE02AF03E47B0AFA10
:100BF200F9F8D3120650E44017F890000AE0FCA37B
:100C0200E0FDA3E0FEA3E0FF1205BEEB2430801955
:100C12007B0AFAF9F890000AE0FCA3E0FDA3E0FEEB
:0D0C2200A3E0FF1205BEEB2457FF12267061
:010C2F0022A2
:0B166A00900005EBF0A3EAF0A3E9F00C
:1016750090003012068000000000E4900034F0A3D2
:10168500F0F9A3C9F0A3F0A3E9F0E4A3F0F9A3C925
:10169500F0A3F0A3E9F0A37401F0A37400F0A37420
:1016A50008F0900005E0F9A3E0FAA3E090003AC93C
:1016B500F0A3EAF0A3E9F090003AE0FBA3E0FAA377
:1016C500E0F912049D700302179B6425600302175D
:1016D5008190003AA3E475F00112052BA9F0FA12E6
:1016E500049D24DB700302176F24E1602B24EC605A
:1016F5005024F4602324EC60482415707290003D5A
:10170500E0FBA3E475F002120541A9F0FA120557B2
:10171500900039F0E0FF805490003DE0FBA3E475B4
:10172500F001120541A9F0FA12049DFF900034E47E
:10173500F0A3EFF0900034A3E0FF7E0012213C807F
:101745002E90003DE0FBA3E475F001120541A9F0E0
:10175500FA12049DFF900034E4F0A3EFF0900034FA
:10176500E0FEA3E0FF121F4A80057F251226709038
:10177500003BE475F00112052B0216BC90003AE01F
:10178500FBA3E475F001120541A9F0FA12049DFFCF
:061795001226700216BCD2
:01179B00222B
:100C3000E5082445F582E43400F583E005082290B8
:100C40000042300703900045E475F0011206B1023E
:100C5000049D2000E97F2ED2008018EF540F2490CD
:100C6000D43440D4FF30040BEF24BFB41A00500337
:100C70002461FFE50960021509050CE50C70020509
:100C80000B30070E900042E475F0011206B1EF023E
:100C900004E30224C87403D2078003E4C207F50802
:100CA0009000421206C8E4F509F50BF50CE5096061
:100CB000077F20120C7380F5750AFFC201C200C2C3
:100CC00002C203C205C206C208120C3FFF700D30FB
:100CD00007057F00120C84AF0CAE0B22B4255FC257
:100CE000D5C204120C3FFF24D0B40A00501A75F08C
:100CF0000A780930D50508B6FF0106C6A426F620F5
:100D0000D5047002D20380D924CFB41A00EF500466
:100D1000C2E5D204020F76D20180C6D20080C0D2D2
:100D20000280BCD2D580BAD20580B47F20120C7369
:100D30002002077401B5090040F1120C30FF120CBB
:100D400073020CADD208D2068095120C30FB120C47
:100D500030FA120C30F94A4B700679747A107BFF26
:100D600020022EE509602A7E008E8275830012041F
:100D7000B660060EEE650A70F0C2D5EBC0E0EAC0C0
:100D8000E0E9C0E0EE120FD7D0E0F9D0E0FAD0E011
:100D9000FB12049DFF60AAEBC0E0EAC0E0E9C0E0FE
:100DA000120C73D0E02401F9D0E03400FAD0E0FB5B
:100DB000E50A0460DCD50AD98087D20280A2120F2E
:100DC000B960F7E50A700104120003A90A600DE595
:100DD0000A600914F50A121061EF60F3EA30E702C5
:100DE000F404C3995079EAF4250A0430E701E404D5
:100DF000F50A800D120FB960C1EA050A250A120032
:100E000003EA900071F030E701E4250A04D50A04F2
:100E100020050114120FD7E4C0E012106190007198
:100E2000E0601320E70714F0120C5B802204F0D07E
:100E3000E014C0E07F00120C5BE50A6007120C5260
:100E4000150A800B300503120C52D0E0020CADD015
:100E5000E00480C4120FB9609EE50A0412000390FA
:100E60000071EAF0E50A2005026001042404120F73
:010E7000D7AA
:100E710074FF04C0E0121061120C5BE50A20050248
:100E81006003120C52D0E0B50AE87F45120C659060
:100E91000071E07F2B30E7047F2DF404C0E0120CD9
:100EA10073D0E075F00A84C0F0120C5CD0E0120C33
:100EB1005C020CAD791080027908C206C208800874
:100EC100D2D5790A8004790AC2D5E50A047002F5FF
:100ED1000AE4FAFDFEFF120C30FC7B08200113121C
:100EE1000C30FD7B1030000A120C30FE120C30FF6A
:100EF1007B20EC3382D592D55013C3E43000069F9A
:100F0100FFE49EFEE42001039DFDE49CFCE4CBF89C
:100F1100C201EC700CCFCECDCCE824F8F870F38090
:100F210017C3EF33FFEE33FEED33FDEC33FCEB3350
:100F3100FB994002FB0FD8E9EB300105F8D0E0C482
:100F410048B201C0E00AEC4D4E4F78207B0070C2E0
:100F5100EAB50A0040BCC0E0120FD9D0F0D0E020C1
:100F61000104C4C0E0C4B201C0F0120C5CD0F0D5E1
:100F7100F0EB020CAD1206D10D4A530EB5580D1B04
:100F81004C0D17420EB94F0EC1440EC1490D3043ED
:100F91000EC7550DF4460E54450DBE471094500D25
:100FA1001F2D0D232E0D462B0D27230D4420107DC3
:100FB1002A0CDF4800000D3EE50AB4FF03750A065E
:100FC100120C30FC120C30FD120C30FE120C30FFF2
:100FD10090006A020040790AA2D520031430050965
:100FE100B910020404B9080104A2D5200602500177
:100FF100042002689202B509005034C0E07F20301D
:1010010003197F30A20272067205500F121030C20E
:1010110002C206C205C2087F30800F300503E9C055
:10102100E0120C73300503D0E0F9D0E0B509CC3003
:1010310005177F30B9100C120C737F583004077FED
:10104100788003B90803120C733002057F2D020C5E
:10105100737F202008F87F2B2006F322920280CF95
:101061007F00B40700500B246AF582E43400F58355
:10107100E0FF22286E756C6C2900D201120C303011
:1010810001F8C201780930D50108F6020CDF2D50B4
:10109100434958120C302403B405004001E4901078
:1010A1008F93120C64743A120C64D2037509040212
:0210B1000EB57A
:10000300F920E73624F950037907E4F42402FBE5E9
:1000130082158270021583DBF6E024FB501BE96036
:1000230014E4F0E582158270021583E004F0B40A4B
:0D00330008E4F0D9EE7401F00A22C2D522D3
:10004000ED33EC3392D5FA602AB4FF33EDC2E77B8F
:10005000FF60067A007965E4227A00796E20D50483
:100060007A007969224E614E002B494E46002D4997
:100070004E4600E47A08F0A3DAFC7B00740722C045
:1000800083C082ECC0E0EDC0E0EEC0E0EFC0E0EA8B
:1000900075F010A4CAABF075F04DA42BFBE435F05D
:1000A000FCEA2410FAEB34C5FBEC34D9FCEDC2E7D2
:1000B000FF75F056A4F42411C5F0F434C58FF0A4F4
:1000C0002AE5F03BE43CF020E714120413D0E0FFF3
:1000D000D0E0FED0E0FDD0E0FC1203468014F40432
:1000E000120413D0E0FFD0E0FED0E0FDD0E0FC121F
:1000F000023DD082D083E0FAEDD2E7CD33EC332459
:1001000082FBE4C3CF33CFCE33CECD33CD33DBF35D
:100110007B0775F00A846004F0A31B0AE5F0F0A3E6
:100120008FF0740AA4FFACF08EF0740AA42CFEAC1D
:10013000F050010C8DF0740AA42CFDE435F0F0A30E
:05014000DBDE74072264
:10014500020488E86480F8E933E83360110460F05C
:10015500ED33EC337009E8FCE9FDEAFEEBFF220420
:1001650060DED3EB9FEA9EE99DE8C2E78CF0C2F71B
:1001750095F0400CE8CCF8E9CDF9EACEFAEBCFFBE7
:1001850012045385D0F05804700320D5B3E80470E9
:10019500075002B2D502049292D5EC0460F7E4CC84
:1001A500C0E0C398F8603B94186008400DD0E0FBB0
:1001B50002046AE4FBFAC9FC8028E830E406E4C9D5
:1001C500FBE4CAFCE830E305E4C9CACBFCE8540704
:1001D5006010F8C3E913F9EA13FAEB13FBEC13FC0F
:1001E500D8F130F52FC3E49CFCEF9BFFEE9AFEEDB2
:1001F50099FDD0E0FBEF4E4D4C701222DB0302045B
:100205008FEC2CFCEF33FFEE33FEED33FDED30E7E5
:10021500EB02046AEF2BFFEE3AFEED39FDD0E0FB71
:1002250050130BBB0003020492ED13FDEE13FEEF1A
:0802350013FFEC13FC02046A44
:10023D00EC4D6011E8497017ED33EC3304600DE4BB
:10024D00FCFFFEFD22E933E8330470F80204881246
:10025D00045358046009E4CC248150062850090247
:10026D00049228400302048FC0E0EB4A7044B98029
:10027D0006D0E0FB02047EEF4E701CBD8008EBFF44
:10028D00EAFEE9FD80EBE98DF0A4FEE5F002032620
:10029D00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE899C
:1002AD00F0A42EFFE435F0CD89F0A42DFEE435F059
:1002BD008067EF4E7005BD80D780C3EF8BF0A4AC87
:1002CD00F0EE8BF0A42CFCE435F0F8EF8AF0A42CC2
:1002DD00E5F038FCE433CB8DF0A42CFCE5F03BF8D5
:1002ED00EE8AF0A42CFCE5F038F8E433CF89F0A4C5
:1002FD002CFCE5F038CF3400CE89F0A42FFFE5F0CB
:10030D003EFEE433C98DF0A42EFEE5F039CD8AF022
:10031D00A42FFFE5F03EFEE43DFD33D0E0FB50079A
:10032D000BBB000F020492EC2CFCEF33FFEE33FEFF
:06033D00ED33FD02046A2D
:10034300020492EC5D046005E8590470030204881A
:10035300120453580460F6EC4860F2EC7004FDFE9E
:10036300FF22C860DB2481C85009C398600250068D
:1003730002048F9850CAF582E9294B4A7005AB8273
:1003830002047E75F0007C1A7880C3EF9BEE9AED31
:1003930099400DC3EF9BFFEE9AFEED99FDE842F005
:1003A300DC23ACF0D0E0FFD0E0FED0E0FDAB822058
:1003B300E7101BEB60BAEC2CFCEF33FFEE33FEEDE2
:1003C30033FD02046AE803F830E705C0F075F00076
:1003D300EF2FFFEE33FEED33FD40B830E7C280AAC6
:1003E3003F8000004120000042C80000447A000022
:1003F300461C400047C35000497424004B189680A4
:100403004CBEBC205A0E1BCA6753C21C749DC5AE9A
:10041300FB60065407601C2323120441EB5438602D
:100423000912042D12043C12023DECF8EDF9EEFA28
:10043300EFCB22EB12043C80F1543803241C9003CD
:10044300E3FE93FC0EEE93FD0EEE930ECE93FF228E
:10045300E9D2E7C933E833F892D5EDD2E7CD33ECEF
:0704630033FC5002B2D52268
:10046A00EC30E7100FBF000C0EBE00080DBD0004F3
:10047A000BEB6014A2D5EB13FCED92E7FD2274FF9F
:10048A00FCFDFEFF22E480F8A2D574FF13FC7D80F8
:03049A00E480EF0C
:101CBF00021880E493A3F8E493A34003F68001F2A3
:101CCF0008DFF48029E493A3F85407240CC8C33326
:101CDF00C4540F4420C8834004F456800146F6DFF5
:101CEF00E4800B0102040810204080901C1CE47E4D
:101CFF00019360BCA3FF543F30E509541FFEE493EA
:101D0F00A360010ECF54C025E060A840B8E493A3B0
:101D1F00FAE493A3F8E493A3C8C582C8CAC583CADB
:101D2F00F0A3C8C582C8CAC583CADFE9DEE780BE93
:011CB2000031
:10049D00BB010689828A83E0225002E722BBFE025D
:0904AD00E32289828A83E4932290
:1004B600BB010CE58229F582E5833AF583E02250FB
:1004C60006E92582F8E622BBFE06E92582F8E22245
:0D04D600E58229F582E5833AF583E493225F
:1004E300BB010689828A83F0225002F722BBFE01F8
:0204F300F322F2
:1004F500C2D5EC30E709B2D5E4C39DFDE49CFCEE22
:1005050030E715B2D5E4C39FFFE49EFE1206F7C39C
:10051500E49DFDE49CFC80031206F730D507C3E497
:060525009FFFE49EFE2290
:10052B00C5F0F8A3E028F0C5F0F8E582158270025B
:06053B001583E038F022F8
:10054100A3F8E0C5F025F0F0E5821582700215836D
:06055100E0C838F0E822CA
:10055700BB010A89828A83E0F5F0A3E0225006876F
:10056700F009E71922BBFE07E3F5F009E319228931
:0B057700828A83E493F5F07401932264
:1005820075F008758200EF2FFFEE33FECD33CDCC30
:1005920033CCC58233C5829BED9AEC99E5829840B3
:1005A2000CF582EE9BFEED9AFDEC99FC0FD5F0D690
:1005B200E4CEFBE4CDFAE4CCF9A88222B800C1B9BA
:1005C2000059BA002DEC8BF084CFCECDFCE5F0CBF8
:1005D200F97818EF2FFFEE33FEED33FDEC33FCEB31
:1005E20033FB10D703994004EB99FB0FD8E5E4F9EC
:1005F200FA227818EF2FFFEE33FEED33FDEC33FCD9
:10060200C933C910D7059BE99A4007EC9BFCE99ACC
:10061200F90FD8E0E4C9FAE4CCFB2275F010EF2F11
:10062200FFEE33FEED33FDCC33CCC833C810D70711
:100632009BEC9AE899400AED9BFDEC9AFCE899F84C
:0E0642000FD5F0DAE4CDFBE4CCFAE4C8F922DF
:10225F00C2D5E830E70FB2D5E4C39BFBE49AFAE4AA
:10226F0099F9E498F8EC30E717B2D51222951205D8
:10227F00BEE4C39BFBE49AFAE499F9E498F880036F
:10228F001205BE30D50DE4C39FFFE49EFEE49DFD15
:04229F00E49CFC229D
:10065000EB9FF5F0EA9E42F0E99D42F0E89C45F000
:010660002277
:10066100E8600FECC313FCED13FDEE13FEEF13FF77
:03067100D8F1229B
:0C067400ECF0A3EDF0A3EEF0A3EFF022F9
:10068000A8828583F0D083D0821206971206971233
:100690000697120697E473E493A3C583C5F0C58358
:1006A000C8C582C8F0A3C583C5F0C583C8C582C8C4
:0106B0002227
:1006B100F8E0FBA3A3E0F925F0F0E58215827002D2
:0706C1001583E0FA38F02276
:0906C800EBF0A3EAF0A3E9F02233
:1006D100D083D082F8E4937012740193700DA3A3B8
:1006E10093F8740193F5828883E4737402936860CC
:0606F100EFA3A3A380DFCC
:1024C800EFB40A07740D1224D3740A309811A8992E
:1024D800B8130CC2983098FDA899C298B811F63074
:0724E80099FDC299F599224C
:1006F700BC000BBE0029EF8DF084FFADF022E4CCE7
:10070700F875F008EF2FFFEE33FEEC33FCEE9DECAF
:10071700984005FCEE9DFE0FD5F0E9E4CEFD22EDF5
:10072700F8F5F0EE8420D21CFEADF075F008EF2F3F
:10073700FFED33FD4007985006D5F0F222C398FD30
:050747000FD5F0EA22CD
:00000001FF
@@ -1,8 +0,0 @@
".\Objects\STARTUP.obj",
".\Objects\Delay.obj",
".\Objects\I2C_MASTER.obj",
".\Objects\LT8912B.obj",
".\Objects\main.obj",
".\Objects\uart0.obj"
TO ".\Objects\LT8912B_EVB"
PRINT(".\Listings\LT8912B_EVB.m51") RAMSIZE(256)
@@ -1,713 +0,0 @@
:03000000021C14CB
:0C1C1400787FE4F6D8FD758122021C5B8D
:102180009001021207AD538EF7438901D28CE4FF10
:10219000FEFDFC900102E0F8A3E0F9A3E0FAA3E061
:1021A000FBC3120789602F758A7E758CFF308DFD09
:1021B000C28D900102E0FCA3E0FDA3E0FEA3E024B9
:1021C000FFFFEE34FFFEED34FFFDEC34FFFC900129
:0921D000021207AD80B8C28C2296
:1021D9009000B71207AD538EF7438901D28CE4FF03
:1021E900FEFDFC9000B7E0F8A3E0F9A3E0FAA3E054
:1021F900FBC3120789602F758ACA758CFA308DFD69
:10220900C28D9000B7E0FCA3E0FDA3E0FEA3E024AB
:10221900FFFFEE34FFFEED34FFFDEC34FFFC9000D0
:09222900B71207AD80B8C28C2287
:09281500300003D28322C28322A9
:0727E0007F0312280AD2005A
:0927E700300003D28422C28422D6
:07283600A283920BA20B220A
:10273000E4FDFCC3ED9FEC9E5015E4FBFA0BBB00DF
:0F274000010ABA01F8BBF4F50DBD00010C80E4ED
:01274F002267
:0A280A00E4FEEEC39F50030E80F8B9
:0128140022A1
:1026A800D2001228157F011227E27F0A12280AC2D7
:1026B800001228157F0712280AC2001227E77F0197
:0326C80002280ADB
:1027A400C2001228157F021227E27F0A12280AD2D9
:0727B4000012281502280A9B
:02228B00AD079D
:10228D00E4FCEDA804088002C333D8FC30E704D287
:10229D00008002C2001228151227E00F12280AC270
:1022AD00001227E70CECB408D97F0112280AD200DE
:1022BD001228151227E012280A1228365004C20ED1
:0E22CD008002D20EC2001227E77F0302280A09
:10243900E4FDD200122815FC7F0112280AC20012FD
:1024490027E77F041227E27F0212280AED25E0FD23
:1024590012283650010D7F0212280A0CECB408D854
:0C246900C2001227E77F0512280AAF0509
:012475002244
:10275000201004C2008002D2001228157F08122720
:10276000E27F0F12280AC2001227E77F0802280A18
:07211800900080EDF0AC0720
:10211F001226A8AF0412228B200E0280339000806B
:10212F00E0FF12228B200E028026E4900086F0A39F
:10213F00F0900084E0FEA3E0FFC3900087E09F9043
:10214F000086E09E5026120512FF12228B200E05EC
:10215F001227A4C322740129F9E43AFA900087E008
:10216F0004F070CD900086E004F080C51227A4D350
:01217F00223D
:081FB4009000F0EFF0A3EDF046
:101FBC001226A89000F0E0FF12228B200E02801C4B
:101FCC009000F1E0FF12228B200E02800F1226A847
:101FDC009000F0E004FF12228B200E091227A4E4DB
:101FEC00120558C322E49000F6F09000F5E014FFBF
:101FFC00A3E0C39F501B122439EF120558C21012D4
:10200C002750740129F9E43AFA9000F6E004F080C4
:10201C00D9122439EF120558D2101227501227A4C6
:01202C00D3E0
:01202D002290
:02263400AE07EF
:10263600E4900110F0900111E0FFAD067B017A01F4
:1026460079109000F57401F0121FB44002D20D907B
:042656000110E0FF90
:01265A00225D
:02278B00AE0797
:10278D00900111E0FFAD06900101E09000F5F0120F
:06279D001FB49211A2110D
:0127A3002213
:1026820090007EEDF0AE07900111E0FFAD067B01F8
:102692007A00797E900084E4F0A304F012211840BD
:0626A20002D20DA20D2280
:1026CB00AE07AD079000FBE0FFA3E0900084CFF0D6
:1026DB00A3EFF0900111E0FF1221184002D20DA2DE
:0226EB000D22BE
:102370000D0A202A2A2A2A2A2A2A2A2A2A2A2A2A04
:102380002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AAD
:102390002A000D0A4820746F61746C20636E7420EB
:1023A0003A20000D0A5620746F61746C203A2000A8
:0423B0000D0A2000F2
:081F340041010EFF41010FFF06
:102232009001117490F07DFF7F0830091E122682F2
:102242007DFF7F091226827DFF7F0A1226827D7C16
:102252007F0B1226827DFF7F0C802A1226827D81CF
:102262007F091226827DFF7F0A1226827D647F0B00
:102272001226827DFF7F0C1226827D317F44122638
:09228200827D1F7F511226822289
:102560009001117490F07DA17F311226827DBF7F92
:10257000321226827D177F33122682E4FD7F3712C6
:1025800026827D227F381226827D827F60122682FB
:07259000E4FD7F3A02268200
:1025CD009001117490F07D457F39122682E4FD7FD4
:1025DD003B122682900000E02496FD7F3E1226825B
:1025ED007D147F3F1226827D3C7F411226827D7CA9
:0525FD007F4002268270
:1026ED009001117490F07D317F441226827D447FDC
:1026FD00551226827D017F571226827D027F5A0256
:02270D00268222
:10232A009001117492F07D017F101226827D087F40
:10233A00111226827D047F12122682900002E05436
:10234A0003FD7F13122682E4FD7F14122682900079
:10235A0079E0FD7F151226827D037F1A1226827D7F
:06236A00037F1B02268226
:101197009001117492F090010EE0C454F02423F5ED
:1011A70082E43400F583A3E0FD7F181226829001C4
:1011B7000EE0C454F02425F582E43400F583A3E05F
:1011C700FD7F1912268290010EE0C454F02419F510
:1011D70082E43400F583A3E0FD7F1C122682900190
:1011E7000EE0C454F02419F582E43400F583E0FDE1
:1011F7007F1D1226827D677F1E1226827D0C7F2F20
:1012070012268290010EE0C454F0241DF582E434C6
:1012170000F583A3E0FD7F3412268290010EE0C41F
:1012270054F0241DF582E43400F583E0FD7F351288
:10123700268290010EE0C454F0241FF582E43400A6
:10124700F583A3E0FD7F3612268290010EE0C45499
:10125700F0241FF582E43400F583E0FD7F37122682
:101267008290010EE0C454F02427F582E43400F59F
:1012770083A3E0FD7F3812268290010EE0C454F06C
:101287002427F582E43400F583E0FD7F39122682B6
:1012970090010EE0FFC454F0241BF582E43400F5FE
:1012A70083E0FCA3E0FDEFC454F0241FF582E4348F
:1012B70000F583E0FEA3E0C39DFFEE9CFE90010EC8
:1012C700E0FDC454F02427F582E43400F583E0FA06
:1012D700A3E0FBC3EF9BFFEE9AFEEDC454F0242579
:1012E700F582E43400F583E0FCA3E0FDC3EF9DFF46
:1012F700EE9CAD077F3A12268290010EE0FFC454A0
:10130700F0241BF582E43400F583E0FCA3E0FDEF55
:10131700C454F0241FF582E43400F583E0FEA3E013
:10132700C39DFFEE9CFE90010EE0FDC454F0242700
:10133700F582E43400F583E0FAA3E0FBC3EF9BFFFB
:10134700EE9AFEEDC454F02425F582E43400F583CB
:10135700E0FCA3E0FDC3EF9DEE9CFD7F3B122682E0
:1013670090010EE0C454F02421F582E43400F583A3
:10137700A3E0FD7F3C12268290010EE0C454F024C6
:1013870021F582E43400F583E0FD7F3D122682904B
:10139700010EE0FFC454F02419F582E43400F5830C
:1013A700E0FCA3E0FDEFC454F0241DF582E4340013
:1013B700F583E0FEA3E0C39DFFEE9CFE90010EE0E7
:1013C700FDC454F02421F582E43400F583E0FAA348
:1013D700E0FBC3EF9BFFEE9AFEEDC454F02423F528
:1013E70082E43400F583E0FCA3E0FDC3EF9DFFEE4C
:1013F7009CAD077F3E12268290010EE0FFC454F099
:101407002419F582E43400F583E0FCA3E0FDEFC482
:1014170054F0241DF582E43400F583E0FEA3E0C315
:101427009DFFEE9CFE90010EE0FDC454F02421F5D3
:1014370082E43400F583E0FAA3E0FBC3EF9BFFEE01
:101447009AFEEDC454F02423F582E43400F583E0DA
:0F145700FCA3E0FDC3EF9DEE9CFD7F3F022682CC
:102597009001117490F07D7F7F031226827F0A7E5F
:1025A700001227307DFF7F0312268290011174925B
:1025B700F07D807F511226827F0A7E00122730E449
:0625C700FD7F5102268297
:101634009001117492F07D527F4E1226827DDE7FDE
:101644004F1226827DC07F501226827D807F5112E8
:101654002682E4FD7F511226827D5E7F1F12268240
:101664007D017F201226827D2C7F211226827D011E
:101674007F221226827DFA7F23122682E4FD7F24B4
:101684001226827DC87F25122682E4FD7F2612263B
:10169400827D5E7F271226827D017F281226827D2D
:1016A4002C7F291226827D017F2A1226827DFA7FD1
:1016B4002B122682E4FD7F2C1226827DC87F2D12F8
:1016C4002682E4FD7F2E1226829001117490F07D13
:1016D4007F7F031226827F0A7E001227307DFF7FE0
:1016E400031226829001117492F0E4FD7F511226B8
:1016F400827D647F42122682E4FD7F431226827D2E
:10170400047F44122682E4FD7F451226827D597FA0
:1017140046122682E4FD7F471226827DF27F48121C
:1017240026827D067F49122682E4FD7F4A122682A4
:101734007D727F4B1226827D457F4C122682E4FD0A
:101744007F4D1226827D087F52122682E4FD7F534C
:101754001226827DB27F54122682E4FD7F55122622
:10176400827DE47F561226827D0D7F57122682E405
:10177400FD7F581226827DE47F591226827D8A7F5E
:101784005A122682E4FD7F5B1226827D347F5C122E
:1017940026827D4F7F1E122682E4FD7F510226821F
:1024B3009001117490F0900018E0FD7FB212268213
:1024C3009001117494F0300A0B7D097F0612268265
:1024D3007DF080097D0E7F06122682E4FD7F0712C0
:0A24E30026827DD27F341226822269
:0D27F0009001117490F07D307F440226822C
:0D27FD009001117490F07D317F440226821E
:1018DF009001117490F07D247F501226827D057F38
:1018EF0051122682900001E02414FD7F52122682AD
:1018FF00900003E0FEA3E0FF7C007D1912057C7CC5
:10190F00007D0712056AE4FD90007A1207ADE47BB3
:10191F0064FAF9F890007AE0FCA3E0FDA3E0FEA3DF
:10192F00E0FF1206E9E4AD077F69122682E47B64CB
:10193F00FAF9F890007AE0FCA3E0FDA3E0FEA3E043
:10194F00FF1206E9EF2480FD7F69122682E47B6493
:10195F00FAF9F890007AE0FCA3E0FDA3E0FEA3E023
:10196F00FF1206E9AF03E4FEFDFC90007A1207AD0B
:10197F0090007AE0FCA3E0FDA3E0FEA3E0FFE4FB10
:10198F007A40F9F812065E90007A1207AD90007A4D
:10199F00E0FCA3E0FDA3E0FEA3E0FFE47B64FAF923
:1019AF00F81206E990007A1207AD90007CE02480CF
:1019BF00FD7F6C12268290007DE0FD7F6B122682E8
:0E19CF007DFB7F041226827DFF7F04022682AC
:101466009001117490F0E4FD7F801226827DFF7F4B
:10147600811226827D037F8212268290010EE0C4AD
:1014860054F02419F582E43400F583A3E0FD7F834C
:1014960012268290010EE0C454F02419F582E43439
:1014A60000F583E0FD7F841226827D807F851226EB
:1014B600827D107F8612268290000BE0FD7F8712C8
:1014C600268290000AE0FD7F88122682900011E0B5
:1014D600FD7F8912268290000FE0FD7F8A12268208
:1014E60090000EE0540175F080A4FF900013E02FE9
:1014F600540FFD7F8B122682900007E0FD7F8C1231
:101506002682900009E0FD7F8D122682900008E079
:10151600C454F0FD900006E02DFD7F8E12268290C9
:10152600010EE0C454F02419F582E43400F583E09A
:10153600FCA3E0FDE41202A6E4FBFA798078BF1270
:10154600000AC004C005C006C007900007E024FFDB
:10155600FD900006E034FFFCE41202A6A804A905EB
:10156600AA06AB07D007D006D005D004120204E4C1
:10157600FBFA798078451200FB1202DF90007AEEC2
:10158600F0A3EFF090007BE0FD7F8F1226829000A3
:101596007AE0FD7F9012268290010EE0C454F0247A
:1015A6001BF582E43400F583E0FCA3E0FDE41202BF
:1015B600A6E4FBFA798078BF12000AC004C005C011
:1015C60006C007900009E024FFFD900008E034FF04
:1015D600FCE41202A6A804A905AA06AB07D007D008
:1015E60006D005D004120204E4FBFA79807845128D
:1015F60000FB1202DF90007AEEF0A3EFF090007B82
:10160600E0FD7F9112268290007AE0FD7F921226FD
:10161600827D9C7F7F122682900016E0FF90000557
:0E162600E02FFF900017E02FFD7FA802268224
:102770001222321225601225CD1226ED12232A12C2
:0B27800011971216341224B3022597A3
:1019DD00E4900106F0A3F0A3F0A3F0900111749030
:1019ED00F07F9D122634EF7F00FEC006C0077F9C5E
:1019FD00122634EFFDD0E02DFED0E034009001062C
:101A0D00F0A3CEF07F9F122634EF54077F00FEC067
:101A1D0006C0077F9E122634EFFDD0E02DFFD0E0EB
:101A2D003400FE900108F0A3EFF0C39402EE94028F
:101A3D004014D3E09422900108E0940250089001E4
:101A4D000E7405F08041900108E0FEA3E0FFC39401
:101A5D00E0EE94024011D3EF94FEEE940250089004
:101A6D00010E7401F08020C3EF9455EE94044011E3
:101A7D00D3EF9475EE9404500890010E7404F08029
:101A8D000690010E74FFF07BFF7A2379701217A474
:101A9D007BFF7A2379921217A4900106E0FEA3E052
:101AAD00FFE4FCFD1208307BFF7A2379A31217A403
:101ABD00900108E0FEA3E0FFE4FCFD1208307BFF7F
:071ACD007A2379B00217A48F
:101CA0009001117492F07D127F721226827DC07FA6
:101CB00073122682E4FD7F741226827D297F7512BD
:101CC00026827D807F761226827D387F771226825B
:101CD0007D477F781226827D987F791226827D65E6
:101CE0007F7A1226827D487F7B1226827D2C7F7C24
:101CF0001226827D057F7D1226827D807F701226CE
:101D0000827D767F711226827D337F4E1226827D00
:101D1000337F4F1226827DD37F501226827D807FB3
:041D200051022682C4
:101D24009001117492F07D127F721226827D047FDD
:101D3400731226827D017F741226827D197F7512AB
:101D44002682E4FD7F761226827DD07F771226825A
:101D54007D257F781226827D727F791226827DEE20
:101D64007F7A1226827D267F7B1226827D287F7CC5
:101D74001226827D057F7D1226827D807F70122649
:101D8400827D767F711226827D997F4E1226827D16
:101D9400997F4F1226827D697F501226827D807F33
:041DA4005102268240
:101DA8009001117492F07D127F721226827D847FD9
:101DB80073122682E4FD7F741226827D2C7F7512B1
:101DC80026827DD07F761226827D407F77122682FA
:101DD8007D227F781226827D607F791226827D712E
:101DE8007F7A1226827D237F7B1226827D407F7C2C
:101DF8001226827D057F7D1226827D807F701226C5
:101E0800827D767F711226827D667F4E1226827DC4
:101E1800667F4F1226827D267F501226827D807F24
:041E280051022682BB
:101E2C009001117492F07D127F721226827D7A7F5E
:101E3C0073122682E4FD7F741226827D247F751234
:101E4C0026827DD07F761226827DE07F77122682D5
:101E5C007D127F781226827D5A7F791226827D0D23
:101E6C007F7A1226827D237F7B1226827D3E7F7CA9
:101E7C001226827D067F7D1226827D807F7012263F
:101E8C00827D767F711226827D667F4E1226827D40
:101E9C00667F4F1226827D267F501226827D807FA0
:041EAC005102268237
:101EB0009001117492F07D127F721226827D647FF0
:101EC00073122682E4FD7F741226827D1E7F7512B6
:101ED0002682E4FD7F761226827DE07F77122682BD
:101EE0007D157F781226827DB47F791226827D123D
:101EF0007F7A1226827D257F7B1226827D147F7C4D
:101F00001226827D0A7F7D1226827D807F701226B6
:101F1000827D767F711226827DA57F4E1226827D7C
:101F2000087F4F1226827D427F501226827D807F5D
:041F300051022682B2
:101AD4000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2A9F
:101AE4002A2A2A2A2A2A2A2A73746172742A2A2AF6
:101AF4002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A42
:101B04002A2A2A2A2A2A000D0A20000D0A2A2A2A09
:101B14002A2A2A2A2A2A2A2A2A2A2A2A2A2A4C54D5
:101B2400383931324220726573657420646F6E6592
:101B34002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A01
:101B44002A000D0A2A2A2A2A2A2A2A2A2A2A2A2A58
:101B54002A2A2A2A4C54383931324220496E69746F
:101B640069616C20646F6E652A2A2A2A2A2A2A2A25
:091B74002A2A2A2A2A2A2A2A0018
:101F3C006060001902D001E0035A020D003C003E23
:101F4C000006001E050002D0067202EE00DC00281E
:101F5C000005001405000320060A0358008C002419
:101F6C0000080018040002580540027B008C001485
:101F7C000003001407800438089804650094002CB2
:101F8C0000050024050001E005B402120050001405
:101F9C00000A0014500006050001E005B40212000E
:071FAC00500014000A0014AC
:1023F80043B10843B20843B11043B21043B101439B
:10240800B20143AC0153ADFE43B30853B4F743B331
:102418001053B4EF7F007EC27D017C001225275344
:10242800E9FB43E92043EA0853EBF7439B02D2AFA9
:012438002281
:07283D009001117490F022DC
:1027CE00C2807F647E00122730D2807F647E00023A
:0227DE002730A2
:102476009000187401F0D20AD2099000027404F098
:1024860090007974A8F09000007420F0D20C300906
:102496001B9000037414F0A37450F0E4900001F054
:0D24A600900005F0900016F0A37413F022D2
:101B7D001223F87FC87E001227307FC87E001227FF
:101B8D00307FC87E001227307FC87E001227307F3D
:101B9D00C87E001227307BFF7A1A79D41217A4124F
:101BAD00283D1227CE7BFF7A1B790B1217A47BFFE2
:101BBD007A1B790F1217A412247690010E7404F07B
:101BCD001227707BFF7A1B790B1217A47BFF7A1BF0
:101BDD0079461217A47BFF7A1B790B1217A4300CD0
:101BED0003121EB03009101218DF1214667F2C7EFE
:101BFD00011227301227F07FC87E001227307F2672
:071C0D007E0212273080F770
:10270F000A2055494431203D203078256278000A4F
:10271F002055494432203D203078256278003078AA
:01272F0000A9
:1025270053B1BF53B2BF53B17F53B27F7598504376
:102537008920438780438E1053C4DFAB07AA06A9BF
:1025470005A8047F407E427D0F7C001206E9EF0458
:09255700F404F58DD28ED2992214
:1020A50090010A1207AD53B1BF53B2BF53B17F536D
:1020B500B27F75985043878053C4F843C42090017C
:1020C5000AE0F8A3E0F9A3E0FAA3E0FB7F407E4233
:1020D5007D0F7C001206E9C374FF9FFF74FF9EFE0F
:1020E500E49DFDE49CFC780812079A8FC690010ACE
:1020F500E0F8A3E0F9A3E0FAA3E0FB7F407E427D90
:102105000F7C001206E9C374FF9FFF8FC543C40807
:03211500D299223A
:07281E003098FDAF99C2984C
:012825002290
:08282600C2998F993099FD223F
:1024ED00EF540FFEEF54F0C4540FFFEEC3940AEEF9
:1024FD0050052430FD80032437FDAE05EFC3940A4B
:10250D00EF50052430FD80032437FDAF051228263A
:0A251D00AF061228267F20022826B0
:052844007F0A022826B6
:03284900020D7FFE
:1027BB00AB07AA06EEFF1224EDAF031224ED7F0A3E
:0327CB00022826BB
:08282E001228267F2002282653
:1023B400A2AF920FC2AF75C7AA75C755439F01A2BA
:1023C4000F92AF8FA6E4F5A775AF04A2AF920FC228
:1023D400AF75C7AA75C75543A401A20F92AFAFAE9C
:1023E400A2AF920FC2AF75C7AA75C755539FFEA27D
:0323F4000F92AF96
:0123F70022C3
:102602007F021223B4AE077F051223B4900112EFAA
:10261200F07BFF7A27790FAF069000BAEFF0120D28
:102622007F7BFF7A27791E900112E09000BAF002B8
:022632000D7F1A
:03284C0002282639
:1022DB00AB07AA067C007D0A1205D1C3EF940AEE68
:1022EB00648094805005EF2430800E7C007D0AAF13
:1022FB0003AE021205D1EF2457FF12284C7C007D50
:10230B000AAF03AE021205D1C3ED940AEC648094BC
:0F231B0080ED5004243080022457FF12284C22FA
:10202E009000B5EEF0A3EFF07BFF7A27792D120D1D
:10203E007F7F027E007D007C001221D99000B5E0EA
:10204E00FEA3E0FF7C007D101205D1C3EF940AEED3
:10205E00648094805005EF243080129000B5E0FE2D
:10206E00A3E0FF7C007D101205D1EF2457FF12284C
:10207E004C9000B5E0FEA3E0FF7C007D101205D170
:10208E00C3ED940AEC64809480ED500424308002F9
:07209E002457FF12284C2219
:060830009000E71207AD85
:10083600E49000EBF0A31207B9000000009000E777
:10084600E0FCA3E0FDA3E0FEA3E0FF9000EC1207AE
:10085600AD7F2012284C7F7F7E967D987C0090008D
:10086600ECE0F8A3E0F9A3E0FAA3E0FBD3120789D2
:10087600407A7B807A96799878009000ECE0FCA329
:10088600E0FDA3E0FEA3E0FF1206E9E47B0AFAF925
:10089600F8D31207897B807A96799878009000ECD5
:1008A600E0FCA3E0FDA3E0FEA3E0FF40081206E99A
:1008B600EF243080061206E9EF2457FF12284C90E9
:1008C60000ECE0FCA3E0FDA3E0FEA3E0FF7B807A62
:1008D60096799878001206E9AC00AD01AE02AF0336
:1008E6009000EC1207AD9000EB7401F07F3F7E4262
:1008F6007D0F7C009000ECE0F8A3E0F9A3E0FAA3FA
:10090600E0FBD3120789407C7B407A42790F78005E
:100916009000ECE0FCA3E0FDA3E0FEA3E0FF1206DE
:10092600E9E47B0AFAF9F8D31207897B407A42791F
:100936000F78009000ECE0FCA3E0FDA3E0FEA3E04E
:10094600FF40081206E9EF243080061206E9EF247C
:1009560057FF12284C9000ECE0FCA3E0FDA3E0FE5C
:10096600A3E0FF7B407A42790F78001206E9AC00DB
:10097600AD01AE02AF039000EC1207AD9000EB7430
:1009860001F0800B9000EBE060057F3012284C7F71
:100996009F7E867D017C009000ECE0F8A3E0F9A341
:1009A600E0FAA3E0FBD31207895003020A417BA0B9
:1009B6007A86790178009000ECE0FCA3E0FDA3E0E4
:1009C600FEA3E0FF1206E9E47B0AFAF9F8D3120760
:1009D600897BA07A8640190978009000ECE0FCA398
:1009E600E0FDA3E0FEA3E0FF1206E9EF2430801845
:1009F600790178009000ECE0FCA3E0FDA3E0FEA303
:100A0600E0FF1206E9EF2457FF12284C9000ECE0B5
:100A1600FCA3E0FDA3E0FEA3E0FF7BA07A867901BC
:100A260078001206E9AC00AD01AE02AF039000EC0F
:100A36001207AD9000EB7401F0800B9000EBE060C4
:100A4600057F3012284CE47F0F7E27FDFC9000ECDA
:100A5600E0F8A3E0F9A3E0FAA3E0FBD3120789507C
:100A660003020AF2E47B107A27F9F89000ECE0FC26
:100A7600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA89
:100A8600F9F8D3120789E47B107A274017F890000B
:100A9600ECE0FCA3E0FDA3E0FEA3E0FF1206E9EF15
:100AA60024308016F9F89000ECE0FCA3E0FDA3E00A
:100AB600FEA3E0FF1206E9EF2457FF12284C900030
:100AC600ECE0FCA3E0FDA3E0FEA3E0FFE47B107AEC
:100AD60027F9F81206E9AC00AD01AE02AF039000AB
:100AE600EC1207AD9000EB7401F0800B9000EBE088
:100AF60060057F3012284CE47FE77E03FDFC900002
:100B0600ECE0F8A3E0F9A3E0FAA3E0FBD31207892F
:100B16005003020BA3E47BE87A03F9F89000ECE0BB
:100B2600FCA3E0FDA3E0FEA3E0FF1206E9E47B0AD6
:100B3600FAF9F8D3120789E47BE87A034017F890AC
:100B460000ECE0FCA3E0FDA3E0FEA3E0FF1206E953
:100B5600EF24308016F9F89000ECE0FCA3E0FDA34A
:100B6600E0FEA3E0FF1206E9EF2457FF12284C909F
:100B760000ECE0FCA3E0FDA3E0FEA3E0FFE47BE8DD
:100B86007A03F9F81206E9AC00AD01AE02AF0390A4
:100B960000EC1207AD9000EB7401F0800B9000EBB7
:100BA600E060057F3012284CE47F63FEFDFC900078
:100BB600ECE0F8A3E0F9A3E0FAA3E0FBD31207897F
:100BC6005003020C50E47B64FAF9F89000ECE0FC68
:100BD600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA28
:100BE600F9F8D3120789E47B644017F89000ECE02B
:100BF600FCA3E0FDA3E0FEA3E0FF1206E9EF24302C
:100C06008017FAF9F89000ECE0FCA3E0FDA3E0FE03
:100C1600A3E0FF1206E9EF2457FF12284C9000ECE0
:100C2600E0FCA3E0FDA3E0FEA3E0FFE47B64FAF9A9
:100C3600F81206E9AC00AD01AE02AF039000EC126B
:100C460007AD9000EB7401F0800B9000EBE06005BF
:100C56007F3012284CE47B0AFAF9F89000ECE0FCAD
:100C6600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA97
:100C7600F9F8D3120789E44017F89000ECE0FCA3DA
:100C8600E0FDA3E0FEA3E0FF1206E9EF24308019A1
:100C96007B0AFAF9F89000ECE0FCA3E0FDA3E0FE85
:100CA600A3E0FF1206E9EF2457FF12284CE47B0A63
:100CB600FAF9F89000ECE0FCA3E0FDA3E0FEA3E067
:100CC600FF1206E9AC00AD01AE02AF03E47B0AFAFF
:100CD600F9F8D3120789E44017F89000ECE0FCA37A
:100CE600E0FDA3E0FEA3E0FF1206E9EB2430801945
:100CF6007B0AFAF9F89000ECE0FCA3E0FDA3E0FE25
:0D0D0600A3E0FF1206E9EB2457FF12284C72
:010D130022BD
:0B17A40090007AEBF0A3EAF0A3E9F05C
:1017AF009000A51207B900000000E49000A9F0A373
:1017BF00F0F9A3C9F0A3F0A3E9F0E4A3F0F9A3C9EA
:1017CF00F0A3F0A3E9F0A37401F0A37400F0A374E5
:1017DF007DF090007AE0F9A3E0FAA3E09000AFC9A2
:1017EF00F0A3EAF0A3E9F09000AFE0FBA3E0FAA3C7
:1017FF00E0F912051270030218D564256003021870
:10180F00BB9000AFA3E475F001120607A9F0FA121E
:10181F00051224DB70030218A924E1602B24EC606D
:10182F005024F4602324EC6048241570729000B2A9
:10183F00E0FBA3E475F00212061DA9F0FA120633BD
:10184F009000AEF0E0FF80549000B2E0FBA3E4758F
:10185F00F00112061DA9F0FA120512FF9000A9E47B
:10186F00F0A3EFF09000A9A3E0FF7E001222DB802F
:10187F002E9000B2E0FBA3E475F00112061DA9F053
:10188F00FA120512FF9000A9E4F0A3EFF09000A95F
:10189F00E0FEA3E0FF12202E80057F2512284C903A
:1018AF0000B0E475F0011206070217F69000AFE0E2
:1018BF00FBA3E475F00112061DA9F0FA120512FF41
:0F18CF0012284C0217F69000B2E4F0A3F0A3F039
:0118DE0022E7
:1000030002034BE86480F8E933E83360110460F0DD
:10001300ED33EC337009E8FCE9FDEAFEEBFF220463
:1000230060DED3EB9FEA9EE99DE8C2E78CF0C2F75E
:1000330095F0400CE8CCF8E9CDF9EACEFAEBCFFB2A
:1000430012031685D0F05804700320D5B3E804706A
:10005300075002B2D502035592D5EC0460F7E4CC05
:10006300C0E0C398F8603B94186008400DD0E0FBF3
:1000730002032DE4FBFAC9FC8028E830E406E4C956
:10008300FBE4CAFCE830E305E4C9CACBFCE8540747
:100093006010F8C3E913F9EA13FAEB13FBEC13FC52
:1000A300D8F130F52FC3E49CFCEF9BFFEE9AFEEDF5
:1000B30099FDD0E0FBEF4E4D4C701222DB0302039F
:1000C30052EC2CFCEF33FFEE33FEED33FDED30E766
:1000D300EB02032DEF2BFFEE3AFEED39FDD0E0FBF3
:1000E30050130BBB0003020355ED13FDEE13FEEF9C
:0800F30013FFEC13FC02032DC6
:1000FB00EC4D6011E8497017ED33EC3304600DE4FF
:10010B00FCFFFEFD22E933E8330470F802034B12C7
:10011B00031658046009E4CC2481500628500902C8
:10012B000355284003020352C0E0EB4A7044B980E8
:10013B0006D0E0FB020341EF4E701CBD8008EBFFC5
:10014B00EAFEE9FD80EBE98DF0A4FEE5F00201E4A7
:10015B00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE89DF
:10016B00F0A42EFFE435F0CD89F0A42DFEE435F09C
:10017B008067EF4E7005BD80D780C3EF8BF0A4ACCA
:10018B00F0EE8BF0A42CFCE435F0F8EF8AF0A42C05
:10019B00E5F038FCE433CB8DF0A42CFCE5F03BF818
:1001AB00EE8AF0A42CFCE5F038F8E433CF89F0A408
:1001BB002CFCE5F038CF3400CE89F0A42FFFE5F00E
:1001CB003EFEE433C98DF0A42EFEE5F039CD8AF066
:1001DB00A42FFFE5F03EFEE43DFD33D0E0FB5007DE
:1001EB000BBB000F020355EC2CFCEF33FFEE33FE81
:0601FB00ED33FD02032DAF
:10020100020355EC5D046005E85904700302034BD9
:10021100120316580460F6EC4860F2EC7004FDFE1F
:10022100FF22C860DB2481C85009C39860025006D0
:100231000203529850CAF582E9294B4A7005AB82F4
:1002410002034175F0007C1A7880C3EF9BEE9AEDB2
:1002510099400DC3EF9BFFEE9AFEED99FDE842F048
:10026100DC23ACF0D0E0FFD0E0FED0E0FDAB82209B
:10027100E7101BEB60BAEC2CFCEF33FFEE33FEED25
:1002810033FD02032DE803F830E705C0F075F000F7
:10029100EF2FFFEE33FEED33FD40B830E7C280AA09
:1002A10075F020800E75F010800575F0087D007ED8
:1002B100007F003392D530D50312077BEC33401019
:1002C100EF33FFEE33FEED33FDEC33FCD5F0ED22E1
:0E02D100E5F0247EA2D513CC92E7CDCEFF221D
:1002DF00EDD2E7CD33EC3392D524814006E4FFFE17
:1002EF00FDFC22FCE4CFCECDCC24E0501174FF8076
:1002FF00EDC3CC13CCCD13CDCE13CECF13CF047013
:07030F00F030D5DE02077B90
:100D1400E50824BAF582E43400F583E0050822905E
:100D240000B73007039000BAE475F0011207EA0235
:100D340005122000E97F2ED2008018EF540F249072
:100D4400D43440D4FF30040BEF24BFB41A00500352
:100D54002461FFE50960021509050CE50C70020524
:100D64000B30070E9000B7E475F0011207EAEF02AA
:100D7400055802265B7403D2078003E4C207F50812
:100D84009000B7120801E4F509F50BF50CE50960CC
:100D9400077F20120D5780F5750AFFC201C200C2F9
:100DA40002C203C205C206C208120D23FF700D3031
:100DB40007057F00120D68AF0CAE0B22B4255FC28D
:100DC400D5C204120D23FF24D0B40A00501A75F0C2
:100DD4000A780930D50508B6FF0106C6A426F62010
:100DE400D5047002D20380D924CFB41A00EF500482
:100DF400C2E5D20402105AD20180C6D20080C0D209
:100E04000280BCD2D580BAD20580B47F20120D579F
:100E14002002077401B5090040F1120D14FF120DF0
:100E240057020D91D208D2068095120D14FB120DB3
:100E340014FA120D14F94A4B700679587A117BFF93
:100E440020022EE509602A7E008E82758300120539
:100E54002B60060EEE650A70F0C2D5EBC0E0EAC066
:100E6400E0E9C0E0EE1210BBD0E0F9D0E0FAD0E047
:100E7400FB120512FF60AAEBC0E0EAC0E0E9C0E0A3
:100E8400120D57D0E02401F9D0E03400FAD0E0FB91
:100E9400E50A0460DCD50AD98087D20280A2121048
:100EA4009D60F7E50A700104120360A90A600DE56C
:100EB4000A600914F50A121145EF60F3EA30E702FB
:100EC400F404C3995079EAF4250A0430E701E404F0
:100ED400F50A800D12109D60C1EA050A250A120365
:100EE40060EA9000E6F030E701E4250A04D50A043C
:100EF400200501141210BBE4C0E01211459000E675
:100F0400E0601320E70714F0120D3F802204F0D0B4
:100F1400E014C0E07F00120D3FE50A6007120D36B1
:100F2400150A800B300503120D36D0E0020D91D066
:100F3400E00480C412109D609EE50A0412036090D0
:100F440000E6EAF0E50A2005026001042404121018
:010F5400BBE1
:100F550074FF04C0E0121145120D3FE50A20050299
:100F65006003120D36D0E0B50AE87F45120D4990B1
:100F750000E6E07F2B30E7047F2DF404C0E0120D7E
:100F850057D0E075F00A84C0F0120D40D0E0120D84
:100F950040020D91791080027908C206C2088008C6
:100FA500D2D5790A8004790AC2D5E50A047002F51A
:100FB5000AE4FAFDFEFF120D14FC7B082001131252
:100FC5000D14FD7B1030000A120D14FE120D14FFD6
:100FD5007B20EC3382D592D55013C3E43000069FB5
:100FE500FFE49EFEE42001039DFDE49CFCE4CBF8B8
:100FF500C201EC700CCFCECDCCE824F8F870F380AC
:1010050017C3EF33FFEE33FEED33FDEC33FCEB336B
:10101500FB994002FB0FD8E9EB300105F8D0E0C49D
:1010250048B201C0E00AEC4D4E4F78207B0070C2FB
:10103500EAB50A0040BCC0E01210BDD0F0D0E020F7
:101045000104C4C0E0C4B201C0F0120D40D0F0D517
:10105500F0EB020D9112080A0E2E530F99580DFF51
:101065004C0DFB420F9D4F0FA5440FA5490E144390
:101075000FAB550ED8460F38450EA2471178500EC6
:10108500032D0E072E0E2A2B0E0B230E2820116181
:101095002A0DC34800000E22E50AB4FF03750A06AF
:1010A500120D14FC120D14FD120D14FE120D14FF79
:1010B5009000DF02039D790AA2D5200314300509AB
:1010C500B910020404B9080104A2D5200602500192
:1010D500042002689202B509005034C0E07F203038
:1010E50003197F30A20272067205500F121114C245
:1010F50002C206C205C2087F30800F300503E9C071
:10110500E0120D57300503D0E0F9D0E0B509CC3039
:1011150005177F30B9100C120D577F583004077F23
:10112500788003B90803120D573002057F2D020D93
:10113500577F202008F87F2B2006F322920280CFCC
:101145007F00B40700500B24DFF582E43400F583FB
:10115500E0FF22286E756C6C2900D201120D143047
:1011650001F8C201780930D50108F6020DC32D50EA
:10117500434958120D142403B405004001E49011AD
:101185007393120D48743A120D48D203750904027F
:021195000F99B0
:10031600E9D2E7C933E833F892D5EDD2E7CD33EC2D
:0703260033FC5002B2D522A6
:10032D00EC30E7100FBF000C0EBE00080DBD000431
:10033D000BEB6014A2D5EB13FCED92E7FD2274FFDD
:10034D00FCFDFEFF22E480F8A2D574FF13FC7D8036
:03035D00E480EF4A
:10036000F920E73624F950037907E4F42402FBE589
:1003700082158270021583DBF6E024FB501BE960D6
:1003800014E4F0E582158270021583E004F0B40AEB
:0D03900008E4F0D9EE7401F00A22C2D52273
:10039D00ED33EC3392D5FA602AB4FF33EDC2E77B2F
:1003AD00FF60067A0379C2E4227A0379CB20D50463
:1003BD007A0379C6224E614E002B494E46002D49D7
:1003CD004E4600E47A08F0A3DAFC7B00740722C0E5
:1003DD0083C082ECC0E0EDC0E0EEC0E0EFC0E0EA2B
:1003ED0075F010A4CAABF075F04DA42BFBE435F0FD
:1003FD00FCEA2410FAEB34C5FBEC34D9FCEDC2E772
:10040D00FF75F056A4F42411C5F0F434C58FF0A493
:10041D002AE5F03BE43CF020E7141204D2D0E0FFD3
:10042D00D0E0FED0E0FDD0E0FC1202048014F40414
:10043D001204D2D0E0FFD0E0FED0E0FDD0E0FC12FF
:10044D0000FBD082D083E0FAEDD2E7CD33EC33243C
:10045D0082FBE4C3CF33CFCE33CECD33CD33DBF3FD
:10046D007B0775F00A846004F0A31B0AE5F0F0A386
:10047D008FF0740AA4FFACF08EF0740AA42CFEACBD
:10048D00F050010C8DF0740AA42CFDE435F0F0A3AE
:05049D00DBDE74072204
:1004A2003F8000004120000042C80000447A000062
:1004B200461C400047C35000497424004B189680E4
:1004C2004CBEBC205A0E1BCA6753C21C749DC5AEDB
:1004D200FB60065407601C2323120500EB543860AE
:1004E200091204EC1204FB1200FBECF8EDF9EEFA2F
:1004F200EFCB22EB1204FB80F1543803241C90044E
:10050200A2FE93FC0EEE93FD0EEE930ECE93FF220F
:101C2000021B7DE493A3F8E493A34003F68001F242
:101C300008DFF48029E493A3F85407240CC8C333C5
:101C4000C4540F4420C8834004F456800146F6DF94
:101C5000E4800B0102040810204080901F34E47ED1
:101C6000019360BCA3FF543F30E509541FFEE49389
:101C7000A360010ECF54C025E060A840B8E493A350
:101C8000FAE493A3F8E493A3C8C582C8CAC583CA7B
:101C9000F0A3C8C582C8CAC583CADFE9DEE780BE33
:011FB300002D
:10051200BB010689828A83E0225002E722BBFE02E7
:09052200E32289828A83E493221A
:10052B00BB010CE58229F582E5833AF583E0225085
:10053B0006E92582F8E622BBFE06E92582F8E222CF
:0D054B00E58229F582E5833AF583E49322E9
:10055800BB010689828A83F0225002F722BBFE0182
:02056800F3227C
:10056A00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EA5
:02057A00FE225F
:10057C00BC000BBE0029EF8DF084FFADF022E4CC63
:10058C00F875F008EF2FFFEE33FEEC33FCEE9DEC2C
:10059C00984005FCEE9DFE0FD5F0E9E4CEFD22ED72
:1005AC00F8F5F0EE8420D21CFEADF075F008EF2FBC
:1005BC00FFED33FD4007985006D5F0F222C398FDAD
:0505CC000FD5F0EA224A
:1005D100C2D5EC30E709B2D5E4C39DFDE49CFCEE45
:1005E10030E715B2D5E4C39FFFE49EFE12057CC33C
:1005F100E49DFDE49CFC800312057C30D507C3E437
:060601009FFFE49EFE22B3
:10060700C5F0F8A3E028F0C5F0F8E582158270027E
:060617001583E038F0221B
:10061D00A3F8E0C5F025F0F0E58215827002158390
:06062D00E0C838F0E822ED
:10063300BB010A89828A83E0F5F0A3E02250068792
:10064300F009E71922BBFE07E3F5F009E319228954
:0B065300828A83E493F5F07401932287
:10065E00E88FF0A4CC8BF0A42CFCE98EF0A42CFC3B
:10066E008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4B9
:10067E002DCC3825F0FDE98FF0A42CCD35F0FCEB18
:10068E008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39DD
:0F069E00FEE43CFCEAA42DCE35F0FDE43CFC224A
:1006AD0075F008758200EF2FFFEE33FECD33CDCC04
:1006BD0033CCC58233C5829BED9AEC99E582984087
:1006CD000CF582EE9BFEED9AFDEC99FC0FD5F0D664
:1006DD00E4CEFBE4CDFAE4CCF9A88222B800C1B98E
:1006ED000059BA002DEC8BF084CFCECDFCE5F0CBCC
:1006FD00F97818EF2FFFEE33FEED33FDEC33FCEB05
:10070D0033FB10D703994004EB99FB0FD8E5E4F9BF
:10071D00FA227818EF2FFFEE33FEED33FDEC33FCAC
:10072D00C933C910D7059BE99A4007EC9BFCE99AA0
:10073D00F90FD8E0E4C9FAE4CCFB2275F010EF2FE5
:10074D00FFEE33FEED33FDCC33CCC833C810D707E5
:10075D009BEC9AE899400AED9BFDEC9AFCE899F820
:0E076D000FD5F0DAE4CDFBE4CCFAE4C8F922B3
:0E077B00C3E49FFFE49EFEE49DFDE49CFC228F
:10078900EB9FF5F0EA9E42F0E99D42F0E89C45F0C6
:01079900223D
:10079A00E8600FECC313FCED13FDEE13FEEF13FF3D
:0307AA00D8F12261
:0C07AD00ECF0A3EDF0A3EEF0A3EFF022BF
:1007B900A8828583F0D083D0821207D01207D01285
:1007C90007D01207D0E473E493A3C583C5F0C583AA
:1007D900C8C582C8F0A3C583C5F0C583C8C582C88A
:0107E90022ED
:1007EA00F8E0FBA3A3E0F925F0F0E5821582700298
:0707FA001583E0FA38F0223C
:09080100EBF0A3EAF0A3E9F022F8
:10080A00D083D082F8E4937012740193700DA3A37D
:10081A0093F8740193F5828883E473740293686091
:06082A00EFA3A3A380DF91
:10265B00EFB40A07740D122666740A309811A89904
:10266B00B8130CC2983098FDA899C298B811F630DF
:07267B0099FDC299F59922B7
:00000001FF
@@ -1,713 +0,0 @@
:03000000021C14CB
:0C1C1400787FE4F6D8FD758122021C5B8D
:102180009001021207AD538EF7438901D28CE4FF10
:10219000FEFDFC900102E0F8A3E0F9A3E0FAA3E061
:1021A000FBC3120789602F758A7E758CFF308DFD09
:1021B000C28D900102E0FCA3E0FDA3E0FEA3E024B9
:1021C000FFFFEE34FFFEED34FFFDEC34FFFC900129
:0921D000021207AD80B8C28C2296
:1021D9009000B71207AD538EF7438901D28CE4FF03
:1021E900FEFDFC9000B7E0F8A3E0F9A3E0FAA3E054
:1021F900FBC3120789602F758ACA758CFA308DFD69
:10220900C28D9000B7E0FCA3E0FDA3E0FEA3E024AB
:10221900FFFFEE34FFFEED34FFFDEC34FFFC9000D0
:09222900B71207AD80B8C28C2287
:09281500300003D28322C28322A9
:0727E0007F0312280AD2005A
:0927E700300003D28422C28422D6
:07283600A283920BA20B220A
:10273000E4FDFCC3ED9FEC9E5015E4FBFA0BBB00DF
:0F274000010ABA01F8BBF4F50DBD00010C80E4ED
:01274F002267
:0A280A00E4FEEEC39F50030E80F8B9
:0128140022A1
:1026A800D2001228157F011227E27F0A12280AC2D7
:1026B800001228157F0712280AC2001227E77F0197
:0326C80002280ADB
:1027A400C2001228157F021227E27F0A12280AD2D9
:0727B4000012281502280A9B
:02228B00AD079D
:10228D00E4FCEDA804088002C333D8FC30E704D287
:10229D00008002C2001228151227E00F12280AC270
:1022AD00001227E70CECB408D97F0112280AD200DE
:1022BD001228151227E012280A1228365004C20ED1
:0E22CD008002D20EC2001227E77F0302280A09
:10243900E4FDD200122815FC7F0112280AC20012FD
:1024490027E77F041227E27F0212280AED25E0FD23
:1024590012283650010D7F0212280A0CECB408D854
:0C246900C2001227E77F0512280AAF0509
:012475002244
:10275000201004C2008002D2001228157F08122720
:10276000E27F0F12280AC2001227E77F0802280A18
:07211800900080EDF0AC0720
:10211F001226A8AF0412228B200E0280339000806B
:10212F00E0FF12228B200E028026E4900086F0A39F
:10213F00F0900084E0FEA3E0FFC3900087E09F9043
:10214F000086E09E5026120512FF12228B200E05EC
:10215F001227A4C322740129F9E43AFA900087E008
:10216F0004F070CD900086E004F080C51227A4D350
:01217F00223D
:081FB4009000F0EFF0A3EDF046
:101FBC001226A89000F0E0FF12228B200E02801C4B
:101FCC009000F1E0FF12228B200E02800F1226A847
:101FDC009000F0E004FF12228B200E091227A4E4DB
:101FEC00120558C322E49000F6F09000F5E014FFBF
:101FFC00A3E0C39F501B122439EF120558C21012D4
:10200C002750740129F9E43AFA9000F6E004F080C4
:10201C00D9122439EF120558D2101227501227A4C6
:01202C00D3E0
:01202D002290
:02263400AE07EF
:10263600E4900110F0900111E0FFAD067B017A01F4
:1026460079109000F57401F0121FB44002D20D907B
:042656000110E0FF90
:01265A00225D
:02278B00AE0797
:10278D00900111E0FFAD06900101E09000F5F0120F
:06279D001FB49211A2110D
:0127A3002213
:1026820090007EEDF0AE07900111E0FFAD067B01F8
:102692007A00797E900084E4F0A304F012211840BD
:0626A20002D20DA20D2280
:1026CB00AE07AD079000FBE0FFA3E0900084CFF0D6
:1026DB00A3EFF0900111E0FF1221184002D20DA2DE
:0226EB000D22BE
:102370000D0A202A2A2A2A2A2A2A2A2A2A2A2A2A04
:102380002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AAD
:102390002A000D0A4820746F61746C20636E7420EB
:1023A0003A20000D0A5620746F61746C203A2000A8
:0423B0000D0A2000F2
:081F340041010EFF41010FFF06
:102232009001117490F07DFF7F0830091E122682F2
:102242007DFF7F091226827DFF7F0A1226827D7C16
:102252007F0B1226827DFF7F0C802A1226827D81CF
:102262007F091226827DFF7F0A1226827D647F0B00
:102272001226827DFF7F0C1226827D317F44122638
:09228200827D1F7F511226822289
:102560009001117490F07DA17F311226827DBF7F92
:10257000321226827D177F33122682E4FD7F3712C6
:1025800026827D227F381226827D827F60122682FB
:07259000E4FD7F3A02268200
:1025CD009001117490F07D457F39122682E4FD7FD4
:1025DD003B122682900000E02496FD7F3E1226825B
:1025ED007D147F3F1226827D3C7F411226827D7CA9
:0525FD007F4002268270
:1026ED009001117490F07D317F441226827D447FDC
:1026FD00551226827D017F571226827D027F5A0256
:02270D00268222
:10232A009001117492F07D017F101226827D087F40
:10233A00111226827D047F12122682900002E05436
:10234A0003FD7F13122682E4FD7F14122682900079
:10235A0079E0FD7F151226827D037F1A1226827D7F
:06236A00037F1B02268226
:101197009001117492F090010EE0C454F02423F5ED
:1011A70082E43400F583A3E0FD7F181226829001C4
:1011B7000EE0C454F02425F582E43400F583A3E05F
:1011C700FD7F1912268290010EE0C454F02419F510
:1011D70082E43400F583A3E0FD7F1C122682900190
:1011E7000EE0C454F02419F582E43400F583E0FDE1
:1011F7007F1D1226827D677F1E1226827D0C7F2F20
:1012070012268290010EE0C454F0241DF582E434C6
:1012170000F583A3E0FD7F3412268290010EE0C41F
:1012270054F0241DF582E43400F583E0FD7F351288
:10123700268290010EE0C454F0241FF582E43400A6
:10124700F583A3E0FD7F3612268290010EE0C45499
:10125700F0241FF582E43400F583E0FD7F37122682
:101267008290010EE0C454F02427F582E43400F59F
:1012770083A3E0FD7F3812268290010EE0C454F06C
:101287002427F582E43400F583E0FD7F39122682B6
:1012970090010EE0FFC454F0241BF582E43400F5FE
:1012A70083E0FCA3E0FDEFC454F0241FF582E4348F
:1012B70000F583E0FEA3E0C39DFFEE9CFE90010EC8
:1012C700E0FDC454F02427F582E43400F583E0FA06
:1012D700A3E0FBC3EF9BFFEE9AFEEDC454F0242579
:1012E700F582E43400F583E0FCA3E0FDC3EF9DFF46
:1012F700EE9CAD077F3A12268290010EE0FFC454A0
:10130700F0241BF582E43400F583E0FCA3E0FDEF55
:10131700C454F0241FF582E43400F583E0FEA3E013
:10132700C39DFFEE9CFE90010EE0FDC454F0242700
:10133700F582E43400F583E0FAA3E0FBC3EF9BFFFB
:10134700EE9AFEEDC454F02425F582E43400F583CB
:10135700E0FCA3E0FDC3EF9DEE9CFD7F3B122682E0
:1013670090010EE0C454F02421F582E43400F583A3
:10137700A3E0FD7F3C12268290010EE0C454F024C6
:1013870021F582E43400F583E0FD7F3D122682904B
:10139700010EE0FFC454F02419F582E43400F5830C
:1013A700E0FCA3E0FDEFC454F0241DF582E4340013
:1013B700F583E0FEA3E0C39DFFEE9CFE90010EE0E7
:1013C700FDC454F02421F582E43400F583E0FAA348
:1013D700E0FBC3EF9BFFEE9AFEEDC454F02423F528
:1013E70082E43400F583E0FCA3E0FDC3EF9DFFEE4C
:1013F7009CAD077F3E12268290010EE0FFC454F099
:101407002419F582E43400F583E0FCA3E0FDEFC482
:1014170054F0241DF582E43400F583E0FEA3E0C315
:101427009DFFEE9CFE90010EE0FDC454F02421F5D3
:1014370082E43400F583E0FAA3E0FBC3EF9BFFEE01
:101447009AFEEDC454F02423F582E43400F583E0DA
:0F145700FCA3E0FDC3EF9DEE9CFD7F3F022682CC
:102597009001117490F07D7F7F031226827F0A7E5F
:1025A700001227307DFF7F0312268290011174925B
:1025B700F07D807F511226827F0A7E00122730E449
:0625C700FD7F5102268297
:101634009001117492F07D527F4E1226827DDE7FDE
:101644004F1226827DC07F501226827D807F5112E8
:101654002682E4FD7F511226827D5E7F1F12268240
:101664007D017F201226827D2C7F211226827D011E
:101674007F221226827DFA7F23122682E4FD7F24B4
:101684001226827DC87F25122682E4FD7F2612263B
:10169400827D5E7F271226827D017F281226827D2D
:1016A4002C7F291226827D017F2A1226827DFA7FD1
:1016B4002B122682E4FD7F2C1226827DC87F2D12F8
:1016C4002682E4FD7F2E1226829001117490F07D13
:1016D4007F7F031226827F0A7E001227307DFF7FE0
:1016E400031226829001117492F0E4FD7F511226B8
:1016F400827D647F42122682E4FD7F431226827D2E
:10170400047F44122682E4FD7F451226827D597FA0
:1017140046122682E4FD7F471226827DF27F48121C
:1017240026827D067F49122682E4FD7F4A122682A4
:101734007D727F4B1226827D457F4C122682E4FD0A
:101744007F4D1226827D087F52122682E4FD7F534C
:101754001226827DB27F54122682E4FD7F55122622
:10176400827DE47F561226827D0D7F57122682E405
:10177400FD7F581226827DE47F591226827D8A7F5E
:101784005A122682E4FD7F5B1226827D347F5C122E
:1017940026827D4F7F1E122682E4FD7F510226821F
:1024B3009001117490F0900018E0FD7FB212268213
:1024C3009001117494F0300A0B7D097F0612268265
:1024D3007DF080097D0E7F06122682E4FD7F0712C0
:0A24E30026827DD27F341226822269
:0D27F0009001117490F07D307F440226822C
:0D27FD009001117490F07D317F440226821E
:1018DF009001117490F07D247F501226827D057F38
:1018EF0051122682900001E02414FD7F52122682AD
:1018FF00900003E0FEA3E0FF7C007D1912057C7CC5
:10190F00007D0712056AE4FD90007A1207ADE47BB3
:10191F0064FAF9F890007AE0FCA3E0FDA3E0FEA3DF
:10192F00E0FF1206E9E4AD077F69122682E47B64CB
:10193F00FAF9F890007AE0FCA3E0FDA3E0FEA3E043
:10194F00FF1206E9EF2480FD7F69122682E47B6493
:10195F00FAF9F890007AE0FCA3E0FDA3E0FEA3E023
:10196F00FF1206E9AF03E4FEFDFC90007A1207AD0B
:10197F0090007AE0FCA3E0FDA3E0FEA3E0FFE4FB10
:10198F007A40F9F812065E90007A1207AD90007A4D
:10199F00E0FCA3E0FDA3E0FEA3E0FFE47B64FAF923
:1019AF00F81206E990007A1207AD90007CE02480CF
:1019BF00FD7F6C12268290007DE0FD7F6B122682E8
:0E19CF007DFB7F041226827DFF7F04022682AC
:101466009001117490F0E4FD7F801226827DFF7F4B
:10147600811226827D037F8212268290010EE0C4AD
:1014860054F02419F582E43400F583A3E0FD7F834C
:1014960012268290010EE0C454F02419F582E43439
:1014A60000F583E0FD7F841226827D807F851226EB
:1014B600827D107F8612268290000BE0FD7F8712C8
:1014C600268290000AE0FD7F88122682900011E0B5
:1014D600FD7F8912268290000FE0FD7F8A12268208
:1014E60090000EE0540175F080A4FF900013E02FE9
:1014F600540FFD7F8B122682900007E0FD7F8C1231
:101506002682900009E0FD7F8D122682900008E079
:10151600C454F0FD900006E02DFD7F8E12268290C9
:10152600010EE0C454F02419F582E43400F583E09A
:10153600FCA3E0FDE41202A6E4FBFA798078BF1270
:10154600000AC004C005C006C007900007E024FFDB
:10155600FD900006E034FFFCE41202A6A804A905EB
:10156600AA06AB07D007D006D005D004120204E4C1
:10157600FBFA798078451200FB1202DF90007AEEC2
:10158600F0A3EFF090007BE0FD7F8F1226829000A3
:101596007AE0FD7F9012268290010EE0C454F0247A
:1015A6001BF582E43400F583E0FCA3E0FDE41202BF
:1015B600A6E4FBFA798078BF12000AC004C005C011
:1015C60006C007900009E024FFFD900008E034FF04
:1015D600FCE41202A6A804A905AA06AB07D007D008
:1015E60006D005D004120204E4FBFA79807845128D
:1015F60000FB1202DF90007AEEF0A3EFF090007B82
:10160600E0FD7F9112268290007AE0FD7F921226FD
:10161600827D9C7F7F122682900016E0FF90000557
:0E162600E02FFF900017E02FFD7FA802268224
:102770001222321225601225CD1226ED12232A12C2
:0B27800011971216341224B3022597A3
:1019DD00E4900106F0A3F0A3F0A3F0900111749030
:1019ED00F07F9D122634EF7F00FEC006C0077F9C5E
:1019FD00122634EFFDD0E02DFED0E034009001062C
:101A0D00F0A3CEF07F9F122634EF54077F00FEC067
:101A1D0006C0077F9E122634EFFDD0E02DFFD0E0EB
:101A2D003400FE900108F0A3EFF0C39402EE94028F
:101A3D004014D3E09422900108E0940250089001E4
:101A4D000E7405F08041900108E0FEA3E0FFC39401
:101A5D00E0EE94024011D3EF94FEEE940250089004
:101A6D00010E7401F08020C3EF9455EE94044011E3
:101A7D00D3EF9475EE9404500890010E7404F08029
:101A8D000690010E74FFF07BFF7A2379701217A474
:101A9D007BFF7A2379921217A4900106E0FEA3E052
:101AAD00FFE4FCFD1208307BFF7A2379A31217A403
:101ABD00900108E0FEA3E0FFE4FCFD1208307BFF7F
:071ACD007A2379B00217A48F
:101CA0009001117492F07D127F721226827DC07FA6
:101CB00073122682E4FD7F741226827D297F7512BD
:101CC00026827D807F761226827D387F771226825B
:101CD0007D477F781226827D987F791226827D65E6
:101CE0007F7A1226827D487F7B1226827D2C7F7C24
:101CF0001226827D057F7D1226827D807F701226CE
:101D0000827D767F711226827D337F4E1226827D00
:101D1000337F4F1226827DD37F501226827D807FB3
:041D200051022682C4
:101D24009001117492F07D127F721226827D047FDD
:101D3400731226827D017F741226827D197F7512AB
:101D44002682E4FD7F761226827DD07F771226825A
:101D54007D257F781226827D727F791226827DEE20
:101D64007F7A1226827D267F7B1226827D287F7CC5
:101D74001226827D057F7D1226827D807F70122649
:101D8400827D767F711226827D997F4E1226827D16
:101D9400997F4F1226827D697F501226827D807F33
:041DA4005102268240
:101DA8009001117492F07D127F721226827D847FD9
:101DB80073122682E4FD7F741226827D2C7F7512B1
:101DC80026827DD07F761226827D407F77122682FA
:101DD8007D227F781226827D607F791226827D712E
:101DE8007F7A1226827D237F7B1226827D407F7C2C
:101DF8001226827D057F7D1226827D807F701226C5
:101E0800827D767F711226827D667F4E1226827DC4
:101E1800667F4F1226827D267F501226827D807F24
:041E280051022682BB
:101E2C009001117492F07D127F721226827D7A7F5E
:101E3C0073122682E4FD7F741226827D247F751234
:101E4C0026827DD07F761226827DE07F77122682D5
:101E5C007D127F781226827D5A7F791226827D0D23
:101E6C007F7A1226827D237F7B1226827D3E7F7CA9
:101E7C001226827D067F7D1226827D807F7012263F
:101E8C00827D767F711226827D667F4E1226827D40
:101E9C00667F4F1226827D267F501226827D807FA0
:041EAC005102268237
:101EB0009001117492F07D127F721226827D647FF0
:101EC00073122682E4FD7F741226827D1E7F7512B6
:101ED0002682E4FD7F761226827DE07F77122682BD
:101EE0007D157F781226827DB47F791226827D123D
:101EF0007F7A1226827D257F7B1226827D147F7C4D
:101F00001226827D0A7F7D1226827D807F701226B6
:101F1000827D767F711226827D9F7F4E1226827D82
:101F2000F47F4F1226827D497F501226827D807F6A
:041F300051022682B2
:101AD4000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2A9F
:101AE4002A2A2A2A2A2A2A2A73746172742A2A2AF6
:101AF4002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A42
:101B04002A2A2A2A2A2A000D0A20000D0A2A2A2A09
:101B14002A2A2A2A2A2A2A2A2A2A2A2A2A2A4C54D5
:101B2400383931324220726573657420646F6E6592
:101B34002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A01
:101B44002A000D0A2A2A2A2A2A2A2A2A2A2A2A2A58
:101B54002A2A2A2A4C54383931324220496E69746F
:101B640069616C20646F6E652A2A2A2A2A2A2A2A25
:091B74002A2A2A2A2A2A2A2A0018
:101F3C006060001902D001E0035A020D003C003E23
:101F4C000006001E050002D0067202EE00DC00281E
:101F5C000005001405000320060A0358008C002419
:101F6C0000080018040002580540027B008C001485
:101F7C000003001407800438089804650094002CB2
:101F8C0000050024050001E005B402120050001405
:101F9C00000A0014500006050001E005B40212000E
:071FAC00500014000A0014AC
:1023F80043B10843B20843B11043B21043B101439B
:10240800B20143AC0153ADFE43B30853B4F743B331
:102418001053B4EF7F007EC27D017C001225275344
:10242800E9FB43E92043EA0853EBF7439B02D2AFA9
:012438002281
:07283D009001117490F022DC
:1027CE00C2807F647E00122730D2807F647E00023A
:0227DE002730A2
:102476009000187401F0D20AC2099000027404F0A8
:1024860090007974A8F09000007420F0D20C300906
:102496001B9000037414F0A37450F0E4900001F054
:0D24A600900005F0900016F0A37413F022D2
:101B7D001223F87FC87E001227307FC87E001227FF
:101B8D00307FC87E001227307FC87E001227307F3D
:101B9D00C87E001227307BFF7A1A79D41217A4124F
:101BAD00283D1227CE7BFF7A1B790B1217A47BFFE2
:101BBD007A1B790F1217A412247690010E7405F07A
:101BCD001227707BFF7A1B790B1217A47BFF7A1BF0
:101BDD0079461217A47BFF7A1B790B1217A4300CD0
:101BED0003121EB03009101218DF1214667F2C7EFE
:101BFD00011227301227F07FC87E001227307F2672
:071C0D007E0212273080F770
:10270F000A2055494431203D203078256278000A4F
:10271F002055494432203D203078256278003078AA
:01272F0000A9
:1025270053B1BF53B2BF53B17F53B27F7598504376
:102537008920438780438E1053C4DFAB07AA06A9BF
:1025470005A8047F407E427D0F7C001206E9EF0458
:09255700F404F58DD28ED2992214
:1020A50090010A1207AD53B1BF53B2BF53B17F536D
:1020B500B27F75985043878053C4F843C42090017C
:1020C5000AE0F8A3E0F9A3E0FAA3E0FB7F407E4233
:1020D5007D0F7C001206E9C374FF9FFF74FF9EFE0F
:1020E500E49DFDE49CFC780812079A8FC690010ACE
:1020F500E0F8A3E0F9A3E0FAA3E0FB7F407E427D90
:102105000F7C001206E9C374FF9FFF8FC543C40807
:03211500D299223A
:07281E003098FDAF99C2984C
:012825002290
:08282600C2998F993099FD223F
:1024ED00EF540FFEEF54F0C4540FFFEEC3940AEEF9
:1024FD0050052430FD80032437FDAE05EFC3940A4B
:10250D00EF50052430FD80032437FDAF051228263A
:0A251D00AF061228267F20022826B0
:052844007F0A022826B6
:03284900020D7FFE
:1027BB00AB07AA06EEFF1224EDAF031224ED7F0A3E
:0327CB00022826BB
:08282E001228267F2002282653
:1023B400A2AF920FC2AF75C7AA75C755439F01A2BA
:1023C4000F92AF8FA6E4F5A775AF04A2AF920FC228
:1023D400AF75C7AA75C75543A401A20F92AFAFAE9C
:1023E400A2AF920FC2AF75C7AA75C755539FFEA27D
:0323F4000F92AF96
:0123F70022C3
:102602007F021223B4AE077F051223B4900112EFAA
:10261200F07BFF7A27790FAF069000BAEFF0120D28
:102622007F7BFF7A27791E900112E09000BAF002B8
:022632000D7F1A
:03284C0002282639
:1022DB00AB07AA067C007D0A1205D1C3EF940AEE68
:1022EB00648094805005EF2430800E7C007D0AAF13
:1022FB0003AE021205D1EF2457FF12284C7C007D50
:10230B000AAF03AE021205D1C3ED940AEC648094BC
:0F231B0080ED5004243080022457FF12284C22FA
:10202E009000B5EEF0A3EFF07BFF7A27792D120D1D
:10203E007F7F027E007D007C001221D99000B5E0EA
:10204E00FEA3E0FF7C007D101205D1C3EF940AEED3
:10205E00648094805005EF243080129000B5E0FE2D
:10206E00A3E0FF7C007D101205D1EF2457FF12284C
:10207E004C9000B5E0FEA3E0FF7C007D101205D170
:10208E00C3ED940AEC64809480ED500424308002F9
:07209E002457FF12284C2219
:060830009000E71207AD85
:10083600E49000EBF0A31207B9000000009000E777
:10084600E0FCA3E0FDA3E0FEA3E0FF9000EC1207AE
:10085600AD7F2012284C7F7F7E967D987C0090008D
:10086600ECE0F8A3E0F9A3E0FAA3E0FBD3120789D2
:10087600407A7B807A96799878009000ECE0FCA329
:10088600E0FDA3E0FEA3E0FF1206E9E47B0AFAF925
:10089600F8D31207897B807A96799878009000ECD5
:1008A600E0FCA3E0FDA3E0FEA3E0FF40081206E99A
:1008B600EF243080061206E9EF2457FF12284C90E9
:1008C60000ECE0FCA3E0FDA3E0FEA3E0FF7B807A62
:1008D60096799878001206E9AC00AD01AE02AF0336
:1008E6009000EC1207AD9000EB7401F07F3F7E4262
:1008F6007D0F7C009000ECE0F8A3E0F9A3E0FAA3FA
:10090600E0FBD3120789407C7B407A42790F78005E
:100916009000ECE0FCA3E0FDA3E0FEA3E0FF1206DE
:10092600E9E47B0AFAF9F8D31207897B407A42791F
:100936000F78009000ECE0FCA3E0FDA3E0FEA3E04E
:10094600FF40081206E9EF243080061206E9EF247C
:1009560057FF12284C9000ECE0FCA3E0FDA3E0FE5C
:10096600A3E0FF7B407A42790F78001206E9AC00DB
:10097600AD01AE02AF039000EC1207AD9000EB7430
:1009860001F0800B9000EBE060057F3012284C7F71
:100996009F7E867D017C009000ECE0F8A3E0F9A341
:1009A600E0FAA3E0FBD31207895003020A417BA0B9
:1009B6007A86790178009000ECE0FCA3E0FDA3E0E4
:1009C600FEA3E0FF1206E9E47B0AFAF9F8D3120760
:1009D600897BA07A8640190978009000ECE0FCA398
:1009E600E0FDA3E0FEA3E0FF1206E9EF2430801845
:1009F600790178009000ECE0FCA3E0FDA3E0FEA303
:100A0600E0FF1206E9EF2457FF12284C9000ECE0B5
:100A1600FCA3E0FDA3E0FEA3E0FF7BA07A867901BC
:100A260078001206E9AC00AD01AE02AF039000EC0F
:100A36001207AD9000EB7401F0800B9000EBE060C4
:100A4600057F3012284CE47F0F7E27FDFC9000ECDA
:100A5600E0F8A3E0F9A3E0FAA3E0FBD3120789507C
:100A660003020AF2E47B107A27F9F89000ECE0FC26
:100A7600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA89
:100A8600F9F8D3120789E47B107A274017F890000B
:100A9600ECE0FCA3E0FDA3E0FEA3E0FF1206E9EF15
:100AA60024308016F9F89000ECE0FCA3E0FDA3E00A
:100AB600FEA3E0FF1206E9EF2457FF12284C900030
:100AC600ECE0FCA3E0FDA3E0FEA3E0FFE47B107AEC
:100AD60027F9F81206E9AC00AD01AE02AF039000AB
:100AE600EC1207AD9000EB7401F0800B9000EBE088
:100AF60060057F3012284CE47FE77E03FDFC900002
:100B0600ECE0F8A3E0F9A3E0FAA3E0FBD31207892F
:100B16005003020BA3E47BE87A03F9F89000ECE0BB
:100B2600FCA3E0FDA3E0FEA3E0FF1206E9E47B0AD6
:100B3600FAF9F8D3120789E47BE87A034017F890AC
:100B460000ECE0FCA3E0FDA3E0FEA3E0FF1206E953
:100B5600EF24308016F9F89000ECE0FCA3E0FDA34A
:100B6600E0FEA3E0FF1206E9EF2457FF12284C909F
:100B760000ECE0FCA3E0FDA3E0FEA3E0FFE47BE8DD
:100B86007A03F9F81206E9AC00AD01AE02AF0390A4
:100B960000EC1207AD9000EB7401F0800B9000EBB7
:100BA600E060057F3012284CE47F63FEFDFC900078
:100BB600ECE0F8A3E0F9A3E0FAA3E0FBD31207897F
:100BC6005003020C50E47B64FAF9F89000ECE0FC68
:100BD600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA28
:100BE600F9F8D3120789E47B644017F89000ECE02B
:100BF600FCA3E0FDA3E0FEA3E0FF1206E9EF24302C
:100C06008017FAF9F89000ECE0FCA3E0FDA3E0FE03
:100C1600A3E0FF1206E9EF2457FF12284C9000ECE0
:100C2600E0FCA3E0FDA3E0FEA3E0FFE47B64FAF9A9
:100C3600F81206E9AC00AD01AE02AF039000EC126B
:100C460007AD9000EB7401F0800B9000EBE06005BF
:100C56007F3012284CE47B0AFAF9F89000ECE0FCAD
:100C6600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA97
:100C7600F9F8D3120789E44017F89000ECE0FCA3DA
:100C8600E0FDA3E0FEA3E0FF1206E9EF24308019A1
:100C96007B0AFAF9F89000ECE0FCA3E0FDA3E0FE85
:100CA600A3E0FF1206E9EF2457FF12284CE47B0A63
:100CB600FAF9F89000ECE0FCA3E0FDA3E0FEA3E067
:100CC600FF1206E9AC00AD01AE02AF03E47B0AFAFF
:100CD600F9F8D3120789E44017F89000ECE0FCA37A
:100CE600E0FDA3E0FEA3E0FF1206E9EB2430801945
:100CF6007B0AFAF9F89000ECE0FCA3E0FDA3E0FE25
:0D0D0600A3E0FF1206E9EB2457FF12284C72
:010D130022BD
:0B17A40090007AEBF0A3EAF0A3E9F05C
:1017AF009000A51207B900000000E49000A9F0A373
:1017BF00F0F9A3C9F0A3F0A3E9F0E4A3F0F9A3C9EA
:1017CF00F0A3F0A3E9F0A37401F0A37400F0A374E5
:1017DF007DF090007AE0F9A3E0FAA3E09000AFC9A2
:1017EF00F0A3EAF0A3E9F09000AFE0FBA3E0FAA3C7
:1017FF00E0F912051270030218D564256003021870
:10180F00BB9000AFA3E475F001120607A9F0FA121E
:10181F00051224DB70030218A924E1602B24EC606D
:10182F005024F4602324EC6048241570729000B2A9
:10183F00E0FBA3E475F00212061DA9F0FA120633BD
:10184F009000AEF0E0FF80549000B2E0FBA3E4758F
:10185F00F00112061DA9F0FA120512FF9000A9E47B
:10186F00F0A3EFF09000A9A3E0FF7E001222DB802F
:10187F002E9000B2E0FBA3E475F00112061DA9F053
:10188F00FA120512FF9000A9E4F0A3EFF09000A95F
:10189F00E0FEA3E0FF12202E80057F2512284C903A
:1018AF0000B0E475F0011206070217F69000AFE0E2
:1018BF00FBA3E475F00112061DA9F0FA120512FF41
:0F18CF0012284C0217F69000B2E4F0A3F0A3F039
:0118DE0022E7
:1000030002034BE86480F8E933E83360110460F0DD
:10001300ED33EC337009E8FCE9FDEAFEEBFF220463
:1000230060DED3EB9FEA9EE99DE8C2E78CF0C2F75E
:1000330095F0400CE8CCF8E9CDF9EACEFAEBCFFB2A
:1000430012031685D0F05804700320D5B3E804706A
:10005300075002B2D502035592D5EC0460F7E4CC05
:10006300C0E0C398F8603B94186008400DD0E0FBF3
:1000730002032DE4FBFAC9FC8028E830E406E4C956
:10008300FBE4CAFCE830E305E4C9CACBFCE8540747
:100093006010F8C3E913F9EA13FAEB13FBEC13FC52
:1000A300D8F130F52FC3E49CFCEF9BFFEE9AFEEDF5
:1000B30099FDD0E0FBEF4E4D4C701222DB0302039F
:1000C30052EC2CFCEF33FFEE33FEED33FDED30E766
:1000D300EB02032DEF2BFFEE3AFEED39FDD0E0FBF3
:1000E30050130BBB0003020355ED13FDEE13FEEF9C
:0800F30013FFEC13FC02032DC6
:1000FB00EC4D6011E8497017ED33EC3304600DE4FF
:10010B00FCFFFEFD22E933E8330470F802034B12C7
:10011B00031658046009E4CC2481500628500902C8
:10012B000355284003020352C0E0EB4A7044B980E8
:10013B0006D0E0FB020341EF4E701CBD8008EBFFC5
:10014B00EAFEE9FD80EBE98DF0A4FEE5F00201E4A7
:10015B00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE89DF
:10016B00F0A42EFFE435F0CD89F0A42DFEE435F09C
:10017B008067EF4E7005BD80D780C3EF8BF0A4ACCA
:10018B00F0EE8BF0A42CFCE435F0F8EF8AF0A42C05
:10019B00E5F038FCE433CB8DF0A42CFCE5F03BF818
:1001AB00EE8AF0A42CFCE5F038F8E433CF89F0A408
:1001BB002CFCE5F038CF3400CE89F0A42FFFE5F00E
:1001CB003EFEE433C98DF0A42EFEE5F039CD8AF066
:1001DB00A42FFFE5F03EFEE43DFD33D0E0FB5007DE
:1001EB000BBB000F020355EC2CFCEF33FFEE33FE81
:0601FB00ED33FD02032DAF
:10020100020355EC5D046005E85904700302034BD9
:10021100120316580460F6EC4860F2EC7004FDFE1F
:10022100FF22C860DB2481C85009C39860025006D0
:100231000203529850CAF582E9294B4A7005AB82F4
:1002410002034175F0007C1A7880C3EF9BEE9AEDB2
:1002510099400DC3EF9BFFEE9AFEED99FDE842F048
:10026100DC23ACF0D0E0FFD0E0FED0E0FDAB82209B
:10027100E7101BEB60BAEC2CFCEF33FFEE33FEED25
:1002810033FD02032DE803F830E705C0F075F000F7
:10029100EF2FFFEE33FEED33FD40B830E7C280AA09
:1002A10075F020800E75F010800575F0087D007ED8
:1002B100007F003392D530D50312077BEC33401019
:1002C100EF33FFEE33FEED33FDEC33FCD5F0ED22E1
:0E02D100E5F0247EA2D513CC92E7CDCEFF221D
:1002DF00EDD2E7CD33EC3392D524814006E4FFFE17
:1002EF00FDFC22FCE4CFCECDCC24E0501174FF8076
:1002FF00EDC3CC13CCCD13CDCE13CECF13CF047013
:07030F00F030D5DE02077B90
:100D1400E50824BAF582E43400F583E0050822905E
:100D240000B73007039000BAE475F0011207EA0235
:100D340005122000E97F2ED2008018EF540F249072
:100D4400D43440D4FF30040BEF24BFB41A00500352
:100D54002461FFE50960021509050CE50C70020524
:100D64000B30070E9000B7E475F0011207EAEF02AA
:100D7400055802265B7403D2078003E4C207F50812
:100D84009000B7120801E4F509F50BF50CE50960CC
:100D9400077F20120D5780F5750AFFC201C200C2F9
:100DA40002C203C205C206C208120D23FF700D3031
:100DB40007057F00120D68AF0CAE0B22B4255FC28D
:100DC400D5C204120D23FF24D0B40A00501A75F0C2
:100DD4000A780930D50508B6FF0106C6A426F62010
:100DE400D5047002D20380D924CFB41A00EF500482
:100DF400C2E5D20402105AD20180C6D20080C0D209
:100E04000280BCD2D580BAD20580B47F20120D579F
:100E14002002077401B5090040F1120D14FF120DF0
:100E240057020D91D208D2068095120D14FB120DB3
:100E340014FA120D14F94A4B700679587A117BFF93
:100E440020022EE509602A7E008E82758300120539
:100E54002B60060EEE650A70F0C2D5EBC0E0EAC066
:100E6400E0E9C0E0EE1210BBD0E0F9D0E0FAD0E047
:100E7400FB120512FF60AAEBC0E0EAC0E0E9C0E0A3
:100E8400120D57D0E02401F9D0E03400FAD0E0FB91
:100E9400E50A0460DCD50AD98087D20280A2121048
:100EA4009D60F7E50A700104120360A90A600DE56C
:100EB4000A600914F50A121145EF60F3EA30E702FB
:100EC400F404C3995079EAF4250A0430E701E404F0
:100ED400F50A800D12109D60C1EA050A250A120365
:100EE40060EA9000E6F030E701E4250A04D50A043C
:100EF400200501141210BBE4C0E01211459000E675
:100F0400E0601320E70714F0120D3F802204F0D0B4
:100F1400E014C0E07F00120D3FE50A6007120D36B1
:100F2400150A800B300503120D36D0E0020D91D066
:100F3400E00480C412109D609EE50A0412036090D0
:100F440000E6EAF0E50A2005026001042404121018
:010F5400BBE1
:100F550074FF04C0E0121145120D3FE50A20050299
:100F65006003120D36D0E0B50AE87F45120D4990B1
:100F750000E6E07F2B30E7047F2DF404C0E0120D7E
:100F850057D0E075F00A84C0F0120D40D0E0120D84
:100F950040020D91791080027908C206C2088008C6
:100FA500D2D5790A8004790AC2D5E50A047002F51A
:100FB5000AE4FAFDFEFF120D14FC7B082001131252
:100FC5000D14FD7B1030000A120D14FE120D14FFD6
:100FD5007B20EC3382D592D55013C3E43000069FB5
:100FE500FFE49EFEE42001039DFDE49CFCE4CBF8B8
:100FF500C201EC700CCFCECDCCE824F8F870F380AC
:1010050017C3EF33FFEE33FEED33FDEC33FCEB336B
:10101500FB994002FB0FD8E9EB300105F8D0E0C49D
:1010250048B201C0E00AEC4D4E4F78207B0070C2FB
:10103500EAB50A0040BCC0E01210BDD0F0D0E020F7
:101045000104C4C0E0C4B201C0F0120D40D0F0D517
:10105500F0EB020D9112080A0E2E530F99580DFF51
:101065004C0DFB420F9D4F0FA5440FA5490E144390
:101075000FAB550ED8460F38450EA2471178500EC6
:10108500032D0E072E0E2A2B0E0B230E2820116181
:101095002A0DC34800000E22E50AB4FF03750A06AF
:1010A500120D14FC120D14FD120D14FE120D14FF79
:1010B5009000DF02039D790AA2D5200314300509AB
:1010C500B910020404B9080104A2D5200602500192
:1010D500042002689202B509005034C0E07F203038
:1010E50003197F30A20272067205500F121114C245
:1010F50002C206C205C2087F30800F300503E9C071
:10110500E0120D57300503D0E0F9D0E0B509CC3039
:1011150005177F30B9100C120D577F583004077F23
:10112500788003B90803120D573002057F2D020D93
:10113500577F202008F87F2B2006F322920280CFCC
:101145007F00B40700500B24DFF582E43400F583FB
:10115500E0FF22286E756C6C2900D201120D143047
:1011650001F8C201780930D50108F6020DC32D50EA
:10117500434958120D142403B405004001E49011AD
:101185007393120D48743A120D48D203750904027F
:021195000F99B0
:10031600E9D2E7C933E833F892D5EDD2E7CD33EC2D
:0703260033FC5002B2D522A6
:10032D00EC30E7100FBF000C0EBE00080DBD000431
:10033D000BEB6014A2D5EB13FCED92E7FD2274FFDD
:10034D00FCFDFEFF22E480F8A2D574FF13FC7D8036
:03035D00E480EF4A
:10036000F920E73624F950037907E4F42402FBE589
:1003700082158270021583DBF6E024FB501BE960D6
:1003800014E4F0E582158270021583E004F0B40AEB
:0D03900008E4F0D9EE7401F00A22C2D52273
:10039D00ED33EC3392D5FA602AB4FF33EDC2E77B2F
:1003AD00FF60067A0379C2E4227A0379CB20D50463
:1003BD007A0379C6224E614E002B494E46002D49D7
:1003CD004E4600E47A08F0A3DAFC7B00740722C0E5
:1003DD0083C082ECC0E0EDC0E0EEC0E0EFC0E0EA2B
:1003ED0075F010A4CAABF075F04DA42BFBE435F0FD
:1003FD00FCEA2410FAEB34C5FBEC34D9FCEDC2E772
:10040D00FF75F056A4F42411C5F0F434C58FF0A493
:10041D002AE5F03BE43CF020E7141204D2D0E0FFD3
:10042D00D0E0FED0E0FDD0E0FC1202048014F40414
:10043D001204D2D0E0FFD0E0FED0E0FDD0E0FC12FF
:10044D0000FBD082D083E0FAEDD2E7CD33EC33243C
:10045D0082FBE4C3CF33CFCE33CECD33CD33DBF3FD
:10046D007B0775F00A846004F0A31B0AE5F0F0A386
:10047D008FF0740AA4FFACF08EF0740AA42CFEACBD
:10048D00F050010C8DF0740AA42CFDE435F0F0A3AE
:05049D00DBDE74072204
:1004A2003F8000004120000042C80000447A000062
:1004B200461C400047C35000497424004B189680E4
:1004C2004CBEBC205A0E1BCA6753C21C749DC5AEDB
:1004D200FB60065407601C2323120500EB543860AE
:1004E200091204EC1204FB1200FBECF8EDF9EEFA2F
:1004F200EFCB22EB1204FB80F1543803241C90044E
:10050200A2FE93FC0EEE93FD0EEE930ECE93FF220F
:101C2000021B7DE493A3F8E493A34003F68001F242
:101C300008DFF48029E493A3F85407240CC8C333C5
:101C4000C4540F4420C8834004F456800146F6DF94
:101C5000E4800B0102040810204080901F34E47ED1
:101C6000019360BCA3FF543F30E509541FFEE49389
:101C7000A360010ECF54C025E060A840B8E493A350
:101C8000FAE493A3F8E493A3C8C582C8CAC583CA7B
:101C9000F0A3C8C582C8CAC583CADFE9DEE780BE33
:011FB300002D
:10051200BB010689828A83E0225002E722BBFE02E7
:09052200E32289828A83E493221A
:10052B00BB010CE58229F582E5833AF583E0225085
:10053B0006E92582F8E622BBFE06E92582F8E222CF
:0D054B00E58229F582E5833AF583E49322E9
:10055800BB010689828A83F0225002F722BBFE0182
:02056800F3227C
:10056A00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EA5
:02057A00FE225F
:10057C00BC000BBE0029EF8DF084FFADF022E4CC63
:10058C00F875F008EF2FFFEE33FEEC33FCEE9DEC2C
:10059C00984005FCEE9DFE0FD5F0E9E4CEFD22ED72
:1005AC00F8F5F0EE8420D21CFEADF075F008EF2FBC
:1005BC00FFED33FD4007985006D5F0F222C398FDAD
:0505CC000FD5F0EA224A
:1005D100C2D5EC30E709B2D5E4C39DFDE49CFCEE45
:1005E10030E715B2D5E4C39FFFE49EFE12057CC33C
:1005F100E49DFDE49CFC800312057C30D507C3E437
:060601009FFFE49EFE22B3
:10060700C5F0F8A3E028F0C5F0F8E582158270027E
:060617001583E038F0221B
:10061D00A3F8E0C5F025F0F0E58215827002158390
:06062D00E0C838F0E822ED
:10063300BB010A89828A83E0F5F0A3E02250068792
:10064300F009E71922BBFE07E3F5F009E319228954
:0B065300828A83E493F5F07401932287
:10065E00E88FF0A4CC8BF0A42CFCE98EF0A42CFC3B
:10066E008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4B9
:10067E002DCC3825F0FDE98FF0A42CCD35F0FCEB18
:10068E008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39DD
:0F069E00FEE43CFCEAA42DCE35F0FDE43CFC224A
:1006AD0075F008758200EF2FFFEE33FECD33CDCC04
:1006BD0033CCC58233C5829BED9AEC99E582984087
:1006CD000CF582EE9BFEED9AFDEC99FC0FD5F0D664
:1006DD00E4CEFBE4CDFAE4CCF9A88222B800C1B98E
:1006ED000059BA002DEC8BF084CFCECDFCE5F0CBCC
:1006FD00F97818EF2FFFEE33FEED33FDEC33FCEB05
:10070D0033FB10D703994004EB99FB0FD8E5E4F9BF
:10071D00FA227818EF2FFFEE33FEED33FDEC33FCAC
:10072D00C933C910D7059BE99A4007EC9BFCE99AA0
:10073D00F90FD8E0E4C9FAE4CCFB2275F010EF2FE5
:10074D00FFEE33FEED33FDCC33CCC833C810D707E5
:10075D009BEC9AE899400AED9BFDEC9AFCE899F820
:0E076D000FD5F0DAE4CDFBE4CCFAE4C8F922B3
:0E077B00C3E49FFFE49EFEE49DFDE49CFC228F
:10078900EB9FF5F0EA9E42F0E99D42F0E89C45F0C6
:01079900223D
:10079A00E8600FECC313FCED13FDEE13FEEF13FF3D
:0307AA00D8F12261
:0C07AD00ECF0A3EDF0A3EEF0A3EFF022BF
:1007B900A8828583F0D083D0821207D01207D01285
:1007C90007D01207D0E473E493A3C583C5F0C583AA
:1007D900C8C582C8F0A3C583C5F0C583C8C582C88A
:0107E90022ED
:1007EA00F8E0FBA3A3E0F925F0F0E5821582700298
:0707FA001583E0FA38F0223C
:09080100EBF0A3EAF0A3E9F022F8
:10080A00D083D082F8E4937012740193700DA3A37D
:10081A0093F8740193F5828883E473740293686091
:06082A00EFA3A3A380DF91
:10265B00EFB40A07740D122666740A309811A89904
:10266B00B8130CC2983098FDA899C298B811F630DF
:07267B0099FDC299F59922B7
:00000001FF
@@ -1,709 +0,0 @@
:03000000021C627D
:0C1C6200787FE4F6D8FD758122021CA9F1
:10214A009000F61207AD538EF7438901D28CE4FF53
:10215A00FEFDFC9000F6E0F8A3E0F9A3E0FAA3E0A4
:10216A00FBC3120789602F758A7E758CFF308DFD3F
:10217A00C28D9000F6E0FCA3E0FDA3E0FEA3E024FC
:10218A00FFFFEE34FFFEED34FFFDEC34FFFC900060
:09219A00F61207AD80B8C28C22D8
:1021A3009000BB1207AD538EF7438901D28CE4FF35
:1021B300FEFDFC9000BBE0F8A3E0F9A3E0FAA3E086
:1021C300FBC3120789602F758ACA758CFA308DFD9F
:1021D300C28D9000BBE0FCA3E0FDA3E0FEA3E024DE
:1021E300FFFFEE34FFFEED34FFFDEC34FFFC900007
:0921F300BB1207AD80B8C28C22BA
:0927DF00300103D28322C28322DF
:0727AA007F031227D4D201C6
:0927B100300103D28422C284220B
:07280000A283920BA20B2240
:1026FA00E4FDFCC3ED9FEC9E5015E4FBFA0BBB0016
:0F270A00010ABA01F8BBF4F50DBD00010C80E423
:01271900229D
:0A27D400E4FEEEC39F50030E80F8F0
:0127DE0022D8
:10267200D2011227DF7F011227AC7F0A1227D4C2B0
:10268200011227DF7F071227D4C2011227B17F016F
:032692000227D448
:10276E00C2011227DF7F021227AC7F0A1227D4D2B2
:07277E00011227DF0227D43E
:02225500AD07D3
:10225700E4FCEDA804088002C333D8FC30E704D2BD
:10226700018002C2011227DF1227AA0F1227D4C248
:10227700011227B10CECB408D97F011227D4D2017F
:102287001227DF1227AA1227D41228005004C20EE1
:0E2297008002D20EC2011227B17F030227D4AB
:10240300E4FDD2011227DFFC7F011227D4C201129F
:1024130027B17F041227AC7F021227D4ED25E0FDFC
:1024230012280050010D7F021227D40CECB408D8F7
:0C243300C2011227B17F051227D4AF05AB
:01243F00227A
:10271A00200004C2018002D2011227DF7F0812279B
:10272A00AC7F0F1227D4C2011227B17F080227D427
:0720E200900080EDF0AC0757
:1020E900122672AF04122255200E0280339000800E
:1020F900E0FF122255200E028026E4900086F0A30C
:10210900F0900084E0FEA3E0FFC3900087E09F9079
:102119000086E09E5026120512FF122255200E0558
:1021290012276EC322740129F9E43AFA900087E074
:1021390004F070CD900086E004F080C512276ED3BC
:012149002273
:081F7E0090007FEFF0A3EDF0ED
:101F860012267290007FE0FF122255200E02801C5E
:101F9600900080E0FF122255200E02800F1226725A
:101FA60090007FE004FF122255200E0912276EE4EE
:101FB600120558C322E4900085F0900084E014FFD7
:101FC600A3E0C39F501B122403EF120558C2001250
:101FD600271A740129F9E43AFA900085E004F080A2
:101FE600D9122403EF120558D20012271A12276EAF
:011FF600D317
:011FF70022C7
:0225FE00AE0726
:10260000E490007EF0900100E0FFAD067B017A00CF
:10261000797E9000847401F0121F7E4002D20D90EA
:04262000007EE0FF59
:012624002293
:02275500AE07CD
:10275700900100E0FFAD069000F5E0900084F012D4
:062767001F7E9210A2107B
:01276D002249
:10264C0090007EEDF0AE07900100E0FFAD067B013F
:10265C007A00797E900084E4F0A304F01220E2402A
:06266C0002D20DA20D22B6
:10269500AE07AD079000EFE0FFA3E0900084CFF018
:1026A500A3EFF0900100E0FF1220E24002D20DA25C
:0226B5000D22F4
:10233A000D0A202A2A2A2A2A2A2A2A2A2A2A2A2A3A
:10234A002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AE3
:10235A002A000D0A4820746F61746C20636E742021
:10236A003A20000D0A5620746F61746C203A2000DE
:04237A000D0A200028
:081EFE004100FEFF4100FFFF5F
:1021FC009001007490F07DFF7F0830091E12264C70
:10220C007DFF7F0912264C7DFF7F0A12264C7D7CB8
:10221C007F0B12264C7DFF7F0C802A12264C7D8171
:10222C007F0912264C7DFF7F0A12264C7D647F0BA2
:10223C0012264C7DFF7F0C12264C7D317F441226DA
:09224C004C7D1F7F5112264C222B
:10252A009001007490F07DA17F3112264C7DBF7F0F
:10253A003212264C7D177F3312264CE4FD7F371268
:10254A00264C7D227F3812264C7D827F6012264CD3
:07255A00E4FD7F3A02264C6C
:102597009001007490F07D457F3912264CE4FD7F51
:1025A7003B12264C900000E02496FD7F3E12264CFD
:1025B7007D147F3F12264C7D3C7F4112264C7D7C4B
:0525C7007F4002264CDC
:1026B7009001007490F07D317F4412264C7D447F59
:1026C7005512264C7D017F5712264C7D027F5A02F8
:0226D700264C8F
:1022F4009001007492F07D017F1012264C7D087FBE
:102304001112264C7D047F1212264C900002E054D8
:1023140003FD7F1312264CE4FD7F1412264C90001B
:1023240079E0FD7F1512264C7D037F1A12264C7D21
:06233400037F1B02264C92
:101197009001007492F09000FEE0C454F02423F50F
:1011A70082E43400F583A3E0FD7F1812264C9000FB
:1011B700FEE0C454F02425F582E43400F583A3E06F
:1011C700FD7F1912264C9000FEE0C454F02419F557
:1011D70082E43400F583A3E0FD7F1C12264C9000C7
:1011E700FEE0C454F02419F582E43400F583E0FDF1
:1011F7007F1D12264C7D677F1E12264C7D0C7F2F8C
:1012070012264C9000FEE0C454F0241DF582E4340D
:1012170000F583A3E0FD7F3412264C9000FEE0C466
:1012270054F0241DF582E43400F583E0FD7F351288
:10123700264C9000FEE0C454F0241FF582E43400ED
:10124700F583A3E0FD7F3612264C9000FEE0C454E0
:10125700F0241FF582E43400F583E0FD7F37122682
:101267004C9000FEE0C454F02427F582E43400F5E6
:1012770083A3E0FD7F3812264C9000FEE0C454F0B3
:101287002427F582E43400F583E0FD7F3912264CEC
:101297009000FEE0FFC454F0241BF582E43400F50F
:1012A70083E0FCA3E0FDEFC454F0241FF582E4348F
:1012B70000F583E0FEA3E0C39DFFEE9CFE9000FED9
:1012C700E0FDC454F02427F582E43400F583E0FA06
:1012D700A3E0FBC3EF9BFFEE9AFEEDC454F0242579
:1012E700F582E43400F583E0FCA3E0FDC3EF9DFF46
:1012F700EE9CAD077F3A12264C9000FEE0FFC454E7
:10130700F0241BF582E43400F583E0FCA3E0FDEF55
:10131700C454F0241FF582E43400F583E0FEA3E013
:10132700C39DFFEE9CFE9000FEE0FDC454F0242711
:10133700F582E43400F583E0FAA3E0FBC3EF9BFFFB
:10134700EE9AFEEDC454F02425F582E43400F583CB
:10135700E0FCA3E0FDC3EF9DEE9CFD7F3B12264C16
:101367009000FEE0C454F02421F582E43400F583B4
:10137700A3E0FD7F3C12264C9000FEE0C454F0240D
:1013870021F582E43400F583E0FD7F3D12264C9081
:1013970000FEE0FFC454F02419F582E43400F5831D
:1013A700E0FCA3E0FDEFC454F0241DF582E4340013
:1013B700F583E0FEA3E0C39DFFEE9CFE9000FEE0F8
:1013C700FDC454F02421F582E43400F583E0FAA348
:1013D700E0FBC3EF9BFFEE9AFEEDC454F02423F528
:1013E70082E43400F583E0FCA3E0FDC3EF9DFFEE4C
:1013F7009CAD077F3E12264C9000FEE0FFC454F0E0
:101407002419F582E43400F583E0FCA3E0FDEFC482
:1014170054F0241DF582E43400F583E0FEA3E0C315
:101427009DFFEE9CFE9000FEE0FDC454F02421F5E4
:1014370082E43400F583E0FAA3E0FBC3EF9BFFEE01
:101447009AFEEDC454F02423F582E43400F583E0DA
:0F145700FCA3E0FDC3EF9DEE9CFD7F3F02264C02
:102561009001007490F07D7F7F0312264C7F0A7EDC
:10257100001226FA7DFF7F0312264C90010074920F
:10258100F07D807F5112264C7F0A7E001226FAE4EC
:06259100FD7F5102264C03
:101634009001007492F07D527F4E12264C7DDE7F25
:101644004F12264C7DC07F5012264C7D807F511254
:10165400264CE4FD7F5112264C7D5E7F1F12264CE2
:101664007D017F2012264C7D2C7F2112264C7D018A
:101674007F2212264C7DFA7F2312264CE4FD7F2420
:1016840012264C7DC87F2512264CE4FD7F261226A7
:101694004C7D5E7F2712264C7D017F2812264C7DCF
:1016A4002C7F2912264C7D017F2A12264C7DFA7F3D
:1016B4002B12264CE4FD7F2C12264C7DC87F2D1264
:1016C400264CE4FD7F2E12264C9001007490F07D90
:1016D4007F7F0312264C7F0A7E001226FA7DFF7F4D
:1016E4000312264C9001007492F0E4FD7F511226FF
:1016F4004C7D647F4212264CE4FD7F4312264C7DD0
:10170400047F4412264CE4FD7F4512264C7D597F0C
:101714004612264CE4FD7F4712264C7DF27F481288
:10172400264C7D067F4912264CE4FD7F4A12264C46
:101734007D727F4B12264C7D457F4C12264CE4FD76
:101744007F4D12264C7D087F5212264CE4FD7F53B8
:1017540012264C7DB27F5412264CE4FD7F5512268E
:101764004C7DE47F5612264C7D0D7F5712264CE4A7
:10177400FD7F5812264C7DE47F5912264C7D8A7FCA
:101784005A12264CE4FD7F5B12264C7D347F5C129A
:10179400264C7D4F7F1E12264CE4FD7F5102264CC1
:10247D009001007490F0900018E0FD7FB212264C90
:10248D009001007494F0300A0B7D097F0612264CE2
:10249D007DF080097D0E7F0612264CE4FD7F07122C
:0A24AD00264C7DD27F3412264C220B
:0D27BA009001007490F07D307F4402264CA9
:0D27C7009001007490F07D317F4402264C9B
:1018DF009001007490F07D247F5012264C7D057F7F
:1018EF005112264C900001E02414FD7F5212264C19
:1018FF00900003E0FEA3E0FF7C007D1912057C7CC5
:10190F00007D0712056AE4FD90007A1207ADE47BB3
:10191F0064FAF9F890007AE0FCA3E0FDA3E0FEA3DF
:10192F00E0FF1206E9E4AD077F6912264CE47B6401
:10193F00FAF9F890007AE0FCA3E0FDA3E0FEA3E043
:10194F00FF1206E9EF2480FD7F6912264CE47B64C9
:10195F00FAF9F890007AE0FCA3E0FDA3E0FEA3E023
:10196F00FF1206E9AF03E4FEFDFC90007A1207AD0B
:10197F0090007AE0FCA3E0FDA3E0FEA3E0FFE4FB10
:10198F007A40F9F812065E90007A1207AD90007A4D
:10199F00E0FCA3E0FDA3E0FEA3E0FFE47B64FAF923
:1019AF00F81206E990007A1207AD90007CE02480CF
:1019BF00FD7F6C12264C90007DE0FD7F6B12264C54
:0E19CF007DFB7F0412264C7DFF7F0402264C18
:101466009001007490F0E4FD7F8012264C7DFF7F92
:101476008112264C7D037F8212264C9000FEE0C42A
:1014860054F02419F582E43400F583A3E0FD7F834C
:1014960012264C9000FEE0C454F02419F582E43480
:1014A60000F583E0FD7F8412264C7D807F85122621
:1014B6004C7D107F8612264C90000BE0FD7F871234
:1014C600264C90000AE0FD7F8812264C900011E021
:1014D600FD7F8912264C90000FE0FD7F8A12264C74
:1014E60090000EE0540175F080A4FF900013E02FE9
:1014F600540FFD7F8B12264C900007E0FD7F8C1267
:10150600264C900009E0FD7F8D12264C900008E0E5
:10151600C454F0FD900006E02DFD7F8E12264C90FF
:1015260000FEE0C454F02419F582E43400F583E0AB
:10153600FCA3E0FDE41202A6E4FBFA798078BF1270
:10154600000AC004C005C006C007900007E024FFDB
:10155600FD900006E034FFFCE41202A6A804A905EB
:10156600AA06AB07D007D006D005D004120204E4C1
:10157600FBFA798078451200FB1202DF90007AEEC2
:10158600F0A3EFF090007BE0FD7F8F12264C9000D9
:101596007AE0FD7F9012264C9000FEE0C454F024C1
:1015A6001BF582E43400F583E0FCA3E0FDE41202BF
:1015B600A6E4FBFA798078BF12000AC004C005C011
:1015C60006C007900009E024FFFD900008E034FF04
:1015D600FCE41202A6A804A905AA06AB07D007D008
:1015E60006D005D004120204E4FBFA79807845128D
:1015F60000FB1202DF90007AEEF0A3EFF090007B82
:10160600E0FD7F9112264C90007AE0FD7F92122633
:101616004C7D9C7F7F12264C900016E0FF900005C3
:0E162600E02FFF900017E02FFD7FA802264C5A
:10273A001221FC12252A1225971226B71222F41208
:0B274A00119712163412247D02256145
:1019DD00E490007AF0A3F0A3F0A3F09001007490CE
:1019ED00F07F9D1225FEEF7F00FEC006C0077F9C95
:1019FD001225FEEFFDD0E02DFED0E0340090007AF0
:101A0D00F0A3CEF07F9F1225FEEF54077F00FEC09E
:101A1D0006C0077F9E1225FEEFFDD0E02DFFD0E022
:101A2D003400FE90007CF0A3EFF0C39402EE94021C
:101A3D004014D3E0942290007CE094025008900072
:101A4D00FE7405F0804190007CE0FEA3E0FFC3949E
:101A5D00E0EE94024011D3EF94FEEE940250089004
:101A6D0000FE7401F08020C3EF9455EE94044011F4
:101A7D00D3EF9475EE940450089000FE7404F0803A
:101A8D00069000FE74FFF07BFF7A23793A1217A4BB
:101A9D007BFF7A23795C1217A490007AE0FEA3E015
:101AAD00FFE4FCFD1208307BFF7A23796D1217A439
:101ABD0090007CE0FEA3E0FFE4FCFD1208307BFF0C
:071ACD007A23797A0217A4C5
:101CEE009001007492F07D127F7212264C7DC07F9F
:101CFE007312264CE4FD7F7412264C7D297F7512DB
:101D0E00264C7D807F7612264C7D387F7712264CAE
:101D1E007D477F7812264C7D987F7912264C7D6503
:101D2E007F7A12264C7D487F7B12264C7D2C7F7C41
:101D3E0012264C7D057F7D12264C7D807F701226EB
:101D4E004C7D767F7112264C7D337F4E12264C7D54
:101D5E00337F4F12264C7DD37F5012264C7D807FD1
:041D6E005102264CAC
:101D72009001007492F07D127F7212264C7D047FD6
:101D82007312264C7D017F7412264C7D197F7512C9
:101D9200264CE4FD7F7612264C7DD07F7712264CAE
:101DA2007D257F7812264C7D727F7912264C7DEE3E
:101DB2007F7A12264C7D267F7B12264C7D287F7CE3
:101DC20012264C7D057F7D12264C7D807F70122667
:101DD2004C7D767F7112264C7D997F4E12264C7D6A
:101DE200997F4F12264C7D697F5012264C7D807F51
:041DF2005102264C28
:101DF6009001007492F07D127F7212264C7D847FD2
:101E06007312264CE4FD7F7412264C7D2C7F7512CE
:101E1600264C7DD07F7612264C7D407F7712264C4D
:101E26007D227F7812264C7D607F7912264C7D714B
:101E36007F7A12264C7D237F7B12264C7D407F7C49
:101E460012264C7D057F7D12264C7D807F701226E2
:101E56004C7D767F7112264C7D667F4E12264C7D18
:101E6600667F4F12264C7D267F5012264C7D807F42
:041E76005102264CA3
:101E7A009001007492F07D127F7212264C7D7A7F57
:101E8A007312264CE4FD7F7412264C7D247F751252
:101E9A00264C7DD07F7612264C7DE07F7712264C29
:101EAA007D127F7812264C7D5A7F7912264C7D0D41
:101EBA007F7A12264C7D237F7B12264C7D3E7F7CC7
:101ECA0012264C7D067F7D12264C7D807F7012265D
:101EDA004C7D767F7112264C7D667F4E12264C7D94
:101EEA00667F4F12264C7D267F5012264C7D807FBE
:041EFA005102264C1F
:101BB9000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB9
:101BC9002A2A2A2A2A2A2A2A73746172742A2A2A10
:101BD9002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A5C
:101BE9002A2A2A2A2A2A000D0A20000D0A2A2A2A24
:101BF9002A2A2A2A2A2A2A2A2A2A2A2A2A2A4C54F0
:101C0900383931324220726573657420646F6E65AC
:101C19002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1B
:101C29002A000D0A2A2A2A2A2A2A2A2A2A2A2A2A72
:101C39002A2A2A2A4C54383931324220496E697489
:101C490069616C20646F6E652A2A2A2A2A2A2A2A3F
:091C59002A2A2A2A2A2A2A2A0032
:101F06006060001902D001E0035A020D003C003E59
:101F16000006001E050002D0067202EE00DC002854
:101F26000005001405000320060A0358008C00244F
:101F360000080018040002580540027B008C0014BB
:101F46000003001407800438089804650094002CE8
:101F560000050024050001E005B40212005000143B
:101F6600000A0014500006050001E005B402120044
:071F7600500014000A0014E2
:1023C20043B10843B20843B11043B21043B10143D1
:1023D200B20143AC0153ADFE43B30853B4F743B368
:1023E2001053B4EF7F007EC27D017C001224F153B2
:1023F200E9FB43E92043EA0853EBF7439B02D2AFE0
:0124020022B7
:072807009001007490F02223
:10279800C2807F647E001226FAD2807F647E0002A7
:0227A80026FA0F
:102440009000187401F0D20AD2099000027404F0CE
:1024500090007974A8F09000007420F0D20C30093C
:102460001B9000037414F0A37450F0E4900001F08A
:0D247000900005F0900016F0A37413F02208
:101AD4001223C27FC87E001226FA7FC87E00122617
:101AE400FA7FC87E001226FA7FC87E001226FA7F8B
:101AF400C87E001226FA7BFF7A1B79B91217A4124A
:101B040028071227987BFF7A1B79F01217A47BFF12
:101B14007A1B79F41217A41224409000FE7404F086
:101B240012273A7BFF7A1B79F01217A47BFF7A1CE9
:101B3400792B1217A47BFF7A1B79F01217A4300CAF
:101B440003121CEE3009101218DF1214667F2C7E6B
:101B5400011226FA1227BA7FC87E001226FA121939
:101B6400DD9000FEE0FF9000FFE06F603FEFF0F4D7
:101B740060343009031227C7121197121634122445
:101B84007D1225619001007492F0E4FD7F701226AD
:101B94004C3009181218DF1214667F2C7E011226AD
:101BA400FA1227BA8006300C03121CEE7F267E023E
:051BB4001226FA80A9D1
:1026D9000A2055494431203D203078256278000A86
:1026E9002055494432203D203078256278003078E1
:0126F90000E0
:1024F10053B1BF53B2BF53B17F53B27F75985043AD
:102501008920438780438E1053C4DFAB07AA06A9F5
:1025110005A8047F407E427D0F7C001206E9EF048E
:09252100F404F58DD28ED299224A
:10206F009000FA1207AD53B1BF53B2BF53B17F53B4
:10207F00B27F75985043878053C4F843C4209000B3
:10208F00FAE0F8A3E0F9A3E0FAA3E0FB7F407E4279
:10209F007D0F7C001206E9C374FF9FFF74FF9EFE45
:1020AF00E49DFDE49CFC780812079A8FC69000FA15
:1020BF00E0F8A3E0F9A3E0FAA3E0FB7F407E427DC6
:1020CF000F7C001206E9C374FF9FFF8FC543C4083E
:0320DF00D2992271
:0727E8003098FDAF99C29883
:0127EF0022C7
:0827F000C2998F993099FD2276
:1024B700EF540FFEEF54F0C4540FFFEEC3940AEE2F
:1024C70050052430FD80032437FDAE05EFC3940A81
:1024D700EF50052430FD80032437FDAF051227F0A8
:0A24E700AF061227F07F200227F055
:05280E007F0A0227F023
:03281300020D7F34
:10278500AB07AA06EEFF1224B7AF031224B77F0AE0
:032795000227F028
:0827F8001227F07F200227F0F8
:10237E00A2AF920FC2AF75C7AA75C755439F01A2F0
:10238E000F92AF8FA6E4F5A775AF04A2AF920FC25E
:10239E00AF75C7AA75C75543A401A20F92AFAFAED2
:1023AE00A2AF920FC2AF75C7AA75C755539FFEA2B3
:0323BE000F92AFCC
:0123C10022F9
:1025CC007F0212237EAE077F0512237E900101EF5E
:1025DC00F07BFF7A2679D9AF069000BEEFF0120D92
:1025EC007F7BFF7A2679E8900101E09000BEF00233
:0225FC000D7F51
:032816000227F0A6
:1022A500AB07AA067C007D0A1205D1C3EF940AEE9E
:1022B500648094805005EF2430800E7C007D0AAF49
:1022C50003AE021205D1EF2457FF1228167C007DBC
:1022D5000AAF03AE021205D1C3ED940AEC648094F3
:0F22E50080ED5004243080022457FF1228162267
:101FF8009000B9EEF0A3EFF07BFF7A2679F7120D87
:102008007F7F027E007D007C001221A39000B9E052
:10201800FEA3E0FF7C007D101205D1C3EF940AEE09
:10202800648094805005EF243080129000B9E0FE5F
:10203800A3E0FF7C007D101205D1EF2457FF122882
:10204800169000B9E0FEA3E0FF7C007D101205D1D8
:10205800C3ED940AEC64809480ED5004243080022F
:072068002457FF1228162285
:0608300090007E1207ADEE
:10083600E4900082F0A31207B90000000090007E49
:10084600E0FCA3E0FDA3E0FEA3E0FF900083120717
:10085600AD7F201228167F7F7E967D987C009000C3
:1008660083E0F8A3E0F9A3E0FAA3E0FBD31207893B
:10087600407A7B807A9679987800900083E0FCA392
:10088600E0FDA3E0FEA3E0FF1206E9E47B0AFAF925
:10089600F8D31207897B807A96799878009000833E
:1008A600E0FCA3E0FDA3E0FEA3E0FF40081206E99A
:1008B600EF243080061206E9EF2457FF122816901F
:1008C6000083E0FCA3E0FDA3E0FEA3E0FF7B807ACB
:1008D60096799878001206E9AC00AD01AE02AF0336
:1008E6009000831207AD9000827401F07F3F7E4234
:1008F6007D0F7C00900083E0F8A3E0F9A3E0FAA363
:10090600E0FBD3120789407C7B407A42790F78005E
:10091600900083E0FCA3E0FDA3E0FEA3E0FF120647
:10092600E9E47B0AFAF9F8D31207897B407A42791F
:100936000F7800900083E0FCA3E0FDA3E0FEA3E0B7
:10094600FF40081206E9EF243080061206E9EF247C
:1009560057FF122816900083E0FCA3E0FDA3E0FEFB
:10096600A3E0FF7B407A42790F78001206E9AC00DB
:10097600AD01AE02AF039000831207AD9000827402
:1009860001F0800B900082E060057F301228167F10
:100996009F7E867D017C00900083E0F8A3E0F9A3AA
:1009A600E0FAA3E0FBD31207895003020A417BA0B9
:1009B6007A8679017800900083E0FCA3E0FDA3E04D
:1009C600FEA3E0FF1206E9E47B0AFAF9F8D3120760
:1009D600897BA07A864019097800900083E0FCA301
:1009E600E0FDA3E0FEA3E0FF1206E9EF2430801845
:1009F60079017800900083E0FCA3E0FDA3E0FEA36C
:100A0600E0FF1206E9EF2457FF122816900083E054
:100A1600FCA3E0FDA3E0FEA3E0FF7BA07A867901BC
:100A260078001206E9AC00AD01AE02AF0390008378
:100A36001207AD9000827401F0800B900082E06096
:100A4600057F30122816E47F0F7E27FDFC90008379
:100A5600E0F8A3E0F9A3E0FAA3E0FBD3120789507C
:100A660003020AF2E47B107A27F9F8900083E0FC8F
:100A7600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA89
:100A8600F9F8D3120789E47B107A274017F890000B
:100A960083E0FCA3E0FDA3E0FEA3E0FF1206E9EF7E
:100AA60024308016F9F8900083E0FCA3E0FDA3E073
:100AB600FEA3E0FF1206E9EF2457FF122816900066
:100AC60083E0FCA3E0FDA3E0FEA3E0FFE47B107A55
:100AD60027F9F81206E9AC00AD01AE02AF039000AB
:100AE600831207AD9000827401F0800B900082E0C3
:100AF60060057F30122816E47FE77E03FDFC900038
:100B060083E0F8A3E0F9A3E0FAA3E0FBD312078998
:100B16005003020BA3E47BE87A03F9F8900083E024
:100B2600FCA3E0FDA3E0FEA3E0FF1206E9E47B0AD6
:100B3600FAF9F8D3120789E47BE87A034017F890AC
:100B46000083E0FCA3E0FDA3E0FEA3E0FF1206E9BC
:100B5600EF24308016F9F8900083E0FCA3E0FDA3B3
:100B6600E0FEA3E0FF1206E9EF2457FF12281690D5
:100B76000083E0FCA3E0FDA3E0FEA3E0FFE47BE846
:100B86007A03F9F81206E9AC00AD01AE02AF0390A4
:100B960000831207AD9000827401F0800B900082F2
:100BA600E060057F30122816E47F63FEFDFC9000AE
:100BB60083E0F8A3E0F9A3E0FAA3E0FBD3120789E8
:100BC6005003020C50E47B64FAF9F8900083E0FCD1
:100BD600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA28
:100BE600F9F8D3120789E47B644017F8900083E094
:100BF600FCA3E0FDA3E0FEA3E0FF1206E9EF24302C
:100C06008017FAF9F8900083E0FCA3E0FDA3E0FE6C
:100C1600A3E0FF1206E9EF2457FF1228169000837F
:100C2600E0FCA3E0FDA3E0FEA3E0FFE47B64FAF9A9
:100C3600F81206E9AC00AD01AE02AF0390008312D4
:100C460007AD9000827401F0800B900082E0600591
:100C56007F30122816E47B0AFAF9F8900083E0FC4C
:100C6600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA97
:100C7600F9F8D3120789E44017F8900083E0FCA343
:100C8600E0FDA3E0FEA3E0FF1206E9EF24308019A1
:100C96007B0AFAF9F8900083E0FCA3E0FDA3E0FEEE
:100CA600A3E0FF1206E9EF2457FF122816E47B0A99
:100CB600FAF9F8900083E0FCA3E0FDA3E0FEA3E0D0
:100CC600FF1206E9AC00AD01AE02AF03E47B0AFAFF
:100CD600F9F8D3120789E44017F8900083E0FCA3E3
:100CE600E0FDA3E0FEA3E0FF1206E9EB2430801945
:100CF6007B0AFAF9F8900083E0FCA3E0FDA3E0FE8E
:0D0D0600A3E0FF1206E9EB2457FF122816A8
:010D130022BD
:0B17A40090007EEBF0A3EAF0A3E9F058
:1017AF009000A91207B900000000E49000ADF0A36B
:1017BF00F0F9A3C9F0A3F0A3E9F0E4A3F0F9A3C9EA
:1017CF00F0A3F0A3E9F0A37401F0A37400F0A374E5
:1017DF0081F090007EE0F9A3E0FAA3E09000B3C996
:1017EF00F0A3EAF0A3E9F09000B3E0FBA3E0FAA3C3
:1017FF00E0F912051270030218D564256003021870
:10180F00BB9000B3A3E475F001120607A9F0FA121A
:10181F00051224DB70030218A924E1602B24EC606D
:10182F005024F4602324EC6048241570729000B6A5
:10183F00E0FBA3E475F00212061DA9F0FA120633BD
:10184F009000B2F0E0FF80549000B6E0FBA3E47587
:10185F00F00112061DA9F0FA120512FF9000ADE477
:10186F00F0A3EFF09000ADA3E0FF7E001222A58061
:10187F002E9000B6E0FBA3E475F00112061DA9F04F
:10188F00FA120512FF9000ADE4F0A3EFF09000AD57
:10189F00E0FEA3E0FF121FF880057F2512281690A7
:1018AF0000B4E475F0011206070217F69000B3E0DA
:1018BF00FBA3E475F00112061DA9F0FA120512FF41
:0F18CF001228160217F69000B6E4F0A3F0A3F06B
:0118DE0022E7
:1000030002034BE86480F8E933E83360110460F0DD
:10001300ED33EC337009E8FCE9FDEAFEEBFF220463
:1000230060DED3EB9FEA9EE99DE8C2E78CF0C2F75E
:1000330095F0400CE8CCF8E9CDF9EACEFAEBCFFB2A
:1000430012031685D0F05804700320D5B3E804706A
:10005300075002B2D502035592D5EC0460F7E4CC05
:10006300C0E0C398F8603B94186008400DD0E0FBF3
:1000730002032DE4FBFAC9FC8028E830E406E4C956
:10008300FBE4CAFCE830E305E4C9CACBFCE8540747
:100093006010F8C3E913F9EA13FAEB13FBEC13FC52
:1000A300D8F130F52FC3E49CFCEF9BFFEE9AFEEDF5
:1000B30099FDD0E0FBEF4E4D4C701222DB0302039F
:1000C30052EC2CFCEF33FFEE33FEED33FDED30E766
:1000D300EB02032DEF2BFFEE3AFEED39FDD0E0FBF3
:1000E30050130BBB0003020355ED13FDEE13FEEF9C
:0800F30013FFEC13FC02032DC6
:1000FB00EC4D6011E8497017ED33EC3304600DE4FF
:10010B00FCFFFEFD22E933E8330470F802034B12C7
:10011B00031658046009E4CC2481500628500902C8
:10012B000355284003020352C0E0EB4A7044B980E8
:10013B0006D0E0FB020341EF4E701CBD8008EBFFC5
:10014B00EAFEE9FD80EBE98DF0A4FEE5F00201E4A7
:10015B00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE89DF
:10016B00F0A42EFFE435F0CD89F0A42DFEE435F09C
:10017B008067EF4E7005BD80D780C3EF8BF0A4ACCA
:10018B00F0EE8BF0A42CFCE435F0F8EF8AF0A42C05
:10019B00E5F038FCE433CB8DF0A42CFCE5F03BF818
:1001AB00EE8AF0A42CFCE5F038F8E433CF89F0A408
:1001BB002CFCE5F038CF3400CE89F0A42FFFE5F00E
:1001CB003EFEE433C98DF0A42EFEE5F039CD8AF066
:1001DB00A42FFFE5F03EFEE43DFD33D0E0FB5007DE
:1001EB000BBB000F020355EC2CFCEF33FFEE33FE81
:0601FB00ED33FD02032DAF
:10020100020355EC5D046005E85904700302034BD9
:10021100120316580460F6EC4860F2EC7004FDFE1F
:10022100FF22C860DB2481C85009C39860025006D0
:100231000203529850CAF582E9294B4A7005AB82F4
:1002410002034175F0007C1A7880C3EF9BEE9AEDB2
:1002510099400DC3EF9BFFEE9AFEED99FDE842F048
:10026100DC23ACF0D0E0FFD0E0FED0E0FDAB82209B
:10027100E7101BEB60BAEC2CFCEF33FFEE33FEED25
:1002810033FD02032DE803F830E705C0F075F000F7
:10029100EF2FFFEE33FEED33FD40B830E7C280AA09
:1002A10075F020800E75F010800575F0087D007ED8
:1002B100007F003392D530D50312077BEC33401019
:1002C100EF33FFEE33FEED33FDEC33FCD5F0ED22E1
:0E02D100E5F0247EA2D513CC92E7CDCEFF221D
:1002DF00EDD2E7CD33EC3392D524814006E4FFFE17
:1002EF00FDFC22FCE4CFCECDCC24E0501174FF8076
:1002FF00EDC3CC13CCCD13CDCE13CECF13CF047013
:07030F00F030D5DE02077B90
:100D1400E50824BEF582E43400F583E0050822905A
:100D240000BB3007039000BEE475F0011207EA022D
:100D340005122000E97F2ED2008018EF540F249072
:100D4400D43440D4FF30040BEF24BFB41A00500352
:100D54002461FFE50960021509050CE50C70020524
:100D64000B30070E9000BBE475F0011207EAEF02A6
:100D740005580226257403D2078003E4C207F50848
:100D84009000BB120801E4F509F50BF50CE50960C8
:100D9400077F20120D5780F5750AFFC201C200C2F9
:100DA40002C203C205C206C208120D23FF700D3031
:100DB40007057F00120D68AF0CAE0B22B4255FC28D
:100DC400D5C204120D23FF24D0B40A00501A75F0C2
:100DD4000A780930D50508B6FF0106C6A426F62010
:100DE400D5047002D20380D924CFB41A00EF500482
:100DF400C2E5D20402105AD20180C6D20080C0D209
:100E04000280BCD2D580BAD20580B47F20120D579F
:100E14002002077401B5090040F1120D14FF120DF0
:100E240057020D91D208D2068095120D14FB120DB3
:100E340014FA120D14F94A4B700679587A117BFF93
:100E440020022EE509602A7E008E82758300120539
:100E54002B60060EEE650A70F0C2D5EBC0E0EAC066
:100E6400E0E9C0E0EE1210BBD0E0F9D0E0FAD0E047
:100E7400FB120512FF60AAEBC0E0EAC0E0E9C0E0A3
:100E8400120D57D0E02401F9D0E03400FAD0E0FB91
:100E9400E50A0460DCD50AD98087D20280A2121048
:100EA4009D60F7E50A700104120360A90A600DE56C
:100EB4000A600914F50A121145EF60F3EA30E702FB
:100EC400F404C3995079EAF4250A0430E701E404F0
:100ED400F50A800D12109D60C1EA050A250A120365
:100EE40060EA9000EAF030E701E4250A04D50A0438
:100EF400200501141210BBE4C0E01211459000EA71
:100F0400E0601320E70714F0120D3F802204F0D0B4
:100F1400E014C0E07F00120D3FE50A6007120D36B1
:100F2400150A800B300503120D36D0E0020D91D066
:100F3400E00480C412109D609EE50A0412036090D0
:100F440000EAEAF0E50A2005026001042404121014
:010F5400BBE1
:100F550074FF04C0E0121145120D3FE50A20050299
:100F65006003120D36D0E0B50AE87F45120D4990B1
:100F750000EAE07F2B30E7047F2DF404C0E0120D7A
:100F850057D0E075F00A84C0F0120D40D0E0120D84
:100F950040020D91791080027908C206C2088008C6
:100FA500D2D5790A8004790AC2D5E50A047002F51A
:100FB5000AE4FAFDFEFF120D14FC7B082001131252
:100FC5000D14FD7B1030000A120D14FE120D14FFD6
:100FD5007B20EC3382D592D55013C3E43000069FB5
:100FE500FFE49EFEE42001039DFDE49CFCE4CBF8B8
:100FF500C201EC700CCFCECDCCE824F8F870F380AC
:1010050017C3EF33FFEE33FEED33FDEC33FCEB336B
:10101500FB994002FB0FD8E9EB300105F8D0E0C49D
:1010250048B201C0E00AEC4D4E4F78207B0070C2FB
:10103500EAB50A0040BCC0E01210BDD0F0D0E020F7
:101045000104C4C0E0C4B201C0F0120D40D0F0D517
:10105500F0EB020D9112080A0E2E530F99580DFF51
:101065004C0DFB420F9D4F0FA5440FA5490E144390
:101075000FAB550ED8460F38450EA2471178500EC6
:10108500032D0E072E0E2A2B0E0B230E2820116181
:101095002A0DC34800000E22E50AB4FF03750A06AF
:1010A500120D14FC120D14FD120D14FE120D14FF79
:1010B5009000E302039D790AA2D5200314300509A7
:1010C500B910020404B9080104A2D5200602500192
:1010D500042002689202B509005034C0E07F203038
:1010E50003197F30A20272067205500F121114C245
:1010F50002C206C205C2087F30800F300503E9C071
:10110500E0120D57300503D0E0F9D0E0B509CC3039
:1011150005177F30B9100C120D577F583004077F23
:10112500788003B90803120D573002057F2D020D93
:10113500577F202008F87F2B2006F322920280CFCC
:101145007F00B40700500B24E3F582E43400F583F7
:10115500E0FF22286E756C6C2900D201120D143047
:1011650001F8C201780930D50108F6020DC32D50EA
:10117500434958120D142403B405004001E49011AD
:101185007393120D48743A120D48D203750904027F
:021195000F99B0
:10031600E9D2E7C933E833F892D5EDD2E7CD33EC2D
:0703260033FC5002B2D522A6
:10032D00EC30E7100FBF000C0EBE00080DBD000431
:10033D000BEB6014A2D5EB13FCED92E7FD2274FFDD
:10034D00FCFDFEFF22E480F8A2D574FF13FC7D8036
:03035D00E480EF4A
:10036000F920E73624F950037907E4F42402FBE589
:1003700082158270021583DBF6E024FB501BE960D6
:1003800014E4F0E582158270021583E004F0B40AEB
:0D03900008E4F0D9EE7401F00A22C2D52273
:10039D00ED33EC3392D5FA602AB4FF33EDC2E77B2F
:1003AD00FF60067A0379C2E4227A0379CB20D50463
:1003BD007A0379C6224E614E002B494E46002D49D7
:1003CD004E4600E47A08F0A3DAFC7B00740722C0E5
:1003DD0083C082ECC0E0EDC0E0EEC0E0EFC0E0EA2B
:1003ED0075F010A4CAABF075F04DA42BFBE435F0FD
:1003FD00FCEA2410FAEB34C5FBEC34D9FCEDC2E772
:10040D00FF75F056A4F42411C5F0F434C58FF0A493
:10041D002AE5F03BE43CF020E7141204D2D0E0FFD3
:10042D00D0E0FED0E0FDD0E0FC1202048014F40414
:10043D001204D2D0E0FFD0E0FED0E0FDD0E0FC12FF
:10044D0000FBD082D083E0FAEDD2E7CD33EC33243C
:10045D0082FBE4C3CF33CFCE33CECD33CD33DBF3FD
:10046D007B0775F00A846004F0A31B0AE5F0F0A386
:10047D008FF0740AA4FFACF08EF0740AA42CFEACBD
:10048D00F050010C8DF0740AA42CFDE435F0F0A3AE
:05049D00DBDE74072204
:1004A2003F8000004120000042C80000447A000062
:1004B200461C400047C35000497424004B189680E4
:1004C2004CBEBC205A0E1BCA6753C21C749DC5AEDB
:1004D200FB60065407601C2323120500EB543860AE
:1004E200091204EC1204FB1200FBECF8EDF9EEFA2F
:1004F200EFCB22EB1204FB80F1543803241C90044E
:10050200A2FE93FC0EEE93FD0EEE930ECE93FF220F
:101C6E00021AD4E493A3F8E493A34003F68001F29E
:101C7E0008DFF48029E493A3F85407240CC8C33377
:101C8E00C4540F4420C8834004F456800146F6DF46
:101C9E00E4800B0102040810204080901EFEE47EBA
:101CAE00019360BCA3FF543F30E509541FFEE4933B
:101CBE00A360010ECF54C025E060A840B8E493A302
:101CCE00FAE493A3F8E493A3C8C582C8CAC583CA2D
:101CDE00F0A3C8C582C8CAC583CADFE9DEE780BEE5
:011F7D000063
:10051200BB010689828A83E0225002E722BBFE02E7
:09052200E32289828A83E493221A
:10052B00BB010CE58229F582E5833AF583E0225085
:10053B0006E92582F8E622BBFE06E92582F8E222CF
:0D054B00E58229F582E5833AF583E49322E9
:10055800BB010689828A83F0225002F722BBFE0182
:02056800F3227C
:10056A00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EA5
:02057A00FE225F
:10057C00BC000BBE0029EF8DF084FFADF022E4CC63
:10058C00F875F008EF2FFFEE33FEEC33FCEE9DEC2C
:10059C00984005FCEE9DFE0FD5F0E9E4CEFD22ED72
:1005AC00F8F5F0EE8420D21CFEADF075F008EF2FBC
:1005BC00FFED33FD4007985006D5F0F222C398FDAD
:0505CC000FD5F0EA224A
:1005D100C2D5EC30E709B2D5E4C39DFDE49CFCEE45
:1005E10030E715B2D5E4C39FFFE49EFE12057CC33C
:1005F100E49DFDE49CFC800312057C30D507C3E437
:060601009FFFE49EFE22B3
:10060700C5F0F8A3E028F0C5F0F8E582158270027E
:060617001583E038F0221B
:10061D00A3F8E0C5F025F0F0E58215827002158390
:06062D00E0C838F0E822ED
:10063300BB010A89828A83E0F5F0A3E02250068792
:10064300F009E71922BBFE07E3F5F009E319228954
:0B065300828A83E493F5F07401932287
:10065E00E88FF0A4CC8BF0A42CFCE98EF0A42CFC3B
:10066E008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4B9
:10067E002DCC3825F0FDE98FF0A42CCD35F0FCEB18
:10068E008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39DD
:0F069E00FEE43CFCEAA42DCE35F0FDE43CFC224A
:1006AD0075F008758200EF2FFFEE33FECD33CDCC04
:1006BD0033CCC58233C5829BED9AEC99E582984087
:1006CD000CF582EE9BFEED9AFDEC99FC0FD5F0D664
:1006DD00E4CEFBE4CDFAE4CCF9A88222B800C1B98E
:1006ED000059BA002DEC8BF084CFCECDFCE5F0CBCC
:1006FD00F97818EF2FFFEE33FEED33FDEC33FCEB05
:10070D0033FB10D703994004EB99FB0FD8E5E4F9BF
:10071D00FA227818EF2FFFEE33FEED33FDEC33FCAC
:10072D00C933C910D7059BE99A4007EC9BFCE99AA0
:10073D00F90FD8E0E4C9FAE4CCFB2275F010EF2FE5
:10074D00FFEE33FEED33FDCC33CCC833C810D707E5
:10075D009BEC9AE899400AED9BFDEC9AFCE899F820
:0E076D000FD5F0DAE4CDFBE4CCFAE4C8F922B3
:0E077B00C3E49FFFE49EFEE49DFDE49CFC228F
:10078900EB9FF5F0EA9E42F0E99D42F0E89C45F0C6
:01079900223D
:10079A00E8600FECC313FCED13FDEE13FEEF13FF3D
:0307AA00D8F12261
:0C07AD00ECF0A3EDF0A3EEF0A3EFF022BF
:1007B900A8828583F0D083D0821207D01207D01285
:1007C90007D01207D0E473E493A3C583C5F0C583AA
:1007D900C8C582C8F0A3C583C5F0C583C8C582C88A
:0107E90022ED
:1007EA00F8E0FBA3A3E0F925F0F0E5821582700298
:0707FA001583E0FA38F0223C
:09080100EBF0A3EAF0A3E9F022F8
:10080A00D083D082F8E4937012740193700DA3A37D
:10081A0093F8740193F5828883E473740293686091
:06082A00EFA3A3A380DF91
:10262500EFB40A07740D122630740A309811A89970
:10263500B8130CC2983098FDA899C298B811F63015
:0726450099FDC299F59922ED
:00000001FF
@@ -1,713 +0,0 @@
:03000000021C0ED1
:0C1C0E00787FE4F6D8FD758122021C5599
:10217A009001021207AD538EF7438901D28CE4FF16
:10218A00FEFDFC900102E0F8A3E0F9A3E0FAA3E067
:10219A00FBC3120789602F758A7E758CFF308DFD0F
:1021AA00C28D900102E0FCA3E0FDA3E0FEA3E024BF
:1021BA00FFFFEE34FFFEED34FFFDEC34FFFC90012F
:0921CA00021207AD80B8C28C229C
:1021D3009000B71207AD538EF7438901D28CE4FF09
:1021E300FEFDFC9000B7E0F8A3E0F9A3E0FAA3E05A
:1021F300FBC3120789602F758ACA758CFA308DFD6F
:10220300C28D9000B7E0FCA3E0FDA3E0FEA3E024B1
:10221300FFFFEE34FFFEED34FFFDEC34FFFC9000D6
:09222300B71207AD80B8C28C228D
:09280F00300003D28322C28322AF
:0727DA007F03122804D20066
:0927E100300003D28422C28422DC
:07283000A283920BA20B2210
:10272A00E4FDFCC3ED9FEC9E5015E4FBFA0BBB00E5
:0F273A00010ABA01F8BBF4F50DBD00010C80E4F3
:01274900226D
:0A280400E4FEEEC39F50030E80F8BF
:01280E0022A7
:1026A200D20012280F7F011227DC7F0A122804C2EF
:1026B2000012280F7F07122804C2001227E17F01AF
:0326C200022804E7
:10279E00C20012280F7F021227DC7F0A122804D2F1
:0727AE000012280F022804AD
:02228500AD07A3
:10228700E4FCEDA804088002C333D8FC30E704D28D
:10229700008002C20012280F1227DA0F122804C288
:1022A700001227E10CECB408D97F01122804D200F0
:1022B70012280F1227DA1228041228305004C20EEF
:0E22C7008002D20EC2001227E17F030228041B
:10243300E4FDD20012280FFC7F01122804C200120F
:1024430027E17F041227DC7F02122804ED25E0FD3B
:1024530012283050010D7F021228040CECB408D866
:0C246300C2001227E17F05122804AF051B
:01246F00224A
:10274A00201004C2008002D20012280F7F0812272C
:10275A00DC7F0F122804C2001227E17F0802280436
:07211200900080EDF0AC0726
:102119001226A2AF04122285200E0280339000807D
:10212900E0FF122285200E028026E4900086F0A3AB
:10213900F0900084E0FEA3E0FFC3900087E09F9049
:102149000086E09E5026120512FF122285200E05F8
:1021590012279EC322740129F9E43AFA900087E014
:1021690004F070CD900086E004F080C512279ED35C
:012179002243
:081FAE009000F0EFF0A3EDF04C
:101FB6001226A29000F0E0FF122285200E02801C5D
:101FC6009000F1E0FF122285200E02800F1226A259
:101FD6009000F0E004FF122285200E0912279EE4ED
:101FE600120558C322E49000F6F09000F5E014FFC5
:101FF600A3E0C39F501B122433EF120558C21012E0
:10200600274A740129F9E43AFA9000F6E004F080D0
:10201600D9122433EF120558D21012274A12279EDE
:01202600D3E6
:012027002296
:02262E00AE07F5
:10263000E4900110F0900111E0FFAD067B017A01FA
:1026400079109000F57401F0121FAE4002D20D9087
:042650000110E0FF96
:012654002263
:02278500AE079D
:10278700900111E0FFAD06900101E09000F5F01215
:062797001FAE9211A21119
:01279D002219
:10267C0090007EEDF0AE07900111E0FFAD067B01FE
:10268C007A00797E900084E4F0A304F012211240C9
:06269C0002D20DA20D2286
:1026C500AE07AD079000FBE0FFA3E0900084CFF0DC
:1026D500A3EFF0900111E0FF1221124002D20DA2EA
:0226E5000D22C4
:10236A000D0A202A2A2A2A2A2A2A2A2A2A2A2A2A0A
:10237A002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2AB3
:10238A002A000D0A4820746F61746C20636E7420F1
:10239A003A20000D0A5620746F61746C203A2000AE
:0423AA000D0A2000F8
:081F2E0041010EFF41010FFF0C
:10222C009001117490F07DFF7F0830091E12267CFE
:10223C007DFF7F0912267C7DFF7F0A12267C7D7C28
:10224C007F0B12267C7DFF7F0C802A12267C7D81E1
:10225C007F0912267C7DFF7F0A12267C7D647F0B12
:10226C0012267C7DFF7F0C12267C7D317F4412264A
:09227C007C7D1F7F5112267C229B
:10255A009001117490F07DA17F3112267C7DBF7F9E
:10256A003212267C7D177F3312267CE4FD7F3712D8
:10257A00267C7D227F3812267C7D827F6012267C13
:07258A00E4FD7F3A02267C0C
:1025C7009001117490F07D457F3912267CE4FD7FE0
:1025D7003B12267C900000E02496FD7F3E12267C6D
:1025E7007D147F3F12267C7D3C7F4112267C7D7CBB
:0525F7007F4002267C7C
:1026E7009001117490F07D317F4412267C7D447FE8
:1026F7005512267C7D017F5712267C7D027F5A0268
:02270700267C2E
:102324009001117492F07D017F1012267C7D087F4C
:102334001112267C7D047F1212267C900002E05448
:1023440003FD7F1312267CE4FD7F1412267C90008B
:1023540079E0FD7F1512267C7D037F1A12267C7D91
:06236400037F1B02267C32
:101197009001117492F090010EE0C454F02423F5ED
:1011A70082E43400F583A3E0FD7F1812267C9001CA
:1011B7000EE0C454F02425F582E43400F583A3E05F
:1011C700FD7F1912267C90010EE0C454F02419F516
:1011D70082E43400F583A3E0FD7F1C12267C900196
:1011E7000EE0C454F02419F582E43400F583E0FDE1
:1011F7007F1D12267C7D677F1E12267C7D0C7F2F2C
:1012070012267C90010EE0C454F0241DF582E434CC
:1012170000F583A3E0FD7F3412267C90010EE0C425
:1012270054F0241DF582E43400F583E0FD7F351288
:10123700267C90010EE0C454F0241FF582E43400AC
:10124700F583A3E0FD7F3612267C90010EE0C4549F
:10125700F0241FF582E43400F583E0FD7F37122682
:101267007C90010EE0C454F02427F582E43400F5A5
:1012770083A3E0FD7F3812267C90010EE0C454F072
:101287002427F582E43400F583E0FD7F3912267CBC
:1012970090010EE0FFC454F0241BF582E43400F5FE
:1012A70083E0FCA3E0FDEFC454F0241FF582E4348F
:1012B70000F583E0FEA3E0C39DFFEE9CFE90010EC8
:1012C700E0FDC454F02427F582E43400F583E0FA06
:1012D700A3E0FBC3EF9BFFEE9AFEEDC454F0242579
:1012E700F582E43400F583E0FCA3E0FDC3EF9DFF46
:1012F700EE9CAD077F3A12267C90010EE0FFC454A6
:10130700F0241BF582E43400F583E0FCA3E0FDEF55
:10131700C454F0241FF582E43400F583E0FEA3E013
:10132700C39DFFEE9CFE90010EE0FDC454F0242700
:10133700F582E43400F583E0FAA3E0FBC3EF9BFFFB
:10134700EE9AFEEDC454F02425F582E43400F583CB
:10135700E0FCA3E0FDC3EF9DEE9CFD7F3B12267CE6
:1013670090010EE0C454F02421F582E43400F583A3
:10137700A3E0FD7F3C12267C90010EE0C454F024CC
:1013870021F582E43400F583E0FD7F3D12267C9051
:10139700010EE0FFC454F02419F582E43400F5830C
:1013A700E0FCA3E0FDEFC454F0241DF582E4340013
:1013B700F583E0FEA3E0C39DFFEE9CFE90010EE0E7
:1013C700FDC454F02421F582E43400F583E0FAA348
:1013D700E0FBC3EF9BFFEE9AFEEDC454F02423F528
:1013E70082E43400F583E0FCA3E0FDC3EF9DFFEE4C
:1013F7009CAD077F3E12267C90010EE0FFC454F09F
:101407002419F582E43400F583E0FCA3E0FDEFC482
:1014170054F0241DF582E43400F583E0FEA3E0C315
:101427009DFFEE9CFE90010EE0FDC454F02421F5D3
:1014370082E43400F583E0FAA3E0FBC3EF9BFFEE01
:101447009AFEEDC454F02423F582E43400F583E0DA
:0F145700FCA3E0FDC3EF9DEE9CFD7F3F02267CD2
:102591009001117490F07D7F7F0312267C7F0A7E6B
:1025A1000012272A7DFF7F0312267C90011174926D
:1025B100F07D807F5112267C7F0A7E0012272AE45B
:0625C100FD7F5102267CA3
:101634009001117492F07D527F4E12267C7DDE7FE4
:101644004F12267C7DC07F5012267C7D807F5112F4
:10165400267CE4FD7F5112267C7D5E7F1F12267C52
:101664007D017F2012267C7D2C7F2112267C7D012A
:101674007F2212267C7DFA7F2312267CE4FD7F24C0
:1016840012267C7DC87F2512267CE4FD7F26122647
:101694007C7D5E7F2712267C7D017F2812267C7D3F
:1016A4002C7F2912267C7D017F2A12267C7DFA7FDD
:1016B4002B12267CE4FD7F2C12267C7DC87F2D1204
:1016C400267CE4FD7F2E12267C9001117490F07D1F
:1016D4007F7F0312267C7F0A7E0012272A7DFF7FEC
:1016E4000312267C9001117492F0E4FD7F511226BE
:1016F4007C7D647F4212267CE4FD7F4312267C7D40
:10170400047F4412267CE4FD7F4512267C7D597FAC
:101714004612267CE4FD7F4712267C7DF27F481228
:10172400267C7D067F4912267CE4FD7F4A12267CB6
:101734007D727F4B12267C7D457F4C12267CE4FD16
:101744007F4D12267C7D087F5212267CE4FD7F5358
:1017540012267C7DB27F5412267CE4FD7F5512262E
:101764007C7DE47F5612267C7D0D7F5712267CE417
:10177400FD7F5812267C7DE47F5912267C7D8A7F6A
:101784005A12267CE4FD7F5B12267C7D347F5C123A
:10179400267C7D4F7F1E12267CE4FD7F5102267C31
:1024AD009001117490F0900018E0FD7FB212267C1F
:1024BD009001117494F0300A0B7D097F0612267C71
:1024CD007DF080097D0E7F0612267CE4FD7F0712CC
:0A24DD00267C7DD27F3412267C227B
:0D27EA009001117490F07D307F4402267C38
:0D27F7009001117490F07D317F4402267C2A
:1018DF009001117490F07D247F5012267C7D057F3E
:1018EF005112267C900001E02414FD7F5212267CB9
:1018FF00900003E0FEA3E0FF7C007D1912057C7CC5
:10190F00007D0712056AE4FD90007A1207ADE47BB3
:10191F0064FAF9F890007AE0FCA3E0FDA3E0FEA3DF
:10192F00E0FF1206E9E4AD077F6912267CE47B64D1
:10193F00FAF9F890007AE0FCA3E0FDA3E0FEA3E043
:10194F00FF1206E9EF2480FD7F6912267CE47B6499
:10195F00FAF9F890007AE0FCA3E0FDA3E0FEA3E023
:10196F00FF1206E9AF03E4FEFDFC90007A1207AD0B
:10197F0090007AE0FCA3E0FDA3E0FEA3E0FFE4FB10
:10198F007A40F9F812065E90007A1207AD90007A4D
:10199F00E0FCA3E0FDA3E0FEA3E0FFE47B64FAF923
:1019AF00F81206E990007A1207AD90007CE02480CF
:1019BF00FD7F6C12267C90007DE0FD7F6B12267CF4
:0E19CF007DFB7F0412267C7DFF7F0402267CB8
:101466009001117490F0E4FD7F8012267C7DFF7F51
:101476008112267C7D037F8212267C90010EE0C4B9
:1014860054F02419F582E43400F583A3E0FD7F834C
:1014960012267C90010EE0C454F02419F582E4343F
:1014A60000F583E0FD7F8412267C7D807F851226F1
:1014B6007C7D107F8612267C90000BE0FD7F8712D4
:1014C600267C90000AE0FD7F8812267C900011E0C1
:1014D600FD7F8912267C90000FE0FD7F8A12267C14
:1014E60090000EE0540175F080A4FF900013E02FE9
:1014F600540FFD7F8B12267C900007E0FD7F8C1237
:10150600267C900009E0FD7F8D12267C900008E085
:10151600C454F0FD900006E02DFD7F8E12267C90CF
:10152600010EE0C454F02419F582E43400F583E09A
:10153600FCA3E0FDE41202A6E4FBFA798078BF1270
:10154600000AC004C005C006C007900007E024FFDB
:10155600FD900006E034FFFCE41202A6A804A905EB
:10156600AA06AB07D007D006D005D004120204E4C1
:10157600FBFA798078451200FB1202DF90007AEEC2
:10158600F0A3EFF090007BE0FD7F8F12267C9000A9
:101596007AE0FD7F9012267C90010EE0C454F02480
:1015A6001BF582E43400F583E0FCA3E0FDE41202BF
:1015B600A6E4FBFA798078BF12000AC004C005C011
:1015C60006C007900009E024FFFD900008E034FF04
:1015D600FCE41202A6A804A905AA06AB07D007D008
:1015E60006D005D004120204E4FBFA79807845128D
:1015F60000FB1202DF90007AEEF0A3EFF090007B82
:10160600E0FD7F9112267C90007AE0FD7F92122603
:101616007C7D9C7F7F12267C900016E0FF90000563
:0E162600E02FFF900017E02FFD7FA802267C2A
:10276A0012222C12255A1225C71226E712232412E6
:0B277A0011971216341224AD022591B5
:1019DD00E4900106F0A3F0A3F0A3F0900111749030
:1019ED00F07F9D12262EEF7F00FEC006C0077F9C64
:1019FD0012262EEFFDD0E02DFED0E0340090010632
:101A0D00F0A3CEF07F9F12262EEF54077F00FEC06D
:101A1D0006C0077F9E12262EEFFDD0E02DFFD0E0F1
:101A2D003400FE900108F0A3EFF0C39402EE94028F
:101A3D004014D3E09422900108E0940250089001E4
:101A4D000E7405F08041900108E0FEA3E0FFC39401
:101A5D00E0EE94024011D3EF94FEEE940250089004
:101A6D00010E7401F08020C3EF9455EE94044011E3
:101A7D00D3EF9475EE9404500890010E7404F08029
:101A8D000690010E74FFF07BFF7A23796A1217A47A
:101A9D007BFF7A23798C1217A4900106E0FEA3E058
:101AAD00FFE4FCFD1208307BFF7A23799D1217A409
:101ABD00900108E0FEA3E0FFE4FCFD1208307BFF7F
:071ACD007A2379AA0217A495
:101C9A009001117492F07D127F7212267C7DC07FB2
:101CAA007312267CE4FD7F7412267C7D297F7512CF
:101CBA00267C7D807F7612267C7D387F7712267C73
:101CCA007D477F7812267C7D987F7912267C7D65F8
:101CDA007F7A12267C7D487F7B12267C7D2C7F7C36
:101CEA0012267C7D057F7D12267C7D807F701226E0
:101CFA007C7D767F7112267C7D337F4E12267C7D19
:101D0A00337F4F12267C7DD37F5012267C7D807FC5
:041D1A005102267CD0
:101D1E009001117492F07D127F7212267C7D047FE9
:101D2E007312267C7D017F7412267C7D197F7512BD
:101D3E00267CE4FD7F7612267C7DD07F7712267C72
:101D4E007D257F7812267C7D727F7912267C7DEE32
:101D5E007F7A12267C7D267F7B12267C7D287F7CD7
:101D6E0012267C7D057F7D12267C7D807F7012265B
:101D7E007C7D767F7112267C7D997F4E12267C7D2E
:101D8E00997F4F12267C7D697F5012267C7D807F45
:041D9E005102267C4C
:101DA2009001117492F07D127F7212267C7D847FE5
:101DB2007312267CE4FD7F7412267C7D2C7F7512C3
:101DC200267C7DD07F7612267C7D407F7712267C12
:101DD2007D227F7812267C7D607F7912267C7D7140
:101DE2007F7A12267C7D237F7B12267C7D407F7C3E
:101DF20012267C7D057F7D12267C7D807F701226D7
:101E02007C7D767F7112267C7D667F4E12267C7DDC
:101E1200667F4F12267C7D267F5012267C7D807F36
:041E22005102267CC7
:101E26009001117492F07D127F7212267C7D7A7F6A
:101E36007312267CE4FD7F7412267C7D247F751246
:101E4600267C7DD07F7612267C7DE07F7712267CED
:101E56007D127F7812267C7D5A7F7912267C7D0D35
:101E66007F7A12267C7D237F7B12267C7D3E7F7CBB
:101E760012267C7D067F7D12267C7D807F70122651
:101E86007C7D767F7112267C7D667F4E12267C7D58
:101E9600667F4F12267C7D267F5012267C7D807FB2
:041EA6005102267C43
:101EAA009001117492F07D127F7212267C7D647FFC
:101EBA007312267CE4FD7F7412267C7D1E7F7512C8
:101ECA00267CE4FD7F7612267C7DE07F7712267CD5
:101EDA007D157F7812267C7DB47F7912267C7D124F
:101EEA007F7A12267C7D257F7B12267C7D147F7C5F
:101EFA0012267C7D0A7F7D12267C7D807F701226C9
:101F0A007C7D767F7112267C7DA57F4E12267C7D94
:101F1A00087F4F12267C7D427F5012267C7D807F6F
:041F2A005102267CBE
:101AD4000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2A9F
:101AE4002A2A2A2A2A2A2A2A73746172742A2A2AF6
:101AF4002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A42
:101B04002A2A2A2A2A2A000D0A20000D0A2A2A2A09
:101B14002A2A2A2A2A2A2A2A2A2A2A2A2A2A4C54D5
:101B2400383931324220726573657420646F6E6592
:101B34002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A01
:101B44002A000D0A2A2A2A2A2A2A2A2A2A2A2A2A58
:101B54002A2A2A2A4C54383931324220496E69746F
:101B640069616C20646F6E652A2A2A2A2A2A2A2A25
:091B74002A2A2A2A2A2A2A2A0018
:101F36006060001902D001E0035A020D003C003E29
:101F46000006001E050002D0067202EE00DC002824
:101F56000005001405000320060A0358008C00241F
:101F660000080018040002580540027B008C00148B
:101F76000003001407800438089804650094002CB8
:101F860000050024050001E005B40212005000140B
:101F9600000A0014500006050001E005B402120014
:071FA600500014000A0014B2
:1023F20043B10843B20843B11043B21043B10143A1
:10240200B20143AC0153ADFE43B30853B4F743B337
:102412001053B4EF7F007EC27D017C001225215350
:10242200E9FB43E92043EA0853EBF7439B02D2AFAF
:012432002287
:072837009001117490F022E2
:1027C800C2807F647E0012272AD2807F647E000246
:0227D800272AAE
:102470009000187401F0D20AC2099000027404F0AE
:1024800090007974A8F09000007420F0D20C30090C
:102490001B9000037414F0A37450F0E4900001F05A
:0D24A000900005F0900016F0A37413F022D8
:101B7D001223F27FC87E0012272A7FC87E0012270B
:101B8D002A7FC87E0012272A7FC87E0012272A7F4F
:101B9D00C87E0012272A7BFF7A1A79D41217A41255
:101BAD0028371227C87BFF7A1B790B1217A47BFFEE
:101BBD007A1B790F1217A412247090010E7405F080
:101BCD0012276A7BFF7A1B790B1217A47BFF7A1BF6
:101BDD0079461217A47BFF7A1B790B1217A43009D3
:101BED00101218DF1214667F2C7E0112272A12277D
:101BFD00EA7FC87E0012272A7F267E0212272A80BE
:011C0D00F7DF
:102709000A2055494431203D203078256278000A55
:102719002055494432203D203078256278003078B0
:0127290000AF
:1025210053B1BF53B2BF53B17F53B27F759850437C
:102531008920438780438E1053C4DFAB07AA06A9C5
:1025410005A8047F407E427D0F7C001206E9EF045E
:09255100F404F58DD28ED299221A
:10209F0090010A1207AD53B1BF53B2BF53B17F5373
:1020AF00B27F75985043878053C4F843C420900182
:1020BF000AE0F8A3E0F9A3E0FAA3E0FB7F407E4239
:1020CF007D0F7C001206E9C374FF9FFF74FF9EFE15
:1020DF00E49DFDE49CFC780812079A8FC690010AD4
:1020EF00E0F8A3E0F9A3E0FAA3E0FB7F407E427D96
:1020FF000F7C001206E9C374FF9FFF8FC543C4080E
:03210F00D2992240
:072818003098FDAF99C29852
:01281F002296
:08282000C2998F993099FD2245
:1024E700EF540FFEEF54F0C4540FFFEEC3940AEEFF
:1024F70050052430FD80032437FDAE05EFC3940A51
:10250700EF50052430FD80032437FDAF0512282046
:0A251700AF061228207F20022820C2
:05283E007F0A022820C2
:03284300020D7F04
:1027B500AB07AA06EEFF1224E7AF031224E77F0A50
:0327C500022820C7
:082828001228207F2002282065
:1023AE00A2AF920FC2AF75C7AA75C755439F01A2C0
:1023BE000F92AF8FA6E4F5A775AF04A2AF920FC22E
:1023CE00AF75C7AA75C75543A401A20F92AFAFAEA2
:1023DE00A2AF920FC2AF75C7AA75C755539FFEA283
:0323EE000F92AF9C
:0123F10022C9
:1025FC007F021223AEAE077F051223AE900112EFBD
:10260C00F07BFF7A277909AF069000BAEFF0120D34
:10261C007F7BFF7A277918900112E09000BAF002C4
:02262C000D7F20
:0328460002282045
:1022D500AB07AA067C007D0A1205D1C3EF940AEE6E
:1022E500648094805005EF2430800E7C007D0AAF19
:1022F50003AE021205D1EF2457FF1228467C007D5C
:102305000AAF03AE021205D1C3ED940AEC648094C2
:0F23150080ED5004243080022457FF1228462206
:102028009000B5EEF0A3EFF07BFF7A277927120D29
:102038007F7F027E007D007C001221D39000B5E0F6
:10204800FEA3E0FF7C007D101205D1C3EF940AEED9
:10205800648094805005EF243080129000B5E0FE33
:10206800A3E0FF7C007D101205D1EF2457FF122852
:10207800469000B5E0FEA3E0FF7C007D101205D17C
:10208800C3ED940AEC64809480ED500424308002FF
:072098002457FF1228462225
:060830009000E71207AD85
:10083600E49000EBF0A31207B9000000009000E777
:10084600E0FCA3E0FDA3E0FEA3E0FF9000EC1207AE
:10085600AD7F201228467F7F7E967D987C00900093
:10086600ECE0F8A3E0F9A3E0FAA3E0FBD3120789D2
:10087600407A7B807A96799878009000ECE0FCA329
:10088600E0FDA3E0FEA3E0FF1206E9E47B0AFAF925
:10089600F8D31207897B807A96799878009000ECD5
:1008A600E0FCA3E0FDA3E0FEA3E0FF40081206E99A
:1008B600EF243080061206E9EF2457FF12284690EF
:1008C60000ECE0FCA3E0FDA3E0FEA3E0FF7B807A62
:1008D60096799878001206E9AC00AD01AE02AF0336
:1008E6009000EC1207AD9000EB7401F07F3F7E4262
:1008F6007D0F7C009000ECE0F8A3E0F9A3E0FAA3FA
:10090600E0FBD3120789407C7B407A42790F78005E
:100916009000ECE0FCA3E0FDA3E0FEA3E0FF1206DE
:10092600E9E47B0AFAF9F8D31207897B407A42791F
:100936000F78009000ECE0FCA3E0FDA3E0FEA3E04E
:10094600FF40081206E9EF243080061206E9EF247C
:1009560057FF1228469000ECE0FCA3E0FDA3E0FE62
:10096600A3E0FF7B407A42790F78001206E9AC00DB
:10097600AD01AE02AF039000EC1207AD9000EB7430
:1009860001F0800B9000EBE060057F301228467F77
:100996009F7E867D017C009000ECE0F8A3E0F9A341
:1009A600E0FAA3E0FBD31207895003020A417BA0B9
:1009B6007A86790178009000ECE0FCA3E0FDA3E0E4
:1009C600FEA3E0FF1206E9E47B0AFAF9F8D3120760
:1009D600897BA07A8640190978009000ECE0FCA398
:1009E600E0FDA3E0FEA3E0FF1206E9EF2430801845
:1009F600790178009000ECE0FCA3E0FDA3E0FEA303
:100A0600E0FF1206E9EF2457FF1228469000ECE0BB
:100A1600FCA3E0FDA3E0FEA3E0FF7BA07A867901BC
:100A260078001206E9AC00AD01AE02AF039000EC0F
:100A36001207AD9000EB7401F0800B9000EBE060C4
:100A4600057F30122846E47F0F7E27FDFC9000ECE0
:100A5600E0F8A3E0F9A3E0FAA3E0FBD3120789507C
:100A660003020AF2E47B107A27F9F89000ECE0FC26
:100A7600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA89
:100A8600F9F8D3120789E47B107A274017F890000B
:100A9600ECE0FCA3E0FDA3E0FEA3E0FF1206E9EF15
:100AA60024308016F9F89000ECE0FCA3E0FDA3E00A
:100AB600FEA3E0FF1206E9EF2457FF122846900036
:100AC600ECE0FCA3E0FDA3E0FEA3E0FFE47B107AEC
:100AD60027F9F81206E9AC00AD01AE02AF039000AB
:100AE600EC1207AD9000EB7401F0800B9000EBE088
:100AF60060057F30122846E47FE77E03FDFC900008
:100B0600ECE0F8A3E0F9A3E0FAA3E0FBD31207892F
:100B16005003020BA3E47BE87A03F9F89000ECE0BB
:100B2600FCA3E0FDA3E0FEA3E0FF1206E9E47B0AD6
:100B3600FAF9F8D3120789E47BE87A034017F890AC
:100B460000ECE0FCA3E0FDA3E0FEA3E0FF1206E953
:100B5600EF24308016F9F89000ECE0FCA3E0FDA34A
:100B6600E0FEA3E0FF1206E9EF2457FF12284690A5
:100B760000ECE0FCA3E0FDA3E0FEA3E0FFE47BE8DD
:100B86007A03F9F81206E9AC00AD01AE02AF0390A4
:100B960000EC1207AD9000EB7401F0800B9000EBB7
:100BA600E060057F30122846E47F63FEFDFC90007E
:100BB600ECE0F8A3E0F9A3E0FAA3E0FBD31207897F
:100BC6005003020C50E47B64FAF9F89000ECE0FC68
:100BD600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA28
:100BE600F9F8D3120789E47B644017F89000ECE02B
:100BF600FCA3E0FDA3E0FEA3E0FF1206E9EF24302C
:100C06008017FAF9F89000ECE0FCA3E0FDA3E0FE03
:100C1600A3E0FF1206E9EF2457FF1228469000ECE6
:100C2600E0FCA3E0FDA3E0FEA3E0FFE47B64FAF9A9
:100C3600F81206E9AC00AD01AE02AF039000EC126B
:100C460007AD9000EB7401F0800B9000EBE06005BF
:100C56007F30122846E47B0AFAF9F89000ECE0FCB3
:100C6600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA97
:100C7600F9F8D3120789E44017F89000ECE0FCA3DA
:100C8600E0FDA3E0FEA3E0FF1206E9EF24308019A1
:100C96007B0AFAF9F89000ECE0FCA3E0FDA3E0FE85
:100CA600A3E0FF1206E9EF2457FF122846E47B0A69
:100CB600FAF9F89000ECE0FCA3E0FDA3E0FEA3E067
:100CC600FF1206E9AC00AD01AE02AF03E47B0AFAFF
:100CD600F9F8D3120789E44017F89000ECE0FCA37A
:100CE600E0FDA3E0FEA3E0FF1206E9EB2430801945
:100CF6007B0AFAF9F89000ECE0FCA3E0FDA3E0FE25
:0D0D0600A3E0FF1206E9EB2457FF12284678
:010D130022BD
:0B17A40090007AEBF0A3EAF0A3E9F05C
:1017AF009000A51207B900000000E49000A9F0A373
:1017BF00F0F9A3C9F0A3F0A3E9F0E4A3F0F9A3C9EA
:1017CF00F0A3F0A3E9F0A37401F0A37400F0A374E5
:1017DF007DF090007AE0F9A3E0FAA3E09000AFC9A2
:1017EF00F0A3EAF0A3E9F09000AFE0FBA3E0FAA3C7
:1017FF00E0F912051270030218D564256003021870
:10180F00BB9000AFA3E475F001120607A9F0FA121E
:10181F00051224DB70030218A924E1602B24EC606D
:10182F005024F4602324EC6048241570729000B2A9
:10183F00E0FBA3E475F00212061DA9F0FA120633BD
:10184F009000AEF0E0FF80549000B2E0FBA3E4758F
:10185F00F00112061DA9F0FA120512FF9000A9E47B
:10186F00F0A3EFF09000A9A3E0FF7E001222D58035
:10187F002E9000B2E0FBA3E475F00112061DA9F053
:10188F00FA120512FF9000A9E4F0A3EFF09000A95F
:10189F00E0FEA3E0FF12202880057F251228469046
:1018AF0000B0E475F0011206070217F69000AFE0E2
:1018BF00FBA3E475F00112061DA9F0FA120512FF41
:0F18CF001228460217F69000B2E4F0A3F0A3F03F
:0118DE0022E7
:1000030002034BE86480F8E933E83360110460F0DD
:10001300ED33EC337009E8FCE9FDEAFEEBFF220463
:1000230060DED3EB9FEA9EE99DE8C2E78CF0C2F75E
:1000330095F0400CE8CCF8E9CDF9EACEFAEBCFFB2A
:1000430012031685D0F05804700320D5B3E804706A
:10005300075002B2D502035592D5EC0460F7E4CC05
:10006300C0E0C398F8603B94186008400DD0E0FBF3
:1000730002032DE4FBFAC9FC8028E830E406E4C956
:10008300FBE4CAFCE830E305E4C9CACBFCE8540747
:100093006010F8C3E913F9EA13FAEB13FBEC13FC52
:1000A300D8F130F52FC3E49CFCEF9BFFEE9AFEEDF5
:1000B30099FDD0E0FBEF4E4D4C701222DB0302039F
:1000C30052EC2CFCEF33FFEE33FEED33FDED30E766
:1000D300EB02032DEF2BFFEE3AFEED39FDD0E0FBF3
:1000E30050130BBB0003020355ED13FDEE13FEEF9C
:0800F30013FFEC13FC02032DC6
:1000FB00EC4D6011E8497017ED33EC3304600DE4FF
:10010B00FCFFFEFD22E933E8330470F802034B12C7
:10011B00031658046009E4CC2481500628500902C8
:10012B000355284003020352C0E0EB4A7044B980E8
:10013B0006D0E0FB020341EF4E701CBD8008EBFFC5
:10014B00EAFEE9FD80EBE98DF0A4FEE5F00201E4A7
:10015B00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE89DF
:10016B00F0A42EFFE435F0CD89F0A42DFEE435F09C
:10017B008067EF4E7005BD80D780C3EF8BF0A4ACCA
:10018B00F0EE8BF0A42CFCE435F0F8EF8AF0A42C05
:10019B00E5F038FCE433CB8DF0A42CFCE5F03BF818
:1001AB00EE8AF0A42CFCE5F038F8E433CF89F0A408
:1001BB002CFCE5F038CF3400CE89F0A42FFFE5F00E
:1001CB003EFEE433C98DF0A42EFEE5F039CD8AF066
:1001DB00A42FFFE5F03EFEE43DFD33D0E0FB5007DE
:1001EB000BBB000F020355EC2CFCEF33FFEE33FE81
:0601FB00ED33FD02032DAF
:10020100020355EC5D046005E85904700302034BD9
:10021100120316580460F6EC4860F2EC7004FDFE1F
:10022100FF22C860DB2481C85009C39860025006D0
:100231000203529850CAF582E9294B4A7005AB82F4
:1002410002034175F0007C1A7880C3EF9BEE9AEDB2
:1002510099400DC3EF9BFFEE9AFEED99FDE842F048
:10026100DC23ACF0D0E0FFD0E0FED0E0FDAB82209B
:10027100E7101BEB60BAEC2CFCEF33FFEE33FEED25
:1002810033FD02032DE803F830E705C0F075F000F7
:10029100EF2FFFEE33FEED33FD40B830E7C280AA09
:1002A10075F020800E75F010800575F0087D007ED8
:1002B100007F003392D530D50312077BEC33401019
:1002C100EF33FFEE33FEED33FDEC33FCD5F0ED22E1
:0E02D100E5F0247EA2D513CC92E7CDCEFF221D
:1002DF00EDD2E7CD33EC3392D524814006E4FFFE17
:1002EF00FDFC22FCE4CFCECDCC24E0501174FF8076
:1002FF00EDC3CC13CCCD13CDCE13CECF13CF047013
:07030F00F030D5DE02077B90
:100D1400E50824BAF582E43400F583E0050822905E
:100D240000B73007039000BAE475F0011207EA0235
:100D340005122000E97F2ED2008018EF540F249072
:100D4400D43440D4FF30040BEF24BFB41A00500352
:100D54002461FFE50960021509050CE50C70020524
:100D64000B30070E9000B7E475F0011207EAEF02AA
:100D740005580226557403D2078003E4C207F50818
:100D84009000B7120801E4F509F50BF50CE50960CC
:100D9400077F20120D5780F5750AFFC201C200C2F9
:100DA40002C203C205C206C208120D23FF700D3031
:100DB40007057F00120D68AF0CAE0B22B4255FC28D
:100DC400D5C204120D23FF24D0B40A00501A75F0C2
:100DD4000A780930D50508B6FF0106C6A426F62010
:100DE400D5047002D20380D924CFB41A00EF500482
:100DF400C2E5D20402105AD20180C6D20080C0D209
:100E04000280BCD2D580BAD20580B47F20120D579F
:100E14002002077401B5090040F1120D14FF120DF0
:100E240057020D91D208D2068095120D14FB120DB3
:100E340014FA120D14F94A4B700679587A117BFF93
:100E440020022EE509602A7E008E82758300120539
:100E54002B60060EEE650A70F0C2D5EBC0E0EAC066
:100E6400E0E9C0E0EE1210BBD0E0F9D0E0FAD0E047
:100E7400FB120512FF60AAEBC0E0EAC0E0E9C0E0A3
:100E8400120D57D0E02401F9D0E03400FAD0E0FB91
:100E9400E50A0460DCD50AD98087D20280A2121048
:100EA4009D60F7E50A700104120360A90A600DE56C
:100EB4000A600914F50A121145EF60F3EA30E702FB
:100EC400F404C3995079EAF4250A0430E701E404F0
:100ED400F50A800D12109D60C1EA050A250A120365
:100EE40060EA9000E6F030E701E4250A04D50A043C
:100EF400200501141210BBE4C0E01211459000E675
:100F0400E0601320E70714F0120D3F802204F0D0B4
:100F1400E014C0E07F00120D3FE50A6007120D36B1
:100F2400150A800B300503120D36D0E0020D91D066
:100F3400E00480C412109D609EE50A0412036090D0
:100F440000E6EAF0E50A2005026001042404121018
:010F5400BBE1
:100F550074FF04C0E0121145120D3FE50A20050299
:100F65006003120D36D0E0B50AE87F45120D4990B1
:100F750000E6E07F2B30E7047F2DF404C0E0120D7E
:100F850057D0E075F00A84C0F0120D40D0E0120D84
:100F950040020D91791080027908C206C2088008C6
:100FA500D2D5790A8004790AC2D5E50A047002F51A
:100FB5000AE4FAFDFEFF120D14FC7B082001131252
:100FC5000D14FD7B1030000A120D14FE120D14FFD6
:100FD5007B20EC3382D592D55013C3E43000069FB5
:100FE500FFE49EFEE42001039DFDE49CFCE4CBF8B8
:100FF500C201EC700CCFCECDCCE824F8F870F380AC
:1010050017C3EF33FFEE33FEED33FDEC33FCEB336B
:10101500FB994002FB0FD8E9EB300105F8D0E0C49D
:1010250048B201C0E00AEC4D4E4F78207B0070C2FB
:10103500EAB50A0040BCC0E01210BDD0F0D0E020F7
:101045000104C4C0E0C4B201C0F0120D40D0F0D517
:10105500F0EB020D9112080A0E2E530F99580DFF51
:101065004C0DFB420F9D4F0FA5440FA5490E144390
:101075000FAB550ED8460F38450EA2471178500EC6
:10108500032D0E072E0E2A2B0E0B230E2820116181
:101095002A0DC34800000E22E50AB4FF03750A06AF
:1010A500120D14FC120D14FD120D14FE120D14FF79
:1010B5009000DF02039D790AA2D5200314300509AB
:1010C500B910020404B9080104A2D5200602500192
:1010D500042002689202B509005034C0E07F203038
:1010E50003197F30A20272067205500F121114C245
:1010F50002C206C205C2087F30800F300503E9C071
:10110500E0120D57300503D0E0F9D0E0B509CC3039
:1011150005177F30B9100C120D577F583004077F23
:10112500788003B90803120D573002057F2D020D93
:10113500577F202008F87F2B2006F322920280CFCC
:101145007F00B40700500B24DFF582E43400F583FB
:10115500E0FF22286E756C6C2900D201120D143047
:1011650001F8C201780930D50108F6020DC32D50EA
:10117500434958120D142403B405004001E49011AD
:101185007393120D48743A120D48D203750904027F
:021195000F99B0
:10031600E9D2E7C933E833F892D5EDD2E7CD33EC2D
:0703260033FC5002B2D522A6
:10032D00EC30E7100FBF000C0EBE00080DBD000431
:10033D000BEB6014A2D5EB13FCED92E7FD2274FFDD
:10034D00FCFDFEFF22E480F8A2D574FF13FC7D8036
:03035D00E480EF4A
:10036000F920E73624F950037907E4F42402FBE589
:1003700082158270021583DBF6E024FB501BE960D6
:1003800014E4F0E582158270021583E004F0B40AEB
:0D03900008E4F0D9EE7401F00A22C2D52273
:10039D00ED33EC3392D5FA602AB4FF33EDC2E77B2F
:1003AD00FF60067A0379C2E4227A0379CB20D50463
:1003BD007A0379C6224E614E002B494E46002D49D7
:1003CD004E4600E47A08F0A3DAFC7B00740722C0E5
:1003DD0083C082ECC0E0EDC0E0EEC0E0EFC0E0EA2B
:1003ED0075F010A4CAABF075F04DA42BFBE435F0FD
:1003FD00FCEA2410FAEB34C5FBEC34D9FCEDC2E772
:10040D00FF75F056A4F42411C5F0F434C58FF0A493
:10041D002AE5F03BE43CF020E7141204D2D0E0FFD3
:10042D00D0E0FED0E0FDD0E0FC1202048014F40414
:10043D001204D2D0E0FFD0E0FED0E0FDD0E0FC12FF
:10044D0000FBD082D083E0FAEDD2E7CD33EC33243C
:10045D0082FBE4C3CF33CFCE33CECD33CD33DBF3FD
:10046D007B0775F00A846004F0A31B0AE5F0F0A386
:10047D008FF0740AA4FFACF08EF0740AA42CFEACBD
:10048D00F050010C8DF0740AA42CFDE435F0F0A3AE
:05049D00DBDE74072204
:1004A2003F8000004120000042C80000447A000062
:1004B200461C400047C35000497424004B189680E4
:1004C2004CBEBC205A0E1BCA6753C21C749DC5AEDB
:1004D200FB60065407601C2323120500EB543860AE
:1004E200091204EC1204FB1200FBECF8EDF9EEFA2F
:1004F200EFCB22EB1204FB80F1543803241C90044E
:10050200A2FE93FC0EEE93FD0EEE930ECE93FF220F
:101C1A00021B7DE493A3F8E493A34003F68001F248
:101C2A0008DFF48029E493A3F85407240CC8C333CB
:101C3A00C4540F4420C8834004F456800146F6DF9A
:101C4A00E4800B0102040810204080901F2EE47EDD
:101C5A00019360BCA3FF543F30E509541FFEE4938F
:101C6A00A360010ECF54C025E060A840B8E493A356
:101C7A00FAE493A3F8E493A3C8C582C8CAC583CA81
:101C8A00F0A3C8C582C8CAC583CADFE9DEE780BE39
:011FAD000033
:10051200BB010689828A83E0225002E722BBFE02E7
:09052200E32289828A83E493221A
:10052B00BB010CE58229F582E5833AF583E0225085
:10053B0006E92582F8E622BBFE06E92582F8E222CF
:0D054B00E58229F582E5833AF583E49322E9
:10055800BB010689828A83F0225002F722BBFE0182
:02056800F3227C
:10056A00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EA5
:02057A00FE225F
:10057C00BC000BBE0029EF8DF084FFADF022E4CC63
:10058C00F875F008EF2FFFEE33FEEC33FCEE9DEC2C
:10059C00984005FCEE9DFE0FD5F0E9E4CEFD22ED72
:1005AC00F8F5F0EE8420D21CFEADF075F008EF2FBC
:1005BC00FFED33FD4007985006D5F0F222C398FDAD
:0505CC000FD5F0EA224A
:1005D100C2D5EC30E709B2D5E4C39DFDE49CFCEE45
:1005E10030E715B2D5E4C39FFFE49EFE12057CC33C
:1005F100E49DFDE49CFC800312057C30D507C3E437
:060601009FFFE49EFE22B3
:10060700C5F0F8A3E028F0C5F0F8E582158270027E
:060617001583E038F0221B
:10061D00A3F8E0C5F025F0F0E58215827002158390
:06062D00E0C838F0E822ED
:10063300BB010A89828A83E0F5F0A3E02250068792
:10064300F009E71922BBFE07E3F5F009E319228954
:0B065300828A83E493F5F07401932287
:10065E00E88FF0A4CC8BF0A42CFCE98EF0A42CFC3B
:10066E008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4B9
:10067E002DCC3825F0FDE98FF0A42CCD35F0FCEB18
:10068E008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39DD
:0F069E00FEE43CFCEAA42DCE35F0FDE43CFC224A
:1006AD0075F008758200EF2FFFEE33FECD33CDCC04
:1006BD0033CCC58233C5829BED9AEC99E582984087
:1006CD000CF582EE9BFEED9AFDEC99FC0FD5F0D664
:1006DD00E4CEFBE4CDFAE4CCF9A88222B800C1B98E
:1006ED000059BA002DEC8BF084CFCECDFCE5F0CBCC
:1006FD00F97818EF2FFFEE33FEED33FDEC33FCEB05
:10070D0033FB10D703994004EB99FB0FD8E5E4F9BF
:10071D00FA227818EF2FFFEE33FEED33FDEC33FCAC
:10072D00C933C910D7059BE99A4007EC9BFCE99AA0
:10073D00F90FD8E0E4C9FAE4CCFB2275F010EF2FE5
:10074D00FFEE33FEED33FDCC33CCC833C810D707E5
:10075D009BEC9AE899400AED9BFDEC9AFCE899F820
:0E076D000FD5F0DAE4CDFBE4CCFAE4C8F922B3
:0E077B00C3E49FFFE49EFEE49DFDE49CFC228F
:10078900EB9FF5F0EA9E42F0E99D42F0E89C45F0C6
:01079900223D
:10079A00E8600FECC313FCED13FDEE13FEEF13FF3D
:0307AA00D8F12261
:0C07AD00ECF0A3EDF0A3EEF0A3EFF022BF
:1007B900A8828583F0D083D0821207D01207D01285
:1007C90007D01207D0E473E493A3C583C5F0C583AA
:1007D900C8C582C8F0A3C583C5F0C583C8C582C88A
:0107E90022ED
:1007EA00F8E0FBA3A3E0F925F0F0E5821582700298
:0707FA001583E0FA38F0223C
:09080100EBF0A3EAF0A3E9F022F8
:10080A00D083D082F8E4937012740193700DA3A37D
:10081A0093F8740193F5828883E473740293686091
:06082A00EFA3A3A380DF91
:10265500EFB40A07740D122660740A309811A89910
:10266500B8130CC2983098FDA899C298B811F630E5
:0726750099FDC299F59922BD
:00000001FF
@@ -1,721 +0,0 @@
:03000000021C954A
:0C1C9500787FE4F6D8FD758122021CDC8B
:102201009000F61207AD538EF7438901D28CE4FF9B
:10221100FEFDFC9000F6E0F8A3E0F9A3E0FAA3E0EC
:10222100FBC3120789602F758A7E758CFF308DFD87
:10223100C28D9000F6E0FCA3E0FDA3E0FEA3E02444
:10224100FFFFEE34FFFEED34FFFDEC34FFFC9000A8
:09225100F61207AD80B8C28C2220
:10225A009000BB1207AD538EF7438901D28CE4FF7D
:10226A00FEFDFC9000BBE0F8A3E0F9A3E0FAA3E0CE
:10227A00FBC3120789602F758ACA758CFA308DFDE7
:10228A00C28D9000BBE0FCA3E0FDA3E0FEA3E02426
:10229A00FFFFEE34FFFEED34FFFDEC34FFFC90004F
:0922AA00BB1207AD80B8C28C2202
:09289600300103D28322C2832227
:072861007F0312288BD20156
:09286800300103D28422C2842253
:0728B700A283920BA20B2289
:1027B100E4FDFCC3ED9FEC9E5015E4FBFA0BBB005E
:0F27C100010ABA01F8BBF4F50DBD00010C80E46C
:0127D00022E6
:0A288B00E4FEEEC39F50030E80F838
:012895002220
:10272900D2011228967F011228637F0A12288BC2D0
:10273900011228967F0712288BC2011228687F018F
:0327490002288BD8
:10282500C2011228967F021228637F0A12288BD2D2
:072835000112289602288B16
:02230C00AD071B
:10230E00E4FCEDA804088002C333D8FC30E704D205
:10231E00018002C2011228961228610F12288BC268
:10232E00011228680CECB408D97F0112288BD20157
:10233E0012289612286112288B1228B75004C20E4A
:0E234E008002D20EC2011228687F0302288B83
:1024BA00E4FDD201122896FC7F0112288BC2011278
:1024CA0028687F041228637F0212288BED25E0FD1D
:1024DA001228B750010D7F0212288B0CECB408D8D1
:0C24EA00C2011228687F0512288BAF0584
:0124F60022C3
:1027D100200004C2018002D2011228967F0812282B
:1027E100637F0F12288BC2011228687F0802288B91
:07219900900080EDF0AC079F
:1021A000122729AF0412230C200E028033900080E6
:1021B000E0FF12230C200E028026E4900086F0A39C
:1021C000F0900084E0FEA3E0FFC3900087E09F90C2
:1021D0000086E09E5026120512FF12230C200E05E9
:1021E000122825C322740129F9E43AFA900087E005
:1021F00004F070CD900086E004F080C5122825D34D
:0122000022BB
:0820350090007FEFF0A3EDF035
:10203D0012272990007FE0FF12230C200E02801C36
:10204D00900080E0FF12230C200E02800F12272932
:10205D0090007FE004FF12230C200E09122825E4C6
:10206D00120558C322E4900085F0900084E014FF1F
:10207D00A3E0C39F501B1224BAEF120558C20012E1
:10208D0027D1740129F9E43AFA900085E004F08033
:10209D00D91224BAEF120558D2001227D1122825D1
:0120AD00D35F
:0120AE00220F
:0226B500AE076E
:1026B700E490007EF0900100E0FFAD067B017A0018
:1026C700797E9000847401F01220354002D20D907B
:0426D700007EE0FFA2
:0126DB0022DC
:02280C00AE0715
:10280E00900100E0FFAD069000F5E0900084F0121C
:06281E0020359210A2100B
:012824002291
:1027030090007EEDF0AE07900100E0FFAD067B0187
:102713007A00797E900084E4F0A304F012219940BA
:0627230002D20DA20D22FE
:10274C00AE07AD079000EFE0FFA3E0900084CFF060
:10275C00A3EFF0900100E0FF1221994002D20DA2EC
:02276C000D223C
:1023F1000D0A202A2A2A2A2A2A2A2A2A2A2A2A2A83
:102401002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B
:102411002A000D0A4820746F61746C20636E742069
:102421003A20000D0A5620746F61746C203A200026
:042431000D0A200070
:081FB5004100FEFF4100FFFFA7
:1022B3009001007490F07DFF7F0830091E12270300
:1022C3007DFF7F091227037DFF7F0A1227037D7C91
:1022D3007F0B1227037DFF7F0C802A1227037D814A
:1022E3007F091227037DFF7F0A1227037D647F0B7B
:1022F3001227037DFF7F0C1227037D317F441227B2
:09230300037D1F7F511227032204
:1025E1009001007490F07DA17F311227037DBF7FA0
:1025F100321227037D177F33122703E4FD7F371241
:1026010027037D227F381227037D827F60122703F3
:07261100E4FD7F3A022703FC
:10264E009001007490F07D457F39122703E4FD7FE1
:10265E003B122703900000E02496FD7F3E122703D5
:10266E007D147F3F1227037D3C7F411227037D7C23
:05267E007F400227036C
:10276E009001007490F07D317F441227037D447FE9
:10277E00551227037D017F571227037D027F5A02D0
:02278E0027031F
:1023AB009001007492F07D017F101227037D087F4E
:1023BB00111227037D047F12122703900002E054B1
:1023CB0003FD7F13122703E4FD7F141227039000F4
:1023DB0079E0FD7F151227037D037F1A1227037DFA
:0623EB00037F1B02270323
:101197009001007492F09000FEE0C454F02423F50F
:1011A70082E43400F583A3E0FD7F18122703900043
:1011B700FEE0C454F02425F582E43400F583A3E06F
:1011C700FD7F191227039000FEE0C454F02419F59F
:1011D70082E43400F583A3E0FD7F1C12270390000F
:1011E700FEE0C454F02419F582E43400F583E0FDF1
:1011F7007F1D1227037D677F1E1227037D0C7F2F1C
:101207001227039000FEE0C454F0241DF582E43455
:1012170000F583A3E0FD7F341227039000FEE0C4AE
:1012270054F0241DF582E43400F583E0FD7F351288
:1012370027039000FEE0C454F0241FF582E4340035
:10124700F583A3E0FD7F361227039000FEE0C45428
:10125700F0241FF582E43400F583E0FD7F37122781
:10126700039000FEE0C454F02427F582E43400F52F
:1012770083A3E0FD7F381227039000FEE0C454F0FB
:101287002427F582E43400F583E0FD7F3912270334
:101297009000FEE0FFC454F0241BF582E43400F50F
:1012A70083E0FCA3E0FDEFC454F0241FF582E4348F
:1012B70000F583E0FEA3E0C39DFFEE9CFE9000FED9
:1012C700E0FDC454F02427F582E43400F583E0FA06
:1012D700A3E0FBC3EF9BFFEE9AFEEDC454F0242579
:1012E700F582E43400F583E0FCA3E0FDC3EF9DFF46
:1012F700EE9CAD077F3A1227039000FEE0FFC4542F
:10130700F0241BF582E43400F583E0FCA3E0FDEF55
:10131700C454F0241FF582E43400F583E0FEA3E013
:10132700C39DFFEE9CFE9000FEE0FDC454F0242711
:10133700F582E43400F583E0FAA3E0FBC3EF9BFFFB
:10134700EE9AFEEDC454F02425F582E43400F583CB
:10135700E0FCA3E0FDC3EF9DEE9CFD7F3B1227035E
:101367009000FEE0C454F02421F582E43400F583B4
:10137700A3E0FD7F3C1227039000FEE0C454F02455
:1013870021F582E43400F583E0FD7F3D12270390C9
:1013970000FEE0FFC454F02419F582E43400F5831D
:1013A700E0FCA3E0FDEFC454F0241DF582E4340013
:1013B700F583E0FEA3E0C39DFFEE9CFE9000FEE0F8
:1013C700FDC454F02421F582E43400F583E0FAA348
:1013D700E0FBC3EF9BFFEE9AFEEDC454F02423F528
:1013E70082E43400F583E0FCA3E0FDC3EF9DFFEE4C
:1013F7009CAD077F3E1227039000FEE0FFC454F028
:101407002419F582E43400F583E0FCA3E0FDEFC482
:1014170054F0241DF582E43400F583E0FEA3E0C315
:101427009DFFEE9CFE9000FEE0FDC454F02421F5E4
:1014370082E43400F583E0FAA3E0FBC3EF9BFFEE01
:101447009AFEEDC454F02423F582E43400F583E0DA
:0F145700FCA3E0FDC3EF9DEE9CFD7F3F0227034A
:102618009001007490F07D7F7F031227037F0A7E6C
:10262800001227B17DFF7F031227039001007492E7
:10263800F07D807F511227037F0A7E001227B1E4C4
:06264800FD7F5102270393
:101634009001007492F07D527F4E1227037DDE7F6D
:101644004F1227037DC07F501227037D807F5112E4
:101654002703E4FD7F511227037D5E7F1F122703BA
:101664007D017F201227037D2C7F211227037D011A
:101674007F221227037DFA7F23122703E4FD7F24B0
:101684001227037DC87F25122703E4FD7F26122736
:10169400037D5E7F271227037D017F281227037DA8
:1016A4002C7F291227037D017F2A1227037DFA7FCD
:1016B4002B122703E4FD7F2C1227037DC87F2D12F4
:1016C4002703E4FD7F2E1227039001007490F07D20
:1016D4007F7F031227037F0A7E001227B17DFF7FDD
:1016E400031227039001007492F0E4FD7F51122746
:1016F400037D647F42122703E4FD7F431227037DA9
:10170400047F44122703E4FD7F451227037D597F9C
:1017140046122703E4FD7F471227037DF27F481218
:1017240027037D067F49122703E4FD7F4A1227031E
:101734007D727F4B1227037D457F4C122703E4FD06
:101744007F4D1227037D087F52122703E4FD7F5348
:101754001227037DB27F54122703E4FD7F5512271D
:10176400037DE47F561227037D0D7F57122703E480
:10177400FD7F581227037DE47F591227037D8A7F5A
:101784005A122703E4FD7F5B1227037D347F5C122A
:1017940027037D4F7F1E122703E4FD7F5102270399
:102534009001007490F0900018E0FD7FB212270320
:102544009001007494F0300A0B7D097F0612270372
:102554007DF080097D0E7F06122703E4FD7F0712BC
:0A25640027037DD27F3412270322E3
:0D2871009001007490F07D307F4402270339
:0D287E009001007490F07D317F440227032B
:1018DF009001007490F07D247F501227037D057FC7
:1018EF0051122703900001E02414FD7F52122703A9
:1018FF00900003E0FEA3E0FF7C007D1912057C7CC5
:10190F00007D0712056AE4FD90007A1207ADE47BB3
:10191F0064FAF9F890007AE0FCA3E0FDA3E0FEA3DF
:10192F00E0FF1206E9E4AD077F69122703E47B6449
:10193F00FAF9F890007AE0FCA3E0FDA3E0FEA3E043
:10194F00FF1206E9EF2480FD7F69122703E47B6411
:10195F00FAF9F890007AE0FCA3E0FDA3E0FEA3E023
:10196F00FF1206E9AF03E4FEFDFC90007A1207AD0B
:10197F0090007AE0FCA3E0FDA3E0FEA3E0FFE4FB10
:10198F007A40F9F812065E90007A1207AD90007A4D
:10199F00E0FCA3E0FDA3E0FEA3E0FFE47B64FAF923
:1019AF00F81206E990007A1207AD90007CE02480CF
:1019BF00FD7F6C12270390007DE0FD7F6B122703E4
:0E19CF007DFB7F041227037DFF7F04022703A8
:101466009001007490F0E4FD7F801227037DFF7FDA
:10147600811227037D037F821227039000FEE0C4BA
:1014860054F02419F582E43400F583A3E0FD7F834C
:101496001227039000FEE0C454F02419F582E434C8
:1014A60000F583E0FD7F841227037D807F85122768
:1014B600037D107F8612270390000BE0FD7F8712C5
:1014C600270390000AE0FD7F88122703900011E0B1
:1014D600FD7F8912270390000FE0FD7F8A12270304
:1014E60090000EE0540175F080A4FF900013E02FE9
:1014F600540FFD7F8B122703900007E0FD7F8C12AF
:101506002703900009E0FD7F8D122703900008E075
:10151600C454F0FD900006E02DFD7F8E1227039047
:1015260000FEE0C454F02419F582E43400F583E0AB
:10153600FCA3E0FDE41202A6E4FBFA798078BF1270
:10154600000AC004C005C006C007900007E024FFDB
:10155600FD900006E034FFFCE41202A6A804A905EB
:10156600AA06AB07D007D006D005D004120204E4C1
:10157600FBFA798078451200FB1202DF90007AEEC2
:10158600F0A3EFF090007BE0FD7F8F122703900021
:101596007AE0FD7F901227039000FEE0C454F02409
:1015A6001BF582E43400F583E0FCA3E0FDE41202BF
:1015B600A6E4FBFA798078BF12000AC004C005C011
:1015C60006C007900009E024FFFD900008E034FF04
:1015D600FCE41202A6A804A905AA06AB07D007D008
:1015E60006D005D004120204E4FBFA79807845128D
:1015F60000FB1202DF90007AEEF0A3EFF090007B82
:10160600E0FD7F9112270390007AE0FD7F9212277A
:10161600037D9C7F7F122703900016E0FF90000554
:0E162600E02FFF900017E02FFD7FA8022703A2
:1027F1001222B31225E112264E12276E1223AB12BA
:0B28010011971216341225340226181D
:101AD700E490007AF0A3F0A3F0A3F09001007490D3
:101AE700F07F9D1226B5EF7F00FEC006C0077F9CE2
:101AF7001226B5EFFDD0E02DFED0E0340090007A3D
:101B0700F0A3CEF07F9F1226B5EF54077F00FEC0EB
:101B170006C0077F9E1226B5EFFDD0E02DFFD0E06F
:101B27003400FE90007CF0A3EFF0C39402EE940221
:101B37004014D3E0942290007CE094025008900077
:101B4700FE7405F0804190007CE0FEA3E0FFC394A3
:101B5700E0EE94024011D3EF94FEEE940250089009
:101B670000FE7401F08020C3EF9455EE94044011F9
:101B7700D3EF9475EE940450089000FE7404F0803F
:101B8700069000FE74FFF07BFF7A2379F11217A409
:101B97007BFF7A2479131217A490007AE0FEA3E062
:101BA700FFE4FCFD1208307BFF7A2479241217A486
:101BB70090007CE0FEA3E0FFE4FCFD1208307BFF11
:071BC7007A2479310217A412
:101D21009001007492F07D127F721227037DC07FB3
:101D310073122703E4FD7F741227037D297F751237
:101D410027037D807F761227037D387F7712270353
:101D51007D477F781227037D987F791227037D6560
:101D61007F7A1227037D487F7B1227037D2C7F7C9E
:101D71001227037D057F7D1227037D807F70122747
:101D8100037D767F711227037D337F4E1227037DFA
:101D9100337F4F1227037DD37F501227037D807F2E
:041DA10051022703C1
:101DA5009001007492F07D127F721227037D047FEB
:101DB500731227037D017F741227037D197F751226
:101DC5002703E4FD7F761227037DD07F7712270353
:101DD5007D257F781227037D727F791227037DEE9B
:101DE5007F7A1227037D267F7B1227037D287F7C40
:101DF5001227037D057F7D1227037D807F701227C3
:101E0500037D767F711227037D997F4E1227037D0F
:101E1500997F4F1227037D697F501227037D807FAD
:041E2500510227033C
:101E29009001007492F07D127F721227037D847FE6
:101E390073122703E4FD7F741227037D2C7F75122B
:101E490027037DD07F761227037D407F77122703F2
:101E59007D227F781227037D607F791227037D71A8
:101E69007F7A1227037D237F7B1227037D407F7CA6
:101E79001227037D057F7D1227037D807F7012273E
:101E8900037D767F711227037D667F4E1227037DBE
:101E9900667F4F1227037D267F501227037D807F9F
:041EA90051022703B8
:101EAD009001007492F07D127F721227037D7A7F6C
:101EBD0073122703E4FD7F741227037D247F7512AF
:101ECD0027037DD07F761227037DE07F77122703CE
:101EDD007D127F781227037D5A7F791227037D0D9E
:101EED007F7A1227037D237F7B1227037D3E7F7C24
:101EFD001227037D067F7D1227037D807F701227B9
:101F0D00037D767F711227037D667F4E1227037D39
:101F1D00667F4F1227037D267F501227037D807F1A
:041F2D005102270333
:101F31009001007492F07D127F721227037D647FFD
:101F410073122703E4FD7F741227037D1E7F751230
:101F51002703E4FD7F761227037DE07F77122703B5
:101F61007D157F781227037DB47F791227037D12B7
:101F71007F7A1227037D257F7B1227037D147F7CC7
:101F81001227037D0A7F7D1227037D807F70122730
:101F9100037D767F711227037D9F7F4E1227037D7C
:101FA100F47F4F1227037D497F501227037D807FE5
:041FB10051022703AF
:101BCE000D0A2A2A2A2A2A2A2A2A2A2A2A2A2A2AA4
:101BDE002A2A2A2A2A2A2A2A73746172742A2A2AFB
:101BEE002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A47
:101BFE002A2A2A2A2A2A000D0A20000D0A2A2A2A0F
:101C0E002A2A2A2A2A2A2A2A2A2A2A2A2A2A4C54DA
:101C1E00383931324220726573657420646F6E6597
:101C2E002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A06
:101C3E002A000D0A2A2A2A2A2A2A2A2A2A2A2A2A5D
:101C4E002A2A2A2A4C54383931324220496E697474
:101C5E0069616C20646F6E652A2A2A2A2A2A2A2A2A
:101C6E002A2A2A2A2A2A2A2A000D0A4C54383931BD
:101C7E0032422048444D4920636F6E666967206486
:071C8E006F6E652E2E2E0083
:101FBD006060001902D001E0035A020D003C003EA2
:101FCD000006001E050002D0067202EE00DC00289D
:101FDD000005001405000320060A0358008C002498
:101FED0000080018040002580540027B008C001404
:101FFD000003001407800438089804650094002C31
:10200D0000050024050001E005B402120050001483
:10201D00000A0014500006050001E005B40212008C
:07202D00500014000A00142A
:1024790043B10843B20843B11043B21043B1014319
:10248900B20143AC0153ADFE43B30853B4F743B3B0
:102499001053B4EF7F007EC27D017C001225A85342
:1024A900E9FB43E92043EA0853EBF7439B02D2AF28
:0124B9002200
:0728BE009001007490F0226C
:10284F00C2807F647E001227B1D2807F647E000237
:02285F0027B19F
:1024F7009000187401F0D20AC2099000027404F027
:1025070090007974A8F09000007420F0D20C300984
:102517001B9000037414F0A37450F0E4900001F0D2
:0D252700900005F0900016F0A37413F02250
:1019DD001224797FC87E001227B17FC87E0012279E
:1019ED00B17FC87E001227B17FC87E001227B17F5C
:1019FD00C87E001227B17BFF7A1B79CE1217A41275
:101A0D0028BE12284F7BFF7A1C79051217A47BFF85
:101A1D007A1C79091217A41224F79000FE7405F0B0
:101A2D001227F17BFF7A1C79051217A47BFF7A1C14
:101A3D0079401217A47BFF7A1C79051217A430097F
:101A4D00101218DF1214667F2C7E011227B1122896
:101A5D00717FC87E001227B1121AD79000FEE0FFE9
:101A6D009000FFE06F605AEFF0F4604F3009031201
:101A7D00287E121197121634122534122618900151
:101A8D00007492F0E4FD7F701227037BFF7A1C79BE
:101A9D00051217A47BFF7A1C79771217A47BFF7AA6
:101AAD001C79051217A43009181218DF1214667F5D
:101ABD002C7E011227B11228718006300C03121FE3
:0A1ACD00317F267E021227B1808EC1
:102790000A2055494431203D203078256278000ACE
:1027A0002055494432203D20307825627800307829
:0127B0000028
:1025A80053B1BF53B2BF53B17F53B27F75985043F5
:1025B8008920438780438E1053C4DFAB07AA06A93E
:1025C80005A8047F407E427D0F7C001206E9EF04D7
:0925D800F404F58DD28ED2992293
:102126009000FA1207AD53B1BF53B2BF53B17F53FC
:10213600B27F75985043878053C4F843C4209000FB
:10214600FAE0F8A3E0F9A3E0FAA3E0FB7F407E42C1
:102156007D0F7C001206E9C374FF9FFF74FF9EFE8D
:10216600E49DFDE49CFC780812079A8FC69000FA5D
:10217600E0F8A3E0F9A3E0FAA3E0FB7F407E427D0E
:102186000F7C001206E9C374FF9FFF8FC543C40886
:03219600D29922B9
:07289F003098FDAF99C298CB
:0128A600220F
:0828A700C2998F993099FD22BE
:10256E00EF540FFEEF54F0C4540FFFEEC3940AEE77
:10257E0050052430FD80032437FDAE05EFC3940AC9
:10258E00EF50052430FD80032437FDAF051228A738
:0A259E00AF061228A77F200228A72D
:0528C5007F0A0228A7B4
:0328CA00020D7F7D
:10283C00AB07AA06EEFF12256EAF0312256E7F0AB8
:03284C000228A7B8
:0828AF001228A77F200228A7D0
:10243500A2AF920FC2AF75C7AA75C755439F01A238
:102445000F92AF8FA6E4F5A775AF04A2AF920FC2A6
:10245500AF75C7AA75C75543A401A20F92AFAFAE1A
:10246500A2AF920FC2AF75C7AA75C755539FFEA2FB
:032475000F92AF14
:012478002241
:102683007F02122435AE077F05122435900101EF36
:10269300F07BFF7A277990AF069000BEEFF0120D22
:1026A3007F7BFF7A27799F900101E09000BEF002C3
:0226B3000D7F99
:0328CD000228A737
:10235C00AB07AA067C007D0A1205D1C3EF940AEEE6
:10236C00648094805005EF2430800E7C007D0AAF91
:10237C0003AE021205D1EF2457FF1228CD7C007D4D
:10238C000AAF03AE021205D1C3ED940AEC6480943B
:0F239C0080ED5004243080022457FF1228CD22F8
:1020AF009000B9EEF0A3EFF07BFF7A2779AE120D17
:1020BF007F7F027E007D007C0012225A9000B9E0E3
:1020CF00FEA3E0FF7C007D101205D1C3EF940AEE52
:1020DF00648094805005EF243080129000B9E0FEA8
:1020EF00A3E0FF7C007D101205D1EF2457FF1228CB
:1020FF00CD9000B9E0FEA3E0FF7C007D101205D16A
:10210F00C3ED940AEC64809480ED50042430800277
:07211F002457FF1228CD2216
:0608300090007E1207ADEE
:10083600E4900082F0A31207B90000000090007E49
:10084600E0FCA3E0FDA3E0FEA3E0FF900083120717
:10085600AD7F201228CD7F7F7E967D987C0090000C
:1008660083E0F8A3E0F9A3E0FAA3E0FBD31207893B
:10087600407A7B807A9679987800900083E0FCA392
:10088600E0FDA3E0FEA3E0FF1206E9E47B0AFAF925
:10089600F8D31207897B807A96799878009000833E
:1008A600E0FCA3E0FDA3E0FEA3E0FF40081206E99A
:1008B600EF243080061206E9EF2457FF1228CD9068
:1008C6000083E0FCA3E0FDA3E0FEA3E0FF7B807ACB
:1008D60096799878001206E9AC00AD01AE02AF0336
:1008E6009000831207AD9000827401F07F3F7E4234
:1008F6007D0F7C00900083E0F8A3E0F9A3E0FAA363
:10090600E0FBD3120789407C7B407A42790F78005E
:10091600900083E0FCA3E0FDA3E0FEA3E0FF120647
:10092600E9E47B0AFAF9F8D31207897B407A42791F
:100936000F7800900083E0FCA3E0FDA3E0FEA3E0B7
:10094600FF40081206E9EF243080061206E9EF247C
:1009560057FF1228CD900083E0FCA3E0FDA3E0FE44
:10096600A3E0FF7B407A42790F78001206E9AC00DB
:10097600AD01AE02AF039000831207AD9000827402
:1009860001F0800B900082E060057F301228CD7F59
:100996009F7E867D017C00900083E0F8A3E0F9A3AA
:1009A600E0FAA3E0FBD31207895003020A417BA0B9
:1009B6007A8679017800900083E0FCA3E0FDA3E04D
:1009C600FEA3E0FF1206E9E47B0AFAF9F8D3120760
:1009D600897BA07A864019097800900083E0FCA301
:1009E600E0FDA3E0FEA3E0FF1206E9EF2430801845
:1009F60079017800900083E0FCA3E0FDA3E0FEA36C
:100A0600E0FF1206E9EF2457FF1228CD900083E09D
:100A1600FCA3E0FDA3E0FEA3E0FF7BA07A867901BC
:100A260078001206E9AC00AD01AE02AF0390008378
:100A36001207AD9000827401F0800B900082E06096
:100A4600057F301228CDE47F0F7E27FDFC900083C2
:100A5600E0F8A3E0F9A3E0FAA3E0FBD3120789507C
:100A660003020AF2E47B107A27F9F8900083E0FC8F
:100A7600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA89
:100A8600F9F8D3120789E47B107A274017F890000B
:100A960083E0FCA3E0FDA3E0FEA3E0FF1206E9EF7E
:100AA60024308016F9F8900083E0FCA3E0FDA3E073
:100AB600FEA3E0FF1206E9EF2457FF1228CD9000AF
:100AC60083E0FCA3E0FDA3E0FEA3E0FFE47B107A55
:100AD60027F9F81206E9AC00AD01AE02AF039000AB
:100AE600831207AD9000827401F0800B900082E0C3
:100AF60060057F301228CDE47FE77E03FDFC900081
:100B060083E0F8A3E0F9A3E0FAA3E0FBD312078998
:100B16005003020BA3E47BE87A03F9F8900083E024
:100B2600FCA3E0FDA3E0FEA3E0FF1206E9E47B0AD6
:100B3600FAF9F8D3120789E47BE87A034017F890AC
:100B46000083E0FCA3E0FDA3E0FEA3E0FF1206E9BC
:100B5600EF24308016F9F8900083E0FCA3E0FDA3B3
:100B6600E0FEA3E0FF1206E9EF2457FF1228CD901E
:100B76000083E0FCA3E0FDA3E0FEA3E0FFE47BE846
:100B86007A03F9F81206E9AC00AD01AE02AF0390A4
:100B960000831207AD9000827401F0800B900082F2
:100BA600E060057F301228CDE47F63FEFDFC9000F7
:100BB60083E0F8A3E0F9A3E0FAA3E0FBD3120789E8
:100BC6005003020C50E47B64FAF9F8900083E0FCD1
:100BD600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA28
:100BE600F9F8D3120789E47B644017F8900083E094
:100BF600FCA3E0FDA3E0FEA3E0FF1206E9EF24302C
:100C06008017FAF9F8900083E0FCA3E0FDA3E0FE6C
:100C1600A3E0FF1206E9EF2457FF1228CD900083C8
:100C2600E0FCA3E0FDA3E0FEA3E0FFE47B64FAF9A9
:100C3600F81206E9AC00AD01AE02AF0390008312D4
:100C460007AD9000827401F0800B900082E0600591
:100C56007F301228CDE47B0AFAF9F8900083E0FC95
:100C6600A3E0FDA3E0FEA3E0FF1206E9E47B0AFA97
:100C7600F9F8D3120789E44017F8900083E0FCA343
:100C8600E0FDA3E0FEA3E0FF1206E9EF24308019A1
:100C96007B0AFAF9F8900083E0FCA3E0FDA3E0FEEE
:100CA600A3E0FF1206E9EF2457FF1228CDE47B0AE2
:100CB600FAF9F8900083E0FCA3E0FDA3E0FEA3E0D0
:100CC600FF1206E9AC00AD01AE02AF03E47B0AFAFF
:100CD600F9F8D3120789E44017F8900083E0FCA3E3
:100CE600E0FDA3E0FEA3E0FF1206E9EB2430801945
:100CF6007B0AFAF9F8900083E0FCA3E0FDA3E0FE8E
:0D0D0600A3E0FF1206E9EB2457FF1228CDF1
:010D130022BD
:0B17A40090007EEBF0A3EAF0A3E9F058
:1017AF009000A91207B900000000E49000ADF0A36B
:1017BF00F0F9A3C9F0A3F0A3E9F0E4A3F0F9A3C9EA
:1017CF00F0A3F0A3E9F0A37401F0A37400F0A374E5
:1017DF0081F090007EE0F9A3E0FAA3E09000B3C996
:1017EF00F0A3EAF0A3E9F09000B3E0FBA3E0FAA3C3
:1017FF00E0F912051270030218D564256003021870
:10180F00BB9000B3A3E475F001120607A9F0FA121A
:10181F00051224DB70030218A924E1602B24EC606D
:10182F005024F4602324EC6048241570729000B6A5
:10183F00E0FBA3E475F00212061DA9F0FA120633BD
:10184F009000B2F0E0FF80549000B6E0FBA3E47587
:10185F00F00112061DA9F0FA120512FF9000ADE477
:10186F00F0A3EFF09000ADA3E0FF7E0012235C80A9
:10187F002E9000B6E0FBA3E475F00112061DA9F04F
:10188F00FA120512FF9000ADE4F0A3EFF09000AD57
:10189F00E0FEA3E0FF1220AF80057F251228CD9038
:1018AF0000B4E475F0011206070217F69000B3E0DA
:1018BF00FBA3E475F00112061DA9F0FA120512FF41
:0F18CF001228CD0217F69000B6E4F0A3F0A3F0B4
:0118DE0022E7
:1000030002034BE86480F8E933E83360110460F0DD
:10001300ED33EC337009E8FCE9FDEAFEEBFF220463
:1000230060DED3EB9FEA9EE99DE8C2E78CF0C2F75E
:1000330095F0400CE8CCF8E9CDF9EACEFAEBCFFB2A
:1000430012031685D0F05804700320D5B3E804706A
:10005300075002B2D502035592D5EC0460F7E4CC05
:10006300C0E0C398F8603B94186008400DD0E0FBF3
:1000730002032DE4FBFAC9FC8028E830E406E4C956
:10008300FBE4CAFCE830E305E4C9CACBFCE8540747
:100093006010F8C3E913F9EA13FAEB13FBEC13FC52
:1000A300D8F130F52FC3E49CFCEF9BFFEE9AFEEDF5
:1000B30099FDD0E0FBEF4E4D4C701222DB0302039F
:1000C30052EC2CFCEF33FFEE33FEED33FDED30E766
:1000D300EB02032DEF2BFFEE3AFEED39FDD0E0FBF3
:1000E30050130BBB0003020355ED13FDEE13FEEF9C
:0800F30013FFEC13FC02032DC6
:1000FB00EC4D6011E8497017ED33EC3304600DE4FF
:10010B00FCFFFEFD22E933E8330470F802034B12C7
:10011B00031658046009E4CC2481500628500902C8
:10012B000355284003020352C0E0EB4A7044B980E8
:10013B0006D0E0FB020341EF4E701CBD8008EBFFC5
:10014B00EAFEE9FD80EBE98DF0A4FEE5F00201E4A7
:10015B00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE89DF
:10016B00F0A42EFFE435F0CD89F0A42DFEE435F09C
:10017B008067EF4E7005BD80D780C3EF8BF0A4ACCA
:10018B00F0EE8BF0A42CFCE435F0F8EF8AF0A42C05
:10019B00E5F038FCE433CB8DF0A42CFCE5F03BF818
:1001AB00EE8AF0A42CFCE5F038F8E433CF89F0A408
:1001BB002CFCE5F038CF3400CE89F0A42FFFE5F00E
:1001CB003EFEE433C98DF0A42EFEE5F039CD8AF066
:1001DB00A42FFFE5F03EFEE43DFD33D0E0FB5007DE
:1001EB000BBB000F020355EC2CFCEF33FFEE33FE81
:0601FB00ED33FD02032DAF
:10020100020355EC5D046005E85904700302034BD9
:10021100120316580460F6EC4860F2EC7004FDFE1F
:10022100FF22C860DB2481C85009C39860025006D0
:100231000203529850CAF582E9294B4A7005AB82F4
:1002410002034175F0007C1A7880C3EF9BEE9AEDB2
:1002510099400DC3EF9BFFEE9AFEED99FDE842F048
:10026100DC23ACF0D0E0FFD0E0FED0E0FDAB82209B
:10027100E7101BEB60BAEC2CFCEF33FFEE33FEED25
:1002810033FD02032DE803F830E705C0F075F000F7
:10029100EF2FFFEE33FEED33FD40B830E7C280AA09
:1002A10075F020800E75F010800575F0087D007ED8
:1002B100007F003392D530D50312077BEC33401019
:1002C100EF33FFEE33FEED33FDEC33FCD5F0ED22E1
:0E02D100E5F0247EA2D513CC92E7CDCEFF221D
:1002DF00EDD2E7CD33EC3392D524814006E4FFFE17
:1002EF00FDFC22FCE4CFCECDCC24E0501174FF8076
:1002FF00EDC3CC13CCCD13CDCE13CECF13CF047013
:07030F00F030D5DE02077B90
:100D1400E50824BEF582E43400F583E0050822905A
:100D240000BB3007039000BEE475F0011207EA022D
:100D340005122000E97F2ED2008018EF540F249072
:100D4400D43440D4FF30040BEF24BFB41A00500352
:100D54002461FFE50960021509050CE50C70020524
:100D64000B30070E9000BBE475F0011207EAEF02A6
:100D740005580226DC7403D2078003E4C207F50891
:100D84009000BB120801E4F509F50BF50CE50960C8
:100D9400077F20120D5780F5750AFFC201C200C2F9
:100DA40002C203C205C206C208120D23FF700D3031
:100DB40007057F00120D68AF0CAE0B22B4255FC28D
:100DC400D5C204120D23FF24D0B40A00501A75F0C2
:100DD4000A780930D50508B6FF0106C6A426F62010
:100DE400D5047002D20380D924CFB41A00EF500482
:100DF400C2E5D20402105AD20180C6D20080C0D209
:100E04000280BCD2D580BAD20580B47F20120D579F
:100E14002002077401B5090040F1120D14FF120DF0
:100E240057020D91D208D2068095120D14FB120DB3
:100E340014FA120D14F94A4B700679587A117BFF93
:100E440020022EE509602A7E008E82758300120539
:100E54002B60060EEE650A70F0C2D5EBC0E0EAC066
:100E6400E0E9C0E0EE1210BBD0E0F9D0E0FAD0E047
:100E7400FB120512FF60AAEBC0E0EAC0E0E9C0E0A3
:100E8400120D57D0E02401F9D0E03400FAD0E0FB91
:100E9400E50A0460DCD50AD98087D20280A2121048
:100EA4009D60F7E50A700104120360A90A600DE56C
:100EB4000A600914F50A121145EF60F3EA30E702FB
:100EC400F404C3995079EAF4250A0430E701E404F0
:100ED400F50A800D12109D60C1EA050A250A120365
:100EE40060EA9000EAF030E701E4250A04D50A0438
:100EF400200501141210BBE4C0E01211459000EA71
:100F0400E0601320E70714F0120D3F802204F0D0B4
:100F1400E014C0E07F00120D3FE50A6007120D36B1
:100F2400150A800B300503120D36D0E0020D91D066
:100F3400E00480C412109D609EE50A0412036090D0
:100F440000EAEAF0E50A2005026001042404121014
:010F5400BBE1
:100F550074FF04C0E0121145120D3FE50A20050299
:100F65006003120D36D0E0B50AE87F45120D4990B1
:100F750000EAE07F2B30E7047F2DF404C0E0120D7A
:100F850057D0E075F00A84C0F0120D40D0E0120D84
:100F950040020D91791080027908C206C2088008C6
:100FA500D2D5790A8004790AC2D5E50A047002F51A
:100FB5000AE4FAFDFEFF120D14FC7B082001131252
:100FC5000D14FD7B1030000A120D14FE120D14FFD6
:100FD5007B20EC3382D592D55013C3E43000069FB5
:100FE500FFE49EFEE42001039DFDE49CFCE4CBF8B8
:100FF500C201EC700CCFCECDCCE824F8F870F380AC
:1010050017C3EF33FFEE33FEED33FDEC33FCEB336B
:10101500FB994002FB0FD8E9EB300105F8D0E0C49D
:1010250048B201C0E00AEC4D4E4F78207B0070C2FB
:10103500EAB50A0040BCC0E01210BDD0F0D0E020F7
:101045000104C4C0E0C4B201C0F0120D40D0F0D517
:10105500F0EB020D9112080A0E2E530F99580DFF51
:101065004C0DFB420F9D4F0FA5440FA5490E144390
:101075000FAB550ED8460F38450EA2471178500EC6
:10108500032D0E072E0E2A2B0E0B230E2820116181
:101095002A0DC34800000E22E50AB4FF03750A06AF
:1010A500120D14FC120D14FD120D14FE120D14FF79
:1010B5009000E302039D790AA2D5200314300509A7
:1010C500B910020404B9080104A2D5200602500192
:1010D500042002689202B509005034C0E07F203038
:1010E50003197F30A20272067205500F121114C245
:1010F50002C206C205C2087F30800F300503E9C071
:10110500E0120D57300503D0E0F9D0E0B509CC3039
:1011150005177F30B9100C120D577F583004077F23
:10112500788003B90803120D573002057F2D020D93
:10113500577F202008F87F2B2006F322920280CFCC
:101145007F00B40700500B24E3F582E43400F583F7
:10115500E0FF22286E756C6C2900D201120D143047
:1011650001F8C201780930D50108F6020DC32D50EA
:10117500434958120D142403B405004001E49011AD
:101185007393120D48743A120D48D203750904027F
:021195000F99B0
:10031600E9D2E7C933E833F892D5EDD2E7CD33EC2D
:0703260033FC5002B2D522A6
:10032D00EC30E7100FBF000C0EBE00080DBD000431
:10033D000BEB6014A2D5EB13FCED92E7FD2274FFDD
:10034D00FCFDFEFF22E480F8A2D574FF13FC7D8036
:03035D00E480EF4A
:10036000F920E73624F950037907E4F42402FBE589
:1003700082158270021583DBF6E024FB501BE960D6
:1003800014E4F0E582158270021583E004F0B40AEB
:0D03900008E4F0D9EE7401F00A22C2D52273
:10039D00ED33EC3392D5FA602AB4FF33EDC2E77B2F
:1003AD00FF60067A0379C2E4227A0379CB20D50463
:1003BD007A0379C6224E614E002B494E46002D49D7
:1003CD004E4600E47A08F0A3DAFC7B00740722C0E5
:1003DD0083C082ECC0E0EDC0E0EEC0E0EFC0E0EA2B
:1003ED0075F010A4CAABF075F04DA42BFBE435F0FD
:1003FD00FCEA2410FAEB34C5FBEC34D9FCEDC2E772
:10040D00FF75F056A4F42411C5F0F434C58FF0A493
:10041D002AE5F03BE43CF020E7141204D2D0E0FFD3
:10042D00D0E0FED0E0FDD0E0FC1202048014F40414
:10043D001204D2D0E0FFD0E0FED0E0FDD0E0FC12FF
:10044D0000FBD082D083E0FAEDD2E7CD33EC33243C
:10045D0082FBE4C3CF33CFCE33CECD33CD33DBF3FD
:10046D007B0775F00A846004F0A31B0AE5F0F0A386
:10047D008FF0740AA4FFACF08EF0740AA42CFEACBD
:10048D00F050010C8DF0740AA42CFDE435F0F0A3AE
:05049D00DBDE74072204
:1004A2003F8000004120000042C80000447A000062
:1004B200461C400047C35000497424004B189680E4
:1004C2004CBEBC205A0E1BCA6753C21C749DC5AEDB
:1004D200FB60065407601C2323120500EB543860AE
:1004E200091204EC1204FB1200FBECF8EDF9EEFA2F
:1004F200EFCB22EB1204FB80F1543803241C90044E
:10050200A2FE93FC0EEE93FD0EEE930ECE93FF220F
:101CA1000219DDE493A3F8E493A34003F68001F263
:101CB10008DFF48029E493A3F85407240CC8C33344
:101CC100C4540F4420C8834004F456800146F6DF13
:101CD100E4800B0102040810204080901FB5E47ECF
:101CE100019360BCA3FF543F30E509541FFEE49308
:101CF100A360010ECF54C025E060A840B8E493A3CF
:101D0100FAE493A3F8E493A3C8C582C8CAC583CAF9
:101D1100F0A3C8C582C8CAC583CADFE9DEE780BEB1
:0120340000AB
:10051200BB010689828A83E0225002E722BBFE02E7
:09052200E32289828A83E493221A
:10052B00BB010CE58229F582E5833AF583E0225085
:10053B0006E92582F8E622BBFE06E92582F8E222CF
:0D054B00E58229F582E5833AF583E49322E9
:10055800BB010689828A83F0225002F722BBFE0182
:02056800F3227C
:10056A00EF8DF0A4A8F0CF8CF0A428CE8DF0A42EA5
:02057A00FE225F
:10057C00BC000BBE0029EF8DF084FFADF022E4CC63
:10058C00F875F008EF2FFFEE33FEEC33FCEE9DEC2C
:10059C00984005FCEE9DFE0FD5F0E9E4CEFD22ED72
:1005AC00F8F5F0EE8420D21CFEADF075F008EF2FBC
:1005BC00FFED33FD4007985006D5F0F222C398FDAD
:0505CC000FD5F0EA224A
:1005D100C2D5EC30E709B2D5E4C39DFDE49CFCEE45
:1005E10030E715B2D5E4C39FFFE49EFE12057CC33C
:1005F100E49DFDE49CFC800312057C30D507C3E437
:060601009FFFE49EFE22B3
:10060700C5F0F8A3E028F0C5F0F8E582158270027E
:060617001583E038F0221B
:10061D00A3F8E0C5F025F0F0E58215827002158390
:06062D00E0C838F0E822ED
:10063300BB010A89828A83E0F5F0A3E02250068792
:10064300F009E71922BBFE07E3F5F009E319228954
:0B065300828A83E493F5F07401932287
:10065E00E88FF0A4CC8BF0A42CFCE98EF0A42CFC3B
:10066E008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4B9
:10067E002DCC3825F0FDE98FF0A42CCD35F0FCEB18
:10068E008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39DD
:0F069E00FEE43CFCEAA42DCE35F0FDE43CFC224A
:1006AD0075F008758200EF2FFFEE33FECD33CDCC04
:1006BD0033CCC58233C5829BED9AEC99E582984087
:1006CD000CF582EE9BFEED9AFDEC99FC0FD5F0D664
:1006DD00E4CEFBE4CDFAE4CCF9A88222B800C1B98E
:1006ED000059BA002DEC8BF084CFCECDFCE5F0CBCC
:1006FD00F97818EF2FFFEE33FEED33FDEC33FCEB05
:10070D0033FB10D703994004EB99FB0FD8E5E4F9BF
:10071D00FA227818EF2FFFEE33FEED33FDEC33FCAC
:10072D00C933C910D7059BE99A4007EC9BFCE99AA0
:10073D00F90FD8E0E4C9FAE4CCFB2275F010EF2FE5
:10074D00FFEE33FEED33FDCC33CCC833C810D707E5
:10075D009BEC9AE899400AED9BFDEC9AFCE899F820
:0E076D000FD5F0DAE4CDFBE4CCFAE4C8F922B3
:0E077B00C3E49FFFE49EFEE49DFDE49CFC228F
:10078900EB9FF5F0EA9E42F0E99D42F0E89C45F0C6
:01079900223D
:10079A00E8600FECC313FCED13FDEE13FEEF13FF3D
:0307AA00D8F12261
:0C07AD00ECF0A3EDF0A3EEF0A3EFF022BF
:1007B900A8828583F0D083D0821207D01207D01285
:1007C90007D01207D0E473E493A3C583C5F0C583AA
:1007D900C8C582C8F0A3C583C5F0C583C8C582C88A
:0107E90022ED
:1007EA00F8E0FBA3A3E0F925F0F0E5821582700298
:0707FA001583E0FA38F0223C
:09080100EBF0A3EAF0A3E9F022F8
:10080A00D083D082F8E4937012740193700DA3A37D
:10081A0093F8740193F5828883E473740293686091
:06082A00EFA3A3A380DF91
:1026DC00EFB40A07740D1226E7740A309811A89902
:1026EC00B8130CC2983098FDA899C298B811F6305E
:0726FC0099FDC299F5992236
:00000001FF
@@ -1,198 +0,0 @@
$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
; Version 8.01
;
; *** <<< Use Configuration Wizard in Context Menu >>> ***
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; Lx51 invocation:
;
; Lx51 your object file list, STARTUP.OBJ controls
;
;------------------------------------------------------------------------------
;
; User-defined <h> Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; <o> IDATALEN: IDATA memory size <0x0-0x100>
; <i> Note: The absolute start-address of IDATA memory is always 0
; <i> The IDATA space overlaps physically the DATA and BIT areas.
IDATALEN EQU 80H
;
; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of XDATA memory
XDATASTART EQU 0
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory
PDATASTART EQU 0H
;
; <o> PDATALEN: PDATA memory size <0x0-0xFF>
; <i> The length of PDATA memory in bytes.
PDATALEN EQU 0H
;
;</h>
;------------------------------------------------------------------------------
;
;<h> Reentrant Stack Initialization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; <h> Stack Space for reentrant functions in the SMALL model.
; <q> IBPSTACK: Enable SMALL model reentrant stack
; <i> Stack space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
; <i> Set the top of the stack to the highest location.
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the LARGE model.
; <q> XBPSTACK: Enable LARGE model reentrant stack
; <i> Stack space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the COMPACT model.
; <q> PBPSTACK: Enable COMPACT model reentrant stack
; <i> Stack space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
;
; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;</h>
;------------------------------------------------------------------------------
;
; Memory Page for Using the Compact Model with 64 KByte xdata RAM
; <e>Compact Model Page Definition
;
; <i>Define the XDATA page used for PDATA variables.
; <i>PPAGE must conform with the PPAGE set in the linker invocation.
;
; Enable pdata memory page initalization
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;
; <o> PPAGE number <0x0-0xFF>
; <i> uppermost 256-byte address of the page used for PDATA variables.
PPAGE EQU 0
;
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
; <i> most 8051 variants use P2 as uppermost address byte
PPAGE_SFR DATA 0A0H
;
; </e>
;------------------------------------------------------------------------------
; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
;<h> Code Banking
; <q> Select Bank 0 for L51_BANK.A51 Mode 4
#if 0
; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
EXTRN CODE (?B_SWITCH0)
CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
#endif
;</h>
LJMP ?C_START
END
@@ -1,128 +0,0 @@
/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
//***********************************************************************************************************
// Nuvoton Technoledge Corp.
// Website: http://www.nuvoton.com
// E-Mail : MicroC-8bit@nuvoton.com
// Date : Apr/21/2016
//***********************************************************************************************************
#include "Include.h"
bit BIT_TMP;
/***********************************************************
***********************************************************/
void Timer0_Delay100us( UINT32 u32CNT )
{
clr_T0M; //T0M=0, Timer0 Clock = Fsys/12
TMOD |= 0x01; //Timer0 is 16-bit mode
set_TR0; //Start Timer0
while( u32CNT != 0 )
{
TL0 = LOBYTE( TIMER_DIV12_VALUE_100us ); //Find define in "Function_define.h" "TIMER VALUE"
TH0 = HIBYTE( TIMER_DIV12_VALUE_100us );
while( TF0 != 1 )
{
; //Check Timer0 Time-Out Flag
}
clr_TF0;
u32CNT--;
}
clr_TR0; //Stop Timer0
}
/***********************************************************
***********************************************************/
void Timer0_Delay1ms( UINT32 u32CNT )
{
clr_T0M; //T0M=0, Timer0 Clock = Fsys/12
TMOD |= 0x01; //Timer0 is 16-bit mode
set_TR0; //Start Timer0
while( u32CNT != 0 )
{
TL0 = LOBYTE( TIMER_DIV12_VALUE_1ms ); //Find define in "Function_define.h" "TIMER VALUE"
TH0 = HIBYTE( TIMER_DIV12_VALUE_1ms );
while( TF0 != 1 )
{
; //Check Timer0 Time-Out Flag
}
clr_TF0;
u32CNT--;
}
clr_TR0; //Stop Timer0
}
/*
//------------------------------------------------------------------------------
void Timer1_Delay10ms(UINT32 u32CNT)
{
clr_T1M; //T1M=0, Timer1 Clock = Fsys/12
TMOD |= 0x10; //Timer1 is 16-bit mode
set_TR1; //Start Timer1
while (u32CNT != 0)
{
TL1 = LOBYTE(TIMER_DIV12_VALUE_10ms); //Find define in "Function_define.h" "TIMER VALUE"
TH1 = HIBYTE(TIMER_DIV12_VALUE_10ms);
while (TF1 != 1); //Check Timer1 Time-Out Flag
clr_TF1;
u32CNT --;
}
clr_TR1; //Stop Timer1
}
//------------------------------------------------------------------------------
void Timer2_Delay500us(UINT32 u32CNT)
{
clr_T2DIV2; //Timer2 Clock = Fsys/4
clr_T2DIV1;
set_T2DIV0;
set_TR2; //Start Timer2
while (u32CNT != 0)
{
TL2 = LOBYTE(TIMER_DIV4_VALUE_500us); //Find define in "Function_define.h" "TIMER VALUE"
TH2 = HIBYTE(TIMER_DIV4_VALUE_500us);
while (TF2 != 1); //Check Timer2 Time-Out Flag
clr_TF2;
u32CNT --;
}
clr_TR2; //Stop Timer2
}
//------------------------------------------------------------------------------
void Timer3_Delay100ms(UINT32 u32CNT)
{
T3CON = 0x07; //Timer3 Clock = Fsys/128
set_TR3; //Trigger Timer3
while (u32CNT != 0)
{
RL3 = LOBYTE(TIMER_DIV128_VALUE_100ms); //Find define in "Function_define.h" "TIMER VALUE"
RH3 = HIBYTE(TIMER_DIV128_VALUE_100ms);
while ((T3CON&SET_BIT4) != SET_BIT4); //Check Timer3 Time-Out Flag
clr_TF3;
u32CNT --;
}
clr_TR3; //Stop Timer3
}
//------------------------------------------------------------------------------
void Timer3_Delay10us(UINT32 u32CNT)
{
T3CON = 0x07; //Timer3 Clock = Fsys/128
set_TR3; //Trigger Timer3
while (u32CNT != 0)
{
RL3 = LOBYTE(TIMER_DIV4_VALUE_10us); //Find define in "Function_define.h" "TIMER VALUE"
RH3 = HIBYTE(TIMER_DIV4_VALUE_10us);
while ((T3CON&SET_BIT4) != SET_BIT4); //Check Timer3 Time-Out Flag
clr_TF3;
u32CNT --;
}
clr_TR3; //Stop Timer3
}
//*/
@@ -1,262 +0,0 @@
/************************************************************
* ProjectName: LT8522EX
* FileName: lt8522ex.c
* BuildData: 2014-03-27
* Version£º V1.00
* Company: Lontium
************************************************************/
#include "include.h"
//bit FLAG_I2C_ERROR;
bit ack;
u8 I2CADR = 0x90;
void Delay_ms( u16 mscount )
{
u16 i, x;
for( i = 0; i < mscount; i++ )
{
for( x = 0; x < 2000; x++ )
{
;
}
// IWDG_ReloadCounter();
}
}
#define SCL_H P04=1
#define SCL_L P04=0
#define SDA_H P03=1
#define SDA_L P03=0
#define I2C_SDA_READ P03
static void I2C_Delay_us(u8 uscount)
{
u8 x;
for(x=0; x<uscount; x++)
{
;
}
}
static void Start_I2c(void)
{
SDA_H;
I2C_Delay_us(1);
SCL_H;
I2C_Delay_us(10);
SDA_L;
I2C_Delay_us(7);
SCL_L;
I2C_Delay_us(1);
}
static void Stop_I2c(void)
{
SDA_L;
I2C_Delay_us(2);
SCL_H;
I2C_Delay_us(10);
SDA_H;
I2C_Delay_us(10);
}
static void I2C_SendByte(u8 c)
{
u8 bit_Cnt;
for(bit_Cnt=0; bit_Cnt<8; bit_Cnt++)
{
if((c<<bit_Cnt) & 0x80)
{
SDA_H;
}
else
{
SDA_L;
}
I2C_Delay_us(3);
SCL_H;
I2C_Delay_us(4);
SCL_L;
}
I2C_Delay_us(1);
SDA_H;
I2C_Delay_us(3);
SCL_H;
I2C_Delay_us(3);
if(I2C_SDA_READ != 0)
{
ack=0;
}
else
{
ack=1;
}
SCL_L;
I2C_Delay_us(3);
}
static u8 RcvByte(void)
{
u8 retc;
u8 bit_Cnt;
retc=0;
SDA_H;
for (bit_Cnt=0; bit_Cnt<8; bit_Cnt++)
{
I2C_Delay_us(1);
SCL_L;
I2C_Delay_us(4);
SCL_H;
I2C_Delay_us(2);
retc=retc<<1;
if (I2C_SDA_READ != 0)
{
retc = retc+1;
}
I2C_Delay_us(2);
}
SCL_L;
I2C_Delay_us(5);
return retc;
}
static void Ack_I2c(bool a)
{
if (a == 0)
{
SDA_L;
}
else
{
SDA_H;
}
I2C_Delay_us(8);
SCL_H;
I2C_Delay_us(15);
SCL_L;
I2C_Delay_us(8);
}
static bool i2c_write_byte(u8 sla,u8 suba,u8 *s,u8 no)
{
u8 i;
Start_I2c();
I2C_SendByte(sla);
if(ack==0)
{
Stop_I2c();
return FALSE;
}
I2C_SendByte(suba);
if(ack == 0)
{
Stop_I2c();
return FALSE;
}
for(i=0;i<no;i++)
{
I2C_SendByte(*s);
if(ack == 0)
{
Stop_I2c();
return FALSE;
}
s++;
}
Stop_I2c();
return TRUE;
}
static bool i2c_read_byte(u8 sla,u8 suba,u8 *s,u8 no)
{
u8 i;
Start_I2c();
I2C_SendByte(sla);
if(ack==0)
{
Stop_I2c();
*s = 0x00;
return FALSE;
}
I2C_SendByte(suba);
if (ack == 0)
{
Stop_I2c();
*s = 0x00;
return FALSE;
}
Start_I2c();
I2C_SendByte(sla+1);
if (ack == 0)
{
Stop_I2c();
*s = 0x00;
return FALSE;
}
for (i=0; i<no-1; i++)
{
*s= RcvByte();
Ack_I2c(0);
s++;
}
*s = RcvByte();
Ack_I2c(1);
Stop_I2c();
return TRUE;
}
u8 HDMI_ReadI2C_Byte(u8 RegAddr)
{
u8 p_data=0;
if (i2c_read_byte(I2CADR, RegAddr, &p_data,1) != FALSE)
{
return p_data;
}
return 0;
}
bool HDMI_ReadI2C_ByteN(u8 RegAddr,u8 *p_data,u8 N)
{
bool flag;
flag = i2c_read_byte(I2CADR, RegAddr, p_data,N);
return flag;
}
bool HDMI_WriteI2C_Byte(u8 RegAddr, u8 d)
{
bool flag;
flag=i2c_write_byte(I2CADR, RegAddr,&d,1);
return flag;
}
bool HDMI_WriteI2C_ByteN(u8 RegAddr, u8 *d,u8 N)
{
bool flag;
flag=i2c_write_byte(I2CADR, RegAddr,d,N) ;
return flag;
}
/************************************** The End Of File **************************************/
@@ -1,401 +0,0 @@
#include "include.h"
//----------------------------------------------------------------------------------
// UART0 baud rate initial setting
//----------------------------------------------------------------------------------
void InitialUART0_Timer1(UINT32 u32Baudrate) //T1M = 1, SMOD = 1
{
P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
SCON = 0x50; //UART0 Mode1,REN=1,TI=1
TMOD |= 0x20; //Timer1 Mode1
set_SMOD; //UART0 Double Rate Enable
set_T1M;
clr_BRCK; //Serial port 0 baud rate clock source = Timer1
#ifdef FOSC_160000
TH1 = 256 - (1000000/u32Baudrate+1); /*16 MHz */
#endif
#ifdef FOSC_166000
TH1 = 256 - (1037500/u32Baudrate); /*16.6 MHz */
#endif
set_TR1;
set_TI; //For printf function must setting TI = 1
}
//---------------------------------------------------------------
void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
{
P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
SCON = 0x50; //UART0 Mode1,REN=1,TI=1
set_SMOD; //UART0 Double Rate Enable
T3CON &= 0xF8; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
set_BRCK; //UART0 baud rate clock source = Timer3
#ifdef FOSC_160000
RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
#endif
#ifdef FOSC_166000
RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
RL3 = LOBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
#endif
set_TR3; //Trigger Timer3
set_TI; //For printf function must setting TI = 1
}
UINT8 Receive_Data_From_UART0(void)
{
UINT8 c;
while (!RI);
c = SBUF;
RI = 0;
return (c);
}
void Send_Data_To_UART0 (UINT8 c)
{
TI = 0;
SBUF = c;
while(TI==0);
}
void printByte(u8 UData)
{
u8 reg_H,reg_L;
reg_L=UData&0x0f;
reg_H=(UData&0xf0)>>4;
reg_L = (reg_L<0x0a) ? (reg_L+0x30):(reg_L+0x37); //map reg_L to asicc 'a' to a (0x41), a = 0x37 + 0x0a = 0x41
reg_H = (reg_H<0x0a) ? (reg_H+0x30):(reg_H+0x37);
Send_Data_To_UART0(reg_H);
Send_Data_To_UART0(reg_L);
Send_Data_To_UART0(0x20); //space
}
void printnewline(void)
{
Send_Data_To_UART0(0x0a); //huanhang
}
void Debug_printf(unsigned char *str)
{
#ifdef _uart_debug_
printf(str);
#endif
}
void printWord(u16 U16Data)
{
printByte((U16Data&0xFF00)>>8);
printByte((U16Data&0x00FF));
Send_Data_To_UART0(0x0a); //???
}
void printByteWithSpace(u8 U8Data)
{
Send_Data_To_UART0(U8Data);
Send_Data_To_UART0(0x20); //space
//0x3c |, 0x3e ~
}
/*
出厂前,每颗 N76E003都会预烧一个96位的序列号
,用以确保该芯片的唯一性,这个唯一代码被称为
序列号UID (Unique Code)。用户获得序列号的唯
一方式是通过 IAP指令读取,
*/
UINT8 UID_BYTE(UINT8 Addr)
{
UINT8 DATATEMP;
set_IAPEN;
IAPAL = Addr;
IAPAH = 0x00;
IAPCN = READ_UID;
set_IAPGO;
DATATEMP = IAPFD;
clr_IAPEN;
return DATATEMP;
}
void READ_MCU_UID(void)
{
UINT8 READ1,READ2;
READ1 = UID_BYTE(0x02);
READ2 = UID_BYTE(0x05);
printf ("\n UID1 = 0x%bx",READ1);
printf ("\n UID2 = 0x%bx",READ2);
}
void printch(char ch)
{
Send_Data_To_UART0(ch);
}
void printdec(int dec)
{
if((dec/10) < 10)
{
printch((char)((dec/10) + '0'));
}
else
{
printch((char)((dec/10) - 10 + 'a' ));
}
if((dec%10) < 10)
{
printch((char)(dec%10 + '0'));
}
else
{
printch((char)(dec%10 - 10 + 'a' ));
}
}
void printhex(int hex)
{
printf("0x");
Timer0_Delay1ms(2);
if((hex/16) < 10)
{
printch((char)((hex/16) + '0'));
}
else
{
printch((char)((hex/16) - 10 + 'a' ));
}
if((hex%16) < 10)
{
printch((char)(hex%16 + '0'));
}
else
{
printch((char)(hex%16 - 10 + 'a' ));
}
}
/* max input 99999999*/
void printdec_u32(u32 u32_dec)
{
#ifdef _uart_debug_
bool start_flag = 0;
u32 dec = 0;
dec = u32_dec;
printch((char)(' ')); //print blank;
if(dec > 9999999)
{
if((dec/10000000) < 10)
{
printch((char)((dec/10000000) + '0'));
}
else
{
printch((char)((dec/10000000) - 10 + 'a' ));
}
dec %= 10000000;
start_flag = 1;
}
if(dec > 999999)
{
if((dec/1000000) < 10)
{
printch((char)((dec/1000000) + '0'));
}
else
{
printch((char)((dec/1000000) - 10 + 'a' ));
}
dec %= 1000000;
start_flag = 1;
}else
{
if(start_flag)
printch((char)('0'));
}
if(dec > 99999)
{
if((dec/100000) < 10)
{
printch((char)((dec/100000) + '0'));
}
else
{
printch((char)((dec/100000) - 10 + 'a' ));
}
dec %= 100000;
start_flag = 1;
}else
{
if(start_flag)
printch((char)('0'));
}
if(dec > 9999)
{
if((dec/10000) < 10)
{
printch((char)((dec/10000) + '0'));
}
else
{
printch((char)((dec/10000) - 10 + 'a' ));
}
dec %= 10000;
start_flag = 1;
}else
{
if(start_flag)
printch((char)('0'));
}
if(dec > 999)
{
if((dec/1000) < 10)
{
printch((char)((dec/1000) + '0'));
}
else
{
printch((char)((dec/1000) - 10 + 'a' ));
}
dec %= 1000;
start_flag = 1;
}else
{
if(start_flag)
printch((char)('0'));
}
if(dec > 99)
{
if((dec/100) < 10)
{
printch((char)((dec/100) + '0'));
}
else
{
printch((char)((dec/100) - 10 + 'a' ));
}
dec %= 100;
start_flag = 1;
}
else
{
if(start_flag)
printch((char)('0'));
}
if((dec/10) < 10)
{
printch((char)((dec/10) + '0'));
}
else
{
printch((char)((dec/10) - 10 + 'a' ));
}
if((dec%10) < 10)
{
printch((char)(dec%10 + '0'));
}
else
{
printch((char)(dec%10 - 10 + 'a' ));
}
#endif
}
void print(char* fmt, ...)
{
#ifdef _uart_debug_
double vargflt = 0;
int vargint = 0;
char* vargpch = NULL;
char vargch = 0;
char* pfmt = NULL;
va_list vp;
va_start(vp, fmt);
pfmt = fmt;
while(*pfmt)
{
if(*pfmt == '%')
{
switch(*(++pfmt))
{
case 'c':
vargch = va_arg(vp, int);
/* va_arg(ap, type), if type is narrow type (char, short, float) an error is given in strict ANSI
mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any expression. */
printch(vargch);
break;
case 'd':
case 'D':
vargint = va_arg(vp, u8);
printdec((u8)vargint);
break;
//
// case 'f':
// case 'F':
// vargflt = va_arg(vp, double);
// /* va_arg(ap, type), if type is narrow type (char, short, float) an error is given in strict ANSI
// mode, or a warning otherwise.In non-strict ANSI mode, 'type' is allowed to be any expression. */
// printflt(vargflt);
// break;
// case 's':
// case 'S':
// vargpch = va_arg(vp, char*);
// printstr(vargpch);
// break;
// case 'b':
// case 'B':
// vargint = va_arg(vp, int);
// printbin(vargint);
// break;
case 'x':;
case 'X':
vargint = va_arg(vp,u8);
printhex(vargint);
break;
case '%':
printch('%');
break;
default:
break;
}
pfmt++;
}
else
{
printch(*pfmt++);
//*pfmt++;
}
}
va_end(vp);
#endif
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
-417
View File
@@ -1,417 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Author(s): Hammer Hsieh <hammer.hsieh@sunplus.com>
*/
#ifndef __DISP_I2C_LT8912B_H__
#define __DISP_I2C_LT8912B_H__
#include <i2c.h>
#include <linux/delay.h>
#define LT8912B_I2C_ADDR_MAIN 0x48
#define LT8912B_I2C_ADDR_CEC_DSI 0x49
#define LT8912B_I2C_ADDR_HDMITX_DSI 0x4a
/*
* lt8912_input_timing[x][y]
* y = 0-1, LT8912 width & height
* y = 2-9, LT8912 HSA & HFP & HBP & HACT & VSA & VFP & VBP & VACT
*/
static const u32 lt8912_input_timing[11][10] = {
/* (w h) HSA HFP HBP HACT VSA VFP VBP VACT */
{ 720, 480, 0x3e, 0x10, 0x3c, 720, 0x6, 0x9, 0x1E, 480}, /* 480P */
{ 720, 576, 0x80, 0x28, 0x58, 720, 0x4, 0x1, 0x17, 576}, /* 576P */
{1280, 720, 0x28, 0x6e, 0xdc, 1280, 0x5, 0x5, 0x14, 720}, /* 720P */
{1920, 1080, 0x2c, 0x58, 0x94, 1920, 0x5, 0x4, 0x24, 1080}, /* 1080P */
{ 64, 64, 0x14, 0x28, 0x58, 64, 0x5, 0x5, 0x24, 64}, /* 64x64 */
{ 128, 128, 0x14, 0x28, 0x58, 128, 0x5, 0x5, 0x24, 128}, /* 128x128 */
{ 64, 2880, 0x14, 0x28, 0x58, 64, 0x5, 0x5, 0x24, 2880}, /* 64x2880 */
{3840, 64, 0x14, 0x28, 0x58, 3840, 0x5, 0x5, 0x24, 64}, /* 3840x64 */
{3840, 2880, 0x14, 0x28, 0x58, 3840, 0x5, 0x5, 0x24, 2880}, /* 3840x2880 */
{ 800, 480, 0x14, 0x28, 0x58, 800, 0x5, 0x5, 0x24, 480}, /* 800x480 */
{1024, 600, 0x14, 0x28, 0x58, 1024, 0x5, 0x5, 0x24, 600} /* 1024x600 */
};
void lt8912_write_init_config(struct udevice *p1)
{
//printf("lt8912_write_init_config\n");
/* Digital clock en*/
dm_i2c_reg_write(p1, 0x08, 0xff); /* power down */
dm_i2c_reg_write(p1, 0x09, 0xff); /* HPD override */
dm_i2c_reg_write(p1, 0x0a, 0xff); /* color space */
dm_i2c_reg_write(p1, 0x0b, 0x7c); /* fixed */
dm_i2c_reg_write(p1, 0x0c, 0xff); /* HDCP */
dm_i2c_reg_write(p1, 0x42, 0x04);
/*Tx Analog*/
dm_i2c_reg_write(p1, 0x31, 0xb1); /* fixed a1 or b1 ? */
dm_i2c_reg_write(p1, 0x32, 0xb1); /* V1P2 */
dm_i2c_reg_write(p1, 0x33, 0x0e); /* fixed 0e or 03*/
dm_i2c_reg_write(p1, 0x37, 0x00); /* fixed */
dm_i2c_reg_write(p1, 0x38, 0x22); /* fixed */
dm_i2c_reg_write(p1, 0x60, 0x82); /* fixed */
/*Cbus Analog*/
dm_i2c_reg_write(p1, 0x39, 0x45); /* fixed */
dm_i2c_reg_write(p1, 0x3a, 0x00); /* fixed for improve hdmi output signal */
dm_i2c_reg_write(p1, 0x3b, 0x00); /* fixed */
/*HDMI Pll Analog*/
dm_i2c_reg_write(p1, 0x44, 0x31); /* fixed */
dm_i2c_reg_write(p1, 0x55, 0x44); /* fixed */
dm_i2c_reg_write(p1, 0x57, 0x01); /* fixed */
dm_i2c_reg_write(p1, 0x5a, 0x02); /* fixed */
/*MIPI Analog*/
//org
dm_i2c_reg_write(p1, 0x3e, 0xd6); /* fixed d6 or c6 or 8e ? */
dm_i2c_reg_write(p1, 0x3f, 0xd4); /* fixed d4 or not setting */
dm_i2c_reg_write(p1, 0x41, 0x3c); /* fixed 3c or 7c ? */
dm_i2c_reg_write(p1, 0xB2, 0x00); /* fixed 00 or not setting */
dm_i2c_reg_write(p1, 0x42, 0x05); /* fixed 04 or 05 ? */
#if 0
//test
dm_i2c_reg_write(p1, 0x3e, 0xc6);
//dm_i2c_reg_write(p1, 0x3f, 0xd4);
dm_i2c_reg_write(p1, 0x41, 0x7c);
dm_i2c_reg_write(p1, 0xB2, 0x00);
#endif
}
void lt8912_write_mipi_basic_config(struct udevice *p2)
{
//printf("lt8912_write_mipi_basic_config\n");
dm_i2c_reg_write(p2, 0x12, 0x04);
dm_i2c_reg_write(p2, 0x14, 0x00);
dm_i2c_reg_write(p2, 0x15, 0x00); /* fixed 00 or 06 ? */
dm_i2c_reg_write(p2, 0x1a, 0x03);
dm_i2c_reg_write(p2, 0x1b, 0x03);
}
void lt8912_write_param_by_resolution(struct udevice *p2, int w, int h)
{
u32 hactive, h_total, hpw, hfp, hbp;
u32 vactive, v_total, vpw, vfp, vbp;
u8 settle = 0x08;
int i;
//printf("lt8912_write_param_by_resolution\n");
for (i = 0; i < 11; i++) {
if ((lt8912_input_timing[i][0] == w) &&
(lt8912_input_timing[i][1] == h)) {
//time_cnt = i;
break;
}
}
//printf("Disp: i %d\n", i);
if (i >= 11) i = 0;
hactive = lt8912_input_timing[i][5];
hfp = lt8912_input_timing[i][3];
hpw = lt8912_input_timing[i][2];
hbp = lt8912_input_timing[i][4];
h_total = hactive + hfp + hpw + hbp;
vactive = lt8912_input_timing[i][9];
vfp = lt8912_input_timing[i][7];
vpw = lt8912_input_timing[i][6];
vbp = lt8912_input_timing[i][8];
v_total = vactive + vfp + vpw + vbp;
dm_i2c_reg_write(p2, 0x10, 0x01); //fix
if (vactive <= 600)
settle = 0x04;
else if (vactive == 1080)
settle = 0x0a;
dm_i2c_reg_write(p2, 0x11, settle); //0x04 or 0x0a
dm_i2c_reg_write(p2, 0x18, hpw);
dm_i2c_reg_write(p2, 0x19, vpw);
dm_i2c_reg_write(p2, 0x1c, hactive & 0xff);
dm_i2c_reg_write(p2, 0x1d, hactive >> 8);
//dm_i2c_reg_write(p2, 0x1e, 0x67);
dm_i2c_reg_write(p2, 0x2f, 0x0c);
dm_i2c_reg_write(p2, 0x34, h_total & 0xff);
dm_i2c_reg_write(p2, 0x35, h_total >> 8);
dm_i2c_reg_write(p2, 0x36, v_total & 0xff);
dm_i2c_reg_write(p2, 0x37, v_total >> 8);
dm_i2c_reg_write(p2, 0x38, vbp & 0xff);
dm_i2c_reg_write(p2, 0x39, vbp >> 8);
dm_i2c_reg_write(p2, 0x3a, vfp & 0xff);
dm_i2c_reg_write(p2, 0x3b, vfp >> 8);
dm_i2c_reg_write(p2, 0x3c, hbp & 0xff);
dm_i2c_reg_write(p2, 0x3d, hbp >> 8);
dm_i2c_reg_write(p2, 0x3e, hfp & 0xff);
dm_i2c_reg_write(p2, 0x3f, hfp >> 8);
}
void lt8912_write_dds_config(struct udevice *p2)
{
//printf("lt8912_write_dds_config\n");
dm_i2c_reg_write(p2, 0x4e, 0xff);
dm_i2c_reg_write(p2, 0x4f, 0x56);
dm_i2c_reg_write(p2, 0x50, 0x69);
dm_i2c_reg_write(p2, 0x51, 0x80);
dm_i2c_reg_write(p2, 0x1f, 0x5e);
dm_i2c_reg_write(p2, 0x20, 0x01);
dm_i2c_reg_write(p2, 0x21, 0x2c);
dm_i2c_reg_write(p2, 0x22, 0x01);
dm_i2c_reg_write(p2, 0x23, 0xfa);
dm_i2c_reg_write(p2, 0x24, 0x00);
dm_i2c_reg_write(p2, 0x25, 0xc8);
dm_i2c_reg_write(p2, 0x26, 0x00);
dm_i2c_reg_write(p2, 0x27, 0x5e);
dm_i2c_reg_write(p2, 0x28, 0x01);
dm_i2c_reg_write(p2, 0x29, 0x2c);
dm_i2c_reg_write(p2, 0x2a, 0x01);
dm_i2c_reg_write(p2, 0x2b, 0xfa);
dm_i2c_reg_write(p2, 0x2c, 0x00);
dm_i2c_reg_write(p2, 0x2d, 0xc8);
dm_i2c_reg_write(p2, 0x2e, 0x00);
dm_i2c_reg_write(p2, 0x42, 0x64);
dm_i2c_reg_write(p2, 0x43, 0x00);
dm_i2c_reg_write(p2, 0x44, 0x04);
dm_i2c_reg_write(p2, 0x45, 0x00);
dm_i2c_reg_write(p2, 0x46, 0x59);
dm_i2c_reg_write(p2, 0x47, 0x00);
dm_i2c_reg_write(p2, 0x48, 0xf2);
dm_i2c_reg_write(p2, 0x49, 0x06);
dm_i2c_reg_write(p2, 0x4a, 0x00);
dm_i2c_reg_write(p2, 0x4b, 0x72);
dm_i2c_reg_write(p2, 0x4c, 0x45);
dm_i2c_reg_write(p2, 0x4d, 0x00);
dm_i2c_reg_write(p2, 0x52, 0x08);
dm_i2c_reg_write(p2, 0x53, 0x00);
dm_i2c_reg_write(p2, 0x54, 0xb2);
dm_i2c_reg_write(p2, 0x55, 0x00);
dm_i2c_reg_write(p2, 0x56, 0xe4);
dm_i2c_reg_write(p2, 0x57, 0x0d);
dm_i2c_reg_write(p2, 0x58, 0x00);
dm_i2c_reg_write(p2, 0x59, 0xe4);
dm_i2c_reg_write(p2, 0x5a, 0x8a);
dm_i2c_reg_write(p2, 0x5b, 0x00);
dm_i2c_reg_write(p2, 0x5c, 0x34);
dm_i2c_reg_write(p2, 0x1e, 0x4f);
dm_i2c_reg_write(p2, 0x51, 0x00);
}
void lt8912_write_rxlogicres_config(struct udevice *p1)
{
//printf("lt8912_write_rxlogicres_config\n");
dm_i2c_reg_write(p1, 0x03, 0x7f);
udelay(10000); //delay 10ms ~ 20ms
dm_i2c_reg_write(p1, 0x03, 0xff);
}
void lt8912_write_lvds_config(struct udevice *p2)
{
//printf("lt8912_write_lvds_config\n");
#if 0
dm_i2c_reg_write(p2, 0x44, 0x30);
dm_i2c_reg_write(p2, 0x51, 0x05);
dm_i2c_reg_write(p2, 0x50, 0x24);
dm_i2c_reg_write(p2, 0x51, 0x2d);
dm_i2c_reg_write(p2, 0x52, 0x04);
dm_i2c_reg_write(p2, 0x69, 0x0e);
dm_i2c_reg_write(p2, 0x69, 0x8e);
dm_i2c_reg_write(p2, 0x6a, 0x00);
dm_i2c_reg_write(p2, 0x6c, 0xb8);
dm_i2c_reg_write(p2, 0x6b, 0x51);
dm_i2c_reg_write(p2, 0x04, 0xfb);
dm_i2c_reg_write(p2, 0x04, 0xff);
dm_i2c_reg_write(p2, 0x7f, 0x00);
dm_i2c_reg_write(p2, 0xa8, 0x13);
dm_i2c_reg_write(p2, 0x02, 0xf7);
dm_i2c_reg_write(p2, 0x02, 0xff);
dm_i2c_reg_write(p2, 0x03, 0xcf);
dm_i2c_reg_write(p2, 0x03, 0xff);
#endif
}
void lt8912_write_test_pattern(struct udevice *p2)
{
#if 0
/* test pattern for 480P */
dm_i2c_reg_write(p2, 0x72, 0x12);
dm_i2c_reg_write(p2, 0x73, 0x7a); //RGD_PTN_DE_DLY[7:0]
dm_i2c_reg_write(p2, 0x74, 0x00); //RGD_PTN_DE_DLY[11:8]
dm_i2c_reg_write(p2, 0x75, 0x24); //RGD_PTN_DE_TOP[6:0]
dm_i2c_reg_write(p2, 0x76, 0xd0); //RGD_PTN_DE_CNT[7:0]
dm_i2c_reg_write(p2, 0x77, 0xe0); //RGD_PTN_DE_LIN[7:0]
dm_i2c_reg_write(p2, 0x78, 0x12); //RGD_PTN_DE_LIN[11:8],RGD_PTN_DE_CNT[11:8]
dm_i2c_reg_write(p2, 0x79, 0x5a); //RGD_PTN_H_TOTAL[7:0]
dm_i2c_reg_write(p2, 0x7a, 0x0d); //RGD_PTN_V_TOTAL[7:0]
dm_i2c_reg_write(p2, 0x7b, 0x23); //RGD_PTN_V_TOTAL[11:8],RGD_PTN_H_TOTAL[11:8]
dm_i2c_reg_write(p2, 0x7c, 0x3e); //RGD_PTN_HWIDTH[7:0]
dm_i2c_reg_write(p2, 0x7d, 0x06); //RGD_PTN_HWIDTH[9:8],RGD_PTN_VWIDTH[5:0]
dm_i2c_reg_write(p2, 0x70, 0x80);
dm_i2c_reg_write(p2, 0x71, 0x51);
//DDS ?? CLK
dm_i2c_reg_write(p2, 0x4e, 0x66);
dm_i2c_reg_write(p2, 0x4f, 0x66);
dm_i2c_reg_write(p2, 0x50, 0x26);
dm_i2c_reg_write(p2, 0x51, 0x80); //pattern_en
#endif
#if 0
/* test pattern for 1080P */
dm_i2c_reg_write(p2, 0x72, 0x12);
dm_i2c_reg_write(p2, 0x73, 0xc0); //RGD_PTN_DE_DLY[7:0]
dm_i2c_reg_write(p2, 0x74, 0x00); //RGD_PTN_DE_DLY[11:8]
dm_i2c_reg_write(p2, 0x75, 0x29); //RGD_PTN_DE_TOP[6:0]
dm_i2c_reg_write(p2, 0x76, 0x80); //RGD_PTN_DE_CNT[7:0]
dm_i2c_reg_write(p2, 0x77, 0x38); //RGD_PTN_DE_LIN[7:0]
dm_i2c_reg_write(p2, 0x78, 0x47); //RGD_PTN_DE_LIN[11:8],RGD_PTN_DE_CNT[11:8]
dm_i2c_reg_write(p2, 0x79, 0x98); //RGD_PTN_H_TOTAL[7:0]
dm_i2c_reg_write(p2, 0x7a, 0x65); //RGD_PTN_V_TOTAL[7:0]
dm_i2c_reg_write(p2, 0x7b, 0x48); //RGD_PTN_V_TOTAL[11:8],RGD_PTN_H_TOTAL[11:8]
dm_i2c_reg_write(p2, 0x7c, 0x2c); //RGD_PTN_HWIDTH[7:0]
dm_i2c_reg_write(p2, 0x7d, 0x05); //RGD_PTN_HWIDTH[9:8],RGD_PTN_VWIDTH[5:0]
dm_i2c_reg_write(p2, 0x70, 0x80);
dm_i2c_reg_write(p2, 0x71, 0x76);
//DDS 148.5M CLK
dm_i2c_reg_write(p2, 0x4e, 0x33);
dm_i2c_reg_write(p2, 0x4f, 0x33);
dm_i2c_reg_write(p2, 0x50, 0xd3);
dm_i2c_reg_write(p2, 0x51, 0x80); //pattern_en
#endif
}
void lt8912_hdmi_mode_setup(struct udevice *p1, int hdmi_dvi_sel)
{
if (hdmi_dvi_sel) {
//printf("Disp: set lt8912b hdmi mode\n");
dm_i2c_reg_write(p1, 0xb2, 0x01); //HDMI Mode
} else {
//printf("Disp: set lt8912b dvi mode\n");
dm_i2c_reg_write(p1, 0xb2, 0x00); //DVI Mode (default)
}
}
void lt8912_audio_setup(struct udevice *p1, struct udevice *p3, int w, int h)
{
u8 avi_pb0, avi_pb1, avi_pb2, avi_pb4, chksum;
u8 avi_pb6, avi_pb7, avi_pb8, avi_pb9;
u8 avi_pb10, avi_pb11, avi_pb12, avi_pb13;
dm_i2c_reg_write(p3, 0x06, 0x08);
dm_i2c_reg_write(p3, 0x07, 0xf0);
dm_i2c_reg_write(p3, 0x09, 0x00);
#if 1 //audio 48k
dm_i2c_reg_write(p3, 0x0f, 0x2b); //set 48kHz
dm_i2c_reg_write(p3, 0x37, 0x00);
dm_i2c_reg_write(p3, 0x36, 0x18);
dm_i2c_reg_write(p3, 0x35, 0x00); //N = 6144(0x1800)
#else //audio 44.1k
dm_i2c_reg_write(p3, 0x0f, 0x0b); //set 44.1kHz
dm_i2c_reg_write(p3, 0x37, 0x00);
dm_i2c_reg_write(p3, 0x36, 0x18);
dm_i2c_reg_write(p3, 0x35, 0x80); //N = 6272(0x1880)
#endif
dm_i2c_reg_write(p3, 0x34, 0xe2);
dm_i2c_reg_write(p3, 0x3c, 0x41);
dm_i2c_reg_write(p3, 0x3e, 0x0a);
if ((w == 720) && (h == 480)) {
dm_i2c_reg_write(p1, 0xab, 0x0c);
avi_pb1 = 0x1C;
avi_pb2 = 0x58;
avi_pb4 = 0x02; //VIC_CODE = 2
avi_pb6 = 0x24; //36
avi_pb7 = 0x00;
avi_pb8 = 0x04; //516
avi_pb9 = 0x02;
avi_pb10 = 0x7a; //122
avi_pb11 = 0x00;
avi_pb12 = 0x4a; //842
avi_pb13 = 0x03;
} else if ((w == 1280) && (h == 720)) {
dm_i2c_reg_write(p1, 0xab, 0x03);
avi_pb1 = 0x1C;
avi_pb2 = 0xa8;
avi_pb4 = 0x04; //VIC_CODE = 4
avi_pb6 = 0x19; //25
avi_pb7 = 0x00;
avi_pb8 = 0xe9; //745
avi_pb9 = 0x02;
avi_pb10 = 0x04; //260
avi_pb11 = 0x01;
avi_pb12 = 0x04; //1540
avi_pb13 = 0x06;
} else if ((w == 1920) && (h == 1080)) {
dm_i2c_reg_write(p1, 0xab, 0x03);
avi_pb1 = 0x1C;
avi_pb2 = 0xa8;
avi_pb4 = 0x10; //VIC_CODE = 16
avi_pb6 = 0x29; //41
avi_pb7 = 0x00;
avi_pb8 = 0x61; //1121
avi_pb9 = 0x04;
avi_pb10 = 0xc0; //192
avi_pb11 = 0x00;
avi_pb12 = 0x40; //2112
avi_pb13 = 0x08;
} else { //1080P
dm_i2c_reg_write(p1, 0xab, 0x03);
avi_pb1 = 0x1C;
avi_pb2 = 0xa8;
avi_pb4 = 0x10; //VIC_CODE = 16
avi_pb6 = 0x29; //41
avi_pb7 = 0x00;
avi_pb8 = 0x61; //1121
avi_pb9 = 0x04;
avi_pb10 = 0xc0; //192
avi_pb11 = 0x00;
avi_pb12 = 0x40; //2112
avi_pb13 = 0x08;
}
chksum = 0x82 + 0x02 + 0x0d + avi_pb1 + avi_pb2 + avi_pb4;
chksum += (avi_pb6 + avi_pb7 +avi_pb8 + avi_pb9);
chksum += (avi_pb10 + avi_pb11 +avi_pb12 + avi_pb13);
avi_pb0 = 0x100 - chksum;
dm_i2c_reg_write(p3, 0x43, avi_pb0);
dm_i2c_reg_write(p3, 0x44, avi_pb1);
dm_i2c_reg_write(p3, 0x45, avi_pb2);
//dm_i2c_reg_write(p3, 0x46, 0x00);
dm_i2c_reg_write(p3, 0x47, avi_pb4);
//dm_i2c_reg_write(p3, 0x48, 0x00);
dm_i2c_reg_write(p3, 0x49, avi_pb6);
dm_i2c_reg_write(p3, 0x4a, avi_pb7);
dm_i2c_reg_write(p3, 0x4b, avi_pb8);
dm_i2c_reg_write(p3, 0x4c, avi_pb9);
dm_i2c_reg_write(p3, 0x4d, avi_pb10);
dm_i2c_reg_write(p3, 0x4e, avi_pb11);
dm_i2c_reg_write(p3, 0x4f, avi_pb12);
dm_i2c_reg_write(p3, 0x50, avi_pb13);
}
#endif //__DISP_I2C_LT8912B_H__
-142
View File
@@ -1,142 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Author(s): Hammer Hsieh <hammer.hsieh@sunplus.com>
*/
#include <common.h>
#include <cpu_func.h>
#include "reg_disp.h"
#include "display2.h"
#include "disp_osd.h"
#include "disp_palette.h"
/**************************************************************************
* C O N S T A N T S *
**************************************************************************/
// OSD Header config0
#define OSD_HDR_C0_CULT 0x80
#define OSD_HDR_C0_TRANS 0x40
// OSD Header config1
#define OSD_HDR_C1_BS 0x10
#define OSD_HDR_C1_BL2 0x04
#define OSD_HDR_C1_BL 0x01
// OSD control register
#define OSD_CTRL_COLOR_MODE_YUV (0 << 10)
#define OSD_CTRL_COLOR_MODE_RGB (1 << 10)
#define OSD_CTRL_NOT_FETCH_EN (1 << 8)
#define OSD_CTRL_CLUT_FMT_GBRA (0 << 7)
#define OSD_CTRL_CLUT_FMT_ARGB (1 << 7)
#define OSD_CTRL_LATCH_EN (1 << 5)
#define OSD_CTRL_A32B32_EN (1 << 4)
#define OSD_CTRL_FIFO_DEPTH (7 << 0)
//#define OSD0_BASE_ADDR 0x12000000 //tmp setting TBD
/**************************************************************************
* F U N C T I O N I M P L E M E N T A T I O N S *
**************************************************************************/
void DRV_OSD_Init(int width, int height)
{
//u32 value;
//printf("DRV_OSD_Init w %d h %d\n", width, height);
#if 0
G189_OSD0_REG->osd_ctrl = 0x000000a7;
G189_OSD0_REG->osd_en = 0x00000001;
G189_OSD0_REG->osd_base_addr = OSD0_BASE_ADDR;
value = 0x00000000;
value = value | (width << 0);
G189_OSD0_REG->osd_hvld_width = value;
value = 0x00000000;
value = value | (height << 0);
G189_OSD0_REG->osd_vvld_height = value;
#endif
//G189_OSD0_REG->osd_bist_ctrl = 0x00000080; //G189.21 , color bar en , color bar
//G189_OSD0_REG->osd_bist_ctrl = 0x000000C0; //G189.21 , color bar en , border
}
int API_OSD_UI_Init(int w, int h, u32 fb_addr, int input_fmt)
{
UINT32 UI_width = w;
UINT32 UI_height = h;
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
if ((CONFIG_VIDEO_SP7350_MAX_XRES == 480) && (CONFIG_VIDEO_SP7350_MAX_YRES == 272)){
UI_width = 480;
UI_height = 272;
}
#endif
if(input_fmt == DRV_OSD_REGION_FORMAT_8BPP)
osd0_header[0] = SWAP32(0x82001000);
//osd0_header[0] = SWAP32(0x820011ff);
else
//osd0_header[0] = SWAP32(0x00001132 | (input_fmt << 24)); alpha value force change
osd0_header[0] = SWAP32(0x00001000 | (input_fmt << 24));
osd0_header[1] = SWAP32((UI_height << 16) | UI_width);
osd0_header[2] = 0;
osd0_header[3] = 0;
osd0_header[4] = 0;
if (input_fmt == DRV_OSD_REGION_FORMAT_YUY2)
osd0_header[5] = SWAP32(0x00040000 | UI_width);
else
osd0_header[5] = SWAP32(0x00010000 | UI_width);
osd0_header[6] = SWAP32(0xFFFFFFE0);
osd0_header[7] = SWAP32(fb_addr);
G189_OSD0_REG->osd_en = 0;
//flush_cache((u32)osd0_header, 128+1024); //Update osd0_header
flush_cache((uintptr_t)osd0_header, 128+1024); //Update osd0_header
//printf("*** [S] dump osd0_header info *** \n");
//printf("0x%08x 0x%08x 0x%08x 0x%08x \n", SWAP32(osd0_header[0]),SWAP32(osd0_header[1]),SWAP32(osd0_header[2]),SWAP32(osd0_header[3]));
//printf("0x%08x 0x%08x 0x%08x 0x%08x \n", SWAP32(osd0_header[4]),SWAP32(osd0_header[5]),SWAP32(osd0_header[6]),SWAP32(osd0_header[7]));
//printf("0x%08x 0x%08x 0x%08x 0x%08x \n", SWAP32(osd0_header[56]),SWAP32(osd0_header[57]),SWAP32(osd0_header[58]),SWAP32(osd0_header[59]));
//printf("0x%08x 0x%08x 0x%08x 0x%08x \n", SWAP32(osd0_header[60]),SWAP32(osd0_header[61]),SWAP32(osd0_header[62]),SWAP32(osd0_header[63]));
//printf("*** [E] dump osd0_header info *** \n");
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
if ((CONFIG_VIDEO_SP7350_MAX_XRES == 480) && (CONFIG_VIDEO_SP7350_MAX_YRES == 272)){
UI_width = 720;
UI_height = 480;
}
#endif
G189_OSD0_REG->osd_base_addr = (u32)(uintptr_t)&osd0_header;
G189_OSD0_REG->osd_ctrl = OSD_CTRL_COLOR_MODE_RGB
| OSD_CTRL_CLUT_FMT_ARGB
| OSD_CTRL_LATCH_EN
| OSD_CTRL_A32B32_EN
| OSD_CTRL_FIFO_DEPTH;
G189_OSD0_REG->osd_hvld_offset = 0;
G189_OSD0_REG->osd_vvld_offset = 0;
G189_OSD0_REG->osd_hvld_width = UI_width;
G189_OSD0_REG->osd_vvld_height = UI_height;
//G189_OSD0_REG->osd_data_fetch_ctrl = 0x0af8;
G189_OSD0_REG->osd_bist_ctrl = 0x0;
//G189_OSD0_REG->osd_bist_ctrl = 0x00000080; //G189.21 , color bar en , color bar
//G189_OSD0_REG->osd_bist_ctrl = 0x000000C0; //G189.21 , color bar en , border
G189_OSD0_REG->osd_3d_h_offset = 0x0;
G189_OSD0_REG->osd_src_decimation_sel = 0x0;
G189_OSD0_REG->osd_en = 1;
//GPOST bypass
G193_GPOST0_REG->gpost0_config = 0;
G193_GPOST0_REG->gpost0_master_en = 0;
G193_GPOST0_REG->gpost0_bg1 = 0x8010;
G193_GPOST0_REG->gpost0_bg2 = 0x0080;
//GPOST PQ disable
G193_GPOST0_REG->gpost0_contrast_config = 0x0;
return 0;
}
-103
View File
@@ -1,103 +0,0 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/display/bridge/lontium,lt8912b.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Lontium LT8912B MIPI to HDMI Bridge
maintainers:
- Adrien Grassein <adrien.grassein@gmail.com>
description: |
The LT8912B is a bridge device which convert DSI to HDMI
properties:
compatible:
enum:
- lontium,lt8912b
reg:
maxItems: 1
reset-gpios:
maxItems: 1
description: GPIO connected to active high RESET pin.
ports:
$ref: /schemas/graph.yaml#/properties/ports
properties:
port@0:
$ref: /schemas/graph.yaml#/$defs/port-base
unevaluatedProperties: false
description:
Primary MIPI port for MIPI input
properties:
endpoint:
$ref: /schemas/media/video-interfaces.yaml#
unevaluatedProperties: false
properties:
data-lanes: true
required:
- data-lanes
port@1:
$ref: /schemas/graph.yaml#/properties/port
description: |
HDMI port, should be connected to a node compatible with the
hdmi-connector binding.
required:
- port@0
- port@1
required:
- compatible
- reg
- reset-gpios
- ports
additionalProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
i2c {
#address-cells = <1>;
#size-cells = <0>;
hdmi-bridge@48 {
compatible = "lontium,lt8912b";
reg = <0x48>;
reset-gpios = <&max7323 0 GPIO_ACTIVE_LOW>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
hdmi_out_in: endpoint {
data-lanes = <0 1 2 3>;
remote-endpoint = <&mipi_dsi_out>;
};
};
port@1 {
reg = <1>;
endpoint {
remote-endpoint = <&hdmi_in>;
};
};
};
};
};
...
File diff suppressed because it is too large Load Diff
-667
View File
@@ -1,667 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Sunplus SP7350 SoC Display driver
* (Builtin LT8912B BRIDGE I2C controller)
*
* Author: Hammer Hsieh <hammer.hsieh@sunplus.com>
*
* This lt8912b bridge i2c driver is inspired
* from the Linux Kernel driver
* drivers/gpu/drm/bridge/lontium-lt8912b.c
*/
#include <linux/device.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/gpio.h>
#include <linux/of_gpio.h>
#include <linux/regmap.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_of.h>
#include <video/videomode.h>
#define I2C_MAIN 0
#define I2C_ADDR_MAIN 0x48
#define I2C_CEC_DSI 1
#define I2C_ADDR_CEC_DSI 0x49
#define I2C_HDMITX_DSI 2
#define I2C_ADDR_HDMITX_DSI 0x4a
#define I2C_MAX_IDX 3
struct lt8912 {
struct device *dev;
struct i2c_client *i2c_client[I2C_MAX_IDX];
struct regmap *regmap[I2C_MAX_IDX];
struct device_node *host_node;
struct drm_bridge *hdmi_port;
struct mipi_dsi_device *dsi;
struct gpio_desc *gp_reset;
struct videomode mode;
u32 mode_sel;
u32 hdmi_dvi_sel;
u8 data_lanes;
};
struct lt8912 *g_lt;
int lt8912_write_init_config(struct lt8912 *lt)
{
const struct reg_sequence seq[] = {
/* Digital clock en*/
{0x08, 0xff},
{0x09, 0xff},
{0x0a, 0xff},
{0x0b, 0x7c},
{0x0c, 0xff},
{0x42, 0x05},
/*Tx Analog*/
{0x31, 0xb1},
{0x32, 0xb1},
{0x33, 0x0e},
{0x37, 0x00},
{0x38, 0x22},
{0x60, 0x82},
/*Cbus Analog*/
{0x39, 0x45},
{0x3a, 0x00},
{0x3b, 0x00},
/*HDMI Pll Analog*/
{0x44, 0x31},
{0x55, 0x44},
{0x57, 0x01},
{0x5a, 0x02},
/*MIPI Analog*/
{0x3e, 0xd6},
{0x3f, 0xd4},
{0x41, 0x3c},
{0xB2, 0x00},
};
return regmap_multi_reg_write(lt->regmap[I2C_MAIN], seq, ARRAY_SIZE(seq));
}
int lt8912_write_mipi_basic_config(struct lt8912 *lt)
{
const struct reg_sequence seq[] = {
{0x12, 0x04},
{0x14, 0x00},
{0x15, 0x00},
{0x1a, 0x03},
{0x1b, 0x03},
};
return regmap_multi_reg_write(lt->regmap[I2C_CEC_DSI], seq, ARRAY_SIZE(seq));
};
int lt8912_write_dds_config(struct lt8912 *lt)
{
const struct reg_sequence seq[] = {
{0x4e, 0xff},
{0x4f, 0x56},
{0x50, 0x69},
{0x51, 0x80},
{0x1f, 0x5e},
{0x20, 0x01},
{0x21, 0x2c},
{0x22, 0x01},
{0x23, 0xfa},
{0x24, 0x00},
{0x25, 0xc8},
{0x26, 0x00},
{0x27, 0x5e},
{0x28, 0x01},
{0x29, 0x2c},
{0x2a, 0x01},
{0x2b, 0xfa},
{0x2c, 0x00},
{0x2d, 0xc8},
{0x2e, 0x00},
{0x42, 0x64},
{0x43, 0x00},
{0x44, 0x04},
{0x45, 0x00},
{0x46, 0x59},
{0x47, 0x00},
{0x48, 0xf2},
{0x49, 0x06},
{0x4a, 0x00},
{0x4b, 0x72},
{0x4c, 0x45},
{0x4d, 0x00},
{0x52, 0x08},
{0x53, 0x00},
{0x54, 0xb2},
{0x55, 0x00},
{0x56, 0xe4},
{0x57, 0x0d},
{0x58, 0x00},
{0x59, 0xe4},
{0x5a, 0x8a},
{0x5b, 0x00},
{0x5c, 0x34},
{0x1e, 0x4f},
{0x51, 0x00},
};
return regmap_multi_reg_write(lt->regmap[I2C_CEC_DSI], seq, ARRAY_SIZE(seq));
}
int lt8912_write_rxlogicres_config(struct lt8912 *lt)
{
int ret;
ret = regmap_write(lt->regmap[I2C_MAIN], 0x03, 0x7f);
usleep_range(10000, 20000);
ret |= regmap_write(lt->regmap[I2C_MAIN], 0x03, 0xff);
return ret;
};
#if 0
static int lt8912_write_lvds_config(struct lt8912 *lt)
{
const struct reg_sequence seq[] = {
{0x44, 0x30},
{0x51, 0x05},
{0x50, 0x24},
{0x51, 0x2d},
{0x52, 0x04},
{0x69, 0x0e},
{0x69, 0x8e},
{0x6a, 0x00},
{0x6c, 0xb8},
{0x6b, 0x51},
{0x04, 0xfb},
{0x04, 0xff},
{0x7f, 0x00},
{0xa8, 0x13},
{0x02, 0xf7},
{0x02, 0xff},
{0x03, 0xcf},
{0x03, 0xff},
};
return regmap_multi_reg_write(lt->regmap[I2C_CEC_DSI], seq, ARRAY_SIZE(seq));
};
#endif
static const struct regmap_config lt8912_regmap_config = {
.reg_bits = 8,
.val_bits = 8,
.max_register = 0xff,
};
static int lt8912_init_i2c(struct lt8912 *lt, struct i2c_client *client)
{
unsigned int i;
/*
* At this time we only initialize 2 chips, but the lt8912 provides
* a third interface for the audio over HDMI configuration.
*/
struct i2c_board_info info[] = {
{ I2C_BOARD_INFO("lt8912p0", I2C_ADDR_MAIN), },
{ I2C_BOARD_INFO("lt8912p1", I2C_ADDR_CEC_DSI), },
{ I2C_BOARD_INFO("lt8912p2", I2C_ADDR_HDMITX_DSI), },
};
if (!lt)
return -ENODEV;
for (i = 0; i < ARRAY_SIZE(info); i++) {
if (i > 0) {
lt->i2c_client[i] = i2c_new_dummy_device(client->adapter,
info[i].addr);
if (IS_ERR(lt->i2c_client[i]))
return PTR_ERR(lt->i2c_client[i]);
}
lt->regmap[i] = devm_regmap_init_i2c(lt->i2c_client[i],
&lt8912_regmap_config);
if (IS_ERR(lt->regmap[i]))
return PTR_ERR(lt->regmap[i]);
}
return 0;
}
static int lt8912_free_i2c(struct lt8912 *lt)
{
unsigned int i;
for (i = 1; i < I2C_MAX_IDX; i++)
i2c_unregister_device(lt->i2c_client[i]);
return 0;
}
int lt8912_video_setup(struct lt8912 *lt)
{
u32 hactive, h_total, hpw, hfp, hbp;
u32 vactive, v_total, vpw, vfp, vbp;
u8 settle = 0x08;
int ret;
if (!lt)
return -EINVAL;
hactive = lt->mode.hactive;
hfp = lt->mode.hfront_porch;
hpw = lt->mode.hsync_len;
hbp = lt->mode.hback_porch;
h_total = hactive + hfp + hpw + hbp;
vactive = lt->mode.vactive;
vfp = lt->mode.vfront_porch;
vpw = lt->mode.vsync_len;
vbp = lt->mode.vback_porch;
v_total = vactive + vfp + vpw + vbp;
if (vactive <= 600)
settle = 0x04;
else if (vactive == 1080)
settle = 0x0a;
ret = regmap_write(lt->regmap[I2C_CEC_DSI], 0x10, 0x01);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x11, settle);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x18, hpw);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x19, vpw);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x1c, hactive & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x1d, hactive >> 8);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x2f, 0x0c);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x34, h_total & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x35, h_total >> 8);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x36, v_total & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x37, v_total >> 8);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x38, vbp & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x39, vbp >> 8);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3a, vfp & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3b, vfp >> 8);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3c, hbp & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3d, hbp >> 8);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3e, hfp & 0xff);
ret |= regmap_write(lt->regmap[I2C_CEC_DSI], 0x3f, hfp >> 8);
return ret;
}
int lt8912_audio_setup(struct lt8912 *lt)
{
u8 avi_pb0, avi_pb1, avi_pb2, avi_pb4, chksum;
u8 avi_pb6, avi_pb7, avi_pb8, avi_pb9;
u8 avi_pb10, avi_pb11, avi_pb12, avi_pb13;
int ret;
if (!lt)
return -EINVAL;
/*
* bit0 : HDMI Mode 0: DVI mode, 1: HDMI mode
*/
ret = regmap_update_bits(lt->regmap[I2C_MAIN], 0xb2, BIT(0), BIT(0));
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x6, 0x08);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x7, 0xf0);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x9, 0x00);
/*
* bit7-4 : Set Audio Freq
* 0x0: 44.1k, 0x2: 48k, 0x3: 32k,
* 0x8: 88.2k, 0xa:96k, 0xc: 176.4k, 0xe: 192k
*/
#if 1 //audio 48k
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0xf, 0x2b); // set audio 48kHz
/*
* N Value : 32k:4096, 44.1k:6272, 48k:6144,
* 88.2k:12544, 96k:12288, 176k:25088, 196k:24576
*/
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x37, 0x00);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x36, 0x18);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x35, 0x00); //N = 6144(0x1800)
#else //audio 44.1k
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0xf, 0x0b); // set audio 44.1kHz
/*
* N Value : 32k:4096, 44.1k:6272, 48k:6144,
* 88.2k:12544, 96k:12288, 176k:25088, 196k:24576
*/
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x37, 0x00);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x36, 0x18);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x35, 0x80); //N = 6272(0x1880)
#endif
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x34, 0xe2); //0x52 --> 0xE2
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x3c, 0x41); //0x40 --> 0x41
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x3e, 0x0a); //0x0a (default)
//avi settings
if (lt->mode_sel == 0x02) { //720P60
ret |= regmap_write(lt->regmap[I2C_MAIN], 0xab, 0x03); //Positive Polarity
avi_pb1 = 0x1C;
avi_pb2 = 0xa8;
avi_pb4 = 0x04; //VIC_CODE = 4
avi_pb6 = 0x19; //25
avi_pb7 = 0x00;
avi_pb8 = 0xe9; //745
avi_pb9 = 0x02;
avi_pb10 = 0x04; //260
avi_pb11 = 0x01;
avi_pb12 = 0x04; //1540
avi_pb13 = 0x06;
} else if (lt->mode_sel == 0x03) { //1080P60
ret |= regmap_write(lt->regmap[I2C_MAIN], 0xab, 0x03); //Positive Polarity
avi_pb1 = 0x1C;
avi_pb2 = 0xa8;
avi_pb4 = 0x10; //VIC_CODE = 16
avi_pb6 = 0x29; //41
avi_pb7 = 0x00;
avi_pb8 = 0x61; //1121
avi_pb9 = 0x04;
avi_pb10 = 0xc0; //192
avi_pb11 = 0x00;
avi_pb12 = 0x40; //2112
avi_pb13 = 0x08;
} else if (lt->mode_sel == 0x00) { //480P60
ret |= regmap_write(lt->regmap[I2C_MAIN], 0xab, 0x0c); //Negtive Polarity
avi_pb1 = 0x1C;
avi_pb2 = 0x58;
avi_pb4 = 0x02; //VIC_CODE = 2
avi_pb6 = 0x24; //36
avi_pb7 = 0x00;
avi_pb8 = 0x04; //516
avi_pb9 = 0x02;
avi_pb10 = 0x7a; //122
avi_pb11 = 0x00;
avi_pb12 = 0x4a; //842
avi_pb13 = 0x03;
} else {
avi_pb1 = 0x00;
avi_pb2 = 0x00;
avi_pb4 = 0x00;
}
chksum = 0x82 + 0x02 + 0x0d + avi_pb1 + avi_pb2 + avi_pb4;
chksum += (avi_pb6 + avi_pb7 +avi_pb8 + avi_pb9);
chksum += (avi_pb10 + avi_pb11 +avi_pb12 + avi_pb13);
avi_pb0 = 0x100 - chksum;
/*
* 43: avi info pb0 checksum
*/
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x43, avi_pb0);
/*
* 44 - 47: avi info PB1 - PB4
*/
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x44, avi_pb1);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x45, avi_pb2);
//ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x46, 0x00); //fixed 0
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x47, avi_pb4);
//ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x48, 0x00); //fixed 0
/*
* 49 - 50: avi info PB6 - PB13
*/
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x49, avi_pb6);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x4a, avi_pb7);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x4b, avi_pb8);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x4c, avi_pb9);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x4d, avi_pb10);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x4e, avi_pb11);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x4f, avi_pb12);
ret |= regmap_write(lt->regmap[I2C_HDMITX_DSI], 0x50, avi_pb13);
return ret;
}
int lt8912_soft_power_on(struct lt8912 *lt)
{
u32 lanes = 0;
lanes = lt->data_lanes;
lt8912_write_init_config(lt);
regmap_write(lt->regmap[I2C_CEC_DSI], 0x13, lanes & 3);
lt8912_write_mipi_basic_config(lt);
return 0;
}
/*
* lt8912_input_timing[x][y]
* y = 0-1, LT8912 width & height
* y = 2-9, LT8912 HSA & HFP & HBP & HACT & VSA & VFP & VBP & VACT
*/
static const u32 lt8912_input_timing[11][10] = {
/* (w h) HSA HFP HBP HACT VSA VFP VBP VACT */
{ 720, 480, 0x3e, 0x10, 0x3c, 720, 0x6, 0x9, 0x1E, 480}, /* 480P */
{ 720, 576, 0x80, 0x28, 0x58, 720, 0x4, 0x1, 0x17, 576}, /* 576P */
{1280, 720, 0x28, 0x6e, 0xdc, 1280, 0x5, 0x5, 0x14, 720}, /* 720P */
{1920, 1080, 0x2c, 0x58, 0x94, 1920, 0x5, 0x4, 0x24, 1080}, /* 1080P */
{ 64, 64, 0x14, 0x28, 0x58, 64, 0x5, 0x5, 0x24, 64}, /* 64x64 */
{ 128, 128, 0x14, 0x28, 0x58, 128, 0x5, 0x5, 0x24, 128}, /* 128x128 */
{ 64, 2880, 0x14, 0x28, 0x58, 64, 0x5, 0x5, 0x24, 2880}, /* 64x2880 */
{3840, 64, 0x14, 0x28, 0x58, 3840, 0x5, 0x5, 0x24, 64}, /* 3840x64 */
{3840, 2880, 0x14, 0x28, 0x58, 3840, 0x5, 0x5, 0x24, 2880}, /* 3840x2880 */
{ 800, 480, 0x14, 0x28, 0x58, 800, 0x5, 0x5, 0x24, 480}, /* 800x480 */
{1024, 600, 0x14, 0x28, 0x58, 1024, 0x5, 0x5, 0x24, 600} /* 1024x600 */
};
int lt8912_video_on(struct lt8912 *lt)
{
int ret;
u32 i;
i = lt->mode_sel;
if (i > 3) i = 3;
lt->mode.hactive = lt8912_input_timing[i][5];
lt->mode.hfront_porch = lt8912_input_timing[i][3];
lt->mode.hsync_len = lt8912_input_timing[i][2];
lt->mode.hback_porch = lt8912_input_timing[i][4];
lt->mode.vactive = lt8912_input_timing[i][9];
lt->mode.vfront_porch = lt8912_input_timing[i][7];
lt->mode.vsync_len = lt8912_input_timing[i][6];
lt->mode.vback_porch = lt8912_input_timing[i][8];
ret = lt8912_video_setup(lt);
if (ret < 0)
goto end;
ret = lt8912_write_dds_config(lt);
if (ret < 0)
goto end;
ret = lt8912_write_rxlogicres_config(lt);
if (ret < 0)
goto end;
//ret = lt8912_write_lvds_config(lt);
//if (ret < 0)
// goto end;
if (lt->hdmi_dvi_sel) {
pr_info("lt8912 bridge in hdmi mode\n");
ret = lt8912_audio_setup(lt);
if (ret < 0)
goto end;
} else {
pr_info("lt8912 bridge in dvi mode\n");
}
end:
return ret;
}
static int lt8912_parse_dt(struct lt8912 *lt)
{
struct gpio_desc *gp_reset;
struct device *dev = lt->dev;
int ret;
int data_lanes;
u32 hdmi_mode;
u32 mode;
struct device_node *port_node;
struct device_node *endpoint;
gp_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
if (IS_ERR(gp_reset)) {
ret = PTR_ERR(gp_reset);
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to get reset gpio: %d\n", ret);
return ret;
}
lt->gp_reset = gp_reset;
ret = of_property_read_u32(dev->of_node, "hdmi-mode", &hdmi_mode);
if (ret)
lt->hdmi_dvi_sel = 0;
else
lt->hdmi_dvi_sel = hdmi_mode;
ret = of_property_read_u32(dev->of_node, "hdmi-timing", &mode);
if (ret)
lt->mode_sel = 0;
else
lt->mode_sel = mode;
endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1);
if (!endpoint)
return -ENODEV;
data_lanes = of_property_count_u32_elems(endpoint, "data-lanes");
of_node_put(endpoint);
if (data_lanes < 0) {
dev_err(lt->dev, "%s: Bad data-lanes property\n", __func__);
return data_lanes;
}
lt->data_lanes = data_lanes;
lt->host_node = of_graph_get_remote_node(dev->of_node, 0, -1);
if (!lt->host_node) {
dev_err(lt->dev, "%s: Failed to get remote port\n", __func__);
return -ENODEV;
}
port_node = of_graph_get_remote_node(dev->of_node, 1, -1);
if (!port_node) {
dev_err(lt->dev, "%s: Failed to get connector port\n", __func__);
ret = -ENODEV;
goto err_free_host_node;
}
//lt->hdmi_port = of_drm_find_bridge(port_node);
//if (!lt->hdmi_port) {
// dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__);
// ret = -ENODEV;
// goto err_free_host_node;
//}
if (!of_device_is_compatible(port_node, "hdmi-connector")) {
dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__);
ret = -EINVAL;
goto err_free_host_node;
}
of_node_put(port_node);
return 0;
err_free_host_node:
of_node_put(port_node);
of_node_put(lt->host_node);
return ret;
}
static int lt8912_probe(struct i2c_client *client)
{
static struct lt8912 *lt;
int ret = 0;
struct device *dev = &client->dev;
lt = devm_kzalloc(dev, sizeof(struct lt8912), GFP_KERNEL);
if (!lt)
return -ENOMEM;
lt->dev = dev;
lt->i2c_client[0] = client;
g_lt = lt;
ret = lt8912_parse_dt(lt);
if (ret)
goto err_dt_parse;
ret = lt8912_init_i2c(lt, client);
if (ret)
goto err_i2c;
i2c_set_clientdata(client, lt);
lt8912_soft_power_on(lt);
lt8912_video_on(lt);
pr_info("sp7350_disp_%s\n", __func__);
return 0;
err_i2c:
err_dt_parse:
return ret;
}
static void lt8912_remove(struct i2c_client *client)
{
struct lt8912 *lt = i2c_get_clientdata(client);
lt8912_free_i2c(lt);
}
static const struct of_device_id lt8912_dt_match[] = {
{.compatible = "lontium,lt8912b-builtin"},
{}
};
MODULE_DEVICE_TABLE(of, lt8912_dt_match);
static const struct i2c_device_id lt8912_id[] = {
{"lt8912b", 0},
{},
};
MODULE_DEVICE_TABLE(i2c, lt8912_id);
static struct i2c_driver lt8912_i2c_driver = {
.driver = {
.name = "lt8912b",
.of_match_table = lt8912_dt_match,
.owner = THIS_MODULE,
},
.probe = lt8912_probe,
.remove = lt8912_remove,
.id_table = lt8912_id,
};
module_i2c_driver(lt8912_i2c_driver);
MODULE_AUTHOR("Hammer Hsieh <hammer.hsieh@sunplus.com>");
MODULE_DESCRIPTION("lt8912 i2c driver");
MODULE_LICENSE("GPL v2");
-329
View File
@@ -1,329 +0,0 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* MIPI CSI/DSI TX display driver
*
* hammer.hsieh <hammer.hsieh@sunplus.com>
*/
#include <common.h>
#include <display.h>
#include <dm.h>
#include <malloc.h>
#include <video.h>
#include <dm/uclass-internal.h>
#include <linux/io.h>
#include "display2.h"
#include "reg_disp.h"
#include "disp_dmix.h"
#include "disp_tgen.h"
#include "disp_tcon.h"
#include "disp_vpp.h"
#include "disp_osd.h"
#include "disp_mipitx.h"
#include <asm/gpio.h>
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
#include "disp_i2c_lt8912b.h"
#elif CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_RASPBERRYPI_DSI_PANEL)
#include "disp_i2c_raspberrypi.h"
#endif
//#define debug printf
extern u32 osd0_header[];
struct sp7350_disp_priv *sp_gpio;
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_RASPBERRYPI_DSI_PANEL)
extern int raspberrypi_check_exist(struct udevice *p1);
extern void raspberrypi_pre_init(struct udevice *p1);
extern void raspberrypi_post_init(struct udevice *p1);
#endif
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
extern void lt8912_write_init_config(struct udevice *p1);
extern void lt8912_write_mipi_basic_config(struct udevice *p2);
extern void lt8912_write_param_by_resolution(struct udevice *p2, int w, int h);
extern void lt8912_write_dds_config(struct udevice *p2);
extern void lt8912_write_rxlogicres_config(struct udevice *p1);
extern void lt8912_write_lvds_config(struct udevice *p2);
extern void lt8912_hdmi_mode_setup(struct udevice *p1, int hdmi_dvi_sel);
extern void lt8912_audio_setup(struct udevice *p1, struct udevice *p3, int w, int h);
#endif
DECLARE_GLOBAL_DATA_PTR;
static int sp7350_display_probe(struct udevice *dev)
{
struct video_uc_plat *uc_plat = dev_get_uclass_plat(dev);
struct video_priv *uc_priv = dev_get_uclass_priv(dev);
int max_bpp = 8; //default 8BPP format
int is_mipi_dsi_tx = 1; //default MIPI_DSI_TX out
int width, height;
void *fb_alloc;
u32 osd_base_addr;
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
int i;
unsigned int lt8912b_hdmi_dvi_sel = 0;
#elif CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_RASPBERRYPI_DSI_PANEL)
int i;
#endif
struct sp7350_disp_priv *priv = dev_get_priv(dev);
int ret;
width = CONFIG_VIDEO_SP7350_MAX_XRES;
height = CONFIG_VIDEO_SP7350_MAX_YRES;
printf("Disp: probe ... \n");
DISP_MOON2_REG->sft_cfg[3] = 0xffffffff; //enable all disp clken
printf("Disp: init %dx%d settings\n", width, height);
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
if ((CONFIG_VIDEO_SP7350_MAX_XRES == 480) && (CONFIG_VIDEO_SP7350_MAX_YRES == 272)){
width = 720;
height = 480;
}
#endif
#if 0
/*
* refer to kernel dts reserved-memory disp_reserve
*/
fb_alloc = (void *)0x5c000000;
#else
/*
* alloc memory in uboot
*/
fb_alloc = malloc((width*height*
(CONFIG_VIDEO_SP7350_MAX_BPP >> 3)) + 64 );
#endif
//printf("Disp: fb_alloc = 0x%p\n", fb_alloc);
//printf("Disp: fb_alloc = %ld\n", sizeof(fb_alloc));
if (fb_alloc == NULL) {
printf("Error: malloc in %s failed! \n",__func__);
return -EINVAL;
}
if(((uintptr_t)fb_alloc & 0xffffffff00000000) != 0) {
printf("Error: malloc addr over 4GB(%s)\n",__func__);
return -EINVAL;
}
if(((uintptr_t)fb_alloc & 0x3f) != 0)
fb_alloc = (void *)(((uintptr_t)fb_alloc + 64 ) & ~0x3f);
DRV_DMIX_Init();
DRV_TGEN_Init(width, height);
DRV_TCON_Init(width, height);
DRV_VPP_Init(width, height);
DRV_OSD_Init(width, height);
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
lt8912b_hdmi_dvi_sel = dev_read_u32_default(dev,"sunplus,lt8912b_hdmi_mode", 0);
//printf("Disp: sunplus,lt8912b_hdmi_mode %d \n", lt8912b_hdmi_dvi_sel);
#elif CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_RASPBERRYPI_DSI_PANEL)
#else
if (is_mipi_dsi_tx) {
ret = gpio_request_by_name(dev, "reset-gpios", 0, &priv->reset, GPIOD_IS_OUT);
if (ret) {
printf("reset-gpios not found\n");
if (ret != -ENOENT)
return ret;
}
}
#endif
sp_gpio = priv;
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
DRV_mipitx_Init_1(is_mipi_dsi_tx, width, height);
#else
DRV_mipitx_Init(is_mipi_dsi_tx, width, height);
#endif
//osd_base_addr = (u32)((uintptr_t)fb_alloc & 0x00000000ffffffff);
osd_base_addr = (u32)((uintptr_t)fb_alloc);
if(CONFIG_VIDEO_SP7350_MAX_BPP == 8) {
API_OSD_UI_Init(width ,height, osd_base_addr, DRV_OSD_REGION_FORMAT_8BPP);
max_bpp = 8;
}
else if(CONFIG_VIDEO_SP7350_MAX_BPP == 16) {
API_OSD_UI_Init(width ,height, osd_base_addr, DRV_OSD_REGION_FORMAT_RGB_565);
max_bpp = 16;
}
else if(CONFIG_VIDEO_SP7350_MAX_BPP == 32) {
API_OSD_UI_Init(width ,height, osd_base_addr, DRV_OSD_REGION_FORMAT_ARGB_8888);
max_bpp = 32;
}
else {
//printf("only support 8/16/32\n",);
API_OSD_UI_Init(width ,height, osd_base_addr, DRV_OSD_REGION_FORMAT_8BPP);
max_bpp = 8;
}
//printf("G189.02 0x%08x\n", G189_OSD0_REG->osd_base_addr);
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
if ((CONFIG_VIDEO_SP7350_MAX_XRES == 480) && (CONFIG_VIDEO_SP7350_MAX_YRES == 272)){
width = 480;
height = 272;
}
#endif
uc_plat->base = (ulong)fb_alloc;
uc_plat->size = width * height * (max_bpp >> 3);
uc_priv->xsize = width;
uc_priv->ysize = height;
uc_priv->rot = CONFIG_VIDEO_SP7350_ROTATE;
if(CONFIG_VIDEO_SP7350_MAX_BPP == 16) {
uc_priv->bpix = VIDEO_BPP16;
uc_priv->format = VIDEO_FMT_RGB565;
}
else if(CONFIG_VIDEO_SP7350_MAX_BPP == 32) {
uc_priv->bpix = VIDEO_BPP32;
uc_priv->format = VIDEO_FMT_ARGB8888;
}
else {
uc_priv->bpix = VIDEO_BPP8;
uc_priv->format = VIDEO_FMT_8BPP_ARGB;
}
#ifdef CONFIG_BMP_8BPP_UPDATE_CMAP
if(uc_priv->bpix == VIDEO_BPP8) {
uc_priv->cmap = (u32 *)(uintptr_t)(osd0_header+32);
}
#endif
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_RASPBERRYPI_DSI_PANEL)
for (i = 0; i < 8; i++) {
ret = i2c_get_chip_for_busnum(i, ATMEL_MCU_I2C_ADDR, 1, &priv->chip1);
//printf("i2c bus%d chip1 scan ret %d\n", i, ret);
if (ret) {
//printf("i2c bus%d chip1 scan ret %d\n", i, ret);
if (i == 7) {
printf("Disp: dsi panel not found\n");
goto skip_attiny88;
}
} else {
break;
}
}
ret = raspberrypi_check_exist(priv->chip1);
//if (ret)
// goto skip_attiny88;
raspberrypi_pre_init(priv->chip1);
DRV_mipitx_Init(is_mipi_dsi_tx, width, height);
raspberrypi_post_init(priv->chip1);
printf("Disp: init dsi panel RASPBERRYPI_DSI_PANEL\n");
//printf("MIPITX DSI Panel : RASPBERRYPI_DSI_PANEL(%dx%d)\n", width, height);
skip_attiny88:
#endif
#if CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SP7350_LT8912B_BRIDGE)
for (i = 0; i < 8; i++) {
ret = i2c_get_chip_for_busnum(i, LT8912B_I2C_ADDR_MAIN, 1, &priv->chip1);
if (ret) {
//printf("i2c bus%d chip1 scan ret %d\n", i, ret);
if (i == 7) {
printf("Disp: lt8912b bridge not found\n");
goto skip_lt8912b;
} else {
continue;
}
}
ret = i2c_get_chip_for_busnum(i, LT8912B_I2C_ADDR_CEC_DSI, 1, &priv->chip2);
if (ret) {
//printf("i2c bus%d chip2 scan ret %d\n", i, ret);
return ret;
} else {
;//break;
}
ret = i2c_get_chip_for_busnum(i, LT8912B_I2C_ADDR_HDMITX_DSI, 1, &priv->chip3);
if (ret) {
//printf("i2c bus%d chip3 scan ret %d\n", i, ret);
return ret;
} else {
break;
}
}
if ((CONFIG_VIDEO_SP7350_MAX_XRES == 480) && (CONFIG_VIDEO_SP7350_MAX_YRES == 272)){
lt8912b_hdmi_dvi_sel = 0; //dvi mode only
width = 720;
height = 480;
}
if (lt8912b_hdmi_dvi_sel)
printf("Disp:: init lt8912b bridge ic\n");
else
printf("Disp: init lt8912b bridge ic\n");
lt8912_write_init_config(priv->chip1);
lt8912_write_mipi_basic_config(priv->chip2);
lt8912_write_param_by_resolution(priv->chip2, width, height);
lt8912_write_dds_config(priv->chip2);
lt8912_write_rxlogicres_config(priv->chip1);
lt8912_write_lvds_config(priv->chip2);
if (lt8912b_hdmi_dvi_sel)
lt8912_hdmi_mode_setup(priv->chip1, 1); //0: DVI Mode, (1: HDMI Mode)
else
lt8912_hdmi_mode_setup(priv->chip1, 0); //(0: DVI Mode), 1: HDMI Mode
lt8912_audio_setup(priv->chip1, priv->chip3, width, height);
skip_lt8912b:
#endif
video_set_flush_dcache(dev, true);
printf("Disp: probe done \n");
return 0;
}
static int sp7350_display_bind(struct udevice *dev)
{
struct video_uc_plat *uc_plat = dev_get_uclass_plat(dev);
uc_plat->size = 0;
return 0;
}
static const struct video_ops sp7350_display_ops = {
};
static const struct udevice_id sp7350_display_ids[] = {
{ .compatible = "sunplus,sp7350-display" },
{ .compatible = "sunplus,sp7350-display-subsystem" },
{ }
};
U_BOOT_DRIVER(sp7350_display) = {
.name = "sp7350_display",
.id = UCLASS_VIDEO,
.ops = &sp7350_display_ops,
.of_match = sp7350_display_ids,
.bind = sp7350_display_bind,
.probe = sp7350_display_probe,
.priv_auto = sizeof(struct sp7350_disp_priv),
};