STM32 V5 source code
guowenxue
2018-02-04 785deec23b4cb1e7c4c4d81eb808f195adb1d98a
Add doc and src folders
911 files added
429281 ■■■■■ changed files
doc/datasheet/ENC28J60 Stand-Alone Ethernet Controller with SPI Interface (Chinese).pdf patch | view | raw | blame | history
doc/datasheet/ENC28J60.pdf patch | view | raw | blame | history
doc/datasheet/OV7670资料文档/FIFO_AL422.pdf patch | view | raw | blame | history
doc/datasheet/OV7670资料文档/OV7670 software application note.pdf patch | view | raw | blame | history
doc/datasheet/OV7670资料文档/OV7670硬件手册.pdf patch | view | raw | blame | history
doc/datasheet/OV7670资料文档/OV7670英文datasheet.pdf patch | view | raw | blame | history
doc/datasheet/OV7670资料文档/OV767中文datasheet.pdf patch | view | raw | blame | history
doc/datasheet/SP3490.pdf patch | view | raw | blame | history
doc/datasheet/SST25VF016B.pdf patch | view | raw | blame | history
doc/datasheet/STM32F101xx和STM32F103xx固件函数库.pdf patch | view | raw | blame | history
doc/datasheet/STM32F10x-ref.pdf patch | view | raw | blame | history
doc/datasheet/TDA1308.pdf 3422 ●●●●● patch | view | raw | blame | history
doc/datasheet/TEA5767 中文收音模块资料.pdf patch | view | raw | blame | history
doc/datasheet/TEA5767中-英文手册1.pdf patch | view | raw | blame | history
doc/datasheet/TEA5767中-英文手册2.pdf patch | view | raw | blame | history
doc/datasheet/TJA1050.pdf patch | view | raw | blame | history
doc/datasheet/VS1003cn.pdf patch | view | raw | blame | history
doc/datasheet/stm32f103cn.pdf patch | view | raw | blame | history
doc/datasheet/stm32f103ve.pdf patch | view | raw | blame | history
doc/datasheet/tea5767模块.pdf patch | view | raw | blame | history
doc/datasheet/tsc2046.pdf patch | view | raw | blame | history
doc/datasheet/vs1003.pdf patch | view | raw | blame | history
doc/datasheet/奋斗版配3寸显示模块文档/3.0寸240X400 SPC-S95361_瑞萨IC.pdf patch | view | raw | blame | history
doc/datasheet/奋斗版配3寸显示模块文档/R61509V手册.pdf patch | view | raw | blame | history
doc/datasheet/奋斗版配3寸显示模块文档/RSPTW08-11-01 Evaluation Report for CPT 3.0inch LCM with R61509V.pdf patch | view | raw | blame | history
doc/datasheet/奋斗版配3寸显示模块文档/RSPTW09-01-03 R61509V Application note.pdf patch | view | raw | blame | history
doc/datasheet/奋斗版配3寸显示模块文档/奋斗3寸屏模块装配图.pdf 9919 ●●●●● patch | view | raw | blame | history
doc/manual/奋斗STM32开发板V5入门手册.pdf patch | view | raw | blame | history
doc/manual/奋斗STM32开发板V5入门手册_MINI.pdf patch | view | raw | blame | history
doc/manual/奋斗版STM32开发板JTAG下载步骤.pdf patch | view | raw | blame | history
doc/manual/奋斗版STM32开发板JTAG下载步骤_TINY.pdf patch | view | raw | blame | history
doc/manual/奋斗版STM32开发板串口ISP步骤.pdf patch | view | raw | blame | history
doc/manual/用DFUSE软件通过USB接口在线编程.pdf patch | view | raw | blame | history
doc/manual/用DFUSE软件通过USB接口在线编程_TINY.pdf patch | view | raw | blame | history
doc/sch/CF7670C-V3 pcb尺寸_PIN定义.pdf patch | view | raw | blame | history
doc/sch/CF7670C-V3 简要说明.pdf patch | view | raw | blame | history
doc/sch/奋斗3寸屏(240X400)模块原理图pdf.pdf 17124 ●●●●● patch | view | raw | blame | history
doc/sch/奋斗STM32开发板V5原理图.pdf patch | view | raw | blame | history
doc/stm32v5_hardware.txt 40 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_draw.c 406 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_draw.h 93 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_font.c 135 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_font.h 102 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_font10x14.c 333 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_font10x14.h 50 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_gimp_image.h 14 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_r61509v.c 968 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/lcd_r61509v.h 209 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/ov7670_reg.h 388 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/startup_stm32f10x_hd.s 496 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_led.c 49 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_led.h 37 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_ov7670.c 281 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_ov7670.h 128 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_sccb.c 339 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_sccb.h 61 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_systick.c 47 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_systick.h 23 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_uart.c 83 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/board/stm32v5_uart.h 19 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_conf.h 77 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_it.h 54 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/inc/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_it.c 158 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/fwlib/src/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/iar_clean.bat 9 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/main/main.c 77 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/stm32_ov7670.ewd 2601 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/stm32_ov7670.ewp 1990 ●●●●● patch | view | raw | blame | history
src/IAR_project/stm32_ov7670/stm32_ov7670.eww 10 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/JLinkSettings.ini 31 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/board/startup_stm32f10x_hd.s 358 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/board/stm32v5_key.c 102 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/board/stm32v5_key.h 18 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/board/stm32v5_led.c 49 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/board/stm32v5_led.h 37 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/cmsis/core_cm3.c 784 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/cmsis/core_cm3.h 1818 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/cmsis/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/cmsis/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/cmsis/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_conf.h 76 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/fwlib/src/system_stm32f10x.c 756 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/keil_clean.bat 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/main/main.c 25 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/stm32_interrupt.uvgui.USER 2557 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/stm32_interrupt.uvopt 654 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_key/stm32_interrupt.uvproj 557 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/JLinkSettings.ini 31 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_draw.c 406 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_draw.h 93 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_font.c 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_font.h 102 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_font10x14.c 333 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_font10x14.h 50 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_gimp_image.h 14 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_r61509v.c 968 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/lcd_r61509v.h 209 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/startup_stm32f10x_hd.s 358 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32f10x_conf.h 77 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32f10x_it.c 162 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32f10x_it.h 54 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32v5_led.c 49 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32v5_led.h 37 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32v5_systick.c 47 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32v5_systick.h 24 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32v5_uart.c 83 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/board/stm32v5_uart.h 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/cmsis/core_cm3.c 784 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/cmsis/core_cm3.h 1818 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/cmsis/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/cmsis/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/cmsis/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_conf.h 76 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/fwlib/src/system_stm32f10x.c 756 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/keil_clean.bat 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/main/main.c 33 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/st32_lcd.uvgui.USER 1299 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/st32_lcd.uvopt 690 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_lcd/st32_lcd.uvproj 587 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/JLinkSettings.ini 31 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/asm/startup_stm32f10x_hd.s 358 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/cmsis/core_cm3.c 784 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/cmsis/core_cm3.h 1818 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/cmsis/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/cmsis/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/cmsis/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_conf.h 76 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/fwlib/src/system_stm32f10x.c 756 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/keil_clean.bat 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/stm32_led.uvgui.USER 1307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/stm32_led.uvopt 592 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/stm32_led.uvproj 552 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/user/main.c 106 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/user/main.c.dump 106 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/user/stm32f10x_conf.h 77 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/user/stm32f10x_it.c 160 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_led/user/stm32f10x_it.h 54 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/JLinkSettings.ini 31 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_draw.c 406 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_draw.h 93 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_font.c 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_font.h 102 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_font10x14.c 333 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_font10x14.h 50 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_gimp_image.h 14 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_r61509v.c 968 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/lcd_r61509v.h 209 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/ov7670_reg.h 388 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/startup_stm32f10x_hd.s 358 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32f10x_conf.h 77 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32f10x_it.c 158 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32f10x_it.h 54 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_led.c 49 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_led.h 37 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_ov7670.c 332 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_ov7670.h 131 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_sccb.c 339 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_sccb.h 61 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_systick.c 47 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_systick.h 23 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_uart.c 83 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/board/stm32v5_uart.h 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/cmsis/core_cm3.c 784 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/cmsis/core_cm3.h 1818 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/cmsis/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/cmsis/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/cmsis/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_conf.h 76 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/fwlib/src/system_stm32f10x.c 756 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/keil_clean.bat 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/main/main.c 78 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/stm32_ov7670.uvgui.USER 1282 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/stm32_ov7670.uvopt 706 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_ov7670/stm32_ov7670.uvproj 597 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/JLinkSettings.ini 31 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/startup_stm32f10x_hd.s 358 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32f10x_conf.h 77 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32f10x_it.c 161 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32f10x_it.h 54 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32v5_led.c 49 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32v5_led.h 37 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32v5_systick.c 47 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32v5_systick.h 23 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32v5_uart.c 83 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/board/stm32v5_uart.h 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/cmsis/core_cm3.c 784 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/cmsis/core_cm3.h 1818 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/cmsis/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/cmsis/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/cmsis/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_conf.h 76 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/keil_clean.bat 19 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/main/main.c 57 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/stm32_systick.uvgui.USER 1382 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/stm32_systick.uvopt 634 ●●●●● patch | view | raw | blame | history
src/bare_test/stm32_systick/stm32_systick.uvproj 567 ●●●●● patch | view | raw | blame | history
src/library/STM32F10x_StdPeriph_Lib_V3.5.0.zip patch | view | raw | blame | history
src/os_contiki/JLinkSettings.ini 31 ●●●●● patch | view | raw | blame | history
src/os_contiki/asm/startup_stm32f10x_hd.s 358 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/clock.c 59 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/contiki-conf.h 46 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/contiki_main.c 60 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/cortexm3_macro.h 53 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/debug-uart.c 86 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/debug-uart.h 6 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/rtimer-arch.h 19 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32f10x_dma.h 297 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32f10x_it.c 162 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32f10x_it.h 54 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32f10x_nvic.h 287 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32f10x_type.h 80 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32v5_led.c 49 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/stm32v5_led.h 37 ●●●●● patch | view | raw | blame | history
src/os_contiki/board/structgen_opts.gen.h 2 ●●●●● patch | view | raw | blame | history
src/os_contiki/cmsis/core_cm3.c 784 ●●●●● patch | view | raw | blame | history
src/os_contiki/cmsis/core_cm3.h 1818 ●●●●● patch | view | raw | blame | history
src/os_contiki/cmsis/stm32f10x.h 8340 ●●●●● patch | view | raw | blame | history
src/os_contiki/cmsis/system_stm32f10x.c 1094 ●●●●● patch | view | raw | blame | history
src/os_contiki/cmsis/system_stm32f10x.h 98 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/contiki-default-conf.h 243 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/contiki-lib.h 43 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/contiki-net.h 61 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/contiki-version.h 41 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/contiki.h 58 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-coffee.c 1364 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-coffee.h 144 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-eeprom.c 140 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-posix-dir.c 86 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-posix.c 107 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-ram.c 164 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs-xmem.c 174 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/cfs/cfs.h 282 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/contiki-default-conf.h 243 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/contiki-lib.h 43 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/contiki-net.h 61 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/contiki-version.h 41 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/contiki.h 58 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-conio.c 530 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-conio.h 65 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-draw.h 334 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-mouse.h 71 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-vncarch.h 67 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-vncfont.c 1203 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-vncfont.h 45 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-vncserver.c 1098 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk-vncserver.h 42 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk.c 1931 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/ctk.h 989 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/vnc-out.c 977 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/vnc-out.h 91 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/vnc-server.c 486 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/ctk/vnc-server.h 295 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/battery-sensor.h 47 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/button-sensor.h 41 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2420-aes.c 118 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2420-aes.h 75 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2420.c 886 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2420.h 203 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2420_const.h 152 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2520.c 851 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2520.h 198 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/cc2520_const.h 216 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/ds2411.c 234 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/ds2411.h 40 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/eeprom.h 117 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/leds.c 122 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/leds.h 95 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/nullradio.c 79 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/nullradio.h 8 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/radio-sensor.h 46 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/radio.h 105 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/rom.h 40 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/serial-line.c 137 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/serial-line.h 76 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/sht11-sensor.c 102 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/sht11-sensor.h 51 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/sht11.c 381 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/sht11.h 50 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/slip.c 395 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/slip.h 86 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/spi.h 91 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/watchdog.h 42 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/dev/xmem.h 42 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/assert.c 41 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/assert.h 47 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/checkpoint.c 59 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/checkpoint.h 59 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/crc16.c 78 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/crc16.h 95 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-filedialog.c 177 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-filedialog.h 50 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-textentry-checkbox.c 62 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-textentry-checkbox.h 40 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-textentry-cmdline.c 50 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-textentry-cmdline.h 42 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-textentry-multiline.c 93 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ctk-textentry-multiline.h 40 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/gcr.c 162 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/gcr.h 51 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ifft.c 168 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ifft.h 58 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/libconio.c 190 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/libconio.h 84 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/list.c 329 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/list.h 159 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/me.c 116 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/me.h 75 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/me_tabs.c 121 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/me_tabs.h 40 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/memb.c 111 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/memb.h 137 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/mmem.c 159 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/mmem.h 93 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/petsciiconv.c 117 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/petsciiconv.h 78 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/print-stats.c 87 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/print-stats.h 45 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/random.c 54 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/random.h 52 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ringbuf.c 106 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/ringbuf.h 131 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/sensors.c 137 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/sensors.h 72 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/settings.c 479 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/settings.h 369 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/strncasecmp.c 69 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/trickle-timer.c 409 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/lib/trickle-timer.h 514 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/cle.c 317 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/cle.h 115 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/cle_avr.c 179 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/cle_msp430.c 63 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/cmod.c 167 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/cmod.h 55 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/dlloader.c 69 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/dlloader.h 37 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elf32.h 128 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader-arch.h 139 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader-avr.c 319 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader-msp430.c 115 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader-stub.c 67 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader-x86.c 136 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader.c 590 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader.h 193 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader_compat.c 202 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/elfloader_compat.h 54 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/sym.c 98 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/sym.h 62 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/symbols-def.h 44 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/symbols.h 44 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/symtab-avr.c 80 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/symtab.c 82 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/loader/symtab.h 37 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/Makefile.uip 33 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/dhcpc.c 433 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/dhcpc.h 62 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/hc.c 208 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/hc.h 50 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/Makefile.mac 2 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/contikimac.c 1095 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/contikimac.h 49 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/csma.c 420 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/csma.h 51 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/cxmac.c 936 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/cxmac.h 63 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/frame802154.c 355 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/frame802154.h 168 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/framer-802154.c 222 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/framer-802154.h 46 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/framer-nullmac.c 95 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/framer-nullmac.h 46 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/framer.h 53 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/lpp.c 1054 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/lpp.h 51 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/mac.c 67 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/mac.h 101 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/nullmac.c 89 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/nullmac.h 49 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/nullrdc-noframer.c 112 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/nullrdc-noframer.h 48 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/nullrdc.c 400 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/nullrdc.h 48 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/phase.c 246 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/phase.h 66 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/rdc.h 82 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/sicslowmac.c 272 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/sicslowmac.h 53 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/xmac.c 1030 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/mac/xmac.h 64 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/nbr-table.c 350 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/nbr-table.h 103 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/netstack.c 54 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/netstack.h 125 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/packetbuf.c 314 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/packetbuf.h 446 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/packetqueue.c 151 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/packetqueue.h 222 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/psock.c 319 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/psock.h 404 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/queuebuf.c 503 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/queuebuf.h 114 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rawpacket-udp.c 71 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rawpacket-udp.h 47 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rawpacket.h 49 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/resolv.c 1500 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/resolv.h 109 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime.h 115 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/Makefile.rime 26 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/abc.c 115 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/abc.h 143 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/announcement.c 153 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/announcement.h 273 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/broadcast-announcement.c 237 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/broadcast-announcement.h 71 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/broadcast.c 119 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/broadcast.h 139 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/chameleon-bitopt.c 371 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/chameleon-bitopt.h 47 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/chameleon-raw.c 218 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/chameleon-raw.h 47 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/chameleon.c 157 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/chameleon.h 57 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/channel.c 89 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/channel.h 64 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/collect-link-estimate.c 138 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/collect-link-estimate.h 124 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/collect-neighbor.c 438 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/collect-neighbor.h 105 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/collect.c 1541 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/collect.h 149 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/ipolite.c 188 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/ipolite.h 197 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/mesh.c 211 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/mesh.h 146 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/multihop.c 156 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/multihop.h 110 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/neighbor-discovery.c 196 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/neighbor-discovery.h 95 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/netflood.c 184 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/netflood.h 110 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/polite-announcement.c 199 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/polite-announcement.h 68 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/polite.c 152 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/polite.h 192 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rime-udp.c 175 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rime-udp.h 48 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rime.c 194 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rimeaddr.c 77 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rimeaddr.h 131 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rimestats.c 45 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rimestats.h 69 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rmh.c 159 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rmh.h 102 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/route-discovery.c 319 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/route-discovery.h 93 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/route.c 286 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/route.h 83 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rucb.c 176 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rucb.h 79 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rudolph0.c 242 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rudolph0.h 122 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rudolph1.c 338 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rudolph1.h 101 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rudolph2.c 407 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/rudolph2.h 105 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/runicast.c 251 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/runicast.h 117 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/stbroadcast.c 120 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/stbroadcast.h 153 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/stunicast.c 176 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/stunicast.h 112 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/timesynch.c 199 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/timesynch.h 150 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/trickle.c 210 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/trickle.h 94 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/unicast.c 124 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rime/unicast.h 90 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/Makefile.rpl 2 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-conf.h 189 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-dag.c 1275 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-ext-header.c 358 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-icmp6.c 904 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-mrhof.c 266 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-of0.c 161 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-private.h 318 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl-timers.c 240 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl.c 238 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/rpl/rpl.h 251 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/sicslowpan.c 1908 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/sicslowpan.h 324 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/simple-udp.c 243 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/simple-udp.h 98 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/slipdev.c 207 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/slipdev.h 87 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/tcpdump.c 289 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/tcpdump.h 40 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/tcpip.c 832 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/tcpip.h 377 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uaodv-def.h 145 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uaodv-rt.c 146 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uaodv-rt.h 63 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uaodv.c 616 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uaodv.h 51 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-debug.c 85 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-debug.h 87 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-ds6-nbr.c 298 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-ds6-nbr.h 110 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-ds6-route.c 593 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-ds6-route.h 155 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-ds6.c 702 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-ds6.h 340 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-fw-drv.c 54 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-fw-drv.h 42 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-fw.c 536 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-fw.h 175 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-icmp6.c 277 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-icmp6.h 140 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-nd6.c 974 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-nd6.h 567 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-neighbor.c 158 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-neighbor.h 60 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-over-mesh.c 306 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-over-mesh.h 56 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-packetqueue.c 86 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-packetqueue.h 35 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-split.c 158 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-split.h 95 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-udp-packet.c 95 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip-udp-packet.h 49 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip.c 1974 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip.h 2199 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip6.c 2329 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip_arch.h 137 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip_arp.c 442 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uip_arp.h 143 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uiplib.c 143 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uiplib.h 79 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/net/uipopt.h 677 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/arg.c 133 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/arg.h 42 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/autostart.c 72 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/autostart.h 62 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/cc.h 139 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/clock.h 145 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/compower.c 98 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/compower.h 135 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/ctimer.c 171 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/ctimer.h 148 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/dsc.h 140 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/energest.c 121 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/energest.h 129 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/etimer.c 264 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/etimer.h 241 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/lc-addrlabels.h 81 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/lc-switch.h 75 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/lc.h 130 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/loader.h 131 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/log.h 45 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/mt.c 117 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/mt.h 270 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/node-id.h 43 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/process.c 388 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/process.h 531 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/procinit.c 48 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/procinit.h 44 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/profile-aggregates.c 247 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/profile.c 196 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/profile.h 87 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/pt-sem.h 227 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/pt.h 322 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/rtimer.c 107 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/rtimer.h 156 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/stimer.c 163 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/stimer.h 97 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/subprocess.h 69 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/timer.c 147 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/timer.h 101 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/timetable-aggregate.c 239 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/timetable-aggregate.h 92 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/timetable.c 131 ●●●●● patch | view | raw | blame | history
src/os_contiki/contiki/core/sys/timetable.h 139 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/misc.h 220 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_adc.h 483 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_bkp.h 195 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_can.h 697 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_cec.h 210 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_conf.h 76 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_crc.h 94 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_dac.h 317 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_dbgmcu.h 119 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_dma.h 439 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_exti.h 184 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_flash.h 426 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_fsmc.h 733 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_gpio.h 385 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_i2c.h 684 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_iwdg.h 140 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_pwr.h 156 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_rcc.h 727 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_rtc.h 135 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_sdio.h 531 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_spi.h 487 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_tim.h 1164 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_usart.h 412 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/inc/stm32f10x_wwdg.h 115 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/misc.c 225 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_adc.c 1307 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_bkp.c 308 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_can.c 1415 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_cec.c 433 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_crc.c 160 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_dac.c 571 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_dbgmcu.c 162 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_dma.c 714 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_exti.c 269 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_flash.c 1684 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_fsmc.c 866 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_gpio.c 650 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_i2c.c 1331 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_iwdg.c 190 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_pwr.c 307 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_rcc.c 1470 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_rtc.c 339 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_sdio.c 799 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_spi.c 908 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_tim.c 2890 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_usart.c 1058 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/stm32f10x_wwdg.c 224 ●●●●● patch | view | raw | blame | history
src/os_contiki/fwlib/src/system_stm32f10x.c 756 ●●●●● patch | view | raw | blame | history
src/os_contiki/keil_clean.bat 18 ●●●●● patch | view | raw | blame | history
src/os_contiki/stm32_contiki.uvgui.USER 2512 ●●●●● patch | view | raw | blame | history
src/os_contiki/stm32_contiki.uvopt 754 ●●●●● patch | view | raw | blame | history
src/os_contiki/stm32_contiki.uvproj 607 ●●●●● patch | view | raw | blame | history
doc/datasheet/ENC28J60 Stand-Alone Ethernet Controller with SPI Interface (Chinese).pdf
Binary files differ
doc/datasheet/ENC28J60.pdf
Binary files differ
doc/datasheet/OV7670资料文档/FIFO_AL422.pdf
Binary files differ
doc/datasheet/OV7670资料文档/OV7670 software application note.pdf
Binary files differ
doc/datasheet/OV7670资料文档/OV7670硬件手册.pdf
Binary files differ
doc/datasheet/OV7670资料文档/OV7670英文datasheet.pdf
Binary files differ
doc/datasheet/OV7670资料文档/OV767中文datasheet.pdf
Binary files differ
doc/datasheet/SP3490.pdf
Binary files differ
doc/datasheet/SST25VF016B.pdf
Binary files differ
doc/datasheet/STM32F101xx和STM32F103xx固件函数库.pdf
Binary files differ
doc/datasheet/STM32F10x-ref.pdf
Binary files differ
doc/datasheet/TDA1308.pdf
New file
@@ -0,0 +1,3422 @@
%PDF-1.0
10 0 obj
<<
/Length 11 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1aAQ:n&qNGQ
lkk`iJJqqU!`b3/+;tWBU'%oUB+l3i$).LSFpqmb%7V!3]rZ(!(LKQDR=5A=JAE0*
75.`SEH/PGDg5[jggb'7@5!qZ[URjG`^^&-8XuMTA!Y$p'.g*),r^n1BE\K(UtBB@
*5i":.C@N52k,b];]3s=E]MSQ@faZpF&Nbe%S$F>'L6_!),+Y*i65dk0pk^jSdf#4
@$=5/nmTd9=>l%)jMaiTTS@8:SG,Da(L6/ZU>pJ`1^p,ba>aV=#g*\eK94MC5RLn.
L5,em-56f=+G(H@@Dg<k-#4E(eYZcZC5%Bk_L<1)_C1!MYHYgB.0uZ<51,20>>1(]
W01JpMMo8H/d=uD;CW,Q_G)&D82Po%"Tl3^1-ojRg?ahq&F,1J_[,$RN3YR/P"/(>
2'.D_l=(W%&ep0I8J4os1FrnRSeMLX&EZ'6,G<%5"9Nh<(Q%-*N"?D7\AgD:1Q9F9
V'&ab2$VN=5;u-,]Yum&PI,ueNrp6A2@Y9egnTl3GjbVnj/Clq%>2eSgf=ti/i>^d
)p:`A1ka/*;O"QW2q(dfQT@^F]V$TO5m:1eN`8At3KCDYF>m-?I!8/ip(];A9PH),
3m#e]VZ`#ITN^`C6Q#,QU;JDA1oSjll"nt[h19IgZA"-_=S.T:4,F&1cTk,*1QFB:
eJ0up=?#Mqm]"?:Co%:EXq'dU_f3IN"g0O_2\#MXD"0WM^*.r.=I<`YKt+X,N8W1c
k>JFfbQ!i%3FnbKAf6\,2Hce$ki5r%-*XI$<n-AO9m>rZ9]-^.#9aD+#j!`C"*j)l
%N>+-3t:4XkV2=df[DL-f>C6B8?"YHW<hK3S0EhW#ac//Of4!`#pOnu,g]_rGEnn=
'V6(p!HRmpVpN?fO2FfP@#&'>"M>:_DtqYL%&5*[r'*ILq#<S]/-Q)?cpSV(kGVth
`c8hr-cemkC`c\;'fa+=oK;'fc$3]bSqf<'f(m+TeV!G_N-90X7I:1*>`Z[kK[jug
]u\>X2t1001CPKB*:U`A(>%Xj6YP0b#\%J=.G<";7FKB8&CC@P8=-gn!t]$CcdXeU
`#PjTA)C6o]^33V'XUk4l$TLr"u'Taa5#$aBYhC]]-W[K!t)5/9VH1/eTfiuM+n3@
oa<3L,ROU/<='fW-%Z85Mc$-B#[nI^,4KKo_P/_9+Q/ofE_*u:dte3Yc,CqNXJX0t
l7O4@$Nlbs%1IJ6"u*.T,li`5'\X]f+N11E!mk@MKO#u+oVM^5D@R%N-jHr`)je?;
'B3CJ#@N-2[(mCj9,V_:LfmA>Ju'7-MGOXnff6tq*_F2B(5icpeY9"o*@$(l"TZD#
'*sF9!PE_'kh\Q9B`nn#CeK`X*\J+n5T<')@5SZ[(m+ls8YX.gOYU5X'*>,%+u8t3
%`q?r<W%tiil55DV,&B;LE=>i:mP\2f+S.)6_lPBQ)R#*b9PM(JW[)e7*]&$)(Z+>
AA(#(`]=3`:`@29HB2K,;GAi1Rgs`nQ#g\.Jq07JOVIO:7)gasM9e4mEA.S^TpNt;
b+rPm[QQ<l/%B-Rj$C6FKl\/0#>j3T>psV$L_)Qo^ug6o_:gu+GT/[\9XnLtB2+M'
>c*^N>(NY+KB_Kgbbks;@<4"("A#BlOCAZo]_..MS/;thXZaa>JY02rJ4;N-)1e&3
1@jjT8VlCHk>\,^dI'2iGtJ>f&2\99Y&MDf[L*(\>Qk/D(5Dn"$>QZL7+C4CeY6[p
WpD4!1bc=/f]!Ws"`c_'@SPKgL`$7/GAXV[dOm4WF2>@B#6["%QMG;0;-6U$:%c:)
i/S'E859HALaL%!dmDh/Koa/ECT14e>L)o7-im!mK[>AckP-Vsl;ZuB!oH>]$[E&T
EP*"$EDae_$OCJQ+p=BE'9T]>#)JebJq0>*>A?<VkZT/65dD()8e\>BU@=@KYX:&4
5mnL;8B2!l'gd&oQn]aU)Y?p!P>RWqnNAk_Gc!gmIG65Ac<"";)_B'M2*KEM)PTh"
[360gClOkJWO;G'WXD#p$dC?)=P=3_@1/8f^.oBs[jHo;/I#<,p_+'IMs<ubE<Sf!
'Ea*1nN9i!&nm,&$tb@=XbFa57edbsNK,M<>-dXC2.OY&JJ(]^"9^+h@$te0U?F"f
Fls%k_c\6iD-P4-\2&e^:kTR$)/O/TZ_dor6cdeT1$/h'!no3$>\H!Q#_bA$>jf,i
3UNPTh`k')04--e(63/$4;cKaU8DTPdAr$$BH7=68d8$W5j"s$%&0Q#fi,baY:ANG
KG%m^98\k!)JWLp(S_0FS)g1t:.$@D/-Zql$H[Js+tfk;@?tKp`KC9,Lk2LFj3L0l
[HH?E7Z;KEe.aUu""d)l.g%FKJ=nfpq"tMBY$Ite[K#*B$U(fW:H?D.\"%$uY,DgC
-7$gu,)ZAJGI/2ilER*+UN$SU`LV1m5##kLSf'GD45+uN&*^J]SMndDW'o2t"$9gh
E]'77J[UI(IFFpuAjt7l6[*+4iIW4YRX`f[%W@0DY=imNhfWpn#D`_p>3fO3.\Tic
)`eB7FE%Y=+tuck1_2).R`ut@4gIP$3hdndZBGWO?Yud>GdKug"A`l3^hki.%[Gd,
gM:Ka,K=iO,ZB&a3$N%'luKL#Y$E]Xd#_'2qMKO#i4U("ki"6s;m^T=fIAm&!ZM[i
=q.A4hn`3LERq_H%>>Q-]u6H%=X,8(+hSSo0[@_OK0!Qm`=;t/,,Lq(0C$Z7XAhA-
Z3Xbimi8N*D1*s'37]9nV*@h0#9-#/(cF]K;Ki1LD[LiGm"P93cL'nZT=WkV/N`]#
b)HmkoM9;_^AC]/]s`cmCpi<s5oZ':hSo:c+Fj"3GLX!XAdB"*k';]2o4]8*bG+,N
QIl<)Ta9MUlO9"#f(n\'MaQ2&D7617HAmZ/N\@>Bj4a72Z>.T!M3!6Z8B@?].-tlR
d:@ps-,f]kaTL^H#YsNqmd,XGUo6PU"lPn[b&Stm9_AocA7eH0jLSD`g'.X3dRo8h
cdIiWCpPPLN0"kW5\Psd/u*@)mEMm>D)2'O7U'h>#-RD!AF9jZI*53n4p'NjancEW
)G)@tbcE0#ln$@+r_(Jfnd8,%#.3>"^2=Fnif+fLcJYIY]aJ^3m#T*rn>uBPb(K2j
8KsV&b)F+G<;p`DO=CD5$19gT^m37C%?)F$n<aCefZT6'Q,#WiTKk)J(D)HHouf,;
K((0",XipN/L`OR"4$7$QmTb#djW;cDURl\+V=-=&.l(@OW)a[lO2'N&nkSY!2^)p
kds)tTl('</VJZX*/$as%&Io&VNfaX,*"+HO3Ft%W=GATSfrseS$2a["thSR9Hg?<
hrIi=aqY3KAH:_gSgqg\;(Mo^;Ctc/*GoZt&[k`?jK=C,Y7]VCdDg4kmcRCQ*q'/h
OnS;3aOK@B;Bcmemh$-@3>bU/:@1U`DVl#P9M,jm^QAU1OBbO5kU&$OpLjJ]0C'7f
PcFoF'4daE.:CAZGn&umbq\Pg#T,f2:eTt.Q2o?4c0e.N&:`cB9*DUGnkdXdqF=(>
,Yfu=$-)nc37bC@da1VQ&WIWJ<q"sd(^+gF;3$:ihX(riM(`,_+GOaV/-^a!#`!="
@MnitbR+W#$,ERMbF20Sh"AUD!XBVe8qakh.[*,LL4FknYM-#:>]q;@`'Bgu/!`Ls
4KBmiDkNtGk5r6U,Y`p(YibE^B*ee32Ht(a,-1i4BO4%O2FF4+MZen@$`XO:4Sl+g
LkhKKcRR!(+DkLi2XK(B8#T)epGcjALkSGd_fW%KQQmp<2o+(Kj<Y(b9[#bn$AbcR
YM*ukQMrN-`)Cbu^i5)]cj%o$3X:X(C05@gk&cBO3p%8YNe.b)S3_,a3ZuU,DZ`&Y
a:;nW$q$so7/.1J7P2iqYg,]IZ[)hp._DU<4MYes#lH3)$8"Tt6A$=35X5?;$8=m#
.RQ!\6T0nl@bJUV"]'S&'N-9[kcKf2;SmKF6R[io,V_,k7eBLX8WY]l>(a\58L"C0
6RXZSKgrs#7fsZqe6,;9egDt)1Xou.1lFu5NZp!K7uS6WE1ePV4\?EF8p$"I0V_>+
mn6"Q$4><XES!plW/T6aUGS62JoV'[rCQYP1\AR\PYs/6@nCcL;,i/jeI>7&`%j1j
:m?`0!t(-t$V$C-;$/+6.b.9]2,/0LK@H_nFAGee-V<Tu7J/DfC[4Y/4&n-O<HV]J
oU//_f2i,-<:o'K[6T\Y>bP/+=B-SG'Wk9-eiD5m<+RXaPtb*JBiF%?M2L+f'o4Hg
%o62T>(Zr>ogMF^cW[_L=1+l-2/Fkk]J>_@>]meeFh(CmJQf>!8(GPQ'pi77O'B#V
/_+'0#X$mBAQ]_.?a9i?2-qlbH!b^U>Lf'BeE]]W+%LH6@$O_hC5l:Q'&1oK=4S<t
Z`@AsFAg[W?8XlV'`hiebuuu;9%6m38L%bH?7?RuA(<[gUb"2rMcVfU14Wi&p/tkS
;DltcB6ETTLch!(O(";:$6g:!<b#IeSS,`XBm)"6Q.'Ag)f$k(@!8eE2Le1RS4?Vl
AC[SbWG?-'d:]Xjk>oi5(;MTsAQpXFB!orm[^*N1m9q2S9X_-7p9S?gLM8[N?Xa'~>
endstream
endobj
11 0 obj
4686
endobj
4 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
/F5 9 0 R
>>
/ProcSet 2 0 R
>>
/Contents 10 0 R
>>
endobj
6 0 obj
<<
/Type /Encoding
/Differences [  39 /quotesingle 96 /grave 128 /Adieresis/Aring/Ccedilla/Eacute
/Ntilde/Odieresis/Udieresis/aacute/agrave/acircumflex
/adieresis/atilde/aring/ccedilla/eacute/egrave
/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis
/ntilde/oacute/ograve/ocircumflex/odieresis/otilde
/uacute/ugrave/ucircumflex/udieresis/dagger/.notdef
 164 /section/bullet/paragraph/germandbls/registered/copyright
/trademark/acute/dieresis/.notdef/AE/Oslash
 177 /.notdef/.notdef/.notdef/yen 182 /.notdef/.notdef
/.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef
/ae/oslash/questiondown/exclamdown/logicalnot/.notdef
/florin/.notdef/.notdef/guillemotleft/guillemotright/ellipsis
/.notdef/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright
 216 /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase
/perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave
/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
 241 /Ograve/Uacute/Ucircumflex/Ugrave 246 /circumflex/tilde
/macron/breve/dotaccent/ring/cedilla/hungarumlaut
/ogonek/caron
 ]
>>
endobj
13 0 obj
<<
/Length 14 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1bYh^r&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
@&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
/<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DQW3#XVpj+c0V-La7d#32@[R
Y9LE8NZ_7+^nsE7(psR*E'U:oX%Fq%$K2!?O"9N'`j28\3+0+K/OJ$sXm:l,]"q'J
Af2bO6Jrd(YiE=29[c7<2$<r[,,rOq1D:4kBLm*M9p.?g\5.0.dMU5FZ6pE^X@VKn
9Itg]1^=;,U)\m'Jng1@1n#db-;ri8`3F,o*Y8?I<43_M_3/FGXhh'J)9r^k=JsL\
P1*Qe'dY!C9N=W%8lF&@!#dj4XbT]tTrKCpL/k'u;ck3,g_X)oV*Q\f2Au`og@icC
$&-4:@0p#C8ek%'f%=8GbKN\_,@"0JQY\Y_^!fL*Pa/FDe-_A'pK"_C@gV$bNWf`_
et"$b??^hCMUi)n&V?`CTPn[MX)`,F1\^;\K*MF7?TNrjPU2OBW_LWn<esLND-pCf
JOsFhc=)rLH"GN"B0jgPK\WS^5uQ\;ra2@%\d"-th0CeN($Wl#e"gUK6b,#XH5-G0
?/_9>3%>S1Ob-;`PVo`.eNDijldMeEbN-,/))`Y*h(?1bBGT?1c^6a,3m"J2JX4ak
PjQ=Ygbt4#mD5)o`Dugf[(()q'jkGtTq;4Ekrb4cP3d0pkST$\139bi39O")ofBi2
^e(\.s.2qAf#bRI'X)L:pKRSBK58"V$+4SLV)lc')Lg/>m>UlEZf<4MDMKg3'iM!7
':_su0Y$7D9YsGQ>4Z,fYC)7Z<.)!(bEDV+d"`P!DLj/$]Hjm`^T+10_#QAK9!NIk
-i=FB&LMuWA/[\O;ZYfM!J#+q;8DqmMdV[DJr?FZV6uEc<)MIS0D*H'+E4G*>U!?J
4qaaV5lREm*![%#'Z(Jnnt:@eL%$e(5\O@.iS46Q:M>Ke-`faF9K-"L3HE&_1/)*2
"ssh*P/J2Hs'hHEIg/L1*6;\'J\4O.d#J@1Kq`c7ga[r7R<OmY*<P45nr8M*"X0_H
H(jNgD+_)J*b,1sSGSIZ-9/`6eJ8Uf>_6/m&eH@uJ=`OamuNQ&1GGcYQK+bR8BS@J
\L"d*U3p6TZ'9tna9;d@/.[[O+plDT)\unaE/O4L1WS-V*b=n[B2F,f*4<C)b=m%1
`'bJ9Lut0M!b_f/!]A$/&I8Z+-(4;GB1LVp;l#)WP;!>9Wl]fI+Yb]Odf:6-$,Yc!
8ahtNK]U?:?<#q6m#00rL`Wt])<47E"qG'a.h_coV)^7lZatK)B[BJsEQiXN[)S:)
=D;FgCS/E!J3Z.?*/^!cO0g3*OQK`/Rh@3-nf`TT.5n`8XUq;/Wf58[;a.,>P,.4)
OjS=$A^b,9P(fa>[0$&G@bR2F1'FEb`&UY*/!=WS#cPUj@2Y7iNH>V?`[R\@AYnCS
BMdXs[Un2oAgDXhEt.S-R$=2bHJ#=+"p.(i2`+5s2(d?B1ci4LrG'/-R8YlJ<TgPd
CSWJ^Ce@gMBme0?WGZpbDH'[%dZS5`Cl1)E[ir%bd$W?qN/i1BT&S]A<_[7d`7>j?
;_#@pZUM2YK!%P^k<K_\EA<Uo%8nWd=KS:QOJZ>A=(I9#O#53f%p@5P]11f;]SEnt
Ndoh5V-oi_b.'^bi`_0I_^tc6Ng:m7(^K@W*>oQS(No&nWOQ,)jJ0>r@SKTIh0,#O
:9sK"e5Z"r74B7@6[&E&5cIstXM(g/=/l:h@etic@na!:9lo4XIb:k,(5=W!TeX1F
IkD2P\sAr">g)YlY,Zi_'0bK\$a"&B!B6J8`t9oC9,OceG.Y366HOo6G:pS#VeT3a
icVMdY;eDQ3;XV#ff=2[FQL;_qY"6@M`725,H8d'FC/998lmV:XVbOI?TI:LE"/ka
)-7"#/.[C&[Tb==`\(UjltLDs7\"PJfop--rZ`Fg;+R`%gDFFVT@0m0<GF@"-9RW9
`\G'Y*A:luG#U*&JOqf0$JtPMqQ0[5bO0^=/F2mW>k(^ZVlrnQnmJ!4<<8=c=I9r`
@@>h%Bsqn:]h$s$DDe1/`"nsWC=i\5CRn\[M5O>9lZ&kZ:"d"@S-9+TAnBi,k1IqA
&=go)Te;(_Nk-`+.@gXEQ'RNdVf7H+9Hg3Pc0!JVX$,^*gQcf>S["Sq9rN`+WAR^[
[X+K[7D,UOXd]CBoKRY!mIj^rel1-\R()AZ^iqBM^>[f6iiV&K;sX_*`*<VbgO4jW
1W6tJbNgSCNUaCG(@m@6j%JRl75+8,B/M<uei$%6Eq(M*0opp7BfZhHjt3OpLe9_[
\>l.r\_W=GT^unnONNL*Kpjs@TlWDoE:rBU9c"Gp2Pl2UR.J>Ff5IlM<9M0n(HXDD
(<GBLH$Ik[8+!j][k/ZGK<S(%:3gGYn!uAh%sA3$f;k_,9ZOp^4<E^URot!$Z/Y4:
Ds0c2S5!j=ePsjlf%lOfP9+FT3r_b:All/.Mi6DJ]Pin`5I/(rM`po\C@4pMUO%C?
Rl7rgorCHFoIi_lF3<b#grmq34f7NB/K<mgMr`*Ls3^Z";#&j$aYFB`i,3a<oNh(:
iP/1@I90bC*o=uo*Q.It_Sah]LE?)Kd^?`#Fo7&n_tTn]l`smPl^F0aI>]B#&";t5
#k:Z;ri[YI/]tqicKPJ?6]^I0No9tol:Z'@o*o%$cc#je522+)qiA%ODKbpgSE[5Y
ma(C+:S.IOm]6]`m&s=]Y)rYOGj"B&k0JLb$#]o=G)).hnuB##YScp"$Bo2Dq$!>o
l=g5nas!oKh/7'.Cug2FYd1?`,%QjPn*W2288dg!$KUJ_`QE<P7g`l/OU4X9"PF/5
n9&]o=tn>4"jA-j:hYGe>nGFhYdA5.g,Xmt%M6ShB1E75.h,=`.M2amd/=GL@T4P7
DJ,!Wib&^P?m_rDH0rJN_Yd?l"F9/U]7mCVVs=r^?:&F(>2l2pAD%$?&A:q7FO7b4
NZ:i75%MN(=iE(29SF1_>)KS$CbOKsOY[W)'+ls$g']VClhM,iJJccT%ck52EIea=
KOHQ/%l%W3EAmIo;S7!^'JSrX!\"h`5o%O_b9mN1;9'C]p:?&7*<k=9LBpTX2&%dK
'2]g=@ZqTsh\pJV'(JU4OTuC/TS,k*)6o!RAs-st;GLi<DN1B,LR>NI@dY\$XjE/e
%$_=d&F1[]>CuYhM3Me\0PSRG'%02_Z:Jd#.!1AE,3?EQ0mYj7/l-L?<K]-H"HmQ+
>'UFG=i0lT/%BkY>3I_h9dd%d$E.c/cooI`'#L5=K,@qSCE(:/B17@uL-/ZpifpL$
@q);qE^;4=>&K&%)^6RXc`Ae]TQ6bP0/@YsK_dI0<%nB<X?up-6>CIm[^aN2/P=2&
U(W+LBe5BkS>IS\o*6f.`>J_(3GZW@iad]'S4LM'9_)Al8(AB]%!<3q.Pd<CjXi18
"!Z2Y.B`AJ/7_n(R5?Kj_6T0.Vlh1t9,=j/F4)2]WV0eaW`$.NMIN)MB#-(AUhiA*
:"&0_/H71UMM1Q`09TNuanHP373^3"JJ4k9P(Li?B/,T#1$()onOYKW)`#iT;['P>
PHLnUJnP6:'6?Pj9&,/9N=?-/3Q1YU6Cg<$.5%o14btgAdbcN1bT[^C/G"-OVo_%W
C3/M4+X/%7PNa[)Sns3X,&91No$FcY.WkuU*4&L07^u^O-;IKV53#Nu8"W.*9W_5f
6<"%6;DAkYNC3s,+u1N1F-@,dVHFRT!f,;n6Q8A^;CZFQ]i6&FE8G\YB0PMO.?gSb
FFcd-s"e`H8i/Ob1FY'.BPXb*4B&jZ<)5Zr0fp)c7?^':;rKUs!)N.Z)6VsCNkTXX
fN"sNpC;a<.Pe%;1rLUUM3A$0B::8K1d[0^+0n[+oa*9.L4)g*:SO[]o;*d0XGMU6
<Ut*41P\_<D%#o`3E.h(Kk40,q(o7r1'4-!VG(oF:8)X:;.k8W7-'I85?+Mf%APIK
B#QZ'%-^(r<p&LE1eMZK7UZM_<HWLde&"r#X]R:e$GuaD[<-V8LKX:X+dHV5<D='g
2JuD4MpWed13HP?->67YeZ=F9-MU#"U7c8.L,Hmn.`E+E6>fV1`K>\H($=:!EtsB4
5F&83&bJl^8l3^0p*70^A%6!5Q!3]gg(h)#[?e>1[4(-J=O?_L'uO)s)dK*b>kOc?
nn2;%g/%m_,&3_hQ112Rj=3O,<O'IlFn.!t4"i>DWV,(Z7`9K?lX3`>7>e]!6oAI3
],7Bf@J2QYOpF3o.:I@O<g'17,U?eCQq66=F`J[:ejqH*LG,K)3K\)Y/RC6]4!/X[
.S?;!EF`_f%9o+<1S_R!7pJ-0b0k<D>D\JLju#,=CMUrN,"JhSQCf2g8oqu(YYp0i
-KP;eJQi>c=_5gt[Dbn+G;9<I<rs.TG4[QN>,ar$:Sq&7`ooLm^N7Q&/cqq(p2N53
9PTi3KXEa]D3J&c9'nC!$o]>A7V*2g4a,Dk7#o`1b!U$SV/o&lEb-qNp'5hs3BX@U
Gq$\8pR"uXd:QH=0%"Q8;)`VUoeM6`DHBCR`u6Dg?[!;N3U+L@f/lKGojJ'ODhB%:
/Xn48-n.*1+(dNJfB6j[4UDb5I>7I]GDgjf>C@7n4!l6k[?TY`>C2^kGLrrfPQ-0?
&U>,=J/=NWPh(=Pc>R=YM,`P:-e3Tg06L7jY&2@12fhW+:OC$jFL:n5-te37eP*8;
C\Tu?'O_W?fX-m%D,Oe[6Mu'f?>^3">+ua`oO(S$m=J:)I`cA6(_o709mh1+8gIJk
pmFpf2%E`JJ2EWl3&cPY;bgH'Dg)&/<@4','itT>;#!Y\R'Akk\O*M@E?`i_pf313
2idE<Lj524Gi`q0qB9SG.$g`t[]>L$5?$,_0G_,oBE)C=MTAE.M1Qk0"_DMl5sFn+
iRPjjQJ=0I3Kr%T.8.^E_i]PINf5tAD>*h<f)Rg_(/h[\E/F:m<8!AA8T@jdBu<ao
#THO:\6@!eQfYHm7>`9[c>i'(mpuFG"BO#B'NVc8F/>@o<a(->$sQ3'RPh47\Z;/'
%@MLL5^Bu/H)=NN[SPu9S9_EcOr.Kb.Un/%>g/j@,F$Grn"-NPA.;Bdq9PL4^n_36
S[kt!jlBV!!M-e)J]GFDnEle#&VC65E/3jpD><&<:nI&;S&RB'je>aanmNoU.J*_<
.4&9=N%\4;TdG:M7YWXsQB3I?+@_+OG-HUdp/)`.DoPJ7\Fr?nShDMkVM4,NM").)
M(/:O2'c@;/#eStQujV_0@/QcU*-=e4)RD;Ul0Jb\q";1[TTVL-L.C1.sR5t?7ILk
W:rY?a'MI&(T@']F(RK@g5K#jE.D,$Ca:m97/O0ARjhkpQPOSD`)eMQ4I\:cQ.lpY
"&5o9n=//R?97b\;_>;S"07>9Z0'B2&siK!Y%XkgW;Ar^jR%uoQ)f7,9mWRD\HNG^
o;nE].KuP"@MPrq:Tf$9_3G2)$1tJADGqj:YG=%ZqN!VJMm-e'Ug'$RRsnbbKs\I=
/s9UMgHVT0WMGrIZYP%-q_b9Mbq'f(]/ksc!Y_/p'tT*(PNtt>4.;KBoSpK>='L]I
-G!Hoe#rPR\6JN6;\uSt_7NSPF*c$3VqQ<*,ZtX5\3#8B78c,L(EYaC[tS)>1S_'u
b_(S4/*9d=Rb=e'mNtML_PoRkl%tt+)n8!i2(PV-WY5QtjhmlNG=F*sr&CAp\YOq9
*'@gfWQUm&$+\h8ImonDVg,bbB?8jK\m#uk4=@gH+iO:5T[eD,L:E1'Q+O\4@/N[0
"=M.M14:*3\nN=Sa;[UOc:*%7<kQjjj`2hS5+<k>FVqZb[M-QD*t9,hR=+3bM6Xga
B?rs'G!"Vn2Kcl!p1Sc"gq76o0`FLZ.><.]-H-Nt0H6"j>XaPn::jkm)e.gLT1'"t
$GmKX]gP#'2H2"r.f(Q&&_9b?.Fb^2U"s0s@\RuC>W!59;ZuF;MlG:Ic.60Mf3/&.
I=+rk9qgC*>Wl2(>@UD*mFU?o*K"@!,j1U"=L`NATB.r`eVDZ94.dk[f/6j+g(iB@
BA>XdImgkI*K@Kd#Z],?a@S+iqR=mmRj-n'E#MOr\'`^/;loh1N&om#nnadVC+;6U
'-nqG\aZOc<)%eM/]g*4[[#J=0;R<DOiU>KCO):23fig#%*:N6fp'(>.'Z;^WbSJ9
,gdToK"ONfDG[]?nM4Z)?#EP(@50r4HHpGlbLL5EkSeSPa%PSC;5aO3.Fm8:H9l.L
S59AUN&qL20i@-*XgO%3k6!fqq;Gk[mHOQ0lC,1EcZikc!;fsmm2XaC)];=Y.Fhp#
eluZmI=AL$Qb\>4@cF0HZ`Ue#obP9LkUfO_h.Q1_GKrN^igG@[%u%2e*a'P`m&?VX
IjaTG\Zjs/AR63*,n[DS&!`bN.JR2YIg=W<Xm^lmih!ohbC;W"<K&"q^])^UAY#[2
?c"-Q3M,fD;0#UJ,UqD$kt,0u[^Xh;!Q7jrec)QDI(E%<n+b\WN#r`.)hl">B1'AA
or/W%;<QZ*2p8QUoD`mWP1o;p2>3P9q4q*b?EMBU],WuYr]GY.hhiS,:!/M[gI1lB
+ojM=#Ru<XOO.Sl)\*'^;#o/_/f9QP_iXu.%1%YT+jg=`\7RIH5pJ(GT[7('LQ.uP
;970;"bXZ]6NNS"<saVA+k%U-aBUYA%O0:+8Ao$nR)WeA!J&`_/;[8=E,g]DC,2m9
A-5uqOJWA<NX!?%BS%us(J70gJZ.@3/fY:4&VrTMZ8])DmPB.dOq'CXh$4RtbU?sh
^dSFE6,;Ib&0+#ke;R]@KJg4JLA9Q&a"K`\B(//j[&SP+a(-K>Tq'hVWPOP_Z0;8:
hi#,UY>rXZj)o,U>AK?\Kn@9aZJ"0h;0<Bn3R6F"nE[PEorOKjl2$EW",8hipo#oQ
O+/',nO(>NRr*T^@BoCj""nQ4;j!bMIfjr-R]F12qVIkM.<>LP#%=7iLTRXm6E7T>
HG6k^/E.6E.A=)'#,*3`nA;%pP&/<.Tl`I86nW4XVlt&]0(Zg'Eub3Ja?l-p6dJYf
rP6d=F<&>^!,fQi;4)>A^M7j.,<=sk<4Amm*"]W]OfBVG_!r%$)(95NYb!:^PE`C;
Y/1sqL<GI.*'3<](F1;J>,_qKiOj-.11@t+)^hmo'a$&1o&W&2ca#`s3_4Z'grjML
',o5+Rs;6de*IRC1T[Nd(rL#bTVARRRsRY#'T5qd+ED8OX\ik1Eo'X8Pe%]2.oIkD
6r*qL]rDbMEr\>*eU:O\YX5M;"t]nL_,2nFV"W:h'`*\I&"Lg-Z]47UajZ7pY6tR.
h)OTDNq?k9>YEe*kD"0YK1]9[3oll;o^n6i+nqM4mn@LCYluNbI>r+g;ej5gYi3h%
GqsP@QCG,;Z<;TUlYV3/`;!p9_'Yl#.^:9*:h9`=N,>SH_+MFAP9fr.!k#pdKC*^>
kpBdVV"(Ild4s=cI\=Bbg=3$2\P@\J?.[LgXM^JfJXjW8b/P:]3W(^thau:(QbdOP
jFkK(AraBo=Y?SZZ1V-0Kk#HrDa%e.9.78SLkP6-0^8GIV6+1,'5L:%Amkig."4S*
;K)PBr)4O-8BU,k>9>8/bgYsOXuK[u_q>`q]"#"*p2anf3DS^o_O2%Lc>P9)-AV#+
Vd%X=9WXo@,#d7pg<^D-gull9cZRWiCr/u,A6dk6j!t.a`Q9<+:N4bXrT6GIXHK&1
j2$&RDo4A)m(1/MlG[1Cp^)>+OQmoX@u#8WrsSJ)G[,6`q^<+nfh1+XF=$@oM(-K.
k(//T1JeOu2FiT'$p1eAlt+\/f5giBK6&5s^s,([T&<]IK6Jaf$kWQD9,un-AdWO8
6:)B^gKZ1P`blF+k8)jo@5(Po:$8*jr-]Mn-UDFqnegpd%88gQ"q*!Q+h%C*T<WHo
9K@s$Ec2WB;=%4Mbs*qMOV49).:qnj\/YQT@$pa7JW*9_Z1CAXT?/3%jgm>ek@#=Q
,&rR<XVAa_JE'6O"tL%#'fa(&+3=8!CGFIq`$.C@j)`k,X]5!+oMTZO@gao%Yd'X2
#2I=F0o/_E'Y<M?,hl"Y@1cZh8Cg?8?-5QD17CTOkc.HM7"7.-dO-5`TR.(Z:-K6e
MB#1Y*@7I)PQj<Y7bAp:N\kd8bYAt^i`RO`FC/DG.Qe^q2^G9M6AeH72pGIUAE%,'
@o?k)Y=OO:6^c&Kje58.o;(7NaZsBu*Q><N5Y>7^piC9,h@V)HS'MN?1U(P]]cmsl
U%IrLL?-T-L*hDD6L6[F%0[=n.mo[*C*X6h0+fNH7A3&2Lki4-&ggpQ%nkZHKdg38
\ktMRKcFV7p5bHiaXNW$It\%t41TrJQO/$m;oJV8P4nhG)+pJh#se3LJ8Y0U&q-F2
DQ0[<]i30p3-98tg,/)u=6g1oX:2hE&N[:(8>6H'og&Tinq`.T>[+0Q*6?`19VZ@5
mO8>-\t<Ke>\W6QY\0EB(:nii:45WPA.$=YLlZ#+N:<P'E9F0gI:Of8p1UmWp,lq4
@UkXe/au0<&L(+ZlC&Aq(9Nio'%\Ma]rSRUW/t$f<*X:^0!,PTZ!/W.HRj(eQBnWR
==+bgl]%_aQ-dG#fHN^c>r+"^<l3A\a(I$I::kXTmZC^A5jAg=.(1Jle#*DF'C+"6
oo>I]_K`7X`(=DFLmL@AR.+Kd@T6,A"=rNi'bq<OM5<M44=4!Xb0nHh7EYmC"$;$l
NY+L_[*IR9TN5K<A1)5ij-9sP9J=MO+pqbnU2oK6a`N)0W[t3Enf(h,M,(Z"G_r49
Ch$@4&1A>=lDHHDL)tbXF%1.8(-Er6Z:r2<clT5uk'Mg*<X$OBdg.\\$'0)Fn1G73
!*qDI7qlu1X9=]1X`k"\Os)'b\Y,3e&qQPA\N5!O/Kg=k8Vc`5-9A],''%-+U(r9R
`d"r%Oo1JuoM.9EdD:[<]`uD)_FV>-pE<TQRRHY"GcS5Z:;-#SI&t%uSlTO+YFS=T
@7@4FN[n/R67Z[;:1q:@"s_PIAW&Bq$GDYErO"Frc:Yo#][mZ`9VS3/2FY),81k?f
Ad<(9\W0as;PEIZjG26A/M*56[1l1uV$iUDALCH2D2ld+pC`P@H</ee]o/ZFhSYFY
pDRsnTtYZ=Mb&M>@`E7ZE;#13_meMX0(#gVn*(N9)fp$K'jb#\Id5p-\`Yp]e&,2R
$d*gsBjoFS<EkLJhMNt!>!;C.\,NSg]XnpI\ib$JiG'cW&XjS;N*V:N+AGPSA1Ifl
86J-XkAl+=&8lu]\eF7,\t-YZ<^`Qd1A[h_Lr,KmOG3PJT6?b[]b/c+[r;1ra4Kpg
lP4rZO"0J:/_n-(!f'1U/>0#Vc1.";G6q&`D0QG-g6@qV&pr5K?VY9h1(MZ3TLB5?
X]UuPN.9h^IOR!hLT_G_DG>In,!fmYLQnNcir$rklL"QqSg79$gFM(OGbCc`I_(Y)
NNB4=F0YQtVEg9%\M;_,:`Q;liQKVq0g=R^p?q4*ISJL&[UEtgFWV)@\J"3ur.E<j
F4\n0@Jb4b#(:sQ@`b=@B4V29PO86%4"oLeD#h"erpf<(P>^n*S'TE<^gqg9>!L_+
^N7@T\=X]J,J:A(]qU-89?oZ3(l@kP,Jo/-42VBo[3Yjh4]BeE.($^eU:h_5-<(Ag
qqJi8`P@]#(j#MgMt%0riL\F6LsW7Hl+aptikK")6$sE\bPT+PX?E&AO/[:5&i(qE
c3j?Y(Lb(Vd`47jR29<7Wf[fF,Ua)dWeahQ1%>Z=ZX]G#QSYRoMQ25qbV,(SWYtF]
_SG])X4TahmO2b8$gAiuCaG.Z]o5"Q+!P#9,.b@j6RUfYYY77ie"Wm^XV-5s_pI#?
@Nr^OO@,eRO9jC>0Y'PlVAu&V(.:^+S4p'3m#%j=#b,EUR)_PRVB!up/T`I2$q$Jj
-QcbLQr)Qa=`gMK27f9S$95O@A6V)t:.<qV_`F3uR$.kT+[_bV`RA_4,Xk-07QOH3
4[Ys4+R'?:68eY0Y`TR<F1I\&"!_&]]kQW%geBB%D[O>6V)0G2o3f.;cA?f=XE8VL
dB<ib%73+U\g`I[XEDS4m2\TDY5CN$&<_ph<=`N'ZRgEfG_;dhKg:0I\LFP\4C:UX
Bq@.LR$9qR5lNWOI)8FO)@U6!gL&!@\/?5&[_b:qWY@j/JOr[m5/?"oOg<&5Q'uBl
W4E5MYRh4b?-/e)_MjkA.);b9Si83madNLX(l(]$UF<Y?8W9;`]T\SITWoc7$/r8&
fn;19ZH?'A8dqmP,d7Y%Q:]JW0q"PmoMZ6GYSb9Q&2=YeI$VrQ'?apg8u.&q]5`h+
V^hnZT(J?Xk`_IB[gF'NM7ecU<4^7DS&^1lbLEAXPf=!9a!%D5$LiVi#bakkkog&E
M%Ue"^naTePmh@j9]WOLq'i(`PR/>XP+7k+aJ[9bUQ\P09`fSY!0fYufhFGi[ooP&
!M?`,KM-.49ejVCd/;0_gdWMr:"bWF\Q[6^BVJ-[cCh6uN40OSW6X'k)>(BO:n*mK
j-T\Q#s"h#37=F(XXH%")$so;9\$LXfGXQ:QAkSN3A.)c>E.^eb1Mq'WK>I,oh*TD
*Amp;$<YDPRh&ctX^K^O=GDq8o:J%EbpbX!PWDGkdZf<TT,@e@/IJWa&PhE&-2E4V
:c(r"\.s]#bt6P25iIS/lVHU4U88e_<6:?VXdVBbcQ&>mqI@i>ZVA?AOAOI=:mFZ\
Ng_t0SKu>*/H!k3!>)Kj.EDZ%!&K.'DAFpZ1;'LlE"E%b,(kt4J5A$&:^$n3.KE9^
!<=SOPrO<u0*-;B#T1niTJHRE_UFc1$n2!-]XGaf-A%nL;iiI2*BO=q4+L-A!\cH`
3/IY9&-<D$"*cPQ=:bQW1kQ&iK9.d>BGU\?.K`KN!\HA`n.5]3&2c^)K'bQ#,sT8V
LCi-Vb&bu:E#,G?1k8JJJrM]hANA5A3E*^<#us/fofrN]5lh!32dDs^GfGQI7+??K
e6PTG5UZ\)-N\F/Jj!&_9",8&s&JQfLi=hDW%EQc.>#VfJe0;]?kh'MWe$FQf)9q_
!UPA&+p'/AJf#p<814P4,_C7g!D"hpTHsS<4O`+He*n-X\<^2]X/[1_f4Yj"GUe<<
'Y"Dg!C.dZYeLS]OTCGg9c+cL5W==o3Wk)&f<F*ch3$>qL=<OdMSOdFcimKnDh86I
!C/RG-o6J5'\Sk<J]JN+Q'E5K'E^lb"0aP5O?-R$1P#_.fn_[lR;iSQRoj6W;jEmZ
JQCB6T)hBR=qEXqGWFJ@R@Iq)!M-+p4e[LQ2Z[cog7>7t]rZj/XkN"'gBF*O).Zn3
3Rt&B!k!%K:pSRV&.9sQ'NDfb[5j&^GClC*<cr'u!9$q1\lQ>"=)]'^V3Y:-1P6.;
>*oj'Qo]kM3!3PNftE.AC1#NY_co!Xf(^Cm?+/L9?X&=)h(?6C`P#HOWrmLG>1K$@
orhL0+^LY/h8Pu=pa9A/U"V*UM5ZdB5T=#Mj'1X+g\&?gD49=8YhkY9h9E</kUKnh
(6k2[!C.U\*LBo_k#nOah`\hT2<imb8DIKM>]"-3--2IX&3I#:f#<,j--]gDc5W.8
i'h>t--KLX**sYo".1q$:bpj<f3O*`?U[tF:cNu%ge,?n&gNQqmKm0uT2kqBJH.W-
[4bI?,LY\Ti#j=R+>m2EXAsCF3h9DRV-@A!ToX8keraH>Ae^%L+]E/U;W2d72C(Dp
s33G9QqATep*`\+MIJ]9'kiP9"ssrm/)l"+`Q=9F^kZC*Sqo3Zj"ST@2Di^N2Ib&(
@tk<rFsc7O2e,a1j,Q%JKUH?'n`0%)@dZLTp,lem46!c/A*$g'K^`IE.:dTcPTE3O
]+F$%9B0>=A*CpB*[;D:-0%H[A%kfFrZmR(8Vt/_A%#'B@7cWJ-"KGH5Q4+5?:#*M
3b?<+O\R98<a'#WaCL<0@raJ<[RNHP<b$SdQ#:8l-8/C@'+KCl@brWlh>X[^(u_#I
@DL4l:*"lccscFEM1EQFI9>$j:G*MJ/"La?T\d)*H!l`cMi!T9j/HQ$GA"^VB@=hi
i/@q,ahA%=BHDU7<-N";[-1>aBI'bEIY?c29ap,8ig,IZ-A>K`MTgCHMjAYPreuk+
3FVL93[Q!5fT`RrX(S;k&,;A:TSDYER61>mkh)[l!ZYp7P@ukG8C!8-n;una>j8,P
l+Wn$/q[kWp?@=%#ml].:8ho4rgC3pl*`p?opSpYRd,p9S)m-)eu51`j49qF.@Ah%
gI2E8Eu%M;lY@F)+T,*II-Y7dZ)Ino&@`,sg1rcAlf:S_(tra:_X"A=ln4eCN1Xi#
^M;o49]jC^?D=Ei7`diV$_Db"ncPRHX5dpH(N@[dn[6Iull5qTD!<R\8`OXtJI%(j
VTe:6QIeaKd;=gn3!Oo`L>;0fbjF>CNgYQ[!heq/=;;C%:qhE1cK"=(\S`V4mVnP,
,^.J)gCCC6DPhkD?@Z`2I.#d/9BOK3RG=[*l#".cD_a.dUg3?-eD0nA#p/,F:!]@<
"A@n,D%oGT<`8AZc0n^1cN`<Frdd3ZfdSi+DlF!Q8ulemkAWJ^n4r`F(:uCbkj>PO
E&#Tdrn[&q=E(_ZmU9pFiuW%UagOaq$cGYW517M*'fJ*aEGj?AR9piX)/]),C.B4_
B,p0*i+VQ8kXOBJ)!5fjKl0ZLkVjQ&QR)!*p>d#,EPB3YG2hIF->WVM\;qhl7k&Fj
/NR5`eV>huIir_hp$kg/DhuPQ2!OT*)08:dnR"7p(@,Yk2+^::o+*Wj<rR$X/n$t.
E<3alQT9&G^[R9hF*B`g:B^9=6u_,coERnV#>!.l0aS@`EHph0[m>sdX\27p]dl[2
$:_4+2_<=o^+T[0hb`u;`:4(2%m%2(OIL@d<p?5XoiR'GLKTLraE=smFU)0WB41Dk
KV@R.+0g$/2UZ@6K4KN12_LjV@]*Wu8.:(slC"<jLuFHBeooe[M'm3hm^ri<R&1C7
%=`Fmd%pCR,nidNN`/N*.,gc@#PX@e&Qa<2B5.'#n;*uR]sgo4mr>M>Ap(jsp434<
8H3iEj7f`nGK0mr9G.!5Dho6lT<m'lH%?<IS9WWiopG^P?][Gh+O,+gpIC1V)8D\C
M"eZ$4rE-aQ^E!cLHZUYp:#RUO+HdbKjd2uq=e$3HZ]lHJLFZS[%D"M+mjCA&#-gp
ca^:M@%+VjCQq)dH,4BSBg3(EZ'*EED'u0(J$9:[D37V_qSdT&_F)BDW<cA2M$X\#
T^N@4VMQD*W@+Y<\@`.b"#HrRE5n[]d?2dGC'o/Xg@5`"AAX3OY?LLkp1Vi$(Meu$
UNsd.OdC:PU%e8Ui;A0Oqu<oGf=MPmK=HtZ\^%4'3PYMaWg"lTG`U6#BTU66G5SV<
pNM3&<<_cQOIh5Z+ck)+h"Ud\jEGp'c`__`hh[Sh!:^<KrFb<k45l&/MKXd?BNC]8
2P]i!a;8O5G,OYaXqQ_`XD;&!r<I?B5FQnrSGQ2FG-4%'5LodAX81BD2];da#Pijg
&-r9[@Pnr1#9shbJCk2I%L+-9\CM'2JIMe#@=[!?$AK#p6K+.7AJ?!#L1=YZdQ%bt
N^fd79N5:FPfh#K0lYKM3#p$ad>6<+E<dE%i(us$,&J*Ha/"e_^qaM#Ku7VW>'($e
+<1jL2-IH#M+/>Ai1gTYJoNiC8M&6AFP9qPR+YpN.7A.;$ChSL,gca:E<R3#D:Wu0
[QA(?`+3g;I.1o0ZOA7WN&]\`1RhFbEg]rpms2-',?@Kta%J3-N:Rr2Kq`F](tgEL
;395T*Ndb0n;?=S.9s=4TWp&eK,K]IMlJWp[L?Suc;E_F^"bQCeE51pppc)7AO*8?
1;b,[Q=hW4hkk]+pTA;4e,4T_4_D=<#OdoGNcP-7Xp?Fr)mgcM@$ucnZ4b,A@B1:c
Uk-\,g:X,PEs/6]RX0NOO?t^f_]`u6f/g*%5T,<XR]@%*Z!.\T6]V(!"NB_sN#4#s
bXW;Cmu"[r7>PJE%E"lsLEo$eU`d[QM83SQ_Wg+f"!i]tDR-`io(rE\J[.JnL/='t
_1mN2,mR*EFN$!kl,qC*^[(AS^e<uLOO1DWbg6nq;oEfA/TZeM)_$?5/;d5E4OZC1
PRS?n[o=pi7*N"!)OOF-`8<s\BO&(J:9Y:H&#C!#HO_9>FL%F\D0es/eO`t&2CPYS
<9G`&)QR&L_8Ptt#,/>0=sNVA@*beQ\8n1m[Q%i/V(\'f)HXboJOm>n]psgXW#H+]
:tH/&LSmGO@7`O<.R@"f<;"jA79!7251PuW?[>Wd2/R<\nH:L\gFW3G"gdsbO\Rbf
Q(Eof3)^Dq>KHbm4Z;]OBlDSp;RW.0'rCGBA!N2f6Jb]'lV-,nh)TU&Pmln=>0;A9
]MVM%&Bn.1,nWLO=fnH&,/M?4k[4'1]Se^7X?/6a$&-!,,1&ZgOg<'!H`>%aEfbpa
3_FE2BpR;SB';l'MPFjs5[fCOg#=eN,Oe0T?KRZ^5)6IF`a:aLf!<O'3jm-M3`VOs
nV^9@`P"&c21i9fajo`+_M4O],;a8gZm^nl9`&_[l8E.C'%;Xa$]Mrc($<i?'1*XA
E&!YKa\sa*6/$J+B4FbVeJ^K(ausT^)/RZBJ:aKL;@2Au5"p(Pd9T2g)D!>ONEFm_
EeP,20ZHS=EJSG(P0Me.-B@)A56ph%BQPb&r&k[0Es?u/XF[ij7tW^5Ngu1nGP^gY
i>*T[bcj<En7TmR["0mLVNZTg6q`[M8IK7b2>>1]+#Fg"ctKYja2%-$Ral]p/O_qR
3:E$r^cP%l#!\B1nd@3>0[>6g]^j:8'uTGqUg/Y<'k6R(qHA<OjST*lq$mn'`AMLg
M6*WWo@`(8Bs8I#6=W_&esJ1C`pkr0B*SQt/1)l^)*0jh12u45*d=N6)b)S9),?,E
Let*4ZrgfJ+sY/_EU"\[e#&ATOZ[MYKt\P)9+ArS@OG$Wbp]I]H/\[7Lf-p@`)su(
UiR/\%K.b+;Y"JR_E(K7&HnD%(7s4]eO40bq)!7?L)pt@D,(85+sJ)p,!/k@,TY`$
2S-rVCpcnfOIf,;'.b&9/Um,)&^$p)grbj.F0$9T2n$IKh?"ZE'537T@V0FMiJO,D
hBeAb&D-))3@BZHEBeY]3LV+#Sb%OhY)1gpB)sHR1*jRi<7k8E1u]hC[X'JNU1e3p
E$L0ZKe-,#%d,,KTLY_dd54E^VkRUmPD4r`qB1VC>p,YWIVpND3*XKr0qkruJC;;C
4ssVO/C>mMdV7f'Bo*WRPdldOF6?=t4Yrj4*1kJE5."(e03bAp$7s]C:8k-l2COZm
U!d=:&s4]Eju)0o(-2oMSR*K$8S1^4KOJG[dibWMXYi%C=-9bVX$s+S,>,+9CJ=^Y
7(jbo!lT]7I-RY"m_JuTR8"&@!2XE#UJ@j/53]aFWft_Ye?hk[iE_kUF\[o3KHXV-
!C`Za7]t9P'436>A$!,;nCA4N>3o7bX;/\gY^9eo-Ok;Gp5s%%.f;r/'c*f-&t24f
pL^FB6%P9ST2V3W@GC-#AjrAK-<a*"<sfEe6s]96_s:<YZ)p5i[.(;H]LuZRP.Y<\
n#BP.Qu@;B]/Q=`R+p/=%Cn=.:J.ZkLbE+k7KC.=QL.Xl74HpW>ekQq""8cQB$!^Z
Hfe)l)qPaAD["+[`8SO6FSPp@CEBIOY,GW+7<QuSs/\bQPMqGXlGt!"^dqcb,")lK
;oK4r\E*uer!>Qep+:EpD%`pD(dXf)8%$EF-4o3WMt0Kja!c9U&6?a3o"%]&Zi1DE
%!Q2:,V6oJ#k]6tVbu[:$nfQ<iF]s]O5=`jCfZeZA+H#sY24#9q<p2e)QT?tM(kM8
L<d>X$4X@*)l=MP^Q][MSe7Xu,T5=i&i:W*N7>,XlJ>[6$#",G]$\ha\B;86?$T#m
<cBL>QP;7ne4[&kD[Dqi*R'#5F,]CoR96TV3b`^mTqeYkJ<c_#?)4QfA^/p20;lsI
jiSP:g,CNm_'1+\h8o`Q/[E7Q"D*T3)T/5O2$b>[h!,9d>2:*h72)!#3*I1)e2m2$
gRT"SVfNs.HCK%q'FgfrTb,bd-[]@@(AtSnB@jJ>?"ctB_(HaYfd%5[l:[\To7!^W
KYlX2]n<u`p=S$/G@U"bZa.%u_n#U.J`mi05W5Lt_i>+F&IA]cM6<?%V+R1lr)Cm:
&dUYm1EPcPU591G=f6Tm$5mFdH8;YF0Q1!HDZ)*9bOl9X76;Ua'MGnqa&)#[(S2Y=
NH=Y42!E*aq9r6A<9'IQ\pV/F=JXSeB85F#h9Cg;/db5X?[>EQpODV'$CH2&<5q*9
LQSb,TVD6C5s<+Lk:dVM*547ar_f>5fu@'58!!!a+0"O4($YR[:$_Y0$9s#3hm(4n
\\+uL/3_J'>N-.[ACnH\52N+7%r1Y\Q]4r-2;JjDmd2ti\ejh+Km)_tmnR&2HN+f<
f!T8@Sj<@)5>.0OS@`L(P=0j1-2KCIU\EVPid)+BJpV/$o`"/-g*YWJH78t["O?Tg
P4'`^8hQ4$m1M?(Ce.6+=c=R+,+;"/[S1ID!+L!LYIlC,PjkDr5gH[9$Yo*Jr)a;p
lV@jtW4\e*l=g<AE\21ZL?e4O[[kL62aVQO%e=QlRc-tQn??qLDlE$*k6=8IjXs73
/M=-.MX[i=!"bC_E!X*0GkkgP!H<SEE&Reo,1]L,!j=ZNcto"e'%)d#"m)af.L-9a
C0@cA0+a6#n%T,q7f1Fr"Ng$8LJU9tQNt];,RVWhd.[R!;[Dl)X&%1S,,Y_sS0O(T
$rB!kO.cmf(rl'M$d;rZDlj,&isu\Y">J4+O?X.-:D#9R%P9a"Yh':<!&P8'#Hd'O
c`#f7U.fQ3e;n;YU-f1MeHjN)%aIu)OH0t\$J?"Ps6jj2E@CtYSH?#<\LuYcA7Z-E
Wpm9baRHYS:oOLL[0bhG&^aYp&=4'V]\j@e(bk*SOR!V*-Nc#g#]OJ!nEUXJ!s-bP
V9o_`E/:=9o_K.fTX!k6Z,382T,Vc"Zn/Zo&X_RYMYG,FGgC:EnTZAl,3*/H#6[sA
,3HeY'`Wd\%AgS#iX.]&bp0&s1ZCSM#&MN/LbFM6,VJFt`nJRLbp@s><YA+1MB4-T
S8VsQ19s7nB'1Lp'dh@+,D-1NU3@uJ5pe@F-W6'PXL0I>2M$NPBnk-s$Yq(cA3krR
f.]K:B2D]BRjYM-@#B>nnkM:1U`q6t-1ZG-AUl>;Kdm3$GNr.)$O7$7p+6WKSC6h+
k6=]`0Q"[)6Vhl+0&X(88>BXuH=aOK+r;t0A<,r&m1UU0O%+ps^,I:[0hVNoW_"_i
#ZaB5+n'NHo)(S%55kfW1(s"XZL\!T#pgk0YKir$k^Z7QqBP&na@1,@'.PYpE%4@A
=!Z./F'>'oc;juQ36IitU8E9nV)RN_'kL!N18[mgdi6=\.u&kC1KnI5\6\Cq1u`sr
V)V*N<A?;$4U0DRA2'R6E/[^Z3cik"'8J.&0/^(ZT@2dZ0:b=G:mnAiZZH:-di1<H
:H#"@Bs6`D%Yls!`)qs'32.Vt8i/*)f`0Am2!E4P,hsd1!CNT%aX+>Ve#9<Z`4+oQ
Cf9:NZojUpdm16k/CZI@F8nERDCDCf,h)EG./lKRVD+4c.)i#GoDpp)@WLRM7T7l0
L!WXq8O_-la$p8-oM7=9P[DD-4#7'aVb2IQV_n$rql$>W+r2hIX=uH[:R%tL1NG.%
8p<,$6Z[cH8qM#h&OOV].&%h/"bJUqO%q1MnIp=<P9;&A\3l'N2\QElUh)q"_K,;E
1o"hY1pKm\YTRMaXFk(]%E1tV-VAL63Cs]GZU7Jf9.iS97Wd9K'XpWtfJ`kQ:GSP+
[4+o#M+=lc;=t;t2#'P[M*Q2cZa-AQl:?/PUa?O.:+baA;T`*_=\^;h9#A%l'_p\l
%%'s61PLTZBF?SZWE[n[.t]]WFV.h3RVcPS<>DH.;bAm3R]pq+IcHqq'c\F8E-RRU
s)RF"E8""TIp:%9;5j+_Q39K!$Gb)cOeQ_B6rZ+Q+[K-I.mb[^2AJ$2EbYYc@!3hC
66BXe3FO2>@jK9_<\7c,m4">[@b+%XFo<UqY@'eZd+0O%i_V\DAl-rf/)k//Urd,T
<@jkg(%s:kMB=gdIq8]-BLOs>`,TJA?VOIN[:3ES0P*d3'e\^_A@<Wc`bT8n3[\ED
7:X2LZRg.&DFI+#\+;.)A29lYjFVF#Q%LVE2KUGW"#Ak.D\W%a87QK@*/SeN6NjMK
WDY/o_ErjfC_mS.bU>ga!_*i8S#7l!dpHS)?U\#&=q//^@LCMGdl9`'C'%(*PE7fA
nSFOc;tGSdbQh801=Yhp7;dZNMe>1qnfgFC@e7Pr[R"sN5(;T@0=QK.GC*84.5&VR
G?&6.ceV+O_QUG==HpJ`iu1:lj`_EYUmD9=Zi>B-N@m.SG#q(dU<@1.=Kr1N7or`]
G?VZ]2+;_!F>QH@Uod@CYW;h$IuPd&Q^T/nT4"bhJ+dnlK:dV2a):>i<4';sjH3r-
KNJpb1:IKs2gn/JSUD8WOk5eC2oTGI,a%\&HM==gKF:*Q]1t\gl?)-;79<5?G(b)(
G'.D6Wf:-TL9VHiHZt0co]#H,1PV(A;'T?6fN]ZO\s4SDA!d@E[=Cu=R:=eYkS4[.
Kn4'-:Jobr.+J+nou*2@2FU_$K@K?8(ibLm"'/l<HT4H!;sknhF,O#nNYkuK<#(+3
j+E=#<^a/Fb6r<%`Jmu1X$i=jFSR3-#B<T:8i:UD[j"Lk)iE'cTXbMJnhk"qKP6[;
5d.bheW)/i>1b$E>Z7%YUf;Z.09lX0Pa3n<R#!]2KT):6Q8lHXp@DK+=]&^/>fDJS
R8&-@'6(I)JBQ3"G8XXP9p9$a`O@4Y(8fHt0KQ!<<_'Yo7k,uu+.@jnH\/8'Jo5>,
%]bDU>L2P])8pA?1ou_)BZ4^5lD@XjK:-;b8gd-#=f5[P6_;u`.,!3WKk['u7U:X'
Q?g2%`5lM.9M>2c?c\J9C3,le=>cg%TuELq"WUC-VBX^(L)Hb]3[nq2V1g7,<i-KR
RC5!,4.:b]1ceL'VV\H>@Pt^94!GlL%sOmrdT2OHP^2%0l"?m4ReRcaCrYhGHAA+M
(T>d6T,#,=H>YJ6#:mf,VBe6s0?@rJ=elrW@jRdN3\.!q)l1M_R^uM"`,Vjs0-aq6
<B7F,2-@\K$r)F,<MU%NAC`mSVCTj<`^MbfA9"cK&6l`s,m#]Jp,M(6-;?n$=Ef!H
__a^@f&E"<bJ\'gABqV`N_:r;Y6&ucJqi5q$DZ459*`1PHS0!@Z]Qq[=`Lu]dn61c
:U,gDMo:aNW$S\C3%LkSS(7)dgN4sbelcHT[HKV1&gJlZSX5,FP5C>DR#eY$$a$q9
X,jl^gS[c'V6\-<HhZ@&AI;O-Rps_AB"PMt)i9hs)1Q23\&J;^UbZ/]d`gem+j`*3
Hf;+dcb@qAIeOaRj.oeEZalQ#0OeC4gM==]<aF@u-X1kiD@F2N'=W:'Qs8+NUMIC8
epI*4:Tr&bAQo--J7=*>W#.s:)\]H!?s;$&-.fKB$lPuh+iV=:I!MZn(<OPW=DDE8
Cm]jkg=CHR7;h+([+\N"@rZ0%LdJsqQpS,S=;9.,U=V<>9pHha[Lu\cml+^5H2OmZ
gQj2^S0=\EbM.o*!^"N5G^*G/<h,1DH\'#R!.3%K_HVV8>j$#&Ea.>T`;F>mZ!"b%
+j$7PZ.9H.4M>XpL*K3jd2?4jJq>Nnai]k0]3PX1PhAST8'dMWWsg5o-bmtirPf!1
e/[CA<i<cg]JM2k3V[%!RkQe`3[*"dEG.Bm__//M^*5+]3$!!cKOknYJ7I*A:BDe3
*EXdi32#)d3MNp/_B:A)a?<?ifC*66_DBkM$FiIQ77\jbWh[ajSm,^tP'pco7E:6^
\AEo\:)HKW"=deh$f2`0hAoXcKR_dSMDs\iZ!D%p1s._\D0qgthgP`^Kk8n"q9AM8
fVL1V7]BM#1Mj01]`!pQ)*\6tj4IXM:PP.p6Z1.NkY^ZBf=jUN4eT/'2cP/!2P\\M
*KuTeBB?gq+W-&tKRj+E:3r[a-iL=27)h/1j4h)n]Y)l>6Mm8jEh`^$Jk%IuVKaBc
RGGDH)kJN*W\Ki(-p9`^=.V0"^(juq*[HHa<a:G'hS8"$A*"a>TTpL+Sn96<F5Ik-
^2)(<7JuCg4+Ld7JprB,'EXUH4Ta850>@86T)!,-l=n5A=F*^jA6,UkbN[]eiWZYD
ct,97AgB#dLBs0-W-BL"H"d_>2ak_fZ;.C\@Q.90ST<]]C45^LfB'=C<\r'rLH?_F
,YVQ_<l7o`BPL()A"p[6BbH@O!fcu((F=!/_dZA]VO;?u4nrB(f-E4;)GZP]Z#RX)
oZuLL6kfHd:FL:TqV(R7+%:,m*,coU2;_@.SA1q3ZguOGprt+^@U2HMjX!i?90Z/@
i+aA:0`eWq1E$[U_Z@9cDBKgV`WG+degMY!6"'4+PU[Y2*/fQh6*+6E#TJdnUDW?F
@PsBA+N#pUUi@UsNJ@SoaN.p%Mp,g$Ohfs<3M"K."$rTiD`en0`R<Fer^B[(NMb+f
"H&@"(C^RfpiJhK'TporedE0UALJJ4U?+?_\8X>;'1<F`[ErYBU0B!B8/)[a&K)!H
=7Nu5"\G6=`gEi=^'>Lq_6<HeeFIto\P008Hd#4r1rN[nnJQ<*T7e-2ooeV^WeF6@
gZ/GKJC;K%_80TE3.CF:7a=[d")ZX'(P0_EL,'''X,EIC>]+j,`"oaTXB=^s.MOfJ
A<t'E*%7ofa>Y('#5-r:dd?CWqn<nUO/&tQ]/so/EZD'WF'cF<9WS<sWT]e`h*>\+
[#KfrC`8^s$/?_c[)qA9Y;MD.I]Wh_$lBnd@=W1a-4:r4pr(QJ<#il;LgV3W#S\j%
,u8$F)93;hJf;N9Z3l;_@>b^..P\7jLUnp.P_lAZ;@aZi;?R?'V4iLe,9eTUOGTi*
4';ie+hTMY,q)H9\4Fo&RgMEcXPAspn2j&+,O+-*i[3p>Cu.:[J8#rGe-'Y/[u[au
Stu!FQN9Z4@Nles'E'4Ma-2*3)q-9H?T6*kSIHI<.U8`%<0)pQ6mbJd;_-D'b/5b[
o"/6r`2T,E)9B32P6"Md6Zi'#Wr4S8\fnp6)8o)BlP6KZAXs9-bY8%GTi,p<(aF/d
I^7/'3p?Os9;6>d].a%NZ3M$/.Y]u]F;&lT.!#r],W+OZ\mGK/k)WiM,;b2\bs5a7
X>#<R^':fR'T!$=CHZi:8lG@%?n32Wpo_[b15+EHZf<sBBd/eF9f5'tRAJ=a<2N"n
8eeNSq%-tt2lR!ZqCCNf-_;Mu?@3^>a`^:E0c)0V$8.V;>(g%PMM\5Y1&du*-rf2j
a+c5F8P=e6W"lL-)[qadYke!t?+miSbHnZLCM'cTG(.]6^6#A:TV6Z)23)%urk"fc
6'b-!_O.3KQ0+G((PHeT^?\[6HnrAYo$T_B\LP.!`e7fP`sfZKLjl4TlJ'b]&gk0O
R4g!m3cT0o)C44NL)f2acgBD#Q^]eC5-jgTONt$VF,KU0P\Ji8q2WkTqFEX+mbVIn
9<j'^))Afc?PPi2N*#+g?L1T*j>m6S'2GgOf)K4gMQDoe$eSrrHl@<bPSP#kGFC6!
@0eSUW$_XAR%guAC+2V5dNmHVWdmO_Oie@nKVAhD."#kkY7lYBUf@c)K>`;k.oKpQ
TR/GH"oWERjaR>6$M@JY)<*IGU9.IrLO'+lqCWV.hHcm45ALiX/9d?XT=V[i%)r(3
?u#neP?E+kI$V_t9)[a@=&]=q3Q'@q&QM4DG>15S&a2WYh)#IgEK2nD-m].aU_cB0
\F?KmD[55^YDY(t4<:0efurrr?nEAe)tmfmO\5G2c&silpBF8^RI5,B#">a15/Nsb
.TTBiKU::n&DTnCPK@p]5W$?#,a5'YDq+;:#r"i4o5/=Ifng]Gf_O8)[S(J"fui@\
.[)$eM9R)@YEBI#Ug-'ICa=ZIK[V:'9WFNH2GfZA'f2L^bAU9F@20J^.pUQR?nV82
2jjTV>;:m_-7$2E,=%]i"RIiIK^ftWIdH6nmK=3=\kaY>reo\j.$NHF30mIm8X_7X
;u-nX#0fDiXTY8phLiF$'T(TK%\OM(a3_sZ4t&_q:G6:P["J^0N@^`oBi2$2)D90.
RF62a<d:["6;Ise/3HEjX>UDs9'&2UV\?5,:g,DSko1CeFI9b'A][_>!@a`G*M]R@
5=K;Z<2NA1Ki$<J5O'_0BFS"0<2oOlNAWVq<E6u1GN1ui6h7%Y"S".Td6it7jD<$D
5b^m'ZXQ@O3[ik#=/Cqu;>OC.[E+>qg![kTZ)ar1K"\l%CgnfgrZQ#BS1Z!_1hZEU
Ai>5he:M3tV4F5mD$HdKA;9UhZ!b!#JDJ?\$pmla]VS&EV*lhSM9i"5+U%I2ZC>nm
Oe#Ar$81C%f,I\VgD)7U6KP1l_!`mAY]M]>59%5C;\,9*T[)6DgRDG=lu=#QMY<Lq
]4Gboh%mZT,%TDR@<^[6i[!h2WAY-lB?;n2]U**lgFM`+Y/SZ#AB:@s>E%06Z11N=
oVDX_JATGCmjE;2aPIWmJSg"`]Jh=K>-%CA)5X)d\:X8%b<(GXFTfBXL;=bZY>\s<
%qK=m^tF&K?J'p"Z\1*l3cYsH<,kO;W1p]YCO^@[F^VGL])C]I2g-kZ'$*N^JR2@8
H.k>@a4J2h1j+:NZSeABeIMFf)j!fg6m9>6D[@)@':gg`<mE0U4lm),T6$T2X=)7C
B#Xdb$>)cOjD-V_CG&'4\LJ$K'`G$LqRd_3+DReC(=W?F)*h#1"[FIZ"[Eb1!<?(/
>,2^D:gO`kGq'/PQj"0u<N;#$^+&SsT^&fhWe-mRe\P'DJ=o^NK1KWP^jlt"!7Dg;
!+QJs\2.s*l5YE^F:C<2(BT\s)LtXQeHVr`#BChj6J,So6'-\nNA/<bjm(\*O&+OB
6)[%If*WWKJ:I~>
endstream
endobj
14 0 obj
23115
endobj
12 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
>>
/ProcSet 2 0 R
>>
/Contents 13 0 R
>>
endobj
16 0 obj
<<
/Length 17 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)>J+0c(<)+p!4E>6]aIKEG)me6FaK#S'=#;4&%a.KZ<?6^3H4$5\hZ63n0$
4W0!l@j?Q7\84!f$t@+gBsp]71!e/'U=c,jFYfR`B1ZLlE\nJg7RI3De8-`TMCJeX
TdUUDOMaWIW"GmD+=118;S`Ch5Vn(QKET['CqC-3!f!HVW8),1)de<Ni<9!kK>6>R
fL'$pV@'gC/lt]ro+3#`N(04_2>7'<c/UP+q$b-d1RcS[""6S,5ZF?_$3l,SYgRJN
L^I`mBr&ae2]3+&1SMJBEtjlK5bY$iA2bCjMO0lraPXko#S(JL.?)\[)2uST1C;FW
^uY(+1:`@L<]R5GL<ukmY@0g5&C#qCT&bJH4%#[`NK)lscn^P)+Q,(9""6Di%RWeS
!NI]t?lCNR^ecKdJd>g'L&o(fXt.Zq'KDbenlQca9Xnc8U1hD#NXF_Fgp/3aTQ5]>
N7;&QY"RJ(NME1G8=u]VC'^'#Bkfbu+jDicX+qk0hAN!t'4.:VC'mG(K`WsV1TLNV
5U)45X<]KZK.,NP%V$Ig2S?0a*]/g#392cQTl\YcX<@YbZE3@a)RY;#E+g2G.*C>d
Z>6K/#I4AdE#10@U>E]k!L&thJP)IG)(Ec(B#+]1OD:&cXEk#W`N[-cQ-noTjq'9T
TNi<kd_Kn>VXh$@&2"^W"^b@=GX5B+e3t*A;9OB(auSauW#5eTG]L;ldFCNtf5YB-
)$\6qeek&\AKb:+[(S5KWi<'`)l"kT_/%daLg>;$2cZb\9,DPU9j%M1K2>[8h0Kpi
pb`k![!,fS_l&EXa`B=q(%$k_/!+Gd-Gb]OLgKfe6'&`?''4Tu=(VP.@!@6u70]r$
^Q'pB%5&Q2[:;^.KGB;[=fo,u>A??:^gT^nlk!hI@oX#&&8@A4/;)l*K-,qO(F:`7
,<C00)2BeT^T$IE$nk%a)."P;l:fiEP[sT\B1?_7QK[JZlD(&T=f>o(VH18l]2[[(
ap"h_JZXX9d9GIuJ]c2Rah;8t'!V.<[1<k3>o>iXZ9EX?JY?bI/L+*T'#&Pu0DO:#
NqM)&h6$)_/[2_SfA"3ApK,[f+#!G&=&C1;k/4ekk[!Nl<.7m6^=;l&NL*PrKf-ka
qMnp,l+4B7XSV:Y_aMErL/4N*R2-AG=(kVtp-T_*R7$IC?O<KMIf<gO>\fCMcY`Ln
B8U4AKB[i"-(Y3P%f,"?l9bbmL)h((#ShrKBPPro4ba+5h&BpPcXlT+Vn29>K5cDR
.?h!QYX-j__gsJ`(9@#+Lg1$e;Q;$h"#=iXRj2NIDiDMbLj\EUPAP7LiW^t=M[lBt
$]#:4KL/3.6/f0C@M#[\7>P8cN,2aN7-L*a(HUt(18,ng@-EsPVWh49E%fFa,WW>+
q,P<@?-sLZ.]"ali,[^UDFFsj&8NBDK-ZOqc9e[%>'+/YQ?imGbqp0X^=^U?O%NkF
8SK7YSEP$J0r4=u+r$<;nMZL[%B5]"(Fiqu&!a7L:DJ^P(?E%[.[!qn3Z,_.e5W?3
Z9hC12ia12_MjJsS:lMn_RJYoVi[f5RY-Heop#s5#4kQp!p"O(g'XX@5h[XuGrV[P
OjB2JFd(*b%]5*lkp"/9MU'W^46:e@-H,I(:"d92-dq*bNRhjhE'ZU"%/b"?/[E]j
k!GqM'In2)R^6/LF(g\`T^%8O8.#/_AOP7APVH&m)FVWCACd11"uJGe>r&!W"e"]1
J@OkN1M2#ZRjhr\;gMFPB#tfee7r_sM6T]TAEfhg=I%9fp?a<*9;;$f*37/$mUo6i
-V`,ZV1m#J&Skr^a#:)l[bS;?jRkt,r2Vog/N0Y/aC'(p\(29W5AMiXVcBH`3Z?RD
Lf3oDFnN_g"h"kJ3nQsgD/@ciZ!!HIU5)b<)_-*/3.\p3-O\X==]Y'&XNE<$ZgL*2
lFblQPI[(i3KHo][aQee4HL:u^]RJSB]aGIIMSNrb\E=s+-hh:+PBah![<"E&rE`n
<c"fN6W7jXO>42@1t\XJmd+t[.Fj%9gm95,&RcK^0`L:fTG;SklVMfRm>K)A6Eo3I
:3Mu3F0:dKB((p!\<>Q:X-JQXV1a\a2lR>EbP*_Cm?=!ieiq0#`p?uBCdSV8#>5h'
I4_bdQu_$+3nrmGE9THQdJ!b%bKk*mUt]6n6<%Ar<p,=AaH4go5e19@N,5X9^TRiJ
?L-s!i2/'G;\gcV-%*F/mFRhD,(2@@%U81E#E1Y]$C:M[?J4gW8D+bKQkb[H=F<Jg
lbbD]b)lFsdQYb]21qtkZ?V>R:sFq_SOFOZYVQTIbp^=akD[ZC(^>>2Bjkdf%%+L[
k#O)P@]RXFW4(-bTgS914VnNs7Tn4-B?7@tAQX><<4(4c)/DKMXLk!Eb<0CiM=!)G
G0b8GrB)l]+Zit/9&YutL75#BB3bYS=e<+ER[msT*I?K%,Z\<B)cc-&pS)fjp=TuN
8*g[lZVLmH,-^*@Zg?#2F@Ln<`XbZ)I@m1[HM[pcMdL2S+B;'e:MVu&9+bG`nC9Uk
e!<4B^;=R.FWOb@=hcUO`T=gCY%-D8q0Hfl?*F$,r7GRjK!2='ST[p#h]+S$DKgfN
phmh$0+3$<$m<'inSd=(qYP.-ot-R6LdWp)-LYM(7?m)0b'_$"f#B5UFXerpSD<t?
rE/h05<)Tl+/%p_\#'l&97?[$olQd`dkWR$ka^e.F=o#B3fc>UE-kXY^88kk=(^f(
]7&ahe^o+j[HcRhLLuRRWR5W?gtejN.?8ma_7S*10ttIDrrj@;SQ1)E"2h]!mY`cN
jB(qVB6`[R_"tsZS<GnS^#(L)=1<`-b,LG.WiP6/B;6s5>LV(4%.\cdlC$6>^%o'6
k%#C:n@jdRpjs(+g1RDZ^0BNB\9R&8Dn35\NthM8rmUbe11&hiN-\j+)>,YGN2g%.
C'tVch"Qg"`*lGc<tG)0=609#^NIHi##;;0k56JMK72;EpY.aDBRb*eIt-JI!YB)W
<r\qdZS1lPk(s(lkiK"Ro48^=.0fjNJG4eipWr8"YN5BFL@`9)!tRa!,'<[u0*-#I
1G-oNbFGgK%Yr,cs0*u'mTfWc=To$Knh;Kc0EPe2K`\G/?Nn1I`-hiO?Nd)7d*MPg
C"W&2cquG1KaT74mh#k\Q7bt1=6;8T6sBs,]`G@=>nF5=&'5(GMTKgu$nhTa`_:3&
\00$Ea+hZ5juWAI->`seKIGdXE&S9RjEE+0kc1*_7W+5ZCi)Y]MNE#T,nbdNl=49I
;pbOV+t3^,Z?,1CFAX1nB0=ZU.e&NU&$Bscib];TD\8dONi,GZCT@dG[%a[%-Rh$F
&JCWY(.aEU_*_BuU2Xq$;H4q?"f9Qr"]S\U](Y2s!E!TU018<)f+hd",,C\.,;LSP
0KJZ])!OTZ-u`$n>!?l?gF[+Y-RP_7l70"$X(3nicf5h`mYJf`(+MrmNWdbLjA^qa
Bd3\s;1A'JKUF%k*Y+VdC=%B?/dDM3+ApWs8]Yj<f,BeLbDs;VEPgjj2H5\TH\X$K
6s1^EWba@_>d*FI:2mNfh'928,6^1Rnht3e[j184,>p$91,+Gr,a\ieYXl]]ER;/_
Qs^BCR`&`6D&/WS5od1",1#1a_no$$`i5`+;[L7NDOS<IHRK3oB8>=nk^&$TRU!/"
N%rE0EQg+'W1+1AA^SS)#&PiDkZ'CA'J)*n6>4hg^Ec:;^BOmmo#c?t`=*AKgI@LW
K>Sri_DEQ"hbhI!$U6)D'HqLiMA#XmnsD4Fr9b4%,\&``crDU<k$[9e1.S@\-rhm@
#:\'!L-i%PjugUQBer0l``"p*CJc2EM(YV=Hd_V&"L0kGaLRK90a8^Wo63#'Y;3C_
T5n'nZG@rmr<^l5r)-r0:LPMh#,/7o3Q3X.VPNcu&@&<S+XF)Z/#r2Z.6EBe47I_8
0F'\=:HSlBoLk$(1WjY-T`\lj"E6-mLGM#nDNM3f#DEq/k0"JQgH*A5qG66,c_!En
[lKRKq:!D=F;FrGD`&a968**R7\M&Z;Gh:N%hnn*V,h=EX#_Sr?,EK@AJ4s=RmV5K
oe]WFFBLu7[/Y5)PuLs8B0?A2i=$@$$Et*kMCMQP,n=L9!VCq5ODR77DY\6]'iY*s
<"(eZF[D=T#`qhNB%[!FI0OetHaEpT0/lOg@7r857$O:_l$!^1V*YK4"8&cjFM1;n
NB=4lrH+SoU(jE1eO6aVUpPOWoW_/tmgH>p:5QGTd)RY'CJ[jQ>V!$h!dJ6o6OabO
25kphLQ;q.3,8";5Hb;=$MP4]*.SSMET/\a8Eh>G`CCIs6fibQ;f`P4r+WQF3NsA-
nMIGg(tnRl'.4Gp<B4&u@oQ;tIoU`<'o=B)K$WqXr'`Xjk8Yi]IZWg0"gQl!@Q>@I
Nt853%$dF"Z4.m1Jg&Nr7T(0cZWe;Z549]j>;:R[O1AHAVFoCb)Xt%5A`6^"q"8<3
?Kt-D-l==1$qKc./b01:_^.7$Anbdd3\#D(kRcStb%EF)Xg3%21F1!6-qB8X2l1b;
p)GdrV)P6nCt:s_aL=(mD.G#p@7%-I7H%Y9)DF'I4t8-lecNta]k5U#n$Vm=$c:(%
nlPO7/Z9\&[Ic-&0eC\WA4907e%B7u9XKq'C't,W(7Hq0U,-tqIHlMp2@QZ=s(++'
Ar,0/X>Lu.Ian\U>7+tn(=lUIGZ+e1/kX!u6c@IWFY6B>BP$,:Bq1?l]b!l0D^,Ih
p/5^=GY6QrS+_B(@]L:qpMnd*S(5Pu`DTpkG8LX1E7Y2$o(O`&$o:ArAuWGDA&Ou4
lZC'g<7]dX2H+KG<)e'MC3Nm*@P;m?e;1;/Pc6VbkMA_nXCit7S;<4V`l;\9,U1EK
/m"3&mSmH27:APAYn,hV<aQ`r&m,i:HNJ"fG<ha3GU7RHh.FnhPn.fo1/k7@.4EhQ
f=cF\5q<['H7"lrW";Ra.-3f3qA3:aA&Tk5.59B;OLKV!pORC"SEd)(aiUf9bpLmG
J1>`k7g$X:.DU_WG[1s`BK.b-V05j_g:SZ(I$d1/Qlagnb[(M9=*R3^A]\qZ>)uSj
Jq_U,7`T=d=F=g4LY-W(<_,Ck9S.s;J;<-oK&;9h7<<)*"cl0-,NAdVS7$QeIk(M$
l-+-G)/^(XL0-@,G,@HJZ&ACcm>Y^XG0FT[/q?Z.7>_;)_CV^q'X$)!>/DeM@g5Ah
P;M8-JbVBgU22Y&@uIj[-DR#.;S5NpoS:Pg;V4L"R$)BaGqdJo24.MV!\7pij>E<9
P7L`?$FQ(oGER0Yn0nI%O%*8R2iLk%0l!+ufiX$Z!5H%f8*U6)9<S7OqH*oJ,kqJ&
f'[0+:0Vr4)oAYC8`j4orG[`M<CnU02n+e`)4AeQKQePS0-DrnQ@Tn5Equ5<ZK*Lr
=`_-D>ZgqT(Wi%h"*Kr-Qd[[[KhS+-B)hY9@+fj.V,\J?pNGt%SoSt4bnbl`VD"dY
L.s5g3N!>o]oZgiGG6g]=K?km)kf;9<p+LdB'3`JSjMWlH0?,cBe5tH(P:6=<.Zl(
`T7f5=?[t'V"iGQBT/8hZ_YTnM*_Y=\)X<rC+!OZ4bd3mbJ\:4%(ScM)l\ADC$J\e
7RH?N1?+lYlL$"J!gagr.`FOnEY=`4\=smW3qpFV(;HeO;0;&M1)b]_Jd&5dGHA9d
09Jo-j`W**[sQFH-$nKKQ]J6!?9/C!A*X.i3qP$QqF<p<XkLuGV0HgFL*HJ]QPC9t
l!?#U2K&nN2(9$S\qtB0brY*gZ!o/g6c>)gX0H-3/%[\_.,1W&or;_U+F@%i"!t*i
m?%1V,oZB^-^'u<eL_CgVue]T95L"B1mON=W@=@,`O@d_J=N(1\E%!8R^IM>RRO.q
VE:QP)PC)AG/jDjX=P8[LS9:qc6<Q(]GgmRWOK%MCArm0QP3,aS(-mg\\5tSYshW*
8EcE$1,Vp\A1G'oVA6i"N[`O%c4uur=n:BJDnt,-`MUX.gL[^\Fgs&f_C8KlHi(UJ
Q*nk*^Up,UHVq\m[CWuhZs0lN>:HrIQGpJ\Vo'okQa::X4A)"/OAQXA\or^.X2YfW
``PO;0\V\!DY8+*a'($R.5mW`dSY7\W#Ut"r0C7D353KmZeJJ/g4V2X)/,/3W[L9)
*4A^6]s2.rRqIgt&%SZ;;&O'o!&+S`R#7"tm`&M^bcH9c`-8B=$-VQIPO&=SMfU74
V[FhUXrO@cWAnABR=uWr;5G#M)JV,fglPeJd9S#q1i^Y(i`0#=EW%bs4-"#kj3(^K
b1le<go)[GP`X??1Esrk6sauJ''X$jbj`<rSK@KY6G5m^X*bO?]lca)1!Z8@estj4
#&V13n'M63^`/?b*>">!-s3:GcM]9+UCau,5MHkad[_'+Q%[Z"_QpXI;hq'qh,L\T
<:4]7e;s7[%]hi'V;,tj<5o>O2JM"!^1i9sNlO6*-4Q)cm[YgbhaKVF*UZ<%C#;O`
JDLpG.5fXE)TdF(E\q^Yir+7qmRLL8P!p!o;5rQUD)H`b<,Pf:@]rrbcB;Y:l5ik&
^-#QsmH#i.O\:rUSl'_2D3-r%.a,<`.C\EX0LH/NGo,+8rU+:21$HgBk:e"/Y7ahf
@qFc,j_t9$<V)_M*SBBHT"Z^".h]X_:Zj]IMg^<?*g&;@H0W7"\"5':p3"u+MUA"G
+M@pV,oILD"Dk[@fKq<7Y34U=O73'*Q.jFMe[jt!L2["EG;*"]d?M25c>h\,Sn2!i
0ENCm@]2X/k@CU>@g"/S`TY<eo"2BUSk:\Mkj$$`a$*sA^@WW(_IpoNA+$A972t:%
;VNO>pB;N&5!J-^M=nT?P'-Ng^JEbd,bWGb"25uMDZf\W0@sIGZR8B1c`8F"!4'A$
?7(*Y'h@g&(&@U<k^rQ44iaEAboNFtO<9R8gJ-I;9'D\DgKi;-DQGMG8)IV&qGIS'
!WY.j)Z`>M:afp.*"@Q(d/YS*2M@'E,=0D$BJUTcLEgL%JD1Wl$\lPBU^Ak:(CUM#
@DiXE',cg"EIjXY@PWL#+u(gNia4,N%#+j-XMT<0*"9hcBiOdZ4HYWbYf[[8D+CQl
7fre9?A2CMb[Eki]n1,S)Th4V1!&-Y6+"TX[3;?KIoa+>U=S)/`+p'b$a(4;oaW6(
_2ZHE>9$-#1E&]%EGCGimPLQqW'bR+dge7_=s[0@rZ8D/`JherHtH;<0Z.1i;T_-.
D.hGe-kpJ;8jB[&kc[m`pu`Ai)TqBp=r",M:$#".\j:FA=`*8ZH]j:\Ai89Y?o1tF
e=4B2jDF9/0n@7]dhrSa\2ku6jX%H0Xs9O$7-1=?1,=iaXpb<(L@+U=Ka-MB/r7:d
X&ti9@Cok9#!n&aZm08T>4dQ,oI@79Du:fE_+W37n1LfZ39!>`A)>+Y!L,SW,gc^-
f<^:]L8).sHTnpWO+:p)`T]IT+0Z.=B\#8dglE_d%iYm$/b5q:]HM:=OSGo6UN7:u
aa1CL6>M`BRDa/5\t[-%e"X:E.\]-3#-XQ^_DY7peIG,B960mFM"<nh07fje"tG2"
cE]L;r+m3=e/D%1+\g+e8A.r*3;#pXSNRTNdg?M:;b1XESNnUh>/n^,>)n]pTl]$l
1!1H0a0X=.!/=N3\r-hqc_,&Yc&?4[jfts*6"(u]bop:g@?N9P0JC9d?W$$PTj9=.
dZIlj.*]R93]8LS^-Pgf#TR+6ja>'OGCAL1>E2mQ`a7q8X'[3:/VG+U[ifLPL+p<t
s!RS'`lT?*,9'9Aar3-JUP^q.M^b#6F<%_kHprbA8cr(=i=pUuHb?m]e;7X7cu>N!
.Fo'g-2&#m[GgV"@&)n)2BR7E[Lt`Ajm,$IGD=95H\<heh;5Q=G^@W#=tmWMS(%gW
KT0:tH]Z3K:lJ2.3,]7ZMVEICOW7J,"g>2bq^V`.8JnV*[9OW/7BU+IZo,TDN^hEL
1u'^S*S["!RDP]O[O`?bI#A#cAPJJ%KPWI\/Xt?Slp\V#DMJRr,e#"aYJ-Pp)p-u`
rpYnY(XiZ3>8tNtTQOrk@[d!#\i\e9H4KG[V;:ecb'6_653:1#^3.(Sn\s['W#hiL
XS:Ps[Y7J*nr:9?&,&HY=D\!EYOu6sEHe7M[;B]`>F,0Yrj^8.:/qY[$mEPSKos5S
d>quh0hU!tZ5*eS%f&djYUoUT,1<b&M+E2.Acj#arrsQ"\QC0&,T-*r9$j:(1oBC@
Og;W_+E8k9$0i8%F3t=#j/IY6CniAV?:PhH3EG43C_JR)AsT5=8IY7f"-Q^,iW3h@
E&o<ZQ[o\RO>)>B9ZFK]8lZd?90?mE'>dc0%jM1lA^C_b[MYfbc\",($mgZu".KK*
iA>1E&hHO`Y12L*d>VX",XaCe>L]a%>3U>P+64hG,E!.Y-)@k2\K"5(&gN.TdDhr,
/55+JKL0\^lb,;B992K+/Or8m_8^12%24DLcls^)@OWed$+#.P(r48aN>,qj'/7ec
^_8_5>[Z>UB<n1hV\A9F<2pLljuHNgq)'RW1,PDuoZ'J>\Eg$6-(-ON3Cf5j:Xla^
?8*:<R:q,'PMFi9d2``=p<&H>>We.iYgH0*b13E66'<XAnjESSG9CoABFp;/6?I[1
bN(oQXTiM^70NusX6Z6+L13^:bXZ+\"[V`Go,-^Uck3)oL?I,r*p=gDSnVmePT#cO
aep8N'f1BEo_0^OE2)UH#UU)X<Bq7m@2pI81+2kJOrB40T3Y!PEh%e:UBoc`_(700
kqLW8X]?Kg0WD+kc;ipbP%lK:@<Fl)3'mpK==j`Z;DPIV7Ag6&JT"b)Yl69<!==q^
D*qrp^/`XJ=.S`/.HH`Ef@PP2X4"I1L>AM).^reo*Fh0CHF$]gc"7J)nM9f#Nuk=)
AnMR6ZW9Wa]UJ!l+iTBb7?5Em=SH;3AX/@R!l>sGl!P]G=CG6r3EJ2<0^?2m,I70F
`A76ulGEdgQRni7U/=r7MMSi4))>1nc<9QZ_mZs]"YT+gXi[,>0'#U$?;P6,M@EZj
$9mpe)pk_P<V'@;*F[JC=VDQnc7eKYb2;7r<\-!m^SM@)Q3Abp8\O"i7@L9B_iK#q
"3P_N<5@5?DN-?l\YSmnf-!0o8Q]8S:T0<_RJ.Y1kp@'?#A4`!Z^l_D4e])*lI',5
"c!^R>p<jt"BZBhGHf2\``5_7UeG1@."-W6cDqA>Cep4X9GbSu_+n$TJUM1-PsWUL
rBf$X;d?>]WsgL1eO(1pWduL*fg;H5qQRBoG&4,M@*'\lXFdY[p8ru^K>7(\T2=O+
=NRM'B@DuPf'BcGji!B9;Ce<Zg,;F=@<07(kG@IpRU(gr+eVcmW!jj\e"grhRDjR_
Ct\_3V`B9q,QD8pXG8(hYi4`MT#\4e#]=t>^n4!"8bN2+[T6M-'G`5pF1K:E)GPlI
!,mt@<U/:8KrO'jgS-Tq(rM0`[-Z:$Zf!+`fYjt(@D^kt2>Pa92bOPFc%(33`)Bk$
JUlTMV7B4)!F#<%-:'d+^?B^s7eJuHkSt5U[UI@c>MdG=m;c+6Fld/(4[:9!0t93G
`o'?lQLUh$R86m.i2$r"?2(1sX^2s[K[Z0m%C^G=A3>D^T9,4Q;9i=@dD7*iA8.e+
@<XG5C>@tcD/IUpbIO+q-C"Us9!bL:6LE?04H4-sLD>*VCXj8pa^OV:e1fkQDOi8j
A*W%'3]7s+ZF??tH!?f%dC8D!s-"R'M8$,X0rLFATOY^7>PF+i;1%TFQlO_Sd,0(0
DF6E!fnm[D^O%Z'2cDn7P(g8,VEN!AYb1AMU51*^9@*hm*Q72i=G0P&9Ho(M03tt"
J5]H3V,eng=AsXLCf[S3,F!8BY1JaBpDO^qHn-BH4t4larl&0u++J=E_6"/3J/KAN
S5Vedd&;E\(*+KQ8P0rUd:>c;S)q"ResZR4!5K.oOC9Qh\)7!fmf+Fd>PiKH=pYl@
OJ'uEJh0-=gn4cJ'taH/E6jQTCT:L!,Uqga(tu)7Jj)is^lXRAU^%7ldM8_dS\_?l
X:L9&%)(-j_&/WW.//P1&AStY^iRGW'GNf+%>n>E^o78F";jC/!Pid'P"ZfO.#>]u
#-[SK+A<LU=OY+@SdC&o4]E"[BT'`T*l5_eN)V<k$n4?ldYdOK$k)p%Zl^-\)'YO<
5f<dl/.k63,SIa+_,9p>Tr/::"2E&?Y"RqFZnfGL\/lnM_n7D8A*(J+B0Rq7[9N9[
E4$mK5o<GZ6mOmNLuUmN4%,#R_DE@P5eK%700rPr^oIj"X5LoUq8>rd_Akn-@(83q
Tu7N:*$c)kZ3s%[qSe[;`FKF:d%&(drP4@d`=SZ/e.]gV@6e?)7P",MEZMp]4%7@b
^sJW@_3t[X5nmMu6Sr>n+Kh>Xj@26j7cXWA<*C$K3(<a]]tA<@;@#]bF[fnVR[e1-
1hf6Kog!lt5;W>XA0\kYRM=gZ&\In'*%OP7J3QUE'[Y/nj6anJ28l;163:F_.KN'a
p;41G%O=/+Rqf]"#KB`&`aBY)r+jA5qT+>(MWu.g7$*_aKZLflaZP*o%"A^"OY-q-
'EIX;W03XC3<LZ5".WlC=K\@Ud10>cMJ*dId&%AA&4OD=$%/C<'UkTf^d)UW(at`m
dO[7D;jSK(8fTsNA;:[Gf*W^2.UaSRKLng'B?.@ub:H`/E/Ke][0T%o(&QRH>PC^b
Z:iQq9B:jDI'noi#K#9.92&hZ_sKYH35<B@3ujF)C\,#W[D/[[aTR7'bVd/!qEM3N
b`!6sTp6+H0hBf\Wab\BbV;\Z64ITa`S)7JUYeYR,VBM&8Kr3]'V:Xf&5&TM1`XUC
M?66=U`"g58nat+XJhRui6E=j$VN6Iaho$eh)BkBb5d)gK\;29KaGDE9Ha23AE&\j
B?0q77g-+n0aGE<eB"`F,n("!UlJ.pp<Q/%$>f:)jRc/oPg5CL6A0YSe@`h<q7gY>
.l&:T]$aCu84srE&c>tOA32)brQEB8V0lXs]!)]^":1]\+%3-Q!cjm&B?BDW9j;uU
X?e"-d*VU0$k/:,3S+N_#gST"M!U<iWpY[Re^-Gs;%!pjg4l&D?d\A1;8g!jPWHl.
hbjS!^%Dr2KbuYXp;KUXdT"oIN@DsmhEV,]$t6D<RNf&;N/;XhaWQm)XX1>*q,.oi
(;&3q0^GhD5"QtV0LD-<NB@icU!^P+;@M;UX$tKk.DFUA98k(9;0]krI@di6$8C`k
C]@@n!("5I^fpJkMfD^[m>l6?.Y+"T*DBCVU7<q(Ll5XPI1/Q0<1>:s+hNZY>ffu3
T@Jei$+Q>%AQtQ.c4eS.`E]]Ko4$8V\>.kd^>3$mnI[gi>0S=qZVpa#R"6_uBh2ZC
,%3W1[7lkY<Pl,WScgSdTgR,(mL5pj.O;feb\PDcqANnpLeTEi]URMA@E+fr0-%Q]
\G*QS1KW4e&Rj8?>UclLJ;\^3N<L`3LnNBkb7Shm+gm&\`J<(lL*AL(/tEq^KhRLm
QlU7/RH*qlpqYPlKY.<j==I9B=O/iTf2qTPfkFta'*a#>i)s<C,mBXg[@C:0qO+1F
*2nPD\A;6CLPfLN&9J[\[@#I/V&&mL_ZB2Z3.qUbP$2)Q$].'=m;(/GES?\\9Dln3
P?J9l'L,Sb>:UU-KFoKjFi:,GQ+7V8^oY2l9U2`j%m8H-fnC;TWl7<hb/"9E*?U)g
8'_8^-DMqkaUKG&)\6FOgh".;_&JW`_VB"H1r2Wnq2h06&D-2T'ePp0*9dgi]G?-`
Y3g!179Lj\SR#($M]IXIdHRN<<f$ET?"qkAM.g22j]\VZ>rd*TN*@cC]*Y0oNr3*f
%)!56iYBrKYA7k.a`k_R8iiZD0TaE(UO:'hdYr.G8^R\N3I.f$8I3<*hXf[_"dKLd
bc"*R?Tmf1f\FH6DI78N?\3.P0Tod/&N76c?M[K*Fo(#2^_Z.DNcEuQ!6muA!3C&0
Mn4M-!q_P@c:bG,ZDa<TOZEo?U9^W8hTc)VEYue&l/3\b@4a_[jnXa&(#_=RgT'n7
EFRmL\qinIQgOKT:)Sm8)W-h[?J(D!e5G2D*f4bSM:IF%3HCFQc4.om>3XduReGL8
$TqkT=hZBmCF.sGY144USc]:+mHn>,j!F+9j#+EX)3CB`]Aj)1,%-I7;=rl)3>Bo0
@\GN`e1rC[o[0^?A+fD_EmK_D"lm_NS4T\i@Sr`2,E2<i@YhhXh@sLYJ'?(2?q&Pd
PmnZJ*Y#K?AFY1\jF_"b!Ta_R&?s7nY#<0tfig"-=O'MZ_rK`YKdcXrOp,CU5#e+K
?,H"VLe>.o'NZ';o"GTBNojg)+h/Rs\%ZsF%Rft*Y%S5bmFK[l(LVs1nHEL?1*9't
&K&Q#DG=Xl@qLOMbgFP$N_&>,O.;UR$I36B<c\fa9c<A7PO(/<l,I=p^<"-221Y%j
OdJT-H*k)__VScGM855BXM,r]$U*D`iZ/BLg-p/O=j(85<4>.)\.^.<i0a"$i[/@@
fai7d_VU?J`RYQsOe$I,M8:,\hNWokNu>c(_j6Xn<g_n_RS`W3$N?=TaW,"1T$XX7
`\bJ&lmE3Q4(=eA%s0=:I;8$S2eZF_O]I]736Gm_4jkldB,lsD^+1^OP`XiDBIKrr
7$8EON)Rg,d=^hE1_N@Kok3CF@Jq'7p9mfjIbKgf$tbsdR>5PR,jY>m7_WdPSW7FD
/4!mG]EK,XRe:<=Dc/0]$tdS:R^>ob\fRHg$;e0H4GO8MLkngM;"h@7k'-0`e[W&H
B#W_GK(j,F+Q.FLm9oGI0!a`Ednt"sLgH<_#.nZ2ITVl9N0t"o@'pH/km_+'[]#-&
VWVic[dI#N/7.V3Y3F29h56B1,%52eG3nX/'I4_E.&Q5cG4DL'WtAt21t##&[e4No
d;G>8n"T/d9C]&T(mot`:G2YR5c'b#&=DtWP1Jo%+P&%tCQ;fp'Rk0RMQd]&g5mBY
$Tg?%Zi]a@_s"!$ftRh0M7g%T#U9pNDup:sQO!rpU[S:p406*6_1IRM(m*Q:a<^BF
Tk9P/fEfpmnL;B&>htK\X)T`UZS).G56a6r%W>\sn1P,f7d0Bg.A8V@nY(1^h+!W8
@*Af5\Oai9jl;cJml:*X<p_j&Fjqml&PnBh9[ulJ]E;DU[hFai#q$&"ko`.YU,PqB
@Ynka,@R\'GdUA/nWgY_%"VPpVEa@G$X)I3<?CdbkB$p%iaqHtbBFWM)@kg.'t%>e
\G:t/9:)2\O&RhDNZZIt6BH7`+dBU/s&DGt<g5gG(q3V]+UoY)VrZLrO&nQ9l9j],
j)uQAA0@FD=IHqkX,)U[RdSPrIZ##frfdF:F4W(o%BG?cD)jS^BK`C4hQJI9MX!("
0D.0FW17SQNMM[HF=J:<p"^n>H$$urVn[In8<ibc7$^=>GO1E60Xnj4/WJ!HFZ#ZH
G,(2-(=)_5ERh.8<MBr16O]'177U$LqoX,9Oq^,kNoH[KqsGVJX_PaWmYWQ?=(87S
ZjN^;R8JS$kDFPI#3.(aE8O>#n;R.0ZX@c9&*2kiLR*)HVhhH<deQ=R_FltNfEbZQ
H5AWG>eJ6=WGoBW%%be;$nGMo*:,&4G_+EhhSf2=UYkc.5DTkFQ""NMC7?`;Ym0k3
Gm9T3"L:BHqlXoSa)I)[fmBaQH]IWWHEI)Na^'YkT`VHG$hosB5RWL;#Xq]F!MK&g
^O+O^(3pe.<>!c-5T;@A9G7P/6_""$>R>Vi51u)9QU"m;>1Gt7QH.S`T?N3is*^C5
N7P=_Sul_Ae%Xg2rTJqnGMmo,_`lb8r3tL08&g!LX*j*^r+2U"TAW]o19bKNIEE\<
8G?ap.XhI]I>2lX^[SLD#4Qiun5l`mDtJ6dc8MT6D,09n!C(u[I\4*j)?Rr5BYL]A
*/FU1CbcP@!CJSlbZm"BN<Xt8R)F"t)idC,=?IoG1*"4V6K,0*',ZBhL8,ob`]XtR
NQ/6U1mSn2)@`NPiLnt;.[\5R,6=n$Ai:VtkHLYIjDPQb`5YdP,\Ug=Jl>+U)Os!O
/f>'F;fR?/AiQa+L'*;9G]58TN@8o]Q*Q<_[SS:_Ru$&A(Ppec'M7EG.3,2nDo5aQ
_A>V5haQ/eSSJ?bVr'2[;2c-7EJW7bQJ8!KXuNuBX>W1;`+(%@>@uS=!8;9j(l`,%
Tn]j;:QX'q2Slg;S2hHi-bK@)2Eio9dA&g`cH\Wa]l119NE"b1P([bo"*(bQ=?"Is
]C=Ld%O:-,E24+!E<oPLa3BI8#WUIP3#V+\iPKbrNN^P!LG9+FEYo!4HjH5gkj#5h
]+-Y9S?8`A\ecb)C.S:MD*k*:.dSu/Ttb$96Bsqgi_nr-aT<$n_^_-k%_l]kWtgAN
:i@9sJ]lF],VZ$#n$nIt7#!-fns&"MEC-=c[SYD1#X^%e:C`-%\87!n#m+fRb$gBL
*(nTm\s1B(ElP1RiO$K[V^tN5]h"<UD(eKJP4#$eBGqaAYma=&/\Vfr1)`[njJEm/
$EXqr1Jc6(!('T[P9/)R]DG8+PRTO/.M5mBlI7Hj&J6J\,WZm^9s%<o`=ulgTM89g
2]!_pTP!^GLilo2;X1Ui2bI)M/JTMuBOab$26321,%qt>@%eaePa3Lne@$@?[`mD7
;fa^kS(+MJr/+A9]p]j7oDKBt"p)ju2:!t.51n2eRjd):E)_BGUOgDGH.geAYa6mH
Q-g+KPB0G4?Z4_YWo#b3FW70bop]kiaURO9,nWU1Y,mMd&0#(p?!3ChfK;9[]*Z%g
e4NOg/uq'RnnWG4.A\C.e*p;bKkBSg5@5d9N%5p^e9'69Tuj)0!2C'gkeDc]]INoc
WuO<g5^F3/Lhm*lMaft9Ia#4.97E[oWLF!Z?teN!'9hbj7]F#=4)3EcD,Go6?JjsA
15[XZrViP8;8!dP,%tg.+(DmG\HOBB4I[D]d:F1IXRi0LXs[92\NP&;/+nHeY_Q:&
BJQ+3^3+5k2bGG-Dd]Ig1DI<Fo*IoRO9SYp5+SOV>n>.^[k0O/+F\L9ESu5]][BMk
,s0GS3E4U-._>ktP#V#@!<f]o[:-j!YQ_*Hf))2*L=W@XD7=c]]ofu[D;b)gFbG(k
l"`e-C&o(/hZ6Ya1gb"IUp]dE=&-o3>ODMr0=<:.Rkh-oY0B<d[<em3dCiIk"e;+%
e8SKp8qWp9aJU5nm?MZ8?>KoS2`4i;$6j7o/Ue_Bk@T1qHo-Qf%ElUD.!?dP'Ou*r
'!h]6a<E@W.;Y6T_YA/h;*08YL"XM/[V#[NbN;-qV?rT$G]7$[>WWE)Tq\F"InABW
Cp5Xl7E1G>,K+21On#c>P60;@;d*sr$*OpB>#i\=4`"eW!uK&p@@bS.D27dc"!dIP
:pE]VCA'?s##?GjgeC3G[RHasUu;_uMbXa^USEZM%a3?r,,kc8P2j^4i_57^%m^E1
fbFf-qnQ9h6=2gqI$\G5,W(H;/Z(q\0[+f7P-30u8L^1ReCnu3Vq!#k[tQ.;I)Sfp
!>S8jT(=3Ae7oB*'pVpBR2LUAHLm5m(6um:AXg\=cKXjn6<]_J4R#ka0S)F.OXUW1
r'O9&K-nN[bTFF0RYn4N/1F&hNEJ8Fb9gsaVsK/(N/Ci:WEhdnYt9n"@@j@t)P>OY
MC,tT>dVS+Sk<c\Bk!\k0'X-BjL/19/1jXgU59LC]+!q4#a8*DJl9HG!+")=WNU^s
,RGbnl'%DWZc\u7"Ra9kjZ"Ti-7Vp1:;C$n",f"oQabH`.Ha<Q9<srEf2DlTg64Or
"eh\7=P6=gj#h5pl"j/haFWLt\Tr$`Vc".3(g<H$UQRL8T/d7,O2<PDPcX"%63c)(
BuO0iKjU,kHq+a!i'TpsCS.p/@r68XU<O\!Ohr8WNN*e07]@,+l0.+ub+H.c%.tk*
D"6pT8@b"n(u3e4O.AGMGU^M^R.@h)m;d/c-P4!tdN[s-Ffes\ar_>pbXa9H!\:*&
m]#r<6qFH)+E"S]_&M!MPERK-eE!(%@WR%C6VLcC\>n9Eh,:6Rc"-Stk"c&#_N&29
2Xa*I>2lk`ciZ\QV/Yq@"!1,(q%?\cN<rtbk<'rrn;*#:(*(MMBVVT$.X36YOr@Yg
%gBS&B8-jEb@qbr,3('h%%J&k,]b]WCaB`\iu./Zntn21CK@+0?AnB_/SY)gG3M`C
U>:m/HM!!DLGBN9+#$I08BC<XU;t,UYd4B?]"*oWjA[%f(l!+SQRTa_7p-f_*N1_P
'&[@g;dtj^9ZCW%JjpRbR2)9&JZ!uQ*#oi/Mf+S<OB0f69O(!s%BC\`+ucg>5H6:U
R;4^"K:9*Ua$Bf&>W:3<lQVruFgXDH3p=]uI;E@BM)!UU93RNI_)QRpW\<G6>7qXV
Z&oW\V0^dObQBqiD:Z-Wo5eN-KG$dt[>?u6ac2TSGF,Qh,h>H,"mhblGW.Z---QU:
U,JdVG'QC2,W?D)'&/fJqHZP0W=<f`jHgH3#WAl%JuifuDr*[Shr[jYS+V*32u/2!
S0EgYidd:57d`5$\GpK1BueKo[VK*4D_@%^?-"AS0cW%-Rj2j^;<K8MKJ]08lQ`Zo
q(=_?@U&H`.`/X7&gA]K'5WbD8.*4^i==mjCo6_hH6J=qgl&/%bNmbTs!cVk'tA6G
8'lEX*FShNSaK4:=1Q-]/`"L%*(6.FG*d$,]OZ`)Nr9@uY?`a%Go`!Aoe-,C)^52,
0L1ZJ=&UHf,fI=(S+=8<aO2Kn4&EA,?TZ&Hg#1imBfLAi\%Fg@qVeD"9_iT5-$>Hk
lS90Ylh!X*I2%BP*F!9WY!q2@NqH,$YMkedZ.mf0o]fD>f:p-sXc9C1oEC-7CL_YZ
$K4eH4\[\M]sk0Dr_E;SPNSIXJKYQ)><`it-[>ROInm!GrWdu''9ii+ep$j^YN/+:
#Q[`h.8@n/Dgq_\/A"PSs%D#*U(%#'89o.m;9!GQE"jn.$t=t=!A:7Gc"bO5/2#rg
Oc7L3-U]m<SHOmF8$Ga^kJ73$g+.l]k,W6'K-^YW9)_5e1F4"c&99?6Ft2kq#Ol7M
kcY0/@0KJ<AOe6W0SoudVQ9+^[u45n0"`bi>[D2o!q)p;U>H>Q57"@'-Z4OEVcaF>
KVQm4`@u78&;DfVfXEQ_nrQ+GKE2Bhp3>T1%a26(@Q=rd>n=(%%j]el&Gfs5dgu]"
WULfPl\u)o$=FGA?-aB#@T%?Q)ZGM5'&ut#d.B:D-P9gNNj'EfC`*q)9*(et'9M)&
JsL@#4VB>Y=g10VCcXkE(1(t3('DYm:h3eTeJ88(0[P^ni^F37V\.qk"H4?<;3XK\
QKi5Qg(@_A7[XK74Vl?FoC0>BV(T9P(/3*1l>TlFA&>tm]^p-7kOF#i0(g/ob,DOR
pkA#R/O^\tY6&]O8.f%oj(00G;[B?0N3N.$;(Vf:b+d9W-u]eB:JDMiB+!!=+lgHW
;"YFk#)UI"'1u+H:5o?DfPLk6rJ:s]ne/V>'NN#6&!-*$1+_"NP]peZ*ei+D10#9U
R3=6l-7F&$;0)b+!<J?o."j#N,4u,FA31@u-Eo9RWN.A.eFKna.8<)3E47/<efcO=
)pul,;RB-GFSl\a.jD,?14\Y/FY'=(^bDq-D]V53Y"Z-\#f;iZ!nK'E3stJGglgZ"
Y9b']P:^D"$KJl/1AiP?Uf['%0?4Y6,/W1l^>UKH(3+OI1:/PEJ3RK^%PhR!aB99t
lRIUt%YjL&-qGYg7hsDT-NYe@&S>+N(l"s_%4mn115I,.h%EKq-:/R)&N^X]AL3EN
5d<I$j1?[3A2oRB-;7,FYN[LqcI3Fnh*ntXmK4&1G8@"h;PIA1XLp-jP#08/)ps9b
.d\o$AMDC-3m6tH;4Ti/(*_3B)O'2=1;lK!d6!K/TC>Ap&]$W02)/"B4gKt_b"3=H
X=83j*UUI"_m!&0ROKhB61==g:aJ5&Y:!3I2W\[(&b:dBfNAJi-F+@QME%E=8r&S$
G`^`*YOa)-3?,0ip[aCsdJY;1q^#bc=jfpn&'!1V!(0P>":]BO:V6fEKJc@aqX&o,
+uCKBaS]n;84bY_DoUK&Sgb'2h9U\LFG.A(N$Tus84*t\NP\O`Db*:Eqi0&t6f.[a
_Y'/M3O.`%/aaoaKMfYtoF:[ll$iI]"sW\m3tQf*Z4Bc@1dD\`l/cH&<<ua21+SK^
:4snXc8A.WoHhcmjR5$&Jnn9O+@"BJbt`ZJ_JN"\T'q:e+I(G7D1:XmoHU`cD&$IA
liTqW'^i,_-oA`(Y*>C)hC*?R;5YF9U,5Q$j]J;M/<lBlDLCfYN\&\9m#JhPio8m6
=RC761#dsh`J[c+_M/+gkt^\ONs/S0qcf8op5W>G<Oi'o6LaZb1P3;<:E<Z#.dO8d
8#Gc.0<nR(2dVJUg^U\_p&+]f!q`i/@2,g$jNpQ-;-ZF4>`V-)"IEO3j%H`M=gc2G
c^6']'32HY,jb0XD66q"iiXrE1U^2pOC6ihaG#ok3OK^V!l&.LR:Hi5A]%)IX`[2N
&0f?+Ai>9H6mZHpNi9=<+XZOV<.+Yq@`t"-J)[%CoSe@!Q>Zu`"7JKC2%jcF/RrE&
A"qQ<c\s8bf5"k;h60(!L)"Q7gL@P:giT,pj*>-F:mu"cEaloGjO#p;lq<24oETYN
6C_T;2CPD)Di?rimK@.2"=&n!:ua'F<a+\3X&1&f+t]\_@Y\I&3;F&4?PaYN:?tS_
+*>SMnA=j#igh_teJ^AQ.e<f3K`,jV)c)LDAOAV#XB+IYMd4k`Dj>jPp>ScklWD`:
oI>>m[B4:dO^4jd\CT72(P=Gcas7-THO\5FJkp9,)I!A,D.;=.:=LK><%RC,<$]]3
f%);7o^,YpH%N\WDS&hj,_O%[>rQa[cFiSRq-5==Z-Ic?1nKH+*qF(IJHH-L:)pq`
r]HAmi'f;N8srJL).0,O,Bc"bfG\[hBMB3dKGYS9_]rZi4<^([dK@[0@rl;OG"e0^
.n<r_E$]db.:n:rI7P]0mrZ[iZYa5_D&5]uA_1_92gLC8@H\Vf2p*H!J0>c%I<WI^
<hPQ8'^NZ`8d%!a[#-m=!Dm50.dkYGf'A6k9Tlom8-Z&Q/[@Fhdoj3%1,jA<YEXJQ
\uasu>Z))6\B',#SQnpjO5f.ACDC)KGBI$/.$Po0=$&u5a=2,WWRaEAfXibHqdb9t
<d;__\G9]5iJXFf4Te(t=5T4YL0YP4M3u:91NG3<'9KZTWT-B5=^6f-#U:P<)d+ji
"A;>h'9`M-Q!tFTB^:SOATF2^`"obCK#C33V0?&eAOFS'6BEl=W$-@S.r$G-3638f
QmP->I2KOHC8m_K4(%+VR(9Y-(qNk[-mhR<Rnd%UUUQ`QO>-qLo;(C;ai_i\],;J2
GXp+2AM]Hd>$dVk.0?KARC?_WO=Sjb9=@2,U1>h7e">]74-kmZH2a781bU'IU#nk@
6O#mR5tci!Dcm"uJl@qDi\HElU_mo)6T_$&1m;*P1jVB\Uj&R/"uUYFjPk<WU>e'g
;51Vb2?HC@l!KE[O_/nh,WFhFo*(cG?(P0N3]\<I)4-BJT:[R4oU*!Im7X)BS2g;Q
Oa<*J3A`h8gRb.qMX*+tW=IN\Vi/+QN##3G=lG=j]W%:HEH]?q\[8^<Rr(271PX(i
fOp[UpLA<oSO+)tfUHe`/!0O.nTa5Y`6E5a?t7kD-Fd2uH+kmk1LkP2Roqr<cZ>Ej
8FREQ[CK9"_Sh5?8!XXsFLaLi2c):kgQseZFkO,a%_6aM_j4fSBC9hjfbeSoI<W:?
GgJ$>U6h6M!LhW"WE*#gQfdQmoMJW'H5Pn2NdO]LB!g1$/_`E@=leNX]ru[plaOp2
_V(Q.d"XR[@%%1HAa,Di$[W]STB%(u=7`-N&UP,;WDu$SmLatQ+/>24\2m9[fG>'e
5Z@>B2S'MORTG*NkG@Q2gLBgk\ndX.8guk@r6Al,GqZ)gF`06:U#L-@05??6'$dVg
D>We%(iDCGT:gA@LRK<c>='faKqc/nYum"-EiX#&s.[*Sgc24F_fI:grJC<j-Bq)9
qX#QD'I#uCP>GG:9OK3c#L$^d7\\[j`C_?pei5%T]qdM84QJ_3c%`bLc:uAr(N_;-
f2HT/C_R'"-0]9&Hd9,t6CcXID:EA(.F@'$.8YH<[*o6^Ehn:WcDTb']ei#l\npL8
e*i_]h!.P/Wra;!Kaqj6&W$X=271&%D:`dXA<M0(CXqF6#Q6J;>u0#=,V-"`W1A$[
n]07W6otLue"p^1,HaB33\]A^3"N@D,A#?m2&*_J,nO(763S>7kG[3_2rcZJ4VoU#
[F@>FJoXlHLGRVRrc-cN,mL?oU<aG`#E)/18UT;FK?;ln-t&$gbiRXs4n`c!Fb)L?
hbGS:Sbt]EjFWH)'hD;Q;d\LfL0D:g7r_D\m8)\:O1?9dg9(:,:FR0P1nU;^UQ4Bf
llFWqTaRG`QgTHZ7)RJ,GLW3OA5PeGRA&eq;qdK]k2'\4/e]NZ<O_$,c#CG]V_Z9)
`R+p1l/]q2]c8n7r?ZFac92cdIR;k>\fuF%i.YD_ZU*kFVO.9Lir5@n%i=:Wn'Sl,
D*HrN^;\?g9ST=AmgJUGKRSU2dWiZVhqePipoq*$q%P"qAQ%SRaW=)eH`&81\_n//
D-q$,5X0o^NB,[qV>)m:\rFu/o'87+58A$=.]L:;ncEh$Ggg>81%`'FrVmgj)/uU*
=TDsQ`!j][(M!/d_p"so2&XUh,!,_Z==e`0WP\-!1k%g0i9cQA`1K4_q[1r^-G"fI
g((J69<p!d)XC!rQ9PZ.:L&_X&Fo.P;9INWV9&S/oNnFU\W<?c8p47^>3'H=R*G]a
5[Y]:;/j<c2]@J]J>&@_Cb?S7#(qI,dKp!q`ShB,@(9f*)iUM2;2EG/)25stK/%nr
6NS*a+nB=!eibRA9892RbfUh^L^g2Tl$UJa-Pm63EV]sZA2Akc@q1(Gej26g$jMq'
KJ[X.):`2k!P$.W)MX8gFpJYpA3#rT#4OU*Q7+R+%S%->KN][E]>nA^\TlbF+hJ4;
1V;;\@9CDTY9Ri4C?&#.NA9I=p+%R%**;[jCq[SF?`)l'URHXtEsKHJ7Q;D:g6n#"
>GbI?FSd+7d:P%Od>f"@A/a-0H`Ik_r<0Cn@Fj:C^h7j.N&Fq0(=MHsa:,I>%]66n
e[4llG2\c$]JcSM.+akoP[18icNV4&s%fXPj0OV!No@^/TPi[=_/aGe5HjtRn-4kn
]_ahtC0m]"O)pnpTPS-_o/LG6TRele"6^]1n2_>90ad71*$PeB7*$h&l`.EYacZcG
LG*`4]I]2fNe4mDY[H0H+gc?pVf!uJ&>N+N7a*O%P*mRc:;e?g2pqtLl8i^bAf.FD
m(V43/Kf]]+\[K<-A3"anu#)n1_Ph%")Qth3f'<kS>@tLP.XSh'C=8g:X"!n:8hX$
18/e6O"j5u6T!dtTu(LdZg;]q&YlFu&0/:qU)K<6&dg7Rca>HGJj0VWR*@$Or)/Na
E_TZ05gTQjou3m#)TFTFg(r>m;QMM\UWc/ghan)g$QdqKF?oaXJXZI=Vc:k/K37iB
L)O-nj@aHm1cs/M>UmYLoWq,sAqDj8'&-(/_1L&(1\=pAK#nCX7k2qE)f!2F</Wt,
Z"fgRbu_!K2,@(%J7R!+Zh'4pZ`@s?4''S*]h"osL+8uVe#FKkZ!j+T8Dm6pa]5+Z
ZLAdj#dhQ7k,`Em]A=FZNZ91f`*\X=MEVIP>P?M3L.@QA)2r:Y(4C2JqElO&5m\eG
TY8o=2V?`&1\/fA&`/,HeL3&IUPCE`AYIHh75E3<Ch&m=Xk2'695#`f=#cuKdamI7
-kf%8jmGhET5R77X16JY7jF_fF@>ka,b.6mMK<4Dog&-@MGjW%;eJE.:$>JG]8!K*
66%5$ZGeqKZ+",TWt7q>dL'A[=>^3^PS;cH"1UV]oj)#u,24`BB5FFc^RTlO*KiCc
@t"Dc&9qW:'-3fR:R="8*9-D6/09udS^0MoH+5U(0=fU1rG5!sW%+S2p_;cRMoi4=
/$4&L]Ec[Gha@HVi6hY#ZI!2*q$g)5:'*]o1BJ5+$?`RLRR(U0f:Vs:IUu[]Q<6!8
+B\b4"N60I@i.i^)sW*P<L/lJ%fP>GnUG+R)j1IRJkD70L'Q!D^mCKViY#`H0btWk
PS4"*C)i&F.MTXQdT=L@;aSDD)8@BF6]a%'MX^$67KS0feO2\]N*7h_kVE^C8Nf\n
]qRkR[!N@cE/="$3N47F$f_h8HE[C?6"P_9N1=I9,e974,M+(_r&l;njN^<;<t-A\
;bW;VUdu2Z+QQdJJRrf*`(.2O+dtkend6>QM+JC-@GQNhTV+k9C0J])#Eo`d1_jKP
a^PWFM3>GS7i7@;9=\_-P(]h_a`(?"iWG7GWaA=hVI<j/2(%igB;G?Loo-JcOAgTp
Q?elWQ5mu,cn4FlU+#n9CsdS[AJWNmYX?a:UFqC^cQh-@c,rR"HnB$&LEO_@K+_sf
0Qai>W#Q4B8L#p^[XU`?9))"PDP7aoL/-/35*:1Z,'3sAR>Lj(Q_WLgLTD%ag(u;3
+uZ/OeT<rWoKccAnKX:THpbJcQ^umZVXMBpe$jSBB4TRM`&^E#`17Gg$$HNT<8/+D
7mfimiDbRDWLoBY7%aE_7J1t`("gW%ST0I!M23.[nk2i\Gtr8M]!t_LZ!,j!#:[X2
I+;D?>h@(_YG>@;;tjE5L`6;<L;_.OW1L36E@W5)<S>rYIk5D5cEa9'TbZ:XA>,!R
3i9mlOIJ1=!Ki=)Vd]=MX$pS@-(_K`:=Q"bB)#Z^YI5r&e_@-1?6J4m>c\FcQEiSW
D1])I2]1F5nfgP?]q%Q._U,$(-Z>&Koh)*El.\;#C>HS:Z_c<URji\pOkKoFG$Lo`
l^!Z-K>^Ga[;=VK'"j+t,q5`kYnNVIIZ6?^0$*FS>(pU(d(SlmQ"&u.11>^k@?SJ$
'UE.D%&U6pEIl&\$m4O?HHV77ZFEZa?%X'ZY[p\Jm`s5;9F=r4?0&_dq/>3`Me\f*
s0=5Bc=7(9Ja\F*.[ZHO@a#F0Q=]\b\5OZJ2UdHNe]VtZ,bS^"6DGaU9Kp!K.V0"`
!&@!d<7gR]?u0J:Z.:hK$0N46dKbcu6?#)#<:DheRe2[6nBRrnS)JCNqOLY_+o%;3
ZZLPG/k*9!X9=ICQsc7;B`gEXQJrb`QtA1C.nJ;W&XLZBUR?92G%RPe?VM$o;L.T1
jQVE`1jPb^?#S'M+$>\0pO4omng?D`<gos5QdSVMAZ+#sm!Kl_,2&918)Ha('+2mC
X/+GG%H7seX_ogZVUrFdM&+hVR2kndJ]K+?At&Z#[C513qk3kVmFShl<ia1DqYk>`
h6sIm/iVF0C_K54W=Fq&fnf64DmVKbG$tR-(iOW!SX<0XRHrO17q2!?K<$L,JCjTl
oVYY3Zq4#A^b-p'&H(lbo1n)M`5'GCSLgkap>gIqM:$;(gUd3`Z.%JmST==_Mg/"k
jX?IH>.t<ae^$bC]3R"OXKq39B*ogtJ[Fq,-,_jIO#*/Z\SCa[B@M[jgjFpE+1s+5
q.hiCrH1SMI]Dd]^0fqa3/;VX1*#Z3]]HZ5s%@cogcCQ+2I'0oD1"<IY4j'lARrE\
/X)g9oFrJhYI.M?*@Ep?5NH-J<-D#Lk=Rnsm"b%l(D@'D3QC@<rXYLR]Ju:f?[h3%
@sE=TM=#OX;r7Mc_VL67^V!66l('*+q$mSs2SYj>h.Ll(>QLA_??VuG?WQIY!d.C4
;Yo.8L1>fUF@^gu0cc<.SP9sf#^>%j-*p0lU`mSH\Pab%Jai[\A#J`RlJ<T^;N^"%
59mNh6XRG,\!J'&^`ico0VL\Jknp`.QQ&XMEE=0e2[i$nMos&@\Ak/HL;8>7^lmBS
nB7jFfKd6T^s^cL,3Z-p(VpEE/c(=!>SF3K]J/p&(X*Z24:&c\ef]&Q(pk5J<$-sC
[(uL2O/U^=Z@*)LN'P!B_HPWMiS(OF(R=#T%g'eR`!aF%*&-=.(u,Zh_XKnI'1*BA
_8.g_6<HQB",oSTR'Y2"`!aA;<!mAs#bt7kZHXBtdBC'WSg_5lN!kGTO2M$YME'lR
oKO:HJZrQi]IY=l)Nld^XI)Bl6A]Ta@3i3R)N)&&1?;3<>RVX'Otu)k['U5SnBaRS
'?$+g1H\+/PS?EpqEtos7$Jb"d'&A?>d#+t_%Ql<;4U!nDBGBM(2OcnE4NqQ_F7<g
Y"V\&4Almi#=b4Z(pXJcYar_>B>pQX_@nOiN,V/]'!Noi`\\N$jBP(u:Vf\57r%Z`
l.h*cqE+3'6`Q`HK1VQ$gHg3727#Q7*.O+!V)4S*Z(+#d*,_KI[mnReS^S4033ksr
fp<Qm[6Ue6;RaLV@Q[>6^_8E,)$;Iq;54dQQHLH]j9NV:PdVitLq;\;d[nP'Ah2YW
MO?Q7ORP:f'>B-j[_[m5lotm\9fFLN^5S\B]U-(s"HLE#*LhGe'KjNkS>rYs8VrQr
lYO)<XX=68NRF6'\`0B;-j\n=V:_Q#6q.PHVTVnJ`[msCUeo62JsRHtatpXNKR_,I
UQR%qb.OC-W0fj"(HeL_3>d>g[)9]g'fg5f0=Z[f6kd`X;i#h,UV+a6PC(NtKcZE-
`pCbWFBC[EQT7COb[aMlRqp4kMb!]E%NCO(!QDlpfnfRT\u`V7UsKKb]1\%*_F-`s
Mglb9:.%.<LlA*eMdqtS`lZ`lT$`,7I&oM99M&ckbKu$$6@23O"&+'-8gMS=\J:0I
J'MTJ]*hV5J<!>4lNeXh9siA4&<t16e]j?E$C'mE7+MWgh&D#:9tLQk7((<^:Q73Y
:,?e5UnH(3A&,[dMIS/mLnRXM'<?CURe6V%;cUq!lbBBZ:b<0L$%#F(QHkrO8Nd^4
aKdN0%jh_N:TSiY7!cWVnBcP(8)4KPGhO#LF[uhu5>r99X?!KEod@,#6npG]ZXXbM
c,c.mXjjl*j)[f",E,$N%.k94&L0^iOZr.Rd2\BF'TSi/)6!V$*suIHlo>n#p^(&R
[6"O%qgAcM4LSG\Lk0r12)mUJcBsS*#un4K]%O.RpCTsb#tn@&h(I2C,.FsHZ6_c,
i0XtU3Rc@U*T4TJM\26Q4ptL90551NqarWV3?X/GeC*M1R7@T98fX#IX*CEf\:ks`
j\6-'\8>En,M=`EQ;rW?<#mt*:n^nn>,sXCXR-EN'g>R.BT$Rr<M_cUNG$dM:lK)/
87L8pOtjSkR9%9aYG-k'WR4Xijcl<U&#b2Bbu`E#qO'K1$p*E;kqSmN>1E^*`T[7o
21*k()RG7?<HWRD"76H:pfD6?<-c++F`WgQ@?sW?doC6eGi?pW1fjj;ZOi!DPr.(:
--8uKU>8mQQ&gddDUX#]0;Xk!4c@&$KsM4k#\.8!<L5b@M%A"X=N)Sp^lO]`PZRM$
1*ffO*KNo,nCd*g$!!4u@)aH:kupuh%h-rDgV?qUd'"/N]=@@aGd\$2XNlZ(&A:#o
.2S!(nZLibe_@:8Zh6j`6o2(_;MqAA]nR2aKg1-^N^BPQD'fOI9NA'i%g6dbi6g/4
n$'L6La>Gm=`N1bSD7UMdWMTmSIjNbUtO9R>]jZ0V7BfQc.h?s>GYiBQ+:,l]cJa"
/?QQhrBUuh6;h4"h%eM2HRmlE.G\jHau`cC[6@_=d9M[SgjmHR'X0(8cRq2We7#+$
^tfPURpK(,$8(;[k_\/Jf8BOh`jhBkC"V:+4'nSI<-Y5h2=01JmLIM+P]cJWjmf;Z
o%pM=.a9eV3L5Tj@RfJA#i`8uSbq!'q@jd2d3<k8$%*@r3=8EiMZ*\7j)9gt9<?Vp
1s"92E2c4!fN*Q9i0^Z4F?VtdmBp@Ogh>?09/g1-\m0'`]'AIoOX]%!#Wh?^$1q/X
JsKhl>q$*>R;%DCSfKWFc]!F`R2Ht&]r']6e!EFGP_1nq_/,)p-F8W^ScRdk+lagk
o%:QAM\(sqYkjFO-^,27$CHJ*j#u&#V@+$fMGU;`kq=C1KaE'^OiB8e1t<Z3n#.E"
'HSd)@Xf.aP)_Q^OL:*Yl"ads=#E.=j+++g4!M;KA06>aOqA>fBWMaL8;LSDY1SID
%S2L$/de8oT,<c&l`>X;WYUPaAJj^n`\FW@OirkYjH`i/dF`!6]4>54_U/<*2E.ih
-Y5+d='<`splC@^W\Q`-AK5QQ5%EU??5"&"2*PW.2*HgFiP9.MAN<q*L22tbL??k6
Pbr>^*`hA/L#[H/P8Ks(!OH>!B]_-3A?KK>DIugb"C]#X%f'_:Wej<4l\d""N5DTd
.-%&)I#b"<kT$H2ei0ofKUm0jO+r0=-;tq);3X7p$dO1=8USaJ2o+KQb/'U.cA]dT
W^%0rBPr@aX8AHjEG0<W.]kQ8:6K=GMSmNfkB<-Rjl+i%Q"\O$C$'nV*fsn.qW],;
Bss59I[$;'iTUeb$q#ZF$*oF0TW5$CNB-bKSIFbCX;ul6MG@C"/lQN[[TZG/$Pop=
/VT!]Wp:ub*\r<3fX'mEZKkpkCO.pTLofp6[qhr*ler98_)gGm0otgt2p(@N:;DlN
T'O\,le]ZOQE?8e9]e$t@dA[4&><lobcq>Olt3FNTUJ5b1_ZjXCr=aeNlC@j/W]P'
9Ycj-euQ&p]WZr<$bj4`o"e)@c>'enmBI;iVVQ'%b.UQeA\M[91"rXJQYPC=A=1IE
)BnL>ki3`KNl!,\,_tXpk1^A%,0$YN>\Y;Id$!&uin3u5QB,k?RUlE^]MRZ..&e5q
5Rt%A$7S#o(4gC+XD_g;_!^>@Ye4nD,F,G5hAq%P8eqraSW5m<Po1:"WiTojT3ZMW
n7#snf*F8h/oT0APNNFFDY].VEc,A5E627F3Ce&Q0jmbZ$RY<SYhe]:MB*K'M2)_4
(DcK3qXLmV'ScMRQQR/a&T4+?O9X2m#3Hs[,jh!G(`spa="#+E(@Ni4O+tO@7e2D2
=`Dogju3[rmjdeh'F<XUnkd5a^G0_'a>TXbF*?jXn`k+<2"R;-m`-5/e%I6YZA^.l
P"@R\hWT$8Fd9J9SAt*eOH_+g&.Z/h#ha40RI6-7&7aDbK%M]In1juC,ap&]Z6GI>
VI25AQ`*Qj!f.!c#Q~>
endstream
endobj
17 0 obj
26815
endobj
15 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F2 7 0 R
>>
/ProcSet 2 0 R
>>
/Contents 16 0 R
>>
endobj
20 0 obj
<<
/Length 21 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1e5BR%&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
@&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
/<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DgNJ$%b^:,`71ES0N[gYYlEp
M?oS!Ln^D%XX&`[7ZR_OPE<Sj^ediQNPPV30t0N3a=rUk*"k>m,G<Bp9@-4]0b.]<
fK-dJLr)7`,A?@#KE@@Q1l]C7C-8H>\3MZ<i[BQk#(kc2(Hdf[N=dE!dL@J(_5eOn
U[EAs2nuL7MaL%b9T[bY92q@Q,"c6`(l#jlOZ1Ga!6"+4//+g7NIfGA+fUJuE2eNl
m:mT;$D:iF"r5s3WX](aG<"2gJ88EB91VkrWI_iqM5mueLI3Xk3h.!0:1D6jK`\pq
,,FkX@)+G=;@QEU(-#r8"Ts;?2@a4IBK-I]S@]!A,D=@r?0Z*A>M44cl$EO8E69u^
E-2Gf.nXP%)mpB5P*j_*N*g;K<?P*bb&)SB<t(@JAQiJ-]pXFZJO5o8jbRL-,?@-B
P?_0lNL+^dfo.C=M%u,KAE@f:946`p`QFEr6'C"?#/R\jFh.5]060VX3,`onlahXk
?5PQcHf$d;*"ZK".bgHFQ_)6NiHT%ZLVrWlQAm>pCUb=:!G^C,V=aAN.L?/)UaCmA
AS*1n,*7C"MOZA`.E8)%KhKg9pfs9J8cYS8nM-]Bg56R5Os:8W(kWj8Ycs9<M:TDG
F)S"D"-!Jn3+*ZZ_P2H+atfKf/'B^'\hmZ$2YeT)=IjuM+j$`"jXmPVAGE&]?[hD=
ii'47Kq]-MOpX@nC`!@?jkm,7]=8R&7,GR*83)N^Y18)/aBdWr^%bi&ck?^[iJ@LQ
5i*BB"9AuUe1d@'kc7I`fF9!kgnurO#S-].J:N/+#4Unr!<R@o+dM-$[5@JK"4&.K
JE-fqdR0Y+%!r-M-U#7U'OYG]<M;r=L1C-!?7LX4V]`bW,M_ZW@tI:g+Y3gd<ZAq\
l?OjjVEY>eH&@ei/ZS@Z5D"Fc_P@2A&N2"k\1jpjfth3p>VZ?^MObEd@=np"&-J#+
%T)HmKuHk,X7hA!T0f5c/_MA5dO#G3:bs:cFRqN>:_^df9mfXe(74(<ZGM6q=jAiH
K[RBhMI8@J+NY[X2dd40UTY!G$6cZ@gf4rR:/HX$on/Po&44=A+f[P;"]1_K*L#lP
VPT2*1X-P`698$+_"8EE'Xo%?2d14[quVD)&JQcsH6l!t(XjoCLl>XD!R*T["oPDg
Z=XStKJUJ7,Z7700F!84>:Xl)Et!+F7nk6EX)]+Oi^$FO.tBZ/=dW=REmlbYJb-$`
BL@iD:'tD=4p:N^2Gl#,RtN8G5)$M)M?Ft1Mo_ZK1_(LXTIi5Ka>&HL\q5R5Ee;-;
V?8Mi$mi,W>4`ee(BPL]aE7r^'L:4R&D@u"_<?UfGe[,(,cKl>3EF<`:<XHYVO![A
@kCRs`+=Pt,,0sb%<X$$230(r>o>7"EEe&^qQMFheMn6X9?j3c4Na*AUX_\ePR=5%
eoK,K.oC:3P*Dq<F]Nq;\Aobma9hra;gltdXe'\n38tZtHKD,aPo1LM.Fi.#Z.-tD
[2_jeV%K5+cnj187S2gsC/N?f)FHSeE+`Vd5G>IMdidmK@3b-=m4a9[3>#cfNF71Y
nqWad]F#6N2(%HjWWKJ@dMo,S\7B<u/./jt_W>+09kLZ\^eh-I]WGZZE/@C?O_@KI
4JA(&[t4Tp?g)mfW7<*'d@%FBW9*ch(>(S#eE3<"Pt)9<!2J;]%<'>"ah)CI@GH4S
E_\EsBpULn>i]3#-b[u1!3S^lUlT^cL#6,OL%F.Yc$=-=kW%1m)_mgDNFkT$^,;oO
P@A/iQK:M+bLeRRj@i9e"gTIRJf0dV@!2XGd4!,\0qb2f*5`b+%TBa3>'<jaPbd_-
;V>_S41+mf.El'u?OSBAQ<J0CA1.H"BVX+.bU"Ka`-Kd[QKD2<eZ$bJlRmUZobci<
i=<m"%d2sVqQAqgFNiB2o+mc)\2/"@X?bAse]d0`S+F6o@%\7?qJ1s^\2'I."[k2e
r(X%M[9Vn*-=$?i,_CE.6V'b%Tij.3,hn?Cc:+G*b&"W2U,k;Nai't`\r0[X.$rBb
1KG=_C.K!S1:f1f1cn,m,H4S227SJSg>nU<:b<)9)N>fT9j<pQ'\qmH2Sd`l]s><:
Gd)/NVZ>6Pc2$?k-NaL+//B1^4<b3P>m,lndN"K(ftFoT7fiun'I1`BC.,lFX71..
$,!q$5qEhT-Bk__Sa=eZE1d@gT>jmh3S=hP5=nag5Cl<MjN)_O&5pq[bAHo-"q\T7
ao#>$acgIF*"WsKKF3ZN63IIChAJI9ArIO*cc,P=)*XV@$u(dfA2UJn.e$h;cXc9G
FO,(.UI*1UbhTn$X:q2e&nkoo/R<k8p*5UH]>mu/*W5!k`GaLX#?!PFX2+FXOlG5i
L?lcr`:jb=?@'X]mf_gtG.sC%3sfotk"*;[^GbuH[ut5bK>i,n9AgZ58Rja3_Xu_7
hgH*!lNH+Nop;d>^$i&nhWq44O&,65\&S)ihp@c%?#6<,KD>j6L%p^Ko=ZHUfm^uk
GTXEOrb&A12qdft51ISEO2:`Y&*Mhb+7];*mdpI^^N;fmD08X8rm7pPpQ(!r_J8CM
=RZgIlU*"jBX7OGh"e+M3KJKpYQXC0E<5P)qTp'=i+W-E#6HS6"&KR"E#/@HYl>5/
rNJK]E'jMa`rkf<q%-[0:Fbh[9IB5(rZih"E+&P27g*NsrXSH$OAP3D!W~>
endstream
endobj
21 0 obj
3095
endobj
18 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
/F5 9 0 R
/F7 19 0 R
>>
/ProcSet 2 0 R
>>
/Contents 20 0 R
>>
endobj
23 0 obj
<<
/Length 24 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1fMZ!)&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
@&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
/<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DQW3#\$&N.0q+7W$7*c8>[jC
+rI3J6jY><O/#6">)>6J$_8)kdK8A!/cj%((C)+n5ab5QN3)hDiZO(#1f5r9VlfO%
OI4#0!.(M&6,M%a#.%]T]nI)4AfHF)fKgjb$IkZPXq9*[))%\ZZRrS:S:9IK;[OS0
d(s[7LF,Z8<A%!EPh[12!JKO$6F4&h4UR;Cr=[9;3,TR26(H1e[;gH.2N1Q<:ko6'
Ju4`0ZUJ@tWO&%j'Mt&OK!e!S<<aAgM]A#s$\=CV:Jlrm9k;e2RLNncF3r/Z<==FU
Qj5IE,:uq>5grq##]O>(/MTrF9>4h&f3kH_TOTte+[FU(%o^iO@o);G`.WilD-qtD
&U9^e1gpQ`bHKAP/Mu>6qA9nN@?le7=V<$FL'Fh=SEGe#"g&rE-n>;l9%Mah4V"6+
fJ:2B!8]b%6]g^mNc7XmloRu#Cbgs#G#T\S=V@2>;KB!FW3ER+SgS/r`g:K%;DV6`
a_Cl&V?\9#D*!V#@-a<c!t$Xl%M"<Qi4LYudL\AOh?e/\6%rHH0DJMV'MI)39W&+P
Pl_o);-eZ6KEC3c,YRh?2A?=>d\nN$JOj,io#q)1*ck<K&eaG-kS5>9GC'E:VE4kI
TLsPXbrY<6Jkd.4;Q<J29/1Vs0@?#,E@jkr1>TuL(sbQE+a!DI2i?)6q%)Dk8o!G@
rWX%p$2fnC(60C'%7eT>Qu?46hHJIlhXbR@jl9=uXiQ2,"Z9'8:oMGHSEm.Ak_5<7
TN^>@WcKag,q9n?*8!PB;[Xa*+U%K[$W*7?25$`aR<:KJ_?`jdLu>-4A]gPF(f(IS
&1"$l<9O@WF%sVM-A7JNdZt5<F?r_SK`G"rPB(o'$5"b>J=7$9`']8.\I+$eSI8IP
/QIn"&3C!Fm#cNk%\^Zt)]#fg;A.W>Ue&YILN'"0b#'="pk60-dc"L^[o*?#Z@W,j
\I"aX%WQA=LQFbAK6V2BJV5h6<.I6)JPh=/!:#<#g_neVCg'KFq1@e*;uqWuP/T1M
(?FsY,e82Lb8IK!Q[nthQmb6de[23k\.'SM-mD7$(<M7iPi\^3FAL=gasV/nJS?eB
LiA,?R8-8tH;0A.n:a-[lp=cGML=^ILo!E@<*%4g21`7mL3(._=ql>nOnq=6.1%/m
"!M6V8@4steBF&"/Sf;?QNL9_ajGLBBlg54)/s2@eTC9a'?W!d``fDjYqM^W&@Bco
ks'`pn!Oj/H*)e\6DoB"Q[m/2'dBULb1%7g+OhB)=_BJ?GY)-Ml5^`*m"EPUDg7$T
j$u,39B3pNO)]2[JcNe26]i/o_9f%s:iHgD5]/gfYW&4E4qX^Pb&Oc!L!W2Gb19.N
,*Y\*"#?6a'>(!)Q%=C=d"<$J#WR*,N`/D\I5:%tCJ)CnJ$+ud;'UtcVU<u+&@l3/
laq@Y@GLl*VLTZ2Pi"TDp'juo5uT7SWaldkFu!'e5cV+UT[WOiOK%a%V9A1`M\=Bh
JuBVk9p04SdTWXXf'FndAdEqtT*C&*(esi*BEs2FS2q$@,qNVm#r7dE!'rDNA=4WW
Ua3JnhAkE1H"&+(3_aZ@%&VE:>sYt[#?$R$f)*NeJXN0qH-7>k/PiB)<iT;[.`eX?
StJZ8LK0g)Sa*?GA[f[^*:V]<N\hS0Z=^O9X+gs1<H,It[($3'Ea+fMK+(&Aqoq1q
5d57!]/OWqP^Fg+l1I<?<T:(0$Ro'A]b@&_lHWD@(O[Z*&&.DN'j7!1Hn=[`7H)+i
W6>B<E$WG^fDl(ERu^g*!g@QgU`kEH/TiMRP>HI6TGsQX)bo";3_1Uhc?(3+;Q=Y6
euG[$1lu%Kegn6(fSX$n1<1eZ]ot5M&&F%O+t5Wd#ko'd>]_EI:N9<=+knBh=R(Rp
9HA-3]^(=1>>m@hIulU_"O60O-R\^h?uE"i-pe`!&=bO^/3`;XFf(E=G).gi;<L.k
T`8*dlEZ?op!=U(:`2eU1!6SSik&3&b67f+LG\1o]BbJ5DDYMkg+_lOjbf],5f`1a
[:Cg!Jke3n_3lSagp[J$oI\VJKYm(8nCe^H^hF7Oe2FY6]n^S:5n(.12AbKOjFX.k
"9>M73QF8G+-BNEO$1qo&50*j:$fh\0,>OTF$eHLa1llEr8t\`RVOh0L,f?NkF<$t
n5as#C.es^Hm3>b#,Q_d)j90VdMqq/hBL2'h1cKr)!=@7]m-;/m*1*2-sE]S\ApL8
rKSjFPp/P&U=?tAR`fcWJBnt>"6<1aOq'rSg\ZaSZ-jMj3Il5.)0S?;<du@Zr;Qtd
-*38O+:J`Z\9,^]KJG+&UpEQ+`4Z,-B(IX[8ngn)["6cL66M#e/LWXWK5A$A4B0b6
&_'Pd;H$-I[$>56aWSVllGqo\dsG]pZ`TC0[SRJ/BbEa7l:+aJqPLq49Nco%Ia>+;
4V6!LA%_Pjh]1ISo7XZ@h@QQ\57Xa&[OUg8(WUCK6#rWDXR`AMbNaR70_Zrdp):X/
ThsA)aO45BZn*a(N\&A%<=uS.X4Km[#eo#\gsc0;n.l+i8TlBor:marI^:X3.6.*9
U/E3cnL552TV`&c#*u1@Dr=HrCC6tQqW;283sOsZ_CVr[+<dTX>O=EGU*KsF9Eo;S
cpn:GDH'ofS4_.!ji?<VBk2/.?n-m2oa-.KJ8SZ\3b41KlHbnTU'*K8+C-60Vgup;
8'&7p/?_AYn*jF\9bdipVI*/1F=U,UM^DRTJkJOp#EBZ$DB-X<":$6Ok=fF>0(cJH
cIq<Ng+J1qc8OC4Wqa`8=l@0UY-')q*)>q/22ceHM!@b%VHk=a[_U[fJCloUapnet
!q%?3/pRmWDW5WR`D)=$nL4F<h$adDTMXFZ,Eska](lguq+UQ`0-7k0T^m#s_Tspd
!nq&oU0b#eEp76t76oEWDW*0\IBV5R/U%6;jO`j>fL)%Fkq`q@_\5^YpT>SO^kC`A
#7#&R`B]1mjJ"+j+t]f=,%lT*C21m'!on.?E,-R)ML5ge(cs/Nk3d7llqX+T9Y4&_
3=_AmDOf>g&u;[j]0`$Nk?S,HN2bs.l4=6dC=He5Sjobq[d.s"JrDW=I.(j$Xc%kO
:%7%7pts+U8^?h$WUPd:/3.7L-brQ_0bUq1jN@PY2_,:b`ooN]0T2Z_8-qnH"h,c"
P\:'>"f$SOWt5]tghu'3"%=($,UP)S%fN7!=HDbA.5N#SJKCfiD"7!F;'mM[r(/@S
'(F,Zao;$r^nD)&c/_ifJ7P;6L>"A*BuJ"@AFCFt'`V&Zkc\*1_OaJRPnt`KGEVU7
^eitRJ9_e%/lJ!N17AD:"EuAT+f(uZL*VOCk[DkD0Sb37,;-cnV&';j(?L3F&&0^"
8Fr#4f.,u6%=9Rem]#T(7A\ut/*7$>pCdop/28F7n+b-^599uk8EM>-b"V)_RhLpU
`DZPNciH%eQM9m`0!6h#D@X_6ilEiHJcMYOi1-k33s6['-o-MdP'd_s>:4$8""*;"
#\57c3)">m3D!b6MR<XAlQGe:mu]+0Z(j?WVZ=pN>OFgX/[k34">u/4"Y;987]:Td
l=Q^;%Z(&2cnGmF/e05Zk2>g2k"5h#:sk9bdGWm/P8=>aFJFgZ,.%LmlmtMB1+bp#
EMq\0OC9r`kqk#_]lA?\mss"7]$MY#.e(qj-PAM%&>2?*:,A./dJD*dSJ*R&$)R_A
:,tOt<3>U-XsomQ"K+"s2\6#n]+Zthla5I7dbScoln./t!9B?!GXA\kEioIb&7HfD
!*DZLi,)`WZNWh'ij."O8TSq3&Bd"lSN2=okKqf?##d`cUA6+G)[uZ*L*T-!^0NEi
$#?F"Pp2N9^r)1C47UogY&*85Pi5U=8+W=F9"dd`q`&]r)/R_2&dM91j\^k5!AA"B
7hS.]k%<W+.'Hs-l69TB)*u+D$n3/!#ol7Hj?,'B1dX%b`2$qk2c[+D`DhgIo`n&G
%5,d=$G^!d:GVl@":_LPTa)H*"eQuO<l)cg>#@jN80JluV`SaB9`REe:2C>nILLsU
p/&ju<JNm5N<9oY5Ll,0n*=-Z;-anE):S"6iggrdOZp/_Tk4367"?eEl7HK!9VW^a
K*!LE7PI7L1ISCI-(6P2KEX^\A&(A/aFZ(E-s<9b6WR]-p.]+!=>?QmAbKpqC?UV.
eRkSD11d?<K%4L7>,B+[BB''B0R7>tDIfK<AKj'GG$S\^-7R!cBQgdtiYr,gQ"P^/
Aa?QM6NVK9QXlE.BZe1JelQR/H<EjJ0K+M=(?oZ;qRZBaCA-b*[dl1sTk9VnDT9q;
<rHie+`4YSmM>>4K%+;+h.kO$EE6Bq![LpWeS6<GA?^<,[W?FHZZ?\'DW:dG2bA'k
pp'Q^BpUJo`LCgi]lb_>E;(es(L;*k1I[WNFSBn_QR-Vf.s,aPF7s6iGDgNChf#uZ
G;)SO8/CXfI<kQOF`tfMQ_>@a7s,W3G.+GsQZ6neW*-R>D\pH72T'_3r\=WcEAob"
p.9\A5C%HUH+)mb7@SDM]mgglBc$)_2Z\Dp[<%]=C6sX)(YGLEH$m)LJ6.AO="H>u
"+Bmo-S7]7G=-i3"+k`lBNO5HKWf^R>CQ?5G$$tLGJ/P$f4F_1I$]20GY<HD_1cAD
ACa1jK(EO)6%rDcLGmt!__ZoI-[PN.LXsq'(k[F-H##C!Dg(eaK*c[&T88frM5]bi
=#k!9(Q0+RM1[*lb11DI[#WeVDAWsspoGr(h.tZ;JS7c7G`.LD(2B1aNN&P-GXl]i
dZt\0NlgYVph,AljGqigNL0Tn=9"#BdrsCRFL`9O3<`s1nrq`GIjE-pfbKTb*Hub%
J(Zc@(orir6&rK=P^*@hekC]Uqieg4HhehM""'a&.?gu]Q<8p',9_rd@?[(A/Qm:^
)"j(n_fs\c=euR>po0W@;j$'\R(7X-q3..*23RbcQeA@'pu>o&R?s44GSn>V\[-6L
".4sSFudU-q86q/WGn6k.N)N\373h2Tp1mo9_gE+2['mUl#o)[SJaea6>LY!0lU:u
S/M?G=C5p5bAoWWSeu6YGIqCS#@ok?U"HJ'RJ0.65G-VoCLgG1GSd.O%AU?u=dJT<
`<g=jZ(UeWR!M&GRU)_7V2!\#QC#^j\h0"R:j'=K@Tj/7RV-D^':5TnV,ig'+9~>
endstream
endobj
24 0 obj
5542
endobj
22 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
/F5 9 0 R
>>
/ProcSet 2 0 R
>>
/Contents 23 0 R
>>
endobj
26 0 obj
<<
/Length 27 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1geqE-&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
@&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
/<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DgQB#bm]b&-sJ!M&H^&J=%U<
@L,jNZJhl9,`1N"5U;3'0V0^"Z1NRGaDrgoXXeouiWV#p$=k,"Mbn)b":AgUKrmnU
'J"h=E]gP,.iQQ_/E)+aLkb.LfZ(2^Rd1+X6'@nX\H)h6)($lV*1VaS:g>!N@@[N>
d#h9e&2>_@n@4,bm/F^q+fihrVQ:L/78]*,"])DR%4]@LoYj:Re?j10jtHh!iC$Y0
D'(AWiPO*_L1,t9#q?W#BjOQ61D2^uN-/DoV?*?-^r:)0AQ)Y2biX^6(91j);:Sr)
aBB7JVR6W26=WJa<)'c1_KIf=G$J$aa;iBhOsslriNR>?LA,QTF'j,c#TLW\q`f)L
+d?%&-/ei?(f5dNEYpB-6O4T'nP1L3iqQM*HW))II'gs273P"GF@9:K=Au=D8C5k`
(Qp<e3,=c*6(SQ)LC#gM:#.[mI)>)-[RXt:on@NU,'jSH>\V_G+YI$p<J+_j(Ih*n
#<#BnAmprFUN=rODLnK\GC@$/U3g43B$WOrc"^%qS0XNW2VmCa0tZ<*ZI(VPDh<^C
+E5#%29-0E1AkB]_<2YU(SKbARb[KX2f:R7KH/QOLEa41R>0<S[(a=a2f=IIolrmF
Rnq+23E^>`eYh,D4i\;WEh,90@0P4.d:9%39gt[VHp,+&0AK?U](qpNSQ!_#QJ&D8
]'lo.Cg(2F$-mBS9Y@'-Jea6LT-V/B:dK[Z(>mfLBD6f2O43dtGiI-[6%[p&k9(_1
"b<t;Ru:Z#j[)4'%*dWBpF8S]7kH+::#"^qJniQWXZ),D=:;!RE,H#Lp]>$!lm.4[
\@if9VQ6'b;HCrn5r9;<^XP9&J>=k<6UhLM*Ln=.&FLF<e2C\FF&RijarZlQNscq$
%t%4a-::=qnR@G+Ae8u5Yt/R?N.`p@OSTmu89#E<Uc!_.ShMkJT#)<p5Z)IU[N)&'
LBsn1>>B1C7q*g?),f0A.g=WnAXsm/>_O>?=p:"N-NRL&I>EY5=\.OYrCff*4b1KD
W:dPF,a&j/KF1+<1'K"4n1^,)k!qq`$;;aEl;qQtj@@jGik`R/N^n4_85c7(-..'&
CPGD+'nlD8Gn_G8]pL4b*/`O_pa1!h8J&0GXI_dfKaK"70kN,EP2t>cEeK0=7?"TM
e<,q_9_1u8d)DkmS3+'IL,bUO2d$R]@ZKkU'*`UiAL$VuZeg06H2t49*4VE#H/kbj
Kek#QSlj(=qoe'_<$+4$.7tpU2]*?#P5P'C^uB0-8]GeCgD$An9W([-0#bYd+*Pk+
8B!I.2bC*HLugf?dY-d5RPJo]P]YDR'a-lrR8B98p_m*=NgCH2VNhTN?W?c&601C1
>r7_F0T*+\M1Odn7*VcuQ#0+NoRh^;+UH5:_!<*P8"d),Ib+b7Ei*V9R?aeIT#)D_
N`BM-23D)S`$\_<e5*9PI"bGNS@U7%(pUJDT9T3h=R).$+c*S7bO`8BiA,k0p(go9
QsWS0K+:=GI;-5P\L[cf!*&LUN_aqL^Z3P.WAPTqZNN9k/^`@_Q>'LCHZWho2'%:3
Ofu+p^EI<:12FmomRq>im*tRlE;(eagr3['XTE#nMfbDRQ8rV$S\J.b/u;3SA:!Xf
lrJ>A8'BFFR4g\H[7tu9gDQDr?TZ2bc;(t/"]';tF`kH6T%'b)h)`Z+p80+TlHs/U
rD`;@BJ7Md5REd3:PKjpQPT-t9(caJ?49K:&n7fOV1IJu$%`[aV^:(Kq?op0I>mtg
2A^Rt)?MF<cK?97[P<e_&NOLB8bj6*ibD-:Vc,T.c.55Z6RBma0nu@.Pa0X]d%&9]
%cq+Po`TW5/YC+!'/HU4AI$eP;LPR^>it&>%N8)79PM`ej_=Xf)\_t7``k+MPl3T6
(0/QA:l+=op-`=T;4$>j@VD)=<HO?3J?V3D(6tqgkY=Hpon;aEq4`P7Zj9U\`2M&@
D5SLD#bno<Qm'-_?HR^t81:N@:ZqefF*f69\rN(CihBY7:9W1o8K]"scJVd$F&@57
B=G"<U3),jfa"]_BKNK'Bd6g-Cf7#C*HkD)9Be;F/JW&,;$$CaVLSInGS;(CWUt9G
?dh5@]NfTbj.=EB12C4_=\6A,*bO&nY@)%b;8W#*B@,.0@Um[oT@oG6fnUf$B6KHD
gS?N6lr%)pde7sldEHV^9lqmT0T[B]&:`jlSu'FYCmG;]bd?Z6=d^\ok'FDigr7P/
Y%l$<_2O,u)ch"AGG67d^$%SM0D)1][&MTTITX\RFaT^\b)oMir8gJTDM$umK3IMU
?6`"Q-doRY+&CtKbB&j%['&,hV>YJ+0C!]:q2E>UMTlo-56>'Os+H.*X*&Gi't@B_
+cJGA/8XX0pK;E,98L"IX$`8/\V[/J>m@67ImTK*2l0M[.ugiPO6?/7NarleJ4T@n
c=)onB[Xam<pRdh;tE/)ALj/A+,T!C3tD%ke(8i?20Sf@%;=8(b/,3aZq>F0qNhWQ
'*=Fk^2j;CM/mD*FgpqPb5!27/O,Jb:&7e\lhF=qidVK^r6+[Oo`'EdqoZYMVon8(
_BP#5qG'^r&.&)BJGHB`IS]t:7P+7k[/Wp@p]c]PBu[$i)OVcf?m[40UE"n6/7Jo(
Aq_S#O@F9s(0(ERI?7A0Va@g>7WYQ-HD:%7a$b!)Pm5:3;oc1@-c5FJVQqn%H3]\V
:l&9$5(P4?"%I<)L3QY;'a:GfA`dI;0W+M^S6uCDXD0a%CW:u\GmQr)$nUIUYg>/+
%&8o)FGH1h.%LQ=FU[DP%0P1\+rXoeb602Z%dU-_nEuqU5mqZ0B>PYuV`Mps$P+N&
1p2T;"?;s0`m!N)QROt,`8i\W&n5S-PGp<c8!;:L*>,;HJ-h[18J)YlBb\Nu`p"I?
00k^U9bU)"Acp9R_bh&DJs)sTK^i+[:P)#RaFb(R0F.Yi6Sqp8MEA!GB5I?dO[()m
Q;QsG@aT00$n=\cWnJYeHR$b9OdmUMTN@#>>Hs]2BR:_0juphY)90Pa-O<Z6C6>Us
I\p@HL]X.[[!]">:U/t1&a2lcV%uT?.Hr>Z&c-=!._MuPR0c'KAm?\-\<Fs&_<]7C
8S2r0`ui>Ge>[&4&P?E+<0`/^\Ihjtj".smKJ3WHYQQe$;4<PZ>o#l1<ll:(kT2So
C+n!`EH5\6`rbaM3*7`&(/dtM;(,8?q'1K$,]]&].LdZ_-R6L'&u1\^;D*TbX!pnb
]VYPa;MM%ug^OknEoLXRbUCY%;(Tn_-#tjhdNmaJh%gT'^/>HeMk;EGVHC+sXDDE)
""oP[`@nK]-A<6C0u>]eq^(f]+<pSfE,'EpC6oOK(TBB"VfI5Zm2<k?iT0jYJfrWY
*/CAJ;%.2\OcWFP@Wmr1EmgPCP1;FkKeK9T"#,EbinQP6V]Tp*Ni)D,;XUXWEc3:!
/[ID`;hf@&+INbEr=_AC-''(H$QV#t3XkNsLj8XbSgH)!3tm<*Jo*TSp.P"IE@914
$!B<1Hprnn3J.=)d;WO5[UM!mIZqRaM]3sX@_qZs[PRLh@iV]djZ5/7;.]`fZfF32
UFUF#SQ"VNbcFQ+r6/)'1TFp?OYS@ai\K]HJ?k?2bi4g9`d"<sfG$*d1JKeW0.A_)
Uuq7:%),J9)`<6&H'-<T:Ye;A2ZGN\=R0$V<-IC;oT5;fV39p2C*-!N><5^?)j>_Y
'(7c\jS)VE^`rJ$cpVe"eOmu60XEr>L5NNqU-_cWG;R1U6DEbG#,h%e_IVr^'2:/)
T"9$U9WOmcCd=u,]hN"g:CJUF1P\_!IneFt1B`:_1rV=OS8opO]TIs:Zn"Dd0PfuY
5DicS#/$/]D,;E(;6#XO6o;jT,%&E=`hi>cK.d'p#nj+05ZB^<Wut/+s%d`CE"tQs
F_L49Cf2!YId28>KYDXF=K8_rED1XYohS\a@[ArQf!Rnc1r3?'AgTAo23jn^:jkLn
=]uQ+dO)\/eKJ.N(sXZtTG3oML;Lo/h_rL]2!\Vd-Eqpi0Hrse0Pi(D#'Vqd\mgA(
[n$k77U0fV^h`'d4jd>=91N#Yj^9CD?t*PO&$64[(7N]6>%OQg;Bgb^5Z>Y/<la/P
7M,#8^2,Vn.>^%tFg=r/>sj[Y[>!'U_VJ&o^LWM=F(TVp.!]=mr5Yj2@`Sp$ep(.P
3)OH%'m=D3"QVmj4XWSE_j,I#"W8i!=Oi@F4`^NWadZiWX'jLE#5)mu'"^:"2cS1\
0f$j&C$LeGLLT6H@kVr7M8H?;_dc^C98EZ.;OM&ET24g+.TT<S(*:d8(,<.i`C$$Q
npmQqbet*IAdGhKN$`$+LrO"tA`=?Q$pcgKWZjbR\B5/E;.LkP05q+\pbtNr'sUR"
]OoS+GYu%a!rS:KX'p#GW'jWo,o6JW5$L@F`p7_UCPJ[dc!NAaGS.)_9_!+<FI3Y5
G0D7B[IY/%jA4-'CBF*QWQTUfIe@]$GdhS0:^JfF5l.r\7;>hH@Mp7H%%t_m&gQ3[
N'LbPP9!,&;)c^[UEn%5qb$84:ST3c(AD^b<3=N;=A5)FCC$"m!e#cV'/Y*8kk?)%
D1S^:>q3up8L&hC:9kDChfpK2_C2O$_^*,4-F]+j.i)@rM1\X';@oMt!l5P-RtB-Z
,*SRLKRf0V7e?)NJCI+H`?@U#,7#X>LW!0#73M4uoHu)J/a!&9"t'J>@a0OkZtH\0
82H+&@]rm=O5iB[XTYTgfOuZTM7#mBoAhb:10@(M=STLf<S1pfKS"FWY#DlfG[c(M
+cK&QNGRK29-?bOJo!l0<A0D$BfSi>$@B&,La]K`3+=V<J?Y>BOr5$%=W<5'"c85m
02+*[3==&6k@g4FM(SZ#R5hT3B9'll**>hUiadKU9o:C>=ALj'=RDEA-HuV_r!MtZ
WniuhVN\PaNu;\>a,6(=3l`rGQ1oQl9.oi3G'bPeY30U]=BCiG<4$nilFDQpXp(%,
r'_K7S6:o<9kQaOad6J4.9T;-7-bb:?_+.>O#](Y)+U7Nm?4a5N^aR0E#k!oG.W!e
TB%h-Zj&0Q'W*]uTK(f<==9a&V26*'1Y5fVRJ_(cm=V6&TXlt[`&3LP9NS6r;7[Mr
jSYTo0$H@#9T?!PWH+c$8r/,TZ4XdI6GS@cDV3*o3=KGq/XW?$cu@KaV`EI0b6[]R
kGEQcdOOaZd:9-'=Rt-o>rXTpAiRfr$F^qW6H54_pEr;pC8(L?J<OlJ0@a`7je-:.
XUR*mR(B9,^2WQ$X\#Xh)J3'>;idC.@9P9``_7RHS?7%>:'Pc_fUoCYC7s4mNl.,)
HOkJUSm!L-KVoU+1>A!mLhA[W[+T%YRMM56A$&ra&pl/R657lUnO'g4L>!-C$FDP?
1UYlPW\E%dRmj_8+EkVqN4VN4Zk?jFB="WF@Z'3O`8nJ^\=U<nZ7#g3le/dO,C(3d
Xa53&ASWepjCB`U2Y`.migi#COesOkABZkR\C%JU_Y-C;s&remgWD4*0tf$ZEd.q#
k$[N:'5=LKM4="bGS>)lbJ+-"(clsr3&7-CdbLkl^)DL;<2"r,D2M,8.V"gR$82;:
_8/I/_3eTGnLHGRO/#fq^ZY]]L_@433E-sjLfSX)_Ab0Qp`clFc]$(X:;Z-5C*GS*
YNh=kRJu=7*b=A\#98>.I"m5anHM(SaZM+$A0tMJ/%!7kp/YL-4JR<OJ9IHb&[5_k
,&bTRlc\:b>q/VC7O]?/_K`FLbDI94bc[b&lcQUf[)=</:a=/RA95E7Q#Ud*6oM*9
ettR<P:gsDSB4j#qfUZS.3\rBE[G9_p/jH9DTfl>N&B#0@`)5,bEhO<I/D@[5]E5-
]=`]@EWBKIl$+28<ii$Z4;;7`UWXmMI-!l/-frbOOY@1c^BT)0gp>V&\TnG1&G_I>
W;8[=Ut$Hk:&P$$U6Wk=ruQTC+e>?[[Z`ed$si%-gCmS&S?(;4Qc>mCSm?8S85"#\
1j>L0EdW)eI:10d_Lo)(B53dM*Eh'D^;a4"e>7fIl-!E[EHGLde\.&gSQ<XuenXdU
eii3BWRK[hS))lZ3>-DJ!bsDOmo-faga0[\?6Gg[[TqXUblXP@dj'"^mctj,R2M7n
`>Mfu)9sO\f<'JKrMHqk"ErC\d5aSF*dD%>G+N#a-(]hQN*4.%P=rVno5bs\7G^@;
>/N[;Uuhk_dkBa#6gD^ue%J,S"?-uD`QXkYLH`TmhEfFNWd`"LLPm,;?Ii4"g/d(e
bm:u/.94pFj6>@-a^4S[^73!jn3^jNk^:r:\"YUKg-]I`fKU8@Q0<q8]L.h1mU$;X
h=MjOEU]LNaBeFFoKDVA,UNG0$_s#N50c0Ym0ul:lJ/4lrTNs)>_r`sopr7(UrJb7
an4b@[YcC&k[Jam_C8#K\L,1a?EPb!E2["Lpen$arHIf1@JFC9nGY6<Y:Ia:9VC51
l78(FI\-hKA0E`^bTbL\%$_#iE<F3e@1tabZNJ#J,p$C4=:F%[Bk1\!ol1PObQPWa
_>k\t$q<SBPRq@J2M-Zn@Bd7^1)n)<E)D/6&o<:iKu6d+2?Y`Oa$sQ9R"@1)LQ)K?
EO:C,/fP8?,Deg+="TcSjs(JBdVUFn8#-5qJE0rk(s-C\W.[bk0H:ItK7U-_AhFuk
-Zpl"aDi)WNTu.P*"'>:YZRU,0poak2mcQL[<`Q_IPhtr.28dngfuh2%V>e,o`DBs
_%!W4ad#p@1)aJp1-%1\,B(*5@aU(PODeaE`F.&L\]u(DQ]jfK_7[c4PKml3:mbA2
?WrBJ@"RUUZZ7`=%;PAp[$FKSU^ell9J"J)=QT-n\9\XrA&@54.5\ZG@rsQIf<2L:
cGtiW[J?V.+gqa@?a0DYUHWf=kr%qt+L"M%N4upM1("mGWO!T15\Mt_kHYCd-Gq$$
W^t?"ko2td2Jr?TpHB$1%be;W9$@i(OW.?P[gJS`*5Cr@k1d6kl=h%fX*XLFU$m;U
$&/JEAJiH]>0sQ8Nt]bQ`f]V:X2Zng>4*h2FHG<*O,.c63q6-rUGQaY)Z>EV+DR3*
/&]6p/:imjO\52fbooT="1p"W6C^ga`A5?B)C4Zio[':&@g&2D0K<O/ck=k%V,+4_
C)S^!]#'J^WS;bj/kJbS(t$_.In<INN>k)6.:k=>:>q[B4J@>KqNe9MX9sRaEW$$+
-80\p&6<O2AQq1:9jXXH2<s%S#&'!92C#C<:6RRO;V>M2o+d=#=`(jQ@od@h93J.b
<ETu<;]'Fd,"bH]Rp1)"d]&u/@[\9kXEq'W.[F'<AR<KLnFn08I>(a.p$HI80UHlo
GW40\W3R_*-4_i(pa+/A1AIT,]gifX*g8c'p,P%`BR!u+[TOV`:>V?,Dh).RIDn<R
[j:UA#9f&.BW:HKp`(rdXeB9;%N:h0j#RXRK03+;'[YE2V3OPLH@U"70hD39UokVA
B6^Kr7YHi_CXSKQU)D\lOhTQbL7#[-DVK>@M2]EGj_A*bAL(q508&UHeo_/73s,Se
hN)CqK\nhcP?2\O>FhA+mZ-5*--<TBUH`24idpZd66i+t9gr+r>cTWfM.rM,gHj];
MhS$L\jbtqelG9m7Gcj=*L-*qR]P<uHom_1p+`/Ehei?oAs_sj75gG*pK$*=U%9#b
NVaV^eQ;Ot<mSKq$($F7q6XCb6t*f!\b64D:5,^pCERKdBq=G%"m90kQ>;OpRP0Fc
LJ\_`71'HTOlJ.W>&uqOT]@!!L3a:@igWqZD+?D6?IBt<>?rb-\u0.TMI41(0nc)g
OAu('QfKM:@,/H4Z=K#T+[QBh7/<es<h^Yr3/9mI)Ap=PJQ5%sFYK2g&g^ii+lS/(
kqnnt=GIQOK>D$XEOeMO=KRF*66YG]X/Qa`@#JG5N)<]>S1!f,#^fiS/]C+(U,Z#E
X@"EDTSCCn:gkTe77m^iLqebd&Jaqa.kM5K`(:MEP_<(t77bLk,omj9jD?R`;ADPC
3uO"$O+rb)0:"@98)]t>:U+LtPfTI-Nr,_dkCG7LBj29QiP@'#D@"CKUqW;9>UrZt
?E%H]-&D.+3CIts(F^pT*YaQXF"lC2GpJ$fbdiSY0_6fjfe"I+7[mpRadhSp+jZrO
P#;3A8]7i6jFO.rVRVb_eTirAF2F-)dNM3(Nc5:Em@8u!;,23&0I"HoALWcm6eQ;?
Te-dJ@*$U<=hp5W2%uEi.56kS9%)e,UmCXlO%86e=]#M:.We9s:H2WKWDr=/n+r7f
iiNcf@2Ej=M1%/dZ;Luaqa'JG[F<Pq:^qCTCB[n9)YbkR)!)g-CnZnXL_=SCb;uJ2
BGd.+-:lCu5)iQUarpP`cKJFD2UEmV_)fkUX!&%T't"UJ)Tso^0c2HA;-'>iIRh_p
/L.Z>PE<BN6*'QE+OA//+B%E-eLG==7,Gp:Vr_@o-oYVn_*kSm`gH**r3K'',Eusd
D@1.';lCbQ-G)rDD*`ubN,m-GHT(o+M0^r^hU&E`B5D">o<luIq]7WSE?"#<.`f.G
VTV`lY"@Cn%(>)ulUFaoH185[`?Q3t,p'/s!)i+GV7\<FH^EEG>n7Fe/4+i4Y='$b
p(mA#G40em'nq6_R)]b!fLDql4t*ERK.VHJ9hYj,[7oYc1$^1qMCmDj//&5PZFb/H
Ad3#[M#8ur`WE4j5%PKRhqo0)=:i`dZga+\=0Qa:U95F\`\RFcfp#D$6TZn:X`(Q[
dncWK1M,gn^_L<AHL_O(.YN(DTNmP;c$A3M9\LcNk6V<sIF^"s*uU[$lC?-7beU]%
=-XE^as@r0<+OGbXQUsVj-F6#N^0f_K,C`[gbQjW8YhtjQ^<m'H799i!hIQA%Iis\
cps*Y_.(BRf3Wm@<(UD'k*)?3^&eMK[`,fKBOOJRcHQM?2/2(#M),df:\ni!jifTX
Ag')B),QIW@_5EqHOA>(CFeOPo7;$qW^s&&7d7pFW[n1lc<>7h("ei*Es]Q,Kh#b<
-BbIPD3h*r"%V%p$?borXXj[,_/'0D9C*nc/G@%:=LZLf6&t$+>>VUY>TUB")Q8r>
9X$mQ4-CJ7^YJ@m9-='8^\;42+S>1aXJV&T(U^nKbmT9iGf#aYW<U#gl[]^*\6LtB
)Co%YpngKtV$UKQ_eH:onnKhu/W&qX3ZZlg/\$4hq-[OPR289'0tSUR8P@k/8E[,M
8%)mmk2>5=me2-f&?^eD.BrH?>r/1_q$\]m!Wk#eG.:8]=]`r^>rhWSek'kQ1?KIA
<g*A\$2]]b"u@rUKico1B6*@:oTq[L8lAZ:;PQ]#Y,m(nho]e?n5T"dp!VK2=kRHT
.k0n/rq5>6mu6c7F2@Xcf$,pQjX8%Op@qD]jSHhdoPF97G]Ln'Q+rjTh.,$;(L3[s
DlBtU8&KK?gtOpZP!<cUh[r)$f0&:Hpe(AGT5,j@^(W3%`0q[.-84kNCR]opf3\-)
EhGu\/9r9X4K&FE5KOSUq'['@ea6$)^)hoZT%h0[hXB,[5IbBtO1D)6*UEX8cFr8Q
4X8075bn^%pc`,4ZIAr;=ookhF=2m@.J*3J46`l;#!RUo'j1M_*!nAnk`rBS57@`[
;t@U8)aIm[5qn%bF:UVuh])(^5-+NEMQf93ft[%/5Ecg.M-C]uM'`&?M[Nc)ZWWRb
]9bgAQ3)u]$g&UocOIC:N-QY]<$[?;.1D^L("=`?9I7OVh*?6\]3ue?$6d.%/We1/
Qa&*Z36/p-L-kJX4X&dk*%8^,pVU[4_g.$!MV5`=h^qEK6QrHkJ;Zf(/uP*q4+Rd-
8Pk]YYHc046t;q,j!g7u2%HDG#jO<9&C<%g$GL=,MOFo4j4tmV3(4[V*Rjs+iH7/s
d36RL`8i>b_M(D,l9`-Z#WtpPOG?79_]8SV#_Z>;0j>!QPT0eU5I<&^9N&K]AX,lD
$;qe+Cf<FujpF,S`iu>V#e`CEm%6T&7[Ym@j2/Jb$&KXB5TAa>A*f+/dli5i7reGI
e8n*i!]j8o'jP^tiW["gm(hS/5mp[Aqs?Z8J0;3.$:q3f'<%?;A"\]f#tsCqZt-u[
M%&0r\)GHMJVPkBG0"cB7[t5,e:^*j*C7&UTT!MPA:CU8VT)R5`u-csjHN/tY8QD8
MHY3pRD0[D'18"U[1jH'l9.\NI$QmCaCKin>_P]/M87o"b"0DaZsq%nLVrn[2KX,9
l3S@SV(Koo%9.RC*/R5ehb(hFN[1Ak$).^17`OEj9-a-rC[@HU[R%!?95G7M',qCn
P9&-ialJ]mKU*QVPb=Oo8V,:*gig_3RR&d$R(SR'ath*nM[PJ%RF8<4r1$A)P!&@X
NPUAaZoPhTG,Z)j7uV=GS$Y@i?H>-V$tJDB"E@/"4N$sG\l@5dJITP^U;l9D^0I-s
j4V[.R%*0aM?/.N6uGIRLHY:h8=7%>gdTKkl,+s\_$o-nR)LhfWQKU3cCo3qeC[N8
_bPl-\L_okLl]8#dZ43,TUClN$g^&5f[#r&%+JTOjGD,s\4s']7LVV@TW(VQPL&%A
apcc3R<d!"i0`TU8^nVK']Vq._oJ#8c=Fpg6/g-W),:%N:+C6(V$G3=[glrC:g3W#
Pj6?VmS>fncQmI%>jNLLYK_IocXd_Q>l2R+kKsD8`[(u.'b/R`&YG<J^\mcNaHFo5
*5GLR."Vg68smj[F,=;H(I[p(ALt3!0LZ83dd[9*"C+k;>p8:._AYR8aKlaXWQ5N'
.eP;_/F]-MN(?jKZ'@$L./1n1LnSrT)c[^$0W('#rD4bu;dpf5[%J`D5p,b2d%s#;
XB!Wd6W9Hcd![^ud@s;HMpiOM:fU#AAPerF!_Zfd;ai:_bsKqA2]WVu5j^$f/)MN:
Wmia)<>?E5I65pMKi<t/TT":-$?/oY7QZ82<<Zo%":,XeN)UeIe>6HkZWL3Wm0mFN
;E3FZaIh!n-OY?8eQJVI<E0K.2omR.eAWoee:7lh=k2$";6=75OH7l8>ZO!U<$^;O
b)XYcMoa.@a4R+cF[ap48PC-de;Xr9m<HCHrRI`*7X^(o)qrM);bW0Bf!rU*1'1.W
F#mb3<CMG!YaEl;IFSL;=%'Z%`DY41>=`%+eqH`FKm2(lHHRJ]<],2*?#nGI^-I*c
ftCb@jdXri@C"F$=ES=\F`pQ.!a+8s=!aY3/W<F%crT-`Q`WnSh1gg9n(=tT<&g`"
[*V4@"L5gO\GI,R$eUCWiQ1=+*/%<!TV"DPPM:+%2S;9/PgH_(S_+dOL_4b9R;7U]
SYquIg`*)Rl;?;,T<Y\5N.&SD<Q$D?To2pj#mIZ#Bq:s=pT_fI*KYjnK<DF=^g.P[
*coB0'&KRKWZiJ($#ln5h:/+'b)"U!%UfuU8DuRcS\8f?grUGTrSSO7?40V1YXQ+Y
S_].X0/uLlh-c)!(ttKK2r2a3NQ'Kl=J.K.di-3T?F2a'^!Bc^d,,\Eh^ZiW39&b>
SJr<]hdt/AE.Zsn^KWuA&$qU0IF8fA[?bkc>tt*$.6WKurEX`n7J5H#@B:.8fA4-N
PM"kH*S9-;<&]*7O)Y-:+Lp8W4c#[.?;hMDQ3i`t`nl<R?supjFhrkc'UU3U[Y=ok
l)!7ZT*]*D?a]Q5Q2MmJ%Un2DiV!1U*VeEm+lWWYSo^s@LohPGap<t.X"]6aA.=P:
BJq(PM7JHo1u&sBKrm6_&bFBY6VOuNHXb\(;Q8m>qh1"/.Z2X\(WJ,<nUb8$LEL=<
>HTpF<]jj0IB:FP+O2t^mQD$SZ"&Ao1sQnoR-WaF_.,)GNIDTB<\?2"2@(p,Pt"Cb
%Q7f\0]]3FjM!s`eh(.c',)tXieC-kM!&7^23bAg)G#LamSLT2-n-"]jfTq?)f_YC
=d6!p@hYfOU*iBp!g+Ub@c@5(6?/9i&n;Y\RkA=h#%Zg*.h'F15X%8><I5mVP>1=9
AI`/tp2EX)6O@@FAc*XrSi!!'gh-O%O`!QsmOREX9\H:S@oBGkSmW$T"m$/7a$tF<
$;oqlJ``Zb[l/c/5%`q>h'F+K*VP'l0jkc/M2L'j#araK3S#4JN5'YZ'=b`.:_5LQ
#nCo9JHO5\:-AoR?-LJh.VWb+TVJ$Rr@GgbJ5@'`#*RXq5lh1TBjk(.h<GaCS8"Bm
56\k2MD35er"WqG%9Aj25eWK?U?\VR1N$.UC+tm/[VDdj@ed9EbWopuB^-Io('F#@
$#SttSm@aBCHJS_<)Jq^kj)r7Q*.Q1er_A4p1^t1MftWV(:skWVX$.TBdT$RM%&Y`
*okfY-)"m0_C"NE35sQ7Q2834VOhMmXU(Mkl!DFmWA8:]c0Vm8$:pfUR\WGc\mkN[
B`?-`Y1/b<dYpW7YWVUGJ_<iUc"sI*D2=JaIbbp^hJ;sO,AuFVY2O6h*:>`:lhIq!
&f#8\c59ZGDHMY\g:ZbHU^n6bm_7F00XpK,f5='sks!.)*(s6k5-6RfP@dlr.))C<
ZgXL2l0&[mrm:"\pE7TbVNFmIc(u=rpl3ARl^]K[q33*AF@6?0&%;Q.6!Z=m^M?B^
N"3YlOd=S]#+jg6M3eV8JT@J'\/,Ycn<XRs`Ad<'"`VC$M?T#[:C(nk;M]\7Vr%l$
?OZD/;t).F<@hXZWd!ufr<#*9Q32o#<8'lIdrJ`'NnlbJT.&OKd:<<t]C!R9W]Mbu
/WjkQQWj&8p?jr8!^ZYh1cDtgTqf[X+0'67UNr)E`Ju`<mLOJG9=D8!qMkju1`4Nb
o95t3iWtGM$#\b+clp`jgCJBsd(Wg&ZtDSD>uS%)6n%4h8Ef7nQUJgb5EEi:.,`5>
.8%-X7k!=<oe,b+_$/4;&>`/t\.f'QZb?"(K@-7e-BCc*"d'@'6$5RZe4WK=O#'Gq
NfC2lF($/4r",8^3qRFF$e5:bntgCVHO@+:&*ZXUf-X=UrgK`<Qh(X,kb[.VBVDCS
_u2`B&gFM\Fn'Bnh7lSu!h"7!$/&R2@CL>La%49VPk'Zq)\fB_s)tEs2T,=LF[(EC
k>4U27_H6`p\(-K]<6Bp&F1]rE?mc2D`IJ]JNh*U$]g*'7XrRLeG-!1Y%K\epNDBB
??:@aGp9@pg[)8=@\*#Ief^eA#BWQ93pQ`g\hp;qIr:4.#19/UG==_l#:d@LM8H)-
76`3-s!Jj-;h>PqE_taE1$Id$?n7]WHK1hj\$*1EXrR@VHN.WZQaBOZi^*D90O[UB
#137&4#t'e+n<]f!t$Sd]a8\+B)nnO0<laNgQh6D[h#pBISTf7Q/!#PH_bb2&d\DI
eblU"1iLLNYi95+EAWlo.TaqtWsO-MiYuKZ0l$L]kL&J`PPd;*rCRh5f@)/22eE9K
Z^8dkg#IM%P5Ck97#kY-n&pT>c2Jr3o3](L?f)CX_0a:fq!Z7^2qreaqu%bo1I&Qu
?=7(5h<O`1rq7i=C"XYrk<oQO8AbQ.9uQg6Xpkfi$dqrOL\6XV]763:s0&RP?bou<
*!cQ&5\pT4L8.Ube7^Xh6,l7MJB2=]J\baRkZGW:+GW>i!uM^b%1!i27jCR_efHO`
N+.qu\B&PFNQ4Lc.'/A41)S630_oD?CH7<rLEe8C\7R`=N9H@SLsU0&UsuBm$@pK5
6]R-r"%bph>u@TL7cONFL+Q4@dHNCU[8Ot+T1<d"\_PJG.Ml(GPkn5#?nmn)iWE&J
DT*8.@3G>RJEI5JN8F'Pa>O+J290/WGhc<Y'lCh?a!1n=i,'CU:<#.2!8).Ed`q$$
$U$Qn3uM5"6[Ju8G7pD5#6QPr&s3;?$@u;f`,(kb]FG-U/ekTF1l<5uUQMWV3JOb]
0E[HGp,UicfODa3KY!<+N(Z+Y8:]E,lbcW?mT\PQUsB^])7trM%/;1<e+fanD+kS5
LCZck)'N`5@/)1Ear9Xm$iDcV,Ok"O(ps\qi2nnuTO<qcn;>#g4_T2hf>S$6<h>#l
S0o81Nsk+k,N4PJ(bIH,*ZM@=Hgla&0pl5!-^!n-n4F-p&H!tj>bH_hlptP1,6>Su
#YR^P*??;:S8R2W;M(4o`%\RA3$D)0i@;>NJmBqR0-$YAL6)N^aG/.V7`iFoMdXgR
n6Ha!.-l!qSZm2[0'bXLXK(kC6+]E2:JHek6o$I67$GtO1pVcd/<'_+eHsT9aM<Z5
B\BU"\kORrD'J*]2c8$9"#(%oX\-bP3ma*hXj#"f1/eh>[k;*@,:G<Fo&f9hNmq7!
=S<FIf>R#Z%.(47Ou5oYJ](b"L=5*1jB9hX@';@Y'[lurliRhY^5QW,KYrr\aaDZQ
]4DpFPT6SsX*4B]L0>a@Au<DJ/=;)BWE(qF0GN'emBnQ^T,kL<UTXAr'A[]H/[pYO
QD+i06($[BMufCoM/IBC@hM^=T1k'tFI@mU<c!ULRS@QsB$+rqTWlV!cKD_D`@n8a
1&<Di=";e6Y:_mH[a$EC/1mi<.AEB(8+!koRk)kJ]SY@re)86i43a8%DlAgrSO1ek
q'`+4*d"Na>Se,bB2(`\Rl,&K]kgF?Y1"G*0r)7ZnL:>(>bU,p-_B]SC6?t8H3ZGE
WLPKfU$0)CI^8Xp<Op&K8/GO@U\o]k.eE4h=51Vo:QG(^I>W4HFhOeKYOW=+60"i1
#GDeST$kHaA^*_YLTq8*d"Ej>T?UR3<TJ>1rJ4'F[=/hmU[:ag\e*PmY;DEW@LPRq
qt!YOiQ`q5d/;eUkp$Bej/,2+"-ootFi9gs5iO-T=qPFtKdbV5(5.+.HikR.jf]5.
;$MoI^h?,0c9XuDgl+OCIK`:jZ_A/!TM+oFm-3TA=9`Na,X<hR1*Ma'(sn_i+"ZT/
Y;EJ)'9kRLBL`+=_pb]')G.7ucbTpT322gLZi_`7hA7spGls*q;i3<3kUhFj)q'#U
3QFFNSFpo)j$Tq0a[E"n7Va'lZpg&=V&m*Jp0`ljBkllEWCXADj!4@H/@$]=PLk@3
::'DM@+H#_iY'c\%%fcT)"K"CM]UF_O-E6G$;#oF:o!RZ5>lb$+82#GA,4bCP0$N4
WHc"rj>N'=Tm]NWU4;8U\O2@r5Gf5=/=1pUIRWrZb.4&HN]DM5&)(N[$$b^lPg*\G
c:t+&N@mh-8=QS-j%KM3+c(NTS.5-Y\66CQ?po<ZV?i&RF2Dq[0d`>"[9-'G'MkY?
/Wqa.bY</g]Od5eSqh1_b9IXnk8RZtjlN^@FtCsLfe/q^MDS)6`t.=s%!E<ZL`B#J
;VgUBI75c@ObMI)dJ>pb&bq-Pa7CLBnm7t_[SjlkQV\<P<LaTm0[l>RD(6\8M\L;A
8"pS*kR?9i&\>!0M0Ci(i\mkdr^n&L#:+'?=-Q,D1fT^7<+["04VFoo5P[^;Bd4Zb
2:Wer9!lss'X'8j(k`o?ALNir4L$ERY*`[3Ann:m,dl-c,Y?4g%P4>3F:q^gV."#'
A!N*e7Jtk2'2/alToeF1Pu;=2iiQE5NrX^pSFb*6::"8aV%&mJZjg?9@E4<"m97q_
QuEsTaEcA3nD&*CTHZ1ADRSo^PfCjVRgn"7mnUt>VL*4:j'Il"G$L7[7!TSY7CR8R
g)n`WqsSk&.ZPC-hLp&KYId,,P7$WJ"F5Af*A5)rSdDq`3HK-O-[p&0H/GMs@9ok1
?W[Js9'9qjeHQX8E4I6f2PkcAe07I0[e`XaWq0+gj.22.i4p<(>Zq64,g4Wl2qU+c
M53&=A=ANgAt=CL?7$m"S]]aMcKgb?27QV^j-BbqIYj?'abD/TTVG?r?)fX$.HH=r
B'4dPK"oGc`p:@8m.QB4c*8N9/j=$*DOC#gaN*O.k*@]g@Tl>fq"gh"fAhX-eb6ob
p!DOHqF'cQ&7X?BYEMGg<po+(5Bl+Gk=..$@^YdI'[jj)ZaZa:dDqY,$;a`n5a`ZM
3\"6lS&uaJFE@P3?4j$Q7P$5s'4aSU1p(%O"(utEag9BmlHj%)9URL*`la1j:<PM;
L,,p+\)^TE195B;/eQ\X7]k.in3M"idGQ6rK)Mu+0TX?f+PdJJkn'$X]AB\Y=@FHY
OM"h_EX(qU/7>>aQ8!=bVW]uGf*kQ?LUn0]S(U;7]Pt`-L+o5'hrGg%@>22)2u.0Z
4"-sOrQtGG3GIKqiN1>QqFZXBkTJG`NH/n69&iCZ0<riF,&NOd\DK(rpe-p?3O&4%
UYF\Aa.&sO.6%)a4"\,!A/+6`lhTAt+_7@IQJOF'Mi8P>1`I=<0!\lofd;<!AARCq
3AW^aZIN#!luC=4]]NfC.As5TON`*(Y)c:`HjH&UT)B;*d?3`8#t(I=on57g6:kCj
`Md[D)D1BR-_<8m-;)+OM4?*]ED>kH_m/1AHmm<0ShY;LV0ej"ADqn76KnR2YBNHQ
ef5-\E\s&E=RkY>3:j9;^G!p27Z_<G'8&I8+AqWh"uD=mn7uY9_71#0-,1[SS9-@A
<EAqA4".5Yc/,/c+ZrEP]m+,ZG%*GniS@]dlmiUoCACoen[jP0a*k@5=gKdRN=\4l
C27<U?7jNIBS9/1!p@msKV\0Pn.o'F+DK/N7q.jB">iBig3tI4H3J&5n#1NpHsU`q
`8ssE#1W\>nH.n;>`KXG8A9/J,3%TcGtOP%DE<X[TKOT[p8BZc#FtJHJ2ISME\ID=
m,i?+=QdQ0J4lb\c-S3p/p)!pkJGSN:el.nR[NZ$.aJUh"Xa<RE%J/hFV(!*XhO!c
KYRg*GclYi,9mA'Gn%c;!_9'WBOZ=bVXeIqHK89>%d*A$qL">$FU10ZDYtpH"L0Du
m0]e-:O7LC``jj;J'R+fD^uF`#\pTb:hWIP:.4;B^kPNE$4A9r-n>FP+=_'I,`WBA
@]""Z8;&UCr\5*98=o"]ZpYK].<&gF_ISHk>_3Ml_C0_c&2`^X=GP0sSF(G4.#@'*
i3Q9/n;[#AOYVd`R"A0tSFIf\j%_K<ZmDpU%nO)J&/Hrr@*M=(!5o<`,5UW1d+O67
7BeTtOlc[=Z@=P&OG)C6M#JoA`hijB0B0W"mF[rM!]O!WP_prS;>rt_I\m<Y1"$&+
#+1V@D^#8nYYj1q6?+-b+>!spDlIFmk<Ra9@!@44X2kX<aO%7[]QE.9,_U=kE[o#k
ZDI`*-E6_BC!8*jo-R)m$M&@hZ;07G^m^4Y.0:9WZ94%S)PsA1-k^GI!sEH)J3mb!
S"^<idSt=OO@lb/,K?&&P(tB@[$G`P'i=Cs%f[\j8j"lY5\&rGU*B,"?m/"b/'u#\
M9IGF[kFmbG]Fcd69['.^E^Y"/!.LQait+^=S!cQUZ/_MP6WUQ<&Fi=0OlC*CF^Ir
rsRg5PKOS<'-s%W*2^Yt?S^WbYY;98:F1Tn\LQYuEeQ$='/ZU$L,+N7$P5ocRgD^(
9SK"+WBaoC"sh1\-t=0Ab,UVFfL\lr2.WO5;J,DjX#<k;2!leO,%iEZBb&:cqbf=V
&p6'E:djk@?SX[?YUquSgG`T=Hh'Md8pFpaBe\R"+OVr>,.A_9%k+_G.O9@)dL_^B
a$4%R5nXDEe.0@co)DS\AVQL0LX<,%(p53#3!:LHoJ2hIlp'Vdn:M8W#EVZE3(Yr!
,cLc/!2a<a-ilY>mUqpcKVCR1W&rLBi!V/>Xd2,fj=Fee4@5L$CKF%o\KhlJM<,IC
8>a!uIn?@b7u8QP<1%#A"\*Sc9#<P6U6Kc:.n0na[k@f*k/g*]B1Gq11rXN/am2GR
W$ZDQ:"4V91CHpAE@=eF0er/Db-kstImh0B:ZG,R<2E5Ej9CHQKbY1O`;<42=%LjH
;,ThZoSfceg^Ot+3X^^;oPdm=G"GZY0uL.C6Q]4301`9&#;ineC2>h.^,(pN;@aBj
PeS6W!Do]!<HQ$:[.5pd9'I(&<>>m$U2*E]KJbU+s'quRbQN&'OChK+<)cUM'_bdR
*fU]]7RIbbB2ECZ6jDZI,=3;6c-odjb,Wm">iq>eU'N'q`e(S2;.=f![GktUSQ?NB
+I/?a<U<#mg`Z8s3P[m;m[RT+>$Z"!%RA/;5j(Tbo3_Y69`h&gWX3))MC<W^6:-H9
[NAs1[NMBeY&-s=k/h*[EFXo70U=q4'Zf$o(=*<hVkUmYj8(5LSRD%a.Fqd8.rlh'
4Ei!4?=trR_e^bg5W;%*BVRq%eg3b[J6/Qs3\;XkiZpij)G!5.C"@_oK<PS)0N_&D
^Z%0P9bq%_$sOLZAd``n;iDk'fSUG`h6qJZ,#N"(g>tX0AdWi9Z3&gBen+uL6.F^t
[_2SLqCBO\NctSDKq2FZEg@g_C%atdKZ6Z<YUjAD,o0Bp(03bF>@H)i=eZ6QF\_PR
3[-loCuQ'h&Xa<,eOBWH%7!1W,^KsY6#T^R2lVI3,SW.PJ3!@Kr?d+#&T6oY.fY_o
J?6;+"MI0g:.f)=GiKZYQV0/mFF,5EGk&UEB(]-qYC!#K0)(VtX4_iBc66i,6^GSX
e`_SPM/npoGc%u1UK/Y*B-::@<hkP8f#/rf%sN.34TsGf'i)):UE0QkJ*0O/?k`eF
6$B_t.nQ.Q2g.Jb&><`uQZP6?1RVM6kBsc':1@="mT_UC=92-hl-$Vk$a"l&#13jF
KP<`+=BI0b)Cp&@G'G<@b`5fX06Eq!kld;&PUn.l\9/K&2?6r\@X<%fI=aF*5.E1g
=0SKuKP*0l62-'uR'\>B:3S!!I)trY,JrD_YiNYu7q8;/97$nS`r#PS"#e*(=Q5I[
S<.7q1/=[*8NTUIkV%O"-PN$l#6&5CQoPW$,T.,9=6Pa3Uts\Q5Bumt(lmhb5EYZo
84G?jV-H@:f11FZ+JUpuVQqN"N^]^6M+Vl0ogO\HqB[pECH0L2`<O5TFs^\u<(ko2
.6ohSGF$e/6HOqJ70-X[G1m!rGiEWXFW`_*N&0.2O&WSnH&=8#RO<kZRKkH%\Z$]S
]:)m1QraipcCI5R9V&W:7V1Nl6g("-cnlr*i+5oUq0AO6OA$n<Ql2HaK%llnSXOhd
96<o`K0,TY7@7oP?p_=+K=acoO>b'qVC3fu!om\mL9#CgS2Y]6AL\lb/VZ2W9["8Y
oj/h&fqbBL?MBIRYt^U.`]E85D+#@qH'>+O>%hnM;?BXkQ7VBk<F&dK4aL?tp!\GS
RARQJUUlYeqMh?ic!+gO-DY`H.><bl<M%pG['Zg'fC2<jcRE#OWW`t\e`!(QHs?*S
bhCHkVntT7OF0(!S_@C;Y)l&qVleNB82n--qY'F4Ml1^H7/Eme>$nLc'54/mV&F9R
O]A4RD4Z'f?R18$EbS'*l9F?$*XC)rHIP6WKPm8$ZifMR"c]^3lrugr8_YY("eIb"
;C!0f?KpdV[Ge-4(TD^ZUUpoC6qsn2")Xd>Z9qt#Lo,F7]srmn6&j_T@m[gu?>'g=
DW31X,@p`>rf]\;\g"68cK?\sXA)$Kin@Z1gVf\mK&>7Mf)*k+6QL:G5TlP_=l[JC
lT`$dMKmbl,%B%P>:qc0m;+(u^Xau`S)J0Fn\0/t9UH^33oRna&IQfD]pN1r74^s(
=1lmI_WBIg0+kiZ,0[8U]1ZSF<PE./F1T"#;1&lm4.jIO9LS@YMF&h8P[l:4;Cq?:
\J3Z9+u.,ben!ORa$ORXqT$YAb!(1@_STR!o*'76$+s9Y.O$mq48ZZo$qlre_,sd$
Xc^_K_nKBh7.&aH>_g.Cb6T<h`jc1oU:"eg3?Hsk\O(0mNhm]mgP'*]dE^Fk4-S!9
o[022^jNE3gi7*7p@\0?0tF;\AR%4adF")":j-C<*<4(#bU?_Ud&bX@I4Ym2C!N7B
?#a/bSNVqDUBuug`M1\5qge!/rmB.><kJY%mJYSG&^/m54WS'%Z6e$Z/5.TD<U#Da
>F%5ME,9%g69CLNl2kWc5;jIH9anNoN1n't+`(eO6]Xsbh6cZA>U>n"4'ek"42K%6
qEpgIU-q#Q"1?f17=2_;fKqgV*&k[@(76M:h]'PO6c%XN$/`fF]1$esXQRIt=Nd8_
^oZhSS]$7(##r:/7YTc#*YL@/XiLlO_Xa5H?)0X=/l_eCZJlDP0q*rIMW=VPO#SW:
a)kWsQ.XiVai%EG))@2aVDZRHi;MP<CuEL-kJ4L-#Bu,>I6;`5Pk6#Uk.ZUUSfTb<
"i5B!6HEHq]>_R(_qaY\.m1N2/LB([Y2fIY?'qY8SlO5ge3.-Uf\>T8LQZ=7dFeHT
L]4(5]7nN'YU&T=_E@*`_gm-3^Ui5YljUKI528rtk&nc`\d#TET!s6b#'jmKY#)+f
"9n<_)b=S_mDmc+IZ6+T#Ogg,HCg24hXmU-lqF$H0])Ql5%W(]+35Nqk!$brT*U>2
9A-2O5ReW!LO)dH-FsC=o)BbD7p%W5KC]Kninm/Th[4JikP<%,n1fjNN=k8:@FIGF
of`3!r`W#mU1bq(10E5Qg%:f9Qnc<A1,NsmCmsR;bnj'r\OqMQIdtf#a1DS,<ibq1
i7]:RTqKJE/fP7SUO`ElAiLS97UmU'JCt!U6(nj`T[7(!*"E1jOTDmA2AZhB_Z@D&
)\7bCiik/=G\T+$`oF?"%$!t.Pg/<p#aA4=1E9,$n]:?S73n9q-ITtX$=F2iJqe:(
Y^i/bM[i1n(sK;$3#gQ6ON?Y*58/cNjn)2GL>**4:8tL3FJN>_);#.'&\,jA1;/W"
[qX)BdtWKa0@pON<j,Yf="DY6Lq%(:Xhuh0/1!>$/fG3((ek3U7<62%LEdC]cP9*D
klt#DLu`>LQXo#XrJo3>GdQf,"-KJWWC4n[ZQ'n-L*=MTjn+a!1e4[7R#Lo0No]1_
f<+9AQ4^8h*\tM%WuVQ9##$k[o)+eka3qj7g8+hVQLCWml;ZJlTqH5U5[eaAUnb!s
DNR59Mu<,M!Q\l<_1A*Xg,3<]Nt&jT_ShEemjpNO+JFU+)_]A7DOWq0$4;NB:W-(c
#3r3*Jqf9F584<1Jj1!WdL1FBV%)b*)[?tmHlKHZ,b,YT8IReK_+NK"*/6c%7(9k5
Hl2`QDI_K/^Q>Nl]u<fY*@XU?Eb<t.;H0&F[K2?Ve]<n1iYb#+>^%7,ZFF[6XGK&O
f-JF2"%FijKPLdu<+J=ob0n3`g;=KONuPh@<$O9@biGHq,HsQN,L`mnPlO'FjM*C\
ZKMu_^+?nZ0qp=*C5Bjs3ZVT[b#1,88ZiC?\(,0-CkXt9SJ9qnO1[t;]'\70`]NJg
gl:(1h8%Jen,0)#7nF+2B\I>2_.bUJXd*KUGFC@b#!n&Z.c)S%gJ#.PErc).=-=_1
9R#Unjt8SK:t4Il!j9BKi)E'5Tke6u^S*r.`"3DG-knH@5Z!+`!C;6$.LoTh6&Z!,
1+'jFK.n!nA[uOj6,ef\.YD?t-<_l-H&/C\JO)P[1lUfU5ctNj#j+2/K4rCd%Y4W"
1lap?l87gZ0]"em"%_3/%&8pK[#ErD_Di#-@+$cg4)j%8"i3a.2$$#r=&oG+\3S4f
C?W)YjeF/EK#U(Z!f'p'ikXE)Z,:pO=$TTV"V*Y<4<1-/Jd7V5#YmmQMW"QkR#'[!
#W.2PBTs&^K3)t:0RP5Vq#h[=);(`9iqh@_aY\j#0Pu>Xc@c45+J14@=#lT@.-_$2
GJ$#3YqR4Q5_;JWo9POD0uH!F,(COlo"H12kO82[h3P9PauXh?4Xc6!q\iqrZOV;p
/'lK%4E^Rb&Tdes0D5$(P^rn[U:bILGsS#77.MFn$7(^=.t`FAB1i937ZZs0*QUX$
6(0W\E)m;d'Q@[*,H6*gFafOq<t'm&>DB>q$,7</!b%Q^JdE]c+jp]cNU/BN9'-o&
iWa0(6\\,CW7jF[U0qGuSKjr0(;C*'lse(G2mBC=R"[mC%Er"7V(+,`-slhC,R8;.
Pf+^moc2it.>3h8!Yp6&&mV/54X`nY7!Sj!j;Li?k3Y$fe$N<h=Tg6'ao%9$G7Z##
;fW!Qad;QG&])$iH-n2/V0P?KTlM0;OY,QV3&jqb)4ZqpMH?*di=jP+*Id(Cj3'5H
q4n/,<QSZZ+XGYlMY&o$nEn+M,1qr"^bp/Q>hU#-ZSY:Ub)ck(orq#TT3.UR3D!Kl
Qq>/2Qi,X,LuBmT;`?[q)-Acf\fMW2h$qH,8<Hf<nkZ!^*+iI;?]$;M&L,)+cT;+c
Drd83PJ'4ld=4;9(3CJjjUN[akBp&c7`fs&(h.#CHrEoC5F=K^B/D`Hcf-oUW&4IF
AM&EXnsIZg-BS[=Z'R9Q"]KNX'd4PIVSL%W<%+juTn0jR1K'CNH><b#@`tak\<B+3
d8H$o?opd-%%-==oBMTHWi@8E9tGaL.@j;3"_")LMLtlmF]t2QL5FMsm36"<i^6<,
JjYFg+N^T(4::4A:1/&ecq3>+`=bkrR9KB[ar-R;C/Q)\,oZ-HFH^6!:8jpIJd]hh
QBkrjRBs\j/EFH#de]-?P+s3J,KDrg2NU\UlSG4)!CS_=C7Zfl;2?tmVmK3a:%O].
8ND?nFAd0VCR"FT>X,CBk',W#R1:jV4G^46ON76h7@gqK,g/g<'^29EO@A3BUja(X
lbc4F_MaqK<fSDV9NeH6e@ZP$=%maT&aOa.I>^^$.s^l>l\IF,#`a@8[?lMAK=H+s
!T#e>-P]EtGbumBXh;j!:gT*G5V?c6X1,8!%5AJRQt!ZAHP%OeoThGFf&rDl.7`WN
G,'-tr)h.3N#1T4Z<--:cFSD<NQQmpOD3fL*0c`:.Edd;&;o&=OWSN&0$6108X`Zp
4S%o=\1<;?=j4pM8Pu>hQ`R)KN2;uL1?H.DF#[asJrfM>_Tai2iEOK`(en9FN1e%F
XKkl@$O29MfE,UEPYn1g_@S7q?A9o2)hIX/Ra?@hINFSeT4J<1cM<Z"ZoYOZcAnHh
g)>G(SOo"9,"0fCD`[0nWgHX`%pu7$e"2`T[rpd>bnm24>arf#YAqTQpTnF9%90O=
ar)^Ame5LX"_(-!h:gUIpZ]r1Y[ItHf<d2<mC4s'OOa]glM1T%A.V)9*kpJ+ms,a!
'm01aR3:V=r9`7`V3"DQ,NeXSRBfYOF$_uT[uoF^!Y$RL'cp$R?\c/c7_d9S3CGqQ
e/!I%I>u?e+^?'l9d4)b%HdpR3D"5]RBhh^V^=<>VjJcPQcWMN#/eF'MK>9,KI6^_
js2aUT[[/R\PY6CjckMlY!td(0+a3r:R(CnLg([^''J(\O)f\:/E$h:/B"0>n?_DC
qDh'jV50>>Xt@c([lu4r-LofC!j5>(1I3ZmP9JEhc]:[a-%3slEh,IL8J/QZX%K:7
N7jo9D1jW-5b))B54_MsOOPYj[Q--Rd_$JNn@b(JGGJc[qtFYQmR*5&1_nNqH"UI^
]b^6UQ0J,=C%T,j4E?q6]"!"q2'2[HG522f^)re5N#gaM1JXTl4]aohc\NVq/+NRh
rp*%i&?cT<lFeWS9Ku)FH8u)grk^fjD%Fs4&#8naDjU960?rsk"S"0W3G;MLa9lrj
V&94b@"S_0]f/kW18,J]1Z\s`i[d]s-@/4s;ld#,Bg@eRQL"s>=KRMfoTZ-5^^/W&
\o/:`NJTb0VL)\k)24oW%OQGD/Q<(Y.sm;DPW7.tLuL2)k`lss";_tm#^d\OPTR\?
$+5E"Sh(utliN#2Ks;hr$j`8\gP\;u1SB[86DO>bfX!j-Ta3Wb3D:r_j;9Ek=$mRM
MMr&WBad46XGKj!6WiEeE/2%F163,*^,W3Ub'1]/+:p?M-PC4$K8u3Yp;@SVNQD>R
$_,&p0+H%q6tAGJWntN8CH\aXV5s_U$lM5gglZ\96=`hZ1bli$KF\aM_W3(0+X"U:
KE6_tN!_GVb'#^h-,J8I43G?*R$8a"YsYS-VqDlC45))B[>Z&,493qifg1N)A-sSn
&qO8G$h=l:8#]?>NJ_A[F8M'c?4#D%&jX7PJ:pC6E"1NS]lJ#)oPG!EiXM!L`ecB<
nMcKh@3=G8_Xq*Q$:#'Df#>IHa5INKoO<W8A!=bt80Q%ue6jJ@pc%Dm-U_R/Ci(F`
B*a_3aI6i[qL/hJM8s\D*dhB%.FFE&O:[Y=/En-+<0.]:e&N_l_s*2;gb>hrNQ(OQ
(\DL#R+TNrLT_j>-"@\3OFiWE@R^oa60p620e((pEX42D2n;I>69n-kqa;F'a,GgE
*/7(#_`-fiMdg=U0\FK=%][&m_:g0IHi-I.fEaSLOs#B#>::#gZP,Y?M!64Q+IL?Y
2NAtn824&dYs->DAdpl:#SP+JdYj(>`#)[sOt8SPI)-2S2Qg48bET]aJ=4(pCWhhD
&+mSmR?+,A[?m]:N9!Tp!@s;mk01Ka-ocu-[*&cDk9AR!*Ad1YN)WN6#*G#hbZK]m
P`eIf]hBS5[ucNi/E;li"t$pc:'Aa"`4Sgf-;L)?LcjQhUM,V/.[TM)%=*T3K$Y6G
Q-;4P56UP=9_6REoSZ<kNtH[DLk;<$1<X@[bFC=#`)"QMp_ImIYUJ:gaV)h%LEAh^
2gQ@cJ]Fi_Q'/qaLtr7pC=Q.52GAe$&TUIi;&N3Gdh'J-ckqMId`%?bM9k7TS><l\
,#Od#@?N2W9N;if;(NlTER@s%d5[AdC\6#iNYj!4V4d,$_&3rP+H,Qn9C/C5;@KNY
O>k[u%_LgEr?ou=".rb$,3t-51=hCY+HY+sbY^=Fh&VFp*m8<F6L>Rc)QF0;cm9T*
cqtUFda07^#Ig^L$^1c$U;,'Zbs#u-U>d4mP/#3,C6;L1;CoYB/=!'9c+)!Ue7!@E
X:3@%6dutZ;k6&_J<!UHUf3qVO'N"=F'mDCc&:h(d\TiuN:N+E/CaVs%kJ+:rCp:$
1QXq)$-=5eV-CQK8i/70eVuFcE/0:N]iAbp<[C::NDqi/1PlP5<=M.>I:uU5pI]R#
<aA'VogCYH@]o3[e<LKn3I`sa5seum`mF+2$N(9*-8&`eUgYO*N$]+9dj/I!44SYN
=s]tR@hh.NPO3VEGmK=m;(a$^&La8K]3($OeC[=:VPCTOT\PDcWn:0u'1I3oaQ4\<
KaCb-$HWdC#f@Z*cIiKK&6/sp6:G"G;HW$POHB%,"bT0ge#;LJNK`M2K*GJOJfM0P
=>VWi4e)h#FVjVu=;@Qh)uJ>SriJ&G&(Q2'd19>MNeise(\Odh23P+IITgl@=7&r'
Fa?`#e03q4$k\31@5+U(_cV`V(V;XP%:n4AKt,O($gSm:;%1/rEf1BefLmNVQ%3"k
O$liofgWS/`HbMgSe<L]Ntlh.ilA5)S^^*M#U+sN+jpoZFjQ:A\SG!/ouR['KdY^(
2=7GI8j#l4X?*#6RI\(uBf%1_/$a$FM6U51!DD7ek?Y$f>eQ?%i6)b&*NoJH1M%\&
MmK-@jOl!fO/bfAJa#/r";HCC,^JV\Q0ZQi[LWNBf<Z[+=m'+e:P_%7'<o;F$JLF:
#L'h_3O#SlCUH`<.:2l)O`Foe@.rJ-IBBTVTL*IW.`5TGA`+5t?XTtfP3t\c@,Lih
%?_.Wj'^dno[aGh?sW$TKI3t>NM0AP?^jjt-4_N)UL)LZOoiTJ.7)"6jJNb"M4OF.
JFHrNh&OR:3IU_MNWZAEm0rC<i!&XZ`YmYgJD]3!50`Rk<VPH/[O5YIO@$cXY^rnp
g6.$P.\N!bXs43@+C9?c0Qnt*2,U")'&ZX]:p)44Af?N'1=e&B+5uB7VDDV/&Q.PN
O%Yr%'G$l=-(^4k[Be;>>lC7YZ!cZL.4dntimOs'24d8%%'Z[r>Y#2k8E3DkjK:dY
*\?2d8729`=I)ArhA80kZfId?#TH%c7"5^K;d`o%hKBL%iuF;+s5C<"gsU6frXN@g
Nj;eOj(7<0`a=t@0Op+QW9c-Gp1+`",9CGu@AW&IEu@t<Ic:i?Z,@GD:1R[_Nf."m
k)r?]Ea)#6X's[Lb7RL`p2f4s;Pc9j5*dMPdU/)j%H!W!:jQ9?%<H)grk+?1A9p)q
`dcc++[cNd8"GptXO1])"Peqpc8HmZ/W6LJ$"=AJW\p(*[)D!>`7j=p$q0Jji7-Am
L1ZWW@`?/s5"5ogH>!TW-oR5"Xg&>cf&o@bl)]0i%7df4p0!QK?X`p?8lH_70B_X_
6G+ZVEQO9lGA:"s%."[A6R]<"V29(F14\%[E;pGfUH/R9%=l0uri`i>f-)mS/<IQ$
6A;%"cD2HXLcXuH5lt17r33E"CS=_/<<J)WAo#b^WZ`?XW=0GH]b0A89=%e<rklgr
n_K%*C]K8u8D#)o]TU:JiUibKVS*G0pT!XCCN0!A?2,%`&aMk:@OBQ?\c-G@\EdT.
D/'#e/OI4goG2Obh\mBuCq0h5Ts=UQm'sh::'p5i"eRof?S9lGX@TH&T5B&;SW)Zn
rXWG'ea#3HOl\66L>Ffh2/?$ICREP5rVc.BhG\"am^CiHk*e2,LMd8>T@MVYmKn_.
i/"I^Lj7D+Ie.KBOqNf:m5[QnNrEr,hEmVCU*fOF*qflM)):c>3%>+cb+9ofM!LYV
D":dELC#%dbTR152gE8[`k'X6%P)GE$l'Rt\QnMj"S"PlmZ_$t>W+5.p*dkbnD)p,
-KGKSNLi4\ak"@&Ou"dF(iBuF^I]ts55\,`$Kq^;Uisr+R'Uck*UJU&%_/kY`7kQS
G\t+&Wm<:l<t$oi=s^E?DIh<34UpA4+EA?#%8'\I/hlV8\S2!c5q@*iX]+W`Pn;Nn
n\nn3+U5;D4"$(/d'6"kmeh.@+7QXM#Tl,>J@Nt8&b0\g43]kWB-_MG%Ht8mEc3FJ
gNW9r<M=UQ+(@\K6_eViUKaU\ojSR#^kV&-"XjSsC_B2K9[msEVJLFC'C;`8D7<VG
;!eb:C^krY\:e]`=u'rUP$Z-D=KOQjY*/[WEc0QQ<4t;Xefd7X-Lj9s(=<EnCGsR/
FiS.Inc!*#bERb'fLoUqG@1%lbB!?$M*GBQQMpNLG]hGNo7)/\Y*G/W?M?*TBnoi7
rj7VCE?W(-G2:^B`hX[J\MoMf%\?=5l<4fZLI5]>U?m)JOnX)b9Z-%VG>Bb5)k-Ru
EUoKU:oeFAmunM@_-E!`BePi2mZ!#\96+j3BYB)o%mA3FTkT'3FUmY455j,aPOeLh
'fW$+=(c;UR8lIcE^DTamr%jEknf\NG/%s;Din[6BV"=lGjWpQE.RKj<YM=ACGsoV
.R<J,GnK%<OK/1\?`p(TW>FZ]pj[;nGnTCG7Wo?CoB)NH8&9,/U&6j`XPjrK^CVWg
l,0dte)'p[QDlmIaJ,_s+V(I_dWb/s.YqT0+^/ec0"fNP.D'NKDq<;$]Vg1=dW'+$
iAs$[eVF)[qOn&cr4b]G&]^QZb=6V"r[3+ZMDH>QBRWd=]2E5Q0@.d5Vb]h2UCh-e
Wf1h.f*L(cbg;$:0@PmHccar1rFm+2kKtZ;k'YU3Vh3M!ccMjXG5NP7De/FRhrEK>
]Rd#3$q8'2W5)pd)8\h[J[!dG+>s:U,?PN4@Q>@D#%Kr<aC$i\7&#dJ^u0,LNXWqf
+gctN16.=5Z?T&^C,?cdjhk5OjCJIY5j&fZN(dk))b;<Mku=s47iF^,<4MRPMD_/g
T[MPY/fP>%en]9*4RchcY`#M8Rio4M2]Ts,,6>m6*sn<%BGGb'b].`a$jG%0`=bU0
)rKpj4;JS=;[$%WJc]V;,W?[#L;PFQZuJ$WRr\=eV:q1R[gknd%3;re1SE"U1?#aq
?*tO[BHql$ZJW)-Ahe;Mk-&GUgW&QJNKtL?aM2S*0n(toDog44F4q*`\j*d/`qs%Z
7t*<L)GdM=I_a"3$%Z>O'lRY=:!8)cD#Mbr.Pu]8/))]73)BD+)$Wl@IbV2I!+pd5
n4RH=L+R^c#G\671@$cV1^s=7%;RlI^'kqnqD&JB>0=/0b*\bekhokC-*7g;(C&,`
@^dW1$f&QSO)fjmV.juLNeT;'9-hMk$rX8aN3a@c]e.TA`[sm\1=8^0F)%7<lk9a)
U+Be"KVbue+GW.E1=R:u#^k.!,tSI]QnR^^5rkVl>jf!UB[#TUc',FA[j#o.Yqa0J
A)\C_F54"35ZDfBg<.[a9hNEI]Q66b;G4%2e#TSq":#@aHUB+m8qBqj&"Qig-hRQs
T0cI.%m6NS6Sdu*'Jc@A:/FT$fiUdMd9A;IoaHj>o)N?$V3R<g.Q(30;QWo=HRBR`
N^.MR9G#!O))S#i\DX\b<3:4I'51e..nRE?(C)X2%14nT9f7=-2r+Id?L>>h__I+k
D0KB]ZJS.-Mu8J97FF_:Gr%FFHYL<IX'(,3X+dp@TTf'$goqOb#7?2B1Mk"Gp1;7#
jiTo\Q"G!k8TA"$?uqW1c9c-,ed`$]TWMBU7N,P@HQsqD%,)I80F56L*3kX,,H1mg
Z;-=i%E.Y5>iDQoN&+&LgP7IrAm;JtiPR[\^_b-Z\1p(8b,m@3Rru5LaPOqQ@FL#u
\3Vs3p;&Sm-P!_lHHueUV.nM^[3OAOB>-Ye^E0]$3H#\@-OFN?UUBEs-c2S@\mUG8
>oGG[Fin=.O6qqLPK24U<?&A(G^"D^VqW+uZL%QTDrWWWpP7C<F2k2olONK'em$O,
U`3u<C(IsI.0R3L+Fa'?)KT7.C\)o]XjsPZ9=EaCh:l.NVLE8ElR-E?s0hI@Jepks
,iHE22G=P<+!X>8684/H6Q?[E?Njm1O<Spq84-?Aln->H;CMfD&SH`VN:`4a(>h]I
P@Ek?'<p[iA3m6j2QX=n3CjLF@>P@uA_b$Ca&NT]EIT.MBj6om)\,N!_G@!^\soTf
$I2eB6HT&;6;s2ndj&'j7*6E.Z3C`o.sllkTa)NGYo$Zt!eLWJ/3EV<KhX[-BQ#VL
+`fFV+MeY:.7LA/LZDMZdRd3;N5RU%Bcp!k<%OlqK92?rhk5(F1B_DkXuC;i(7D(#
,l,>:Z\ZrdjI7C>i93.7*,X[4I5=8,:pcT`hTeK/13"ib0:1-=<h*#0A/6ObVn"75
;;Q&NOJY\TkXHTjT1Mn)SkA^c-5D\W+Cq^B\%*c<juRgW`"#6KUMN:<_,-)Q&L8`+
o`&7IcS[8M,d`sdps+HU:M%s-RF_(->/FYp.O!>+12Li"!LtS&-<.O^apef2S0t=&
hk&@$=k("1Q4YhX:o?kdW177iZp;3!=3,#&Gnhh@3ePeIg;f2"A"W5#+O92M4ptpR
C6D>=QoX`/kM67amuEb^$0YD;YR6G.79#cm02<o5"uIoLU600m:Ye*BWO3du)WVJ2
Lh\S(o\dOtC9HFSg/G&,h$Cd6<?E!V4?mA\j@98HBSg1N0?Jd!Ok'S%Ats3aC$r'T
Kgbh(8N_qHno*.Vn;^9:H`n_@[TIbY>ne#VCt,?&+):"VM9>!,29*g@`Pd2kh2!;o
@a>ga$@OJ`0X4T)rg7I&Q.!#"Xk&0[)S9'T8GVST2VBq=gAbD-c+L66*K!m0TOjc?
W\*q/N%#\'D_=sVX#=N#gljG8CX&&U=!YA]9,:^tfbPg.R`gf)$j)M^n[eE,o2HMe
;[Ar-?C-8V'""t0Y0">gGM2C8)Y8))$$fYgZ+/13d=%!0EdX)qN*pd3cUhVJF)Hm<
\Al^2la4@=l&Q!Q9(,TS7;+'qTY&\EJkiA!O<S<TO>+-a?5`SJJOhp(0m'mN*iljs
370!JM`16Do$\`q[#`*EISn?oF$]&I!ojHX$qn/HMsPd4jSW/FLq<f0)'QOX8a'gS
G!IVRPoO1AF)`M2#fOdX+-BI.;R9\<c.L<bREU):F.R>Z83UeJ$I4P@$WB4a9#4K9
FD=Ff6ZA-n(c(tg%5Y"?24>NA1E9UqC)tB%AB'MN(4Lq;L7:g3FHi!eqF?ORUM-*@
Ze#$#8&uS9?0qr2=,#:sC>)b?MW[3/HdSaX4%*eB`;S9oJsY[-;,I^*?^[(,<Amb(
[o%E1/s_uOp6i@a8V:S"SX>\f"=6ij%'=C;A4\@Rj.o:r]P_a_\lV4-/iIT#*V@eb
Nm4M\gMKMM&m)M8)'>M+JD64a.$`eSrCoBchCK]$Amp\ui/%,AX*oW1dK/dn8u3kN
R_'njV]:^:@"n&5*oq"63%\#9H>s#PFu`FOh4$7iE37Wr:_r!I4'Rs`mW6+ap>"JK
CO5Cpcp3H(Ze_q*`H"ObHM#Ltl'oNEQU>o#QD=PbL]a\u(Fd#=B3\Y&)DaOpj@meK
]]qWCrk\4>`E,2afD;=$-aOFnb"^FM\g7K]]m7o/.U_]1:8@76kfck!(0`s?o!n-$
V>=7Mg%5Ek.^&fVj>V6=K`>cV`TF@OWc9inHag@LCFV(TmHZofe*9(D%oB:(3olB\
En;M5cq<:eT%Tu+?ZJuU?ZS4j]@iBtK?fQKM"Y@]anX0ah7@7,l!uCapMEjaGGMM?
Xs__FrPRMU#pm33!RH#aQu"lseaeYIK5jco/Q0'C](WaDH]KZ-5!Q:CrRkpemPZrK
AFIk"CCfcqDY!OR4S6qWocOqYCdLRF*]$-%=0831jD8(7^?$l$B]H0FTO>CWH7.is
/`^G=K`qT)"U'Kc"R_"&Jo'H7NZ_fhQ`sFJO=25=K&OU"306Dcm?n,EYiRJn#OjE1
bc%r\W7QXX.jOo@A6e)p.1'J=->j%pmL2"*o)`e+#p^5$!\?sb1uQ:9![R3jirhCn
N.8_t4V5?2ONq@[DZV901SRu*81=[Wq$U$b$]qU*b#7RTK^pgm,%\d[@QNhZ3biEn
lqhC%UHZLjE%#[2"`W9.K<1^)UCsg"&nio#LdIE&I00O]:e5UjE/=_$b(h0U8'C6X
-"QV-dgNC)=0Bn+DP7*k/HR,Z?I%Dm@qPl-n6HOjLa/iVO?CS&V[VU,&[@?m:JP/6
)!tg>-q48ABCo[":t=SO2_2*dX5O^DCb%'0:MTfF-CD,T<$?7l*/!5uN@*3X2]%50
5jo'1i],-cHQHYB*iCbBOII8FqZ2iUX3pK&.ZGGT@S5%jAW'h4Bkn]G\n&)XXGX2!
,!)D,:E!\A:9f,_9jo+UL,h!a*XWJLOIec(;&q"EBC\D7dDS#m/;J7$.L71A%TaY7
cHl$$CsT%,KoC?JZ=;pp(eoT?jFS\pm3G$d@tYEUEePr/&7#hm71jJa67O;PUF9\;
7`%V=nfI3HX?9r[9LmZrZ@4FDS04R`DGkkLk_:SM#q_=7ZNfL:U*hLG,$a0$Xs/$U
"'.MsUrY=X,[r<#7a!8jFs[;t0@HR>Js-UPGm7,%0_5H&-<A2coI5su/o8-PA9]QP
36=Kh1I^jndj!93QJrP)1=2sLAiM[=`$OTK0p9@%WI"ZoFXjIn.>`g7ZOn^FjYsM$
4@43YVi)st58[;/37?#+7^,0U<B*F,3@D`j;hC7NISPQZ-Y=k_Z[FX(Y#Qh0a3tMI
1Lak9MEUO,4OVYYjG>t\oH[A'.O1V+OOB[G#mU[G.8r_B1TF9(ctSZt"#.`3L$'#R
C5`A(JYY'%F:uuQ,s]rR.jAGVKPa%T&NsdY(@uSN:!54#+<cW/"[k49"ceimSkoRU
2RCUhV9(+6*&A9gf>?BE,>.[:=J)?lCD3qNV=HXm.V$X".PsJ36Wti@+Z%%4Cr@\J
ijgmV&@-pm84[GV-T=I)mP0lk*o[P[cL46pX%"RP1?g8EoO)sO`^]3M7$@^GUM*.3
Da&qn9+d"FNp0/8eGn$_,B17i'U^AH4\4)P;:>P9aBqE6i\hKk23W#LOil/G$7Q[2
4i7&&1nRU^SK+tE9!jIG`/`[Glo?ni.()5log;>*7oMl?8u&(K[7O8p9eqsh<V%jt
'Z<:7k1T*F4`k4*a'T:`A6rf*TO]QSF^%9H]^>9V:A%MpK&KjT79:4[V)89A<IF?P
+tf,k=!B(pAZ8\V)_/3U,f56sA^9%",^n_.W3E6Wa_Hk\,UB7M@$?]D2+WpB#sX6B
?Ie%cAf"E(hZepP/P[s(j6VNnqd>('4KdC/doBZ%VXl'M>_?T]-^o`EF%1iA.**Vt
XrCY?7Q7[Y->XUD2E=!^ZE%MP`*tES1MS]W7q60^AHsYq67$53Y<S3j<7C9R6MdAW
BcSDWa@u+_Pn_dT<mkeo>HH=!K'`>-E'GT0.W&R?O,mfs*g*`l>&1Rb@TL\"mq[lB
HH92][]IA?Ea!9PBu3R%kNFdH^b*IQBh.i6%+I%2PAFf,`1io?XF<qJiG+5coP@o%
")>kf3p>m+HD5#oKe7:FHI)m>YJt6MeqWTb!55iQ=r-8CVV79Z@;5GjXeH2@2U9A,
r%9neQ<(UMLk\R3=NBXL-g]eHaCB&nO"9rlD7=%+b6CVJPBWrJ4;(Y4/K6O5F`4=&
?R/s771LrZ#fdSuBpQ+k'TgB!Ui`]gHI;$C1NHC19M)&Zi[etA_h36Q!*ogeH/ch<
`Z3:c84!ANBHuOB,n5;mO*1q4JAjTUGNc3RI:Ft\9;<,(,qWYbQ[k.UHY,fT8MH)3
8jERH>4a=s12^P'J>W)P#1r[',2$u2-<,ocP'B5u=@[l5Ob3a@8OY^l(ciuhMGh?-
/4Qq'kTWja.cf5N/U&12j#;YDH#J;a=9`N9CuEKj3F*BE*Y[mA6\&s]M+/e+=%1&9
G-mJ+Ko22WhKT<$%/O3g[qIb*CKFo@G+*]dVGrXaKn<6[\CD\E8TMbV=mG?],i!4g
6;+*dNnAas==@J,&65IgACDN6\#M`]B\"".G_dr(Qirs(A6P"W1WAM4,e6&PKep\E
Q_J"Zb98PD?Vc@ALH.RK.L%)RH[F"c9(FTSeR_6R=?>S53,W?$_n=5M1+NbBQGsq$
'=4$-^3kMeMj1?0X/7N`^3\q]ZPej0l38^berpoXQQfFgJs2J,T:+kOf=2$#V_NDe
Z6SK;Htb*k3PoNdIe.j#A`h5uV`%$KO^Q/K&>o2m=[85a$@I-dPeu5mG9TXSco'lT
:+"^eR4a\4UN$Su5%OTY#(Fb8'\%Cu7`RR7=sC:DE0@BKU<?8&3\iC8';LU$F%C=C
1GI9nYG%gCb\YdXm_bcF6"SH@BDB6*)0$R<856G;:,C!1AuJ6kE8gp>CInBO=[nET
#&%%$LC(^J=MS0f0STk<L?!e0Vm0JtWtrq0MPQ\gA:SG3&84O^I4#o5=M[Q5eo6O)
N!Nm)Jg4.'\jf$c`25<mp_'a@*\2t?1\j#5Vq*-)>GMfiIKurT\8,[pqG.2$C5-%U
q\")'K!r+ZH%HJFk!<dOqMdfLBKGG%8CAZ.2kuR/G7tZr(:?WM`f?A`92X5i-F^6^
5G3X.Agt/Gq[Ku'Yel/RF;k7gPK&#%O@_M+[2Wc[5gZ&ij)c5%Y577%)^V_8G%Gr(
dphRO];)Rr9;u+r[\A&K/m#C#%]kWIO2NN-_br3M[g$'G[H"s-gX7IgduikiHg;9H
gDE5BCaDK#Vjl+n)0WS!<.bB?0g"qLdko8%WkkSk<@,r6g)$F)RDA^rM)kPj/&YL)
W+V#F9:RX144?H!FM'r0W/!*B!`UhI=2]hU@0?A/a4J!cTn,=05oa75ldAP`>J2"n
`8#FG0Aja-4b1qX`[D;8\_k$E?cW=+H^c4lD0[@Abt*0lLKpLUgn\5>b]@#m033\b
OQ"4]b&'i%OnXjPbD?>pWB=7b9WRNG]PFrF(Q7feDHt3M$MVf$&^HkK8,13CiZ,nL
eK2A!aa5V4Mb[-M`$1RObL`N9BXsn.Zc<.DKD_TBh%JJs!a9uC]MN7E6]oJR,[%$.
WT'X?/tsg@>ogel,'sH(UIE]DW$i)L5iVhg,>/I*$7SCLm5!N!?#Ht(FEJU$_P9_Q
65h2AFu*feea8)Ior6PX&^Hq`fR#R1*Bnp=68YU#,AA+IQ*`]&Zqd)A@di38h0n"0
K@p><-(Vm*U'eqTp7XrufV`SoC%`e;#MNZ"0l2Wt?1Zk90Vf`c8Jol4U27*+"snHk
g1,qAE`(Vel/9IBY@J\:V=WNW%l/Q9H427^6kOIQTOYo-hM_"UI?Id.6`paD1o\5p
m"Si<;;$r9J\GHth5/p*5?GQLe\/8^!Z&k+/`D.ukPcRa?6eXMj+N9`iEb4#BK/<D
Lb/Me;?`:6hOp6As$l(_>i"l$IAUFVC#FF$kGjD:h@n_:aEX7t-I^$&,H9:$KAF8b
HsSbd*ksP"?0"1flU'LpSmg6b<PE<u,ee*C*W54$Hm\k$i?lc+M@_*>epF!=FGE$0
o-<fhi.2!lgHQG,/Kg+oR2\?soA1*,?:XNdeB0=*f"Vj>!cU7Bm]^%XS6Tk'-U$%t
YWLJ.hCD+fT-,do8t/toj_*.7PlKNnZ1>XCW(_r_?Z5Hil1jB(NsFRr12b6!VL@?A
qE9u<1TM`BNSR+,nlt0DKco@q\BS/>o\Z^=_Fd%&(pX(H^rX?oC$7Oi_>^'jYUDr?
o5Y%e!&kaQL1>4bcp0B(%Rn9[=PQ/Y"UuWliP<rZ0ndE__bm)H1i/#f7\^R*g,BEW
%*#%c"H"T]Jdf[ELtLWk-61/T&Q,(HD$h5?L;RGuc<hfa8S%@rZs"8.V+%-kW)Yrj
3KI'IO>nd4SN.PsVUO0;$5[+ff^,muOLSgW(r@cs$Ig8HD]6PHUPb%O%1Sb!W)QAH
,4gC+i<BsPeOh9:^.0Jig]bFPF-O^TneiI<@qgWa+iB\#Luo$^`ME^b#-1iKf1>+8
;9%HO6Q0h+&LaI5DE/P+0!YMt,"FU3%'rd0`0SFUOjj(mENOuo>FtKl*GjSu+hj.u
]"NP@a,`e@lj"HbIdWLU)L8i%iLnm:^;!0e?V5QPQF"Z,(p,s%<!'j#NO+H;\]WiL
J\hn+_Y_(rS03_AC:!4+6>:sh[t\WJr1(S7r'M't0Q]MbL*<ja]#(V6G(H\j@\0=5
n9ZjTZ&0B+m]EVFhASosK=[(t8T[`)8BJFK)l8\Ni?$,.j0'dQ@E<K6a\5q\Zb<H/
(lUs^A*jg`CER<'6Ks]f)DR%Yf/C>PAE,NP'4b_RL9pN51+9:nm"<>Q)W7^=F)YB<
bq=#fj3%`K#_K4<CnW:*[%M>12R6:'R8L6^)'IE7,Rh9)1`ZAk_N2Uap-$2h`k<\(
i+.lmc^U`8L6&^!UfS<'ogp]O>`'Jte]!S?WAZQRYZZ$91KhI#Jr=1gkT]1B,ZX5\
Q%Tp7@Y3@CXaH(^G08\Yd8p4pFflC3SSLrd%</YLo523qVtUfrq^>O@<ngF%q?L1[
epE0*h\NjfC=]E1%tM:$UdF"Npi("#\J:jsd&#B6F'YS;>?:nbCDrc]4U?aq>rq24
`hBn5c2V55[]5o=8h!3)h:e9k$'JZhAqV*OEf6],/jZ>YU#sGHa)^$n_n)DrpL%WX
/<jXsT;B#^?Z0X3,DW8V!PS/P2R.Q?LBa+]b9*Og%KV7>ML(>CD[p(fU=#BP.CipB
-u542=9^`)j2s-5^N!,RFd'6cSl&Vp9Fi&=f,%oUP\,$sF1GlZ_N**rEf8"oED9[,
i7EnsE?/S1.bi3<SZQsBG$W\fKQS#b0\J>]f+<kPf\S^CGmiL+KP.dKXF`OGL@OM2
hP,_iTQ=LRl)8TBe)g,5Qc'hjT#E_WBi#%cH$u"PeqX/$-KX`p.Q8W5q4/*b+\(jV
(ZJ-c8g>p'7-/PK#O$<&":6dK.L),]Y/(N^\:0L8[&`=mDBG:X2f>$j+sqEoT+NVm
Wq_?7=6@g?F"fobRI(`@9]D?T0nrN4O:Z#CL1-:?E<cdAZNsUs?9A+!XMPT$=/_So
'Kq)Q@DinB@,GA!*d(=RiA]<>;;dXoM9Vj*Y!?t/*(!MQ9KE5CB;kB-KLe*5<KrsC
'SK37[ijke!$2eQ$mQWnNsb[:2^4DOMg5dTX,1(0`^k+q0b#FF]]L<WGfc5/`KKXo
N[LK:*XET?4/BBC.![fo%)F&`7MMs=Gnb#QgjGAYr^@JE:.QW]Rm-B%=%-8#/gTe@
O5sVOV`*,PjI0kH`,M?=3>Eq%gp\X:63JR5S6k?/p)m9NJ]rsgc"3&1Qmt]g.jF(&
j$^"_K[f6&,2UEZm-#d[W0'hQ4#t_fLbpm'EYS_R4itm%2+3%B_"mpmB3bQlF:q0.
<4;;OZuds@l2lSb>!lPRlXPuUXtD1RZ=EN\2T<Ie1A$,=VgS*3.jgDm,!SZD<>dB)
)N#1SE<7RT$mASfRC2VI8-iXd3q2)ne(S^u'u1rj;!g0(b&BtpF>u5_J>j0uE/glC
2'@SgO;!<"Sgo:OEMduH1KQE".f;9)Pe>fb![1Xm'iUhP*3`H<.9mJ];'T(ggX5gJ
nJo1*,0;6d=$fN5OV'@#2'T+STO_8C4b9bY@Yu+=$XaV&"g,jr[[NZ`*>b_EBCqIL
,3d[dSC6JnMM8IZjBf2?'hM>gf[X0R5,[[;HU&?GeW=g6D9*?Q6rG%o=JJELCD"`h
jO2PcoV5u/3V'_(NiCfdR<0n3qPeZ^F^1pp_A5kp\4n<19saq2X_k_`FBP.Y-&u0^
'chM)cISAnKm--8jg(o_e#XH;k)_;A%2R2q05EmP_9Jd?G(+%-$]TUL'r\<-lKl[Z
)c1?TXg_0mgK>k-FNmtEOYqUUh?#`EllHtHQH]u2HHfJBq/)XB@a<^hE8U(1-&f13
Oqp[]<Y%Y[Sn.Y[?s2fUE(S2*`7hm9/'X4cD<[hDMV7(WQ&gp9k/K#Zfqt5%p`0[@
bB7'[:(!j`N"P9Y=cF_>;U/OQWAl$0s"H,n05kUEFiRY5<amW3+^H#IL0=$0j;!*9
.rH0K6l.mAS@X.?aUM*-Uqo'mr<F)R2gX#45IS5)R18;D-TZ;0e_NM5MVU@)PW'_j
MXc!bb6HLAQA4:-?SD)0\<WE5lSSP;]*S?\/ED(t(%R3bnqP$%8;43_!f2Z@)1djl
X&hp+r.JqcbLJ[:ctgdJWA4t<`O^<dmIDj:l;!c!W0K$dp6Oue-&p,:G:ueVk?=1(
YrrC*m)h@Uk-a@I."l'3d;%BThpuJ;#6K+5XG`Aib]KQPcO*kJ0k4Y2V8-fO,pA#Z
ET'hZ,mU+^]*g+J.F/soA5eZ\*1t<.Bfiin,4<s@.h$],+FtLg'5m.!KmBRFQ5oVM
S/LY8X7$Wg:PdBgKC%#\mScgghj5F3Rs_eK/`=R9GMnp/O_ZmYV,gZunZu<J\dr;M
*>7UT7:b2Q_/%EYa`9HVHqcR1JN-G)UD:_)rf6V1:$B+.GLTpUg$4AD?*[-eoL`;7
!ZA%.q)I`s*TPJ_6Ln]#Mtm;6\W^Q64VeM_[P]Aoaj6[CLB+W(__H`=q_^h!QcZ]8
6fHHBEUTHa:jW-Rm$;-MA`!0q6-4Ds%G&r%A.[SH*tNr"fe?-RGHH1S)s[EUK)0,Q
L03?)7/i,&[Jf:6r02ai]X.b:*rcoK)RO6=J)3[:(<(aH^7,Z05lH$GbXQV/MgLSd
^4F3J)Q17fmQHd8'@[(H;uOG2c+[uG]ArdkKAaGR6'&VSY7oiWo@XVJ=[:G;]AVKT
Z\#nQgcg7^OFfe_$g0[8RZ9J`^g%G3,T""dm>l'!ON\G('EC>h&O/(a]Y"N2,S)uY
#X;u+/E<NcM#"7%33DMa^tBTjb.0iaRYgi$Rh1l&ZgA)DZGM_8V#u=,H(`$m-G@>M
%U6LMS12<ritd7pM1Jp:"?.n7d[&744fG'4M:f_'h3;_76efp+&Y=nc3Y!,k6Nf!T
C5O`upQ(acM^+4;@eU/Th^F?N.eD'+TWSstnjJE3X9gPuYfA/-a,pBU_i.+q`)ALO
91;d=_pLH&o.5rIMPJq0YT*'DR$&'aJsS`fPH-JWCJ#+(Hl"$U`Y5jBq';FP"\#)H
V/r"aUgk%!nJ4+M4fMd+,@1]BZEX^!(^osDF<R81oJ<1j$q`cOHOl1TcQ-6#\Y<#q
Hu>h!JN7aG`C+AM,\]8XQH!Tq+WG^Il!B;L@D1H-a2(1MU3n19d79F/\M3-Vr,tQf
OiWB9a"WO63C073m6).g`tX%2UW5k-D9$aK]Vpb%3GLlRHEil)$u@;LH8:SLr>tI=
_Ko"TTeHk*gUX%[&Cb!L,[q>c\0@mTP"UDHTpZUbUrHOY`LKFZbDShm0aY)_4"RC%
ks#dpU5Rd''Cs9YA?X!TJN,q'`QHuHFK6)9[(^!Fb2ETFd#5L5\4[OC6(*a+.-!s_
J?5QSRS9d*_<8mZYH<oBQ5XS[M'fg5$_0OJ9IRl^+V2eC\[XB%b\Y3V.agHdGq2S5
#S_="!9L2%bq0&"7a`$pkg7LPPp!_n3&2&Vr5Xf0fG7tE9m#*Qj0Fp1?QE[pat&1j
)TJ=>+ePaA\YB$43<;bAN(B=jX][*:nmAm0aUEisL_So0!FupL&#-/BNpP[raTtM?
^q<LsO1KM%iR9#46P5`%$2M<]CD>)gEZHji1fX4j@W`F(r(P8o,R""3$Kd?@!)Ham
8K'S,E/]^*T:8E:#V5bu@(<3#QjE9<_i(\"+kfb.qP_O*:t][k>mq"0$.*[AMSTm#
H%]$X$S6)>:gi7bj>dU8a=IC/Q+:`Wi3"U4R@=MI1j'4d@0r?QQI61!d*](n'c51X
Lc;:.STsRlkhQM*5#Qu%/O]T$TprrW6]#O+$@,BEj>Dm\q$=;M`8rb@qi`>.1l-!%
U$.fR1c;N7".Qk3%1FdcM<.Ub#fP_(&%r4([6I$:!KkMQ;p7uP)ChE5,h&81*FV+=
_'i5&8.@FJ7-oYeJ_j@;'F8P@e5N6EeL_f8!>a--RnYA2S<gd%:`Uc;;UIJ7;oo]B
>Sm<$$ELm,ZV"'U0b=qpVtl(sbqqV;8VgNg;e8SP"*bt(7ntXD%U,8tU?Ft&\LD@u
%QL?:WAGF)51\4@M30C?*GNC+Y6h$eeoXY4pr8d4ACWP[O>TVZeTD1do2Y0S<o%a7
%9ul7<tBkoePXiHA&Z6pS=9sAeH<o*_GF>ondD"$T+XH?\GK1*))!HHe/`JIHT7>'
=ft#tZuT$09odWBg5%L`fc>e^]oSC.*=d@L=I?ddq]N3bHs)GmZgdAu$LJrNOU,Be
SV`EHdid?>[Fn_<fkV_`d;`=M_,,upg"iH%3HDS\T\3m$f\$ZBZ%#plSrHaP8DTcg
SZe/m=B`<iQW:>Wae]TT6JD[H>&&2l!dEA`a#GdHYH>.cEY42NQdB6?.\(HMiK6s)
/R-qe.QF\j=qk4%ADBliS8)$Y&DJ1&W0[j:`rW=dO^'[[5:[J\M^9g_H\#G?hHQ_1
fp0Z)rNO`#eD#,R>%O[;7Ch1GfirI?>KI/Ec**f%c.i&d>Wp>9nUt.)bTmqG>%P[\
L#+Q#`@8dIh@72crQ?I.E!UmVP+[uo\CN=5OLC/6h),3Mc+r.h/RKMFgA.e<c(PGQ
_[gLE;C0g+nth>W7N)0>Lr*8$H;Gr"f&*%-$G_9o9+m98o\['R-JeUSOZAT\[GWA-
&0f-H"p`n*oj>=B$JJ@j)Z!j3Yhu5dW$7>;E@tYJmC?6B=E@\Mr@j$j*0*n9b$kOO
`@Rtq:6q`9N*6*ZjT[rTFlCF'Y3"Qg;L+dHlF"mHiZQd-;dA-IS73Zs_bL=LrNp"T
(Lc.Z2,Mh3ppf![mol;,Np?-B*SiYt0F9lC?$7LQ2@e_gB0UX0)qiqNMre,^/X0\S
(tKsAeGNVAR0jU9M:j/a'tWAt392*n@NoKa0osuhWN*gL?*64soK=KhjIWG:A(cCm
lZj=&;2m<:T-D&iinuW'&6pPH)T"i$Yk][3N0DXPAQ.uiiESd=FQJMW?GXXW:*L!F
4C5p1.i)$IrUX62+rR@&=XnaP(n,!26JZN;j+]j$h9k;&X:6nkR_9&>;3hS5Yc?Xn
@kMO@IM<D91?NIQjLu7;aPg\?<+Ne;8Ch4N!:J#kGiQM=hKk1B8?j@2^gm?cA5S7r
Tj;5a?>$g_jf6gD2HCd^Wep^1kR#^CmHnQ=[A$9Lh`cbUp(Rm%VrrcV>cC2)emi7q
AE_<4Nb2p;`a[rY6Y?%S7n/f&[W/8VEou-p]j>/-(/JQYCgP>aaa-/d-'&WIY:_M\
.&FddYa?jg0cPig;E5r&63-)TJ*LXFY-O"H>W<"\VOC*Bk5.bc@'=<>M<R+Vl5jKr
:9Ka,.->r_Q2qWRIC<E.Y0r=WCCK3Z>sYobJa1o3CYXo8<e"[UVJEl9ipb$)fad&f
V<_WgiSL;eCB3WZO'AHo%J#C4>eOVg.>m8k+(`E(:=#,QYF#2klK4l.hA6hpZ"iQ"
TanDCAttgSO5WOrOe/7Y7[%\\TheDQD<p"_IVe8/ZnJ,lCSUalh6c%YRqsh^ib$\V
#/f`/_X"I*R\$Ho;KfO(3TP)(mM7qF-J[p)aGUh4mFB*bAYe^BUi!LD,:V-^HI,`r
3Q9RnS3WiE7eQ4:0IWdVMC%1qB)cNZ_W&Z]n&W2snlcL/cQ]>Z%UMe>*m]^gT@mOp
E-5D^Y'I<bc_#?)j`JF[nF@6LD!mV8N,X=h^4_^g98P@IB-qS;)3QOfltsb>E7P'U
3<mm&jQumLn(mGH*j4uZM/@.DE\>hN58Nejdr@SQn:g%=+Zf/V$_%""Q9d!>h[FKD
-==IJ4XhXrVSVb3+DU?ZnV73cG;O&\D=A=DRBI7kp@`OKAa[jc$;S`_Gh__Jrbbda
ig%<!qge.m209p(B0bd(2YqC%$!_*_En9UJk=BXe94t-;F(Ze7rtH@u6)fTCC1B5-
D]%k]gU.P/EYd[+(HH3\`Gs/-867;6LI(C[i+oM!=JgXl:F7Rm=7mpdFmg(9?U9m:
?#kE=EfWk4m\Xs++S;9cFH8pu?S(iPd<&FunL#7AlABOF<VFueF`I90N^S&G1#eMo
mE\l*pBkiBFn1;kpH@@*a("Tt?u=!bN=F9Tf\JkPfkK>"offTorU_i>RH#"d)!#F^
=+Z;.0dqkR-*WMV.YR9rKZ[qaP)TKeJBrIMUtD<!MFd@LU/(%m#jFnE6KE"Z._th?
L#C^F@[E!u%JP_7rbmRULmO5lpR<H-(jVMNH%sW?PG>Ue*+2BQq79dUb6,:e!VltW
H=<E3^Rk4%UGjdR_pG\0:TFg]Uj4nqG[;SM3gk:iNaaUXCdJ&dU)Y<nSaR0=.R0jJ
6%!4IZ49C5("IYDR/%D6]G&hB.1#X22mE1Mm9r8N'N_qWLOF(/W$QDK@$nBKhm#S!
O,WOhqIcu-GK]i8CO2V\Ge_CJ-`RlDZk"P*@ZZ2DQb3oR^<g8uqiAT4,JEI\]6qZ9
oT<#bhml)B_gDbVID=J!CJ`'tee*?9#Ve16GLPPZh+X0Z/`4_$-`qd:cVPG"GU";)
-ZeB^P[k&lZ-=joLV*Q;Dho=!ZMGO[hU?reoQl:)rssnbGHd$MmHj<6Idkcb5PCm#
W":'kL]Gq6+;kVXio,F/BJU2=!CII?i*7uU%#5B[Yf'd+(dc.FfQcIt/s/DlOD%$3
)%MHgi@pZ^87jlCaCJd8Ls@XWR8"u[Og)?53>db<0fZ,[CClVfB2CVM+r(Oj'Z!-r
f[rG`&-@S_O`8BP3?#mA&j_?%BcsU<Ku7??_KQlSN?GW$rEs4r),r5@MsLooGo'fU
Z?^E9@tLmd/65D$U=D-0fPG_.OP7u<*(ob0l\3M,7*4B,'oPW.[@*"\`YcoHVcP:,
ipRe5/b5UB`FCCJJ]2B7NM)7b'Wkna"-aX!@'_jUN,CT"D<N3nD&\Wq*/s6mc=jhL
;p<q7&_^9TMoUcGYT%K`9;jen?ho"dOPB$e(O%sdZ@qSZO7U**^G"?Mm]<Tj`:c<l
6dXs<kb<gQL-_2;gS!NBeI9:`]JBCLY(RkfL6#":Osl1A\GjG2o,<am6,Zl^3$GUj
YJs,?C@O<_]L7kd0k(X,0FbT=V^@3L%a9\81JJ=rX?mKT_b*<I-;(DI)"G-C7%G_c
M[Yk#6`l!XKSHf/%^H;E"NKWHBggc:/+.N%K"=^O0(;#B,[0HDY[eIZ1Jia#/&Qq_
%.ce?'_=T9P!i:n\gTg_*6_%O,e5,#N(g'3.MMHu7C-2k'Za/<D]GoZXEkdToV:SJ
8>rm_'[tG$^s5l$I9*,AZt#LL`/-n.77qUM_^iTfS=<kN'(jF<9bYL,2MSPc!CFqp
D#H+n.MZp&2sSPoY-4mIW#Iq!daGb0JW8;$?.,K_fI&A*s".S.`V/o\YI!/j?nFNY
/`01?"a@LZ.f-K]b>!Y`f.6-j\>YdsLr%r5-19jN0J4RMT\/BZ(p*/F:8l`=XlkXt
(uAP$j4T`42kkQ)bcBP0)YtB-JYjF]TQcu\)SGb(pHd`k'$,en0E.*-^9i"rO(_2K
M#M)3Uk]4S>4_38;n8C)\j2VeTVk%o<l)-/HCPeLlI?"^H+9tM/IZ"nElceXnHSud
#8:G6XR++;Ff%UX9)=AKNl:*"?I@'9al[>%?TW'X]T4X8fh@=Ac&3%-O)P-#B#Ml[
2YN2=d^HQqfptn*V'Zi*PM1aW\r/%5]4:`7pf?98V"iEeKh:R@j\;WDapO"Fl;To6
_WH8Z',3+50+m>C>k02fEQaZgeM*r2YH1].>L0k0nU:N0nZ"`VqXL*dFjC"_`9e1m
7c@1[SQkO@aM5--7$\`/?>kDD]@IDUh.rr\liGbH-$ogOX3b%I*SS-%Gd`pu*dWT:
%4rDLeR9(iJ7LZ]S/'IRMs3Q*L!99'dMTX=)*h@.UlQ?PC;lm_'-O,b[MA?[VO0p]
Lb'GcQNckNMo7u;kOEj]aHBke"9Bgr;BZd,.Lff+5Y!P2M`'^?AIuCj+L.4[7WUK9
T[>o^Kt&+a[jkf`JRW(aI:3hWfP1iU$S"]A(n;e]]a>)d+D5p;(@tl8Lj9b.Y5f,*
#pd1kU@_#+XI;_T(1q+DQ7aFL9W#*,;&.7G,[eFa'Vi<A!P:a;ZFI-5EfDX*A*K/T
b$@W&geNu"\<[UImiLKHS0[VM2=cEO+ur1e,dQ/[F!QUYaXX2nS<'*c^&q)$)IfO7
)Oq"X7M32Q-B-HE,SR%F:/VXbbk-aHAE:(oY]2UtN9ud]jGcf174Ms:PEVqRe4PQc
L'l<ZTa#4)cq.:d.!"YYkoO/(<OY9S_ipBT3aS[-F%9fC_D%p/N]c#M1en>hV)1MP
&YbgQaF+=OPf@Of,&gA:<B-N@*dk4Qj\P)_6(`6kIh],";5X!JSrE="8?")g%=),=
`<:f=H/:lKl'W]MH9<pmW+lh(+0-)^J(;W]N[Z_MWXSkqQa:^S!L_f9Fk!7g,K3k;
X$S]:ieJ*k="K>.r?+P3Rb/m@@1'sp:(u:=U2i*(M9MBgKS\h)"A^:=TJ.pq@S#1*
@#<%B?TXQWXBG[@BaYBAPVKUN8;;O$RK4V1PRT!.B[U)jM7EhN$:ptkqPK@.(F'JG
)4=-D?L@P*\0T<9=U!;[B:7JOA69d7o#>DSBi)D("n*-mqR`o8DD29PhGYrG5mn\q
6En>[eKdmmiaEWPLP].]ckU066(04RhYF&P:0XJ:*?^--Oq]k4JElP,-*oT>f)',^
Dk5oD'mdQd>?JM1^)4?Hf*3)&aC]5XVhl5V]+HgH?\m-h?MD=8__ri2eNk$c7Wfs/
bHahCD4J)r0KB>6'HG2=+:U^MnJ4Fq*TYIa^Lm]KSMDllT!X_AeXccYfjS]JL.2:X
rs7]0@q8Er4$&]JYapSoPN7YPE*1nU:Kuk<ZS$,Dmf:hj]]u/a_ZI\Vb<"PImT_PN
`m)(#L`Lf-h/8@7WfiJU+Oa;21jQ,Q8-IQ-q<iGtg,(lbI*Sp)Q_tFm*Fn/"P[=Is
OiYpbP8T9+(ddU:$P^K,(nDZg,VE[c\MM`:__1"t^dBu6'/?pQhj"XtXj1?m/5<]?
+Urm#F.5E>Z+8!5c#'D?#0>AX..cgh)ek=2+k_3]`m<'IG..LsTt=5XY,Ph@2Um-1
)j%jQAKA:hY4?t>l[%maEP1:Rm,*0)EO.fM^NVmEhtE[UmN)t&F_44qq);dsP"*'b
oU0'&W_?1]Lg09EU#Y^ZhZ0d2QhAp<itY4H(A=#+q*-%--]0["Al_cS:@TM#l,2Hm
EHaFP1#neQS]Qh!PF%/,TR@6*nr!!@q@-eC715]$UP<Mpant?CJYVi-gdc[?=*P`9
G]^l"ILbffkadL3DSD7a4%>2]/ILj`0#,oH'Tki_>GUh\<X:QtR`TrkH`pn45.c#9
kb[miaj0Y:Gue8(@"Vq[%i$Wd^Q\'n]#/b&l-FZaqBV2d=`[q6Fo5Z-n3(MTQNAPZ
4*aKk`K7(qmml^MH.XgH$dSUPCe2C'F6rmiN4]:!*dhm6.=V,(r#]:or^uN"88$7r
qIEdC:Xe$h&&RjcI;deAbGfRE2<\C*;/H4;Rb>lLq0t2ZPW?=;s1@pW[83sH-+tLY
T$aTf`M4K<0CU402#a89/8,m4/EH_>E/;e#r9Fdllh2rb(bBV&!K[<=YUkq]E2`7Q
rTdMd"mG!N(+BeT!ToOoO:(pt._"n287J7lcl2Y:IQHrN"je[r:ft1<CBKX5im/,9
iilWr`:/ECY3QY[Ug.m.P-<.fB<U=VXbcKT,6AF:6SI+!E(H@0km8S"6L1BKY[Y',
rs;<t$';HOOLF]].QS*=^/%"T-`m^e])`=fCgr;2:u^joN47jp/OB[MOOXJgTQ4KZ
%uB$PciQ"U$P5#\&C;"#7Q1oui=(eh.AMhQYmUn8&117!'(EnRY_:QRLrmVHj)0Ue
mdMWdR/!W8b"]r0#uK7b/IJ[9$LB2"6u]H:Bbfr7<T<A^j)Cu;D%GsnlJhl=0n>Ms
2&EN"0ThD00iDNA:6lJq/b+G!;3iEEQPdi:#3GPJAu)c\[i+N+)X<VM;8X7_!\GY9
)"G!LZ!ar:fYHM>*)P_9;.:`SB,pI,[;k1LD)3)MpA=3hr%V%#_T'BL4@@C.GO#hE
#*^<j%Rs+Jg5r6cc<TP\*-eF(,7N$FMo;T&AiTt17Zj_pXZ/BJdap6$\PaLp7./O0
=K4^-Zm8?kEb)Y9BH\RD,t]C(Me[Qi'-]1f,dMU/dVU:KGV!Bo,Z3;F99gppOX\_8
)(9,AWiIMC.^tS:DK:L@N4KGe3pEAX?Lgr.Di1_IL@_.i(.lll..mBLj<HFel*%Ut
o'deI)!RjIZh!0OnjFd_;F_)Y0S4D7P7UYaAM-A3R&j1LNC>F]jWt3o`?I:;ZS&eP
-G7H:P;;5?P;KqhLG,H6->@A:,3&`&j<B3M1r@UXdk53)RkX'q.'k%]ikI;VS<P7W
,_M&O;`6$:qF8]*2^11<'1PI9CGog"3Q4NRF-\fWO?bBqlphJfPD$T4)Z%d$43rgE
V:]^L:e;n049F@mPGZ@+QAfl-8L@FiN!MKYj?^+S/]-$Eo?cY-2`Y@^-W?lcB,*!B
.55B[VN.)g6tnoN(<&!&WmcVEBsd-%B*f7La5gXI@Rr0cmR])=0^N!2oA"Z@=?XOA
3$KY1o/**i"ZgE[h=NaoW?4)kpG&ZLpp;BQ<)>h61G\":3DP&o7O^78K13q.7ak=Z
oP$c.4>CPR0g[fF'UFf:I7'fDRe%^to8:M]EAri>5?*di1c$k-EB@Z+2(Q\:PF"WL
mO=tg2t)YVdk2jt4#pj?0Q&d8o)Q`R'Y1U;GOt)N,64'Nn0\nA0XMEKEnYE(KEY9#
p.8mh`O9=AhY';O4@5JZ8T.NPkq4\KSI]85F=&H:QC,'N3cr5Q:>."TA7!`r,]%pn
Y@K;@a"lZhg0uHk6b?(q$SOAP,\&m3dk:`DB(eW+0_LBjFbD=OK/UYeUebQ'dt3kG
SsbkBBU)7;1`]T[HU!^kO!_JCo7hUUr(6,$>c;R2Ji5LX!Et*l:ugXA24RT$?U]R'
=VZ[6Q0'[Y<Eh>8\MO.Xl!%32,@H`F<n1D;bI^p+mlLo+8G1.pZns.1VW2[&6Uk]p
'i$Sar%DN1=i='6p-;@Fp@mQd3b,fL(!7`H,reI><?u-_'nKj#NDMNB;3aV9imV24
F^>FYjKo1k<Mjfbf/Qe=<hsPt'L=mAZW6&HHIMALX0ZMTGqL@Y+a$7<;cd4#6#,Y"
2H59AQAg*q1H*U@C@aGem<<>tZY9JZ'UGIF'AG=\!CMtk3;#Vi6Ub7Z_/GTQDroeK
,E6/A*qi/gDh8,%e]OJM(F9hnF;:lGe(\HOWH*^%/_/$A2&`^=:NM,Y;Pgfq<?VIH
a<t#j1?8;jAqWSFcS1UE2Wp<7G?1[&9PG`^F"=Oj%e/Nq4AC#NdF#BX(KPuDAlP#G
BU-\aF?`ju<c5&0%b!Nt=/-bpLc3eBHGs/%'_\r?06[IgZBm\3-%9S905lj+I+1;@
'ZtdSYA1J`AOPp3i\O#FW2s'TO#.JgaI_1QGAAMG1)Ii:'>.nCODs283d9qOZ-R^F
9l[XsU?U9D,%l@Z[P)dWBil*t0l'8!,[Im@7i$QC[uba"-uqY3h<i:(GDg*-?[-cn
58+oY[2)Ut6"bD'F;?(eQ]XCsmOm-n*9'#he27Qm9XH!(KB,LKR#iP5Vh&ekM8VDd
VgtY.I9k;R3*7M-b;c,;S48Aah'\YN1]3$[kd-5E81d.dkoq@>[.oo7NN(GcnhREd
``"a71mN]M_T@hHqi(_XP8/.3[uhjKX=[DlHmWH[=&q+(0-&t#=`XmkQuqXQ<\Kf@
BLdQ8FQ5(-@V&Pg:%+Kt1XSp@=a:iqGQYP5pIun!TWY^lFa5GgR:+P]JQ&<4ap*]B
GPoSb"_Cb:<>fnZ"EAEnAk+DF?,qG9f*!VJTQh5F1*S0$H(^H^4>fPY0PmE>2VK?8
WfaN&=bbb%BcBaTa]_i'/IpNpGTsa$8N*m9-m\0%)-L\(a*Kc2GPD8G3Tqk8La:Nu
?2;uK.PZj(l^Y;L?dWYZ$.YD!]jM`aZe1UY=qWl>?qD^\SbKUfQ5uYD6\%'?@el8(
F9uFPeWb6J'glDrieol66_UJL?),&e=qd2_AnbF<3Q(Nf)DoS<+\:0oO]e9%Qa:<u
,G?@.M0=H:7\Hom,A=ZWSObDAQOY4Z\!<<rQDHKYmh]*;%r0e,K,AMrp:%%hF^N%u
RouA9!b#o36*6ThDi]g?qQ>Rt-_,IF`pRo;(?_hEj(rd.D]5I5f9B4%eYu]?XdYFJ
)4Oc3e1kRkF^g9$`cfZgKhWHAg%eB`H?=9Fd?9hTW.PF7pUsJY\0sCVQQ"hJc"!%K
HrArlf,8Eka-]D%;!.s`LSBR#MQi`m@U@*gQhcWL3>7rdQHL_IDqZe+75'3?qjPRB
:aJ!1#of#g/pc']ZtmI0:,[>9Kq-3Z@kdkPnR&o.]6='AN^oKA4"HoA/sr-aT6oLE
):bA^G*iI_TfNO#`.lukhF[U-TGo@JQ;i-qS%tI>;X)#g=tYoR,1AS(Y+p2S:m%O4
i^^X9]FIIba763V:fAeO6^m>;Yj<hgp7Q^FVG-E=3ZGInU8$a6Td)>:r*V->2lHko
BpMbm,8\4LPri.+Yrkc;\ll#Tn1#Zp2Hn)"H]ols8#m(GH(-%[j12WjZ7:6iC1P(.
>D-d+!-s2+aMNV0B,qYTTPJqV;WG;Q)WN[WB=lfcXtG<$A#4BR#W2FB7i]nJm.,FS
Jp%!F+N.KF3t\a0D6!IUpq+gd4";Ykr'dq6\t^h1*?n)No;?Xc[_dm1&WV/`/(;+=
dq=7UgKPu72P$[1Q7J256ni"YbTOBh/;d4M#I2d1^"-X.\AV!:rGctuC!IDU3k]p`
,SAHeQe75%F+!s>3*4[@Y]kL%VLn?kp)&0G-89k>;`jJ62-nk!5L-\:87O9C9L`"V
q:k(8b5--Rh.P(</hpIhh'2=32C7(9Dh>q],&>'8n-F;qrSNEJf[#@Zh4/7jp"Uc.
Dr$7Nr3!B_%3'1-7D'Mm0(:")pVI#@em^D0I$5egm_Zi$Q%_0J@KjeH43*nKUqBGO
hB4o&9>p*5j9*TGj,`4iKH^R#3W+N\@hr#@:JJNY@0KbRrM[(IH/qH<-VS3Pr0$FG
NGSO&^U@@u$TPD&/hJN[l!l\g^&L%JTO#QX-Mh$7$pWSV4l*+6PT8;YhRCF70/5V$
lH2qN=cqtOVoH?H,@6]SSu'!sU!ih/`BL:ISrpJ;Om-F6A3D0I5!eCZA(.%i_WS.%
hE^kA%!r00o%:fY*Fn5YY!fRjk'^2#.=K^gV8?]Za[-9P0sIo);QA`#ot4rfT2SfX
U%P49=$LMG+)pRV?:>r6N/:@S9O$oD*VD8W4&i(=[h&9`C.$LKgLT:92mtLaUk$3p
VgWb]BMnV`G=1MhqkKT9hbnFnM+W&P7N]j.+'?3`bPVSUp.Al2hi[gBoD1%B-,6fM
hrXgP>Ta,'T\s9%2?JVC0o3>Y2h_MA6V(>#DDiD!Tb+/1e8-mr7"rN%OMkuQKYkb3
0nA7J$^(sqOEirB?nm8OA]"P]`\S![_rh*[JCJKYR7=-MR.UYu23ULa_jRlZ?nNFY
`pd.o/hAiB`+l'0U^E`!(eCZl@>/%1/fK]t[ZSA`Bc!n0XohOlb2,.eN5lNGPU:Z3
)%L(6+dKdr,*$,f10_9,BJlWG.^GQqBOM[B=<W<59ch2jcfQ_*/)HF,;SD9Dpj.C%
3]EAOW0Cu?<,Z`6cuOc.p9M"dgW9-$0m(3NQ\E;XI%de$fg3h_H<3:Q\7KI;<^q6-
#)\2n)N8jh)UFaQ"RgZH<NY,5dC1))@%<q7Y?rCl1,%!h^F1X"m%1.K>>BmX+e"q5
Z`94,*3O.b-5e*XpgjRpCM71A^Tc/3`NcU60+`k5Ri;AWaG`HN3,gqh`5S_j?Ao.U
;@q3.!bak:Yml%@OJ$CAgB59kJfu9].$E;@#0FNE#/[T*i2O>^Z9fEdE'#Tf^iEW(
[`Sp+Pq7Y5Wuema@A9)3"tNo"RA%uDbhOhOCQ.\9Wj$N`0(*Pb,u9Cs2O$>q"Shl$
955B#:gnBf(dQ33k58*a.k*rh;fqf^3tqebc_tVuD)BY=FJD#(OQ?J&;ld]H(fI>5
7m8U?D&Skn6#^GRdY^C\?6Y:!o#'#kgf$)1<TLlKb\O5n;C%*(`t;2MMA7`jCO5#(
L!t]<-O/ne+Iu>%])]ZOl54"k,>j\X5#Q@3)TCE3Rc+a^[=X/661"9g\lNNCXOCAg
Pc08A/Tn;rgNY,cg<p`],l+pP9tp,-/gJbJ<]D;'k#Ml>"R.t.9h:;MY03;.0GoFf
Cu5M-iK2J@5#XdSYAE/O9.?u:jY/?hYb><`F6<G=)DZ-723[``E(r<tAf*fiZomr^
Y_8c&Ui`+g$ckC*.<hW8r9Z)G;'in%Y-4#u(%"mD)^'$[_@IVV9FQ1g<^EHI3)k5$
"!XEH&jkIAM%3dYE@=Jt[3=8-+M$30qDc@^.iQC7<`Pb)b@TCC&Z"n(Ei##El\+B<
eB`MqQ+oG2!iXn<ZHigM[#JXXZ8jjgMY#Erroj,M(-[=&M)Q*)7Wg$!cZb0k`G`>6
hl%B<'_f(/EA""J82!cBKSO25a+rgH/af$)9rT5d8Aj=P_M@lBLW,6YgokOt5)(Qb
J[$_;M^='<,!*&,S-O!_+chdQPl-F/"(;A<hCBo;\&kpbK'e88+84^R>6>rnBpINm
6@c$A>-*0H9m.7q.LaJ)JS'hMff8b;6W=a<.hEaA]/D(ihJ=qqWoa2RLk]rkZAC4<
%;hJbQ@i8&kpeD7!Oft];&,<e5Y\db1:XD^ha(?hYul]1`@U01O>\R<_;I?kLkX+N
Z7YNo+rs),RF]T*+bhT![5BfO#[nH:M7qA+P*D`q0dA;k+rWCrT&<S:Q]Z$Nf/OK&
[:EEBF)k[(2'ah$f)\uj:)Wjo3D-%cdQ*(.PodGj!^oiZ+A:YK`l1o9l3L6!QA&Va
O[nI@b/krqXsmVf`7g)\/:Ms6"LouHHS(-XVh#11@\r^crX:e<RcVC]S@N8e?(Bdq
`]eAZGSm5K_1#&AAB:p1?qhZ[m5;,Ql7;,OA4U0:IRVXY:I6Qr9WZ1):L\Fli\*G;
*6jPF5'e$Ei9DAbgn.$PJ@m*/6>3>BS:kk9:Ije59$Ij<957<;#UqnBU`k6:.X`VP
mlXtr@\/F)l-C'ljJf/VJ#0Z]d77<kAjRo@oBHe0ncVI\Tds-L``Z*'J3bH<i#n:7
I1irnr1qS&-rf$P(3[Si;Z'=F77sf6@WtrmXAu)f?8sAH3aV%Pflb[SmE="bAf_>9
NFY)0=-VqaM]H%NQ/4eF--JWO<I?fM%_PQ4P@<KgO)jd[)qTB!A6K\!,,tui.X;._
'R\Mo2DG$$$*Ij86'S%*fag!_"Rmhhd[LfTLt^@5^7F6\T/0&;:%bhPAapI[OIW&m
8YgE?8L&"l/ASh7@R0>I[mghp<k%!$=-G[]ROJ_LUhd?'ULi7QM,Ni1EbfqBYo(,!
#k(I!C-h<&;RZmS,[VtP?5Sf"[5"!F-(+"B=n+Ve0Fhc!orESf=cB[59*/Ifg-KPt
(Ll!LU<l<6U="]29%H+qProcQWo6B*=BNC9WJ,W$b=KMXPpft_<h!iTGUuB)$Ufj8
kA[RS;KZta@.^aHmsQK:GlfCbMH%,@/eEAP=g+!9@=TW2O%\qRm,+#PheCoC]IpZC
&?Ig>;f,[7V4S]6Op,oA\OjphL5":QgQ@=9af/j41UI;`?cit"a)(i1jPklEZ%@W_
'lpB%_RuV)]j*=X$S/-l.TGZ3qogO8M,[NjP-c+M\X#AIi:Qen-k87<=RT(Kh#Lcb
*Ve,1lV)$:XeJI/Q_4t@:$O95>n=Z=JN*.J-s]P,'.i-+#Kp7"SUE)Heh>R;WoPc@
\>b9mM7#>q73,$?LQb2s/4;\sCi,teO3GckR>%:t9?CMHBkq#/VVPg*cA]5+Zb]ei
g"ktp.hUR?,"QH/(%fm%nU9>$b4X&B%KitT-NuQn^P&%,D8Rlb#Z$bkV!m#c/FI!*
SJSVa^bV7l:ZdJnlBrE..>>g(e3uMI:od@*<B@/%,B,V(%IdPt^`3[T.%J5e9b(j4
DCsQ)"C$XF_H2S>_,r&^\g@!E1gKjK/gHHUq/isJcrFW'lMX5JE/C-`HL!HP*4YL>
Y)1Y"(JSj(n!M.JJ'3dU2si0Skk#h]aZ3OOljJ?Ho+GIb3Xdq8;+=/uk@_d/.JPV<
om_#qore-!](&=)Y=#t5_/W7&XJG<Sn)ETI4R)5#UlHpf5<HLP__^BHP_S]B6:X+G
6=&31Rh]DGm*2_k,m<\Hab@^aamiFtIE8bc6@<0$Cp?dj)r'%f,LCd%[O[,3PK`,Q
a1ea`9dQRn*5AW5@qHJOl;-ER`Q@p>9$c]`oBIbHM;N<V8gOTNQENE?p5NhKj(_A5
^A0uD]De9mZ'r3R\4Qf_LsEdLKT$#r&C?mX"-&L3b,#tb^mOB$,C^k@MBs5"]dlLd
kk$cCd_-&$1l30\dD!*Mbm=s9#udCOY`cL>%7"mI6%XAFJ@l;hMo!3o4Sp$A/0?:`
a;<>J'f3_.5aF_,f=V+B$eu^3R1[%LcGE^UN`bp:Z`&de-pkI$R:EL_\GF%X<[u<I
WfRcZ,'LMQrMAQp#S=d=@5J6@*$^\"$F8C'WN3k^W>aP3(NN!_#mlF[*$Z.&Lh&>1
/*"22!Q1Vu]trJk#o#_k*0_t_MGtY8Gg/<pr!ID.+j7@,jA2h-pq%C-U>/V?/456W
jM_t7Q7K4t,4WWl;a`S`_q[)eHGi(q]G![`,?W)RWF$tT<t+F_N*.pTEB$'/oG/uZ
-\I?c=^8pc]"eAs7EW4kLku[FP!mG:2,jG[8<Uq39tpHZ7JNni;tl:8fgJeQ5'Z]f
oIGi(`lBlY7ES:0CP@W8Cr5MHRLB'aA/iCuD82gd6F(5@C[]:XHjaoY8)-KF9IR7u
r=T6,SZn!mJI.oY-9%^2T(IT+@(Nq$Y/oZSMSk[j))M^H*tR.5%d]B>g\eZ%gW,PH
(uu=LF=Wra?:GnNakRb"8\QKj^S)6P`YmX/C0[9ZY<mc%*UHlULs-6;UbKBG$c.A9
WGJH+#+BWjb'GtE@YMYbYY'c%,@Ke/q$dlJ$R^b)Nl7_<Wotg/Pfc7BM'@Dl`4HTO
L'sZpb!:M>6AZpt--CIi%e8gK%&=1JING/H_0i/oWh,#\5>+i./)7t^OHH6+?(RdA
b4u4+qL4T<cm0QSSNuH_TjJ*mRidjdb^c<SXOdam)pI*Hb.<g2.'=*WPDfW29\`gJ
&HP6=i$;b,$[D,7=k(1XWCkCZQ$RP2!qac7\">.J8j)9m8l5m6`m1;e-t;,ZW.gF-
oW?nDbp];"qSjRM:JLnT/$),SXQ:PH2$ot\c;HtP$6hspdZ:ou/E!!nCs]3Q-jbKS
8jK_A'#UdBb6bJ$/7eoXX+(\l*u'QQbcnr7:u7)"]t,(a+oM5[Hs=t!0ghcL'f*7Z
qGKpQ""SX]7O5:5M*@Sl()fLT`FR.C]*,$h)c=g1Wmqj,G_[h*V]6]sbR.:OPp=3U
lcb!HaJ)\W)XJJ4nA@h6Vbot,>"h=).jMWmSO!r_eLQHV7jZQ,61$D(nmIFk6;nmX
SDc,!l>TBNd6ONg%2$W0`3bi[LEMIk'g4_hZ48=Fl+t%`Qf;qS]MDG8^_\HY+/Lt0
HA3//1a/)o<1,"1OI+,'8lLhZe/ZsHV+QUXNZ\n6e6*4hNC8X%.of3Q+;$N^5`MX%
R6XAMM4r$3i1`qEK!^Di2,kCBkq1'<)GZc_O8<dQWQA/OSk?R&6<fM56Cs!4=h+6q
WgPHfCpfXn;,XN#MBi_4q%VEVOeb:>eS)E"U-:(b1_A(cd3Mst@$jchLE]/kMT[MH
qZW3!>Fp6\&/6NQ^rW;01m!]$OC\3Ge2Yq<"jj3k(G.gB>&#4Bb=o$%.O)9&/36a=
oct9&;io/KW_6G'M@?VDd']#H=f]os<_"/\LpC>=#t`fj240Oj;(XdlKbl=PS<.R^
%#Fs_j7K/]1KgH^8G-sl,r(ZWXW"ld,Ip=<4'Pl&PY)SSV0TUR[AD<n,LhFI;YZ4u
'rS*d15O;^fh%,:1At<\2]IR4%F(Xs6)ofmnCZGPc1*NPoot=[57fg2Z$em@Yrmr@
2PHC('PhPbM#3QiPT[q9`fW`T76+>\aMJZBeCd<i[80/(7['s/<@L1<9nTO,^KLe_
%<8_TJ;;b?\(sTLeWkVgbmmb<-l)fc=G:/sWATln@+TO3$YucndfmQ2DA/"O#jYKR
WaT3J7bhEYN4#!Qh,"o=\^r-HLsc'!Q#Kr(RhXCkf28\V?#*)IKoJde\LD0PC5>q[
Hs:RH$&.Tn`OVD%A_7_$&"Q&Ckc7XtkmMp(fP'LTQ!g;NM-oX[<4#Sl4K;NC.[]W"
gbYO^,3..6\#fZ+Nc#*T<?bcuL>Y,4fnlO8m6b$YZAT"Jg!"bL$Ir;pT,Qh:=qOi&
hA+KVQl%!R$r*q[E/D-%SD'pRN*WPhJM&R]I?F0!Mf>rLFUJOsn-p+t98'N#dhj<5
2G5@R;pHVPc7;*`$Y%@Ibd--2;HD0*YU[XANCfF/M'ujH);&4,+YtXEPY]N-]$!_D
,a/V__Yp`k9LN.$+pL-=jWM&'Ht2,S>HJ+O_?lP/b[T;'1"oE."K.*W#Gf0fb97&.
]8MKME+AObTa"5eOm:9WNT;g;ckE*HDE,>*Q;+ZMj#c737N/R9ZA=fL%mF/EXRSWm
dB^>'L`T5k9K95m+sDX3?hQ;8eFY&Q1Q<,hc?\g;AcGJW)H:le,,EYPABO$X?Bb(^
A]&I1OG.+Jm,V1p'AX<t(o:fbb"a(^'5IiHOtfZ[<4"oNPN_%%:kC9O/(I;.cg3j#
KiHQ<d`C9>kT&jJRSkfYJ[O:/19Q18gf-mn(bsiGMS-gBY!(q0H-<W#k.TVbaR3\t
WKY91XM.ru(+l0sg1Il0',;90'-66M4Nd_bZOUs]gi:L<P[ck_i`*/Hna'`i.;%XF
OQ<FqFu/9O*9pNPg:=tbJA[HcX@Gjj--:BT!/PBhdhl)hhM///Z:*Pgl\b\E=l?p.
i1'#1s4,4DZLE_tYdt4%h30J$caC.m::o9V4Gb3sC9,/);0"YI^dD59M:q$,\SgB3
ID_)WZLL0h<j9R1k724"CUmeZ8HY1_fBTA#@F1H.QE$D(gH$+gm22*mSCjW<Weo+r
loPpJR'Z/[W9k4A,A#B"A"JLNG9RVVl]/*OaSkKSr"?MsLu&[Yj#$025.dJUOs&*=
39hE-.^i[G$3%pZp<JiFG$@r"C8UD)(=J$_q!I.<m80Jt?L*Y8k<LrmXG-J0CROTM
PcZPJ2_O5ROdhkCV=$Ch(O;-[4(V+%JsA.(m6U7O@?lmKcY_V)#q!ro[;'&i:)DL%
lCJ)n>$DBcD;WA76G\/=\?YMf>:dLSh^m:DR#7.5$b'0KYMTZtq,?g4a;S$Tm$\q8
36hjPZYL<?LfhrqVRsCD%[M:[N'hH@RoaVj.?NuFCD"o0Z7KbR.-c7*Y/n+LZcNq)
YRC$kEmG45+MbM%/@513'&*Hpn;XtMUD&P)F&rVcQT$R*b+n1?(AO_<+"S.2h]Epp
o:]C/\Sq'-5\)kb%dE[!ZMAR@D"KhaEDK$q$g>NRn?n<<VXcb1OY*aq3f\,?M`^EB
BkY-L/[)IPE:6ZZ=d7*3[IYToB3?N^Et@l?%GYpjo[K,r`tF546K]'9#WO9]PC=6V
:(F8VC%!^+bDmt54C7J;!Q3\:0iB4E%>Z*>Q:BbPa(6'2AkCXjo1rp)nde;P%l#V>
jC)aFD3hA<F2&V[]5Ba7ORnQ(GEK!"%&fL4=X@4P[eI]J&e4tWms/pRo(=]$Z+"e2
8kO41h0;2bZN<J+[8h:GASJnZ_@LU/=YNp$"*T00oo!PUIqT2+(3R2cp[;mC+Y\-'
:3M9cP#aSe^L@U5G4\(,pQ'/UJM;:L&<*QfL`?&3-7jC5#*g-upA];\,!qLQN\j7O
R_P]?E\7$Ibk`bZ(1Uiu5DU?+JH/M,p(>'.]31-m:).59--rh'.2fRZQ("Y?ZjH%V
OF^X"PmCL9,\[rM$',BO[u+'X2NaMg0<mk=LjTH@q`q1Z,Y@&.SotUB#Y.]Sn=0;'
X,XTq3SB]17"jc2aF(f>AESYniS-\c_RQS%HZXq"s1&kQ3C:85*[ej$s2\EVNI?l(
B,"TtbCb/>:g;PW5K:/78'!\qC])X"HU$K#&LRK31ds(YrV+1(>;?$<g`Z<3fH9B&
O4rM9idDE<rJ0fhPVR>Flef>p9D@Z.q"];].u@2?qd7#H2mbJAk^=kgHe=_mddIP?
'pA?DK4oc:L1:7g\8j8?NJ%BWZkRC4*/m8ia:o1j2&_J[&@cO]BJPE5+E12Fi,]6[
5t1r:"AUHmP=c%s0lY'A2iYc`E$92['MT,?L-pNf>[fQ0L^%p7W6fAoRLMbDO_D[C
"r`:-7Slt-Gs2d9+B9S(ggDuW;Q01hAYuR6*6lD'g5+Zt3NZ@5d3DUA>VmF[@Rk`D
p4#@H;h`hCL#Q2l(I86M0`eWrM1XbBd0ttIBeGt$//Bd-k'M*H%'ga%VHZ]kQI>EC
%/,:fLBV5\g8[]hQNe>Oo"1$]6[9$r<Q@3AV!Dr-T^K(,MH('i1Vd17_]CI)Doh6f
/j!nciY.`=<d?e;(MmtEl,5#Tra-&(jlgSl\u<YKE9k+g(h36R/9A]/^?dZH]=nbI
Or5V7!c6hun+p-+,#Ef.#q[i(7\ISX\sEYV8h7+a,##?nl_ndH9)qBk,S\Zd0">eu
,CtI_*/?*B>`Zn@P:2/U9>#Th6gVI#)92![</2gFCG-f%OqJNKaqD%N(^(65FH=Sg
,Ohr]OYT1]To-G.q(;-rW4K.tb.?c;6(5m$/I5He%>M]nE"GaEN8BJJ#^k^:9Pd%e
(FF/b7`D7Ll7T'=F)-YmX)jgEbKmH!QTu`F/?n25C8BRbdjs4b^G$'-5qtiF6PP]d
eH8L89%!KD>+uH>)UH=G_d4=<'?VJ&Y0rSj@]dpZHXFl(_h/sTa@/B8/BSoeBsdT<
@\PEUjeD[_.OtM@g?U.qD)0]mreRkGqMP$YQ4:nS>76<Hh^GJ2I">W4/bK&iX:di'
1c:9o'-u2aYdRp5E_BkLME7in99SlG#VqZuP3tL@)W_@(Ts/FI4)tNnhQgs"AB*D?
&e`Y9EjeMljR<^tRU'a(QC95\\s%J7M=^e2WBm<Y)l_HcL6;b06C3e=Y&4h4-negK
/3[g\BS'H5#\r]bXo?%gBU[29WP]*EJ>=VQC*,np9]"[#Ah62Zh1goaWq\Z6"FeEo
Y>cXAX;aknW1f49cC1XH;J(jWW_d+E.IR3+Tf_\RT+%ff`G63%a]]o>[+uEXX4(jr
+`HbPKM:ea0iJ.BUJT,Pl_p*S=bTG)\8`iA*.CU`?++s44Ye'B%tr%ce=T!&X"<We
>D_psl9f!pYKc>a1ZXWGW6B54DeZ;D/5_`u^lH$XZJC_BXpe6(+MX!"eZ_WkIZdAr
n-9Gk:_6H>;'3?90l#\LW5oP4baAr-"h9O7!,V$sau)?G60]<i!sQeg&R7#0fKj1)
ADA?8,"m@q-%`Ek%%0O0`dSPkLd6.4ZHmBlYcL.s@)Lrme3_,8'>t$7%j:d'J*32^
R(%\A&S)l:#4;l:7>h[c;:6V<egj-JD['/$(F*^CLGYaq&*!s6LesK?,fLW<T^5d4
%J7EJ8#[@t1'0lO&B)V0b8Hu^HZJZ=)T52=Ef%FCKs:@32</@V,V3:aM!2jiG``B/
S,t1Y.N4IOmWTI%7k6?;[_i1[?f_u;2pJapP=ZE5,.]q%Yq5gb72SQA*#4`ZI.!2@
$Q@ib<gLZMFi=K.6Y$S.?P$*&Zal8$jndk%EH(>>n7nQHMq''?C/[FZq_h:*5C_"t
l_h6noj(h`Ci+2J&7aScV]pOuPI78N\P3*`"Cl,io\W1P$TdA/7R1N+Ike@Y4%tlO
3/"6#9:.iiQoqg+<"^HR$(il.9aE3?.UgQ2rBTAah$+$D5>TCT8?!m,DmY719Ng(K
d4EU^F+D6RpUs!:XQ#nK6#B=C2`E-j#,[S^GSmF]'Ft']W6*bDTt-3;.L@2in5`rD
<;*S.<1YDY+b^rYVZ>o.(9:-)s1jJ"=J_L<@&16'9tI$%MueHd'tQZ;["T6m$'Ulr
.%[/i@#!i=I"V$\Jui.\.?FF[O2T;1=GlsE)DOT52:Y/5gB_>'h398RJr8-Dr'?J\
!MT45YIEdRI&/S;.FTJadKp"8917GU[$]S[+O1%GR\EUnnJd&aqNhPg$<&+8'`an[
'`_-:$A$@\JdZH(_D,p2!DkQPU,J>NjC9bG7<l3T(drtLQFT;Ak(Q(g!eEU+%3_7"
JcJ%J6bm+>TtiPj:d>u;0H^cI_YOIu`Y_(9Bas%3=,)h#)D7CF#ULJMKFgBb!C1]9
JX!9kn3@i[*WZ_de2N.ZkCpeZC^hPD3FE7!JM9nf$\5#h!g'?!J5A\F#jA@pisljA
l<Faa=mhlU%rSH@m00BXp8X2g'L5Lr~>
endstream
endobj
27 0 obj
57122
endobj
25 0 obj
<<
/Type /Page
/Parent 5 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
>>
/ProcSet 2 0 R
>>
/Contents 26 0 R
>>
endobj
30 0 obj
<<
/Length 31 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1i)3i1&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
@&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
/<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
W<WGhW$2KjLh7JRb/1Ng!CMYW_D!.;C`"pBEb;2'W,aKo$K2!?YTR]]@Yk:^:hYTh
Br[u:.BA,.1BgJSFHE0;)G63gku,NeVML=G&4^MW<;@n5iX@:a_*Er9N9Q8A`[Yd5
[_%6u5[bF_kkr">]&Ra52@\\ki.6h38DFb?oADki%\n)onP<Y>bRdQ;JEf0hBJ<X1
/P^>4"U+u`/i\ld/He1idi:WV7Z.lfZCoB':uhg/EnJC:l^I,C/-1p1#mU!7D&rnT
Li.u'aaeA1UssX&Knh.2V\bA7,944H$NfmdLCWCD*!T&1W443(XAJXp6(i1NL'akR
`3FGrR'8"_EYSo7G-"nN0NUM\FU#<d]l74B"j(=UTMT/;?=B'VP?ZX]YB\t"%L6_*
!NjAfgrtDq=b`3?5eO*_bTrV228jDkitk`TI:<S4c\[A+VEc&nGHH@>]YVJ6O5ftE
dr-@1hBQXo),NU4ZJg_nQt+[tIgH;4'&fBlfTQ4OkZ;W'G[!4XUO2)]cC&7L!L<Yk
WCqsRWS86_^4b@orj.AjN*6@jU0%QL[B7#XH!+]<X_jkJ=b(2/iRqh(T]g2d[:i`@
4AgF,>W-Df_cXL7(IDks8=JCSh/g\,(&2a'E5Aj8(b,$Gfqbh#CD0i_<[_jCm!!oF
P3\UO.>oZ+ghr<[+gpGLneet9^it1?XGX#/\6t^sHn]OS?hml5*;TP2_._XjUcFmL
mbh]7q9:S-RbMP*F+5YgNkHn83'I"6T_t[\<GoLP@qsOR]K!\e89R%/=9HWoCp@3T
F&54)bHHChaJYG.$q-5f20?i0>p1U;dRgMR4cEDLK.%B5Lg%2D:)X4u,*Mq]=ueT>
)>k'*o!fG3k<-qtjY?tib$g55FC<Z'6Lku2T!@E0cY=-2kX>oI'%R8+g'tt;P)EdR
qBcbQRDMLL$mI5!J[$C>_q5/m=F;nV0\-EB`HK?=905Ve"jO?i@1qPZ0PF;\JMP*t
%Gm#0NbIQ9_o0_<<m&!oJEB%`Fc,A?1+5LTb`ag(%!*EkZsU(pr5Rt"RpYtGJ1T3;
,,iB[i:K0\-b7L=80J1?W=)eg7LR$K9[07%bCd$ImQ!`9"lV8YJj`<*][uT"@<B,B
&98CN7r^5XbZ8:/nm**cHOcRA=I2K_*Q;#f>G?a#Ke-rk`$gm/LmaQeP=?b=28;-"
>b[F\8l*ZDV'Y.gr+,)i><nL7XN53uH>%8],'d/YA'oWn/a\jta2!\5'QKbjTZ^.I
7("!SiAm%bR3Rk.6qNSKU5RG5Zj.ugjcbFZD9.9*l!lT5](7*MTqdq5Po_2DCEf^K
CbE;.\7iQ4AK]gV8#fOKkpS5hZOOpoZ=80Ym6WBU3ePkHP&i)[eZ'49H6]ueM<^8=
Wfuk,<Jm+JW-!9X<@X_>k#g,Id<_^tLmV4hAlIFcorKt[QG&_q8>'GAW$Yi7dCO!u
>!j%#2&W>nL64r?U@Ue'FegPa-V168/>6t`L=lVU:`;J#,*_r!fZF,,XKiaUkam/n
(t.6:qt[UXVL6LRF(Rt6!0khS"]2P8Eoh,9UXfci^j03kBmcOC'%4/9aaAB,"WaR9
ZER#*JC3Z(k(SqWMcK&?1ac"9?.C]D6qZ>"mPN:[2Z\fXq6751gsi,8p++pm(N&S&
8\6msDqYMI&0'H%Sh[1e)00XIb);0%Nps83nmZm$S-40oh8:Bpq'%Li9#6Z^PE?R%
^`F+:07_]_/X1EP@`3\,6pM^>LU>K1*-G<Q%T[#t,p")u_HO#B<aaIY>pBAKCXj-B
@l-+70j0f1c<h*VGmNnqPL!E7gCRn9U>/bo4N$>+/7aKuLFtb4`sA5Y&D4mSZ%bN]
77SdtXAajI/f_s#RPs0<BL&fqCrB@]'"6KSA0Y+P?l=-8ZH?1#R=r21%C88l`-7=[
QoSs/].PX4rLdF6$B_nVm_*2TC+nXsVjIQF<NQ>8kle<4/E/@XfecXu[Y)VR-)BO+
(dtc1Qdq$V:*PZ4A(GgrFG7U4QiiH^F^Zr?)0)i24_76NgqhYTXiG4Z7B6cK$JD7M
DemU#Y2P\D>+,,%0Xi&kFB6u2H[06?[;UY?]?Aqd["q?KI][bo0Hr#mR]ec?;09GD
ZC81fjS.1L)1aa(R&_LD="h@HKg!I:$?#>],e.i[3_):S,hK1DS+o&4@n!FqPc//N
j?>&n=RUm.jDVo@$5;Br-&lk1-c)>a/E.WG'][5&#!#'_b8b'.4Nu01H+'qD;SNgK
>#EQ5.kBhoeZH%0pj8t<S'\2"M`]L#`Hmj(WuN/EWh,#Nl5*]2?$gn*Rl9JE;5e&Q
^T*S)I!chg/AusR_bpQ5A%*7^N'5hUA3C:0HTuE84'T-bNs*%bp?6QVU#S9<Qf0%K
1%)'6/\M5WhYa0hhq'*s&C2G`SJ9oJb^W3H-`OJc40N\WjR-)%d,c%<+O/-:RrhZ*
`Vl\>p<K/\\1Xjd>)*^_]cN'b/?S1%DbuugnC4#c`'lI`Rl(e3iVa6HYroe4R<IUW
jr_"<A8]caNea[9\TQkPZt`$++lG.U.?V`ul`X4lH!f,n;i"VgU2j@hlA&Dpl9K`8
pgZmC.E,nrM)]O:m/Q(@?qFJ:67@6N$mC.6!Tn3N.BNJ]4T2JgeIUYR&2r7gnq'H7
h^/+J`aiIkhZ'CL"6ZP#8M&_;1,;0/=_TF4D^8]-,at]a8*9ICn9/1.H>+Q;T]2KD
Vl9ec@],&-#j(:1L2<!0MZj0ZW(Ff-&:iPQ\HHk%#R>f&$%fkY-NEK"+tpe[d$Y9^
M$a<[BM'odOOjBMDIUuN?E9n,j@op$Ya>ma"u$hu:pg4V_#M1a[--fS6S*j!\AVo;
nAA(9-=W5eP6?rp[0'8,W''u3OTWT#-DDhgn=]cXrr2FME%s1\0_6!:hH).5#LM]K
YuYlr'b/NL'W>"E6Ms!o<>4A-&l>D=OYG0[,msrYGQS:TZ%isSMMbq^Q12a"B`pb:
Nsu\D)/1rEZ"F?I82R%c%?T^ucI?li;ZSRl(9s8C8Gr`iJJdWY'5;k+cqZ%;57=^b
`\6?n80me(dgtTRO[ia6&`".Z'S9&]+>Ja]-kd<beJP2f?kNh^&99W4A6,u.("'gg
Osjm\gDa$-HR=L@OI$lj4!=r>,S>MKiaX*nP7+9i*^t0";HErTnCfUF$td_)V4ucX
W<oijF7JITcra]hHRCRY&uY*KY_[nYl6<M$0sE-gYsg!1L,%(C&9%tl`TZ8YJH1c"
.gCPFYS@jm>/o\SQU5+#ZFX56o`EPn/LkrrOGOG/bq+]?-Z\#nnnSSQYTZoP$^.=Z
&#03rP\ed=!n!VjV[4eB*t9u00eLcbJmTp)*@S(Z>i]pE![&UU.\%j/1?GU&KI/:l
QH85i?E'[tZ(tqb.`8131D<#Ab@3IBmkhoVJQ#Gqm>Ws/>r,!+!6<D,##:;?>:'RI
2*r!h&1[X1B/lWX3:eV/6D4[K1fgYdK#P&W-A=KnVF8MC3[?WWm]d%Y:d[PbW!CsV
@\uL`K/t8OeJ#eiBI%WY\nNT[8s@Xd$]dJ]]/EU)C'^PQe)k9GgH6g:4EKX.-Xf&g
ept+-8*E`.UR*n`_*B;r5]`mplC0tNo/NI[4u<7E".)?nLcoi8.RP\`VCP&REs0KX
7kbY8"tN*c6>20A_hJGpOZn,*8HGoR32aKDoQL1sm#L9TI.UNM83AA5lU&\L.5I8k
/4M)<DNge5^+[W8'Oia1AqZ/ZiY5:rnn_nd&PL0)M%m+/9M0>[$@pX#lm=3Yac][P
1J)\C0X$(]NHCKYhbM7'6Z=JI".%-0M*c"^:"7U0l6/D$`Zc)_^%8Qo<>RZ)rhXFV
:W-I6e7CJ%#uC3@8rmmd'X^_8WCQ4a3!LY"KJn]6DH`rcrM]j^Y^TXA/Pp=\#_M#8
@UbFRb%'EK<\`\km4?QERQ3d;iA9jmV]u*b%n8F:.VT0Te;m^QW1$Y_,&'SV'Q>^_
)a#rnG%6b"PNtBmEr`Rd<pB!:Jgjrh9NO(t4(b40FDuP]o/NHeKOt*CKnca0+P_cf
jm;:mU2Js*i.6e@8'bZDo?_Ong;O[mJ$C@\P]4`@V`b@>3b3^V2@t1V2b+9T*#("g
eKcV?>6rcV.5i_,@\I=tf3<DX=#N3H(!fATF'I4+_%Z0%JtHL_IqI1i6?&E![DPse
%pfAe-<:pj0I8cB04A@Vlo!]XV8#T[04*3*d7?8WUXrfEmpM#U>nN3,B(KfEmp(#l
:fJuX<P*(AUJ[5m$&XX?eV7l.Vb2*&=XMC(7K77\^2c$%DC/n^PgJ^haWBlR<HIPE
"s$pdGXh;\4Vlj(V0p1)%d0\'EX9\\e[]ZY/0V&Q5H(h68>elKRq\`@CY(p2'<&uM
Ga#$i5pP#.n\@.d022MEA%+!8k:K=b7rlJ0X;?"j1:m]:s)l@2A_2Mc-XV%NTbZr2
91L3eN.6*;6$`3'B@i2`'q/M6QR0+o_\Mo[`lraG'gX-n6?"5o=)h0IVgRd`?rtm#
QT'&rZO&QA='&4UGHGeX_-1c:33A'M#@=D%a\%Xf=@]OF&MnHArAB:-JJ!T/-$6]-
%^hZG4W"uc$<5@&DI$-=EohbcjBI7M5Cfre@EFh$;c;]=&=6iEhO%4>ZV$$rbY!ng
4-<#3.<YnLEJBQR!jFJ6_YJ8UTI-cO1o:\&F&I*X@>Mn)M#q5pFZ!>^%/ip(>*G9>
jOVJWio!\15]36=eML;t+CLRl$*:YHfY$'B.WoR;7Am,>K@mK+rJdO"+k&?2OH#4^
7>o.#@F,A>9;Fme]0k65DDB0g,N*OO$9f<1.VnF/7:]T$\Mo/nM\-rHKZd$;@*$a3
P6dM==+n%"[_;F5L4_O/OJ_(JeVB-`PZ[+3=]^\aZu1*[<`VUiBA&.$r;IPr"Xegj
=`efU,rQ$q49pXq=LXX@eV3\0L:MegOdS#9M3f)SMA2&#a'"%^]O#ih8`aK(-2q^_
^LY[YmGm"]L1Gcki(ZYOG\->P#G??em?;eU3EbAY=RU$.m58$fO/<)NWt].@A6@Oc
a$o@Wjf+AFZ@P!KOk<44"E%lt\t?:419Z:k-1OitEMCNc'@-Y*D9c]?W.2a%1?'G/
g-SnW#GNkZX/<URob4.$Sq+C>7#6F^8*$FKC3SBL]GO#33aetFL1!=gV'[mW9=AKq
^5E:/Ue7H3HBc)-:cu\>VOAu%>!&]@E)en4GA$]FAT#UM"HQ`7W2L3GM7]YfOf(_[
IX5q,>-(=b;m#n#U5%ZD..sCUr\(2\?Fm&03^G87\ZIpoWChrH&r_uaD\?OV<>o8*
9JlD(I\)FMOuF8'W_/@>o'e^oF6.6Ub8mn8p<cR6-KU&rV_>DdS>L9gH7GD>>""!p
DL8KJUd\%"@W"fWJ$o.u1-9OiGh,@*+E1!QS2gn5>$-"XLU>:;(T@Hj\9(>PDZQW!
\GF^4)^fg<LT(]nZuM%ClnPKYXFf3(o?<Lib\geb10B0*a-ruc4/EV2[@d?8^)JG\
\S8_Y)806$E!E#9AduD8''n:ZP!U+o-^@1iCl!GC[UrIS;4=",;8M#oY:!2XE>(mS
VJ%5L<p9`T`MASX3PugLOund>a*aesR#puaOA*?mV24T?*33=-7_3Mc8%6$\&o^J4
FTpI/L&XBuD4Mk^_o"NBqq]:2M\.A'fnp?2-/l\WSYNYrid;`E=I)FnCmk4(KA-?,
4B9;qTiL(h>+6Ee\tH0qTu5%,6<_j[>:,@,c:7_ga75+7S9`2'ID`tU1hn!Z4ED@^
qorA[]-oC]'m[dqmTj(.Ug1CQ4OAVi1!CTrH!J%f.HYjIXsWX:Z0;>Hb:0`1(nW<0
-2amO8dqRKMm9'+prGup#JTp0=1'&U=l!YsZHLd'Oh\'e\m7q0>:6m\[&M#b2-YMV
]7R$&JTAA\'G[<la+2P_:QF":1:3X)ZdOESZG`K1n[-,[Jf%PW7!#B1:8]5l*MH:V
24sXAgfOS68F\cF7#"\CW)6&X.!aHYn?V2Z0]^gRAZIUD')s^8GfN9\od"moFK)YM
ag7k)jeL[i>c:TH9#r3$b4o;W._tS#m\;fe"EdO$ESccIOcu^%9WINg*HAe!1W=Lu
F3]G%rcm9mCd`d,hCpW)6!:S(Iss1<QBg:D'5eCCJVE\TVJp%:MG1MJ,qo[tJgk(#
&hhV$l3J'^.)naT0PdTt0:f)`LsI.)j-J5a.5VlXc!^J$ZB]IAF/.>t/.]KMqNlh/
9/.A9^=..trt>(PlthF?eT8jP]_'e,50!X\(XB$M8+6^'lVb_HA!oV5r6\STjNd9m
U)DH9>;Sg#K7<:\@]/h)ZX>Q]o%sCR*ng)FU[M:'m,l"O?17&lcffYYG]\Gr1e]oN
=B7dGU@b`?8P>DR4LZAnUH-JkV/,+,*+AXc19IP4=TlO.p/gU]J'Gm&(Q7`hF5+7W
bbFe%$+XT%TR+@-1j;R[`J<nP!'JgZF1rGcVl>V>SLO3sq0!<,-U0rPT\pRC`qm1J
!WY%rN5`\s^uSrI2?JV#EKI\F2]*#m&0[i7@PSk=Toe5Pgh?hINQ.^OR+u^;N^I7G
#o!_=3>`4"OL\mg,ntn>U[U7ug,q,-_;o*GE6;':Q&Wd-iNV6Z2kl4bK41RU(39XF
#8EnGJf$?bMh`!tR"0!/MiL:PBi2=VA$V,2p6^*Udn6*3XHmWjWXE[QfLH]KPtLET
]ZT4f;66eHCV^9/&ZdN'@>GfWnTVPuk9#2q>I'P7reD/3);]p53o,t4?l9EQUG9R8
'5<%.7[qXTc6"2HmW3WT>cum^)K>=N*@=a%0TX&)QhVhr@9A8+H=Mu<8"G:coVESo
rc=,.f2jjn\0Y6j39s/1?7NAV2=p0X[W-;KAf.:]!nc\JBddGP5Y`h/ej$/s!<k;u
Z3[6LcT@*:4`,^7YIeN,@'[LC)PX2l$8NTR3N+WLW@#Hg:8C9O"BQ5RaF`pc0&`jM
N^HG*38#bE.\=5kE?frV2N(4sW2OT$$JqecC9/6q0m')F.8KqX&3@,.S/B@d";%KQ
lQg`E->8m1Z*RklMVX#LjBSt/n,)7XXRi.nbe@j(D[)q%F0Z]Z#rImC\l9sb._O6b
%h"-X.XpcdFHYAd`Ud@/6I6:VG<*9O.bYk5Z.21oYd.8&V^F8WUFeI4POgH'kSr\S
bLI9j>IRQo_cP#;n8hAukSoRi:GZPd*!S5UGuQ,Q]H]_R.BP(\T_40q1-SZbq^p""
>p/W/P-qPfgM8"$Dd*qCeJ]Zie(GigWbS3-`DScIVC[c!+U,o13ZEG'pXE=&cq7\]
6T'#gJDd5jD%Q@@:6ILsKGUAs/W6<Q5V`@4ME_,'M',&$:$@*m(8FJW2E;2=;R@j'
6]/@<ADssjNTDdq=rP+XL_M@m")ns-N9]&-P2to?$^6<#k#g;i)Ap[5!C@?sMZa*S
jf[i6G`7n2,,!2C";q,%q$).S5*[VdIa#<3ih4>pMM&DQ/VO6[dPIZW86XuWiBW,X
%HEi<3Xd6@edr67T-=gT_l2?FNe9mZ2Zs5-bRb4.E8Wd;JOm@%#u,_@NUVfd2C`5\
5g>[V,H/f0%j>mi.LeX>MlpRL5*=4Z5ld21%9l`0!'XN12@sB.r^+"9p*Osi##$P%
Zg(.?R^2%DP%1@?qAn`._l[+$g.q*o*s?![LY"5.cLeq3a/s`=%_6<4:cRpV(I&UK
s-N?YIcf&UYudS"MQ&^',c$<`=9a[+.m&8mM7C?_@fjnjq`V,^JuAa8%7use/VJ!:
V^IjpiA!GRVLe\2fL5Dk.Q`/k^s\OC8tf[83.&eF+!/mWGn&^H0*N11P;:Eg%uH!W
aFFgiP"cT3d0Y(e2BoD\2#9iJ22%)e+@E).=OqM5N(>!1&@Rrt8j[_lB'c<*a6<Cn
3]fAuBGhhd\4,CN8-We8PFBCTGo:^&2UDjL_'0ZrTEHR'-OrU2ifI$dI#sF_('bhb
0a*',+d16u7\l3%I#Uuu/4r`i&4o'R9>Vbs/"Qbg&u-/gHrWaY1mo@?HS(sk<ar.Y
jW,WSPFd/.J^WnL9@Z<<=ZfG/"I^XZBZA0HXB5T;BUM<1BN="1fO9P,8X-0E-!<g[
S0dg?&]9;M8Q-$@l+IePeehO8%.?&fnl7u3,<O&I:5uTaO=cV.Nlc'7?).cT&dXU_
8P7TjZLWaiWN?Efldh"K^(`p_S=!\H-%td-<=mZ7DkSp68^]Ll)i6[H8:m\!PO]/R
JhB<>P.Hoh5cVt;\;f`H%OD7+29GToGH&O'M"+5Y*CY'cVA%.?Y<";NaM)K5ES7"h
S;eoJk9Wu7<Jkp6PJ]DBgPT^m3jbK/8%<_m&f<=)-=jD/p"J/\$!j+cJ<L['=^?o]
GcW/r(Xr/6]j#W2#8'S9'iX-sCdj5a79N5bFO$,O;$L")dC5[1bmBup@Tr0/P+,oL
B;UkYZUfJB'e<!lX/u+B.JD4V)ace`V3\8b@6HHQGbhG.Oc9sYI,!rG;2[0_D8c#"
dK4[#&T,0/m-Z,s)#%q7UaBi\R`#ghKl^7:g*t'gkL`kd+CH4/U_,r-<mqCD@n!`9
N@_re\Qr`>h8k^9_*Z]lHM_O+KtgLAXV,tfI+:r"[!,.BPDe='$R1:+9tE,eMZTqn
rXp]D^C&UT?<G9+ociRD[7<i9@E@4N_'IJB0lf'k&:0MYA7FoBFT=mNN[Ch\ZMW=V
4BH)OH@+<9%*f4Po1``YWeG>k*>4&CYmqk2Fa/a>=[$8Vr!][7]!OpNGkR0BD(2<i
\7Nl>Jh5Gr1l1Sg74X(\-[bSCB.gK#Rmg)7hIK`N8bq&H"'S@6dk6r$_'8bZTCV[M
VP`60_pt;gbQ75j..8PI,+YD_EeBKiT/rfO58]2"]co@JP0*Xj*(`"HdnRK-RCtb_
o9J,]KJu6^o0IHc8NkP692#nT;F+%FDpisK,NuG4UNPiQf/ahghhY^BZQUaD2[GT3
]\f10DFfF>RL\"es.3#PHbH@*B9p`C,&a:,bI]D2i#'qJ>%[(G1#FIF98.qnG#_/G
o6T?=:H`h)[bFn_;eI+K=OWMmc5NH$@JQn)2%4<>Yk(NVSMa2;`S'*kLPoWtg2cq;
&3<qR2&(JhE3\j*\%@hIE-Q</Q]rVsd4PHh6L)^Y!J>70?K@E4D*bM"fsGT!_ug'5
>EB#KT$M2D6dp%MX;%;jBH7Y%?Cj]g6R2ll4/AT%*1&UZ90hZeXrlY!\TXB;,+Vu,
nGAl!qb&Cg);eO?_fO(lQG#5C2!C#m(XY=\+mXeF_;Q>f;`WeI5RM"'6*CAHXf<Hp
h%)3<%a7MU(Hh8/je^rM2re6;[HbF9`(7K:UXT>H4#gH];dW>H465/ESS,!IAFHn4
a)rneha_E;2sL[`CZ$(SYB/"1Xo)<Nlt'$*Gk-4;8@^#34!2?\*i3It5>(d?QUc<&
)q)lKs'5G2R,Klup3JG"g`,kR-R8eGpHQS=VQ\G+%HI@M#4TBUm[\]/jAGD.-9Y92
YB/28J:T;Qne0>"VYbDD1CXhPbeRV<Z1GlGEuVWR!'D2;\@_s@A%T8R)*gjP]$";;
MDRB(\fSbQ5`mh9bP!c7#+ia(56I7GTXkPPe0-SV.CeZ8S/Vn=e.(^"O^c%_BgIPo
KYe"dUsefXqH]50`kfhs[1"+_#rR_,-kcs%LcFKN44L!6-ApH/'H0-Ol?J<:3^XO4
.04dO6X)nhLC1>kMJ7dFX>($El&Dc(6UWEA`%eT/0Z0:WWsIrH,U*S32+/>s#m<E/
)#V7/hR0^BM$u#I$:CS!8MFs:)fct;^l?4C@_kZp.kFQ(TXI)Vm\,H:%#E>pj2;Xb
</R^gUL[:Jg[;q9(WBn6U^GcUJW#AST<'eY3qBi!.7(4,>`(;H7Ot2pnj]<5-E>3t
$_gcSP\!6SSZdl&)0hB6U3f#P@A)t#`q%s*(po<6.)s-e`Ya=h4@b4ML^9K<Q>h`#
0U*$PG"7BCa.-6Jb\%Y.;Sk\O#Ut?q_,V$LJ@>i>81O5P6feV:Hq)g-7/8H+HtPo@
1dq+paAcdopngSqO>0^p$?9M_4B.-*>-c%,7M2U[RAWQRK:u0J&.@SU1f'nR:l\^<
#\rV%'36OI:Q]mm750RT$?d2,<=)!rVi5--r1lpt-k-2u_IT&A1jo^q:WWTo..!sn
UoVQJX,Z[>W:U>9Cp5A,Z')2CRL/K,')'>PX9u&28X-\T`35%dZ\o[Ea1R8P]VA-@
JWH%SMLn#!(l1@\H5_IH`FQisanJ=;cm9C:N-"4%8>H]j^FqSh`CX[8Pd)p1+3-X7
90#k3`&T*MNQdS.`&NRLPes@s\AG3o95Bs'/2&HbFV$fo83E_9*,NmAL.=A\#o'M!
3G1_Gd3Kos(=Y4(]>I8ShSbr5),/O&0Sl\b?HF-@c?PigoZa18<@I@'7.aXjCt?\?
`!gb/Na/_YXFX!f?lr5%'H"8+HE/;"LV`<6c_;k`fT46U=gI8lYrr$3I$C<5q+#`D
NTpPNMB1&3b:6C2NP%26&@#&h^Un$U`SB9,#fj7;qp9FFM4u7E]I>A4/YZMY%!^*_
"M%@_eZE;D*kK_9'_Tisn#HRo`&os(iV!ZP*=2TUdHcrh]c^0h&h[k*0!mI_jUVWI
KJ_3tO@:EQ.8@\eE=tD^&,U$th%Vmr.T5!d;Y:c%Pnq<s2U_O&#eSr[D%/o["3\ea
d>H>DOp=-@N?K^0($%2MN/,i'S;\FgSUEVoJH1_\2_mrW/nk9[]bs1p-S*QH_8Snn
_RV3kF/lI#U^VsZ'g`5G9ulho`8*Y<b]6[@XJI\Q0;V:ab!=FtVT[J:<G>,8H_A!9
3t/f%;cI[7XLB@7a0\On;m=T5/NhKeGK>CFYoR4&h";gMPgpceO,[RI<<#ts&t.Ne
e$,E7eQ9,qr^rVGVNi+(3c[fUOOW)$dNmDK@1-.5[o2=-$)3$N,tlB7VQ58Pf2W^?
\WTIRIFC$X-]#3/*ICm"UQK*`dIha`F7rKLm8>L'%LF1SE4R^YK=-s?f&\;]k`iH3
X!2)\Nfc$JrABP@UHB1:<S]Q/JhP5M*>Tr,f$'N->(Bb8AfGiV8u*[hjdZdegdXi!
=/%nlXP?>D7omOm9O4F?*AuOJbSV'og3&rJEh?O"__X.&Yl,1k)o!fd1Ep*oYm@g5
CP+U3>,8LD8W^3G$?/qkA(lI9eFLs\`Nq4DOq&>-9YcD58>?G)?eX#Xf2;$3BiQ>L
+cE/)9U&l:m26A?_CttHf:^IFI)V^cKNBJ:8hq\a"X2XujK:21fMY.Be?MJ8pJ9n1
fo=HM1e$.f\6WL9*t>Rp9sn-&gfh;%:GnV=NNSuhQqrTZ#b)KgLl=,0*iFiiW`%qO
8if;olSL(R^bl\DPCDAQUs]ElhM`[AdQj/2XPP04=3NL-9g;HV]K^48h^[2R?/!2=
n$Ob,X2<pb(%!JJ<D;IC8(HTPCMhpN[L#Cr?gR/XmJpD$'+-neT:P0'%HXV"k"mmB
a])0%ClKoAp+1&O$b7,4\>Llo=l?9CV"n!sQ#fn9a,s+/cH-LO"d`1\\Kq&,V#@_d
X[jN.[bkLd)+m(Cd,j)T":t?/@I;HMFLA7,E2dfW5)pMMK.j1fLrHe*,%U1!%)jI-
#NDR-]Cmc7%=X/&dc-@qcN*MAc5`h6Mq:)I07Die,hs6MZ\T7)WP#!9,[4c7iS)MD
=2:kD@c"3jIZ"snVu@oBks.ij<iLH3=HK;61*e7BP#s#_i`4u1W8Z":LPq`6MbP]3
?;)T5W+2'u]F_+#j=)L/QP#6J'iGEM./7/]#M<T.j:KLoluERRC99*HARr&UXoW)l
3b)2_AIXsaD4QJMGN;/+fqdEc4lS(kWEe3$AGUeX^1`sIBu1O[9_$`4od%:hYNFsP
B!-!//Uuo[BP/H],JH[(EeL5lkcL"tk#B=01:S_b4.Tp+#a3En!;McGE\cJd7Hm<H
=P.&Iq'`AFkMC?FB\lE/[U$bH'X_[gGlP)K/&#<1#Uom4niY&?UG&34ioZ<HRQW':
Nt(a@$YjhJ^k9iX$nUcLh!NZ%l:'ouPA#,T&-@=i^4abRZYAAaQPQ#p`X_2)TFRA;
AH?FXnB\O$A<;OT$/%,ag'>#I5b`6`C7q+*8Adk+WPHTTR<X9*0!,SsWhm4hWW'1j
)2)c<SJX[_lS4-/i><(sRH?-0:+F9KRI**kq1otgP:jS4DINo3s$RX28NIlj*E@ug
FXsJCY`S/9A4`kkJ[dhCO^Q-uRPlQ2RPbS`'=,uA,hbRSc0ZE1D(7g(Nj`:]lYS/1
m+&iaQHQih-1*kBa1fl:]!,q:K/.?$0p^'op&Z7EP%1)_`GX*>jiIfI2boCl#pbu,
/03RC)@s@QlZUp?>VHUkc4NU7.M_:WgT6W#FmJ<U[C5Z9?M"NmLuDt4&qI`89CAF@
>DP8*lI2J8L@XXL_f$-A?LG2[:m&+)e/tRVMGT3ScC6%f>IoR<OJM&XnAB1kQAO<V
&eqQA0))0geXD1J.Bo<ml"M>K!!r(UE;=3/b?cXAJoGtF%+q+!)6%Ruo'ql'n6qmW
7huIJe%OoFdmk)`ptR^R+[R7h1@Fg$UF_INVi6<.U^G>PgVF0:aCfse]duP):q&l;
.N2YE.q%'bo;qD>@;M$Xl`*o6ih/=_Kkl%:kPmJNOgpPcY-mDnU$4RPj]o:H3_;Gs
P"<//idlq[U8ciR[<eJR>TJX'o5'0!;gE]?S!h4M\>adsVLYf_mn?\iKU"%rcL3#u
\G3\pr:EX0a&36mIlg9(l?-PpoQh?LZ?C?t%eLE3g8@d=k/n4J(j3;_9"=cdr,Nmi
0_DmPWl1lK.nF&@:@!2)8h+Kd5*,DnOK$'YM9fN;\a]<eTlh84B"qPfLM1bDD]j#R
p4$Fn&CB?lrhbLK'_YF"/:4+5-P>.LoRUXt!N6YZ8"X7qpUih:c[^(IFa(bH-,2G_
06m6kH?>3lM[#WNfd6:,T_-ZCX#rB6ophpfPf*5]GOgQ8!0a$p+a$kIMn#e(6<fN[
Ed7^eq/9GT,@?M0PP*O\-]3!;HOu?$?$P76;cp)GJD0]eT#2WKf*Vou%a&VE`M.>q
%HB20;L-4r7$J9]aH9%$U1M;VXN@u7OSYNH'V>0TL$;27EFGF*3WFnoFVj8BbeC('
Rdp)f_N)j_H?bC`6:tAtgI1eLmLQ@m+JBo!qKh6"iACOk])AR.S85X8_jUjgR"6ut
7aL;BT6AKWZ9E;q:@-[mWQ3"-^CID*EW!kBQ3XuHR&g0e"mX\q-(!&-G-**[Oe72A
HPPrs:W$+tfEmOnr07\,fAQUpVT4/rOSM.im<j4DWMEbdr5*GU-KT>nM)&);0t/f<
7sc.YOJ=i&Lj4[Ahs[W#&\9_s'Z3*2qABZ^hi8W]Wq)Mubr)>43[C_7nqoY/:]),]
)$g5tA0;g"L4\B_b[<:>)Z`;\OPjA")iP"582O"T1`JejnI]`UAIsed`WHg/dQJ-\
Mh_C#aNcIq(Cc+oR-Zk:2&hK^E*9!4Bc!<KV5%bkr+%Q!;200`r3freN!r.mEN$`S
7>XR2OBSm:6ogOR,*?WAKPMO4`1TpT^qs>8*5a2"O`8Z[5.KD9[TgQ&EF0S`Tm"Q-
-sSJEhs;/K*3U*()9T5WMUkD]PflthUO%<4V[o+a8YQLcg,(Y0$tZ3%`5p[T)N2$+
JW(7J2:bNGS&)PrK.W^!m(6AUjDVW[?F)IoXJ0XEg=jS)^&L^H_1RaPg<Mi<EQ[*3
2Ae(XItQj[N^jn&rniDnX4Ai5Tq$%*9YCjL%2rpK":[CU]EW6\3oITO$YG2J!J2)T
5tQ.Sh]`>hC`Bp(6:1o.XBJ*h[6]I.U8>*CN<t@OWlgW^JV\@B_.nRFK-;kA6N8U!
17B+Nmc%uW2_jB#(q3$s;S#<#XA[%fl,8=;U.OqLp)pX457GGMFKYC)aUBBe/rs3(
M89fd()fbC/.NN5/_Z09";#6X"&/+iBeHbe,R"5RCfA=lbAO?2J\e::o%YGYRarCM
CeAB)Vr<PKVnXdGK(mZ7U7/eo#h!]L4383l:eg.8.[3o9n7tb2cPg@jdSF@l)oC)k
LAslej#!)TZJ>%X0e8Lk/Z#eR,<;Ij`>%-1iQ[Qh09.#<:K_ea>37`bKl3>D2%2G`
,Z9U$D^P(&<#I2CIBLQ<;8@2h3HgZ7g7Ua=BkCFGAIDhs[WC26d.Sc8?+8/_9*)F6
rD4G2p7l&O=]f.:8g0Lq^L:8^XlXu?DCiHuY;(bb2_QRXYs5h!N$V4[fhOr)ch/&/
aYpFW9(P&Ec8_EGcYMCZ+R/6]VF;C;c%j#oli0.*bsYm=43Pu:2*%pGQJ'7B@[@^B
[BtN&<ZkGOX.tJ]eD`*AL<:J%qYFnr-1fmoVsKZ+E.t%`9,G"h;1"D+3IBg12=BZk
TtTe"(iaijq_O3h2Qdsl([,l4d&\KF]<TO;ekFSGWGp9K^bbTui2cL^`q@jL>jb<Y
4VLlUM"V9Xn\liFFC(:">t75YW86Om`[mXH2XhmGm5i8Qr0q!7[se8]`TnOOE>@g<
p#R4^m8ml<D+j^F3U,0sa`0j2QE5aVaC_g;UafP0p?fpS9DKfZT(j0Mc&@YtBD+rg
Tf",HZ%OLUTQeMXnpEk`s0qb?]TohXF(A/G]<YuE<"`;YCcI).-_=>plktI(g#O7:
8I+2&?W@:b[Qu`,rCm>h,k'fHXs[ik:?(UbNZah'W!j+YnMW$R*ZCA9D[4OdK7^90
b!Qk4V&W@[D_W"VXd>,<>Vg"=`)7KlW&kDj]L[7b`SNksl?f21r^Q@Ao:SV-C_2dS
,Y*j/[Ku(_'LLu5&a65Kju@Bkas0obDEaO+9'2.uLlcW8XYpCV+pqk0O_7,98')fT
,`J+5$p%#%U)a;>Z>(RPXX^R:?;73:G[*fY:_8IOfaFSbQ4_h;8J>G0,uKaV%kS50
BmD<VKX@(Vr^="?7iY]bGpUE)7Aos/Tpm482Ts'tbp(+[k,DB9VE/0Xaf88Qq7)KK
L1O*-->Y$QRr@mXNY[I]-)OmhI0C%J/u@YVT:)*_7(lqF=nkOJI+:<S`61f1rA@m5
15>DF`jFFd*00QI/+b6T:\F'Ij/[td9sFAf(]>F!ar3ku%EX]2&nO_Z>BI6*_)4\%
k^eBIR^#Rn;`?VrBWUtjF%H$B>$bs#HX`%qefQm"6:GTlGp,ucV'"c`02-/@V<8H1
e+Fmo<E%)?9?FA1'6-a()6-d1XeRd!I9BrlN1ArQLt"I;1*iuAX42$T."Wq"l$Y"V
Fbu8_fKtY]OUJ4r<9g7BlF2gq]VH\(PuMd>;sY+V1_rXN<0bm*/6TCd'ah,_VL;(Y
1i0NGfg/e.Rn[T!^8[?[QE=VOCT@mq.0T@T<dS5e@.cI\Z.;4f=3X.qC'Lfg$@^Bj
Wg(_E/%@3S'u)LoA?$(d\h=uP;d+E6M1TWR'KWO*'*fXoA`0?fiK@K99f5S^7&d&L
UmHZl"_I(+HW>Cf2/=I*<fQH!2>ooV'gmEY=`phXP.jrU-$\IPFZgQk,MhW.KC3"\
>SZP3;Y%Csn8-F`-G5&c.h%Y:)0-mOg^m^U[MM5[+:NodYn_F7qN&#oDBOHFY+f)e
"-@'p:REP\T]-$Q;>)`@b8Qe=EjfuO$4>^A2ZTUn)=ikDaTO@K@j"&'LdjA"Gr.;Y
TG.rhTF/Z3:cW,q6'VIq7Nc=(.L'^F#Vg3K,35GLA[2sMJH/Y-H(6VOTVrmH:acUc
Ube1l;AB:2U`tIJ1ZIn->_s'dd!?BRLJ[1S1sd?T!PCLK:uhla#]nLGJ27F,g_dr%
Bas%2&-hXJ#QpH:%KX@'#Fu[+EG-pRbH!hdr6M&;5^!UqYW;t"c5Aok])b261?-ZA
P^rgKc@CEkD/e$r)*5@J(onE]m%jZbr"VFCe@OuLP"U[8%+iSqgK`)kPAV<G5`/CU
'S8ASFJWk5Hf5IN;[S!do*:\6.YenISln#33At+c#SB69#WNhV#.tl6E.VL!Tt_$^
r&fU(m&Y)LWN>+HdsE!bHuhn<qk]/J,B*-<Gjb)H<<bApE.1m!8Et[Se>hV)"atU*
nMPg:@T#CMG7ceK+ApJFR:*C3^A;pMJK3urFO#2'R5rl%>mm*DZhS$V7p+lBRrU#h
NRW7r4maNIpiN(qbkdn[0W*M/E;l3IHa-UX2&^f3S]BFZldJc1Z`rG]%GZ9M;WsNP
e8g"LiB0tX0"dgl^on!h32G,+a:#q1;Bf,Rrtt62mt!%p.S2c62>'B0P'NA[;8".0
jIEuT/>A*eMU/coko8;>O(_Pl[OEkX)"7@!gf&Xi`om:BP^0He@#nOkG.g7rI(Apl
3ii&N-kkkC;AIj\n[%t>1)p3V]@hGTiB:^<d<?+dmlsTd38],5IXeiaHc8JP_Ku!<
hX9h2Ci8>60ECs%E\D'QnF*[^O;.5'U@rN4q4dTR_U]s8rq<PPnddAFc_UXQMY(A\
?P#!ocd:a64Tqu7peX<RY?ir?W;fY^=V"Quj)Wm`_OCNjg[@n<NWSL,Y*suJ?H0o+
E(9Jo4Q.n<Nt?(""kY8:&:NnC`[!;h%RT3;+BukJ+jaj",[`8UDZu-h#NSG679XLV
`<_D7#j4$O!auC1,+PeQWBspc:B_&Dk4>=C-uX4f@tOY*j<A'@"7Kk5mRIV9>%J7>
$d^#O,"2BkI,?OZ,D_@O:&]3+pB]c?Dku\//en\s<'X9k,9rFG![A5;Y7U+_7OX<.
Ye't!=?OoQ:Ma4h@cV6bGf;=25KF7N@RathH>>(3,#M#oEI^!&Ag,#f^-j+*a1rgm
i>I4Z)9sXkU/;OV1agBp-LM^9itiUd^,*XG,4UaQ$>Lg&I-9fZp@3_ldF.IB?rSap
JZ?7%&9T%/=Fu11*C=N^OfY0+XDuXrIV@@Z@[LL10,\7^3mkU'Z*>>OQpr?0)U]ZQ
1#OC2=K#+.+4:kYB6LT/!)olk+_/_F&\KC-2'7E>Qpd2\KuG+]9)+%\)$JJ1nms%C
g7%QZ+`\kHOf]N2J;t*p3^V=GK`5Z%HOWD'E"730,4ujC3'-.LpsLq'0pa@[!:I_n
2[d:u%&uVS+<opj$n=a(nTmo!]e"j%Yi8JOCSrT`lQVLr2<)OtNf%-gU*UH;`%Hok
LastghBkYi`6><0dbHK+?;'>6p+jEW!mjU2\i8$618][Z,#L+7^dW;K:9-N4U3nR[
7kI(BX-.__EH%]AS0DWZ*YV@C'(Ca!:+;nP.FOD4Eud&WW]dZB$kk-Dl*W#-Id7TU
:/].XP0D]jR2hE5/X#bojm]3HihY$6*[W*h;Y(snN`7e423JarF/(RU%3dP8/9<m-
L"RT3)_5Wp/(9Y>dXO%Dg.I6,3]"u6F3u:d"?_kR+VVgA6?#Lp\M+X\-)/L>':gB^
p9.AZ,89;B8YnGRa!,U73!r/(E:A[9(.R:-6"9Wee1spRAHZOEKl/_h5\qp77Z-]T
s!(Wej,>-YE$D&u6g#"d65WItM)O?%GJmi.U2\$"=Q<>E23U!N,Z_HB%7l5Q!Ff;&
j*VufOBbQh&!P`Jc4D_/+A0"$5GJGod;V*F6ni9n%M63#i^5.+pA'?<r7&%a&WWhi
DL95//j`JW&Ps`&3=/$j,%Ql.Wlu[)YtgE59M!)Kd%O6e@'\c9>pC4`<;8+WeFTW.
7WeB"U;[Ut-9QD5:!s2CFLl9t7Otjp98i1:1sTo(8P^&]pJk'iPf?s-aoPJEj"K+\
;qU]?Eq2s:.l0:67r0NU0]PKq<E-Lt#`/4THSLe7Z/`"PokP'J/mZF:9gT9L!nKmj
0i&!8:fX`$0N,8E7o"3?/%#=6CI)$Z;d2jDNqLDLC>DO8h]p+iZrBCkjm[C(\kke@
37UVTn<I?iDT8\CMO"61mpT9A>XX[I?YW;/7mog(6XV.(7hitY6f?!Xri^ntGB-Je
$A^f`O%a#$@>DW]p-`dETjSVc:)5m0e8A,@MdjRC@hl3k<>M5?fj[B"?</.V:VC$l
@g+*O>;c&0XWLL$ZMsNA56Y7i1&YH:G^%#e9LtUK<[:,N7c/@@OHoIYFt$\5.:!]F
?red_-_5&(2/?u5,5(V>(0+@HWC$&1rLs[.;9NQ\rqt@6D`7)\,*rU:m97gtDt'H>
7]BmYLb01LJV$eq2\TZhF`F@0E/oos`eK[9&g4Y9@]*(C,6`()&TOPODp@<\=%-R5
O]VZ_YjRO;;1>/C)+k/O.hMSNKd98L?$<[H;MqSrJe!SoQp1\<:1tJ%Oss7_beSF!
6j#5LA!M#O!a\lo=Q<[d-pTZ@EI,%UHNZ3"=170*pap[YN9Rk;a?pWmP&8g;I,^c<
l7+Ns?Z9$0;sGQHf?W3\[UYHME%/kCFq]%#q]FFOTGLaT2Y\j?+_Hsl+O9m5d&AiS
R1I/dr^?#q7E]0Tq*b[1+\qrR/jViMisM/9n.^Xd<`Od\msamb0pkG9CN0`Voc+ZR
,icjlQt/qDB_']9L,(&Je7+_:HV%=7+F&EWeO,!H!oc&%Kjs.rE#"4S-&+CL3EVu.
QpHUfEIuI];Y%S+&#E@*6K*Q),%gF</G;0u(Q<s;TW.T=0]@i)QCLCn==Z%b0g1HF
UOqK(0)03I'U!l<FbSKJ?jk=b!`b$[>:0#f0IQfac6JHQmX807O0N\To0RR:JW<fi
(BP=Air^ct)3_QDNG1[t3ADB2h+>OlOK\PH/%Aau(dQ^(igEai#/+A;(,_Ld,&/,j
&CFB4EKrk!E#E[j.JJa9+`/!jQrHqKU`P^T^44I"r-2Hm$MeUcW)T-^3B(R=eH:NF
*JPA!3D2Sm\8-#n,j]%FKd5E,YH1GJ8"I.SE&'1T3R2A+/WrNn%JdjbQjuA0M4YW%
G'X70(kGiCl:<8bOX%&>#XC%]PDBE)JER-qom`:I<H'-V8"".EqDF<eV*u*G:AInX
=QcJl`MC!sEgIWTJh*T7=SY!`0fPYg<g@kQ.lCg(R3ir7H?:@"H'[/fq`&dmHAAAD
MHbCePj8bb>(A;%8Yk'fq+OI9\V.e@;%!/AZhHVAK*tX>F?)_8:87l[HCj]G2(WVh
LK+MYR0A9s=(<.jZ4`4QWD0H=2JkEZ*Lc-=P:M`-HZ1LhmlLW6GoSRHNLdZbDe'nC
Gc]_h6ZbZM-J9Fk,6`DS0JT$I.ba!'/%D[j+G$EGZg(^Z>0:[08[<"=W'^$U)bOEn
;jB__]mC?f=N3]HWL?emTAu4]#R%Kn015N)+`n/%(9'n?cZPH]-(/[C1p\W6&\4n^
;>;=giZKX"B2[;<\l'fLgUALKR3<8c]Glar`jr3U[YTeE\*`0b<<hM>mdBgb:g9S^
)l:%Pqc#u4,+I:d]Ci^&MXJHs\s6GkHiu*:>Vm$"I2K^1_d5eOI%eE\^otuk\5C+P
"c]p-7PjeQAgP=3%Dr]ISMb+b,Y"^oc@Eco=X0@[DVSpSF)B)_1HViQA*q9]h2rY:
LKGCB>H,6<M+cO.UlO4Y-,5]7W(>]\B)3TEVWGU@De>tSOkc[c(!!`2'JmZ>Ic>6d
Hs+.X0m>amVS'a^B,al?e]T_u_INP0Q1`:fS\Z_g\p6_37?c#4+gji<1M?XTWEmQW
lpA"u1L%,'/Uf3SV,!alU:ACl>VcZA&(0.!=IElCSIdn&g8_Wb=H5$sY=SK%m/@LN
J_LZ_74HOo"u*^%c9%HD'4]9S5L#%uKtQBfr$Be!A]3:j3N!#Jbp[C3;:i?7\Dt8r
mEj#3#aO5*E'9=='/W52%9T$$QK5i,f([m;+k^R4VM-TSrJTF"=52%9/"NGS,,L<*
J(iUQQ[AVHCVb7i--spQ_J)ktlaVD)pg.7CJ)0Xd:^2#'9AY%q,E!_PZOOc<Qo?#B
F@8kmIHc?Ig4.%G.i=0jO%5@*Le$;E4C(\A;=2B[0lfh'.+?B!2eQ"#g#6"8E%)6!
!['^c+a.OfTb$oZqake!Bt]Pqhg-C+hCQU^'7f-5;-h`/*a:?Z1W"&#Hdo6Y_]$+$
*%9fB\5"kJ![1Y8"C+B<L+Bc6ZuAEb68b#MlJ`63T#*1gT]9S<fGT*rVb)V+Qg5mc
EP/n?-!BU-)jfnbZ4N$>@nVTBGf^o3TuAK.'t`sMXh'@m5^;)DkOJ(V9kM--BKm9o
GZX<>c90[E$Qe!f+#eg9bNgF9icOq\h^U-GJVbE/N8Dl^;e,(EUK(.o[5;RV(aJ`o
B4E#pn'#rUheYai\N^#<3\mB=4$#'u8akY;Mm[0[<I1qhaUh!lILN#Lc8e:"VE==E
#N@X:?JL+KU"'kJj1`G/1"6!eR2is??9-((E<5q_mE2]#qW_Sd6]clVdDe1LnRY1+
?t(5\;38;(0c1>;"!N3A>Vd9,7R@2b-t<;p%#1N3bU*fP*0(7K8<cqc0c(;=6\128
AhK>X`pu*jQsr&p`o0hKI)[NK(dSADEQ#.G+H]GhZgj^N2&q>Z@'_=V2AI`r6R8t*
),(c+)[HbE#b]1A:`)T/_jG,iD&YCci,YNVIaTj;`b&'KE6r>XZjd6QiLnD1H%F+-
;CH\kB8M:;Dchrpcu0ti@<)o@jnM+Ob24N_Bll]+Pe.>.Z+PdTD.h.R#1;dcNa$@S
lh30YbVBukfB$DoS_Q+f1!a1G\f?E5;5MF[UDuHlcX2XOE8s<G2?O,9iU:f1X1lef
A:b;7pJIKf<!kY;A_$Yd:gr@l@;q;fJEGZtT8)PCN/Ko=CW_hF8e^]WUVWmJniX'B
I)7/O&7l*B_6VM7_/'s/Q*Lt>1r:X0o9-b^bN'qJYGuD(Mnq+$IZ6\;bPqR^.(U+r
Vm!,eqo8`%FI>Y!J8GHS6'M'T/a,"X,<Dm\*=m]nik2KH82G;kUM+Zbm%uOG@+_li
Uq.?cCM\aXUD";IQG=siGT*F#$4qtF/8BG+:2*)DLSN%'VVn98]3bZBPDo5s0Pu-#
(^:Zg`/CTFU,8(]oLuQB/G-!]QmhF![#d);Rf`m"Ll*Q0^,!=a[3\,V-OL'oU.$CO
aDG\,YjU$t>R'hI9$K^Ze.!DLCYag\L!ED%f@PlpQN0Q51/D(Q(,_u(VtB$W(c&8C
KSNTNXHr]:+f*&AcKMrg+g<X%<G0u.SVnPc+iTPq?EtL"CY2^*UE3FoNLb(Cf.I9T
i7CZJ\_G^=!A7@gUqlh92\m?MX)EN-q+D'J?DsRBW,e'VcRe6WLFk*f^d78'b3e9#
4`?T2)/RWc\lk9QoB*0L#pd8&eoo95kq6V@V00CcU!^F#*KEb<Sn0!;[B#,NAH@]=
P-tgHGh>9ml<Re,F*nR,0Hl_iJ3hOKo#:ngPlI%!/;E?!d,DFaMs]5Pdmu,OMsF7m
<WHQ8CVc%H):I7&Des6iKZd8ie%V_\5%qiD<!Ng]C:.BH6JdYVX(#Sd+ecM[N%d4E
5S/'QX[1RlQ)Za2eB#hfgSG0GG@i_RT5U6D8[=5<,^qXSj>[L%>mAZI%U!C]PYZ08
pH>.M`9!S'VqCW%2!KPl>rmPeI'.<boIm9!;t<_BTA@fl4dT6u>i3:\q5?Y?WgN)o
I0R':Qq+1?h.up2V<uiu2t[7//.FgtiS#^cCgW!68UIW1(;NfP5_5us0I8%B6)*(N
M5ef_:n3*RQ`BZhbKPT8M=MT!;HBHY"%$q.23bIl!D,*_HE#,M5'#eC+FDpnO9PcM
oIU6=A+bS=63KI('^9(S#DuA9pF<U6X%:*KECGtL,""Km#g#>Wlil8Y@cgu&<+n%L
W7n,9<u[[Z@6SO)Yt+!^X(28;-fpI$&]@#cSM=t,lf=b)<SEYpR;+ElSiMsQDH%dQ
C0TWU8#Z(*n0+KV4U!Gh&T^d?Mk$RdD^#gjR5ZO)oA+NlC/mgH.S@g^\Qpn#`(9(&
kDFo+=9[?:9;el#fAm!pDRA(BR*KNCX/70N0SM\X.S<:Eb`a@,@EfFQ1uC^O+@`)/
8#_m<b7Y((LmCF?78"DX6?=bi`^g`1,rjAAINd0.Qq=35J./\`PRDmX:_R<u9E_8^
nu*MSQ"pL.qTP6>"Z_c\OY'/3gn/7^O\;uC050;\-o2">c2%N(8?F5,8a7up6KX5m
!pbOC4f1ZUlJTun:a-E^"&kY&$gG$5P(:fsRFhr&@FO[N%FF-6;p/#Gh*s,!-D%pi
RbU\E6E2Z+l'/ce<N9=XN)3C'e:LA/@gn8<A:9'ZMKr+WWC<r^Ck>VH(.k$DLHT19
8.lbR?D]kVX-DHdOP:"8g\kWD/ob&2B0^ngD1>U5'pTr*d:CA#)'O[LC0+t\=)>,h
,.;*ne*B%e/Brm"K^!fZb/C#i-&tZ=7`%q'W?U)+^p6eL`l&`qMrusj\*u)oT33sT
,snPkFM^K]Rpg6;bQU+"R_'+VVSgkF=0BK;h+9]:?7WC^\.UKQeFH;ID_%SMf:p\Q
42An9V.i]2Eh4Xl)J(O4!@^K9pDB4nI?n><YGn%E4dh17Clpr)2ZdHh;aY#Q*<;UC
a;L(dPu3WZYpR^f`>*Vm>-<S%`"L)]iK>]eUugB^fM;"[9'ZM^Cni6-`kPo,@R9Gs
%DWg[(T>OcI^'8I-FKQ5W6=t(feIT"Z=`l?>7lTD/aC,R6Doo,ad$f;\%Bqs@^u?4
%9m]i-s,Em6keH68/XaQf6!*M.B6SZD:d!R"s,oHDe:\H==+oSggK1kP&b(VcEiKE
*fUA0SS=J<cEYFN@oJOICS\]^h8N+5%\%96,H^SC5e[U@L9O-pJTuS!c,90EEb&"r
q:XO=bYa,fG&4nrs%[;a4d\h:+OPuh[cSS^Xu3(GX*O/8jNHe`[IJFj=W8_oRB!ah
/kmJC6Vm'-O-d6!f\!cF7ql3;V;N,t"9I<'cChT^6%C'dJ10eAK0"<;JN6k`J/5k_
$64[ImK#UA"V;4~>
endstream
endobj
31 0 obj
23116
endobj
28 0 obj
<<
/Type /Page
/Parent 29 0 R
/Resources <<
/Font <<
/F2 7 0 R
>>
/ProcSet 2 0 R
>>
/Contents 30 0 R
>>
endobj
33 0 obj
<<
/Length 34 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1jAK85&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
@&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
/<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
W<WGhW$2KjLh7J/$G*OFUSEVZ_D!.;C`"p9U7;cDTrK)jJO6k32_54O'Vr\kLiCIj
Dd6B]Xq?3.'f66F6A$Ot.Sc&$9,^utL64kN&0`WG<;@n5iX@:a_*Er9N8\e,O,`1m
_DXY(#imnQD9N\NW6Pdfh1Pl\fV6AqI,Hc6XoMWcbQDt4M`_L]5l8pe!6dK`c25F<
"9Wnm&.Kk'i&[gs1+kPHUFdBHL!M#0O"9N'`j28\4JWk893U&YXt,t,"T^oNBUAur
9&LWm95nbgL.bGrQj3YRA@MfEZ5+F[!LbQu%W#]aa>leVR3,K'+DMjkaj$k@8#q/R
*(:-HEecA#>8kP8$tE+g"sJRKCnc+/]6>Gn7HH"(LghfT1\Y0a`Wl"!MN_@t`U(EK
Qo0kP>dsJoFP9E3#?t7Ecp56u6#^=@iK^Wf^]r*P2Afr6qC@G2<i'\g@mR-cp]gO"
Bp"/G.cHda(+sBg>'Fj=Qq,4m7pC]UKtWu:R5U!?Ba]YDJLp#NDAXruAm9H!W*@N%
`9b+H(L`>5V46XVb$_.*%V@eC@H^?;'8Er:&fK<ron/^,3:23'@X')m)qX9d&rAqX
7g$CUfN_^EWR:/M)eTXa.i0NK)PP9Q<G*r)+d\?d]@Vq/Q-Zc$88<]np=^n?@q!7n
(nk2@l]4J>rngq%Ch@#8nstcAbA(>V,)GqI6e@+]ojZ@`=j_GS]3X(U-)0:jK.Y'J
dh$12/RF`+%OQP:POB\:9%-ur9MKRKp.O"jWS$tI)UeLSS6WNj<G)A#=mI.QaLKO)
L467*j%rkH7)Cl`P5iA'$ZLh'KY4*cnQ%_7DQjR^3b-D6foffH0Q;`I=![[2HF[^f
iMa7$eBglt$?&YXF-+85>)CF7C(RNU0kTjY8=M"QaLN=D<K?(nalZfF`PK/Ug<N@o
Km#)F'?'V`[iLD)I?%%E\KkG1OHZb#LmY0R8(A6ECh$tRop`4jDN;QS0mdfG@QOb%
?IFdA=g$^g`odPj@n8D"kB4t7pYs?P1B)P,Cs.HbMVDHXgMX:+bEV5mZ%6uJB4if8
'_f-&?Mi[ck$=3%G8C"s;sBF(61?tfhWs'`Os,_=nuG[pM;I$3P:b>f^]Gk`UN/GJ
0$4./PZ5b3S)?Y164#VA_F+Zu^NtuQHCW#b9GM$=IF*[U2Fefr&r`uI/B/0pfKRY!
ZICY1JYKH)4NJ\h"_nGdPHpK?3Yu<]CWdV>R3X&8Rjgs'884X/FF%[A>lm*hI?VNI
2]eXV132biWP&WOhj,3/FYF_e[:!TeW7+S-Dc#RO39*@6bbTV#P"-:U"Q>5`J2p?3
clT_E?;#;gU[B^f4,4PG)q7uFk9Rf<f&%G2@1lm%Nd?m%o-,-j4$:[VVND_u.*7D*
IoEm^*QX>[W\j1,&AE7n.Ftoj/G:9gH-/b$g;coV?@C4`>9<'uO(3PK/\o6;4rN0)
dIc1LXJ,aE(@*.[$kb;>nHhiJO#GYU.Y<m^$%lAqYYdi:Z&T:99@_&Yh-26sCnSO-
p0Rr9.jIE$)UgF,MS)N;$@7FY<029rWsEcML'mV8/"6CDU_,CedL&[VX+%Q"r%;Hb
j^,$r=]W^dX<B-Jm]YdZam$o#N@OT.3\!L('smqOX-(16PYb<dNQQ$OeK2sPqatDC
V7Mtma^'[/BO>c'9LL@t>nUp^0@2\8<E8Np-fKU!b18E]@f8?f@,``G!5=\Lo00a>
HPm\S^%LloZR@Ml87\#spR_t"A5HVb%MafP?!C:*;.D;5D1rAZSD87;O=`@IJiFD1
OVc&l.?2c\(kWN0g[>uEZK9#+_XL2uUO)4m\"Bshq)#N@%UR\>0r75_,,3OtVsXJp
E2#4X>14uVmUaEU-4saHad;2qChjm0>35+TX)V"ZS5eXAiEO]beb#lZRJtYn,:uS$
7Ot!'ba[6iA!#bg>JXIS3p@W0Th19(^=`lf>l9QIYJt_32/asN',-Ssh8EQ7=e7bR
"a(8(-Z\RuD<grd`U@O/B5nif8aD,PdKMkeMV^j2AAk`ThRl3ST(YY`ON`NG8=-fp
@)P!*D<dtnA8\NZm<+GRiBlWs)d1*1bY:&+2Q_urK,NHI<NR7<+3'doEF""ISt[/t
Efg/ZmTEN<,SbLX0T)L0`]n5u*+!?EnWRgaA#hRl:ViM$'CVKB?R9k)g&(jW^MEu+
(uG*opbDPa%9dL*[a!J%>=@p!`G1ECd:Ra/C#P3g!;="pRWs@]c#'+@$'l[B]*aU9
Sbp$kf%8VXkG2p[;QD/]6e^*\2ns/p(U`<9PM2ViZ#c%l\otbifi^%@T#7foZQ3X\
a(pd;".aL6]A1'f\EoekgYM"2imu/!GF\+%pbs%sg%2oHblD-1q]kUaG=1pB0>]QK
RElk2^:j(bdX/\MdbOknBnT3P4)##m;3jZ;5-*W>7nI4(C$KGjbBjZ3X)0IVJEmY"
^=mnHg^FDCj5QYeE9(rKm4Fp8<bj<)oD[]#i/7Gc2e2?sa!RI3k?:Vee.p`lq)K[7
HiL(#$+[(N0u=Y[ZuIMlK"_)9-hBP4CA?Q(mAsQ(UUHGDEictA>lRKNRT<ta`)+52
ph`WnClS]_`QnD-m\u3"pZKDJVGs'Snq^soheOjbaCtOtR/tXX[7-JbjA>p`3+iP$
h!bILWWqBWUAo0RUr7fDcg(`Fd/K*b!,t&^9oN0bf]MFm]h`tDO1lf6SnUsXm%mn]
%@4BHeBAH<"=/N@Y3K`jB*h0[c"(cqagDDWf)gVK.Kha=NrK,LB`ddSs0)jqbsr15
,66%6e'Q$Gcn<_)n:n0[lH_Brj&$<40*Y6FKb3;g`(p]c`=9!i#nN9M:K%NCVY\TJ
ap!=O#5GV2qWqd/&a;clU@Kd#PeAI"TL0]Kd5$'r3;8J?+g9Zf7Q*ELTW`qM>Kj=!
A>Uh'cH?S,QK4d(Duueg]KPcTNR;e.--VkgSund>&93;(#_oIXI^q0p!$ih&C>+%!
HPPZ&(+S$E:XVDrOVK-bn427skslS(MDD/X(Q@l!7&##urt`Zs.O93Y/<Ls8E;;/A
QGZ?2nP^37p=A7H]l>$5,]n>Vr2%g+6Z!IZ#5KBUGoC]'R$$/U--6d_$nX4H)j2?0
ECc]Vr1\msC!#Eu`Pu_h,^+f>>AsXE`nGh$1l65oElh'>La$m0<@,]0D/'A$_P7-a
)'i_CE7%WFN%RJ3Y]>n;=G,Ci6R7bVMCg*(Ulp!KZ3M,$!ds0B!AS,c-IjF+b9=sJ
fSNA.9j]C@]R7R4,I*n)L2MP-<g+hYJ8!#+WKqqP;JQo2A+:&1Ou,OX@X&J_EWf'J
W,jUYr+XQQPfM!s"`A]BPUT1=6Z3[A1AX[?5*YA4E099M:/Y)M1=_OOUPA3F"-G9p
9epcS"=!Ln7WC/<\A[_;+@_DG_\fffhO.iInNmq6ZSX!b:En3"2C6N.ngmn_'U8.E
.5K^$8t`Tpf&tJn(6Eq:nba`0`0=p-/b:*?1Sek\P:Gj:D6p$1,*a5odc;'*+`kI\
Z=$c^\=3TF39/qbF0Rl[)a%'24^ock'BqWC@T\ia.ca;e;a-ZQ;)(Hf3qN(B&_ecd
ofgB:,VjD7VQi>/D]'jW>4a't&X+0.ANRd'6ZXG3;R8VEFXr29A?Vn!65pRMLlM"i
'1gu9C#iSkid6GA3=#jZ,*J!TJ1>YX(X%_+F0I,e8Mq0Y,)<[[:HLJ/@_,O!bNn#e
Zp?9BUnI=)6ds2"e0lM_/P>/:8a3HeW<51J+Y/<!6$0:l;pdboB'Z_uG)+Za&ft-[
2`hE27+6DO#<bfQWedr)H\QKN&nN#c+:Suo:\:8+$LLTDf0RlT+*@q.Z@,R`]\@I(
4@11HJ/(nFnmJj8dkqe9of4?h4%/`_Lt*>F@k1H"+VcCt]G$n^8784X<&kY@1D9ao
_JHW&CGWrb.RIm/e<LlLoN:+MU%9KHEuS55o0eF</QJ$&Op(]<2K&2D4-A&:jgLkJ
WE7,A:bc#l<N0%V,9cZ3P4`Hk/42C>WEf+?+Jin<-bgd&O]CNK+4Xg^P9h^,'c04S
D[?/31)=kPn3(pe:Q9d0U0oaritY(\9m,ha%_fj$ocs,ZLFdgSmF,O-6>l.;dBkY\
,5j7)/j4=M0F1EtaOXJb'TN@VGc:g_obh=s+(L5(7Ite8klb)6T-D^72\*RaO]*[Q
Cj3bPBG;M1Bp!"n9W.HUHV";)lD#4Pd6olho(1ZgG,h>(G:ZAX@u[6oPJj1neRPCt
C/i]&Cj^U$[if_XN)K1PUaEUQj'tCr@_rmm<V3*,lY"Yg4OSUjl<eB0(JklKA.j!G
<sH.^/>)Y>?4%91p=jSqnNGIBD%qXP<m>Ci!gT%%/%3$5e6R(Xa`=gM5Y2c/K9hQf
?S+.KEL0:QAjKW:6Z!W6DsM:d(--IqCpmAlCuQY#Z;4t<'_U!b3X9PAO[0^KSQ=aC
P,6K/_j<\;>&JGo,0[8Ja'*8uF!2siBepZ\-L5q3]2r(>0F6cMpQg!D-%,=&6>(%U
U*OnQgK]NpLFma4XA^Hia>&[!19;o>=0Hu2P'8jeHcKrBU6B*]U6%<pFYeVu7p9!H
*@s]0JX>AX<P<o0b1cUO<)9cInhXUJ:*GS,?+61E1jIQ9)QEpFq\Ct(peJPj<F0<B
*TTq(G[Z56@#0ukLNORd#7#e-9cfZtLM7caVQR"BfP",'3Jp[`<$N.!f"b/sE,h1n
l3(_ih29\!+./G)YPB)jZ=G[r`p'*2CJ,>@pA'N3LNq:$-)`ML,,aJYMMm.Rab=S'
Y3`9Q)teS`L\-TXi2q"cA;FnC:=g8WG#p32E8mdE;:gQFWKG(q>?LBq1Ue+Z*F2f#
-<W+O,_6rG,m'/0Ef"%t\JTfnZrr6_7"olAGj8f)/p%5=:)ROh<)R5Z!;tL]_BqX9
R<EWgpij1(+15ReBOi8\Su&.qZnYh<'m,7b`7c'4=_(g($;>;5LkSWg>^9@_2<gLW
TWtU/E7m'[=.$7uduYph9[\-(A9;kf"O%L@SeR0O67A"A]dIG8<p-6>9O;&s*A*@m
OiHp;;KdkmDJ_BF78f5I8E6?=)PIdYdjm#:PT_Mtfq>n$M0^X=8$Jf++Y?S]>UO"5
&[7Mr2jI7s7oE793\QpkPGFWj2M2=.17\fO,&l7R[Sr#U8$K@Fhk4R8JXTcpVp&i;
hKC=+NLH#];QN%Cj+J>-TA!(4B_sL[J7il0Uj@N?)9i.6H`-%@2Nau?H7D>:A#lqE
-qMOSUY]OmZR9o0UrgBOB[`?G\Q1)hF_p*'".4iW@P[fYQ3(I6oQ=iEl`6KcP,Gjq
7\$<Lo`6nP@7)QEQq98YY_9EjO*_I.L_Q6pKsUA7D!2\A)^d_g8gaC;ZTA:iP_;@o
#,ScY9IDmq$<m4(Uho%/Vi+M$ZPuDF-B:mH!&O/PYns!*:4#oZ7q-6s=WD2a8PE&'
UBSQG[dHXgc&i-[\1&>>=rAcUZ*8<;C"_[]VTZ0QDn<uTPNc^LH_[3;aE15`\S[^6
QAU^MWOVP0^GUO)l_V5:MSbj'-1n!L8\;;JCVAI1ZObTi30uNaKTjJ-8!(JL1[f+!
WKbH6_IsgV3PdNI(.CbSPc"L92)Ifr*O]`QOkB*2#r6`e7RNZ76En5%>[>7[@WV>\
Ge?tnF6CRKdlSP#[USql[U$jAP&olm8CU$OS8L$@;8O(j,=sS>S%"Jkb?a6p_O9SR
e^h/h-]h)5=Xb9iAb(j]ST&8%!Ukr1MEf@TTbZeq$iIjfqQ;7sjB]dg]rAc,`tupR
$cD89%>m@:66Who$>mGZd5j"E4L`]E(,1]PO1=/PF.lq.e<`1`RYYu6%NguBiL5Ok
ds4s3&;Y.N6dId#S38SO9Y=\:a.dQWOX%Ef@ah%%d?M0\Xd6u>j1CP14fo#'1!S1m
PX0-tKc>ChUZq2jbS?8OcY5;;3E<8CUa9a@,)Fs_EWR\+IC=t-Ufj7\A`=P7\p:7:
g;hU'[CU#(<3`[W[D#o2/a_#b^$+b[K=)VP`!sbp]H:Nb7+I/uK!l\#0.^Y5(S6%t
@`'g).)!ih_/0@(>J#c!\ij_^T'+pXigr*;DsK#>1bY?tLodhVO"K?2H,_b^DKc2T
)LZ+N;SZOshL8>65"k"()DTuNi7BND.\j$@LZK5(kUF5NqV$;uhiK6Dj#7Q!Q%@pu
&@aBhK:Q[p2i1kK@t+"9Wo\M,QgAS[J`?R!JEAu/Sh?f,j+8akpDoC`GPIDhOmJ>%
ZH-mmM8/BA8aaQMmi$)KB5G6N_s>IWK4gEprol?N^"].,=0g??6=6fAl0\VGl20G@
rtLHA]C.rkFh]anGk[$o+7N5MmJ'KLSnmt(?%8!JYT4gPfBkeZ<RRCNG1(4J]Y9B?
@m9p*YlAHuM)/_X?h[Xt=2GoA?[^AGd"^FtQbSB5#5.`$L\5l\VEu8'moLh_b)D+s
-@`7Bj#tKc@U:AmPF-o4f15alW>S10Ge3O+F@tZJr55o.LFV&S+2!ejFHA7iN[AKF
JcI_I$\lQ-W8p3["UrDgL`jKR1(Xm!it67cE]G#S@;skH7OJoe%&0M!j>%_m(ldT$
!H?Cn1k\2hK9:,kAiUbt`m\A3i+"+&:LKC6[.8#l(_(0M8l3$*18*&>oX\ikSi%G/
lBD(83a=Y'cJk#OKZ[(7(_+LUBV\g'?`Z\uG1d:-0cIFOCiU@4((Ya.<i_?KSD8*N
X@oQN4>=9X9WO]B@c>9GRNR=,l2t4TqZ\q$L^go"]Y%W3Z9Y/E3fK[k&WFeMj!g5\
BsAOl`fs"Ri\q2nj`Gd8=NXneL2A2_I4$)[2AtfLpJJl$OZ+-;[?[j8k%u"S`pN7]
`Ns"3nbFFt&[9`:d-Z$'gTeFsBA)/6lCWKnB^E9%4*mATmu-ap3bcI1"$6dpcI"kU
l=T(L@?>%!/?'J,qn!+PEZ;]JZeY=Cb_.tg4O6Cr$UYA,#4Fb`P:X/Rm!Gi>1'+0d
a0s+<36ErC.l?<2b1i4$6K)m(Q(gu(MOT@!&4%S]#W$E'3=?0:UWTThp5Vd;G\[0!
OddR!Ti2Rq+3?#eE#:bp=tlM%_2=Doc9[',1*TZ&*@<l=bkB4QP+Z9>.T-,n(drD/
r6?[k%2gB<''hNuUkn&d+Ys`TU79$k1bD?\mQbI%ZuY`5jjB#J(o>_r*D7d*/:_S>
cg2PWlaT\94[Fh(ZaQ&laa<FmeBLTT[b.e6OYGI&,.1QRMEP`CfsEd[a]Gn[L8i^G
V7rU-1duSBdrkFNj#IZ#$Y8$f>b2eUF,d4ubtd"9),A_F@YnG_Z5OT`fG\kN.StGY
NQEkFBh_r**90N4b6ggZ.Ti0GGg>k`R0m@r[M_H0c\!GrhfpH*O!5$^"b'h/e3_\s
2msZHgU<+!R:eD>GB@.H<NThFR-hGVf@93?c"VB;grM?REa5+=:;,lnWK+ZOWoG[g
Pa5b!-4s0llWpuA>L_[b?tn%8qNn'_'hN\o4+M%UD&LjR$qY81k?75W\8AatS(<e8
0]C=WHuN<Y(9R*#:6i8%S$PlA#<$T--;&<)8:j_3P*d02&@rlOjV%,nktF.GDea)e
7-3%EPABhNG*_-/3oe&ho@G/,B4H#0._e`W-Q-J/47q>1%4TTI4XH3^*6q^21Wa8Y
+n!I\*T$GpU0/kY.YABqk]"6;"`8_T0jt:FU44t,iM'';fLa?rJ)V+JdqsWgYd?:Y
Q='a];bP6mSh^S#>hWP5Lg\r7"q9/A]DmItjYO.H[fMFLpJj`eN3JZdFJ%R4#7P&M
2s9D0O*Vg@7R\uHU0MK'_uG3S7B)Jlo#>+$;ItW;O@+UPr7]mH<t7\:^DMpO8q8p5
n/<:`FjA5P1]T<#$->Qr;$%[E5&tUg#/ro,%,%^:K/!QX`>@=6$Bh>5YoQe$A:D3,
6'4m;i?a+9@$X*9W)9C24$iNN_ILstFK-=3O<aP7T_UiNln/3-ia3rF3fYi@;FEUq
l=K$5J3.V$L_qt:-d7,H:9ofq&ClrXUOb^HCFk#PLUe@_i;uD&>g"eOY90:N'p1o?
hn4"iUI[^p6gg5g2$f0Rk"I^@:(fd^\UmH'&Q4')W["24Gfj&"G%7HrmBR@V5pi=L
3@a#ha6Bo-e2_+f'9[&S[Q7n+'^I5D&n[t37d";:VjPs&n<1?]A0qHCI-ql#)L6;I
-\2h?1bb(KK+=Zt6M.!Mj]kVB1Ab-W:F=:$0;/(%Z<[364pjW>'F.lp;%#?kBAMUC
1C2/:14+YP>eDao?qoOJeYd,EGJMh#Oc%mEPH'JR;WGeocJ5ICe=eYF\G&!4$<!Ns
<Ku$Y^I:gi]gDB`86+^q;Wou4OCZ'i_&@#be2apqcI/AlJd,>E8i%Si$=ju7;bKgl
k!IVp5$!2C`7)=94!pu,YIV&))"f)TlD4coJk&ikTc-7[[ECb>/oK0lF"B`Hc^e#'
&_p?5VJpqQeiM;i?#bXDk'CFVa.2.J%,bZ:9uO=4NkWXF*CBJ8`2O&(6*5Dc[<6#4
QRdYe/M1+jFKrPN]0/@b8j6NT\Dt(hIRK/-2O.eekF\17FNN41+k>633'u4i01C7^
Vu^<B,A2AGM821hb`%X97.eg9MS,9:pE"FNr3'DIL?=?05th:60'FFo<=nLWM[DrC
M:,$%jlrB6]OfSBe3FM<"CV]FDt(rRH+0CI5V%hM8\$n$:8+^2G@%%B:*a&/o`/F0
rHn!64#.XS&mbVHAE`nb`jgu))KH>Vmi0TjQpLfdp%nP>d?#r(o-p!9TQ/4:3(J6c
_A/_aN3`9ebX@KbiB4>616gZDq3[o:dL9Xm6.j+Xh9lsW%@*K`]tF0jpKK1SBN@lT
4E6&PeT,/hcSC+"Gu53B/CfrG""#qY=Fut]b'#URJY3Os'AempU%4Za`q[*mT)>FK
&E;P;/l^jud\(Uf3&Qq2r:B"Hr,2"WUE[#H+9OFUXlUEXc:$W[l\iS:YWcVW])?L]
'IeQUL;nO`a"Kg)Q<MD@WQn]\nS=&mQ1JMff@uIr15oI;C52"@#d!(BIA=G"j;lYp
YAq^uf7R3aMq@il7-S_5\ol#"g_tEqV[]mJpf"r`lRuLYmKfsT1of6a&sV:uN`!;e
qUib4Q-R'W/GTU<-h)=^^"ZS/9mKqh`#T7m4c.;fc4F<p])ZnOaIW#"8WDf'RZb;K
.[TQ@k,IfZ&E8>XaBqNu-CirVdV7(OcN.#q0;kU_M8q:#>s)d_i-";oaWE7GjlJ.!
l"WA)O'B_bgIY58c=j9"1"Y"[3g0*H@8=Fs#2#IR3LT4bZMXr><<OD<pS*5aeO,eg
h<2?;Lh'6tY6UTH];hqc/YVn/rBTiSaDoD5HoA&+nQq=kRJs8Fq4@(9*V.LDs'VpS
YBE5oWVuO#X0T=So&fr/\9EuCc[2k5fBWg@*ud)=aCRPB]):$hQ*8ZY[`!"]A*R?j
ACF,*X!O?0_Y6DiFNJ^#r$sG6P&toWk,4C3s07.A:C9J(M)>1B^Q*QUjE/cEbe')/
\&!k/(l1<El(e&m5P,#I1X%uap-8D02cJWmX8JOceNM[_+DD"mWrP@uHG=fU.guqQ
3P7RJ_Ec<B+fL453[29DKtdB]^J"Gf1\/A@(-Y9f-!TLe4;\f[kdc:C3Lh#s3WV=[
S@_0",QWocqTbl5p*7-_]^kPQ4=CXE^qUG_0Zgso]8eq7>XI3o]q^$/r%O"]-8i]E
_V??@F>UT[p-JRc5#N+AWm-G5cF6H:[fVa+as[Q8?,$r%*]jEH9>HG=DB'?PM1^#R
@15O@ofgK_#bd3pnTq[DI>FSH'3%17Zgb*gJ4/*d`:NSe.58]>eiCOP1eBC=\;`n4
qN@#3`)EL$8b9mJ/Ar\?1d!o0\pQrj6UY`Y^78Io$pd);Q9OXVO0FD!9I?nKnd&Ab
$Xkg!@$.pW;]_>i_DqCs]CNt(&?bXN2+tBt9=HhL6ngGbPUb]_nR3R"o;lD$YQM9F
oPfkj]SWDk7snL-J[<D=@3!Z)_?bdt'RZh*Psqd+&&W<!fT8E.I^d45#\(ZiWp$ml
D]Q.TV&V'I,`Ec)B*sItaHC'qpu"^.J-^bq(0e#b'SF28AVpl,8,84e'UUXhPK2%5
8C?B\Umr27HFoAnZEpqH>"$#b`2q0(]5kchi2/hTd[XM2UX6GAN%DP]qD^$ZT;1tY
@sXGC`4`D"W?YWfN-7i*b=_B'6I]M7C3#lOi\m4N%,#&^HiT*u!$h:cLr>Q>A@mhR
a335J0/G*sJ=j[\M$mH6%,1rZ9;RS7&.L?K]Sr4NnD(U:XhWO0+7S(0A/W06\MbX^
+g\]d:pCI\bRU,+MR*_MiVB4tC6Fg[bd'jcH^pSC(<hU)`4C'5FP3Ou?)J><9];,:
1j''RW(n5YNa-]YLtG6$Pe"TB/TBLjI"rNnk/ubr&n:hX;i=CjAdG3rZ4,\bR8Ca&
S?jd'N8)CI"F^gH]MDqI9n80f;KAii_lj';9k8G^6dH'0e@)Hf$-]nQq=[!dVO;7r
7B2?>^s/)HMF`+pNrejh`,SHpOGI^t78[*9:c&U:$o[A/%.[`9l6i7;5e`'0PQ9c<
nP%9/n/EUo%.c*uob++^SY\?I8sKrb_*,=PQI1V/49X54>O8fhP+,FI7k(qTd=4Yc
6GBH).IoYl/JO4+fEm5h-/#lXP!@Bk'FMMUdSsaU+h#EC1V$n]&Z$^$$u<U,1(sK$
dqpR!^n2PK>-b0udt!gi[0oW9b<'\m$EXYsI!JZ<n"6+p<%Qf5M/E[mISjL:LcFcT
`.uiuRT,gOcK'>N:kdDdpU4<i#]"2)RM<G_NL_S_<@ZqK".@ZX6r=6]4:PARgbHq0
1t;#ZMH%VfMgPsIQVk_.e<5On>g1<$@>l',8drYh77P%kOig>+'=0PJFVtXod0SsI
%\4B_(mEO<jAr@L7PLNt8B]TG*=,T/RqVPo1A]0G#)Ha"]N"D\@fR-4o1LB)3@0$p
78:(`IgG:?fCXbtn\n(YKX3*)=(L(8Kn'G<3!e#2MM4pYoY<95<&4fRfX-nm%$9,?
MqEuOeX2A^7><pi@u;:Z6H#?bQ%4uZ!6MaEf9=1[[9QdmHraB!foX%r]=Ca;3jkJu
NF@N-4@E)'Vi/f-f,0O^\]n;0/_W;XMsW2sq0''2L;motSCK)%G`NMp.>XXJ^DZ'f
nF$ZpY_XI8*At.+kaiIh%Nt-n$]'BG\JO!m)j5HR#`+=A7Bi0(U^;ah#o0SAaK3@:
]:V7'\W+Lgd=r]*^^YPj)]=Hpc+Oi,aU`@('2Xf(W3Q]uN45(_]:e$8IF+#=4knnh
>feu8@c?-7n%lufNi@Jn9u`3Ya5*/5%k,r_/U:U7_362%^b*WeA\Slf_:ps#%soq\
;U(,72;AcSPh!F+394BDl!'*X*W,RCYn3Vh-X4ck'Q*8tXl/%rjr?(qT:;_q_`KJ)
a/;f@hUs>)TZ=JMj0&HM$[(oF^!3M^[b\(S?]FtH?2^RIp'AS@?R!YAV94lJLgX>`
hj((2jg5<0Hf+DrhWTN[`H5@`e!sSLO"%+bkr(f_rJQ3V'#cR9aq*E\cn]FV;NT3Z
]sM4-Wj4uHN%OKUHtY:FTNi)J*W(4)!IBc/)jqon+2"L\6.W=ASsR-t$.Q3<r/+]F
']?lGNKEjAi3kWhcskYS%C0_("s@/9YqpGD&s3la.mI@?Sm4W_iqinYIQ3>T3SENT
QlL+M#b9]fOUG[-0F=d(e[->k,eJ3\%bUlBACAjKq(1qYjCm'(7A1\E.cb&(%3+l!
]t-C`o$SA^jLN*`%S^+hG6sQf$%"(XFm=d;<AXj]8lb<e=]g[J.n_W]/I!WT\B-E/
87f=N%[2U)7SY/p6P&$_2Qcs!.(<e,NJgE4)a7fZ#%cq^Z^&G=dg\%\2)<Y]`0+Bm
M;uO=D/:FPDiBMRf4$tOkaH,e:5DAMNg;.(;E^([SfH\0Yg.QQCF<],M4^Yh,Cq:U
&uIopHAL.!\sri[p2e.K2]oQ%'8lj'!9ms(8XcoAkB)5e&eH;?T&IJ=YTkc5`JKS$
o#&!nAeBlb_^fFo\E6>@?NuW(/sp7lTXcD3YVqlVHL^7McPiN(7jF<eo2XU<WX[c4
Ll+fu^4k;YPNjc)kq6<r*i7@\cXjuoC:4jlR)!I;R-L!8C/0kIaMXeJZnqme_L(j0
d$KQKFX$%;&&u&Tep->%f4r_oaDR/se>nGSK22u,Y)EO"r`s-UK5-.S.#*GcT#)*Q
T89%9kan^qrjV6OOHY<[CMpKANF.LmOBM[^hKd*)[;?mA:.PBC&[buU[U65+eEJR=
.(H?q:7E)fTJskcXo<,JYrcQ(g?Df%2dceqCKZjOb<(`0N#nC$n?D=R'FT/LmQT/6
T\"'cnd<2%PDLp[K4,,'5Yh%79o^<'8gk<Am^XY2ZRVnl(?T/in8Dq2CEaIT3N\:s
ABb,4',gGRB'ADu&#;tom_UakGjXtYO6Ae0_LDSpn=UR&"/Gka@:jhWLAMYdalsH6
N/;1d^4XQ+[;N%4mrjg?OU)UYrpKK8<k19Z[diVQ42D.8WV6]k<ftH6&FNe\Bg@oU
k8[j+QZ;!fnS!g=P6)aJTfQe,n!NU*pE+E&T-!jomT(Wq5*WP.*"]h@l(lYni:,nF
GB/M$&kJgZIYnI$kpAUkeH:1dnF`/dqig>\_siD_QSGO@apH/MPJ8r2Z9ke;-:9fW
STp\dd%&\=5sMYTZEuhkh_^o9V0#il^54,"8nDahGVQs*2WlkherY"&AT[)iPO[7l
/$O'!%eS15,)S0[Bm]L$MeRB9o6ES2G;+'r1NVgQDNLZRmk44H2@NuaFWR!]TS;Y_
g\&Om[Fgp8nMkW^qiA;rp1HMtT0!>%T6?VKoA;)4B1nIB8aa&;G4aOQpE@VSFNRZM
%9/4'D]O!V8%HBXoNuhi5BC8!V7st[FP1dsL_'Zu&0#R?K'4$P!&=OQ!XlBqLq'o2
n<3lfOUN'<"->;++9_h&"Tsg<W*kg1c\71Bj8fL@OH56K:b.(s2ZQ]cK/a#?c]:=e
NsWn&JSoi1+>X$p"Tf5b!*=aRTK.;M&:%@oJhW#s81F^#K7O8ZGTc=/_%HMdpa7a,
!he!;i%b'&.Kd0a!C.k382I^L&:0EsK:joN?k<E*0S>HFK6T<W829lf1kV/V"*cg.
TJZOJ&-IG@"/n6U3&g_b14aAS!GFLikVmi9M$":"K6Rq0&&&,O&-FUIK5`RC:cACT
2hO'4K;^g5LWtAM3s0^cHPePk."m4$3s-lh!H8a)TJZ^G,5KiB!^Dp#!&XOC&->qf
K3+kO5t#qkJ3NFQGUJ,E\CQaK%H(WXE/Ir8O-uWO4fT<]DCHbri=M)S$!TuYP'Dj=
HD,f'pZU2%UNc"Fl)PB"i'r7O1B">+#P1=^#2>L8IQm(2:\=YF4/rk^N_Igc,rHXW
(^L,g5Va/d7Dgj9i+*rgJqdc+0[OJeJII8X&THN=2B)o2J>/Pn>W@b-6i`pBi,9ir
6K!r=6n0'&PtM?;ke(Ld*KS92+p1Yn0b>026jI]3c:91E_r<C1W6UVcM9k.dR98HQ
",.,Z,;HiW5pDHt,h#B1DGi6n%P/8JPY*_;):Cu!BK4:_A#3=Ep'FjVCcNKNk:rpr
cC?MD73H^rF\lL2T%PQSiP#O%Ko8DT&_Ld@EC1[Likke9e7Wd+BWhLmaMu,qeEYsp
>OGj(#M@[D>(OmA_kFOIVYQ\BZG0h/fHUK,N*<_Kj$Uj*dAKl!17&Jn"*)E6R1>JA
#<#GDgg-*^6M[AW`+DR]o_88I5=j8S0\MI/_5g&=V(^2))Q2gmik6KC'%Z)!WoOf@
ZACraY6IY";ZFN_&jkBTb%h.0WiAU'V')cg'TG7l'Fl+t8<@ZR\ZUN>)S-1ncLn[t
g8+!=#pSXPL'qM/+18%?,5.e;'F5Yk0P#4^W6uB:!(KPU#m2V-RWQRpiKR=6b$fp!
)MUPah$QQd[*:2HZTQ\m`UPL31,Uk@36O\QFD)W5anTHd\q-&EUGO-o%.q,/'(?hg
Z/R\%0Luffe52)sRYq?cLg\/p%\oa8YciCp+Kk%S"KbUCeNZd&eJ_9#T]*Cj;^kK4
*sPRO9FFcNOc"'_4t0.!]3"InieT?H7=<20'?FRS":[akKW+0.QT`4L_JU2X%"htt
Wq6^B1U64F__f9>b0LI0/Lqn@:lEc[d4pch>f[-?U`"MXJ\mBSh$?sKYVdT8[<&Ci
^&""o(^hJlbNmSGg"[DjqRfMHAd#ZcGfoUKhCA+s!FgqP717*,,iablC5_a$/@_/<
PqhnJEuX+`E[cf*Lte&_i:ou!T8)&,;1CbIo"CR1GBN@2A9j@31hems^NjA!Y-E[;
;[*$m]/l0/[QrM%j+$&(ibt#,D\e.^,\t+$Q+NB:\%1_u!sc,L9I7rP:AEjMK;))O
q0"%LMbtU+g&2J9Wp#oC5j%BJ"b*,j4V<g\=AC2q#8[!I>I&:^0@=m1p(>5c/iE^T
E1s?.f5cb8/\Jap[i3]SaMUKu9AuU!M`a[_JEZ^No<[+SSH;X]a'I#(g;0AF^tEk%
K&YlmR(#e*G\^arl9APRQCW*.0/3KPQsYpJH*^')4^G\r#n/>mon.7qKGAPNfD)qL
Z\rAYR*I1X33=+X,9k(;"WtaU]nfS*5\b0C02biGi(DKr`RN[&VkWWS1_G;!9[l.Y
!c_,#7W^9!opet7IiQi\F_ETMOTl0XMNQ"DBq>kmQT"2&i>=hajm0dJH<1PAV-,L6
rk[^/p"h/%MC((h`CJG`9Sofrmu]%e<EBeT).%[Zq&upIb4\WsAqs63l,'`k%*ui[
,>c?`W#/e3@]T$PaA)N)kO,f$a[o#m7+dSKr4,^1LG3,T`%J@o!K]p,3oro@(a\CU
f[=T!mM8MP@pZB3PJpJ%[SEJ%$q:X,YX7EQ:.708LlVoQ1*g%!Obe'1=IX#!ZHcLZ
'2i>:S8!Rj]S-p'Ik](d_F>nn6Q1cA1$0C=4Xh^,bLKZLVRd%oEkYb[@obmO]7FZO
_(m8RY;p/+WKY:JDPR$AalOf",A'Z398U1BLq9gR7U="JZJQu7ae^g*NQS(VB!>]j
S1q;]rZq8Fki(m7+H9!M]"+-SfE=(*e&$P`.$Hu3!H"U8%Ob4XfbU/6^7An*pH6JX
39`9WH;BeTc#ZBGUKhH,Ca,?3kI!aT4E.22)=f';>ofMR82W4Z5!K-t-n$fZO>)MI
P6GWS&@oe]VA-(`Ga`0bF^6mP_$3pa13b;.TJjd+[3!ll5h%!IXm(;B+2_)a)2fG"
MTG6/>52S8"@9(9(s/us1^t?ks%dY@VU^;S8BTJ?NRdBrRPWNSN8`P[<URL7Rk%bO
;?/f__TbBi88:^qrd_GiPa@(b7][I?0(tsN*n*Pcc@fLsjH/CBRbM,>&Mu-H]"OZO
L;42QN\C'5oammN>mk'jOp/Z<*kF@;$6)N!-1q3Z9$LH*_/).`k3=D+1mBXJl+C$+
eeN8VH1)L(4Eig)SeddW:?6I\LCBCLP;R4Gl&<CA6NQ':2Ki>k!Pp^6o29r;c7e:%
OpSSm@8#p>A)6pq-cEhVRhg#R$?iL@?KE$I]T-tA.(j\t&tSXQC?mpb86F%O.soBc
YlTKrf@`:>"3=[SdY&`Vd8&H&6W[5SHVfoh*2CJ0X]kjGL=]cYad"hYP=AVn#-=X\
_CLsO6R#G`c:DN`fQKiPB;t\g/s1/sCN<oF2JMgjB2$[!E]HKP\P"WA%/O%bJ`AV5
Bof-30p5GFX,+d!46X"DUN2rfaS/[-(p,<R<S@U$Gm4jk/O^i-MC;0`>>1Iu*dYn.
-rIs19Usp0V\fat/i"i1C9uhjF<7p@&l.&?or3JK\alN,Wt61c]#$.`;EcQ:,A=1b
__mb%dPr,KCF'V@o&RA,;$E2#D6A,G.G0>"-W_!=LS:658&fmHU6&[)8Bk1F9Vpt[
ln.G(FZQ!B>D%+YEX&\fib^]YhfNfm@'+JFYhWJ6"hh%F=179'OrR,"m;=%P3,[&7
gcucoea-t:$G.n2a'Y=<6?[RLajoXD58^F=WtBOkPc&!NkPYU0Vno(gOW=4<@oj_m
HD"))dq-iXA^QXL2F2;;?l`]m79/4g:rGGWofaqSqBoE3(o'k!_m$Ams'R/[i9%X?
2GM;;<S6@o[43W!PLSK!m3d;FE`pN?]8(X8?-q-LNr.PS:NYmA/%'<@#^<P_C+>YC
I]_e+TMMn=jl]!#p7oIcMA[l,SiDRDgOeR7\Vqh;guTAH^YDB>#L&#QloH@jL,N4K
dAna%C?[PA]o*9P51a+^j5XNn6GN46+(pk?a6IrRaKUJ-6)*g>eeT2pp"jn)p$]#F
dk@*TIm;X*O!U.hb"ar;d)#0(S6!2(L;I&>TokeiT[X=Vdmn3LW'^X4F.k*GbP41d
1B3B-TEBd@kb_$D@)*/b!9>gs7!b-AoUs+d!TaBjb_6(N183ad=_o#Z,Q.^Wr[=T%
^Hs8R"GHtR$umkM!JLALWSft^2S^N%"iQ]b9GX/F&jC%P#40dKX'e$+]L8Q^"+mc/
"4Fp*/lSTYXUBS#_^;j(.YmGp5,t4Rd%j3H^,@9BYXF.d66L"3[S0*S+NBGMKYIn1
(h!QU-3>7lOHN7TL*9&m$q%m,VQe?bd"o`%%OLQF,g-*sK^=fG-BOg"Ya#c4>X--X
&E<'S9T6;4%14eTYcob00eW]h=>hjh@F62@`40G0cq%"q$VWi"E;CemHGlYi1pAlS
6V<.fi7'HH^dGF;Jds!LE>3D39p'<>XDC+\kkYjp5E-U!-34s'-tc@W2aa<.E)%ON
bXph]-R6:c&A09)MFcu61iXL"E7R%DE_'s`)oTi<!ZY-t,7-k/)c=J@6eY4OcFW&m
F(AbdL;\7o^D\G>/?s@\:fRirdS+7fq*^7qA;jB<C7N-Pd:2)od?NN4E`>Xm+YE4'
@PYA;[UW)78EuBW&dT[Z3b4Bc(a:;5Ohs+R59IiA9d1/od-aCnB,q(;,;B=-jLlmX
f-6;99bLYM;B6:RHQ^_d'bU$cEWluJ$RS`U+-ANjn5U6!UB]^!F#"BHm]JN>%4\V2
,`N43jq)>A.k@EU0+u)Ejto.PLe/3F:_8sCitX.T8M-]E/9/O(,m7,/\8QESA;H?k
-ur-PNa:dY,>\O1iaWo^-Kc^?09I1iDtPX"'"J.R0Ih6:o-G1#CatRm+UQ7'DYBL'
_[]:O)C,`'dmPrFLic"W`l*u<ZLWfbeK"_nW,_N%"HPI(+#Y>/)M2!J%>c#:jY`tp
+]76#P><2,NmU^A0(VFj.LNA#1pN#Z/*,>XZRX[mSo(deDSsFD`p=nrM(s%!2p3($
;[gRJJ;#697g#]F/7uU`Sin;Y!5p-I&Jd"^f"ai#@4UD#nC0r4luf+sGbt-9M9t>q
oNp^f]u-lS:lq"'#Y,(U2D?@><$ai.)%7^D5f73K7?Bc2`B_o+,:;VH'E7pqof_J8
56TY'PM@@(=RU>(5Z@OkY3S;=VDq=KZ10OKYD,HP4?lFu.g1T*C^@X0Le8A31s>M_
_Q=L;bt/#E3`$,QY+mSch#YO^9pCOR&T^2i.53"'-#ZsUUjP9:N,:6>6hJeaYW.Cd
HN>Zmh_7&^i[[GlGWk*I":uu2j_IVupb7dY88EQHoY.oso*5n4"+p/<:g,s.oIVBR
!KSq]d=UD3E%5<1;Y&"(<Aa\QE?QVK;=G!,2&NeHkXPaI/qgD,&^jWWkdM`g^_-`:
#'1.#>(n5l`>*>a;LD04G>';C5r$_G&.q-;_"(rT3Y1R?1ht5(X%%n"=L)27a;I:O
Ij@H#!gG+2OjM1'4'SqBT+Y")oZe^ogEPp6>lsYu&?nua>=VFC>0]Gm2*jFUGe*C@
@D`C=`GTEhH9BH/;PGHh99)'`nR0ed3j(hL$7R@PphTOg<:]!W6=jQ0D(gJfju,"I
66`U6*a@2>-&J)lQ7El;7m;S3B_,F`8b#YG%#g=q.IRVY:F0Si)-B]J44M;_L7;ci
E':<f0roLaUG=<_"E%_G=nIa,P>HFXF'0_r3eFZ"oYP`/W[W)ZBst?##2_8fL/_*c
d#C8'jX2ti=(<#!/gP[@j*OQ(WFrXLX352X2K<RgME@U+AlYTbd+;,akr<hk?fR+7
9K``XKVp*<12=V?.<Og\&5(=b$0g_86X^=`Jg6+ed-V+*QQGO0d;uCQ6n)5FC3"P+
TgB6LSdBN",Ol.c=OGFGFr*hm_cCcP<Hbi<8R_r\2buj5;fe:QG*Td/--HK!LNq2^
J-k1Tl"^njO`Ej=OtD;V`O&,Z87YX[MlY4CVoUCq/lYoa6o=\Zf96W\YC#<]HoKD.
2-kOXY\qBOU$FgYl45A]&l8ru.'AC5AIE^W4_,ep,Bk>18G,og9,k?PXI&j;C;k[8
)c>,A0HrB+1K+f=5!^A@SOKJ-<A%S<%=YS=YZ1?9.Ihb>&S_"tK]N5^AANmS22"<_
pgpp2lrAUIO<[/aJr`D,NLiqaGo.ac'L\'*pk:9.onJ'@LR8?*[j"BFDX$[T2=J5*
QsggKWgm/2Kif"=(R!ePr+<;dGqMH(PfPS3A>RA9.Zo6u+t\doZPU,G3d:;FA#"P+
6DR[qJJ`9!R.aHN`9'&C@2JWbQ@0QfV1,2(9]GcGm\82WC+3Xq0c6`Z!pPkZ.4oM3
8EJ3?pm+e'm2S,LMem^pZ,0=V7u;LC/f@QRq)=O8coXeePSlKH$J.'nF=N9c5cnI9
R%oD`W&fV68b]`?;S5&DfR]C!Z&,0?k=1]&`\<1/RJ31p)(1c=Ouuk5+QGsq1Yj&&
=tXT=Q:ob7pI97F]K\dGRtHr!P?M9Z@sQ=,rDCt6.E-bhh_#=[1H5-#3BF/)kB:G2
S=)*>agi@Qk8auJP4s>LO.heIg+LE)4dmUgqBj0aSY9T*2qQ*;q>m;c228W<rW6iq
/l3[Sh*,<_?kP2j!fBbF,WWG>:dd!A`?`OYB1eV!5`9G9X+:4:"sSX/MV<PYc$1@r
=fAoE2q=ItBcqYhIn[+nIkToX!ZWPhr[$999H";>,YP1KM+ehU2'rDrcqNYTCK3\-
OSI/&)NMc>\0XP&VIK(o+p`E&RA]n*Xub:`g1\#RN,J%!V4tb-3nS+Z#h2]eHb.E]
;l?IRSjjr;8B<'rgDM%NKlnYd&SHo<)_+mB@?KSm$YZ%oRUC[_**b7.5l+kb,2>&[
K*B+BW++Rhj-p<"Cpa&=^fkb%gN-r;KT:#f[NiO8gCS68>75J:[CZ=F,G-3Ln7&un
\*'@a)We/,E,<KR[[Wi":$EV/OXqG\7)ThM<ctkJJ%WBW<ofe7MkWHU>Ff?C[QCoP
g/9'S!8J-o4Su=Y>%@Y<7^;AnQ27pq7KHPmAm(SH7H;>E#1?ISCh>TPq8rN2a]MB+
WmjfWB0+6sqc)rM\B:VX1s]5dHDjJrSL(GgkF=1bk7PKrr_15jn@F@i<g$;M;e\:U
L=R@3-+G.gBu'PCmLj3/>,lh;IE8]KaRkEUfjar]&L9FM*,Q/)AM:KDLP:#1`g]cA
(1pAePi8-;k\jKOD]c;Qc-!rr144;OZ@M<f#WpbX>s+d80%SE2DojXgc%>E*6JKSO
_h/s.FF9A#>fWdJ-YXbh`[;S$(#@7^,@kRd4%j57-)ss*L5.i=a&;UXKg85`[RA?l
6(1t8:?P0f?dubH*1NdcnJ0KRS4eL07@NVl!XLagD%T5o.pGg$4VfU`O4CpV:L/Q"
HRLo8%1uR_"PSNF_n"H7Z*aI!PtQR7_E$)&^!jj'fNTamiXf*QH#22hKBMI,(RYlI
Us[\b5nUEe];1T+5Bu[kXs8HNCCNK0<QiT&F8[&"""/knGsp-A$(Mj_RpeTZ6,HnR
S<P2U>(tT+1ohOL4pIfZ-dFPF(T-J^U&==9a&/_r^6q>f.;QVon?_/f`;IOkai)D"
*+h`3`$HI.;.L-a<K!lk:an%T[Jj99BqY$Lf1%rP,8;CXF?6Y_.A>fnmqg5dKsf]h
>Y0>2>L9>d,RY^.W,fhkV?1ZZ*jt:aj?Xi1KdWR6'cJT/?M,p[.e1q;=;T-H"IoDG
j??qqLFqnk)t(G^S#9QZ)Pc<dg$6Khm6:;%?6oc;SIk$=liQ./6G]&()GBlO5Mj+-
V%@A*+CpFDcrO\Bh_[KkrTARH.\ALfA;B]9N4OKdo^-qH2r8]75XR_YGc>jPT/9B:
3:0(BirUbbUX/I`b#'6E>mckda1:_-7JK(Dp?U!!??bi,WVJ`mm(X+n?P<-Z\+YH6
$B%$ZjJV.rj`lICoOW8gU9FK0.e,^IIOY>djG'U_)uU>?NZX:(`6L4llhV\+/g'!M
TOo;K;1Q/g3#W&3J>&(GCb?Wc7W<@7e7^HO7)T;^<&,I*M*R_qBL!uC$5nbW"(;3e
5oUfd#8"-C:+A2SNT2^dS.6;p*),@T&[_NM17c=Z,:Whf;E(+CB]GI3.OQS\NQ+rn
d)90D(tAhc-m6<87'5'VoEsO/@7-1)TQM]C!XCV%frc$?[=ST:)@S85H0kMT0,iB\
G4Cg0EA=I&-0#TEqF;j/8u7`P&B&TG(sMO`N1PJU7Z*2.q>$ggB:[2eZr4GO(i]Zr
$q@V6G2RF%UCG2[SOTV&-lS+eoaUuN>D^nLpGE4ngRUXo>K1X0OM_U?*-(d1Ts#;G
`090TrJr%MbIYf.]+EAC1OBe?9L]uXOLr!XqZXgB+N2$'W,16;$P7"!]++rPp:oni
,mH=])V!]V.FW#K\W3]"V^+leC)OJIasO7qLh&3n2UFK3\?!d$IgSE^!Zi>r8^j!f
Y)*JqrOS-N$Qg`ke%"B[EO9\[4_TM/i5Q4Q0%hCB_tY/TDK':NYNbpW%E[RfZJ[DL
<50AF-u981Xn)@u/A5K(+Z:OJRukuZ@=g-fcAYt,)Bu05EBV'm]0MRjMo<j"b:=:d
`QiN.)#c=R<2t[G%0F$Z#4fF$fX!0AC95]OMCKU#l^YWG3=buTJj=@OJ/X12c!5f_
.OqUP;lGVp>Kj$\LJ?=K`H$^V$8XtH<=2`bY-.:GrYIk$/?"<4'l?RM5k]>_/A0r_
AKeMU$Q>NZ.6YVXc''*QDkbIHfS<LgX-n3+[9Caeh(/>%>gu]3lYp*-AcYdq6#s4p
\'$;tJC)o]4I"!*],<A,:(2$*1p+=p*5C'hDW*<Bjhe7^$&\5+U=$XOe#Y20(9oAH
IC,QlW\.AA?s$(:'kM=-m;uNP`++hgb^IpQjuD[2O<j;<\MdpH(*TX)\u"]VL2+VS
VW7:A\$"mS-tSU:1J:Sp,AS'IYbX-<'q)*@dObW8qjqO@4D^Oq\Rh3Fp4>!m*fmW^
mi&A`jI#X,;e'"";2afY::R,ng<Qc>l:=Q":UY!r*#i/ReYb$8aZB0)U,*jkS>>EC
6+"m^blJFKPD&&OU!%1N?D>ot'T/PL[s_se10):pX#PeE`HDahrC4aI:Jr'QECD79
q>D+$9iI=44c.Yq`Z5`r)3VT_+RLi*;5m[#'0NH?/+Tb>*==.,\)2<Kr"Wd&>Mgo[
#6oR0P'?Q)85oJ7n/R2uP0=ojKB"8UAXSc=H<EpL1bkfem']g@#*8j\JP^`L+;cl,
Q$KJWE1#4Ai':F>WBN60[0%j8*t4I(SKT\SgV]:76]Me`KuY=^Q;kl[+gG9;WQ;B9
2U%9A1?!m3Uk07lf*.>D<JfuR&soqW&u+XFMsqm06C!TI+g\.uV(+*_JghV`0tE,D
=sZPc!_&]n.99:U)^i_:@q".\9(C1Da=(_H=)n;#Z5f4-LfkcD1era"NNnX[^o?;r
)hXq5#pgfOG"?Eh<Mja]()PXN(:k`Mc>>m#\F=an6[OsD0j2D(`ek.o3_&&CXW<VG
'MM1]/&kIhT>E$2iX.)PdiMdakc@.m/@]>ud=!!K4"?k"17IH:(e9EP@q22:3%AaN
4sMcc>oHa/1*##?R8S3)C)`_hR(L7I<ilWi3^Cg,)]MZXe>M8,MF@s6&BX40kIc$c
kA9t?=lBgcHRY'AabS6[6M9QAr$]uAaiaFPFNal@2Q)"W7G%2uBEEILCKuK-C#p1)
oS99iEdSu9kt3.:2^+Bn2psa3nRpX/T<lO[e(TP^jms+U,ahgjj_Gl9ia&P(SL_pZ
JQ1oD;eq,Y^!o(!CP^MH@l#Oed&LI_cP_G<']OU0g=/^q]A'!$^8E!KBgQ%[Bh^J1
BN>tGV\i,+UMA'0=*k/Mj/`KJ<XDp3)JK&"`'ggt/[!R%gKYDGFGe&'RouHkA1ATW
XY)eK/:)MF.eI_Yp.cC$'EM:uX[Rln_#W32aJnH/SUtuAY#/\s$tXDh@$Q\K*#1,G
M;if=.\QbS&oe27*4N'TeLRS$Gin,dc3FOL,KM<l>%oSFUN83Xh-tSBaR%Be[lrkJ
F2'VMrQ%pDFRn)=JMNKIk,WNUj.SsYB+[5EEo`V"OQe04+=XIKWm%WT\V>,Jg\\'s
*/[8':hLC\kc9_mhVm*9LZK!ePRpn/@Ru)]bb:O_Ako?>HU:,<&t1AU[OWSJmspJX
5">_j@%,dC.uRr#,gfc,P,LcCP^GX8c)Os0HKU9mq6$*FO!ufRF#(SBSArSMFBUJQ
#8"m/`C0\XQGOep@'1,-;:@F283JJ^"BE9?CE$PgSWYdX'I;AS7`SaML@H$p5rG]+
@acc.f*NiU2b+0>>$t<ekp"/;/_=Xac?XMO"3>`]8M<c^$F3^(,l3-@[EV60[++b(
;ZB<klcYUdnb:G>7*_gbH_Ss:"gU.^nE;p(,L@m>L?`hDC53"EM?Ju5(H5c=W(jP$
.pT1J'4o%mRW?qFkLd>^j)%rs7.t'B[JO[gmG3hCdaP83nj0\Ba[:8N!JE%`-Tb?g
$Q)I$inG='P*LWu\i-/N6tcCCTt2>0#Tj6&LjO&N?5D4S-KEqZ!.qugdWS/'#iKFt
Lcb#7?f<T#Y]M+'nFVD3Mba3+f\9;j^-TZF3AJpCZ^,F_eWF(q@GZfc=g>VsE#UO1
-@6Q$jk5dD2NLAc#Kk/S#p.d1aT\d7Dl(5in:n(S-9sQB-;O9Z[h1SS/=G?X96a-1
d0<&*7lu$bdbWO7\PD@a%`tbXj?^65FZ0p_'dhod]hU_Pab7>;GHqM<ilikqq\+s\
?P[(4TeBCdXFg4ZMm_su;M@Z%V=2A&hE,0\@=5D\G9\5eGAjDOBPcu/@fML"&bGB+
s3:1k2Ft=?Q1Km7^j$qBKY*SXnIs*bWZp-c+r>q)BGlDAXmC7Z.2IHJ,J3h*UZ_N#
$DnB8_t6j;g:ZU9CS-/lp.kS[HPNgOhMgE>?B"qqpD0%52kI7FR@dAC\G^i"8@Vco
4:AF+.pTjlh''E#+_ouNj1;Q)\A-Mj.@]Nb]EJZ$MRT@p5*J1)@88q+je41pMehE<
1^^BPBtf-P^(_$m0Z#L?hE`XZVe^`E]3L7s5rb:]4VAQrHS)\<K"t<s*?5j+M_W"O
g:`.[-#hGKe(Z0:+>.sW4kRcKP#i^;.(D@[6@:)q)oY-iX2+>C_#V!JljQ(875J>/
5#_kTW^[m?mD+)i_2JC%l<1rV&O.tq5U7);_hPp98;cB#_s4WoO9Hbh,QRm,M4)\A
fIh`*&-F$Y+pt^aRTDnEcO;K=!GeoqE"E,51;kRE!f.!c#Q~>
endstream
endobj
34 0 obj
23875
endobj
32 0 obj
<<
/Type /Page
/Parent 29 0 R
/Resources <<
/Font <<
/F2 7 0 R
>>
/ProcSet 2 0 R
>>
/Contents 33 0 R
>>
endobj
38 0 obj
<<
/Length 39 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+Z^f"Gf&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^/I
-C.6a_i_=GAi>N7jMa^8!/>;DSG&`k(KflVU>pJ`1^p,ba>aV<i5uT>K94MC5RM!P
(^?%7E"iY2+G(Gb@=W<tWut;2RAC3f`g3=c/)D2<@>]#r[D>CObD*#&L*_X"3/S7R
ii&e&#pO>G.DuSA\-3?o$T,SPMNDAV#)[@b(5?7l@'q3::p(?=b5qkO#;TK:(qm"9
BW'!o+tSZ]_,<1oUZi*oOees;58-1.E+7r5_3f-q[8D5YSYr`CN&6LPFBf@[!e^!;
2c*oI0TCV`dPh?3OPL)#!sln(N$C=)*MMb.Q5bM[A-t(MU>SlYWlf(N["St1fId=b
+G_;#!Q@SYM;k>J(8=\V[Z7"O,f7D[Z?"IdXqi3%/BtMI6j51R9&X?gcKd,H[=D(M
+q5c1au9fK*RRLh_#W1IL!M?30-HFag)5XKG[U6";MlHaY:>WRI'C*6)1O@hbE*[V
Wibom#',.JL#K85$F^5@6PPM:#pLl4Y6u6pIA*>9e/Y2X879/d!R1B[^27Q10Xmeg
hD^F&?pHLXULbrNe3gao1(Jq*jWh;bKK3uuiK>P1hsNo1(J6B^$M3N@MB/Li+gY+J
XidZ.&8Qj*]R_EqFNtaLal^dQlj8O`PA?VeiO"<Tc6Bc6RU#m*DaBQF[l_[#RYpSR
hT<Wh_1XhYL>/=9p@5eEn[7bqQRTrZH]H%4\M1K'X6I`T[DhArSsc[%aDuNbDnT3O
%o9ck-bA3I^M,oSqgQ<"Wa'G^heaC,EYrYE#7/cG*YfF3G8dr\jR?GD("m!*GH&FM
>V[bplC:pBR.HpMA*@p)07ge3*7)[Jo=nXdcu>]!8+lVFhP\+r\;+ndg68LMJAB2e
@WM*He-1&u9sZqR.&*,FoQcNXbINCn!*\_'DEua`2)ag;9Y5joO6u9nfL"Sf,GKPS
RCp6]dcI-KOb8Zgnj<[4qd@&)I8E)Q_aj)$i$2BS:^PgjVd.*0MVoX/\bs'a4RQ?,
8Tq<j$'6R$q&ULaD@p17]U+rh?77LQnBM.j=N'piZi"gJSeO??Ic:]]iHh`n(e,n!
)'O?tMicp4_cZRGT:A)eEF(!1PlDmKq[-#UN.hi*RTnT.3K\%J*(a4',SSQa-8#W"
TtjpV>9&iB^tMPLi+C1QbbC;]6%P25-?E_(J8L3.9et(2,Gat1/O]+a7Nc[O)iV?R
mPM;'AdI6(KJSt$(1YJN:D\ol`!3ObpW;YbM'aL_PHL.>adF"ujLL=nn,c2)BcQR'
lP#QS<cbMPdjh1=r@K<BC`99RqT,JZSe&f+W2WuTaHWp!mqQ"P#sTYA!`<E)nncMT
Va4p"e!Tb"X\>^j2(+XaPr)g(PphtW-1qb=%\@^fL[dE<,djGq#&uL<f.:WHmupY0
IMmF76)gY&Ab52TcZiqal$VZI1d[I&#[&j[AKdqQk+Y<p,ef5Mad(@rW)L8d;lIVc
VXlEW0mPK>V_qeWY[!/c=hu7/9TkT=$7Nj8ANcrM=/5EI<Q08A"m=ZQT@@%pcH>fH
V53"=nXb?^Os`f%,8-_.AiS1AVcFW\G*Ng%W`Ig9-tmFHXjiN.OQt4QfM_epA5Xo[
Q66WAGV)N5)/q/o4BK]4@k=DmZc41-^'e'k+N;F5(Ln?m+URK^A`SQSV%ug$kqG]j
-'K.>StF6tf='#X[2-r7aNV#;01=S6&R1B:)pQ71[h[F),8?DQ&3"02<oPn*U;Bg1
fJtlId[=Po@Y56r+dZ*^S:iB8e+6XLWLiQcjmM!$3&kWt7$CmknSq?YT#"#J-]fj?
M]9qR^eI[T\_EhoaEShA`N'U1,3i?.@?$TF*@imS)FGH";-sK!#fq0i?JSI7_:NlN
0e6)=!Mn1RBiUK>b^BT`c/p`n+q?J%.isRf0ggtE"6@t#rN9l%\.1NPR*0i6;Q6KA
p3AgN`[uDY3Z]kAjNHVS]8E%sbKQ;%(LnZ\,oFnO/^?3hB(bX]X[0#$W,_:bG$Qh_
p!'AQ6P!_>Vf",q%r.E!m5CbCKs=[/O`ufN^&--1-2E#=L&'foneZLj_0OJ[TnM<o
+*BjR.Omk;<[?7$^sS`@AHepW[R9)X1"MB"H:(f*k/(k<mT7FG.j<ocBL&u1'4X*/
@pqkLG@M7oe5r5>D/GI_G$YUY>.\5/$rq/%8l.2(_'nWNg/M:RlQR:(`bPDI^*'D&
Dhu\Jh;+R3#ZG9j>IRDsS:nSW4h0FP;giU1BM>VDj1eXPF(7=8NJNc,#$;\"@pOI]
ZJJ2.QN54=-5glM!rXHb*q42^q7&EpDn$6;obdXUXnJ6nT;e?Lo6mI<DN=G%a!Qj%
'VP!Nb7%2EZ^N'*?d:\7;Wt2TAK8s^@_*^skfo<eD6'AK\e`9*R2\#rK)r#*r^H-e
>,\b;7?\X5=1_#1R2@"(PHr&++a5T->(U4ULp)-B+Q'#cK(O*Tc[n<O'0#V(r(I[%
i(Cr*VdNb]C:jcQ_B(M7-"a)Me,O5.BfBGT%jC-r(R-ZP7riTDmki.IKUS\geSlIh
hOoMO-N;FTpta-,k/]F-2fOKcr2GRDVm:(:o765MIIN`;A:,Z:pj=0<B*rar^Dp#J
F?G0**-$BRWV>8bGA2[L8)s<>X.]@i]L8Tde]UHA_V>SrpjQT2q7$7r,l+J$YDcm?
JH)U;rbnb4Ai^49oM4MP7,nV+U(ig[KTi2__*ZX8Ku@-5j<2EtPNV:RURk^W@$g!9
"euR>U+0>:Y$d>X"UN%,V;)J%n6SFtCrN-Gcor]7TIQp*"(E+\n2`qS]*D.f:U!I"
bMI?9]*&5/1n\Amijqp^ng7hu-=\6aj-8\D\8=pZk>*3rB0c1oc9oq]01$l7,ar'"
/BL_m@-u\X0?>=fi:d^\DNMgFUD+2LXCK38,pSMj!a'@j,]&E98g[e__j5+ki%65S
!ru.(TV_u?Sg;*T,k.JA8Z$MYqKdu^6\\^V/L\\Ue00RR,fnOiEC/E=+D\tj_J+sF
bMa.F;V?o(7Z6X67O&SIE>G:t(@JDGVZb>FDS^<K(C$CNOZsQhYn&CQNm:1+`j@<A
'):r#KreHf,d(K+)]GUH)W5LE`*>H[a@ta-Z716cLV>c'^a\KL*9giTV[0f;BcY;F
iZl*CMn6_Y?QQDNCaZHQnb1GL)O"#RO&>+fj1O1S%iaUEI,a*.+rF!#9^n1?^1)=o
#+X'lIi:fK^(3=2"?8"A;&ffZ/e(K-Dg*CFZG(?S@?,Z"l0SsLnIXs5QKj47!nuD,
q'O7P-PA%J`Xa7kG\.S.(\-Q3dY?j\E?/l+.5Hdq`koPIDKH9c9#m&/Z=;N#WkD;m
,(s)Cba>C\e@gX_;,$cc9^X[aE?f!s,I*X&/3oK;lHBYk--Xq@A'R4(RP=;2,A1"+
n!tXO%iR5&geo9TEY^g=9^46"+u-1*ddT+<9]^jP)m%+i!ik$KJBLj$)A=hZ$k2*X
Y%'7%-1-<@YM:aH6H$34`8]9!mR[,SHo\+B'olDs%"/AC?R3j]kE6a^b`N>%F<X+X
XRZWWYLqK)1*WIFbMqrXjSC$tFVG7gr5b6ed?>O>QLNA+R)l#$`q;9STOKNi+Z$p]
/'_`?U?9j!4&$Y):E2B2(.4t_o>cm1U2r@cC>"YAI>h@@1Z\#qY#!9[ca30soCaHZ
#^hU.5R%H&d\q2H2U_^Gmr=pk-;s>n^GQO,]##@ilmj&nie*0t6F7mUF<kE%'0f3M
DhOj"PY";Q+Ms+R7I5WdD-HgrL]LIKj[*QT_PB2T4$`Ei-Nqa;&.[>l3n?,iP`d*)
Al1hCGsV(M/Z!)N9cHIlBHT[2C"/n<1n)fK\o/d.3@j\%0Gb8=Z7KJC3G)MbOG4r)
Bb@+Db="NR_EA/YEs8E8.b*rYoAVVO-L`KsK8-+;JgDE`Ao,H[c/ne4?tBNQ+so/U
@W``Uoce0o(F6C.as&8Rmnt?N1K)+MCsOCOP!Lo=3;^(MqEn+Zm:PBr=%AN<9J6KJ
'h0oF;G<i`oHkDm9U/[gpK+L$<[Pi`F5o^P*8b^*<-.V%Y@A"VEE,t[grFG\k.]dZ
,=7Z[9i!-9;aFUMcW_]-Aeg@sMuR%!Ti^or7jC;o@LZ&,3+[4Y,RH\1KuE"&W<PfQ
0h[$?^fi&rQO/Aa#-fe]&N%);a>lW5n26k*K2"Qb7pOK@`e5ho,F7(AAP0is9$P=`
ECiY7(.Me1@5^D,<ZPYe9c8]hq(U/U0i5qK/Ril^?g0dam+tEs:.__1/^_=F9%@@7
EG!cF2!LcJ@N7D7.Od/#RPogC[RXiYE]".f!&fX"Y3\r(O)!*nCK%Z;B:0`-.UfEN
AC;lBf#4"H[,NF>h_>a1Wh"!M9h':goJRe('EE9@`uK8&<bK]f%=;j`<\+c$)b0X?
;?ZkBqEhAQE=O457&na;`h1_g.DsnCE><;V.U^j_D@q582Y:Sn'lGrqFLLp_9nNsV
/kh99DY>;UPnR^eDfBh2:j5ENpE%<:,%<KKa7jV!-NeEK.8(qd:Stcs(;"CjFa0[o
lB`M[EufCi%s4-[H8/cFQY1FtGg>t,44d>-f=<sZHYui*@jsU+pD\FC=+&'q,$-.-
e?Wl,p-[@:F'%AcZ.!jEOti8,=u:_8_NT(B-"BEbC,S\q2RR;!JUl=@JKg_;@M;%k
PACH8*)^F$<m>G9*gk<(B7gq9Xr.g-Z%JbkKD+Ld"TO"s)DRQWf9F5uQ:UfG>B&#2
mpp'a[!7Ti,DA*:3I!]B0OJgOgO_!P9G]Z_=>,K;=,?W1L=gu2<CM"37u,`:M@r44
=C=bG)hr3VKgl_u<<RR>)iN2::f7m\\8Of[Fa,mDNAYj<GBo#l=%jEuGkd$?pub(j
l=*lMM>+*m=SmubU>o9606jma;^s6e+,_A3MtD:D:2=S^)/5uPIhn`6R.G^/.$X9E
P8"s_GrL?-d>@V844s^aCMeH$]`#4'_u^r:N)0^W>fA.YH_d<WK@rYer[J&qQOu(Q
Z^/'VSS?P`8ehL<mgEY6\t1`4C6l\Hd2-&)PF20<J_$pHVh@kAXI'&69?daG(9)lP
P'3+:P9Qil7`^/I#a6Ub4dj<ElV+U:P^*D*SOQh=(g&H;5A,Ypp5ghr=nQ7tPCN^u
=>GC[c#[Sl_fSn$T^S,T(4=]$TkP9hAiM02,%PJ*UAiBo?18gd(as6d,'q,!>Tcm=
j32S;>'MC=&Yl!JFRWCf3`'d>@.R<Zl9,j&ik^S/S;((J>'Rm'%:Y&c?T#(U`&f\S
2O\aE;0c;EK,Sod.6O\443sk9)Mb;<NEgOf6_YAs16JT3i9TGc@bRcOe<9L9TrBN/
ChU>-eRu"QM'n++WUtD8e\N[G,+&*EWu@8*aJ@7DWN&eCME8K!Mr;VO_6D)nOgU=K
jN1'KQ7uq'f.,=V7`HeA[)99k19dQha_tP5j^Lg`?SA1\E`gG1,H\#%+c\LZq_,@9
of=\hR#_QF06\U%@7PuU__8!u4(!J[WkYub&4."Ejh<L[AD=_6QO`_6qCX)r'tF,t
r#+OIq=V=;e%$hJZ1OAQO[j]#`OYkhD1^Pg#u:L^K(n$7J#9TE40+oqB*J(t\/V,1
GE]`C3)=n5OnQo39XUJaEq.6u_$dW%ZJ(jQN*ps(c'2YHqX!"SC,81oMTfsJ-t]S[
.Snh1_=lQ0dTs`39KUP7_K&IMCYQ`9`N<*_:LY+Z:<UHmNfm7E6bG"j:*Wbd>9SVL
*)0C.]L\S[s2GK__q*&QZ5h>`<QO1oaZP#6Xg[4m4BkC4]^LO_,d1PVW)6S):C+ma
![(2k4U?"1%CQ"-n>!\#@(VBKasPR3jIUCE/F97`Pa"+hk=RB_7962B;V1$HP!k*O
._mk@_],8Ta;uKW:Kcf`DgWSQ;gHD`XRF&(a38EV]_aoV$tXhu7ZFg(DDL7#!c:9!
@i[#J9f^Z>ED5@R?4\1Xcm25d\][$-WPE-OgqY7Your&^bg:"I)i$f8R45f_e+P':
qD64++ha>;jMmcH]4O[j_`p;>`p)XHqATQU$,XRi9UMlQ6=8FdJ(dVL`KdRGO+cl'
+\G_h0G/JJ`sh^enHtMKh&YBaeRfu(I.3'%h[Dq[_P5RD/o8Qh+g*V;]Gr7j(J9,e
i'oD97/u.MT"@Z4Q]+AicHG4N(ak:'PB)?C`u=K%:W]rcLb+&83+9MuMr@6O]E:%Q
9A3g2j5[#Mj8Jr4UA<[?r.=P!VW3t9^!l(RU@,l:k+74a5)7ukVSB;G/L3HgB4rJ)
Ge"B2arDs?<W9]RW]Suf"nH:pI#$tPS*SiQ]Gt;F91A,JE=Z<P9qD<ble(RJo+B/^
?SO3,;i8T7"I/Qi7XjsqEI)b$r5S=el2rkON]?OfU!Q"7'3`QImtAkC(I_[PPb02J
ia3`FU3J!Sie-=A6oqkc(:gFH[+:r?Q>eKA8pg+]Lao7nL0l)6bXq2B0.0BQ_V=d%
F7U,4orR3JAdlbF\b4)D00^EJm8*C"-h/7&>/JcP,1JuT*UYIKb<VP(\j,*5S2E%T
VVJO=:ld"Ke^nsM<kQ^;mV'5IT?Mf-jM/Q=XonT`M>Z1Y39$CM:G,7YC=H'`cZK'o
63%?0#R-t8E56EK)2JWS5Z"+d#9&IlL7hA_$oT)b#/UCscs/=E_]cmJaLH4(Ma64)
GYB_/&!MsK5b]]*">1UPUI#'mJ.sc18d6N&OFV.$(^l)Y@?BP8D2XC.ip'5.O\2KL
WWpV96tS<:#R7&TPuqQOUXt5X9!H1;4-0mUj-^p6KJoQ%XFk;Zf'bmD_1idf4dODh
[0SE"0uXoh8YsmMpqTbP^+Q/hA9M-^L;Qm);T>I4Ub=h_csTIcE<2X`3J`Y!'O)^>
5WIS!.TW'1gi&b=8iM$4oim!<VWNWA\d6)e-l_F;K34([@9r'g7ia`Xb!7hCEO<UA
Lu1SZ*(gF,Ij>kPcl?0m5/#"JnQHfP/=m0s`r)fSgH+Jn!NW*@.'8tRW'K[sGT8Ck
:gD^4b:@VmX2>R%[&JVN'&1;)_g%ifW&S<*_6+`"&\-4B@2)#1>3tE@#lnN7L@2+F
g,i0;6QEkE$ilrTCHJ!]50n%e]EW<gR_ukCA+:$l@B7<b85K"iis&DgYj/=ZN"EWh
Y+.c_.`&J:/tgZT;&-tk<&TjfDTk<V\<1QQd\,gYk;:$a$:MQqCTPDU9Ss1#PQs$,
Rj#t5_TJDS0'ncNabgFgPUDX;eP*KqEce<8n+4Li;fY#o4N3?-KT!'R1t`8_;'XA=
68bT8,!>(JY1Z_a]eo>mJWg=I8T7=QSQPLfGuVHAX-t!S%^XD$_(HW@/kn's[#eLW
CunbNW/Oqae]ehhdPI40>-Bff&e^>)in-NlaPd<p)%3Ph5_hR;Lg_"<9e3@d@$b1*
KA`dSkmAk8S`:oe_3f2%i9rQ:Kt!bI/W=-'X([/Ac"OS9?k.M.qQGl/_ad3hP)AIX
0nqISL:N=<JMl]9][3SDMq6VBlQ`("4jE>%NTJj=G.(;i3+J^n9;L7>kaJ?[UbHo?
2gOU:"AlGMm-^J'?#`Utn`BDGdu%s#Y/V?_=(ZF)g8Q,VZD2b1@CSk?Y\psamZ+s?
DQ+-Q]L&+:/IdM-_E*7@B^4$_3n4.s"/1U6;'UgPWc"?.+f)H<5A<83)JnkI]V/VL
o/X1b]m@n_bc(h]K/TneF54>)>B.!BatJCt1L;Dhg\*,g1!'H$TL$b.CK,l1L5W>J
*=A>3\;1Xsi)A%$)j5R[?MDTbIJoN"reEW#!];39pdQ!d\n\Q^_mK-R\n?tpJZoj>
T9I*3@P!2hRj9ChPQ?5a0*Kjh,M'o`6<?'\I&SCNWb0U')+b66B+bbr?&Rsp,Y4(1
Pk[q'drNu;9?<3u8'kY#3UK`*mMhH)Nc.t",__oF'JlMCZOa&i0<jjU_dk0D=>:^\
OR^CJph8r$r%(*eSSFFGI-]`?SKifA#W'NI'oK(_J#B@e1M!g.@K]g_N+(c`=ITds
q,WK;(,N1^diJrT;iIi;UH%@r$.t/iJRt@_85p'i%L_!LONk$E(`:P[Zqs'/c:#`E
Soe*[a9O7ulP\A0;coQS=7V%Lb#Ht,hM]j/WuWFqVB0Fml^qIYe>8J[JjBeg0-l35
2MR=Kq-p.`.Inl+aN.!Qe?\D%E\2nf1alXp9JU8jc:U\Rde:t"1M0N_APBs97](HU
P-V$l:#o-JML=28Za+O@#phKcqa<&kFX]p#$N=&IAY2JqIR=`#g<ci/>2\+[^R"7G
dFhQlCf'I2)B>$o$`tYTbh>o^:i4?[-#/T4Cr9.7`Jb]<9#[W2dBZ22BX+S4#UQmd
7]N9pBsoULRW'n?Y=`NGF-uRQ4.HqRU*AD2,4uA8^X=>ukTk_Y-!#^RB^Zl"r>IhA
&At/ENe1TbdRrji2+O*V<2Z-nXE"1J!2lRa6#4qaKiJhRdL;-MF.OQ6bVFnakqN9"
+:\FV0S\N/0rfp$.?uI\3jVO-W_HX$7lGo<),E.7WB_]hSF4rC+A7b9=Ks^tnQ<a"
=_NEl5K"^Oeb_7;D+Tdg/V8;s8>-8&q=-e,FuHB=riIch+&PYh=jIi.S;hC&=&[&;
Pc;Q@-imI"B$l^f,2A[N?.$,NLpjWi*4Ke`fkrIIT<<2q'44B]+iecEP_e`uJH>-`
jGXk,1?\uGOC^3*-n'V?!W~>
endstream
endobj
39 0 obj
8934
endobj
35 0 obj
<<
/Type /Page
/Parent 29 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
/F9 36 0 R
/F8 37 0 R
>>
/ProcSet 2 0 R
>>
/Contents 38 0 R
>>
endobj
41 0 obj
<<
/Length 42 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+Z`)9kj&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^/I
-C.6a_i_=GAi>N7jMa^8!/>;DSG&`k(KflVU>pJ`1^p,ba>aV<i5uT>K94MC5RM!P
(^?%7E"iY2+G(Gb@=W<tX")ga34(6bqATVI+D@YU!GH'`-4<^("Ua2ggoqo=5]6:M
@B88q"i6uaRAVRXU`;nK/:es$bYg;84e[f`,p?]s)Rq.MJ6aTonORPrXqGb5Y+t4g
8;a5LdaWmn6%Ed+KF:UsM)c`2qA?oE88>XuM:-X$$An7K1^ku"`&E\9=BH+C_l23G
"9X1k1Q8*=dP;;b6d$'%!LdF,"sLScVZk4nC;A;tKNAN1ED9-73@uf=JPGZ*B+>%Z
MITf>WJp2$Vj5VG?<4"lEZ?7QeQ01\Ene6j=&fDmB#BgW6"%=GS!o5gQ@3gj`>-@L
MHL_lgMhmilqiAho^0p@>ZE(gFLa*5[pIVYrBFN?FX?UM8bD\H:s+\gq,CK_PusNu
\39Lj[5]RS>Zb#PnL`AeDC^O?n`>gBi)X*JF5,9*q2qO4os&ifR6YVPg_Y[nNeP<@
5BBoX(,%+BR9js&VPp(8Ckih@)1to`IAMOM\97mPi-(Qi;W6'L6\S[3Sb%ilR[rVs
fQcPVFk@Ue_lf_8-:(XI&l<.P>1ke>S*fpL9qQ+0DX"Z7)3/jHk4c$.,rJfMI<9Fr
Y(r<IRarLiC/]#?N9V<d;*=-TL.0;M'numuYd8M,H?8d(oq$!2k<bPJf.I_jY??>7
JTBS,<HhYOf593spCd/Mj;mZ$e*u26&^Fj6-Q1;&)G_O=F15mA4ADbP*Fd:I8os90
[R[NN#22k`2s'`!4*:C/Qcija>;+Iue=Q4OmQ%a.WV%Oni*kqNBTp`LM;ibK+Q+(m
1K'Or_'_YTV=:)NiqK*D.8OY(p(4.X!oTRY<mVTfOZ5>o*sl\3:\#&RQCeH!X4M#=
9iO>J+OT.Y$8kVYTFeU=q?a\eL5_i)ZdQZ"?R%g+O?saJAhNm$bW1H_WH5kB!s7Gn
/qG\`#!k^2rEl'3J["\Q0%d--=Hje_O[^0S(hBUS,V+i#Sg?jjgDQU<3K"@nm(t0%
%`u6oI.<dN\<kqdUV#i,DoslV2YR119@\_J\cb8(IfSF&kE3"r#t;Ap7,fIqMSr+O
`;(o1frSY?&k4go.,,s,]QJNsr^Ato71<[bHA1q(1HtPfKr#J>I:_[b_0L.lh.2q>
:YFC>3DV/b/5D>sH=0+:XV^')^QUF#pWLXi-_d]mQOr.I96dKXV/+G4/Nk=MK]_Jr
W]hW"[2#RX7#]47?:P0TK,.>n=lcXB/S(B((F&'KMZJl00_IE:+CqUqEB+4t2'AID
$@?GG0d4OdKrV-mOFbMfI\nHBT$V1;.)d*0VCIF"l3L^0Ka=H)c@D)^NXZ@nGr"_[
jFR^QT%,<8TX;qd/t+4a(P-P&">#;7=uf!ME=c.XS;&SPI7lkK0;^-pTi4l)9+:n+
,[hSdOn(>6%nU`!AA4a9!Z7L>RB6r"Uc/p/2@EAR<@XrSM%o66F21U#XauQhLP7Wf
#VAbV-*Wf*)C.YnYmOPYk,>2`9_QlemWlhu[tC-@@jmL^+tCAH;3hn)XF1,S(3ZOK
Oqb='+?45rgkAnK8uP`)WO#"C>hROBMTIT1$rhBS.NiJMCon#QM=07Ek%`@^M2P&8
.^0[L`!t*gTWWJ9bF)A3T0YeM;e-^\f2OlDCW4t=[JZ&;&9=];3cVY@$K2]Ygs]ts
lU;L_jV6nUMXQIGJ@>mW?Aj5ZOS'U-a_q#_UFp:r2&'@6&r#2CoQ+^-]<L?k']0PZ
HRZ4-[>>(h@:ZipkiJ1@F[YiY*"PH(9A<#T;']JL08M3G,f-qh#N&01N3P6Q_&t67
*m?UL;R85@MM^`\i+VG=K/H*kk2foa4d%8U29<<kO=OuWB8Zs`FiQ*F*t0rhZ22">
8sJGjE"m%[Fe,I6"]$T61R\p_m'a('-/ooiP4Oi'auH:\k+)!t=fti?\`0;oa9e33
<eS[d>Sq'XltUK#G0smg*op#?W?G"G<I.N>kkZQjbK@&^jM\"[bofA1QCBn'G)C#)
CT;&NHa;<\"DSBR>Dr2:a/0p/C+H?]Er#7#p=!#X%'b)I8h\CX+'I^r'OLJ#PLXk)
A1aNfMY4ucW9MWDCqX?fnn#FA7U3\X,Ec8g<N==.$W:kQJBa'CO0OMTI;XA+OmNSc
<le9CDYqbD$tTf@Y;jf`bq2915+u%?'g#Zl"&fPP![8r$$>uk^_"[)[i7JEn0+Je-
)1JsQ]La5c?,N)sU$Tao7u_KChS=qBWSs;OqU,5^]c%6&g`*G=*tC'G3MQp]e/sD7
:%<bE[Z0GiK:UbtQZG\PE3oa"4)CrV=mii&75f>Vf1f+Jc@WJ/e\'(rg)V5n7H(DB
hXY6H>b/89DabJ?7(2ZZ7;]oU]fNX7>0[r-H):J>4i>&,%B4XN)pYf2lK$C=&VW6-
;UW%]*2W&+Vu3+fntkej^Uu"K.K9_)5'\E"%*o9.LAg[;2Yq[\?H+hN5pb\M2j5O[
`;'-A9C&GI;_W.OqOnHGhY5iOIfQF(kJS\G?OQ)dLkiMcD`ao!&496%^ODJkq'j#\
H%30n+&mPer>#N_:W&@+-c]N-SF5rDKD7XhkP-+ao6U&*ls[B8?,!oYkhZ(uU6O'/
CB(JHm:4GhkSAS8P3-WlHn(l8c<0S_&9WYRoh1;p05CWH?ro!P\*N66i]??,$MpOU
/M!dYB&5BtZ7"tVTjjB]`BFG*RR@4aYQ>`pM\I?[1q_*(0P%oTY]^7)L-?r#k6.Mk
:TFbZ/F]f#q(S&r#3u3WOu#H:+tg>1:ko8bq[2XSrFUp?@NaWK\Hlg4=E%)0E24Y]
b,A,S$ddJ`E/n!$)D/h#o'h8>/YNCq68*;&s)+DZDPI!.THT1C",g3^"'D`L\-2kO
%fj*C0%qbu%VV\H9Be.>m,$4V@,0-\=V3@2$`"r!k7XLt'?s5%,^`+YEtb`LdGSQ1
,Wug'9,4H@ZA6sFEG#sQC-AKh"(YgV/PNUm?<K!c(JI6"-<h;V0$fI"m%iMQOd=;=
"M_3])CcH;C,$X39bkX?0B2d59]$5ZN`Erri!h;B![+Kf.cBj8.4bcBdE\DZ,eWR0
*[:0M0Rh6`5m0fu.73a8"mGUj<37Y@.`73%,18oV>\L1R3WbWjneRq:g?g,X#-fB\
W)>*6lFjJX#XW!'&^7T`9Hbs^,D&U1Jnh"'Yb*,h/W4j,`GeU>d\,u$ToHiB&nFV_
<4PYrW7"rs7,np#pB(a;,7IUX/f`=)1.d@5'$<E7MA4DEA54[F7IKlnj_fX-BXnHS
qMH^:jFZ9PJlP2ejQ[4I/QPUmL.En:jlds^AG2eHg7jb,/eY1jZBHj#[k/qq9@9]3
:M^69bpfss.dr3J9,+YRcB3/3/J1u;6W5_&Yqa]6&!F*cc.LgWK.sG=1F0^e:f8XE
57d%rqP5VQMl-3r#8&K*+N'6Eb(-Bfq_HG-2Bq*8'1C-npCIm*n`@2%7/"Rg<WrK$
&h[S_WabY`?KZ<CD(H#iD/_S=Bbo08#0J\gUR&\bCfIJ;:NN\dX-0.:@lY1P3\Hj%
8m&M0Nrs5S<2`^Cd!-^d]df'04n5=uKXPHug.oLkfIeSFl=./"h*7uMEq5[*apuG?
n=i6"5BH2Ub\obpW/jjGfI%#u;e@ejY-S]k8$gk[F>Z5j<_3^(6SYOI-u?c,5jJiH
4]FR)1IAJX2$6c-6n27pMju'Z2`L<X3)U&BNnV?l8>[\o!pfYMFAuk(UH:1qo`Hck
FGfZ>DCSVWAJCI[.S@1KGk^Ur1PFp+7VF7a]ZI?90MEBul@VJmnh8M%9P_k(9M.lF
p0`bL9XNhS"RrrR`1`1:9s+"<"?`;U_b6!Mbp$Iho]J-4/;Qcp9PPA?_\#ZYfVeBc
;$Nc31iX'O;DU[<CSIX_CU!)a]">,[+fb+1DVA^Jqa@MDenm!=7]Ae[*)=]Zb6:#C
`8_lco#!>&95DsMlsEeoPZI<^1%^:pEelHNbkC]4e70P%m-I*A,="(7*jqfo'9_X6
NAj[$2hKsVl`3s\7h1Xm]+#WWCV9!@nhJZb;sV.Bj.N+]d8[O3Y:+6f23ujgqXJ<.
k^mhDiZq$-*,YBFbg!s6Jg,]AC>Cam?Ro;ZFpTNg3FM;8<fKTjlfhl>Iq$Ll@?-m^
oY4TT!=<oJ3NAhho$fAQ'4B"B8JE*:bFr:\)QK)jAN!#Wj>u6X?:)U#@l@LrPCbH*
Pu@iKb*F/@2C2_qR'O^.@P3L<_b_p9$WmJYIqsaOXMR^*SS&_48(>h7k%r-4-Yp/g
@eQp;NO[6S-YE$ro`W#[E#fnk$nu6o3Au-0!ul)-I;UrE@WpsD;j+`#L+u&aD3NX)
AgY^HS-sCaqQHnOU_khf7iNXiJjYj2->YP:_/chnhBm'6,*Pht)\@lIF6]J_P_gGs
=SWa(F;Ie@D(*TZ1+"`kBrockinJKh4"*%*k^n%XbIhOJCn\"f=mlSGCdpFOAG_E<
.rDg<QW\RbRP2-?+9g5='sLI-/T]NcEOWAoo?\lZ+>3C^:BltbYC==kZ?A%+?ZlK2
/*NbiA?eI=3DJIAESZ#\ms`]gI&P;<(Z@jV?n+#XF@.+D<I''Qr^[A,6Zk0fD2*D:
c=ll925#QgZ<3`7GTfan=$l^0U0q:AM'!QucI.$C?pMmnN%Z^<2(M#;%#uLR:u:[E
f^-##:H_cqVT^<f(R5;]fN'0!#$eZ^L+HTIon<MVR9ROj>V:i=[6Iok>!qijYS]/D
m'p/=&lb$c]rQZFZqH=;.m$)RN!cGY3"[\8kD]#oN@cfCAE/VL`2`6%glR#G0"6dS
DVoOjN_ATn7VaPWAth9b1X^68b#G+'%&Q#_7cRB8-&4!r)UTgT6b+(q39JN^.ahH)
OY#sa"rO'/gQ1Ek=*Z*U%pI..E4>Wr/$&Idc+q>E)c!`Bl?Pg[NOP0o+-@Dq]\.Fm
\@Y6+HmUjU:+b=s=C7@(M(i&TR12<D'"=7r/X&knPF86m34"%DNL@>T-B+3X\ZX?U
%@^uFS#tk8=i1pkZNi!t"5(;GURJNH1S*1?S*)mWA%YFX"eBr,AuEMsRJ=5$k+d1b
ghkf;8jpA'cJH+dTT;m0RJWU4ViK-(8%JSj=V[["&Y>F!Pdr$6C,_<DX/$(mRY/3%
3\@(""f'a;3B?W%qH'+(8X2;jHneTr3U"PpC=??*UoVb<H6]:$l^-_JV>;p3=c'$P
H_u]QW@Ku<3"`&_!a^O]Bc,X`3`t%'Whp]0UtI<-\tLrr6&l)%X=dkO%Tf]P"ftkI
XLbO-=s9sch`g=h(Wr,DZ'_1\XB@TMhGJNq8qs=FN2H7aTNW"^b6<Mu+$V?6(p-L/
QGXY=>Fe3U+Yq]&P)C9cc'oY&%Z`+\Rjs9+No2Y2X\cX9.i(!/ALTUBKdml_G6'1R
1a3hQYd-h%8q48\2FS&mEpAZ=A!_T.WB:kuTM(,C0@[BR@CS,r[W"171&jD!d\9l"
V1h&?>@g#W`F&!e0&)q,2B@$>r8Vu-];_j?XlFAQ.s&2!]aU=?nFM<MTbgb7L,=at
,9%THU4k\D7cQa-i_HPlOWboNZ*!=82SrS@V2@n9$(uqWC*^EKh27r=YqfTi$?E.^
hG/8K+utJ.</NF)A])JR?B(SL+rn^7jP8IX7L9lTmF`Ij@,$K8>21eT/lpUm;0qOV
ZR'WGEees'4^_NDfBkY-#r*G3;H2XL7I/f#YpuLr_bHY/Yn<0J;sZs6X-U\31"=mr
q!LTX.UAee[A+Wn_AI:Q#-uspahurTl<TV/bJMn1`C++RBFA6cj'Uq$4de=V/`@])
lnoA)9?(nrO8rR+=4#Yn0noC(Et`Y*iL50:Md0o0[;:Zg%uLlX4$<>!!qPbW6"4[p
2%AkB[(*XmDI!-!eHArL<L'YTeh8[je,:Ci'C]<>&(;`!eBo`hC10,nA(L0NPCfK@
*AneLJB"-Of;I0Np5qK'G5\-^^nbDkh.e[MZM79H.TTV-F/5fj=4r"Ug7>e,[]9%f
#g`XJg)YgZmD7R_?.po+8%j4(]J\#.69-q*1tYsg<MHcYNJ8Y+,rKp2/]Yp1^#7FW
=UI!2_ZnK]YMn/;f*(:\ZBK7'K*)OCbJKt2rOp>ni6/Pa4sCWg:qe[`5B)qQj.9.;
*FO?1*ia//?iDM8;ZqTsKl22!#YLsD7.&75Dg4mR]U'mD:b\ERKB0ancQ7Y>G)/=+
'OI9\(&3SF$l9ZGM)s)Z8X5(i"GBi=cpu[V+s\_q6n12`Ppn1HJkK+jW6kTHf,LPM
7rq.pn"d8:.h8/EI=Bu#;$MMpC[2D2'lGj1C7jr1(T-5[0GrTSHiC(9![Tgm1p,^>
atCYKX[h]P,17V"b3`0W=pHP6qF'ZsDji7N_Rj/><1cNaX2O@P-r[9&TY3d_IJH%]
B$DOqmde.B-'Qm84nbLjp<l.\6PMO7UVn1"e`o+_G?su.S*SrT>I-r:'AVm-J\cr:
0GWdDmaSc3hpeSnBbf1qWaYethu#06+T@JdJ6K;:eiF05%Y2DS+@1VZB'X7P_WuXS
_>l;-%#1JWTZgq!)N;Z<JH<+l1E6fl_a0sX%1%YT+i_T^:+I-5%#0At(u/^GNssuV
kS+Y"-'QJ_EnPgU%gds-AO*#X-t*H%%A9V="@`kR*(C.-!LUB/3?*pNnI__P>W*K0
@'nX97]/Bed4%F[`8G\_(lef_fSJ0t/f>,aOC?,HE%i58XEPVSf%VLM$qBq@+N?&o
)ph(7Oi?lC$HHV\R-S`eJT;`&B[Q_hk,:,H6F9SQJBf#IQtWWI>qG_)W/;!Q@n8He
PnK>G`d9kM(hu&I>rJ/XNhg&AU2AjGZ'A75^>!>%)8+d_1bfu/H'GE7;HLs$:'TM1
r:Ir?)p)oB&[r,e;Q>]SFUp,,A2rcBU-jak!8KW[g-5N[C]dq+5>M7nfVJr!%/`(n
bED\1$G-YIUo\A\O#AY<L7To(Wg's-Dk`ht-'4'D_PM5K(5FDTH;KGPc\+Wf7#ni@
oV,(n8Emr&A*+c3%7"<k85Pg\"sP55T'\KLRo%QYnbOgPa_MT^QQm(VFIGeLKY3Vj
Mfa9AY#</>dP#@8%Z38ARmu"(d-R:]"tCk>&Vbk$.+>1k)VX+6bs_L/:e>0=33:=U
"$FnH]_aq8MMm0Q/FC"sg<g44'`_+3]?g]cPL>]o2Xg2B)S-Y8:<0^lU7kLWN5]NJ
8b2GL\HW(o>uNel91l`FOBkQm^Im2h?;L7jHX'WQ@M<B?DbYhM,nB4aqk=f^1on,"
k]8,]f)+gaXOYHb!S\#,;UHjX_sWRi#WQZfTg=;OBJC;kP5d?E4\7UYcimK\:$q?W
`@hT]_cs`1q\<jIeclp94IAQABEh3HaV`^@[@rF7Gnlqm!C@?r"^_:\6'pI>U>i/,
0&j=@##isK.O"m[-l<+3T[]V;!GX&J]&KC("U,5=CS>EmC]#-+k]7SqV)hqOTV.a6
Mken8<gfj3g(&i@2Mb8@JuC>s$a&[0!9c@p!QMm_joGO'SR5!1JN2h$#(*5,qY5u7
C$I1.hRH0ap)Ma8]W1g@/mEtM:=<pf1T:`#I=-)Fb09[\X-2DDni[oedfs)J+Hk7)
8lj=be(7ubX`.K[ch@;N2pu7uHA7A,a:LT`nW$KsW:_Wd:AO1S0PJ.?*dZr[AnoD'
KR1a!Ykh2A:I?a\!uod@j,OYQ_S2$C[-P4M9'MC`/'=P0U#2,]OaQATZR]T`i/p?^
S"KKk>`PYi0ph5q$JFu$a7pL(;n2ja!f/DKNH-#K%ZsB4HS'n!g(cts8XC\F7Vn(m
&l<+W>m^@-$^?K!P8mLEJR^csos5f.bX,I=g]S/`$'bPs$co#cG3)0u&NFTs?DB8;
AS)gs"QKk^Ud@g/7KF,((?m#@W/$LS)]#oh'M;UEMMHKa`"\_1&=\f8"=/Q9R%iY5
'Kn<F(,EoTHPY%\KS$0a*upIO=c.KM1f<V+.bJ)9(YL5e0_h?\Ze01jZpKPf2F>7p
A8S-!/iJBYZP$8A9Hs=%PB)ca`lPlCP!gFWKlT3g'(1`j)r#;ppm4&)oa"2O=G"N2
pIj"*$k$bQ,"5pI[9,\MeEf1Hj[(TDeHX9pA0HnDU(C"rrr&O!LmOsV[[*>o[UVU8
4q9uF_QmE>,nZeddomB^io'Qhg6s3_aGZV,K.L35f-hr^27b(2qb1]jRnir;ZR2bm
dK>S61bMfl,9C-(<(V@HVK,O[)!.;_&U*W5fU\b$?f(D$2"Zmm\Tc3k$X$UeVV1XU
pY/?`F3^YGYeiV[X%_B'/h86FGJ?"=7Le]&.rX]t-hmI*@%(@aDF+Cb2mU2VAFG(\
ek7KJlNCa'JZEF4(Vuo*1)KPIP)tOgS'mn?+ab_An+g>5$2Fu<Hnlg4K_e1Pm1)[%
C.^5?+3q/9?AUG(NA2TE9Oa4qUC9nDUbN<PB[Tl:li+/D\u:p*ifXRiOs7/k?De`1
p2".QZXeT_`k*qkBM:+?G*qt>Gr@ufoQmkKo]!r+5Rm#_N.nOlc'52e@`qVAL=/+#
=MkFMjgh[[p(XnU=aKF*>b8G6HF1gtO^f>XN?`%!<`tX\/_aic:UAn[98Od399^+$
V3YLk<W[PWgr5ZR<NaURWAF"k\L]FHC=WT+6]D6'SYT#\_rBi+k7L@Ne]g5n83o:-
>rlH)#'^\.j]p*a_4K.WWku]Gl=]VsY"4S(;$0fm9#FY6ZuW15)aut3;Y-\A3<'`(
$]XA6NP4V<).WjsDfKAK?PJ=*QP0p9ML1JEL7HYYkgkSjbS7DFmjlYaXctTaN[ol[
iT9>O@f`_HbIM'JgZ+#T$,sf&E91C`B)Z"0BJ:fpq$/";@r)TBa?HCC6l+4&@LOT!
Kn\oKbHkJBk4g]B-)l=U,6ZP"%"+;c/?>90BO]9YUsDk.OW#J'3ZkUm7&RQR/*LQ7
$6h4J7DUoK@^,bId82a*ON3\6aIM1N9sa]b/8GM:l\I)-C6NdL')A2MM`h$mA`]=q
ZL>%77+^,F;,nN%Ih%VoLX_K>7a%Ou][gLWOG%'N-^*]-2![DQP!LqAeMXt]aqU11
'/X=@X$?>]E]e+m2\t$!RS-g6e$J>ACU0eM<T`DIOQid225^bYO`r'$%;)*-m4h-L
doVW.?VPQ_<S4"_M41$qED8K]f*h"CI'Enr9of&WbJ789YiNn5)T;Akb<&fHn<.<:
60Ks6TrRp>k@>Z8Srj+>Ad"r?%+d43IdUN]R\lg">]TT_:hJ:.2GK^u>YP@3e&37[
EK8A`;#@CuI=J]=S@&`?hf;N`5gbqtb.?@,8o))tcC[XT<RmE!3Tumq6hJ$HlXI:c
:pBmO%JYo(O-54/SaZB=mdSM)7Q/R<"W[GRHg(84m_r8>CP=V/Q#,/!hQ87BgL-e5
n"b;M_E:u^RI2+DVtK;-oV;h&KfsXZ+p8Le)D?[,I>atHT$fWGDdm6MLW9%fO6Vm8
YOd0m$M\c)U!P_un9n348H3rhZ_WOI5*H3J?B=VG5Mtom^[qAZO7P,j[#,EIj/11Z
3XDYoHh@^3!Jj".4ko6@8M1TJqS6V?OEhR+"5uL\s$3=;[-Ac!&TU,\;*`Li(k_W4
$i2#3MSTtt^M6iPj:/pEh`We0_/n-96e4DnVnnc_^*Ds[PSCi)kWWMuU&d??'+,"2
+,Rlt)DU!!O>;>_1BC@<*(UV\kSJh)WXdr:"#'ls\\/8f`"!D5#pN1c(l/7G'ETsF
K0!:h!"]3^2?O4FK:k&R(_?e:2M28n"(2ZBGWLJM2?QK/""4]_J1uTm21l/jK.%b0
YS;Y(#)H(i"(3m:#VlLP7KX2\K-3:-!'>g(1'=1+*m%[*E4M&Y'E`#,JT)/%i"Q6[
-\93*7<g9p.AMLQ'S13;K'4Zc:^%h)[)/I>67QLd1C=lmHl=u"6>S$dM3XMYcC&[c
(VrB[q;*QR17Dl#"%Y>&-oV6q1kU0o!<bZDHrV.H`/%Af`>`k>81fGXQ^VEC0VG,G
0S:esJq7UhN%AOspaCYhJ:I~>
endstream
endobj
42 0 obj
10321
endobj
40 0 obj
<<
/Type /Page
/Parent 29 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F9 36 0 R
/F8 37 0 R
>>
/ProcSet 2 0 R
>>
/Contents 41 0 R
>>
endobj
44 0 obj
<<
/Length 45 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+ZaAQ:n&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^6>
@tT'I,AE+\D%qiKMNaJ0%+nuKm78KTZ-^XONSsla15mG#i&!BF-pTNt6V-SDWJn&h
)EiYe:aua&#\"[+!Q)"@JOq%tPU0*l*f%,+E,()].DQW3$=\7I+pap)Os^P(.QeK@
6-*ZV3Uq?eql%ch(-7C!?pHQ._/!R?5sp1>0o]ZKc8)ni1d[A$kk[,g7tGc0)a7#I
KcN=5RTRF\ad@)d9L68t))CYBk+@>/b*X'$MNDWg#_GU@4befD@MB..PmI'g+[E1E
]?"H5'Sbte/1V"1qR"WrYs[6^L&oA$4#Nb."qV6=#k0[1USulX3s1[er/Dp4f`aUX
D.<!pW45)ON55MY;iY@4fJ5\^>dED6#`rT)80L6/)[6o&8@:jD"N:]na>K\E>'@!S
OsJW"?l'#UaDg<'!Z6,i2@Zd0?&k3:'iq9L!8KN3itN4T":a#=3_F-HmPNR?JBJr^
[m4W79K%2\]7m^TTcb`!5h%a7ME&i=<=Ta_1^kUJ5T7[8P9/kfG)58s,P=-NJk9&[
#jT&iC_^>=c1o=1%WHS-/Hr[]D3eWhK(!V*ap!]5fd"#E#I_+YO+!te..NpgUF&a5
3GF"U'P6pdG)7OA<*rQi<^?$-?K2=^&7=)rl[eAq!9uOG:^r0`%WEZ22[oA3mjJ@/
T^"R.<b`M["WRDngg6>TIphh7KS].,H_[LLlIXS]&8PJ3]ta*2#*Xmp=K#M%_eB$)
lanB4bV\c<1PI>s2-jBDjoS=5;iVE,n1k0Md,ZpA\48Y8N`u-JAaK>E=f+X^nB7#?
UF9=I]K5KpO84.GG@O47/Q94JZA*i+q?,&Be]9mm?lJ&;I9E*LK29?')jk%Ba7qY8
AW3o91PIe2J2N'Xb242%o0;O1?SHVWP967=D,4T]]L2\"g'Y8S7`aA?5[=69J2L#\
5t*)qdYXZD5#%gY)FGdkCD4KP:hML[PRs";Ohubu!6H'&,\RmD-q&k_ZkNY9SrLU[
;f'Tr'::RLTi:LP25(.43Mts"RX>Bh.4j^=Ac*JLH#/EL$8K)g8qMZQ-tEcr%)$2'
:]kJW?4<&0'k3U@aat9;Wk:$?+Pqb!=EFq$V;SEj&A4O/'4.^61n.Un)I#"X@S9-"
/gHCadci2b74K7Yj.NmtU=MtqR<1'XfU`-`M0[C#X>`TIadKI=":pWVX6#*Y!K,Eg
j[^;u7GdF$1C[-=64Guk:qqXUGCdu,:4`[Bf7BVkPtPO=!2W(P$WNulntJo+[ECL1
4P;jgM#+hFk31jL^1<1jPXk?qfc`@X.nGOoOed64_3+%/bVg2-Z_3E+_jid1Uc'Kk
hVut0;+bP&/%nBn5@1?R8-t\@-J2`sPBq3O"@Y:;FRDs=cn/%Mq*uk?!i4f96rO[l
',j;'\kO_Z7H"hb`maA%g!^%l`qEV#7f`Y:qrr)Q8DU>B'#<P0#"@s6]";qNhI*R$
R`I&E3M=Mlg#<0#D$:0N!.t:&9?_r<.]Blb`0M;V92tR@3)oI/GU#(9C'7cs1BuMi
K-b#@<OQOAM/>,El*>4NM7JBq`^Sb<Y^"G%1UrP)^]U6MA>.4'/=&O@_orF#CGF@5
eY<(LTPeEq&eh+>*85"D9iXfj="=P@-"..iJCX&/X/RB+Uo]!0.uY]Ia[Bl:8T:1b
U2il*cR>\^0V*8G=O]%G__+7@4R^[T0k>a?(s8h%f$rS[UVq'j]!.oHnKl74rm5RN
!/rER0ch7@-#=bkHNaIY[K<2V-'H)90qrACF9;9d<!uaijup"ZC:.^&>I_Ub(m>.F
b:[)F\<f?3dHT9j!Z>c^#/QK*C]$jQ.qQRGnj%h.O_K`a5RN))bFSj$)((UX=A#iJ
Ro5RpgCn+d`>rUM"@4FOar;OKI?r#u_fMcpl,fm:+kkD*NsrNRabbc)/J*NT?gG2%
%8OT+-OAeN(haApUc=-7H:<k8DnX0`Y2>G9;.CTn5W?si[3hgX,Dj-++LaQ>=ViWW
0R#DmVQIro`#Vjk:pnl?3unb<LmUc<%/">J[3q_[RK^JbXF>oDRhl'<=DqPtUH9[k
mVYC5cn0O*Qj$\piBmsN2Be4`!nI^2T*ns6_6>tULIhdbA)U`b%p":8T\a8=(QT`m
,i4`.*0-:p5t#"OS)gf:fedt&gGCV:PB;%F*NI8t.-7aWcC!'1021lI%i.-2LC0,'
:-dJIW\e!R'I>;".*W[KY\7g:U6[2N9I_K[<2!c38-m$c-`Hqf'aSh"/]O0G/p(;-
!C0Nk]+-[P]Zf>*^24<@EJ8FEP*Ch\E!70@3L!IIC:?s_B9(drEp*jpK9MhADi\@D
Bs-8)A,XX>nU\ciq^o9(k&2q+0F(Fm;6M_^Z%lN'br[2kC/OqVB531@1PN/Al1nZ$
[a82'(F=@@\#?Rr[l4O#Pg.,#K[JC(SHEb^m+)J)3NG&Mj(d/@WubdS?]m*e#eT3Y
=punF>Ct+ghpn%C?q4,d`b+B.&+a+diR:1!CGfH=9\7t0;S&pU>(P#>gZ3SkQip*(
JoTbWg4@B><V`J%9?l&<V#jEOI"[aX^Ij&J"e@2#VdH^+k=Ju9!aF8,[j97`W^*<'
3(+MGZ]okb]g!^c\hPm_oVIu.C/<!_dCiS@<FMMm)M8lFQRLQS,6!0Kg_\aZ#NG"/
(lRR5Td1?9i6(_JG!F<-K<DTG.)tM-9EY?gs(L'/lcS#cGR$i1SthT$7`O!fLBFEt
aU,Q%65TqXVH`DY_ec(H"kqdARcA?dTP.4MmGd1V3_`?8UVo,k66b7)7&7`a"UK3J
K%s2\JqrE)7kPj=BSt`(OGQf*M27[Z#c-JFC8>Ae<+=c=0SZJuQj"%EUZ,mT,Us";
KI/0j-ieps,l#G'O9cu!M,:QR@N7BQ%OBE;%?<[WYf][R?9'])+jg)lK^]9JMFM9F
;!nODn=#aqOFH,"+@O*,U>V'i:l!u#$,mZR71`<k*`7Pp$D<anAMXhV7P19J1?/5-
@Zj]0`=NLC#D*B@kO;age:sef<07e!TS!OS,iPu+:Q\3\mL'B)%LR_a_PJLajCG-L
n>'SS,%<&=O_!MZ(B.bY#9[FRk0X,N:^FkbfZKT,9'T"UK^38g3+@ooN:IJ:hJjq>
9#GnhBB7KV\94Z":ohB#i80BbhIn/3E@821b:_U95`:H2jfeI'j+:CYSoRP[4=eqF
-SErMpAr6@?itY(#%.^HG\5rqB-lsoV>>jV=CD]:5V)\uDiQ7.p2@.@+(.q?X,+W,
7UbY\\WC"nX>h?,@*443$KMD%bj`j>M]a=0+s>MJDc4VM<orD02QI6nbHPEsR*qf"
c\D$9c?h!ubhXj)`/+9Sn2r0Hd3^;YRP)65ClBl91p+oV#%F,#`Nh5@$R`.1SBtUJ
L[)M!rko"KNZb"C#6K88"Eu>WX`+,Z@P4X[JlrJaBT08NEV>$AGXa458r%Y&n[BT;
_JMg018Eo?+H0h2i@tSMoFi(NP+9l0\?5mlA>Xh?dGW72GRDB!,=c95jJ=ZT.WI$7
=\B<I7rZ8h>3;ujZR<V-L?<ua]'R5nfrhcEL:'%\i&<pPa'd[+j_d>dm]ql8=4;bq
Mai#r[Z/F[mnM@`J.s+K~>
endstream
endobj
45 0 obj
3916
endobj
43 0 obj
<<
/Type /Page
/Parent 29 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
/F5 9 0 R
>>
/ProcSet 2 0 R
>>
/Contents 44 0 R
>>
endobj
47 0 obj
<<
/Length 48 0 R
/Filter [ /ASCII85Decode /LZWDecode  ]
>>
stream
J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+ZbYh^r&qNGQ
lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^/I
-C.6a_i_=GAi>N7jMa^8!/>;DSG&`k(KflVU>pJ`1^p,ba>aV<i5uT>K94MC5RM!P
(^?%7E"iY2+G-VJ!Q)"@JOq%tPU/s@>)0JgG\Vqe.DQW3#_FI`,`0B/W$I5ZE2N3$
b%P2Y#%>),];Pd=Os:77Yc9)Y!dLLj"9K"",7%`a;B)q#]J1Br;#7P^,gdl`M'_Id
T,3BH+Qiog%[3hP2PUU3&.QO'N\V$<R*mdM_^NS;%*fDLU;:>1gr,0s1_r*3UO_:]
.,taVfaK*Ea#o';@*1Pi<5:dc%V*Y?gbtq?#s"!?#hUpC['R^-;r]Ps3__smG_60u
OC^4/'5OK&c2e$`6_a%mGVG(D@.Fj;:ftk&3t;Dl=hmSA(cEf70L4taFu\+c:r?,p
3=d9P5hEFrRqa[VXpEb^2QA>;1XkBJX>5cpOPP4`PK_]==:MA63EG)BEe[YG:g5#r
!K_-nVnke.E)?17`\[f4OPneS'mSNfN0"V6!B`60#W1DUGjf)N,FI)A\%'N)Mns9?
!'9!q>n&n*UNI5]h$oQ^5YtF^Q8/k+8C'Dme';q&?ZZCG2S.0.d=U<LgkME>j%.p3
>Eg,ZHFhX'aqmR1&l+L_;>c$R##)O=)+ZgD@.9+-Zj8Fcl8-;Om3s[=Pg!ptc\/4u
Gf2I$0,,Pp=t\R@n%::jgnk9jJts:%%>I0]DaQ/Q@5ih3_a?>q0]f.0oFT;,eQda5
aZJ/D/V-_uo\WA0"(9tF?/ongZmuL6E/=e/Ih:i$)YFP"=`1udmWQ7DaJSAYD`KZ9
Y\-3]mqOq.iH4kn[YqRgaPH',h(X&QdVZeCnm%f)o2OCdD72LY3G\tncb]WhJCQ3&
LPUa-3GEb5CnLq9!-MV1g3ScVO#_`0;o*P0F3iOd\i7XnSNn<LDlmriV1@p*PEU10
n2\:+^(HJHCiH6p1P1.Eo9t:'%a(_2Vj@IP@?_'RX_JclF)qgW"?R'So\,%A*rO[5
F'Cq`0q5E.dM/tp%cO6f11V.36PC]$BDf8o&Fe;(X&KF$<N(U/7"<p`>Qk-R,(q^H
%)JTA"Y5rhLIJ;76P+0UkUChcKlk0t5]&JO/2sUUqP#/po8,0kVE]cf(g*6^<@RV"
4m&!R:_\sd$?8_AACA5eMMmP;jP#A;fGVr5]NIqE5J-OfopiS4E3Tu<8D(TD'^HVb
lh.Ni<?`BJ>'<m5OP[ssDT62pO&ghFZ,G]GU"7_S#[sDe77[R):Cq"oWN>#Oq0aLG
MmS(r>!k!"(^_>LF^$GFfdGn*&QXS7>]PEe9]i)_U16Stb<5foeY]ed(h>P1=>5J;
;@H0Z1'J"5lH2,=q?'@2>p7QWV/n6u?nu%V0YtT6edOs?U!O&p9\i?r.)=A,'phLD
P/B3gh1E596#:7q;WS?].J->kiOMY$`PA!2,+N1^eOlb56IR<I!c!;&3BGh5JK[GH
KjhO!9;8p^91`nNV7a<i"%$UX:c/G*r59J:#Y_1RC,&!['c>ZGA3l#3V%oe[:?$>$
CY=D'Zb!^!;]K<u0mTl$K!eXs!bAB<E3P"5_cM0tABX0nXrr>*26/"RX=\TMop3["
qZbWQl$]r3b0!m<&SXp+&$a]+Zd.lIB5ML@[$E2NU"]H^D"YNL(?WeE$M\&rH%Tm#
-KH#5M.k+m]J0E;$^lp(>&L<qZo745fo$\gD>hVZ2hL#?93lH'n21D8b3N@a)1(\h
k.?pc`Rrq^9J0UdZ?M[dJ,~>
endstream
endobj
48 0 obj
2070
endobj
46 0 obj
<<
/Type /Page
/Parent 29 0 R
/Resources <<
/Font <<
/F2 7 0 R
/F4 8 0 R
>>
/ProcSet 2 0 R
>>
/Contents 47 0 R
>>
endobj
7 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F2
/BaseFont /Helvetica
/FirstChar 32
/LastChar 255
/Encoding 6 0 R
>>
endobj
8 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F4
/BaseFont /Helvetica-Bold
/FirstChar 32
/LastChar 255
/Encoding 6 0 R
>>
endobj
9 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F5
/BaseFont /Symbol
/FirstChar 32
/LastChar 254
>>
endobj
19 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F7
/BaseFont /Helvetica
/FirstChar 32
/LastChar 255
/Encoding 6 0 R
>>
endobj
36 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F9
/BaseFont /Helvetica
/FirstChar 32
/LastChar 255
/Encoding /MacRomanEncoding
>>
endobj
37 0 obj
<<
/Type /Font
/Subtype /Type1
/Name /F8
/BaseFont /Helvetica
/FirstChar 32
/LastChar 255
/Encoding /MacRomanEncoding
>>
endobj
2 0 obj
[ /PDF /Text  ]
endobj
5 0 obj
<<
/Kids [4 0 R 12 0 R 15 0 R 18 0 R 22 0 R 25 0 R ]
/Count 6
/Type /Pages
/Parent 49 0 R
>>
endobj
29 0 obj
<<
/Kids [28 0 R 32 0 R 35 0 R 40 0 R 43 0 R 46 0 R ]
/Count 6
/Type /Pages
/Parent 49 0 R
>>
endobj
49 0 obj
<<
/Kids [5 0 R 29 0 R ]
/Count 12
/Type /Pages
/MediaBox [ 0 0 595 841 ]
>>
endobj
1 0 obj
<<
/CreationDate (Friday, October 14, 1994   2:10 PM PDT)
/Producer (Acrobat Distiller Command 1.0 for Solaris 1.1/2.3 (SPARC))
>>
endobj
3 0 obj
<<
/Pages 49 0 R
/Type /Catalog
>>
endobj
xref
0 50
0000000000 65535 f
0000197931 00000 n
0000197589 00000 n
0000198077 00000 n
0000004811 00000 n
0000197620 00000 n
0000004952 00000 n
0000196832 00000 n
0000196956 00000 n
0000197085 00000 n
0000000010 00000 n
0000004790 00000 n
0000029375 00000 n
0000006144 00000 n
0000029353 00000 n
0000056437 00000 n
0000029506 00000 n
0000056415 00000 n
0000059767 00000 n
0000197190 00000 n
0000056557 00000 n
0000059746 00000 n
0000065578 00000 n
0000059921 00000 n
0000065557 00000 n
0000122958 00000 n
0000065720 00000 n
0000122936 00000 n
0000146321 00000 n
0000197728 00000 n
0000123089 00000 n
0000146299 00000 n
0000170433 00000 n
0000146442 00000 n
0000170411 00000 n
0000179603 00000 n
0000197315 00000 n
0000197452 00000 n
0000170554 00000 n
0000179582 00000 n
0000190196 00000 n
0000179759 00000 n
0000190174 00000 n
0000194372 00000 n
0000190341 00000 n
0000194351 00000 n
0000196700 00000 n
0000194515 00000 n
0000196679 00000 n
0000197838 00000 n
trailer
<<
/Size 50
/Root 3 0 R
/Info 1 0 R
>>
startxref
198127
%%EOF
doc/datasheet/TEA5767 中文收音模块资料.pdf
Binary files differ
doc/datasheet/TEA5767中-英文手册1.pdf
Binary files differ
doc/datasheet/TEA5767中-英文手册2.pdf
Binary files differ
doc/datasheet/TJA1050.pdf
Binary files differ
doc/datasheet/VS1003cn.pdf
Binary files differ
doc/datasheet/stm32f103cn.pdf
Binary files differ
doc/datasheet/stm32f103ve.pdf
Binary files differ
doc/datasheet/tea5767模块.pdf
Binary files differ
doc/datasheet/tsc2046.pdf
Binary files differ
doc/datasheet/vs1003.pdf
Binary files differ
doc/datasheet/奋斗版配3寸显示模块文档/3.0寸240X400 SPC-S95361_瑞萨IC.pdf
Binary files differ
doc/datasheet/奋斗版配3寸显示模块文档/R61509V手册.pdf
Binary files differ
doc/datasheet/奋斗版配3寸显示模块文档/RSPTW08-11-01 Evaluation Report for CPT 3.0inch LCM with R61509V.pdf
Binary files differ
doc/datasheet/奋斗版配3寸显示模块文档/RSPTW09-01-03 R61509V Application note.pdf
Binary files differ
doc/datasheet/奋斗版配3寸显示模块文档/奋斗3寸屏模块装配图.pdf
New file
Diff too large
doc/manual/奋斗STM32开发板V5入门手册.pdf
Binary files differ
doc/manual/奋斗STM32开发板V5入门手册_MINI.pdf
Binary files differ
doc/manual/奋斗版STM32开发板JTAG下载步骤.pdf
Binary files differ
doc/manual/奋斗版STM32开发板JTAG下载步骤_TINY.pdf
Binary files differ
doc/manual/奋斗版STM32开发板串口ISP步骤.pdf
Binary files differ
doc/manual/用DFUSE软件通过USB接口在线编程.pdf
Binary files differ
doc/manual/用DFUSE软件通过USB接口在线编程_TINY.pdf
Binary files differ
doc/sch/CF7670C-V3 pcb尺寸_PIN定义.pdf
Binary files differ
doc/sch/CF7670C-V3 简要说明.pdf
Binary files differ
doc/sch/奋斗3寸屏(240X400)模块原理图pdf.pdf
New file
Diff too large
doc/sch/奋斗STM32开发板V5原理图.pdf
Binary files differ
doc/stm32v5_hardware.txt
New file
@@ -0,0 +1,40 @@
1,   CPU: STM32103VET(MAX to 72MHz)
   Flash: 512KB
    SRAM: 64KB
2, RS232:
  USART1_TX  -- PA9
  USART1_RX  -- PA10
3, RS485
  USART2_TX  -- PA3
  USART2_RX  -- PA2
4, ENC28J60CSS(SPI ethernet):
  Eth0_INT   -- PA1
  SPI1_MISO  -- PA6
  SPI1_MOSI  -- PA7
  SPI1_SCK   -- PA5
  SPI1_NSS   -- PA4
  LCD_RST    -- PE1
5, CAN
  CAN_TX     -- PB9
  CAN_RX     -- PB8
6, LED
  LED1       -- PB5
  LED2       -- PD6
  LED3       -- PD3
7, Button
  KEY1       -- PC5
  KEY2       -- PC2
  KEY3       -- PC3
8, SST25VF016B
  SPI1_MISO  -- PA6
  SPI1_MOSI  -- PA7
  SPI1_CLK   -- PA5
  SPI1_CS2   -- PC4
src/IAR_project/stm32_ov7670/board/lcd_draw.c
New file
@@ -0,0 +1,406 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
/**
 * \file
 *
 * Implementation of draw function on LCD, Include draw text, image
 * and basic shapes (line, rectangle, circle).
 *
 */
/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/
#include <stdint.h>
#include <string.h>
#include <assert.h>
#include "lcd_font.h"
#include "lcd_r61509v.h"
#include "lcd_draw.h"
/*----------------------------------------------------------------------------
 *        Exported functions
 *----------------------------------------------------------------------------*/
/**
 * \brief Fills the given LCD buffer with a particular color.
 *
 * \param color  Fill color.
 */
void LCDD_Fill( uint32_t dwColor )
{
    uint32_t i ;
    LCD_SetCursor( 150, 150 ) ;
    LCD_WriteRAM_Prepare() ;
    for ( i=BOARD_LCD_WIDTH*BOARD_LCD_HEIGHT; i>0; i-- )
    {
        LCD_WriteRAM( dwColor ) ;
    }
}
/**
 * \brief Draw a pixel on LCD of given color.
 *
 * \param x  X-coordinate of pixel.
 * \param y  Y-coordinate of pixel.
 * \param color  Pixel color.
 */
extern void LCDD_DrawPixel( uint32_t x, uint32_t y, uint32_t color )
{
    LCD_SetCursor( x, y ) ;
    LCD_WriteRAM_Prepare() ;
    LCD_WriteRAM( color ) ;
}
/**
 * \brief Read a pixel from LCD.
 *
 * \param x  X-coordinate of pixel.
 * \param y  Y-coordinate of pixel.
 *
 * \return color  Readed pixel color.
 */
extern uint32_t LCDD_ReadPixel( uint32_t x, uint32_t y )
{
    uint32_t color;
    LCD_SetCursor(x, y);
    LCD_ReadRAM_Prepare();
    color = LCD_ReadRAM();
    return color;
}
/*
 * \brief Draw a line on LCD, horizontal and vertical line are supported.
 *
 * \param x         X-coordinate of line start.
 * \param y         Y-coordinate of line start.
 * \param length    line length.
 * \param direction line direction: 0 - horizontal, 1 - vertical.
 * \param color     Pixel color.
 */
extern void LCDD_DrawLine( uint32_t x, uint32_t y, uint32_t length, uint32_t direction, uint32_t color )
{
    uint32_t i = 0 ;
    LCD_SetCursor( x, y ) ;
    if ( direction == DIRECTION_HLINE )
    {
        LCD_WriteRAM_Prepare() ;
        for ( i = 0; i < length; i++ )
        {
            LCD_WriteRAM( color ) ;
        }
    }
    else
    {
        for ( i = 0; i < length; i++ )
        {
            LCD_WriteRAM_Prepare() ;
            LCD_WriteRAM( color ) ;
            y++ ;
            LCD_SetCursor( x, y ) ;
        }
    }
}
/*
 * \brief Draws a rectangle on LCD, at the given coordinates.
 *
 * \param x      X-coordinate of upper-left rectangle corner.
 * \param y      Y-coordinate of upper-left rectangle corner.
 * \param width  Rectangle width in pixels.
 * \param height  Rectangle height in pixels.
 * \param color  Rectangle color.
 */
extern void LCDD_DrawRectangle( uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t color )
{
    LCDD_DrawLine(x, y, width, DIRECTION_HLINE, color);
    LCDD_DrawLine(x, (y + height), width, DIRECTION_HLINE, color);
    LCDD_DrawLine(x, y, height, DIRECTION_VLINE, color);
    LCDD_DrawLine((x + width), y, height, DIRECTION_VLINE, color);
}
/*
 * \brief Draws a rectangle with fill inside on LCD, at the given coordinates.
 *
 * \param x      X-coordinate of upper-left rectangle corner.
 * \param y      Y-coordinate of upper-left rectangle corner.
 * \param width  Rectangle width in pixels.
 * \param height  Rectangle height in pixels.
 * \param color  Rectangle color.
 */
extern void LCDD_DrawRectangleWithFill( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor )
{
    uint32_t i ;
    LCD_SetWindow( dwX, dwY, dwWidth, dwHeight ) ;
    LCD_SetCursor( dwX, dwY ) ;
    LCD_WriteRAM_Prepare() ;
    for ( i = dwWidth * dwHeight; i > 0; i-- )
    {
        LCD_WriteRAM( dwColor ) ;
    }
    LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
    LCD_SetCursor( 0, 0 ) ;
}
/**
 * \brief Draws a circle on LCD, at the given coordinates.
 *
 * \param x      X-coordinate of circle center.
 * \param y      Y-coordinate of circle center.
 * \param r      circle radius.
 * \param color  circle color.
 */
extern void LCDD_DrawCircle( uint32_t x, uint32_t y, uint32_t r, uint32_t color )
{
    signed int    d;    /* Decision Variable */
    uint32_t  curX; /* Current X Value */
    uint32_t  curY; /* Current Y Value */
    d = 3 - (r << 1);
    curX = 0;
    curY = r;
    while (curX <= curY)
    {
        LCDD_DrawPixel(x + curX, y + curY, color);
        LCDD_DrawPixel(x + curX, y - curY, color);
        LCDD_DrawPixel(x - curX, y + curY, color);
        LCDD_DrawPixel(x - curX, y - curY, color);
        LCDD_DrawPixel(x + curY, y + curX, color);
        LCDD_DrawPixel(x + curY, y - curX, color);
        LCDD_DrawPixel(x - curY, y + curX, color);
        LCDD_DrawPixel(x - curY, y - curX, color);
        if (d < 0) {
            d += (curX << 2) + 6;
        }
        else {
            d += ((curX - curY) << 2) + 10;
            curY--;
        }
        curX++;
    }
}
/**
 * \brief Draws a string inside a LCD buffer, at the given coordinates. Line breaks
 * will be honored.
 *
 * \param x        X-coordinate of string top-left corner.
 * \param y        Y-coordinate of string top-left corner.
 * \param pString  String to display.
 * \param color    String color.
 */
extern void LCDD_DrawString( uint32_t x, uint32_t y, const uint8_t *pString, uint32_t color )
{
    uint32_t xorg = x ;
    while ( *pString != 0 && *pString > 0x1F && *pString < 0x7F)
    {
        LCDD_DrawChar( x, y, *pString, color ) ;
        if ( *pString == '\n' || x > 220)
        {
            y += gFont.height + 2 ;
            x = xorg ;
        }
        else
        {
            x += gFont.width + 2 ;
        }
        pString++ ;
    }
}
/**
 * \brief Draws a string inside a LCD buffer, at the given coordinates
 * with given background color. Line breaks will be honored.
 *
 * \param x         X-coordinate of string top-left corner.
 * \param y         Y-coordinate of string top-left corner.
 * \param pString   String to display.
 * \param fontColor String color.
 * \param bgColor   Background color.
 */
extern void LCDD_DrawStringWithBGColor( uint32_t x, uint32_t y, const char *pString, uint32_t fontColor, uint32_t bgColor )
{
    unsigned xorg = x;
    while ( *pString != 0 )
    {
        if ( *pString == '\n' )
        {
            y += gFont.height + 2 ;
            x = xorg ;
        }
        else
        {
           LCDD_DrawCharWithBGColor( x, y, *pString, fontColor, bgColor ) ;
           x += gFont.width + 2;
        }
        pString++;
    }
}
/**
 * \brief Returns the width & height in pixels that a string will occupy on the screen
 * if drawn using LCDD_DrawString.
 *
 * \param pString  String.
 * \param pWidth   Pointer for storing the string width (optional).
 * \param pHeight  Pointer for storing the string height (optional).
 *
 * \return String width in pixels.
 */
extern void LCDD_GetStringSize( const uint8_t *pString, uint32_t *pWidth, uint32_t *pHeight )
{
    uint32_t width = 0;
    uint32_t height = gFont.height;
    while ( *pString != 0 )
    {
        if ( *pString == '\n' )
        {
            height += gFont.height + 2 ;
        }
        else
        {
            width += gFont.width + 2 ;
        }
        pString++ ;
    }
    if ( width > 0 )
    {
        width -= 2;
    }
    if ( pWidth != NULL )
    {
        *pWidth = width;
    }
    if ( pHeight != NULL )
    {
        *pHeight = height ;
    }
}
/*
 * \brief Draw a raw image at given position on LCD.
 *
 * \param x         X-coordinate of image start.
 * \param y         Y-coordinate of image start.
 * \param pImage    Image buffer.
 * \param width     Image width.
 * \param height    Image height.
 */
void LCDD_DrawImage( uint32_t dwX, uint32_t dwY, const uint8_t *pImage, uint32_t dwWidth, uint32_t dwHeight )
{
    uint32_t dwCursor ;
    LCD_SetWindow( dwX, dwY, dwWidth, dwHeight ) ;
    LCD_SetCursor( dwX, dwY ) ;
    LCD_WriteRAM_Prepare() ;
    for ( dwCursor=dwWidth*dwHeight; dwCursor != 0; dwCursor-- )
    {
        LCD_D() = *pImage++ ;
        LCD_D() = *pImage++ ;
        LCD_D() = *pImage++ ;
    }
    LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
}
/*
 * \brief Draw a raw image at given position on LCD.
 *
 * \param dwX         X-coordinate of image start.
 * \param dwY         Y-coordinate of image start.
 * \param pGIMPImage  Image data.
 */
void LCDD_DrawGIMPImage( uint32_t dwX, uint32_t dwY, const SGIMPImage* pGIMPImage )
{
    uint32_t dw ;
    register uint32_t dwLength ;
    uint8_t* pucData ;
    // Draw raw RGB bitmap
    LCD_SetWindow( dwX, dwY, pGIMPImage->dwWidth, pGIMPImage->dwHeight ) ;
    LCD_SetCursor( dwX, dwY ) ;
    LCD_WriteRAM_Prepare() ;
    dwLength = pGIMPImage->dwWidth*pGIMPImage->dwHeight ;
    pucData = pGIMPImage->pucPixel_data ;
    for ( dw=0; dw < dwLength; dw++ )
    {
        LCD_D() = (*pucData++) ;
        LCD_D() = (*pucData++) ;
        LCD_D() = (*pucData++) ;
    }
    LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
}
/*
 * \brief Clear a window with an color.
 *
 * \param dwX         X-coordinate of the window.
 * \param dwY         Y-coordinate of the window.
 * \param dwWidth     window width.
 * \param dwHeight    window height.
 * \param dwColor     background color
 */
extern void LCDD_ClearWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor )
{
    uint32_t dw ;
    LCD_SetCursor( dwX, dwY) ;
    LCD_WriteRAM_Prepare() ;
    for ( dw = dwWidth * dwHeight; dw > 0; dw-- )
    {
        LCD_WriteRAM( dwColor ) ;
    }
}
src/IAR_project/stm32_ov7670/board/lcd_draw.h
New file
@@ -0,0 +1,93 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
 /**
 * \file
 *
 * Interface for draw function on LCD.
 *
 */
#ifndef DRAW_H
#define DRAW_H
/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/
#include <stdint.h>
#include "lcd_gimp_image.h"
/*----------------------------------------------------------------------------
 *        Definitions
 *----------------------------------------------------------------------------*/
/** Horizontal direction line definition */
#define DIRECTION_HLINE   0
/** Vertical direction line definition */
#define DIRECTION_VLINE   1
#ifdef __cplusplus
 extern "C" {
#endif
/*----------------------------------------------------------------------------
 *        Exported functions
 *----------------------------------------------------------------------------*/
extern void LCDD_Fill( uint32_t color ) ;
extern void LCDD_DrawPixel( uint32_t x, uint32_t y, uint32_t c ) ;
extern uint32_t LCDD_ReadPixel( uint32_t x, uint32_t y ) ;
extern void LCDD_DrawLine( uint32_t x, uint32_t y, uint32_t length, uint32_t direction, uint32_t color ) ;
extern void LCDD_DrawRectangle( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;
extern void LCDD_DrawRectangleWithFill( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;
extern void LCDD_DrawCircle( uint32_t x, uint32_t y, uint32_t r, uint32_t color ) ;
extern void LCDD_DrawString( uint32_t x, uint32_t y, const uint8_t *pString, uint32_t color ) ;
extern void LCDD_DrawStringWithBGColor( uint32_t x, uint32_t y, const char *pString, uint32_t fontColor, uint32_t bgColor ) ;
extern void LCDD_GetStringSize( const uint8_t *pString, uint32_t *pWidth, uint32_t *pHeight ) ;
extern void LCDD_DrawImage( uint32_t x, uint32_t y, const uint8_t *pImage, uint32_t width, uint32_t height ) ;
extern void LCDD_DrawGIMPImage( uint32_t dwX, uint32_t dwY, const SGIMPImage* pGIMPImage );
extern void LCDD_ClearWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;
#ifdef __cplusplus
}
#endif
#endif /* #ifndef DRAW_H */
src/IAR_project/stm32_ov7670/board/lcd_font.c
New file
@@ -0,0 +1,135 @@
/* ----------------------------------------------------------------------------
 *     SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
 #include "lcd_font.h"
 #include "lcd_font10x14.h"
/**
 * \file
 *
 * Implementation of draw font on LCD.
 *
 */
/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/
#include <stdint.h>
#include "lcd_draw.h"
/*----------------------------------------------------------------------------
 *        Local variables
 *----------------------------------------------------------------------------*/
/** Global variable describing the font being instancied. */
const Font gFont = {10, 14};
/*----------------------------------------------------------------------------
 *        Exported functions
 *----------------------------------------------------------------------------*/
/**
 * \brief Draws an ASCII character on LCD.
 *
 * \param x  X-coordinate of character upper-left corner.
 * \param y  Y-coordinate of character upper-left corner.
 * \param c  Character to output.
 * \param color  Character color.
 */
extern void LCDD_DrawChar( uint32_t x, uint32_t y, uint8_t c, uint32_t color )
{
    uint32_t row, col ;
    if( (c<0x20) || (c>0x7F) )
            return ;
    for ( col = 0 ; col < 10 ; col++ )
    {
        for ( row = 0 ; row < 8 ; row++ )
        {
            if ( (pCharset10x14[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1 )
            {
                LCDD_DrawPixel( x+col, y+row, color ) ;
            }
        }
        for (row = 0; row < 6; row++ )
        {
            if ((pCharset10x14[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1)
            {
                LCDD_DrawPixel( x+col, y+row+8, color ) ;
            }
        }
    }
}
/**
 * \brief Draws an ASCII character on LCD with given background color.
 *
 * \param x          X-coordinate of character upper-left corner.
 * \param y          Y-coordinate of character upper-left corner.
 * \param c          Character to output.
 * \param fontColor  Character color.
 * \param bgColor    Background color.
 */
extern void LCDD_DrawCharWithBGColor( uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor, uint32_t bgColor )
{
    uint32_t row, col ;
    if( (c<0x20) || (c>0x7F) )
            return ;
    for (col = 0; col < 10; col++)
    {
        for (row = 0 ; row < 8 ; row++)
        {
            if ( (pCharset10x14[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1 )
            {
                LCDD_DrawPixel( x+col, y+row, fontColor ) ;
            }
            else
            {
                LCDD_DrawPixel( x+col, y+row, bgColor ) ;
            }
        }
        for ( row = 0 ; row < 6 ; row++ )
        {
            if ( (pCharset10x14[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1 )
            {
                LCDD_DrawPixel( x+col, y+row+8, fontColor ) ;
            }
            else
            {
                LCDD_DrawPixel( x+col, y+row+8, bgColor ) ;
            }
        }
    }
}
src/IAR_project/stm32_ov7670/board/lcd_font.h
New file
@@ -0,0 +1,102 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
/**
 * \file
 *
 * Interface for draw font on LCD.
 *
 */
/**
 *
 * \section Purpose
 *
 * The font.h files declares a font structure and a LCDD_DrawChar function
 * that must be implemented by a font definition file to be used with the
 * LCDD_DrawString method of draw.h.
 *
 * The font10x14.c implements the necessary variable and function for a 10x14
 * font.
 *
 * \section Usage
 *
 * -# Declare a gFont global variable with the necessary Font information.
 * -# Implement an LCDD_DrawChar function which displays the specified
 *    character on the LCD.
 * -# Use the LCDD_DrawString method defined in draw.h to display a complete
 *    string.
 */
#ifndef _LCD_FONT_
#define _LCD_FONT_
/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/
#include <stdint.h>
/*----------------------------------------------------------------------------
 *        Types
 *----------------------------------------------------------------------------*/
/** \brief Describes the font (width, height, supported characters, etc.) used by
 * the LCD driver draw API.
 */
typedef struct _Font {
    /* Font width in pixels. */
    uint8_t width;
    /* Font height in pixels. */
    uint8_t height;
} Font;
/*----------------------------------------------------------------------------
 *        Variables
 *----------------------------------------------------------------------------*/
/** Global variable describing the font being instancied. */
extern const Font gFont;
#ifdef __cplusplus
 extern "C" {
#endif
/*----------------------------------------------------------------------------
 *        Exported functions
 *----------------------------------------------------------------------------*/
extern void LCDD_DrawChar( uint32_t x, uint32_t y, uint8_t c, uint32_t color ) ;
extern void LCDD_DrawCharWithBGColor( uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor, uint32_t bgColor ) ;
#ifdef __cplusplus
}
#endif
#endif /* #ifndef LCD_FONT_ */
src/IAR_project/stm32_ov7670/board/lcd_font10x14.c
New file
@@ -0,0 +1,333 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
 #include <stdint.h>
 const unsigned char pCharset8x8[97][8] = {
  {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
  {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
  {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
  {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
  {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
  {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
  {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
  {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
  {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
  {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
  {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
  {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
  {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
  {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
  {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
  {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
  {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
  {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
  {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
  {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
  {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
  {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
  {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
  {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
  {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
  {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
  {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
  {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
  {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
  {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
  {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
  {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
  {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
  {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
  {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
  {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
  {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
  {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
  {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
  {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
  {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
  {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
  {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
  {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
  {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
  {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
  {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
  {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
  {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
  {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
  {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
  {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
  {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
  {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
  {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
  {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
  {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
  {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
  {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
  {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
  {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
  {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
  {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
  {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
  {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
  {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
  {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
  {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
  {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
  {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
  {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
  {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
  {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
  {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
  {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
  {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
  {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
  {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
  {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
  {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p 0x70
  {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
  {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
  {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
  {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
  {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
  {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
  {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
  {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
  {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
  {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
  {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
  {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
  {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
  {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
  {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}// DEL
};
 /**
 * \file
 *
 * Font 10x14 table definition.
 *
 */
/** Char set of font 10x14 */
const uint8_t pCharset10x14[] = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xCC,
    0xFF, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x0C, 0xC0, 0x0C, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x0C, 0xC0,
    0x0C, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x0C, 0xC0, 0x0C, 0xC0,
    0x0C, 0x60, 0x1E, 0x70, 0x3F, 0x30, 0x33, 0x30, 0xFF, 0xFC,
    0xFF, 0xFC, 0x33, 0x30, 0x33, 0xF0, 0x39, 0xE0, 0x18, 0xC0,
    0x60, 0x00, 0xF0, 0x0C, 0xF0, 0x3C, 0x60, 0xF0, 0x03, 0xC0,
    0x0F, 0x00, 0x3C, 0x18, 0xF0, 0x3C, 0xC0, 0x3C, 0x00, 0x18,
    0x3C, 0xF0, 0x7F, 0xF8, 0xC3, 0x1C, 0xC7, 0x8C, 0xCF, 0xCC,
    0xDC, 0xEC, 0x78, 0x78, 0x30, 0x30, 0x00, 0xFC, 0x00, 0xCC,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xEC, 0x00,
    0xF8, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x3F, 0xF0, 0x78, 0x78,
    0x60, 0x18, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0x60, 0x18,
    0x78, 0x78, 0x3F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00,
    0x0C, 0x60, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x3F, 0xF8,
    0x3F, 0xF8, 0x03, 0x80, 0x07, 0xC0, 0x0E, 0xE0, 0x0C, 0x60,
    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x3F, 0xF0,
    0x3F, 0xF0, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
    0x00, 0x44, 0x00, 0xEC, 0x00, 0xF8, 0x00, 0x70, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
    0x00, 0x18, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0,
    0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x00,
    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0xFC, 0xC1, 0xCC, 0xC3, 0x8C,
    0xC7, 0x0C, 0xCE, 0x0C, 0xFC, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
    0x00, 0x00, 0x00, 0x00, 0x30, 0x0C, 0x70, 0x0C, 0xFF, 0xFC,
    0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
    0x30, 0x0C, 0x70, 0x1C, 0xE0, 0x3C, 0xC0, 0x7C, 0xC0, 0xEC,
    0xC1, 0xCC, 0xC3, 0x8C, 0xE7, 0x0C, 0x7E, 0x0C, 0x3C, 0x0C,
    0x30, 0x30, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x1C, 0x7F, 0xF8, 0x3C, 0xF0,
    0x03, 0xC0, 0x07, 0xC0, 0x0E, 0xC0, 0x1C, 0xC0, 0x38, 0xC0,
    0x70, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0xC0, 0x00, 0xC0,
    0xFC, 0x30, 0xFC, 0x38, 0xCC, 0x1C, 0xCC, 0x0C, 0xCC, 0x0C,
    0xCC, 0x0C, 0xCC, 0x0C, 0xCE, 0x1C, 0xC7, 0xF8, 0xC3, 0xF0,
    0x3F, 0xF0, 0x7F, 0xF8, 0xE3, 0x1C, 0xC3, 0x0C, 0xC3, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x9C, 0x71, 0xF8, 0x30, 0xF0,
    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC3, 0xFC,
    0xC7, 0xFC, 0xCE, 0x00, 0xDC, 0x00, 0xF8, 0x00, 0xF0, 0x00,
    0x3C, 0xF0, 0x7F, 0xF8, 0xE7, 0x9C, 0xC3, 0x0C, 0xC3, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xE7, 0x9C, 0x7F, 0xF8, 0x3C, 0xF0,
    0x3C, 0x00, 0x7E, 0x00, 0xE7, 0x0C, 0xC3, 0x0C, 0xC3, 0x1C,
    0xC3, 0x38, 0xC3, 0x70, 0xE7, 0xE0, 0x7F, 0xC0, 0x3F, 0x80,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x3C, 0xF0,
    0x3C, 0xF0, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x44, 0x3C, 0xEC,
    0x3C, 0xF8, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x1C, 0xE0,
    0x38, 0x70, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C, 0x00, 0x00,
    0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
    0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
    0x00, 0x00, 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x70,
    0x1C, 0xE0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,
    0x30, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC1, 0xEC,
    0xC3, 0xEC, 0xC3, 0x00, 0xE6, 0x00, 0x7E, 0x00, 0x3C, 0x00,
    0x30, 0xF0, 0x71, 0xF8, 0xE3, 0x9C, 0xC3, 0x0C, 0xC3, 0xFC,
    0xC3, 0xFC, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
    0x3F, 0xFC, 0x7F, 0xFC, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
    0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xC0, 0x7F, 0xFC, 0x3F, 0xFC,
    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xE7, 0x9C, 0x7F, 0xF8, 0x3C, 0xF0,
    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x38, 0x30, 0x30,
    0xFF, 0xFC, 0xFF, 0xFC, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00,
    0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC0, 0x00, 0xC0, 0x00,
    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x1C, 0x73, 0xF8, 0x33, 0xF0,
    0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFF, 0xFC, 0xFF, 0xFC,
    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xFF, 0xFC,
    0xFF, 0xFC, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x30, 0x00, 0x38, 0xC0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xC0, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0, 0xC0, 0x00, 0xC0, 0x00,
    0xFF, 0xFC, 0xFF, 0xFC, 0x07, 0x80, 0x07, 0x80, 0x0F, 0xC0,
    0x1C, 0xE0, 0x38, 0x70, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C,
    0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
    0xFF, 0xFC, 0xFF, 0xFC, 0x70, 0x00, 0x38, 0x00, 0x1F, 0x00,
    0x1F, 0x00, 0x38, 0x00, 0x70, 0x00, 0xFF, 0xFC, 0xFF, 0xFC,
    0xFF, 0xFC, 0xFF, 0xFC, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00,
    0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0xFF, 0xFC, 0xFF, 0xFC,
    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00,
    0xC3, 0x00, 0xC3, 0x00, 0xE7, 0x00, 0x7E, 0x00, 0x3C, 0x00,
    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0xCC,
    0xC0, 0xEC, 0xC0, 0x7C, 0xE0, 0x38, 0x7F, 0xFC, 0x3F, 0xEC,
    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x80, 0xC3, 0x80,
    0xC3, 0xC0, 0xC3, 0xC0, 0xE7, 0x70, 0x7E, 0x3C, 0x3C, 0x1C,
    0x3C, 0x18, 0x7E, 0x1C, 0xE7, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,
    0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x9C, 0xE1, 0xF8, 0x60, 0xF0,
    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0xFC,
    0xFF, 0xFC, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,
    0xFF, 0xF0, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C,
    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0,
    0xFF, 0xC0, 0xFF, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C,
    0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0xFF, 0xE0, 0xFF, 0xC0,
    0xFF, 0xF0, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0xF8,
    0x00, 0xF8, 0x00, 0x3C, 0x00, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0,
    0xF0, 0x3C, 0xF8, 0x7C, 0x1C, 0xE0, 0x0F, 0xC0, 0x07, 0x80,
    0x07, 0x80, 0x0F, 0xC0, 0x1C, 0xE0, 0xF8, 0x7C, 0xF0, 0x3C,
    0xFC, 0x00, 0xFE, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xFC,
    0x01, 0xFC, 0x03, 0x80, 0x07, 0x00, 0xFE, 0x00, 0xFC, 0x00,
    0xC0, 0x3C, 0xC0, 0x7C, 0xC0, 0xEC, 0xC1, 0xCC, 0xC3, 0x8C,
    0xC7, 0x0C, 0xCE, 0x0C, 0xDC, 0x0C, 0xF8, 0x0C, 0xF0, 0x0C,
    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0xC0, 0x0C,
    0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x30, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x03, 0x00,
    0x03, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x30,
    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,
    0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00,
    0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C, 0x00,
    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
    0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00,
    0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x30, 0x06, 0x78, 0x0E, 0xFC, 0x0C, 0xCC, 0x0C, 0xCC,
    0x0C, 0xCC, 0x0C, 0xCC, 0x0E, 0xCC, 0x07, 0xFC, 0x03, 0xF8,
    0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C,
    0x03, 0x0C, 0x03, 0x0C, 0x03, 0x9C, 0x01, 0xF8, 0x00, 0xF0,
    0x03, 0xF0, 0x07, 0xF8, 0x0E, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30,
    0x00, 0xF0, 0x01, 0xF8, 0x03, 0x9C, 0x03, 0x0C, 0x03, 0x0C,
    0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C, 0xFF, 0xFC, 0xFF, 0xFC,
    0x03, 0xF0, 0x07, 0xF8, 0x0E, 0xDC, 0x0C, 0xCC, 0x0C, 0xCC,
    0x0C, 0xCC, 0x0C, 0xCC, 0x0E, 0xDC, 0x07, 0xD8, 0x03, 0x90,
    0x00, 0x00, 0x03, 0x00, 0x3F, 0xFC, 0x7F, 0xFC, 0xE3, 0x00,
    0xE3, 0x00, 0x70, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x03, 0x18, 0x07, 0x9C, 0x0F, 0xCC, 0x0C, 0xCC, 0x0C, 0xCC,
    0x0C, 0xCC, 0x0C, 0xCC, 0x0C, 0xDC, 0x0F, 0xF8, 0x07, 0xF0,
    0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
    0x03, 0x00, 0x03, 0x80, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xFC,
    0x1B, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x30, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C,
    0x00, 0x0C, 0x00, 0x1C, 0xCF, 0xF8, 0xCF, 0xF0, 0x00, 0x00,
    0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0xE0, 0x01, 0xE0,
    0x03, 0xF0, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xFF, 0xFC,
    0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
    0x0F, 0xFC, 0x0F, 0xFC, 0x0E, 0x00, 0x07, 0x00, 0x03, 0xC0,
    0x03, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x0F, 0xFC, 0x0F, 0xFC,
    0x0F, 0xFC, 0x0F, 0xFC, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00,
    0x0C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0xFC, 0x03, 0xFC,
    0x03, 0xF0, 0x07, 0xF8, 0x0E, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C,
    0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0xF8, 0x03, 0xF0,
    0x0F, 0xFC, 0x0F, 0xFC, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
    0x0C, 0xC0, 0x0C, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00,
    0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
    0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0F, 0xFC, 0x0F, 0xFC,
    0x0F, 0xFC, 0x0F, 0xFC, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00,
    0x0C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x00,
    0x03, 0x18, 0x07, 0x9C, 0x0F, 0xCC, 0x0C, 0xCC, 0x0C, 0xCC,
    0x0C, 0xCC, 0x0C, 0xCC, 0x0C, 0xFC, 0x0E, 0x78, 0x06, 0x30,
    0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0xFF, 0xF0, 0xFF, 0xF8,
    0x0C, 0x1C, 0x0C, 0x1C, 0x0C, 0x38, 0x0C, 0x30, 0x00, 0x00,
    0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C,
    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x0F, 0xF8, 0x0F, 0xF0,
    0x0F, 0xC0, 0x0F, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C,
    0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x0F, 0xE0, 0x0F, 0xC0,
    0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF8,
    0x00, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x0F, 0xF8, 0x0F, 0xF0,
    0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0xF0, 0x01, 0xE0,
    0x01, 0xE0, 0x03, 0xF0, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C,
    0x0C, 0x00, 0x0E, 0x00, 0x07, 0x0C, 0x03, 0x9C, 0x01, 0xF8,
    0x01, 0xF0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x0C, 0x00,
    0x0C, 0x0C, 0x0C, 0x1C, 0x0C, 0x3C, 0x0C, 0x7C, 0x0C, 0xEC,
    0x0D, 0xCC, 0x0F, 0x8C, 0x0F, 0x0C, 0x0E, 0x0C, 0x0C, 0x0C,
    0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x3F, 0xF0, 0x7C, 0xF8,
    0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00,
    0x03, 0x0C, 0x03, 0x0C, 0x3F, 0xFC, 0x7F, 0xFC, 0xE3, 0x0C,
    0xC3, 0x0C, 0xC0, 0x0C, 0xE0, 0x0C, 0x70, 0x0C, 0x30, 0x0C,
    0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C,
    0x7C, 0xF8, 0x3F, 0xF0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,
    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,
    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,
    0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC,
    0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC
} ;
src/IAR_project/stm32_ov7670/board/lcd_font10x14.h
New file
@@ -0,0 +1,50 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
 /**
 * \file
 *
 * Font 10x14 table definition.
 *
 */
#ifndef _LCD_FONT_10x14_
#define _LCD_FONT_10x14_
#include <stdint.h>
#ifdef __cplusplus
 extern "C" {
#endif
/** Char set of font 10x14 */
extern const uint8_t pCharset10x14[] ;
#ifdef __cplusplus
}
#endif
#endif /* #ifdef _LCD_FONT_10x14_ */
src/IAR_project/stm32_ov7670/board/lcd_gimp_image.h
New file
@@ -0,0 +1,14 @@
#ifndef _GIMP_IMAGE_
#define _GIMP_IMAGE_
#include <stdint.h>
typedef struct _SGIMPImage
{
  uint32_t dwWidth;
  uint32_t dwHeight;
  uint32_t dwBytes_per_pixel; /* 3:RGB, 4:RGBA */
  uint8_t* pucPixel_data ;
} SGIMPImage ;
#endif // _GIMP_IMAGE_
src/IAR_project/stm32_ov7670/board/lcd_r61509v.c
New file
@@ -0,0 +1,968 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
/**
 * \file
 *
 * Implementation of ILI9325 driver.
 *
 */
/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include "lcd_r61509v.h"
#include "stm32f10x.h"
#include "stm32f10x_fsmc.h"
#include "stm32v5_systick.h"
#include "lcd_r61509v.h"
/*----------------------------------------------------------------------------
 *        Local variables
 *----------------------------------------------------------------------------*/
/* Pixel cache used to speed up communication */
#define LCD_DATA_CACHE_SIZE BOARD_LCD_WIDTH
static LcdColor_t gLcdPixelCache[LCD_DATA_CACHE_SIZE];
/* ³õʼ»¯LCDËùʹÓõĹܽÅΪGPIOģʽ»òFSMCģʽ */
static void lcd_gpio_init(void)
{
    GPIO_InitTypeDef                GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);    /* Ê¹ÄÜFSMCÍâÉèʱÖÓ */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE); /* Ê¹ÄÜLCD±³¹âºÍ¸´Î»¹Ü½ÅʱÖÓ */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                   /* LCD±³¹â¿ØÖ¹¹Ü½Å PD13 */
    GPIO_Init(GPIOD, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;            /* LCD¸´Î»¿ØÖƹܽŠPE1 */
    GPIO_Init(GPIOE, &GPIO_InitStructure);
    /* ¸´ÓÃGPIODµÄGPIO¶Ë¿ÚΪFSMCģʽ,²Î¿¼datasheet <Table 5. High-density STM32F103xx pin definitions> */
    GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_14  /* PD14 - D0  */
                                  | GPIO_Pin_15  /* PD15 - D1  */
                                  | GPIO_Pin_0   /* PD0  - D2  */
                                  | GPIO_Pin_1   /* PD1  - D3  */
                                                                | GPIO_Pin_8   /* PD8  - D13 */
                                  | GPIO_Pin_9   /* PD9  - D14 */
                                  | GPIO_Pin_10  /* PD10 - D15 */
                                  | GPIO_Pin_4   /* PD4  - nOE Êä³öʹÄÜ */
                                  | GPIO_Pin_5   /* PD5  - nEW Ð´Ê¹ÄÜ */
                                                                | GPIO_Pin_7   /* PD7  - FSMC_NE1  LCDƬѡ */
                                                                | GPIO_Pin_11; /* PD11 - A16(LCD RS) LCDÖ¸Áî/Êý¾ÝÇл» */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
    /* ¸´ÓÃGPIOEµÄGPIO¶Ë¿ÚΪFSMCģʽ,²Î¿¼datasheet <Table 5. High-density STM32F103xx pin definitions> */
    GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_7   /* PE7  - D4  */
                                  | GPIO_Pin_8   /* PE8  - D5  */
                                  | GPIO_Pin_9   /* PE9  - D6  */
                                  | GPIO_Pin_10  /* PE10 - D7  */
                                  | GPIO_Pin_11  /* PE11 - D8  */
                                  | GPIO_Pin_12  /* PE12 - D9  */
                                  | GPIO_Pin_13  /* PE13 - D10 */
                                  | GPIO_Pin_14  /* PE14 - D11 */
                                  | GPIO_Pin_15; /* PE15 - D12 */
  GPIO_Init(GPIOE, &GPIO_InitStructure);
    /* ´ò¿ªLCD±³¹â */
    GPIO_SetBits(GPIOD, GPIO_Pin_13);
}
/* ³õʼ»¯FSMC¹¤×÷ģʽ¼°ÆäÅäÖà*/
static void lcd_fsmc_init(void)
{
    FSMC_NORSRAMInitTypeDef         FSMC_NORSRAMInitStructure;
    FSMC_NORSRAMTimingInitTypeDef   p;
  /* FSMC½Ó¿ÚÌØÐÔÅäÖòÎÊý,¶ÔÏÂÃæ¸÷³ÉÔ±¸³µÄÖµX±íʾX¸öʱÖÓÖÜÆÚ£¬ËüµÄʱÖÓÊÇÓÉHCLK¾­¹ý
       FSMC_CLKDivisionÉèÖÃµÄ·ÖÆµ²ÎÊý·ÖƵºóµÃµ½¡£*/
  p.FSMC_AddressSetupTime = 0x02;     /* µØÖ·½¨Á¢Ê±¼ä */
  p.FSMC_AddressHoldTime = 0x00;      /* µØÖ·±£³Öʱ¼ä */
  p.FSMC_DataSetupTime = 0x05;        /* Êý¾Ý½¨Á¢Ê±¼ä */
  p.FSMC_DataLatency = 0x00;          /* Êý¾Ý±£³Öʱ¼ä */
  p.FSMC_BusTurnAroundDuration = 0x00;/* ×ÜÏ߻ָ´Ê±¼ä */
  p.FSMC_CLKDivision = 0x00;          /* Ê±ÖÓ·ÖÆµ */
  /*FSMC_AccessMode: ÔÚµØÖ·Ïß²»¸´ÓõÄÇé¿öÏ£¬ABCDģʽµÄÇø±ð²»´ó¡£¸ÃÅäÖÃÖ»ÔÚÀ©Õ¹Ä£Ê½ÓÐЧ */
  p.FSMC_AccessMode = FSMC_AccessMode_B;
    /* LCDµÄCSÁ¬µÄPD7(NE1),ËùÒÔÎÒÃÇʹÓõÄÊÇNorflashµÄBank1  */
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    /* PD11Á¬µØÖ·ÏßA16, Êµ¼ÊÉÏֻʹÓÃÁËÒ»ÌõµØÖ·Ïߣ¬ÒòΪI/O×ÊÔ´²»½ôÕÅ£¬ËùÒÔÅäÖõØÖ·ÏߺÍÊý¾ÝÏß²»¸´Óà*/
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    /* ´æ´¢Æ÷ÀàÐÍΪNorflashÀàÐÍ,ËüµÄʱÐòÓë8080×ÜÏ߸ü½Ó½ü,¸ÃÅäÖû¹¿ÉÒÔΪPSRAMºÎSRAMģʽ.*/
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
    /* Êý¾Ýλ¿íΪ16λ */
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    /* Ê¹ÓÃÒ첽дģʽ£¬½ûֹͻ·¢Ä£Ê½£»8080×ÜÏ߸üÊʺÏÒ첽ģʽ¡£ */
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬µÈ´ýÐźż«ÐÔΪµÍ */
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬½ûÖ¹·Ç¶ÔÆëÍ»·¢Ä£Ê½ */
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬NWAITÐźÅÔÚʲôʱÆÚ²úÉú */
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬½ûÓÃNWAITÐźŠ*/
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬½ûֹͻ·¢Ð´²Ù×÷ */
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
    /* Ð´Ê¹ÄÜ£¬Èç¹û½ûÖ¹ÁËд²Ù×÷£¬FSMC²»»á²úÉúдʱÐò£¬µ«¿ÉÒÔ¶Á³öÊý¾Ý */
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    /* ½ûÖ¹À©Õ¹Ä£Ê½£¬À©Õ¹Ä£Ê½¿ÉÒÔʹÓöÀÁ¢µÄ¶Á¡¢Ð´Ä£Ê½ */
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    /* ÅäÖöÁдʱÐò£¡Èç¹ûʹÓÃÁËÀ©Õ¹Ä£Ê½£¬ÔòǰÕßÅäÖõÄÊǶÁʱÐò£¬ºóÕßÅäÖõÄÊÇдʱÐò¡£
     * Èç¹û½ûÖ¹ÁËÀ©Õ¹Ä£Ê½£¬Ôò¶ÁдʱÐò¶¼Ê¹ÓÃFSMC_ReadWriteTimingStruct½á¹¹ÌåÖеIJÎÊý¡£
      */
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  /* Ê¹ÄÜFSMC Bank1_SRAM Bank */
}
void lcd_reset(void)
{
  GPIO_ResetBits(GPIOE, GPIO_Pin_1);     /* PE1 ÎªLCD ¸´Î»ÐźŠ*/
  msleep(500);
  GPIO_SetBits(GPIOE, GPIO_Pin_1);
  msleep(500);
}
/*----------------------------------------------------------------------------
 *        Export functions
 *----------------------------------------------------------------------------*/
/**
 * \brief Write data to LCD Register.
 *
 * \param reg   Register address.
 * \param data  Data to be written.
 */
void LCD_WriteReg( uint16_t reg, uint16_t data )
{
        LCD_IR() = 0;
    LCD_IR() = reg;
    LCD_D()  = data;
}
/**
 * \brief Read data from LCD Register.
 *
 * \param reg   Register address.
 *
 * \return      Readed data.
 */
uint16_t LCD_ReadReg( uint16_t reg )
{
    uint16_t value;
        LCD_IR() = 0;
    LCD_IR() = reg;
    value = LCD_D();
    return value;
}
/**
 * \brief Write two byte to LCD GRAM.
 *
 * \param color  16-bits RGB color.
 */
extern void LCD_WriteRAMWord( uint16_t wColor )
{
    LCD_D() = wColor ;
}
/**
 * \brief Prepare to write GRAM data.
 */
extern void LCD_WriteRAM_Prepare( void )
{
    LCD_IR() = 0 ;
    LCD_IR() = R61509V_R202H ; /* Write Data to GRAM (R202h)  */
}
/**
 * \brief Write data to LCD GRAM.
 *
 * \param color  16-bits RGB color.
 */
extern  void LCD_WriteRAM( LcdColor_t wColor )
{
    LCD_WriteRAMWord(wColor);
}
/**
 * \brief Write mutiple data in buffer to LCD controller.
 *
 * \param pBuf  data buffer.
 * \param size  size in pixels.
 */
static void LCD_WriteRAMBuffer(const LcdColor_t *pBuf, uint32_t size)
{
    uint32_t addr ;
    for ( addr = 0 ; addr < size ; addr++ )
    {
        LCD_WriteRAM(pBuf[addr]);
    }
}
/**
 * \brief Prepare to read GRAM data.
 */
extern void LCD_ReadRAM_Prepare( void )
{
    LCD_IR() = 0 ;
    LCD_IR() = R61509V_R202H ; /* Read Data from GRAM (R202h)  */
}
/**
 * \brief Read data to LCD GRAM.
 *
 * \note Because pixel data LCD GRAM is 18-bits, so convertion to RGB 24-bits
 * will cause low color bit lose.
 *
 * \return color  24-bits RGB color.
 */
extern uint32_t LCD_ReadRAM( void )
{
    uint16_t color;
    color = LCD_D();       /* dummy read */
    color = LCD_D();       /* data */
    return color;
}
/*----------------------------------------------------------------------------
 *        Basic R61509V primitives
 *----------------------------------------------------------------------------*/
/**
 * \brief Check Box coordinates. Return upper left and bottom right coordinates.
 *
 * \param pX1      X-coordinate of upper-left corner on LCD.
 * \param pY1      Y-coordinate of upper-left corner on LCD.
 * \param pX2      X-coordinate of lower-right corner on LCD.
 * \param pY2      Y-coordinate of lower-right corner on LCD.
 */
static void CheckBoxCoordinates( uint32_t *pX1, uint32_t *pY1, uint32_t *pX2, uint32_t *pY2 )
{
    uint32_t dw;
    if ( *pX1 >= BOARD_LCD_WIDTH )
    {
        *pX1 = BOARD_LCD_WIDTH-1 ;
    }
    if ( *pX2 >= BOARD_LCD_WIDTH )
    {
        *pX2 = BOARD_LCD_WIDTH-1 ;
    }
    if ( *pY1 >= BOARD_LCD_HEIGHT )
    {
        *pY1 = BOARD_LCD_HEIGHT-1 ;
    }
    if ( *pY2 >= BOARD_LCD_HEIGHT )
    {
        *pY2 = BOARD_LCD_HEIGHT-1 ;
    }
    if (*pX1 > *pX2)
    {
        dw = *pX1;
        *pX1 = *pX2;
        *pX2 = dw;
    }
    if (*pY1 > *pY2)
    {
        dw = *pY1;
        *pY1 = *pY2;
        *pY2 = dw;
    }
}
/**
 * \brief Initialize the LCD controller.
 */
uint32_t LCD_Initialize( void )
{
    uint16_t chipid ;
    lcd_gpio_init();     /* ³õʼ»¯LCDʹÓõ½µÄ¹Ü½Å */
    lcd_fsmc_init();     /* ³õʼ»¯FSMCÅäÖà*/
  lcd_reset();
  /* Check R61509V chipid */
  chipid = LCD_ReadReg( R61509V_R000H ) ; /* Driver Code Read (R000h) */
  if ( chipid != R61509V_DEVICE_CODE )
  {
     //printf( "Read R61509V chip ID (0x%04x) error, skip initialization.\r\n", chipid ) ;
     return 1 ;
    }
    /* Register settins reference to R61509 LCD drvier datasheet <CPT 3.0¡±(C030JB) Initial Code> */
    /* Device Code Read */
    LCD_WriteReg(R61509V_R000H, 0x0000);
  LCD_WriteReg(R61509V_R000H, 0x0000);
    LCD_WriteReg(R61509V_R000H, 0x0000);
    LCD_WriteReg(R61509V_R000H, 0x0000);
  msleep(10);
    /* Base Image Number of Line */
    LCD_WriteReg(R61509V_R400H, 0x6200);
    /* Display Control 2 */
    LCD_WriteReg(R61509V_R008H, 0x0808);
    /* Gamma Control settings */
    LCD_WriteReg(R61509V_R300H, 0x0C00);
    LCD_WriteReg(R61509V_R301H, 0x5A0B);
    LCD_WriteReg(R61509V_R302H, 0x0906);
    LCD_WriteReg(R61509V_R303H, 0x1017);
    LCD_WriteReg(R61509V_R304H, 0x2300);
    LCD_WriteReg(R61509V_R305H, 0x1700);
    LCD_WriteReg(R61509V_R306H, 0x6309);
    LCD_WriteReg(R61509V_R307H, 0x0C09);
    LCD_WriteReg(R61509V_R308H, 0x100C);
    LCD_WriteReg(R61509V_R309H, 0x2232);
    /* Panel Interface Control settings */
    LCD_WriteReg(R61509V_R010H, 0x0016);//69.5Hz
    LCD_WriteReg(R61509V_R011H, 0x0101);//
    LCD_WriteReg(R61509V_R012H, 0x0000);//
    LCD_WriteReg(R61509V_R013H, 0x0001);//
    /* Power Control settings */
    LCD_WriteReg(R61509V_R100H, 0x0330);//BT,AP
    LCD_WriteReg(R61509V_R101H, 0x0237);//DC0,DC1,VC
    LCD_WriteReg(R61509V_R103H, 0x0F00);//VDV
    LCD_WriteReg(R61509V_R280H, 0x6100);//VCM
    LCD_WriteReg(R61509V_R102H, 0xC1B0);//VRH[11000],VCMR[1],PSON,PON[11]
    msleep(10);
    LCD_WriteReg(R61509V_R001H, 0x00100);
    LCD_WriteReg(R61509V_R002H, 0x00100);
    LCD_WriteReg(R61509V_R003H, 0x01030);
    LCD_WriteReg(R61509V_R009H, 0x00001);
    LCD_WriteReg(R61509V_R00CH, 0x00000);
    LCD_WriteReg(R61509V_R090H, 0x08000);
    LCD_WriteReg(R61509V_R00FH, 0x00000);
    LCD_WriteReg(R61509V_R210H, 0x00000);
    LCD_WriteReg(R61509V_R211H, 0x000EF);
    LCD_WriteReg(R61509V_R212H, 0x00000);
    LCD_WriteReg(R61509V_R213H, 0x0018F);//432=1AF, 400=18F
    LCD_WriteReg(R61509V_R500H, 0x00000);
    LCD_WriteReg(R61509V_R501H, 0x00000);
    LCD_WriteReg(R61509V_R502H, 0x0005F);
    LCD_WriteReg(R61509V_R401H, 0x00001);
    LCD_WriteReg(R61509V_R404H, 0x00000);
    msleep(100);
    LCD_WriteReg(R61509V_R007H, 0x00100);//BASEE
    msleep(100);
    LCD_WriteReg(R61509V_R200H, 0x00000); /* Horizontal GRAM Address Set  */
    LCD_WriteReg(R61509V_R201H, 0x00000); /* Vertical GRAM Address Set   */
  LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
  LCD_SetCursor( 0, 0 ) ;
    return 0;
}
/**
 * \brief Turn on the LCD.
 */
extern void LCD_On( void )
{
      uint16_t Reg;
      /* Display Control 1 (R007h)  When BASEE = 1 the base image is displayed. */
      Reg = LCD_ReadReg( R61509V_R007H );
    LCD_WriteReg( R61509V_R007H, Reg|R61509V_R007H_BASEE ) ;
    Reg = LCD_ReadReg( R61509V_R102H );
      LCD_WriteReg(R61509V_R102H, Reg|R61509V_R102H_PSON|R61509V_R102H_PON);//PSON[1],PON[1]
}
/**
 * \brief Turn off the LCD.
 */
extern void LCD_Off( void )
{
      uint16_t Reg;
      Reg = LCD_ReadReg( R61509V_R007H );
      /* Display Control 1 (R007h)  When BASEE = 0 No base image is displayed. */
    LCD_WriteReg( R61509V_R007H,  (Reg & ~R61509V_R007H_BASEE) ) ;
}
/**
 * \brief Power down the LCD.
 */
extern void LCD_PowerDown( void )
{
      uint16_t Reg;
        LCD_Off();
    Reg = LCD_ReadReg( R61509V_R102H );
      LCD_WriteReg(R61509V_R102H, Reg&(~(R61509V_R102H_PSON|R61509V_R102H_PON)) );//PSON[0],PON[0]
}
/**
 * \brief Convert 24 bit RGB color into 5-6-5 rgb color space.
 *
 * Initialize the LcdColor_t cache with the color pattern.
 * \param x  24-bits RGB color.
 * \return 0 for successfull operation.
 */
extern uint32_t LCD_SetColor( uint32_t dwRgb24Bits )
{
    uint32_t i ;
    /* Fill the cache with selected color */
    for ( i = 0 ; i < LCD_DATA_CACHE_SIZE ; ++i )
    {
        gLcdPixelCache[i] = dwRgb24Bits ;
    }
    return 0;
}
/**
 * \brief Set cursor of LCD srceen.
 *
 * \param x  X-coordinate of upper-left corner on LCD.
 * \param y  Y-coordinate of upper-left corner on LCD.
 */
extern void LCD_SetCursor( uint16_t x, uint16_t y )
{
    /* GRAM Horizontal/Vertical Address Set (R20h, R21h) */
    LCD_WriteReg( R61509V_R200H, x ) ; /* column */
    LCD_WriteReg( R61509V_R201H, y ) ; /* row */
}
extern void LCD_SetWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight )
{
    /* Horizontal and Vertical RAM Address Position (R50h, R51h, R52h, R53h) */
    /* Set Horizontal Address Start Position */
   LCD_WriteReg( R61509V_R210H, (uint16_t)dwX ) ;
   /* Set Horizontal Address End Position */
   LCD_WriteReg( R61509V_R211H, (uint16_t)dwX+dwWidth-1 ) ;
   /* Set Vertical Address Start Position */
   LCD_WriteReg( R61509V_R212H, (uint16_t)dwY ) ;
   /* Set Vertical Address End Position */
   LCD_WriteReg( R61509V_R213H, (uint16_t)dwY+dwHeight-1 ) ;
}
extern void LCD_SetDisplayLandscape( uint32_t dwRGB )
{
    uint16_t dwValue ;
    /* When AM = ?? the address is updated in vertical writing direction. */
    /* DFM Set the mode of transferring data to the internal RAM when TRI = ?? */
    /* When TRI = ?? data are transferred to the internal RAM in 8-bit x 3 transfers mode via the 8-bit interface. */
    /* Use the high speed write mode (HWM=1) */
    /* ORG = ?? The original address ?0000h?moves according to the I/D[1:0] setting.  */
    /* I/D[1:0] = 00 Horizontal : decrement Vertical :  decrement, AM=0:Horizontal */
    dwValue = R61509V_R003H_AM | R61509V_R003H_DFM | R61509V_R003H_TRI | R61509V_R003H_ORG ;
    if ( dwRGB == 0 )
    {
        /* BGR=?? Swap the RGB data to BGR in writing into GRAM. */
        dwValue |= R61509V_R003H_BGR ;
    }
    LCD_WriteReg( R61509V_R003H, dwValue ) ;
    //    LCD_WriteReg( ILI9325_R60H, (0x1d<<8)|0x00 ) ; /*Gate Scan Control */
    LCD_SetWindow( 0, 0, BOARD_LCD_HEIGHT, BOARD_LCD_WIDTH ) ;
}
extern void LCD_SetDisplayPortrait( uint16_t wRGB )
{
    uint16_t dwValue ;
    /* Use the high speed write mode (HWM=1) */
    /* When TRI = 1 data are transferred to the internal RAM in 8-bit x 3 transfers mode via the 8-bit interface. */
    /* DFM=0: 18bpp (R:G:B = 6:6:6), DFM=1: 16bpp (R:G:B = 5:6:5) */
    /* I/D[1:0] = 11 Horizontal : increment Vertical :  increment, AM=0:Horizontal */
    dwValue =  R61509V_R003H_DFM | R61509V_R003H_ID1 | R61509V_R003H_ID0 ;
    if ( wRGB == MODE_BGR )
    {
        /* BGR=?? Swap the RGB data to BGR in writing into GRAM. */
        dwValue |= R61509V_R003H_BGR ;
    }
    LCD_WriteReg( R61509V_R003H, dwValue ) ;
    /* Gate Scan Control (R400h, R401h, R404h) */
    /* SCN[5:0]->bit[6:1] = 00 */
    /* NL[5:0]->bit[14:9] = 0x27: Sets the number of lines to drive the LCD at an interval of 8 lines. */
    //LCD_WriteReg( R61509V_R400H, R61509V_R400H_GS|(0x27<<9)|0x00 ) ;
}
extern void LCD_VerticalScroll( uint16_t wY )
{
    /* Gate Scan Control (R400h, R401h, R404h) */
    /*  Enables the grayscale inversion of the image by setting REV=1. */
    /* VLE[1]: Vertical scroll display enable bit */
    LCD_WriteReg( R61509V_R401H, 3 ) ;
    LCD_WriteReg( R61509V_R404H, wY ) ;
}
extern void LCD_SetPartialImage1( uint32_t dwDisplayPos, uint32_t dwStart, uint32_t dwEnd )
{
    if( dwStart <= dwEnd )
            return;
    /* Partial Image 1 Display Position (R500h) */
    LCD_WriteReg( R61509V_R500H, dwDisplayPos&0x1ff ) ;
    /* Partial Image 1 RAM Start/End Address (R501h, R502h) */
    LCD_WriteReg( R61509V_R501H, dwStart&0x1ff ) ;
    LCD_WriteReg( R61509V_R502H, dwEnd&0x1ff ) ;
}
extern void LCD_EnablePartialImage1( uint32_t OnOff )
{
    uint16_t Reg;
    Reg = LCD_ReadReg( R61509V_R007H );
    LCD_WriteReg( R61509V_R007H,  (Reg & ~R61509V_R007H_BASEE) |  R61509V_R007H_PTDE  ) ;
}
/**
 * \brief Draw a LcdColor_t on LCD of given color.
 *
 * \param x  X-coordinate of pixel.
 * \param y  Y-coordinate of pixel.
 */
extern uint32_t LCD_DrawPixel( uint32_t x, uint32_t y )
{
    if( (x >= BOARD_LCD_WIDTH) || (y >= BOARD_LCD_HEIGHT) )
    {
        return 1;
    }
    /* Set cursor */
    LCD_SetCursor( x, y );
    /* Prepare to write in GRAM */
    LCD_WriteRAM_Prepare();
    LCD_WriteRAM( *gLcdPixelCache );
    return 0;
}
extern void LCD_TestPattern( uint32_t dwRGB )
{
    uint32_t dwLine ;
    uint32_t dw ;
    LCD_SetWindow( 10, 10, 100, 20 ) ;
    LCD_SetCursor( 10, 10 ) ;
    LCD_WriteRAM_Prepare() ;
    for ( dwLine=0 ; dwLine < 20 ; dwLine++ )
    {
        /* Draw White bar */
        for ( dw=0 ; dw < 20 ; dw++ )
        {
                LCD_D() = 0xff ;
                LCD_D() = 0xff ;
                LCD_D() = 0xff ;
        }
        /* Draw Red bar */
        for ( dw=0 ; dw < 20 ; dw++ )
        {
            if ( dwRGB == 0 )
            {
                LCD_D() = 0xff ;
                LCD_D() = 0x00 ;
                LCD_D() = 0x00 ;
            }
            else
            {
                LCD_D() = 0x00 ;
                LCD_D() = 0x00 ;
                LCD_D() = 0xff ;
            }
        }
        /* Draw Green bar */
        for ( dw=0 ; dw < 20 ; dw++ )
        {
                LCD_D() = 0x00 ;
                LCD_D() = 0xff ;
                LCD_D() = 0x00 ;
        }
        /* Draw Blue bar */
        for ( dw=0 ; dw < 20 ; dw++ )
        {
            if ( dwRGB == 0 )
            {
                LCD_D() = 0x00 ;
                LCD_D() = 0x00 ;
                LCD_D() = 0xff ;
            }
            else
            {
                LCD_D() = 0xff ;
                LCD_D() = 0x00 ;
                LCD_D() = 0x00 ;
            }
        }
        /* Draw Black bar */
        for ( dw=0 ; dw < 20 ; dw++ )
        {
                LCD_D() = 0x00 ;
                LCD_D() = 0x00 ;
                LCD_D() = 0x00 ;
        }
    }
    LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
}
/**
 * \brief Write several pixels with the same color to LCD GRAM.
 *
 * LcdColor_t color is set by the LCD_SetColor() function.
 * This function is optimized using an sram buffer to transfer block instead of
 * individual pixels in order to limit the number of SPI interrupts.
 * \param dwX1      X-coordinate of upper-left corner on LCD.
 * \param dwY1      Y-coordinate of upper-left corner on LCD.
 * \param dwX2      X-coordinate of lower-right corner on LCD.
 * \param dwY2      Y-coordinate of lower-right corner on LCD.
 */
extern uint32_t LCD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
{
    uint32_t size, blocks;
    /* Swap coordinates if necessary */
    CheckBoxCoordinates(&dwX1, &dwY1, &dwX2, &dwY2);
    /* Determine the refresh window area */
    /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
    LCD_WriteReg(R61509V_R210H, (uint16_t)dwX1);
    LCD_WriteReg(R61509V_R211H, (uint16_t)dwX2);
    LCD_WriteReg(R61509V_R212H, (uint16_t)dwY1);
    LCD_WriteReg(R61509V_R213H, (uint16_t)dwY2);
    /* Set cursor */
    LCD_SetCursor( dwX1, dwY1 );
    /* Prepare to write in GRAM */
    LCD_WriteRAM_Prepare();
    size = (dwX2 - dwX1 + 1) * (dwY2 - dwY1 + 1);
    /* Send pixels blocks => one SPI IT / block */
    blocks = size / LCD_DATA_CACHE_SIZE;
    while (blocks--)
    {
        LCD_WriteRAMBuffer(gLcdPixelCache, LCD_DATA_CACHE_SIZE);
    }
    /* Send remaining pixels */
    LCD_WriteRAMBuffer(gLcdPixelCache, size % LCD_DATA_CACHE_SIZE);
    /* Reset the refresh window area */
    /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
    LCD_WriteReg(R61509V_R210H, (uint16_t)0 ) ;
    LCD_WriteReg(R61509V_R211H, (uint16_t)BOARD_LCD_WIDTH - 1 ) ;
    LCD_WriteReg(R61509V_R212H, (uint16_t)0) ;
    LCD_WriteReg(R61509V_R213H, (uint16_t)BOARD_LCD_HEIGHT - 1  ) ;
    return 0 ;
}
/**
 * \brief Write several pixels pre-formatted in a bufer to LCD GRAM.
 *
 * \param dwX1      X-coordinate of upper-left corner on LCD.
 * \param dwY1      Y-coordinate of upper-left corner on LCD.
 * \param dwX2      X-coordinate of lower-right corner on LCD.
 * \param dwY2      Y-coordinate of lower-right corner on LCD.
 * \param pBuffer   LcdColor_t buffer area.
 */
extern uint32_t LCD_DrawPicture( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2, const LcdColor_t *pBuffer )
{
    uint32_t size;
    /* Swap coordinates if necessary */
    CheckBoxCoordinates(&dwX1, &dwY1, &dwX2, &dwY2);
    /* Determine the refresh window area */
    /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
    LCD_WriteReg(R61509V_R210H, (uint16_t)dwX1 ) ;
    LCD_WriteReg(R61509V_R211H, (uint16_t)dwX2 ) ;
    LCD_WriteReg(R61509V_R212H, (uint16_t)dwY1 ) ;
    LCD_WriteReg(R61509V_R213H, (uint16_t)dwY2 ) ;
    /* Set cursor */
    LCD_SetCursor( dwX1, dwY1 );
    /* Prepare to write in GRAM */
    LCD_WriteRAM_Prepare();
    size = (dwX2 - dwX1 + 1) * (dwY2 - dwY1 + 1);
    LCD_WriteRAMBuffer(pBuffer, size);
    /* Reset the refresh window area */
    /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
    LCD_WriteReg(R61509V_R210H, (uint16_t)0 ) ;
    LCD_WriteReg(R61509V_R211H, (uint16_t)BOARD_LCD_WIDTH - 1 ) ;
    LCD_WriteReg(R61509V_R212H, (uint16_t)0 ) ;
    LCD_WriteReg(R61509V_R213H, (uint16_t)BOARD_LCD_HEIGHT - 1 ) ;
    return 0 ;
}
/*
 * \brief Draw a line on LCD, which is not horizontal or vertical.
 *
 * \param x         X-coordinate of line start.
 * \param y         Y-coordinate of line start.
 * \param length    line length.
 * \param direction line direction: 0 - horizontal, 1 - vertical.
 * \param color     LcdColor_t color.
 */
static uint32_t DrawLineBresenham( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
{
    int dx, dy ;
    int i ;
    int xinc, yinc, cumul ;
    int x, y ;
    x = dwX1 ;
    y = dwY1 ;
    dx = dwX2 - dwX1 ;
    dy = dwY2 - dwY1 ;
    xinc = ( dx > 0 ) ? 1 : -1 ;
    yinc = ( dy > 0 ) ? 1 : -1 ;
    dx = ( dx > 0 ) ? dx : -dx ;
    dy = ( dy > 0 ) ? dy : -dy ;
    LCD_DrawPixel( x, y ) ;
    if ( dx > dy )
    {
      cumul = dx / 2 ;
      for ( i = 1 ; i <= dx ; i++ )
      {
        x += xinc ;
        cumul += dy ;
        if ( cumul >= dx )
        {
          cumul -= dx ;
          y += yinc ;
        }
        LCD_DrawPixel( x, y ) ;
      }
    }
    else
    {
        cumul = dy / 2 ;
        for ( i = 1 ; i <= dy ; i++ )
        {
            y += yinc ;
            cumul += dx ;
            if ( cumul >= dy )
            {
                cumul -= dy ;
                x += xinc ;
            }
            LCD_DrawPixel( x, y ) ;
        }
    }
    return 0 ;
}
/*
 * \brief Draw a line on LCD, horizontal and vertical line are supported.
 *
 * \param dwX1      X-coordinate of line start.
 * \param dwY1      Y-coordinate of line start.
 * \param dwX2      X-coordinate of line end.
 * \param dwY2      Y-coordinate of line end.
  */
extern uint32_t LCD_DrawLine ( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
{
    /* Optimize horizontal or vertical line drawing */
    if (( dwY1 == dwY2 ) || (dwX1 == dwX2))
    {
        LCD_DrawFilledRectangle( dwX1, dwY1, dwX2, dwY2 );
    }
    else
    {
        DrawLineBresenham( dwX1, dwY1, dwX2, dwY2 ) ;
    }
    return 0 ;
}
/**
 * \brief Draws a circle on LCD, at the given coordinates.
 *
 * \param dwX      X-coordinate of circle center.
 * \param dwY      Y-coordinate of circle center.
 * \param dwR      circle radius.
*/
extern uint32_t LCD_DrawCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR )
{
    int32_t   d;    /* Decision Variable */
    uint32_t  curX; /* Current X Value */
    uint32_t  curY; /* Current Y Value */
    if (dwR == 0)
    {
        return 0;
    }
    d = 3 - (dwR << 1);
    curX = 0;
    curY = dwR;
    while (curX <= curY)
    {
        LCD_DrawPixel(dwX + curX, dwY + curY);
        LCD_DrawPixel(dwX + curX, dwY - curY);
        LCD_DrawPixel(dwX - curX, dwY + curY);
        LCD_DrawPixel(dwX - curX, dwY - curY);
        LCD_DrawPixel(dwX + curY, dwY + curX);
        LCD_DrawPixel(dwX + curY, dwY - curX);
        LCD_DrawPixel(dwX - curY, dwY + curX);
        LCD_DrawPixel(dwX - curY, dwY - curX);
        if (d < 0)
        {
            d += (curX << 2) + 6;
        }
        else
        {
            d += ((curX - curY) << 2) + 10;
            curY--;
        }
        curX++;
    }
    return 0;
}
extern uint32_t LCD_DrawFilledCircle( uint32_t dwX, uint32_t dwY, uint32_t dwRadius)
{
    signed int d ; /* Decision Variable */
    uint32_t dwCurX ; /* Current X Value */
    uint32_t dwCurY ; /* Current Y Value */
    uint32_t dwXmin, dwYmin;
    if (dwRadius == 0)
    {
        return 0;
    }
    d = 3 - (dwRadius << 1) ;
    dwCurX = 0 ;
    dwCurY = dwRadius ;
    while ( dwCurX <= dwCurY )
    {
        dwXmin = (dwCurX > dwX) ? 0 : dwX-dwCurX;
        dwYmin = (dwCurY > dwY) ? 0 : dwY-dwCurY;
        LCD_DrawFilledRectangle( dwXmin, dwYmin, dwX+dwCurX, dwYmin ) ;
        LCD_DrawFilledRectangle( dwXmin, dwY+dwCurY, dwX+dwCurX, dwY+dwCurY ) ;
        dwXmin = (dwCurY > dwX) ? 0 : dwX-dwCurY;
        dwYmin = (dwCurX > dwY) ? 0 : dwY-dwCurX;
        LCD_DrawFilledRectangle( dwXmin, dwYmin, dwX+dwCurY, dwYmin ) ;
        LCD_DrawFilledRectangle( dwXmin, dwY+dwCurX, dwX+dwCurY, dwY+dwCurX ) ;
        if ( d < 0 )
        {
            d += (dwCurX << 2) + 6 ;
        }
        else
        {
            d += ((dwCurX - dwCurY) << 2) + 10;
            dwCurY-- ;
        }
        dwCurX++ ;
    }
    return 0 ;
}
extern uint32_t LCD_DrawRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
{
    CheckBoxCoordinates(&dwX1, &dwY1, &dwX2, &dwY2);
    LCD_DrawFilledRectangle( dwX1, dwY1, dwX2, dwY1 ) ;
    LCD_DrawFilledRectangle( dwX1, dwY2, dwX2, dwY2 ) ;
    LCD_DrawFilledRectangle( dwX1, dwY1, dwX1, dwY2 ) ;
    LCD_DrawFilledRectangle( dwX2, dwY1, dwX2, dwY2 ) ;
    return 0 ;
}
src/IAR_project/stm32_ov7670/board/lcd_r61509v.h
New file
@@ -0,0 +1,209 @@
/* ----------------------------------------------------------------------------
 *         SAM Software Package License
 * ----------------------------------------------------------------------------
 * Copyright (c) 2011, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */
/**
 * \file
 *
 * Interface of R61509V driver.
 *
 */
#ifndef __LCD_R61509V_H
#define __LCD_R61509V_H
/*----------------------------------------------------------------------------
 *        Headers
 *----------------------------------------------------------------------------*/
#include <stdint.h>
typedef uint16_t LcdColor_t ;
/*----------------------------------------------------------------------------
 *        Definitions
 *----------------------------------------------------------------------------*/
 /* LCDµÄCSÁ¬µÄPD7(NE1),ËùÒÔÎÒÃÇʹÓõÄÊÇNorflashµÄBank1,µØÖ··¶Î§Îª0X60000000~0X63FFFFFF
 * LCDµÄRS(¼Ä´æÆ÷/Êý¾ÝÑ¡Ôñ½Å)Á¬PD11(FSMC_A16),ÕâÑùµ±A16Ϊ¸ßµçƽʱ¾ÍÊÇÊý¾Ý¼Ä´æÆ÷£¬µÍµçƽÔòΪÃüÁî¼Ä´æÆ÷
 * ËùÒÔÊý¾Ý¼Ä´æÆ÷µÄµØÖ·Îª: 0x6000 0000 |= 1<<16 ==> 0x6001 0000(¸ÃֵΪ8λģʽϵÄ×Ö½ÚµØÖ·)
 * ÓÉÓÚÎÒÃDzÉÓõÄÊÇ16λÊý¾ÝÏߣ¬FSMC[24:0]ÓëHADDR[25:1](AHBµØÖ·)¶ÔÆë£¬ÕâÑùHADDRÒª×óÒÆÒ»Î»²ÅÊÇFSMCµÄ·ÃÎʵØÖ·;
 * Òò´ËΪÁ˰ÑFSMCÖеÄFSMC_A16ÖÃ1£¬Êµ¼ÊÉÏÒª¶ÔÓ¦µ½HADDRµØÖ·µÄHADDR_A17£¬¼´0x6002 0000
 */
#define Bank1_LCD_DAT    ((uint32_t)0x60020000)  //ÏÔÊ¾ÇøÊý¾ÝµØÖ·
#define Bank1_LCD_CMD    ((uint32_t)0x60000000)     //ÏÔÊ¾ÇøÖ¸ÁîµØÖ·
#define LCD_RST   (1<<0)                   // PE1-LCD-RST
#define LCD_RST_SET(x) GPIOE->ODR=(GPIOE->ODR&~LCD_RST)|(x ? LCD_RST : 0)
#define BOARD_LCD_WIDTH  240
#define BOARD_LCD_HEIGHT 400
#define MODE_BGR         0
#define MODE_RGB         1
/* color definition */
#define COLOR_RED                 0XF800
#define COLOR_GREEN            0X07E0
#define COLOR_BLUE             0X001F
#define COLOR_BRED             0XF81F
#define COLOR_GRED             0XFFE0
#define COLOR_GBLUE            0X07FF
#define COLOR_BLACK            0X0000
#define COLOR_WHITE            0XFFFF
#define COLOR_PURPUE           0XA294
/* R61509V ID code */
#define R61509V_DEVICE_CODE    0xB509  /* The device code ¡°B509¡±H is read out when this register is read forcibly.  */
/* R61509V LCD Registers */
#define R61509V_R000H    0x000    /* Device Code Read                 */
#define R61509V_R001H    0x001    /* Driver Output Control 1          */
#define R61509V_R001H_SS                ((uint16_t)0x0100)
#define R61509V_R001H_SM                ((uint16_t)0x0400)
#define R61509V_R002H    0x002    /* LCD Drive Waveform Contro        */
#define R61509V_R003H    0x003    /* Entry Mode                       */
#define R61509V_R003H_AM                ((uint16_t)0x0008) /* AM Control the GRAM update direction */
#define R61509V_R003H_ID0               ((uint16_t)0x0010) /* I/D[1:0] Control the address counter  */
#define R61509V_R003H_ID1               ((uint16_t)0x0020)
#define R61509V_R003H_ORG               ((uint16_t)0x0080)
#define R61509V_R003H_BGR               ((uint16_t)0x1000)
#define R61509V_R003H_DFM               ((uint16_t)0x4000)
#define R61509V_R003H_TRI               ((uint16_t)0x8000)
#define R61509V_R007H    0x007    /* Display Control 1                */
#define R61509V_R007H_BASEE             ((uint16_t)0x0100)
#define R61509V_R007H_PTDE              ((uint16_t)0x1000)
#define R61509V_R008H    0x008    /* Display Control 2                */
#define R61509V_R009H    0x009    /* Display Control 3                */
#define R61509V_R010H    0x010    /* Panel Interface Control  1       */
#define R61509V_R011H    0x011    /* Panel Interface Control  2       */
#define R61509V_R012H    0x012    /* Panel Interface Control  3       */
#define R61509V_R013H    0x013    /* Panel Interface Control  4       */
#define R61509V_R014H    0x014    /* Panel Interface Control  5       */
#define R61509V_R00CH    0x00C    /* External Display Interface Control 1  */
#define R61509V_R00FH    0x00F    /* External Display Interface Control 2  */
#define R61509V_R090H    0x090    /* Frame Marker Control */
#define R61509V_R100H    0x100    /* Power Control Control 1 */
#define R61509V_R101H    0x101    /* Power Control Control 2 */
#define R61509V_R102H    0x102    /* Power Control Control 3 */
#define R61509V_R102H_PON               ((uint16_t)0x0010)
#define R61509V_R102H_PSON              ((uint16_t)0x0020)
#define R61509V_R103H    0x103    /* Power Control Control 4 */
#define R61509V_R200H    0x200    /* Horizontal GRAM Address Set  */
#define R61509V_R201H    0x201    /* Vertical  GRAM Address Set   */
#define R61509V_R202H    0x202    /* GRAM Data Write/Read         */
#define R61509V_R210H    0x210    /* Window Horizontal Address Start Position */
#define R61509V_R211H    0x211    /* Window Horizontal Address End Position   */
#define R61509V_R212H    0x212    /* Window Vertical Address Start Position   */
#define R61509V_R213H    0x213    /* Window Vertical Address End Position     */
#define R61509V_R300H    0x300    /* Gamma Control 1  */
#define R61509V_R301H    0x301    /* Gamma Control 2  */
#define R61509V_R302H    0x302    /* Gamma Control 3  */
#define R61509V_R303H    0x303    /* Gamma Control 4  */
#define R61509V_R304H    0x304    /* Gamma Control 5  */
#define R61509V_R305H    0x305    /* Gamma Control 6  */
#define R61509V_R306H    0x306    /* Gamma Control 7  */
#define R61509V_R307H    0x307    /* Gamma Control 8  */
#define R61509V_R308H    0x308    /* Gamma Control 9  */
#define R61509V_R309H    0x309    /* Gamma Control 10 */
#define R61509V_R280H    0x280    /* NVM Data Read / write */
#define R61509V_R400H    0x400    /* Base Image Number of Line   */
#define R61509V_R400H_GS                ((uint16_t)0x8000)
#define R61509V_R401H    0x401    /* Base Image Display Control */
#define R61509V_R404H    0x404    /* Base Image Vertical Scroll Control    */
#define R61509V_R500H    0x500    /* Partial Image 1 Display Position  */
#define R61509V_R501H    0x501    /* RAM Address 1(Start Line Address) */
#define R61509V_R502H    0x502    /* RAM Address 2(End Line Address)   */
/*----------------------------------------------------------------------------
 *        Types
 *----------------------------------------------------------------------------*/
typedef volatile uint16_t REG16;
/*----------------------------------------------------------------------------
 *        Marcos
 *----------------------------------------------------------------------------*/
/** LCD index register address */
#define LCD_IR() (*((REG16 *)(Bank1_LCD_CMD)))
/** LCD data address */
#define LCD_D()  (*((REG16 *)(Bank1_LCD_DAT)))
#ifdef __cplusplus
 extern "C" {
#endif
/*----------------------------------------------------------------------------
 *        Exported functions
 *----------------------------------------------------------------------------*/
extern void LCD_WriteReg( uint16_t reg, uint16_t data );
extern uint16_t LCD_ReadReg( uint16_t reg );
extern void LCD_WriteRAM_Prepare( void );
extern void LCD_WriteRAM( LcdColor_t dwColor );
extern void LCD_ReadRAM_Prepare( void );
extern void LCD_WriteRAMWord( uint16_t wColor );
extern uint32_t LCD_ReadRAM( void );
extern uint32_t LCD_Initialize( void );
extern void LCD_On( void );
extern void LCD_Off( void );
extern void LCD_PowerDown( void );
extern uint32_t LCD_SetColor(uint32_t dwRgb24Bits);
extern void LCD_SetCursor( uint16_t x, uint16_t y );
extern void LCD_SetWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight );
extern void LCD_SetDisplayLandscape( uint32_t dwRGB );
extern void LCD_SetDisplayPortrait( uint16_t wRGB );
extern void LCD_VerticalScroll( uint16_t wY );
extern void LCD_SetPartialImage1( uint32_t dwDisplayPos, uint32_t dwStart, uint32_t dwEnd );
extern uint32_t LCD_DrawPixel( uint32_t x, uint32_t y );
extern void LCD_TestPattern( uint32_t dwRGB );
extern uint32_t LCD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
extern uint32_t LCD_DrawPicture( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2, const LcdColor_t *pBuffer );
extern uint32_t LCD_DrawLine ( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
extern uint32_t LCD_DrawCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR );
extern uint32_t LCD_DrawFilledCircle( uint32_t dwX, uint32_t dwY, uint32_t dwRadius);
extern uint32_t LCD_DrawRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
extern void LCD_SetBacklight (uint32_t level);
#ifdef __cplusplus
}
#endif
#endif /* #ifndef R61509V */
src/IAR_project/stm32_ov7670/board/ov7670_reg.h
New file
@@ -0,0 +1,388 @@
#ifndef __OV7670_REG_H
#define __OV7670_REG_H
#define REG_GAIN        0x00    /* Gain lower 8 bits (rest in vref) */
#define REG_BLUE        0x01    /* blue gain */
#define REG_RED         0x02    /* red gain */
#define REG_VREF        0x03    /* Pieces of GAIN, VSTART, VSTOP */
#define REG_COM1        0x04    /* Control 1 */
#define COM1_CCIR656    0x40    /* CCIR656 enable */
#define REG_BAVE        0x05    /* U/B Average level */
#define REG_GbAVE       0x06    /* Y/Gb Average level */
#define REG_AECHH       0x07    /* AEC MS 5 bits */
#define REG_RAVE        0x08    /* V/R Average level */
#define REG_COM2        0x09    /* Control 2 */
#define COM2_SSLEEP     0x10    /* Soft sleep mode */
#define REG_PID         0x0a    /* Product ID MSB */
#define REG_VER         0x0b    /* Product ID LSB */
#define REG_COM3        0x0c    /* Control 3 */
#define COM3_SWAP       0x40    /* Byte swap */
#define COM3_SCALEEN    0x08    /* Enable scaling */
#define COM3_DCWEN      0x04    /* Enable downsamp/crop/window */
#define REG_COM4        0x0d    /* Control 4 */
#define REG_COM5        0x0e    /* All "reserved" */
#define REG_COM6        0x0f    /* Control 6 */
#define REG_AECH        0x10    /* More bits of AEC value */
#define REG_CLKRC       0x11    /* Clocl control */
#define CLK_EXT         0x40    /* Use external clock directly */
#define CLK_SCALE       0x3f    /* Mask for internal clock scale */
#define REG_COM7        0x12    /* Control 7 */
#define COM7_RESET      0x80    /* Register reset */
#define COM7_FMT_MASK   0x38
#define COM7_FMT_VGA    0x00
#define COM7_FMT_CIF    0x20    /* CIF format */
#define COM7_FMT_QVGA   0x10    /* QVGA format */
#define COM7_FMT_QCIF   0x08    /* QCIF format */
#define COM7_RGB        0x04    /* bits 0 and 2 - RGB format */
#define COM7_YUV        0x00    /* YUV */
#define COM7_BAYER      0x01    /* Bayer format */
#define COM7_PBAYER     0x05    /* "Processed bayer" */
#define REG_COM8        0x13    /* Control 8 */
#define COM8_FASTAEC    0x80    /* Enable fast AGC/AEC */
#define COM8_AECSTEP    0x40    /* Unlimited AEC step size */
#define COM8_BFILT      0x20    /* Band filter enable */
#define COM8_AGC        0x04    /* Auto gain enable */
#define COM8_AWB        0x02    /* White balance enable */
#define COM8_AEC        0x01    /* Auto exposure enable */
#define REG_COM9        0x14    /* Control 9  - gain ceiling */
#define REG_COM10       0x15    /* Control 10 */
#define COM10_HSYNC     0x40    /* HSYNC instead of HREF */
#define COM10_PCLK_HB   0x20    /* Suppress PCLK on horiz blank */
#define COM10_HREF_REV  0x08    /* Reverse HREF */
#define COM10_VS_LEAD   0x04    /* VSYNC on clock leading edge */
#define COM10_VS_NEG    0x02    /* VSYNC negative */
#define COM10_HS_NEG    0x01    /* HSYNC negative */
#define REG_HSTART      0x17    /* Horiz start high bits */
#define REG_HSTOP       0x18    /* Horiz stop high bits */
#define REG_VSTART      0x19    /* Vert start high bits */
#define REG_VSTOP       0x1a    /* Vert stop high bits */
#define REG_PSHFT       0x1b    /* Pixel delay after HREF */
#define REG_MIDH        0x1c    /* Manuf. ID high */
#define REG_MIDL        0x1d    /* Manuf. ID low */
#define REG_MVFP        0x1e    /* Mirror / vflip */
#define MVFP_MIRROR     0x20    /* Mirror image */
#define MVFP_FLIP       0x10    /* Vertical flip */
#define REG_ADCCTR0     0x20
#define REG_ADCCTR1     0x21
#define REG_ADCCTR2     0x22
#define REG_AEW         0x24    /* AGC upper limit */
#define REG_AEB         0x25    /* AGC lower limit */
#define REG_VPT         0x26    /* AGC/AEC fast mode op region */
#define REG_HSYST       0x30    /* HSYNC rising edge delay */
#define REG_HSYEN       0x31    /* HSYNC falling edge delay */
#define REG_HREF        0x32    /* HREF pieces */
#define REG_CHLF        0x33
#define REG_ARBLM       0x34
/* 0x35~0x36 reserved */
#define REG_ADC         0x37
#define REG_ACOM        0x38
#define REG_OFON        0x39
#define REG_TSLB        0x3a    /* lots of stuff */
#define TSLB_YLAST      0x04    /* UYVY or VYUY - see com13 */
#define REG_COM11       0x3b    /* Control 11 */
#define COM11_NIGHT     0x80    /* NIght mode enable */
#define COM11_NMFR      0x60    /* Two bit NM frame rate */
#define COM11_HZAUTO    0x10    /* Auto detect 50/60 Hz */
#define COM11_50HZ      0x08    /* Manual 50Hz select */
#define COM11_EXP       0x02
#define REG_COM12       0x3c    /* Control 12 */
#define COM12_HREF      0x80    /* HREF always */
#define REG_COM13       0x3d    /* Control 13 */
#define REG_COM14       0x3e    /* Control 14 */
#define COM13_GAMMA     0x80    /* Gamma enable */
#define COM13_UVSAT     0x40    /* UV saturation auto adjustment */
#define COM13_UVSWAP    0x01    /* V before U - w/TSLB */
#define REG_COM14       0x3e    /* Control 14 */
#define COM14_DCWEN     0x10    /* DCW/PCLK-scale enable */
#define REG_EDGE        0x3f    /* Edge enhancement factor */
#define REG_COM15       0x40    /* Control 15 */
#define COM15_R10F0     0x00    /* Data range 10 to F0 */
#define COM15_R01FE     0x80    /*            01 to FE */
#define COM15_R00FF     0xc0    /*            00 to FF */
#define COM15_RGB565    0x10    /* RGB565 output */
#define COM15_RGB555    0x30    /* RGB555 output */
#define REG_COM16       0x41    /* Control 16 */
#define COM16_AWBGAIN   0x08    /* AWB gain enable */
#define REG_COM17       0x42    /* Control 17 */
#define COM17_AECWIN    0xc0    /* AEC window - must match COM4 */
#define COM17_CBAR      0x08    /* DSP Color bar */
#define REG_AWBC1       0x43
#define REG_AWBC2       0x44
#define REG_AWBC3       0x45
#define REG_AWBC4       0x46
#define REG_AWBC5       0x47
#define REG_AWBC6       0x48
/* 0x49~0x4A reserved */
#define REG_CMATRIX_BASE 0x4f
#define CMATRIX_LEN 6
#define REG_MTX1         0x4f
#define REG_MTX2         0x50
#define REG_MTX3         0x51
#define REG_MTX4         0x52
#define REG_MTX5         0x53
#define REG_MTX6         0x54
#define REG_BRIGHT         0x55
#define REG_CONTRAS        0X56
#define REG_CONTRAS_CENTER 0x57
#define REG_CMATRIX_SIGN 0x58
#define REG_GFIX        0x69    /* Fix gain control */
#define REG_LLC1        0x62
#define REG_LLC2        0x63
#define REG_LLC3        0x64
#define REG_LLC4        0x65
#define REG_LLC5        0x66
#define REG_LLC6        0x94
#define REG_LLC7        0x95
#define REG_GGAIN       0x6a
#define REG_DBLV        0x6b
#define REG_AWBCTR3     0x6c
#define REG_AWBCTR2     0x6d
#define REG_AWBCTR1     0x6e
#define REG_AWBCTR0     0x6f
#define REG_SCALING_XSC 0x70
#define REG_SCALING_YSC 0x71
#define REG_SCALING_DCWCTR 0x72
#define REG_SCALING_PC  0x73
#define REG_REG74       0x74
#define REG_REG75       0x75
#define REG_REG76       0x76    /* OV's name */
#define R76_WHTPCOR     0x40    /* White pixel correction enable */
#define R76_BLKPCOR     0x80    /* Black pixel correction enable */
#define REG_REG77       0x77
/* 0x78~0x79 reserved */
#define REG_SLOP        0x7a
#define REG_GAM1        0x7b
#define REG_GAM2        0x7c
#define REG_GAM3        0x7d
#define REG_GAM4        0x7e
#define REG_GAM5        0x7f
#define REG_GAM6        0x80
#define REG_GAM7        0x81
#define REG_GAM8        0x82
#define REG_GAM9        0x83
#define REG_GAM10       0x84
#define REG_GAM11       0x85
#define REG_GAM12       0x86
#define REG_GAM13       0x87
#define REG_GAM14       0x88
#define REG_GAM15       0x89
#define REG_RGB444      0x8c    /* RGB 444 control */
#define R444_ENABLE     0x02    /* Turn on RGB444, overrides 5x5 */
#define R444_RGBX       0x01    /* Empty nibble at end */
#define REG_DM_LNL      0x92
#define REG_HAECC1      0x9f    /* Hist AEC/AGC control 1 */
#define REG_HAECC2      0xa0    /* Hist AEC/AGC control 2 */
#define REG_SCALING_PCLK_DELAY 0xa2
#define REG_BD50MAX     0xa5    /* 50hz banding step limit */
#define REG_HAECC3      0xa6    /* Hist AEC/AGC control 3 */
#define REG_HAECC4      0xa7    /* Hist AEC/AGC control 4 */
#define REG_HAECC5      0xa8    /* Hist AEC/AGC control 5 */
#define REG_HAECC6      0xa9    /* Hist AEC/AGC control 6 */
#define REG_HAECC7      0xaa    /* Hist AEC/AGC control 7 */
#define REG_BD60MAX     0xab    /* 60hz banding step limit */
#define REG_ABLC1       0xb1
#define REG_THL_DLT     0xb3
/** terminating list entry for register in configuration file */
#define OV_REG_TERM 0xff
/** terminating list entry for value in configuration file */
#define OV_VAL_TERM 0xff
/** define a structure for omnivision register initialization values */
typedef struct ov_regval_s
{
    /** Register to be written */
    uint8_t reg ;
    /** Value to be written in the register */
    uint8_t val ;
} ov_regval_t ;
const ov_regval_t ov7670_default_regs[] =
{
  {REG_TSLB, 0x04},
    {REG_HREF, 0x80},
    {REG_HSTART, 0x16},
    {REG_HSTOP, 0x04},//5
    {REG_VSTART, 0x02},
    {REG_VSTOP, 0x7b},//0x7a,
    {REG_VREF, 0x06},//0x0a,
    {REG_COM3, 0x0c},
  {REG_COM10, 0x02},
    {REG_COM14, 0x00},//10
    {REG_SCALING_XSC, 0x00},
    {REG_SCALING_YSC, 0x01},
    {REG_SCALING_DCWCTR, 0x11},
    {REG_SCALING_PC, 0x09},//
    {REG_SCALING_PCLK_DELAY, 0x02},//Ëõ·ÅÊä³öÑÓʱ
    {REG_CLKRC, 0x00},
    {REG_SLOP, 0x20},
    {REG_GAM1, 0x1c},
    {REG_GAM2, 0x28},
    {REG_GAM3, 0x3c},//20
    {REG_GAM4, 0x55},
    {REG_GAM5, 0x68},
    {REG_GAM6, 0x76},
    {REG_GAM7, 0x80},
    {REG_GAM8, 0x88},
    {REG_GAM9, 0x8f},
    {REG_GAM10, 0x96},
    {REG_GAM11, 0xa3},
    {REG_GAM12, 0xaf},
    {REG_GAM13, 0xc4},//30
    {REG_GAM14, 0xd7},
    {REG_GAM15, 0xe8},
    {REG_COM8, 0xe0},
    {REG_GAIN, 0x00},//AGC
    {REG_AECH, 0x00},
    {REG_COM4, 0x00},
    {REG_BD50MAX, 0x05},
    {REG_BD60MAX, 0x07},
    {REG_AEW, 0x75},//40
    {REG_AEB, 0x63},
    {REG_VPT, 0xA5},
    {REG_HAECC1, 0x78},
    {REG_HAECC2, 0x68},
    {REG_HAECC3, 0xdf},//0xd8,
    {REG_HAECC4, 0xdf},//0xd8,
    {REG_HAECC5, 0xf0},
    {REG_HAECC6, 0x90},
    {REG_HAECC7, 0x94},//50
    {REG_COM8, 0xe5},
    {REG_COM5, 0x61},
    {REG_COM6, 0x4b},
    {REG_MVFP, 0x37},//0x07,
    {REG_ADCCTR1, 0x02},
    {REG_ADCCTR2, 0x91},
    {REG_CHLF, 0x0b},
    {REG_ADC, 0x1d},
    {REG_ACOM, 0x71},
    {REG_OFON, 0x2a},
    {REG_COM12, 0x78},
    {REG_GFIX, 0x5d},
    {REG_DBLV, 0x40},//PLL
    {REG_REG74, 0x19},
    {REG_DM_LNL, 0x00},//0x19,//0x66
    {REG_ABLC1, 0x0c},
    {REG_THL_DLT, 0x82},//80
    /* AWBC1~AWBC6 */
    {REG_AWBC1, 0x14},
    {REG_AWBC2, 0xf0},
    {REG_AWBC3, 0x34},
    {REG_AWBC4, 0x58},
    {REG_AWBC5, 0x28},
    {REG_AWBC6, 0x3a},
  /* LCCx */
    {REG_LLC3, 0x04},
    {REG_LLC4, 0x20},
    {REG_LLC5, 0x05},
    {REG_LLC6, 0x04},
    {REG_LLC7, 0x08},
    {REG_AWBCTR3, 0x0a},
    {REG_AWBCTR2, 0x55},
    {REG_AWBCTR1, 0x11},//100
    {REG_AWBCTR0, 0x9f},//0x9e for advance AWB
  {REG_BRIGHT, 0x00},//ÁÁ¶È
  {REG_CONTRAS, 0x45},//¶Ô±È¶È
  {REG_CONTRAS_CENTER, 0x80},
    {OV_REG_TERM,OV_VAL_TERM},
};
const ov_regval_t ov7670_fmt_qvga_yuv422[] =
{
    { REG_COM7, COM7_FMT_QVGA },  /* Selects YUV mode */
    { REG_RGB444, 0 },  /* No RGB444 please */
    { REG_COM1, 0 },    /* CCIR601 */
    { REG_COM15, COM15_R00FF },
    { REG_COM9, 0x18 }, /* 4x gain ceiling; 0x8 is reserved bit */
    { REG_MTX1, 0x80 },     /* "matrix coefficient 1" */
    { REG_MTX2, 0x80 },     /* "matrix coefficient 2" */
    { REG_MTX3, 0    },     /* vb */
    { REG_MTX4, 0x22 },     /* "matrix coefficient 4" */
    { REG_MTX5, 0x5e },     /* "matrix coefficient 5" */
    { REG_MTX6, 0x80 },     /* "matrix coefficient 6" */
    { REG_COM13, COM13_GAMMA|COM13_UVSAT },
      {OV_REG_TERM,OV_VAL_TERM},
};
const ov_regval_t ov7670_fmt_qvga_rgb565[] =
{
    { REG_COM7, COM7_FMT_QVGA|COM7_RGB }, /* Selects RGB mode */
    { REG_RGB444, 0 },  /* No RGB444 please */
    { REG_COM1, 0x0 },  /* CCIR601 */
    { REG_COM15, COM15_RGB565 },
    { REG_COM9, 0x0 },     /* ×Ô¶¯ÔöÒæÏÞ¶È-×î´óAGCÖµ 2X */
    { REG_MTX1, 0xb3 },     /* "matrix coefficient 1" */
    { REG_MTX2, 0xb3 },     /* "matrix coefficient 2" */
    { REG_MTX3, 0    },     /* vb */
    { REG_MTX4, 0x3d },     /* "matrix coefficient 4" */
    { REG_MTX5, 0xa7 },     /* "matrix coefficient 5" */
    { REG_MTX6, 0xe4 },     /* "matrix coefficient 6" */
    { REG_COM13, COM13_GAMMA|COM13_UVSAT },
      {OV_REG_TERM,OV_VAL_TERM},
};
const ov_regval_t ov7670_fmt_qvga_rgb444[] =
{
    { REG_COM7, COM7_FMT_QVGA|COM7_RGB }, /* Selects RGB mode */
    { REG_RGB444, R444_ENABLE },    /* Enable xxxxrrrr ggggbbbb */
    { REG_COM1, 0x0 },  /* CCIR601 */
    { REG_COM15, COM15_R01FE|COM15_RGB565 }, /* Data range needed? */
    { REG_COM9, 0x38 },     /* 16x gain ceiling; 0x8 is reserved bit */
    { REG_MTX1, 0xb3 },     /* "matrix coefficient 1" */
    { REG_MTX2, 0xb3 },     /* "matrix coefficient 2" */
    { REG_MTX3, 0    },     /* vb */
    { REG_MTX4, 0x3d },     /* "matrix coefficient 4" */
    { REG_MTX5, 0xa7 },     /* "matrix coefficient 5" */
    { REG_MTX6, 0xe4 },     /* "matrix coefficient 6" */
    { REG_COM13, COM13_GAMMA|COM13_UVSAT|0x2 },  /* Magic rsvd bit */
      {OV_REG_TERM,OV_VAL_TERM},
};
const ov_regval_t ov7670_fmt_qvga_raw[] =
{
    { REG_COM7, COM7_FMT_QVGA|COM7_BAYER },
    { REG_COM13, 0x08 }, /* No gamma, magic rsvd bit */
    { REG_COM16, 0x3d }, /* Edge enhancement, denoise */
    { REG_REG76, 0xe1 }, /* Pix correction, magic rsvd */
      {OV_REG_TERM,OV_VAL_TERM},
};
#endif /* End of __OV7670_REG_H */
src/IAR_project/stm32_ov7670/board/startup_stm32f10x_hd.s
New file
@@ -0,0 +1,496 @@
;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* File Name          : startup_stm32f10x_hd.s
;* Author             : MCD Application Team
;* Version            : V3.5.0
;* Date               : 11-March-2011
;* Description        : STM32F10x High Density Devices vector table for EWARM
;*                      toolchain.
;*                      This module performs:
;*                      - Set the initial SP
;*                      - Configure the clock system and the external SRAM
;*                        mounted on STM3210E-EVAL board to be used as data
;*                        memory (optional, to be enabled by user)
;*                      - Set the initial PC == __iar_program_start,
;*                      - Set the vector table entries with the exceptions ISR address,
;*                      After Reset the Cortex-M3 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;********************************************************************************
;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
;* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************
;
;
; The modules in this file are included in the libraries, and may be replaced
; by any user-defined modules that define the PUBLIC symbol _program_start or
; a user defined start symbol.
; To override the cstartup defined in the library, simply add your modified
; version to the workbench project.
;
; The vector table is normally located at address 0.
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
; The name "__vector_table" has special meaning for C-SPY:
; it is where the SP start value is found, and the NVIC vector
; table register (VTOR) is initialized to this address if != 0.
;
; Cortex-M version
;
    MODULE  ?cstartup
        ;; Forward declaration of sections.
        SECTION CSTACK:DATA:NOROOT(3)
        SECTION .intvec:CODE:NOROOT(2)
        EXTERN  __iar_program_start
        EXTERN  SystemInit
        PUBLIC  __vector_table
        DATA
__vector_table
        DCD     sfe(CSTACK)
        DCD     Reset_Handler             ; Reset Handler
        DCD     NMI_Handler               ; NMI Handler
        DCD     HardFault_Handler         ; Hard Fault Handler
        DCD     MemManage_Handler         ; MPU Fault Handler
        DCD     BusFault_Handler          ; Bus Fault Handler
        DCD     UsageFault_Handler        ; Usage Fault Handler
        DCD     0                         ; Reserved
        DCD     0                         ; Reserved
        DCD     0                         ; Reserved
        DCD     0                         ; Reserved
        DCD     SVC_Handler               ; SVCall Handler
        DCD     DebugMon_Handler          ; Debug Monitor Handler
        DCD     0                         ; Reserved
        DCD     PendSV_Handler            ; PendSV Handler
        DCD     SysTick_Handler           ; SysTick Handler
         ; External Interrupts
        DCD     WWDG_IRQHandler           ; Window Watchdog
        DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
        DCD     TAMPER_IRQHandler         ; Tamper
        DCD     RTC_IRQHandler            ; RTC
        DCD     FLASH_IRQHandler          ; Flash
        DCD     RCC_IRQHandler            ; RCC
        DCD     EXTI0_IRQHandler          ; EXTI Line 0
        DCD     EXTI1_IRQHandler          ; EXTI Line 1
        DCD     EXTI2_IRQHandler          ; EXTI Line 2
        DCD     EXTI3_IRQHandler          ; EXTI Line 3
        DCD     EXTI4_IRQHandler          ; EXTI Line 4
        DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
        DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
        DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
        DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
        DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
        DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
        DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
        DCD     ADC1_2_IRQHandler         ; ADC1 & ADC2
        DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
        DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
        DCD     CAN1_RX1_IRQHandler       ; CAN1 RX1
        DCD     CAN1_SCE_IRQHandler       ; CAN1 SCE
        DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5
        DCD     TIM1_BRK_IRQHandler       ; TIM1 Break
        DCD     TIM1_UP_IRQHandler        ; TIM1 Update
        DCD     TIM1_TRG_COM_IRQHandler   ; TIM1 Trigger and Commutation
        DCD     TIM1_CC_IRQHandler        ; TIM1 Capture Compare
        DCD     TIM2_IRQHandler           ; TIM2
        DCD     TIM3_IRQHandler           ; TIM3
        DCD     TIM4_IRQHandler           ; TIM4
        DCD     I2C1_EV_IRQHandler        ; I2C1 Event
        DCD     I2C1_ER_IRQHandler        ; I2C1 Error
        DCD     I2C2_EV_IRQHandler        ; I2C2 Event
        DCD     I2C2_ER_IRQHandler        ; I2C2 Error
        DCD     SPI1_IRQHandler           ; SPI1
        DCD     SPI2_IRQHandler           ; SPI2
        DCD     USART1_IRQHandler         ; USART1
        DCD     USART2_IRQHandler         ; USART2
        DCD     USART3_IRQHandler         ; USART3
        DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
        DCD     RTCAlarm_IRQHandler       ; RTC Alarm through EXTI Line
        DCD     USBWakeUp_IRQHandler      ; USB Wakeup from suspend
        DCD     TIM8_BRK_IRQHandler       ; TIM8 Break
        DCD     TIM8_UP_IRQHandler        ; TIM8 Update
        DCD     TIM8_TRG_COM_IRQHandler   ; TIM8 Trigger and Commutation
        DCD     TIM8_CC_IRQHandler        ; TIM8 Capture Compare
        DCD     ADC3_IRQHandler           ; ADC3
        DCD     FSMC_IRQHandler           ; FSMC
        DCD     SDIO_IRQHandler           ; SDIO
        DCD     TIM5_IRQHandler           ; TIM5
        DCD     SPI3_IRQHandler           ; SPI3
        DCD     UART4_IRQHandler          ; UART4
        DCD     UART5_IRQHandler          ; UART5
        DCD     TIM6_IRQHandler           ; TIM6
        DCD     TIM7_IRQHandler           ; TIM7
        DCD     DMA2_Channel1_IRQHandler  ; DMA2 Channel1
        DCD     DMA2_Channel2_IRQHandler  ; DMA2 Channel2
        DCD     DMA2_Channel3_IRQHandler  ; DMA2 Channel3
        DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
        THUMB
        PUBWEAK Reset_Handler
        SECTION .text:CODE:REORDER(2)
Reset_Handler
        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0
        PUBWEAK NMI_Handler
        SECTION .text:CODE:REORDER(1)
NMI_Handler
        B NMI_Handler
        PUBWEAK HardFault_Handler
        SECTION .text:CODE:REORDER(1)
HardFault_Handler
        B HardFault_Handler
        PUBWEAK MemManage_Handler
        SECTION .text:CODE:REORDER(1)
MemManage_Handler
        B MemManage_Handler
        PUBWEAK BusFault_Handler
        SECTION .text:CODE:REORDER(1)
BusFault_Handler
        B BusFault_Handler
        PUBWEAK UsageFault_Handler
        SECTION .text:CODE:REORDER(1)
UsageFault_Handler
        B UsageFault_Handler
        PUBWEAK SVC_Handler
        SECTION .text:CODE:REORDER(1)
SVC_Handler
        B SVC_Handler
        PUBWEAK DebugMon_Handler
        SECTION .text:CODE:REORDER(1)
DebugMon_Handler
        B DebugMon_Handler
        PUBWEAK PendSV_Handler
        SECTION .text:CODE:REORDER(1)
PendSV_Handler
        B PendSV_Handler
        PUBWEAK SysTick_Handler
        SECTION .text:CODE:REORDER(1)
SysTick_Handler
        B SysTick_Handler
        PUBWEAK WWDG_IRQHandler
        SECTION .text:CODE:REORDER(1)
WWDG_IRQHandler
        B WWDG_IRQHandler
        PUBWEAK PVD_IRQHandler
        SECTION .text:CODE:REORDER(1)
PVD_IRQHandler
        B PVD_IRQHandler
        PUBWEAK TAMPER_IRQHandler
        SECTION .text:CODE:REORDER(1)
TAMPER_IRQHandler
        B TAMPER_IRQHandler
        PUBWEAK RTC_IRQHandler
        SECTION .text:CODE:REORDER(1)
RTC_IRQHandler
        B RTC_IRQHandler
        PUBWEAK FLASH_IRQHandler
        SECTION .text:CODE:REORDER(1)
FLASH_IRQHandler
        B FLASH_IRQHandler
        PUBWEAK RCC_IRQHandler
        SECTION .text:CODE:REORDER(1)
RCC_IRQHandler
        B RCC_IRQHandler
        PUBWEAK EXTI0_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI0_IRQHandler
        B EXTI0_IRQHandler
        PUBWEAK EXTI1_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI1_IRQHandler
        B EXTI1_IRQHandler
        PUBWEAK EXTI2_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI2_IRQHandler
        B EXTI2_IRQHandler
        PUBWEAK EXTI3_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI3_IRQHandler
        B EXTI3_IRQHandler
        PUBWEAK EXTI4_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI4_IRQHandler
        B EXTI4_IRQHandler
        PUBWEAK DMA1_Channel1_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel1_IRQHandler
        B DMA1_Channel1_IRQHandler
        PUBWEAK DMA1_Channel2_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel2_IRQHandler
        B DMA1_Channel2_IRQHandler
        PUBWEAK DMA1_Channel3_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel3_IRQHandler
        B DMA1_Channel3_IRQHandler
        PUBWEAK DMA1_Channel4_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel4_IRQHandler
        B DMA1_Channel4_IRQHandler
        PUBWEAK DMA1_Channel5_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel5_IRQHandler
        B DMA1_Channel5_IRQHandler
        PUBWEAK DMA1_Channel6_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel6_IRQHandler
        B DMA1_Channel6_IRQHandler
        PUBWEAK DMA1_Channel7_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA1_Channel7_IRQHandler
        B DMA1_Channel7_IRQHandler
        PUBWEAK ADC1_2_IRQHandler
        SECTION .text:CODE:REORDER(1)
ADC1_2_IRQHandler
        B ADC1_2_IRQHandler
        PUBWEAK USB_HP_CAN1_TX_IRQHandler
        SECTION .text:CODE:REORDER(1)
USB_HP_CAN1_TX_IRQHandler
        B USB_HP_CAN1_TX_IRQHandler
        PUBWEAK USB_LP_CAN1_RX0_IRQHandler
        SECTION .text:CODE:REORDER(1)
USB_LP_CAN1_RX0_IRQHandler
        B USB_LP_CAN1_RX0_IRQHandler
        PUBWEAK CAN1_RX1_IRQHandler
        SECTION .text:CODE:REORDER(1)
CAN1_RX1_IRQHandler
        B CAN1_RX1_IRQHandler
        PUBWEAK CAN1_SCE_IRQHandler
        SECTION .text:CODE:REORDER(1)
CAN1_SCE_IRQHandler
        B CAN1_SCE_IRQHandler
        PUBWEAK EXTI9_5_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI9_5_IRQHandler
        B EXTI9_5_IRQHandler
        PUBWEAK TIM1_BRK_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM1_BRK_IRQHandler
        B TIM1_BRK_IRQHandler
        PUBWEAK TIM1_UP_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM1_UP_IRQHandler
        B TIM1_UP_IRQHandler
        PUBWEAK TIM1_TRG_COM_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM1_TRG_COM_IRQHandler
        B TIM1_TRG_COM_IRQHandler
        PUBWEAK TIM1_CC_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM1_CC_IRQHandler
        B TIM1_CC_IRQHandler
        PUBWEAK TIM2_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM2_IRQHandler
        B TIM2_IRQHandler
        PUBWEAK TIM3_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM3_IRQHandler
        B TIM3_IRQHandler
        PUBWEAK TIM4_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM4_IRQHandler
        B TIM4_IRQHandler
        PUBWEAK I2C1_EV_IRQHandler
        SECTION .text:CODE:REORDER(1)
I2C1_EV_IRQHandler
        B I2C1_EV_IRQHandler
        PUBWEAK I2C1_ER_IRQHandler
        SECTION .text:CODE:REORDER(1)
I2C1_ER_IRQHandler
        B I2C1_ER_IRQHandler
        PUBWEAK I2C2_EV_IRQHandler
        SECTION .text:CODE:REORDER(1)
I2C2_EV_IRQHandler
        B I2C2_EV_IRQHandler
        PUBWEAK I2C2_ER_IRQHandler
        SECTION .text:CODE:REORDER(1)
I2C2_ER_IRQHandler
        B I2C2_ER_IRQHandler
        PUBWEAK SPI1_IRQHandler
        SECTION .text:CODE:REORDER(1)
SPI1_IRQHandler
        B SPI1_IRQHandler
        PUBWEAK SPI2_IRQHandler
        SECTION .text:CODE:REORDER(1)
SPI2_IRQHandler
        B SPI2_IRQHandler
        PUBWEAK USART1_IRQHandler
        SECTION .text:CODE:REORDER(1)
USART1_IRQHandler
        B USART1_IRQHandler
        PUBWEAK USART2_IRQHandler
        SECTION .text:CODE:REORDER(1)
USART2_IRQHandler
        B USART2_IRQHandler
        PUBWEAK USART3_IRQHandler
        SECTION .text:CODE:REORDER(1)
USART3_IRQHandler
        B USART3_IRQHandler
        PUBWEAK EXTI15_10_IRQHandler
        SECTION .text:CODE:REORDER(1)
EXTI15_10_IRQHandler
        B EXTI15_10_IRQHandler
        PUBWEAK RTCAlarm_IRQHandler
        SECTION .text:CODE:REORDER(1)
RTCAlarm_IRQHandler
        B RTCAlarm_IRQHandler
        PUBWEAK USBWakeUp_IRQHandler
        SECTION .text:CODE:REORDER(1)
USBWakeUp_IRQHandler
        B USBWakeUp_IRQHandler
        PUBWEAK TIM8_BRK_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM8_BRK_IRQHandler
        B TIM8_BRK_IRQHandler
        PUBWEAK TIM8_UP_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM8_UP_IRQHandler
        B TIM8_UP_IRQHandler
        PUBWEAK TIM8_TRG_COM_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM8_TRG_COM_IRQHandler
        B TIM8_TRG_COM_IRQHandler
        PUBWEAK TIM8_CC_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM8_CC_IRQHandler
        B TIM8_CC_IRQHandler
        PUBWEAK ADC3_IRQHandler
        SECTION .text:CODE:REORDER(1)
ADC3_IRQHandler
        B ADC3_IRQHandler
        PUBWEAK FSMC_IRQHandler
        SECTION .text:CODE:REORDER(1)
FSMC_IRQHandler
        B FSMC_IRQHandler
        PUBWEAK SDIO_IRQHandler
        SECTION .text:CODE:REORDER(1)
SDIO_IRQHandler
        B SDIO_IRQHandler
        PUBWEAK TIM5_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM5_IRQHandler
        B TIM5_IRQHandler
        PUBWEAK SPI3_IRQHandler
        SECTION .text:CODE:REORDER(1)
SPI3_IRQHandler
        B SPI3_IRQHandler
        PUBWEAK UART4_IRQHandler
        SECTION .text:CODE:REORDER(1)
UART4_IRQHandler
        B UART4_IRQHandler
        PUBWEAK UART5_IRQHandler
        SECTION .text:CODE:REORDER(1)
UART5_IRQHandler
        B UART5_IRQHandler
        PUBWEAK TIM6_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM6_IRQHandler
        B TIM6_IRQHandler
        PUBWEAK TIM7_IRQHandler
        SECTION .text:CODE:REORDER(1)
TIM7_IRQHandler
        B TIM7_IRQHandler
        PUBWEAK DMA2_Channel1_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA2_Channel1_IRQHandler
        B DMA2_Channel1_IRQHandler
        PUBWEAK DMA2_Channel2_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA2_Channel2_IRQHandler
        B DMA2_Channel2_IRQHandler
        PUBWEAK DMA2_Channel3_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA2_Channel3_IRQHandler
        B DMA2_Channel3_IRQHandler
        PUBWEAK DMA2_Channel4_5_IRQHandler
        SECTION .text:CODE:REORDER(1)
DMA2_Channel4_5_IRQHandler
        B DMA2_Channel4_5_IRQHandler
        END
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/board/stm32v5_led.c
New file
@@ -0,0 +1,49 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åcontiki²Ù×÷ϵͳLEDÉ豸²Ù×÷º¯Êý½Ó¿Ú
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
#include "stm32v5_led.h"
static led_gpio_t   leds_gpio[MAX_LED] =
{
        {LED1, GPIOB, GPIO_Pin_5}, /* LED1 ÓõÄGPB5 */
        {LED2, GPIOD, GPIO_Pin_6}, /* LED2 ÓõÄGPD6 */
        {LED3, GPIOD, GPIO_Pin_3}, /* LED3 ÓõÄGPD3 */
};
void init_led_gpio(void)
{
    int                i;
    GPIO_InitTypeDef   GPIO_InitStructure;
    /* Ê¹ÄÜPBºÍPD×é GPIOµÄʱÖÓ */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);
    /*ÉèÖàPB5(LED1), PD6(LED2), PD3(LED3)Ϊ GPIO Êä³öÍÆÃâģʽ£¬¿ÚÏß·­×ªËÙ¶ÈΪ50MHz */
    for(i=0; i<MAX_LED; i++)
    {
        /*ÉèÖàPB5(LED1)Ϊ GPIO Êä³öÍÆÃâģʽ£¬¿ÚÏß·­×ªËÙ¶ÈΪ50MHz */
        GPIO_InitStructure.GPIO_Pin = leds_gpio[i].pin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(leds_gpio[i].group, &GPIO_InitStructure);
  }
}
void turn_led(int which, int cmd)
{
   if(which<0 || which> MAX_LED )
         return;
     if(OFF == cmd)
         GPIO_ResetBits(leds_gpio[which].group, leds_gpio[which].pin);
     else
         GPIO_SetBits(leds_gpio[which].group, leds_gpio[which].pin);
}
src/IAR_project/stm32_ov7670/board/stm32v5_led.h
New file
@@ -0,0 +1,37 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åLEDÉ豸²Ù×÷º¯Êý
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
#ifndef __STM32V5_LED_H
#define __STM32V5_LED_H
#include"stm32f10x.h"
#define ON           1
#define OFF          0
enum
{
  LED1 = 0,
    LED2,
    LED3,
    MAX_LED,
};
typedef struct led_gpio_s
{
    int                 num;    /* LED±àºÅ */
    GPIO_TypeDef        *group; /* LEDʹÓõÄGPIOÔÚÄÄÒ»×é: GPIOB or GPIOD */
  uint16_t            pin;    /* LEDʹÓõÄGPIO×éÖеÄÄÇÒ»¸öpin: GPIO_Pin_x */
} led_gpio_t;
extern void init_led_gpio(void);
extern void turn_led(int which, int cmd);
#endif
src/IAR_project/stm32_ov7670/board/stm32v5_ov7670.c
New file
@@ -0,0 +1,281 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åOV7670µÄ¼Ä´æÆ÷±í£¬Ö¡Í¬²½ÖжÏÅäÖã¬
*              ÒÔ¼°ÉãÏñÍ·OV7670+FIFOµÄÒý½Å³õʼ»¯£º
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
/* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
*| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5Ô­Àíͼ.pdf>
*+---------------------------------------+------------------------------+
*|   CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷      |     STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷    |
*+---------------------------------------+------------------------------+
*| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å)   |        3.3V                  |
*| Pin2-GND                              |        GND                   |
*| Pin3-SCL(SCCB_SCL²»´øÉÏÀ­µç×è)        |        PE2                   |
*| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀ­µç×è)     |        PE3                   |
*| Pin5-VSYNC(OV7670  Ö¡Í¬²½ÐźÅ)        |        PE4                   |
*| Pin6-HREF(OV7670  ÐÐͬ²½ÐźÅ)         |        NC                    |
*| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ |        PE5                   |
*| Pin8-XCLK(NC/RE# ¿Õ½Å)                |        NC                    |
*| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î»              |        PE6                   |
*| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ |        GND                   |
*| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ             |        PD12                  |
*| Pin12-GND                             |        GND                   |
*|                                       |                              |
*| Pin13-D0     FIFOÊý¾Ý¿ÚÊä³öBIT0       |        PC0                   |
*| Pin14-D1     FIFOÊý¾Ý¿ÚÊä³öBIT1       |        PC1                   |
*| Pin15-D2     FIFOÊý¾Ý¿ÚÊä³öBIT2       |        PC2                   |
*| Pin16-D3     FIFOÊý¾Ý¿ÚÊä³öBIT3       |        PC3                   |
*| Pin17-D4     FIFOÊý¾Ý¿ÚÊä³öBIT4       |        PC4                   |
*| Pin18-D5     FIFOÊý¾Ý¿ÚÊä³öBIT5       |        PC5                   |
*| Pin19-D6     FIFOÊý¾Ý¿ÚÊä³öBIT6       |        PC6                   |
*| Pin20-D7     FIFOÊý¾Ý¿ÚÊä³öBIT7       |        PC7                   |
*+------------------+-----------------+---------------------------------+
*/
#include "stm32f10x.h"
#include "stm32f10x_exti.h"
#include "misc.h"
#include "ov7670_reg.h"
#include "stm32v5_ov7670.h"
#include "stm32v5_sccb.h"
#include "stm32v5_systick.h"
#include "lcd_r61509v.h"
/* g_OV7670_VSYNCÓÃÀ´±êʾһ֡µÄ¿ªÊ¼ºÍ½áÊø:
 * OV7670µÄÊý¾ÝÒÔVGAʱÐòÊä³ö,ÔÚ¸ÃʱÐòÖÐVSYNCµÄϽµÑرíʾһ֡µÄÊý¾Ý¿ªÊ¼,¶øÉÏÉýÑØ±íʾһ֡µÄÊý¾Ý½áÊø.
 * ËùÒÔÎÒÃǽ«VSYNC¹Ü½ÅPE4ÅäÖóÉEXTI4ÉÏÉýÑØ´¥·¢Ä£Ê½.ÔÚEXTI4µÄÖжϴ¦Àí³ÌÐòEXTI4_IRQHandler()ÖÐ,µÚÒ»´Î
 * ½øÈëÖжϵÄʱºò,˵Ã÷ÉÏÒ»Ö¡Êý¾ÝÒѾ­½áÊø(ÕâÒ²Òâζ×ÅÕâÒ»Ö¡Êý¾ÝµÄ¿ªÊ¼),ÎÒÃÇ¿ªÊ¼Ê¹ÄÜÉãÏñÍ·Êý¾ÝдÈëFIFO
 * ²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ1;µ±µÚ¶þ´Î½øÈëÖжϵÄʱºò,˵Ã÷ÕâÒ»Ö¡Êý¾ÝµÄ´«ÊäÒѾ­½áÊø,ÎÒÃǾͽûÖ¹
 * ÉãÏñÍ·Êý¾ÝдÈëFIFO²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ2;
 * ÔÚÓ¦ÓóÌÐòÖÐ,ÒªÅжÏg_OV7670_VSYNCµÄÖµÊÇ·ñΪ2,Èç¹ûΪ2Ôò¿ÉÒÔ´ÓFIFOÖжÁÈ¡Êý¾Ý,¶ÁÍêºó¸üÐÂÆä״ֵ̬Ϊ0.
 */
uint8_t g_OV7670_VSYNC = 0;
static cam_fifo_pin_t   cam_fifo_pins[CAM_FIFO_PIN_MAX] =
{
        {CAM_FIFO_PIN_RRST, GPIOE, GPIO_Pin_6}, /* OV7670 FIFO¶ÁµØÖ·¸´Î», PE6*/
        {CAM_FIFO_PIN_RCLK, GPIOD, GPIO_Pin_12}, /* OV7670 FIFO¶ÁʱÖÓ, PD12 */
        {CAM_FIFO_PIN_WE,   GPIOE, GPIO_Pin_5},   /* OV7670 FIFOдÔÊÐí, PE5 */
};
void set_ov7670_fifo_pin(int which, int level)
{
   if(which<0 || which> CAM_FIFO_PIN_MAX )
         return;
     if(LEVEL_LOW == level)
         GPIO_ResetBits(cam_fifo_pins[which].group, cam_fifo_pins[which].pin);
     else
         GPIO_SetBits(cam_fifo_pins[which].group, cam_fifo_pins[which].pin);
}
void ov7670_fifo_read_prepare(void)
{
    set_ov7670_fifo_pin(CAM_FIFO_PIN_RRST, LEVEL_LOW);
    set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_LOW);
    set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_HIGH);
    set_ov7670_fifo_pin(CAM_FIFO_PIN_RRST, LEVEL_HIGH);
    set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_LOW);
    set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_HIGH);
}
/*³õʼ»¯ÉãÏñÍ·Ä£¿éʹÓõÄFIFO(AL422)Ïà¹ØÒý½Å */
void init_ov7670_fifo_pin(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* FIFO_RCLK : PD12 */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
    /* FIFO_VSYNC : PE4 */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  /* FIFO_WEN:PE5  FIFO_RRST:PE6 */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 ;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  /* FIFO D[0-7] */
  GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
                                  | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  /* PE0-VS-XRST, must set to GPIO output mode here */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/* ½«VSYNCÁ¬½ÓµÄPE4¹Ü½Å³õʼ»¯ÎªÍⲿÖжÏEXTI4ģʽ£¬²¢ÉèÖÃΪϽµÑØ´¥·¢:
 * STM32ÉÏËùÓеÄGPIO¶¼ÒýÈëµ½EXTIÍⲿÖжÏÏßÉÏ£¬Ê¹µÃËùÓеÄGPIO¶¼ÄÜ×÷ΪÍⲿÖжϵÄ
 * ÊäÈëÔ´.ÆäÖÐPA0~PG0Á¬µ½EXTI0ÉÏ... PA4~PG4Á¬µ½EXT4ÉÏ...PA15~PG15Á¬µ½EXTI15ÉÏ
 * Í¨Ò»Ê±¿ÌEXTIxÖ»ÄÜÏìÓ¦Ò»¸ö¶Ë¿ÚµÄʼþ´¥·¢,µ«¿ÉÒÔ·Öʱ¸´Óá£Ëü¿ÉÒÔÅäÖÃΪÉÏÉýÑØ,
 * Ï½µÑØ»òË«±ßÑØ´¥·¢¡£
 */
void init_ov7670_vsync(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  /* ³õʼ»¯PE4¿ÚΪGPIOÊäÈëģʽ */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  /* ½«PE4(VSYNC)¹Òµ½³õʼ»¯ÎªEXTI4ģʽ,²¢Ê¹ÓÃÉÏÉýÑØ´¥·¢:
     * OV7670ʹÓÃVGAʱÐò´«ÊäÊý¾Ý,VSYNCµÄϽµÑرíʾһ֡Êý¾Ý
     * (¼´Ò»¸±Í¼Ïñ)µÄ´«Ê俪ʼ,VSYNNµÄÉÏÉýÑØ±íʾһ֡Êý¾ÝµÄ´«Êä½áÊø */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);
  EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;            //ÖжÏģʽ
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    //ÉÏÉýÑØ´¥·¢
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  /* ·ÖÅäVSYNCÖжÏÓÅÏȼ¶ */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn ;                  //ÍⲿÖжÏ4
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    //ÇÀÕ¼ÓÅÏȼ¶ 0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;              //×ÓÓÅÏȼ¶0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                    //ʹÄÜ
  NVIC_Init(&NVIC_InitStructure);
}
void EXTI4_IRQHandler(void)
{
    if( RESET != EXTI_GetITStatus(EXTI_Line4) )
    {
        /*µÚÒ»´ÎVSYNCµÄϽµÑص½À´,˵Ã÷ÕâʱºòÉÏÒ»Ö¡Êý¾ÝÒѾ­½áÊø,
          Ò²¾ÍÊÇÕâÒ»Ö¡Êý¾Ý¿ªÊ¼.Õâʱ¿ªÊ¼ÈÃÉãÏñÍ·µÄÊý¾Ýдµ½FIFOÖÐÈ¥*/
        if( 0==g_OV7670_VSYNC )
        {
            FIFO_WE_H();  /* À­¸ßʹFIFOдʹÄÜ */
            g_OV7670_VSYNC = 1;
            FIFO_WE_H();  /* À­¸ßʹFIFOдʹÄÜ */
        }
        /*µÚ¶þ´ÎVSYNCµÄϽµÑص½À´,˵Ã÷ÕâÒ»Ö¡µÄÊý¾Ý´«ÊäÒѾ­½áÊø,´ËʱFIFO
          ÀïÃæ¾ÍÒѾ­»º³åºÃOV7670д½øÀ´µÄÍêÕûµÄRGB565 320*240µÄͼÏóÊý¾Ý,
          ÏÖÔھͽûÖ¹ÉãÏñÍ·µÄÊý¾ÝдÈëµ½FIFOÖÐÈ¥,²¢¸üÐÂg_OV7670_VSYNC*/
        else if( 1==g_OV7670_VSYNC )
        {
            FIFO_WE_L();  /* À­µÍʹFIFOдֹͣ */
            g_OV7670_VSYNC = 2;
    }
        /*ÔÚÓ¦ÓóÌÐòÖÐÑ­»·¼ì²â±êÖ¾±äÁ¿,g_OV7670_VSYNC=2ʱ¾Í¿ÉÒÔ¶ÁFIFOÖеÄÊý¾Ý,
          ¶ÁÈ¡ÍêFIFOÖеÄÊý¾Ýºó,Ó¦¸ÃÁ¢¿Ì½«g_OV7670_VSYNCÉèÖÃΪ0 */
        EXTI_ClearITPendingBit(EXTI_Line4);
  }
}
int ov_write_regs(const ov_regval_t *pReglist )
{
  const ov_regval_t *pNext = pReglist ;
  while ( !((pNext->reg == OV_REG_TERM) && (pNext->val == OV_VAL_TERM)) )
  {
      if(pNext->reg == 0xFE)
      {
          msleep(5);
      }
      else
      {
                if( !I2C_WriteByte(pNext->reg, pNext->val, OV7670_ADDR) )
                {
                    return 1;
                }
      }
      pNext++ ;
  }
    return 0;
}
/* ³õʼ»¯OV7670ÄÚ²¿¸÷¸ö¼Ä´æÆ÷ */
int init_ov7670_reg(int output_fmt)
{
  uint8_t        ID_code = 0;
    /*³õʼ»¯PE2/PE3Á½¸ö¹Ü½Å,ËûÃÇÓÃÀ´GPIOÄ£ÄâI2C×ÜÏß*/
  init_sccb_gpio();
    /* Í¨¹ýдOV7670µÄCOM7¼Ä´æÆ÷µÄbit[7]À´ÖØÆôËü */
  if( !I2C_WriteByte(OV7670_REG_COM7, 1<<7, OV7670_ADDR) )
  {
     return 1 ;
  }
  msleep(15);
    /* ´Ó¼Ä´æÆ÷ÖжÁ³ö²úÆ·ID²¢ÅжÏÊÇ·ñÊÇOV7670µÄID */
  if( !I2C_ReadByte(&ID_code, 1, OV7670_REG_VERID, OV7670_ADDR) )
  {
       return 2;
  }
  if(ID_code != OV7670_VERID)
  {
         return 3;
  }
    /* ³õʼ»¯OV7670µÄÆäËû¼Ä´æÆ÷ */
    ov_write_regs(ov7670_default_regs);
    switch(output_fmt)
    {
            case FMT_QVGA_YUV422:
                ov_write_regs(ov7670_fmt_qvga_yuv422);
                break;
            case FMT_QVGA_RGB565:
                ov_write_regs(ov7670_fmt_qvga_rgb565);
                break;
            case FMT_QVGA_RGB444:
                ov_write_regs(ov7670_fmt_qvga_rgb444);
                break;
            case FMT_QVGA_RAWRGB:
                ov_write_regs(ov7670_fmt_qvga_raw);
                break;
    }
  return 0;
}
int OV7670_Initialize(int output_fmt)
{
    init_ov7670_fifo_pin();
    /* ±ØÐëÔÚÕ⸴λһÏÂLCD */
  LCD_RST_SET(0);
    msleep(200);
  LCD_RST_SET(1);
    while( 0!=init_ov7670_reg(output_fmt) )   ;  /* Èç¹û¼Ä´æÆ÷³õʼ»¯Ê§°ÜÔò»áËÀÔÚÕâÀï */
    init_ov7670_vsync();
    msleep(50);
    return 0;
}
src/IAR_project/stm32_ov7670/board/stm32v5_ov7670.h
New file
@@ -0,0 +1,128 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åOV7670µÄ¼Ä´æÆ÷±í£¬Ö¡Í¬²½ÖжÏÅäÖã¬
*              ÒÔ¼°ÉãÏñÍ·OV7670+FIFO(AL422B)µÄÒý½Å³õʼ»¯£º
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
/* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
*| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5Ô­Àíͼ.pdf>
*+---------------------------------------+------------------------------+
*|   CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷      |     STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷    |
*+---------------------------------------+------------------------------+
*| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å)   |        3.3V                  |
*| Pin2-GND                              |        GND                   |
*| Pin3-SCL(SCCB_SCL²»´øÉÏÀ­µç×è)        |        PE2                   |
*| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀ­µç×è)     |        PE3                   |
*| Pin5-VSYNC(OV7670  Ö¡Í¬²½ÐźÅ)        |        PE4                   |
*| Pin6-HREF(OV7670  ÐÐͬ²½ÐźÅ)         |        NC                    |
*| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ |        PE5                   |
*| Pin8-XCLK(NC/RE# ¿Õ½Å)                |        NC                    |
*| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î»              |        PE6                   |
*| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ |        GND                   |
*| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ             |        PD12                  |
*| Pin12-GND                             |        GND                   |
*|                                       |                              |
*| Pin13-D0     FIFOÊý¾Ý¿ÚÊä³öBIT0       |        PC0                   |
*| Pin14-D1     FIFOÊý¾Ý¿ÚÊä³öBIT1       |        PC1                   |
*| Pin15-D2     FIFOÊý¾Ý¿ÚÊä³öBIT2       |        PC2                   |
*| Pin16-D3     FIFOÊý¾Ý¿ÚÊä³öBIT3       |        PC3                   |
*| Pin17-D4     FIFOÊý¾Ý¿ÚÊä³öBIT4       |        PC4                   |
*| Pin18-D5     FIFOÊý¾Ý¿ÚÊä³öBIT5       |        PC5                   |
*| Pin19-D6     FIFOÊý¾Ý¿ÚÊä³öBIT6       |        PC6                   |
*| Pin20-D7     FIFOÊý¾Ý¿ÚÊä³öBIT7       |        PC7                   |
*+------------------+-----------------+---------------------------------+
*/
#ifndef __STM32V5_OV7670_H
#define __STM32V5_OV7670_H
#define LEVEL_HIGH           1
#define LEVEL_LOW            0
#define QVGA_XPIX                         320
#define QVGA_YPIX                         240
#define OV7670_OUT_XPIX                   QVGA_XPIX
#define OV7670_OUT_YPIX                   QVGA_YPIX
#define OV7670_OUT_MAX_PIXS               (OV7670_OUT_XPIX*OV7670_OUT_YPIX)
#define OV7670_ADDR                       0x42   /* I2C¶ÁµØÖ· */
#define OV7670_VERID                      0x73
#define OV7670_REG_NUM                    114
#define OV7670_REG_VERID                  0x0B
#define OV7670_REG_COM7                   0x12
#define PORT_VSYNC_CMOS                   GPIOE
#define RCC_APB2Periph_PORT_VSYNC_CMOS    RCC_APB2Periph_GPIOE
#define PIN_VSYNC_CMOS                    GPIO_Pin_4
#define EXTI_LINE_VSYNC_CMOS              EXTI_Line4
#define PORT_SOURCE_VSYNC_CMOS            GPIO_PortSourceGPIOE
#define PIN_SOURCE_VSYNC_CMOS             GPIO_PinSource4
//#define FIFO_CS_PIN                       GPIO_Pin_0   /* FIFOƬѡ */
#define FIFO_RRST_PIN                     GPIO_Pin_6   /* FIFO¶ÁµØÖ·¸´Î», PE6*/
#define FIFO_RCLK_PIN                     GPIO_Pin_12  /* FIFO¶ÁʱÖÓ, PD12 */
#define FIFO_WE_PIN                       GPIO_Pin_5   /* FIFOдÔÊÐí, PE5 */
/* FIFO Pin operation macro function */
#define FIFO_RRST_H()                     GPIOE->BSRR =FIFO_RRST_PIN
#define FIFO_RRST_L()                     GPIOE->BRR  =FIFO_RRST_PIN
#define FIFO_RCLK_H()                     GPIOD->BSRR =FIFO_RCLK_PIN
#define FIFO_RCLK_L()                     GPIOD->BRR  =FIFO_RCLK_PIN
#define FIFO_WE_H()                       GPIOE->BSRR =FIFO_WE_PIN   /*À­¸ßʹFIFOдʹÄÜ*/
#define FIFO_WE_L()                       GPIOE->BRR  =FIFO_WE_PIN   /*À­¸ßʹFIFOд½ûÖ¹*/
#define OV7670_FIFO_READ_PREPARE() \
do{ \
       FIFO_RRST_L(); \
       FIFO_RCLK_L(); \
       FIFO_RCLK_H(); \
       FIFO_RRST_H(); \
       FIFO_RCLK_L(); \
       FIFO_RCLK_H(); \
    }while(0)
enum
{
  CAM_FIFO_PIN_RRST = 0,
    CAM_FIFO_PIN_RCLK,
    CAM_FIFO_PIN_WE,
    CAM_FIFO_PIN_MAX,
};
enum
{
  FMT_QVGA_YUV422,
    FMT_QVGA_RGB565,
    FMT_QVGA_RGB444,
    FMT_QVGA_RAWRGB,
};
typedef struct cam_fifo_pin_s
{
    int                 num;    /* LED±àºÅ */
    GPIO_TypeDef        *group; /* LEDʹÓõÄGPIOÔÚÄÄÒ»×é: GPIOB or GPIOD */
  uint16_t            pin;    /* LEDʹÓõÄGPIO×éÖеÄÄÇÒ»¸öpin: GPIO_Pin_x */
} cam_fifo_pin_t;
/* g_OV7670_VSYNCÓÃÀ´±êʾһ֡µÄ¿ªÊ¼ºÍ½áÊø:
 * OV7670µÄÊý¾ÝÒÔVGAʱÐòÊä³ö,ÔÚ¸ÃʱÐòÖÐVSYNCµÄϽµÑرíʾһ֡µÄÊý¾Ý¿ªÊ¼,¶øÉÏÉýÑØ±íʾһ֡µÄÊý¾Ý½áÊø.
 * ËùÒÔÎÒÃǽ«VSYNC¹Ü½ÅPE4ÅäÖóÉEXTI4ÉÏÉýÑØ´¥·¢Ä£Ê½.ÔÚEXTI4µÄÖжϴ¦Àí³ÌÐòEXTI4_IRQHandler()ÖÐ,µÚÒ»´Î
 * ½øÈëÖжϵÄʱºò,˵Ã÷ÉÏÒ»Ö¡Êý¾ÝÒѾ­½áÊø(ÕâÒ²Òâζ×ÅÕâÒ»Ö¡Êý¾ÝµÄ¿ªÊ¼),ÎÒÃÇ¿ªÊ¼Ê¹ÄÜÉãÏñÍ·Êý¾ÝдÈëFIFO
 * ²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ1;µ±µÚ¶þ´Î½øÈëÖжϵÄʱºò,˵Ã÷ÕâÒ»Ö¡Êý¾ÝµÄ´«ÊäÒѾ­½áÊø,ÎÒÃǾͽûÖ¹
 * ÉãÏñÍ·Êý¾ÝдÈëFIFO²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ2;
 * ÔÚÓ¦ÓóÌÐòÖÐ,ÒªÅжÏg_OV7670_VSYNCµÄÖµÊÇ·ñΪ2,Èç¹ûΪ2Ôò¿ÉÒÔ´ÓFIFOÖжÁÈ¡Êý¾Ý,¶ÁÍêºó¸üÐÂÆä״ֵ̬Ϊ0.
 */
extern uint8_t g_OV7670_VSYNC;
extern void set_ov7670_fifo_pin(int which, int level);
extern void ov7670_fifo_read_prepare(void);
extern int OV7670_Initialize(int output_fmt);
#endif
src/IAR_project/stm32_ov7670/board/stm32v5_sccb.c
New file
@@ -0,0 +1,339 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åGPIOÄ£ÄâÉãÏñÍ·SCCB(Serial Camera Control Bus)µÄʵÏÖ,
*              SCCBµÄ¹¤×÷·½Ê½ÓëI2CÊ®·ÖÀàËÆ£¬ËûʹÓÃOV¹«Ë¾¶¨ÒåµÄ3Ïß´®ÐÐÉãÏñÍ·¿ØÖÆ×ÜÏߣ¬
*              ¿ÉÒÔ¿ØÖƴ󲿷ÖOVϵÁÐͼÐδ«¸ÐÆ÷¡£SCCBÒ²¿ÉÒÔ¹¤×÷ÔÚ2Ïß´®ÐÐģʽ(SIOCÓëSIOD).
*              STM32ÉÏʹÓÃPE2ºÍPE3·Ö±ðÁ¬½ÓOV7670µÄSCCBʱÖÓ¿ÚºÍÊý¾Ý¿Ú,¸Ã´úÂëÖ÷ҪʹÓÃ
*              PE2ºÍPE3µÄGPIO¿ÚÄ£ÄâSCCB(Ò²¼´I2C)×ÜÏßЭÒé
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
/* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
*| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5Ô­Àíͼ.pdf>
*+---------------------------------------+------------------------------+
*|   CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷      |     STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷    |
*+---------------------------------------+------------------------------+
*| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å)   |        3.3V                  |
*| Pin2-GND                              |        GND                   |
*| Pin3-SCL(SCCB_SCL²»´øÉÏÀ­µç×è)        |        PE2                   |
*| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀ­µç×è)     |        PE3                   |
*| Pin5-VSYNC(OV7670  Ö¡Í¬²½ÐźÅ)        |        PE4                   |
*| Pin6-HREF(OV7670  ÐÐͬ²½ÐźÅ)         |        NC                    |
*| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ |        PE5                   |
*| Pin8-XCLK(NC/RE# ¿Õ½Å)                |        NC                    |
*| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î»              |        PE6                   |
*| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ |        GND                   |
*| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ             |        PD12                  |
*| Pin12-GND                             |        GND                   |
*|                                       |                              |
*| Pin13-D0     FIFOÊý¾Ý¿ÚÊä³öBIT0       |        PC0                   |
*| Pin14-D1     FIFOÊý¾Ý¿ÚÊä³öBIT1       |        PC1                   |
*| Pin15-D2     FIFOÊý¾Ý¿ÚÊä³öBIT2       |        PC2                   |
*| Pin16-D3     FIFOÊý¾Ý¿ÚÊä³öBIT3       |        PC3                   |
*| Pin17-D4     FIFOÊý¾Ý¿ÚÊä³öBIT4       |        PC4                   |
*| Pin18-D5     FIFOÊý¾Ý¿ÚÊä³öBIT5       |        PC5                   |
*| Pin19-D6     FIFOÊý¾Ý¿ÚÊä³öBIT6       |        PC6                   |
*| Pin20-D7     FIFOÊý¾Ý¿ÚÊä³öBIT7       |        PC7                   |
*+------------------+-----------------+---------------------------------+
*/
#include "stm32v5_sccb.h"
/* ÅäÖÃÁ¬½ÓOV7670µÄSCCB_SCL(PE2)ºÍSCCB_SDA(PE3)ΪGPIOģʽģÄâ*/
void init_sccb_gpio(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
  /* Configure I2C pins: PE2->SCL and PE3->SDA */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;//
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP ;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/* I2C ×ÜÏßʱÖÓÑÓʱº¯Êý */
static void I2C_delay(void)
{
   unsigned short i = 200; /* ÕâÀï¿ÉÒÔÓÅ»¯ËÙ¶È */
   while(i)
   {
     i--;
   }
}
/* I2C×ÜÏß¿ªÊ¼ÐźŠ*/
static int I2C_Start(void)
{
    SDA_H;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SDA_L;
    I2C_delay();
  SCL_L;
    I2C_delay();
    return ENABLE;
}
/* I2C×ÜÏßÍ£Ö¹ÐźŠ*/
static void I2C_Stop(void)
{
    SDA_L;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SDA_H;
    I2C_delay();
}
/* I2C×ÜÏßSDAÊäÈë */
 void I2C_IN(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
  GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //GPIO_Mode_Out_OD;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/* I2C×ÜÏßSDAÊä³ö */
void I2C_OUT(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;//
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/* I2C×ÜÏßACKÐźŠ*/
static void I2C_Ack(void)
{
    SCL_L;
    I2C_delay();
    SDA_L;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SCL_L;
    I2C_delay();
}
/* I2C×ÜÏßNAKÐźŠ*/
static void I2C_NoAck(void)
{
    SDA_H;
    I2C_delay();
    SCL_H;
    I2C_delay();
    SCL_L;
    I2C_delay();
    SDA_L;
    I2C_delay();
}
/* I2C×ÜÏߵȴýACKÐźŠ*/
static int I2C_WaitAck(void)
{
    I2C_IN();
    I2C_delay();
    SCL_H;
    I2C_delay();
    if(SDA_read)
    {
      SCL_L;
      return DISABLE;
    }
    SCL_L;
    I2C_delay();
    I2C_OUT();
    I2C_delay();
    return ENABLE;
}
/* I2C×ÜÏß·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý, Êý¾Ý´Ó¸ßλµ½µÍλ */
static void I2C_SendByte(uint8_t SendByte)
{
    uint8_t i=8;
    while(i--)
    {
      //SCL_L;
      //I2C_delay();
      if(SendByte&0x80)
                SDA_H;
      else
                SDA_L;
      SendByte<<=1;
      I2C_delay();
        SCL_H;
      I2C_delay();
        SCL_L;
        I2C_delay();
    }
}
/* I2C×ÜÏß½ÓÊÕÒ»¸ö×Ö½ÚÊý¾Ý, Êý¾Ý´Ó¸ßλµ½µÍλ */
static int I2C_ReceiveByte(void)
{
    uint8_t i=8;
    uint8_t ReceiveByte=0;
    SDA_H;
    while(i--)
    {
      ReceiveByte<<=1;
      SCL_L;
      I2C_delay();
            SCL_H;
            I2C_IN();
      I2C_delay();
            if(SDA_read)
      {
        ReceiveByte|=0x01;
      }
    }
    SCL_L;
        I2C_OUT();
    return ReceiveByte;
}
/*******************************************************************************
* Function Name  : I2C_WriteByte
* Description    : Ð´Ò»×Ö½ÚÊý¾Ý
* Input          : - WriteAddress: ´ýдÈëµØÖ·
*                  - SendByte: ´ýдÈëÊý¾Ý
*                  - DeviceAddress: Æ÷¼þÀàÐÍ
* Output         : None
* Return         : ·µ»ØÎª:=1³É¹¦Ð´Èë,=0ʧ°Ü
* Attention         : None
*******************************************************************************/
int I2C_WriteByte( uint16_t WriteAddress , uint8_t SendByte , uint8_t DeviceAddress)
{
    if(!I2C_Start())
        {
        return DISABLE;
        }
        I2C_delay();
    I2C_SendByte( DeviceAddress );                    /* Æ÷¼þµØÖ· */
    if( !I2C_WaitAck() )
        {
            I2C_Stop();
            return DISABLE;
        }
        I2C_delay();
    I2C_SendByte((uint8_t)(WriteAddress & 0x00FF));   /* ÉèÖÃµÍÆðʼµØÖ· */
    I2C_WaitAck();
        I2C_delay();
    I2C_SendByte(SendByte);
    I2C_WaitAck();
        I2C_delay();
    I2C_Stop();
        I2C_delay();
    return ENABLE;
}
/*******************************************************************************
* Function Name  : I2C_ReadByte
* Description    : ¶Áȡһ´®Êý¾Ý
* Input          : - pBuffer: ´æ·Å¶Á³öÊý¾Ý
*                  - length: ´ý¶Á³ö³¤¶È
*                  - ReadAddress: ´ý¶Á³öµØÖ·
*                  - DeviceAddress: Æ÷¼þÀàÐÍ
* Output         : None
* Return         : ·µ»ØÎª:=1³É¹¦¶ÁÈë,=0ʧ°Ü
* Attention         : None
*******************************************************************************/
int I2C_ReadByte(uint8_t* pBuffer,   uint16_t length,   uint8_t ReadAddress,  uint8_t DeviceAddress)
{
    if(!I2C_Start())
        {
        return DISABLE;
        }
    I2C_SendByte( DeviceAddress );         /* Æ÷¼þµØÖ· */
    if( !I2C_WaitAck() )
        {
            I2C_Stop();
            return DISABLE;
        }
    I2C_SendByte( ReadAddress );           /* ÉèÖÃµÍÆðʼµØÖ· */
    I2C_WaitAck();
    I2C_Stop();
    if(!I2C_Start())
        {
            return DISABLE;
        }
    I2C_SendByte( DeviceAddress + 1 );     /* Æ÷¼þµØÖ· */
    if(!I2C_WaitAck())
        {
            I2C_Stop();
            return DISABLE;
        }
    while(length)
    {
      *pBuffer = I2C_ReceiveByte();
      if(length == 1)
            {
                I2C_NoAck();
            }
      else
            {
                I2C_Ack();
            }
      pBuffer++;
      length--;
    }
    I2C_Stop();
    return ENABLE;
}
src/IAR_project/stm32_ov7670/board/stm32v5_sccb.h
New file
@@ -0,0 +1,61 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åGPIOÄ£ÄâÉãÏñÍ·SCCB(Serial Camera Control Bus)µÄʵÏÖ,
*              SCCBµÄ¹¤×÷·½Ê½ÓëI2CÊ®·ÖÀàËÆ£¬ËûʹÓÃOV¹«Ë¾¶¨ÒåµÄ3Ïß´®ÐÐÉãÏñÍ·¿ØÖÆ×ÜÏߣ¬
*              ¿ÉÒÔ¿ØÖƴ󲿷ÖOVϵÁÐͼÐδ«¸ÐÆ÷¡£SCCBÒ²¿ÉÒÔ¹¤×÷ÔÚ2Ïß´®ÐÐģʽ(SIOCÓëSIOD).
*              STM32ÉÏʹÓÃPE2ºÍPE3·Ö±ðÁ¬½ÓOV7670µÄSCCBʱÖÓ¿ÚºÍÊý¾Ý¿Ú,¸Ã´úÂëÖ÷ҪʹÓÃ
*              PE2ºÍPE3µÄGPIO¿ÚÄ£ÄâSCCB(Ò²¼´I2C)×ÜÏßЭÒé
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
/* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
*| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5Ô­Àíͼ.pdf>
*+---------------------------------------+------------------------------+
*|   CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷      |     STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷    |
*+---------------------------------------+------------------------------+
*| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å)   |        3.3V                  |
*| Pin2-GND                              |        GND                   |
*| Pin3-SCL(SCCB_SCL²»´øÉÏÀ­µç×è)        |        PE2                   |
*| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀ­µç×è)     |        PE3                   |
*| Pin5-VSYNC(OV7670  Ö¡Í¬²½ÐźÅ)        |        PE4                   |
*| Pin6-HREF(OV7670  ÐÐͬ²½ÐźÅ)         |        NC                    |
*| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ |        PE5                   |
*| Pin8-XCLK(NC/RE# ¿Õ½Å)                |        NC                    |
*| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î»              |        PE6                   |
*| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ |        GND                   |
*| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ             |        PD12                  |
*| Pin12-GND                             |        GND                   |
*|                                       |                              |
*| Pin13-D0     FIFOÊý¾Ý¿ÚÊä³öBIT0       |        PC0                   |
*| Pin14-D1     FIFOÊý¾Ý¿ÚÊä³öBIT1       |        PC1                   |
*| Pin15-D2     FIFOÊý¾Ý¿ÚÊä³öBIT2       |        PC2                   |
*| Pin16-D3     FIFOÊý¾Ý¿ÚÊä³öBIT3       |        PC3                   |
*| Pin17-D4     FIFOÊý¾Ý¿ÚÊä³öBIT4       |        PC4                   |
*| Pin18-D5     FIFOÊý¾Ý¿ÚÊä³öBIT5       |        PC5                   |
*| Pin19-D6     FIFOÊý¾Ý¿ÚÊä³öBIT6       |        PC6                   |
*| Pin20-D7     FIFOÊý¾Ý¿ÚÊä³öBIT7       |        PC7                   |
*+------------------+-----------------+---------------------------------+
*/
#ifndef __STM32V5_SCCB_H
#define __STM32V5_SCCB_H
#include "stm32f10x.h"
/* I2C SCL/SDA Pin operation macro */
#define SCL_H         GPIOE->BSRR = GPIO_Pin_2
#define SCL_L         GPIOE->BRR  = GPIO_Pin_2
#define SDA_H         GPIOE->BSRR = GPIO_Pin_3
#define SDA_L         GPIOE->BRR  = GPIO_Pin_3
#define SCL_read      GPIOE->IDR  & GPIO_Pin_2
#define SDA_read      GPIOE->IDR  & GPIO_Pin_3
void init_sccb_gpio(void);
int I2C_WriteByte(uint16_t WriteAddress , uint8_t SendByte , uint8_t DeviceAddress);
int I2C_ReadByte (uint8_t* pBuffer, uint16_t length, uint8_t ReadAddress, uint8_t DeviceAddress);
#endif
src/IAR_project/stm32_ov7670/board/stm32v5_systick.c
New file
@@ -0,0 +1,47 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åsystickºÍÑÓʱÏà¹Øº¯Êý£»
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
#include "stm32f10x.h"
#include "stm32v5_systick.h"
static __IO uint32_t s_delay_clocks;
/*
   SysTick_Config½«»á´ÓAHB×ÜÏß»ñȡʱÖÓ£¬¶øAHB×ÜÏßÓëϵͳºËÐÄʱÖÓÒ»ÖÂΪ72MHz.Ëü
     µÄÊäÈë²ÎÊýΪSystick½«Òª¼ÆÊ±µÄÂö³åÊý£¬¾­¹ýticks¸öÂö³åºó½«´¥·¢Öжϣ¬Öжϴ¦Àí
     ³ÌÐòÖн«ÖØÐ¼¼Êõ¡£ÓÉ´ËÎÒÃÇ¿ÉÒÔ¼ÆËã³ö¶¨Ê±µÄʱ¼ä£¬ÏÂÃæÎª¼ÆË㹫ʽ£º
     T=ticks*(1/f)   TΪҪ¶¨Ê±µÄ×Üʱ¼ä; ticksΪSysTick_Config()µÄÊäÈë²ÎÊý;1/f¼´Îª
     SysTickʹÓõÄʱÖÓÔ´µÄʱÖÓÖÜÆÚ£¬fΪ¸ÃʱÖÓÔ´µÄʱÖÓÆµÂÊ£¬Îª72MHz.
     ÔÚÏÂÃæµÄ³ÌÐòÖÐ, SystemCoreClock¼´ÎªÏµÍ³Ê±ÖÓ(f),ÕâÑù£º
      T= (f/CLOCK_SECOND) * (1*f) = 1/CLOCK_SECOND
        ËùÒÔ£¬Èç¹ûÎÒÃÇÐèÒª1ms¶¨Ê±£¬Ö»ÐèÒª½«CLOCK_SECOND¶¨ÒåΪ1000;
              Èç¹ûÎÒÃÇÐèÒª1us¶¨Ê±£¬Ö»ÐèÒª½«CLOCK_SECOND¶¨ÒåΪ1000000;
*/
void sysclock_init(void)
{
   if (SysTick_Config(SystemCoreClock / CLOCK_CONF_SECOND))
     {
        while(1);
     }
}
void SysTick_Handler(void)
{
  if (s_delay_clocks != 0x00)
  {
    s_delay_clocks--;
  }
}
void msleep(__IO uint32_t ms)
{
   s_delay_clocks = ms;
     while(s_delay_clocks != 0);
}
src/IAR_project/stm32_ov7670/board/stm32v5_systick.h
New file
@@ -0,0 +1,23 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°åsystickºÍÑÓʱÏà¹Øº¯Êý£»
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
#ifndef __STM32V5_SYSTICK_H
#define __STM32V5_SYSTICK_H
#define MSECOND_OF_CLOCKS   1000      /* Ê±ÖÓ½ÚÅÄÖжÏΪ1msÒ»´Î */
#define USECOND_OF_CLOCKS   1000000   /* Ê±ÖÓ½ÚÅÄÖжÏΪ1usÒ»´Î */
#define CLOCK_CONF_SECOND   MSECOND_OF_CLOCKS
#define SECOND         1000    /* 1second = 1000ms */
extern void sysclock_init(void);
extern void sysclock_decrement(void);
extern void msleep(__IO uint32_t ms);
#endif
src/IAR_project/stm32_ov7670/board/stm32v5_uart.c
New file
@@ -0,0 +1,83 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°å´®¿Ú²Ù×÷º¯Êý½Ó¿Ú,printf¹³×Óº¯Êýfputc
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#include "stm32v5_uart.h"
#include <stdio.h>
  /* USARTx configured as follow:
        - BaudRate = 115200 baud
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
  */
void USART_Config(USART_TypeDef* USARTx)
{
    USART_InitTypeDef USART_InitStructure;
  /* Configure USART1 */
  USART_InitStructure.USART_BaudRate = 115200;                        //ËÙÂÊ115200bps
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;        //Êý¾Ýλ8λ
  USART_InitStructure.USART_StopBits = USART_StopBits_1;            //ֹͣλ1λ
  USART_InitStructure.USART_Parity = USART_Parity_No;                //ÎÞУÑéλ
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //ÎÞÓ²¼þÁ÷¿Ø
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                    //ÊÕ·¢Ä£Ê½
  USART_Init(USARTx, &USART_InitStructure);                            //ÅäÖô®¿Ú²ÎÊýº¯Êý
#if 0
  /* Enable USARTx Receive and Transmit interrupts */
  USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);          //ʹÄܽÓÊÕÖжÏ
  USART_ITConfig(USARTx, USART_IT_TXE, ENABLE);                        //ʹÄÜ·¢ËÍ»º³å¿ÕÖжÏ
#endif
  /* Enable the USARTx */
  USART_Cmd(USARTx, ENABLE);
}
void dbg_setup_uart(void)
{
    GPIO_InitTypeDef   GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
  /* Ä¬Èϸ´Óù¦ÄÜ */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                      //USART1 TX
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;             //¸´ÓÃÍÆÍìÊä³ö
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  /* ¸´Óù¦ÄܵÄÊäÈëÒý½Å±ØÐëÅäÖÃΪÊäÈëģʽ£¨¸¡¿Õ/ÉÏÀ­/ÏÂÀ­µÄÒ»ÖÖ£©*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                  //USART1 RX
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //¸´Óø¡¿ÕÊäÈë
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  USART_Config(DBG_UART);
  USART_SendData(DBG_UART, '\n');
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
int fputc(int ch, FILE *f)
{
    if('\n' == ch)
    {
       USART_SendData(DBG_UART, (uint8_t) '\r');
     while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)  ;
    }
  USART_SendData(DBG_UART, (uint8_t) ch);
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  return ch;
}
src/IAR_project/stm32_ov7670/board/stm32v5_uart.h
New file
@@ -0,0 +1,19 @@
/****************************************************************************
*   Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
*      Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
* Description: ·Ü¶·STM32v5¿ª·¢°å´®¿Ú²Ù×÷º¯Êý½Ó¿Ú,printf¹³×Óº¯Êýfputc
*
*   ChangeLog:
*        °æ±¾ºÅ     ÈÕÆÚ       ×÷Õß      ËµÃ÷
*        V1.0.0  2014.08.25  GuoWenxue   ·¢²¼¸Ã°æ±¾
****************************************************************************/
#ifndef __STM32V5_UART_
#define __STM32V5_UART_
#ifndef DBG_UART
#define DBG_UART USART1
#endif
void dbg_setup_uart(void);
#endif
src/IAR_project/stm32_ov7670/fwlib/inc/misc.h
New file
@@ -0,0 +1,220 @@
/**
  ******************************************************************************
  * @file    misc.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the miscellaneous
  *          firmware library functions (add-on to CMSIS functions).
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MISC_H
#define __MISC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup MISC
  * @{
  */
/** @defgroup MISC_Exported_Types
  * @{
  */
/**
  * @brief  NVIC Init Structure definition
  */
typedef struct
{
  uint8_t NVIC_IRQChannel;                    /*!< Specifies the IRQ channel to be enabled or disabled.
                                                   This parameter can be a value of @ref IRQn_Type
                                                   (For the complete STM32 Devices IRQ Channels list, please
                                                    refer to stm32f10x.h file) */
  uint8_t NVIC_IRQChannelPreemptionPriority;  /*!< Specifies the pre-emption priority for the IRQ channel
                                                   specified in NVIC_IRQChannel. This parameter can be a value
                                                   between 0 and 15 as described in the table @ref NVIC_Priority_Table */
  uint8_t NVIC_IRQChannelSubPriority;         /*!< Specifies the subpriority level for the IRQ channel specified
                                                   in NVIC_IRQChannel. This parameter can be a value
                                                   between 0 and 15 as described in the table @ref NVIC_Priority_Table */
  FunctionalState NVIC_IRQChannelCmd;         /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel
                                                   will be enabled or disabled.
                                                   This parameter can be set either to ENABLE or DISABLE */
} NVIC_InitTypeDef;
/**
  * @}
  */
/** @defgroup NVIC_Priority_Table
  * @{
  */
/**
@code
 The table below gives the allowed values of the pre-emption priority and subpriority according
 to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function
  ============================================================================================================================
    NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  | Description
  ============================================================================================================================
   NVIC_PriorityGroup_0  |                0                  |            0-15             |   0 bits for pre-emption priority
                         |                                   |                             |   4 bits for subpriority
  ----------------------------------------------------------------------------------------------------------------------------
   NVIC_PriorityGroup_1  |                0-1                |            0-7              |   1 bits for pre-emption priority
                         |                                   |                             |   3 bits for subpriority
  ----------------------------------------------------------------------------------------------------------------------------
   NVIC_PriorityGroup_2  |                0-3                |            0-3              |   2 bits for pre-emption priority
                         |                                   |                             |   2 bits for subpriority
  ----------------------------------------------------------------------------------------------------------------------------
   NVIC_PriorityGroup_3  |                0-7                |            0-1              |   3 bits for pre-emption priority
                         |                                   |                             |   1 bits for subpriority
  ----------------------------------------------------------------------------------------------------------------------------
   NVIC_PriorityGroup_4  |                0-15               |            0                |   4 bits for pre-emption priority
                         |                                   |                             |   0 bits for subpriority
  ============================================================================================================================
@endcode
*/
/**
  * @}
  */
/** @defgroup MISC_Exported_Constants
  * @{
  */
/** @defgroup Vector_Table_Base
  * @{
  */
#define NVIC_VectTab_RAM             ((uint32_t)0x20000000)
#define NVIC_VectTab_FLASH           ((uint32_t)0x08000000)
#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
                                  ((VECTTAB) == NVIC_VectTab_FLASH))
/**
  * @}
  */
/** @defgroup System_Low_Power
  * @{
  */
#define NVIC_LP_SEVONPEND            ((uint8_t)0x10)
#define NVIC_LP_SLEEPDEEP            ((uint8_t)0x04)
#define NVIC_LP_SLEEPONEXIT          ((uint8_t)0x02)
#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
                        ((LP) == NVIC_LP_SLEEPDEEP) || \
                        ((LP) == NVIC_LP_SLEEPONEXIT))
/**
  * @}
  */
/** @defgroup Preemption_Priority_Group
  * @{
  */
#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
                                                            4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
                                                            3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
                                                            2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
                                                            1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
                                                            0 bits for subpriority */
#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \
                                       ((GROUP) == NVIC_PriorityGroup_1) || \
                                       ((GROUP) == NVIC_PriorityGroup_2) || \
                                       ((GROUP) == NVIC_PriorityGroup_3) || \
                                       ((GROUP) == NVIC_PriorityGroup_4))
#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
#define IS_NVIC_SUB_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10)
#define IS_NVIC_OFFSET(OFFSET)  ((OFFSET) < 0x000FFFFF)
/**
  * @}
  */
/** @defgroup SysTick_clock_source
  * @{
  */
#define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
                                       ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup MISC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup MISC_Exported_Functions
  * @{
  */
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
#ifdef __cplusplus
}
#endif
#endif /* __MISC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x.h
New file
Diff too large
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_adc.h
New file
@@ -0,0 +1,483 @@
/**
  ******************************************************************************
  * @file    stm32f10x_adc.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the ADC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_ADC_H
#define __STM32F10x_ADC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup ADC
  * @{
  */
/** @defgroup ADC_Exported_Types
  * @{
  */
/**
  * @brief  ADC Init structure definition
  */
typedef struct
{
  uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in independent or
                                               dual mode.
                                               This parameter can be a value of @ref ADC_mode */
  FunctionalState ADC_ScanConvMode;       /*!< Specifies whether the conversion is performed in
                                               Scan (multichannels) or Single (one channel) mode.
                                               This parameter can be set to ENABLE or DISABLE */
  FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in
                                               Continuous or Single mode.
                                               This parameter can be set to ENABLE or DISABLE. */
  uint32_t ADC_ExternalTrigConv;          /*!< Defines the external trigger used to start the analog
                                               to digital conversion of regular channels. This parameter
                                               can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */
  uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data alignment is left or right.
                                               This parameter can be a value of @ref ADC_data_align */
  uint8_t ADC_NbrOfChannel;               /*!< Specifies the number of ADC channels that will be converted
                                               using the sequencer for regular channel group.
                                               This parameter must range from 1 to 16. */
}ADC_InitTypeDef;
/**
  * @}
  */
/** @defgroup ADC_Exported_Constants
  * @{
  */
#define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
                                   ((PERIPH) == ADC2) || \
                                   ((PERIPH) == ADC3))
#define IS_ADC_DMA_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
                                   ((PERIPH) == ADC3))
/** @defgroup ADC_mode
  * @{
  */
#define ADC_Mode_Independent                       ((uint32_t)0x00000000)
#define ADC_Mode_RegInjecSimult                    ((uint32_t)0x00010000)
#define ADC_Mode_RegSimult_AlterTrig               ((uint32_t)0x00020000)
#define ADC_Mode_InjecSimult_FastInterl            ((uint32_t)0x00030000)
#define ADC_Mode_InjecSimult_SlowInterl            ((uint32_t)0x00040000)
#define ADC_Mode_InjecSimult                       ((uint32_t)0x00050000)
#define ADC_Mode_RegSimult                         ((uint32_t)0x00060000)
#define ADC_Mode_FastInterl                        ((uint32_t)0x00070000)
#define ADC_Mode_SlowInterl                        ((uint32_t)0x00080000)
#define ADC_Mode_AlterTrig                         ((uint32_t)0x00090000)
#define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \
                           ((MODE) == ADC_Mode_RegInjecSimult) || \
                           ((MODE) == ADC_Mode_RegSimult_AlterTrig) || \
                           ((MODE) == ADC_Mode_InjecSimult_FastInterl) || \
                           ((MODE) == ADC_Mode_InjecSimult_SlowInterl) || \
                           ((MODE) == ADC_Mode_InjecSimult) || \
                           ((MODE) == ADC_Mode_RegSimult) || \
                           ((MODE) == ADC_Mode_FastInterl) || \
                           ((MODE) == ADC_Mode_SlowInterl) || \
                           ((MODE) == ADC_Mode_AlterTrig))
/**
  * @}
  */
/** @defgroup ADC_external_trigger_sources_for_regular_channels_conversion
  * @{
  */
#define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x00020000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x00060000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x00080000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x000A0000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO    ((uint32_t)0x000C0000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x00040000) /*!< For ADC1, ADC2 and ADC3 */
#define ADC_ExternalTrigConv_None                  ((uint32_t)0x000E0000) /*!< For ADC1, ADC2 and ADC3 */
#define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x00000000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x00020000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x00060000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x00080000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x000A0000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x000C0000) /*!< For ADC3 only */
#define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_None) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \
                                  ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3))
/**
  * @}
  */
/** @defgroup ADC_data_align
  * @{
  */
#define ADC_DataAlign_Right                        ((uint32_t)0x00000000)
#define ADC_DataAlign_Left                         ((uint32_t)0x00000800)
#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \
                                  ((ALIGN) == ADC_DataAlign_Left))
/**
  * @}
  */
/** @defgroup ADC_channels
  * @{
  */
#define ADC_Channel_0                               ((uint8_t)0x00)
#define ADC_Channel_1                               ((uint8_t)0x01)
#define ADC_Channel_2                               ((uint8_t)0x02)
#define ADC_Channel_3                               ((uint8_t)0x03)
#define ADC_Channel_4                               ((uint8_t)0x04)
#define ADC_Channel_5                               ((uint8_t)0x05)
#define ADC_Channel_6                               ((uint8_t)0x06)
#define ADC_Channel_7                               ((uint8_t)0x07)
#define ADC_Channel_8                               ((uint8_t)0x08)
#define ADC_Channel_9                               ((uint8_t)0x09)
#define ADC_Channel_10                              ((uint8_t)0x0A)
#define ADC_Channel_11                              ((uint8_t)0x0B)
#define ADC_Channel_12                              ((uint8_t)0x0C)
#define ADC_Channel_13                              ((uint8_t)0x0D)
#define ADC_Channel_14                              ((uint8_t)0x0E)
#define ADC_Channel_15                              ((uint8_t)0x0F)
#define ADC_Channel_16                              ((uint8_t)0x10)
#define ADC_Channel_17                              ((uint8_t)0x11)
#define ADC_Channel_TempSensor                      ((uint8_t)ADC_Channel_16)
#define ADC_Channel_Vrefint                         ((uint8_t)ADC_Channel_17)
#define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || ((CHANNEL) == ADC_Channel_1) || \
                                 ((CHANNEL) == ADC_Channel_2) || ((CHANNEL) == ADC_Channel_3) || \
                                 ((CHANNEL) == ADC_Channel_4) || ((CHANNEL) == ADC_Channel_5) || \
                                 ((CHANNEL) == ADC_Channel_6) || ((CHANNEL) == ADC_Channel_7) || \
                                 ((CHANNEL) == ADC_Channel_8) || ((CHANNEL) == ADC_Channel_9) || \
                                 ((CHANNEL) == ADC_Channel_10) || ((CHANNEL) == ADC_Channel_11) || \
                                 ((CHANNEL) == ADC_Channel_12) || ((CHANNEL) == ADC_Channel_13) || \
                                 ((CHANNEL) == ADC_Channel_14) || ((CHANNEL) == ADC_Channel_15) || \
                                 ((CHANNEL) == ADC_Channel_16) || ((CHANNEL) == ADC_Channel_17))
/**
  * @}
  */
/** @defgroup ADC_sampling_time
  * @{
  */
#define ADC_SampleTime_1Cycles5                    ((uint8_t)0x00)
#define ADC_SampleTime_7Cycles5                    ((uint8_t)0x01)
#define ADC_SampleTime_13Cycles5                   ((uint8_t)0x02)
#define ADC_SampleTime_28Cycles5                   ((uint8_t)0x03)
#define ADC_SampleTime_41Cycles5                   ((uint8_t)0x04)
#define ADC_SampleTime_55Cycles5                   ((uint8_t)0x05)
#define ADC_SampleTime_71Cycles5                   ((uint8_t)0x06)
#define ADC_SampleTime_239Cycles5                  ((uint8_t)0x07)
#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_1Cycles5) || \
                                  ((TIME) == ADC_SampleTime_7Cycles5) || \
                                  ((TIME) == ADC_SampleTime_13Cycles5) || \
                                  ((TIME) == ADC_SampleTime_28Cycles5) || \
                                  ((TIME) == ADC_SampleTime_41Cycles5) || \
                                  ((TIME) == ADC_SampleTime_55Cycles5) || \
                                  ((TIME) == ADC_SampleTime_71Cycles5) || \
                                  ((TIME) == ADC_SampleTime_239Cycles5))
/**
  * @}
  */
/** @defgroup ADC_external_trigger_sources_for_injected_channels_conversion
  * @{
  */
#define ADC_ExternalTrigInjecConv_T2_TRGO           ((uint32_t)0x00002000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigInjecConv_T2_CC1            ((uint32_t)0x00003000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigInjecConv_T3_CC4            ((uint32_t)0x00004000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigInjecConv_T4_TRGO           ((uint32_t)0x00005000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigInjecConv_T1_TRGO           ((uint32_t)0x00000000) /*!< For ADC1, ADC2 and ADC3 */
#define ADC_ExternalTrigInjecConv_T1_CC4            ((uint32_t)0x00001000) /*!< For ADC1, ADC2 and ADC3 */
#define ADC_ExternalTrigInjecConv_None              ((uint32_t)0x00007000) /*!< For ADC1, ADC2 and ADC3 */
#define ADC_ExternalTrigInjecConv_T4_CC3            ((uint32_t)0x00002000) /*!< For ADC3 only */
#define ADC_ExternalTrigInjecConv_T8_CC2            ((uint32_t)0x00003000) /*!< For ADC3 only */
#define ADC_ExternalTrigInjecConv_T8_CC4            ((uint32_t)0x00004000) /*!< For ADC3 only */
#define ADC_ExternalTrigInjecConv_T5_TRGO           ((uint32_t)0x00005000) /*!< For ADC3 only */
#define ADC_ExternalTrigInjecConv_T5_CC4            ((uint32_t)0x00006000) /*!< For ADC3 only */
#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_None) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \
                                        ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4))
/**
  * @}
  */
/** @defgroup ADC_injected_channel_selection
  * @{
  */
#define ADC_InjectedChannel_1                       ((uint8_t)0x14)
#define ADC_InjectedChannel_2                       ((uint8_t)0x18)
#define ADC_InjectedChannel_3                       ((uint8_t)0x1C)
#define ADC_InjectedChannel_4                       ((uint8_t)0x20)
#define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \
                                          ((CHANNEL) == ADC_InjectedChannel_2) || \
                                          ((CHANNEL) == ADC_InjectedChannel_3) || \
                                          ((CHANNEL) == ADC_InjectedChannel_4))
/**
  * @}
  */
/** @defgroup ADC_analog_watchdog_selection
  * @{
  */
#define ADC_AnalogWatchdog_SingleRegEnable         ((uint32_t)0x00800200)
#define ADC_AnalogWatchdog_SingleInjecEnable       ((uint32_t)0x00400200)
#define ADC_AnalogWatchdog_SingleRegOrInjecEnable  ((uint32_t)0x00C00200)
#define ADC_AnalogWatchdog_AllRegEnable            ((uint32_t)0x00800000)
#define ADC_AnalogWatchdog_AllInjecEnable          ((uint32_t)0x00400000)
#define ADC_AnalogWatchdog_AllRegAllInjecEnable    ((uint32_t)0x00C00000)
#define ADC_AnalogWatchdog_None                    ((uint32_t)0x00000000)
#define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \
                                          ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \
                                          ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \
                                          ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \
                                          ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \
                                          ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \
                                          ((WATCHDOG) == ADC_AnalogWatchdog_None))
/**
  * @}
  */
/** @defgroup ADC_interrupts_definition
  * @{
  */
#define ADC_IT_EOC                                 ((uint16_t)0x0220)
#define ADC_IT_AWD                                 ((uint16_t)0x0140)
#define ADC_IT_JEOC                                ((uint16_t)0x0480)
#define IS_ADC_IT(IT) ((((IT) & (uint16_t)0xF81F) == 0x00) && ((IT) != 0x00))
#define IS_ADC_GET_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \
                           ((IT) == ADC_IT_JEOC))
/**
  * @}
  */
/** @defgroup ADC_flags_definition
  * @{
  */
#define ADC_FLAG_AWD                               ((uint8_t)0x01)
#define ADC_FLAG_EOC                               ((uint8_t)0x02)
#define ADC_FLAG_JEOC                              ((uint8_t)0x04)
#define ADC_FLAG_JSTRT                             ((uint8_t)0x08)
#define ADC_FLAG_STRT                              ((uint8_t)0x10)
#define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xE0) == 0x00) && ((FLAG) != 0x00))
#define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || ((FLAG) == ADC_FLAG_EOC) || \
                               ((FLAG) == ADC_FLAG_JEOC) || ((FLAG)== ADC_FLAG_JSTRT) || \
                               ((FLAG) == ADC_FLAG_STRT))
/**
  * @}
  */
/** @defgroup ADC_thresholds
  * @{
  */
#define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF)
/**
  * @}
  */
/** @defgroup ADC_injected_offset
  * @{
  */
#define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF)
/**
  * @}
  */
/** @defgroup ADC_injected_length
  * @{
  */
#define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4))
/**
  * @}
  */
/** @defgroup ADC_injected_rank
  * @{
  */
#define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4))
/**
  * @}
  */
/** @defgroup ADC_regular_length
  * @{
  */
#define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10))
/**
  * @}
  */
/** @defgroup ADC_regular_rank
  * @{
  */
#define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10))
/**
  * @}
  */
/** @defgroup ADC_regular_discontinuous_mode_number
  * @{
  */
#define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup ADC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup ADC_Exported_Functions
  * @{
  */
void ADC_DeInit(ADC_TypeDef* ADCx);
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
uint32_t ADC_GetDualModeConversionValue(void);
void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);
void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
void ADC_TempSensorVrefintCmd(FunctionalState NewState);
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_ADC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_bkp.h
New file
@@ -0,0 +1,195 @@
/**
  ******************************************************************************
  * @file    stm32f10x_bkp.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the BKP firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_BKP_H
#define __STM32F10x_BKP_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup BKP
  * @{
  */
/** @defgroup BKP_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup BKP_Exported_Constants
  * @{
  */
/** @defgroup Tamper_Pin_active_level
  * @{
  */
#define BKP_TamperPinLevel_High           ((uint16_t)0x0000)
#define BKP_TamperPinLevel_Low            ((uint16_t)0x0001)
#define IS_BKP_TAMPER_PIN_LEVEL(LEVEL) (((LEVEL) == BKP_TamperPinLevel_High) || \
                                        ((LEVEL) == BKP_TamperPinLevel_Low))
/**
  * @}
  */
/** @defgroup RTC_output_source_to_output_on_the_Tamper_pin
  * @{
  */
#define BKP_RTCOutputSource_None          ((uint16_t)0x0000)
#define BKP_RTCOutputSource_CalibClock    ((uint16_t)0x0080)
#define BKP_RTCOutputSource_Alarm         ((uint16_t)0x0100)
#define BKP_RTCOutputSource_Second        ((uint16_t)0x0300)
#define IS_BKP_RTC_OUTPUT_SOURCE(SOURCE) (((SOURCE) == BKP_RTCOutputSource_None) || \
                                          ((SOURCE) == BKP_RTCOutputSource_CalibClock) || \
                                          ((SOURCE) == BKP_RTCOutputSource_Alarm) || \
                                          ((SOURCE) == BKP_RTCOutputSource_Second))
/**
  * @}
  */
/** @defgroup Data_Backup_Register
  * @{
  */
#define BKP_DR1                           ((uint16_t)0x0004)
#define BKP_DR2                           ((uint16_t)0x0008)
#define BKP_DR3                           ((uint16_t)0x000C)
#define BKP_DR4                           ((uint16_t)0x0010)
#define BKP_DR5                           ((uint16_t)0x0014)
#define BKP_DR6                           ((uint16_t)0x0018)
#define BKP_DR7                           ((uint16_t)0x001C)
#define BKP_DR8                           ((uint16_t)0x0020)
#define BKP_DR9                           ((uint16_t)0x0024)
#define BKP_DR10                          ((uint16_t)0x0028)
#define BKP_DR11                          ((uint16_t)0x0040)
#define BKP_DR12                          ((uint16_t)0x0044)
#define BKP_DR13                          ((uint16_t)0x0048)
#define BKP_DR14                          ((uint16_t)0x004C)
#define BKP_DR15                          ((uint16_t)0x0050)
#define BKP_DR16                          ((uint16_t)0x0054)
#define BKP_DR17                          ((uint16_t)0x0058)
#define BKP_DR18                          ((uint16_t)0x005C)
#define BKP_DR19                          ((uint16_t)0x0060)
#define BKP_DR20                          ((uint16_t)0x0064)
#define BKP_DR21                          ((uint16_t)0x0068)
#define BKP_DR22                          ((uint16_t)0x006C)
#define BKP_DR23                          ((uint16_t)0x0070)
#define BKP_DR24                          ((uint16_t)0x0074)
#define BKP_DR25                          ((uint16_t)0x0078)
#define BKP_DR26                          ((uint16_t)0x007C)
#define BKP_DR27                          ((uint16_t)0x0080)
#define BKP_DR28                          ((uint16_t)0x0084)
#define BKP_DR29                          ((uint16_t)0x0088)
#define BKP_DR30                          ((uint16_t)0x008C)
#define BKP_DR31                          ((uint16_t)0x0090)
#define BKP_DR32                          ((uint16_t)0x0094)
#define BKP_DR33                          ((uint16_t)0x0098)
#define BKP_DR34                          ((uint16_t)0x009C)
#define BKP_DR35                          ((uint16_t)0x00A0)
#define BKP_DR36                          ((uint16_t)0x00A4)
#define BKP_DR37                          ((uint16_t)0x00A8)
#define BKP_DR38                          ((uint16_t)0x00AC)
#define BKP_DR39                          ((uint16_t)0x00B0)
#define BKP_DR40                          ((uint16_t)0x00B4)
#define BKP_DR41                          ((uint16_t)0x00B8)
#define BKP_DR42                          ((uint16_t)0x00BC)
#define IS_BKP_DR(DR) (((DR) == BKP_DR1)  || ((DR) == BKP_DR2)  || ((DR) == BKP_DR3)  || \
                       ((DR) == BKP_DR4)  || ((DR) == BKP_DR5)  || ((DR) == BKP_DR6)  || \
                       ((DR) == BKP_DR7)  || ((DR) == BKP_DR8)  || ((DR) == BKP_DR9)  || \
                       ((DR) == BKP_DR10) || ((DR) == BKP_DR11) || ((DR) == BKP_DR12) || \
                       ((DR) == BKP_DR13) || ((DR) == BKP_DR14) || ((DR) == BKP_DR15) || \
                       ((DR) == BKP_DR16) || ((DR) == BKP_DR17) || ((DR) == BKP_DR18) || \
                       ((DR) == BKP_DR19) || ((DR) == BKP_DR20) || ((DR) == BKP_DR21) || \
                       ((DR) == BKP_DR22) || ((DR) == BKP_DR23) || ((DR) == BKP_DR24) || \
                       ((DR) == BKP_DR25) || ((DR) == BKP_DR26) || ((DR) == BKP_DR27) || \
                       ((DR) == BKP_DR28) || ((DR) == BKP_DR29) || ((DR) == BKP_DR30) || \
                       ((DR) == BKP_DR31) || ((DR) == BKP_DR32) || ((DR) == BKP_DR33) || \
                       ((DR) == BKP_DR34) || ((DR) == BKP_DR35) || ((DR) == BKP_DR36) || \
                       ((DR) == BKP_DR37) || ((DR) == BKP_DR38) || ((DR) == BKP_DR39) || \
                       ((DR) == BKP_DR40) || ((DR) == BKP_DR41) || ((DR) == BKP_DR42))
#define IS_BKP_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x7F)
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup BKP_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup BKP_Exported_Functions
  * @{
  */
void BKP_DeInit(void);
void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel);
void BKP_TamperPinCmd(FunctionalState NewState);
void BKP_ITConfig(FunctionalState NewState);
void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource);
void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue);
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);
FlagStatus BKP_GetFlagStatus(void);
void BKP_ClearFlag(void);
ITStatus BKP_GetITStatus(void);
void BKP_ClearITPendingBit(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_BKP_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_can.h
New file
@@ -0,0 +1,697 @@
/**
  ******************************************************************************
  * @file    stm32f10x_can.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the CAN firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CAN_H
#define __STM32F10x_CAN_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup CAN
  * @{
  */
/** @defgroup CAN_Exported_Types
  * @{
  */
#define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \
                                   ((PERIPH) == CAN2))
/**
  * @brief  CAN init structure definition
  */
typedef struct
{
  uint16_t CAN_Prescaler;   /*!< Specifies the length of a time quantum.
                                 It ranges from 1 to 1024. */
  uint8_t CAN_Mode;         /*!< Specifies the CAN operating mode.
                                 This parameter can be a value of
                                @ref CAN_operating_mode */
  uint8_t CAN_SJW;          /*!< Specifies the maximum number of time quanta
                                 the CAN hardware is allowed to lengthen or
                                 shorten a bit to perform resynchronization.
                                 This parameter can be a value of
                                 @ref CAN_synchronisation_jump_width */
  uint8_t CAN_BS1;          /*!< Specifies the number of time quanta in Bit
                                 Segment 1. This parameter can be a value of
                                 @ref CAN_time_quantum_in_bit_segment_1 */
  uint8_t CAN_BS2;          /*!< Specifies the number of time quanta in Bit
                                 Segment 2.
                                 This parameter can be a value of
                                 @ref CAN_time_quantum_in_bit_segment_2 */
  FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered
                                 communication mode. This parameter can be set
                                 either to ENABLE or DISABLE. */
  FunctionalState CAN_ABOM;  /*!< Enable or disable the automatic bus-off
                                  management. This parameter can be set either
                                  to ENABLE or DISABLE. */
  FunctionalState CAN_AWUM;  /*!< Enable or disable the automatic wake-up mode.
                                  This parameter can be set either to ENABLE or
                                  DISABLE. */
  FunctionalState CAN_NART;  /*!< Enable or disable the no-automatic
                                  retransmission mode. This parameter can be
                                  set either to ENABLE or DISABLE. */
  FunctionalState CAN_RFLM;  /*!< Enable or disable the Receive FIFO Locked mode.
                                  This parameter can be set either to ENABLE
                                  or DISABLE. */
  FunctionalState CAN_TXFP;  /*!< Enable or disable the transmit FIFO priority.
                                  This parameter can be set either to ENABLE
                                  or DISABLE. */
} CAN_InitTypeDef;
/**
  * @brief  CAN filter init structure definition
  */
typedef struct
{
  uint16_t CAN_FilterIdHigh;         /*!< Specifies the filter identification number (MSBs for a 32-bit
                                              configuration, first one for a 16-bit configuration).
                                              This parameter can be a value between 0x0000 and 0xFFFF */
  uint16_t CAN_FilterIdLow;          /*!< Specifies the filter identification number (LSBs for a 32-bit
                                              configuration, second one for a 16-bit configuration).
                                              This parameter can be a value between 0x0000 and 0xFFFF */
  uint16_t CAN_FilterMaskIdHigh;     /*!< Specifies the filter mask number or identification number,
                                              according to the mode (MSBs for a 32-bit configuration,
                                              first one for a 16-bit configuration).
                                              This parameter can be a value between 0x0000 and 0xFFFF */
  uint16_t CAN_FilterMaskIdLow;      /*!< Specifies the filter mask number or identification number,
                                              according to the mode (LSBs for a 32-bit configuration,
                                              second one for a 16-bit configuration).
                                              This parameter can be a value between 0x0000 and 0xFFFF */
  uint16_t CAN_FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.
                                              This parameter can be a value of @ref CAN_filter_FIFO */
  uint8_t CAN_FilterNumber;          /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */
  uint8_t CAN_FilterMode;            /*!< Specifies the filter mode to be initialized.
                                              This parameter can be a value of @ref CAN_filter_mode */
  uint8_t CAN_FilterScale;           /*!< Specifies the filter scale.
                                              This parameter can be a value of @ref CAN_filter_scale */
  FunctionalState CAN_FilterActivation; /*!< Enable or disable the filter.
                                              This parameter can be set either to ENABLE or DISABLE. */
} CAN_FilterInitTypeDef;
/**
  * @brief  CAN Tx message structure definition
  */
typedef struct
{
  uint32_t StdId;  /*!< Specifies the standard identifier.
                        This parameter can be a value between 0 to 0x7FF. */
  uint32_t ExtId;  /*!< Specifies the extended identifier.
                        This parameter can be a value between 0 to 0x1FFFFFFF. */
  uint8_t IDE;     /*!< Specifies the type of identifier for the message that
                        will be transmitted. This parameter can be a value
                        of @ref CAN_identifier_type */
  uint8_t RTR;     /*!< Specifies the type of frame for the message that will
                        be transmitted. This parameter can be a value of
                        @ref CAN_remote_transmission_request */
  uint8_t DLC;     /*!< Specifies the length of the frame that will be
                        transmitted. This parameter can be a value between
                        0 to 8 */
  uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0
                        to 0xFF. */
} CanTxMsg;
/**
  * @brief  CAN Rx message structure definition
  */
typedef struct
{
  uint32_t StdId;  /*!< Specifies the standard identifier.
                        This parameter can be a value between 0 to 0x7FF. */
  uint32_t ExtId;  /*!< Specifies the extended identifier.
                        This parameter can be a value between 0 to 0x1FFFFFFF. */
  uint8_t IDE;     /*!< Specifies the type of identifier for the message that
                        will be received. This parameter can be a value of
                        @ref CAN_identifier_type */
  uint8_t RTR;     /*!< Specifies the type of frame for the received message.
                        This parameter can be a value of
                        @ref CAN_remote_transmission_request */
  uint8_t DLC;     /*!< Specifies the length of the frame that will be received.
                        This parameter can be a value between 0 to 8 */
  uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to
                        0xFF. */
  uint8_t FMI;     /*!< Specifies the index of the filter the message stored in
                        the mailbox passes through. This parameter can be a
                        value between 0 to 0xFF */
} CanRxMsg;
/**
  * @}
  */
/** @defgroup CAN_Exported_Constants
  * @{
  */
/** @defgroup CAN_sleep_constants
  * @{
  */
#define CAN_InitStatus_Failed              ((uint8_t)0x00) /*!< CAN initialization failed */
#define CAN_InitStatus_Success             ((uint8_t)0x01) /*!< CAN initialization OK */
/**
  * @}
  */
/** @defgroup CAN_Mode
  * @{
  */
#define CAN_Mode_Normal             ((uint8_t)0x00)  /*!< normal mode */
#define CAN_Mode_LoopBack           ((uint8_t)0x01)  /*!< loopback mode */
#define CAN_Mode_Silent             ((uint8_t)0x02)  /*!< silent mode */
#define CAN_Mode_Silent_LoopBack    ((uint8_t)0x03)  /*!< loopback combined with silent mode */
#define IS_CAN_MODE(MODE) (((MODE) == CAN_Mode_Normal) || \
                           ((MODE) == CAN_Mode_LoopBack)|| \
                           ((MODE) == CAN_Mode_Silent) || \
                           ((MODE) == CAN_Mode_Silent_LoopBack))
/**
  * @}
  */
/**
  * @defgroup CAN_Operating_Mode
  * @{
  */
#define CAN_OperatingMode_Initialization  ((uint8_t)0x00) /*!< Initialization mode */
#define CAN_OperatingMode_Normal          ((uint8_t)0x01) /*!< Normal mode */
#define CAN_OperatingMode_Sleep           ((uint8_t)0x02) /*!< sleep mode */
#define IS_CAN_OPERATING_MODE(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\
                                    ((MODE) == CAN_OperatingMode_Normal)|| \
                                                                        ((MODE) == CAN_OperatingMode_Sleep))
/**
  * @}
  */
/**
  * @defgroup CAN_Mode_Status
  * @{
  */
#define CAN_ModeStatus_Failed    ((uint8_t)0x00)                /*!< CAN entering the specific mode failed */
#define CAN_ModeStatus_Success   ((uint8_t)!CAN_ModeStatus_Failed)   /*!< CAN entering the specific mode Succeed */
/**
  * @}
  */
/** @defgroup CAN_synchronisation_jump_width
  * @{
  */
#define CAN_SJW_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
#define CAN_SJW_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
#define CAN_SJW_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
#define CAN_SJW_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1tq) || ((SJW) == CAN_SJW_2tq)|| \
                         ((SJW) == CAN_SJW_3tq) || ((SJW) == CAN_SJW_4tq))
/**
  * @}
  */
/** @defgroup CAN_time_quantum_in_bit_segment_1
  * @{
  */
#define CAN_BS1_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
#define CAN_BS1_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
#define CAN_BS1_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
#define CAN_BS1_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
#define CAN_BS1_5tq                 ((uint8_t)0x04)  /*!< 5 time quantum */
#define CAN_BS1_6tq                 ((uint8_t)0x05)  /*!< 6 time quantum */
#define CAN_BS1_7tq                 ((uint8_t)0x06)  /*!< 7 time quantum */
#define CAN_BS1_8tq                 ((uint8_t)0x07)  /*!< 8 time quantum */
#define CAN_BS1_9tq                 ((uint8_t)0x08)  /*!< 9 time quantum */
#define CAN_BS1_10tq                ((uint8_t)0x09)  /*!< 10 time quantum */
#define CAN_BS1_11tq                ((uint8_t)0x0A)  /*!< 11 time quantum */
#define CAN_BS1_12tq                ((uint8_t)0x0B)  /*!< 12 time quantum */
#define CAN_BS1_13tq                ((uint8_t)0x0C)  /*!< 13 time quantum */
#define CAN_BS1_14tq                ((uint8_t)0x0D)  /*!< 14 time quantum */
#define CAN_BS1_15tq                ((uint8_t)0x0E)  /*!< 15 time quantum */
#define CAN_BS1_16tq                ((uint8_t)0x0F)  /*!< 16 time quantum */
#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16tq)
/**
  * @}
  */
/** @defgroup CAN_time_quantum_in_bit_segment_2
  * @{
  */
#define CAN_BS2_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
#define CAN_BS2_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
#define CAN_BS2_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
#define CAN_BS2_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
#define CAN_BS2_5tq                 ((uint8_t)0x04)  /*!< 5 time quantum */
#define CAN_BS2_6tq                 ((uint8_t)0x05)  /*!< 6 time quantum */
#define CAN_BS2_7tq                 ((uint8_t)0x06)  /*!< 7 time quantum */
#define CAN_BS2_8tq                 ((uint8_t)0x07)  /*!< 8 time quantum */
#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8tq)
/**
  * @}
  */
/** @defgroup CAN_clock_prescaler
  * @{
  */
#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))
/**
  * @}
  */
/** @defgroup CAN_filter_number
  * @{
  */
#ifndef STM32F10X_CL
  #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 13)
#else
  #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)
#endif /* STM32F10X_CL */
/**
  * @}
  */
/** @defgroup CAN_filter_mode
  * @{
  */
#define CAN_FilterMode_IdMask       ((uint8_t)0x00)  /*!< identifier/mask mode */
#define CAN_FilterMode_IdList       ((uint8_t)0x01)  /*!< identifier list mode */
#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FilterMode_IdMask) || \
                                  ((MODE) == CAN_FilterMode_IdList))
/**
  * @}
  */
/** @defgroup CAN_filter_scale
  * @{
  */
#define CAN_FilterScale_16bit       ((uint8_t)0x00) /*!< Two 16-bit filters */
#define CAN_FilterScale_32bit       ((uint8_t)0x01) /*!< One 32-bit filter */
#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FilterScale_16bit) || \
                                    ((SCALE) == CAN_FilterScale_32bit))
/**
  * @}
  */
/** @defgroup CAN_filter_FIFO
  * @{
  */
#define CAN_Filter_FIFO0             ((uint8_t)0x00)  /*!< Filter FIFO 0 assignment for filter x */
#define CAN_Filter_FIFO1             ((uint8_t)0x01)  /*!< Filter FIFO 1 assignment for filter x */
#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FilterFIFO0) || \
                                  ((FIFO) == CAN_FilterFIFO1))
/**
  * @}
  */
/** @defgroup Start_bank_filter_for_slave_CAN
  * @{
  */
#define IS_CAN_BANKNUMBER(BANKNUMBER) (((BANKNUMBER) >= 1) && ((BANKNUMBER) <= 27))
/**
  * @}
  */
/** @defgroup CAN_Tx
  * @{
  */
#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))
#define IS_CAN_STDID(STDID)   ((STDID) <= ((uint32_t)0x7FF))
#define IS_CAN_EXTID(EXTID)   ((EXTID) <= ((uint32_t)0x1FFFFFFF))
#define IS_CAN_DLC(DLC)       ((DLC) <= ((uint8_t)0x08))
/**
  * @}
  */
/** @defgroup CAN_identifier_type
  * @{
  */
#define CAN_Id_Standard             ((uint32_t)0x00000000)  /*!< Standard Id */
#define CAN_Id_Extended             ((uint32_t)0x00000004)  /*!< Extended Id */
#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || \
                               ((IDTYPE) == CAN_Id_Extended))
/**
  * @}
  */
/** @defgroup CAN_remote_transmission_request
  * @{
  */
#define CAN_RTR_Data                ((uint32_t)0x00000000)  /*!< Data frame */
#define CAN_RTR_Remote              ((uint32_t)0x00000002)  /*!< Remote frame */
#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote))
/**
  * @}
  */
/** @defgroup CAN_transmit_constants
  * @{
  */
#define CAN_TxStatus_Failed         ((uint8_t)0x00)/*!< CAN transmission failed */
#define CAN_TxStatus_Ok             ((uint8_t)0x01) /*!< CAN transmission succeeded */
#define CAN_TxStatus_Pending        ((uint8_t)0x02) /*!< CAN transmission pending */
#define CAN_TxStatus_NoMailBox      ((uint8_t)0x04) /*!< CAN cell did not provide an empty mailbox */
/**
  * @}
  */
/** @defgroup CAN_receive_FIFO_number_constants
  * @{
  */
#define CAN_FIFO0                 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */
#define CAN_FIFO1                 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */
#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))
/**
  * @}
  */
/** @defgroup CAN_sleep_constants
  * @{
  */
#define CAN_Sleep_Failed     ((uint8_t)0x00) /*!< CAN did not enter the sleep mode */
#define CAN_Sleep_Ok         ((uint8_t)0x01) /*!< CAN entered the sleep mode */
/**
  * @}
  */
/** @defgroup CAN_wake_up_constants
  * @{
  */
#define CAN_WakeUp_Failed        ((uint8_t)0x00) /*!< CAN did not leave the sleep mode */
#define CAN_WakeUp_Ok            ((uint8_t)0x01) /*!< CAN leaved the sleep mode */
/**
  * @}
  */
/**
  * @defgroup   CAN_Error_Code_constants
  * @{
  */
#define CAN_ErrorCode_NoErr           ((uint8_t)0x00) /*!< No Error */
#define    CAN_ErrorCode_StuffErr        ((uint8_t)0x10) /*!< Stuff Error */
#define    CAN_ErrorCode_FormErr         ((uint8_t)0x20) /*!< Form Error */
#define    CAN_ErrorCode_ACKErr          ((uint8_t)0x30) /*!< Acknowledgment Error */
#define    CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /*!< Bit Recessive Error */
#define    CAN_ErrorCode_BitDominantErr  ((uint8_t)0x50) /*!< Bit Dominant Error */
#define    CAN_ErrorCode_CRCErr          ((uint8_t)0x60) /*!< CRC Error  */
#define    CAN_ErrorCode_SoftwareSetErr  ((uint8_t)0x70) /*!< Software Set Error */
/**
  * @}
  */
/** @defgroup CAN_flags
  * @{
  */
/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()
   and CAN_ClearFlag() functions. */
/* If the flag is 0x1XXXXXXX, it means that it can only be used with CAN_GetFlagStatus() function.  */
/* Transmit Flags */
#define CAN_FLAG_RQCP0             ((uint32_t)0x38000001) /*!< Request MailBox0 Flag */
#define CAN_FLAG_RQCP1             ((uint32_t)0x38000100) /*!< Request MailBox1 Flag */
#define CAN_FLAG_RQCP2             ((uint32_t)0x38010000) /*!< Request MailBox2 Flag */
/* Receive Flags */
#define CAN_FLAG_FMP0              ((uint32_t)0x12000003) /*!< FIFO 0 Message Pending Flag */
#define CAN_FLAG_FF0               ((uint32_t)0x32000008) /*!< FIFO 0 Full Flag            */
#define CAN_FLAG_FOV0              ((uint32_t)0x32000010) /*!< FIFO 0 Overrun Flag         */
#define CAN_FLAG_FMP1              ((uint32_t)0x14000003) /*!< FIFO 1 Message Pending Flag */
#define CAN_FLAG_FF1               ((uint32_t)0x34000008) /*!< FIFO 1 Full Flag            */
#define CAN_FLAG_FOV1              ((uint32_t)0x34000010) /*!< FIFO 1 Overrun Flag         */
/* Operating Mode Flags */
#define CAN_FLAG_WKU               ((uint32_t)0x31000008) /*!< Wake up Flag */
#define CAN_FLAG_SLAK              ((uint32_t)0x31000012) /*!< Sleep acknowledge Flag */
/* Note: When SLAK intterupt is disabled (SLKIE=0), no polling on SLAKI is possible.
         In this case the SLAK bit can be polled.*/
/* Error Flags */
#define CAN_FLAG_EWG               ((uint32_t)0x10F00001) /*!< Error Warning Flag   */
#define CAN_FLAG_EPV               ((uint32_t)0x10F00002) /*!< Error Passive Flag   */
#define CAN_FLAG_BOF               ((uint32_t)0x10F00004) /*!< Bus-Off Flag         */
#define CAN_FLAG_LEC               ((uint32_t)0x30F00070) /*!< Last error code Flag */
#define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_LEC)  || ((FLAG) == CAN_FLAG_BOF)   || \
                               ((FLAG) == CAN_FLAG_EPV)  || ((FLAG) == CAN_FLAG_EWG)   || \
                               ((FLAG) == CAN_FLAG_WKU)  || ((FLAG) == CAN_FLAG_FOV0)  || \
                               ((FLAG) == CAN_FLAG_FF0)  || ((FLAG) == CAN_FLAG_FMP0)  || \
                               ((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1)   || \
                               ((FLAG) == CAN_FLAG_FMP1) || ((FLAG) == CAN_FLAG_RQCP2) || \
                               ((FLAG) == CAN_FLAG_RQCP1)|| ((FLAG) == CAN_FLAG_RQCP0) || \
                               ((FLAG) == CAN_FLAG_SLAK ))
#define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_RQCP2) || \
                                ((FLAG) == CAN_FLAG_RQCP1)  || ((FLAG) == CAN_FLAG_RQCP0) || \
                                ((FLAG) == CAN_FLAG_FF0)  || ((FLAG) == CAN_FLAG_FOV0) ||\
                                ((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \
                                ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_SLAK))
/**
  * @}
  */
/** @defgroup CAN_interrupts
  * @{
  */
#define CAN_IT_TME                  ((uint32_t)0x00000001) /*!< Transmit mailbox empty Interrupt*/
/* Receive Interrupts */
#define CAN_IT_FMP0                 ((uint32_t)0x00000002) /*!< FIFO 0 message pending Interrupt*/
#define CAN_IT_FF0                  ((uint32_t)0x00000004) /*!< FIFO 0 full Interrupt*/
#define CAN_IT_FOV0                 ((uint32_t)0x00000008) /*!< FIFO 0 overrun Interrupt*/
#define CAN_IT_FMP1                 ((uint32_t)0x00000010) /*!< FIFO 1 message pending Interrupt*/
#define CAN_IT_FF1                  ((uint32_t)0x00000020) /*!< FIFO 1 full Interrupt*/
#define CAN_IT_FOV1                 ((uint32_t)0x00000040) /*!< FIFO 1 overrun Interrupt*/
/* Operating Mode Interrupts */
#define CAN_IT_WKU                  ((uint32_t)0x00010000) /*!< Wake-up Interrupt*/
#define CAN_IT_SLK                  ((uint32_t)0x00020000) /*!< Sleep acknowledge Interrupt*/
/* Error Interrupts */
#define CAN_IT_EWG                  ((uint32_t)0x00000100) /*!< Error warning Interrupt*/
#define CAN_IT_EPV                  ((uint32_t)0x00000200) /*!< Error passive Interrupt*/
#define CAN_IT_BOF                  ((uint32_t)0x00000400) /*!< Bus-off Interrupt*/
#define CAN_IT_LEC                  ((uint32_t)0x00000800) /*!< Last error code Interrupt*/
#define CAN_IT_ERR                  ((uint32_t)0x00008000) /*!< Error Interrupt*/
/* Flags named as Interrupts : kept only for FW compatibility */
#define CAN_IT_RQCP0   CAN_IT_TME
#define CAN_IT_RQCP1   CAN_IT_TME
#define CAN_IT_RQCP2   CAN_IT_TME
#define IS_CAN_IT(IT)        (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0)  ||\
                             ((IT) == CAN_IT_FF0)  || ((IT) == CAN_IT_FOV0)  ||\
                             ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1)   ||\
                             ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG)   ||\
                             ((IT) == CAN_IT_EPV)  || ((IT) == CAN_IT_BOF)   ||\
                             ((IT) == CAN_IT_LEC)  || ((IT) == CAN_IT_ERR)   ||\
                             ((IT) == CAN_IT_WKU)  || ((IT) == CAN_IT_SLK))
#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0)    ||\
                             ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1)    ||\
                             ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG)    ||\
                             ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF)    ||\
                             ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR)    ||\
                             ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))
/**
  * @}
  */
/** @defgroup CAN_Legacy
  * @{
  */
#define CANINITFAILED               CAN_InitStatus_Failed
#define CANINITOK                   CAN_InitStatus_Success
#define CAN_FilterFIFO0             CAN_Filter_FIFO0
#define CAN_FilterFIFO1             CAN_Filter_FIFO1
#define CAN_ID_STD                  CAN_Id_Standard
#define CAN_ID_EXT                  CAN_Id_Extended
#define CAN_RTR_DATA                CAN_RTR_Data
#define CAN_RTR_REMOTE              CAN_RTR_Remote
#define CANTXFAILE                  CAN_TxStatus_Failed
#define CANTXOK                     CAN_TxStatus_Ok
#define CANTXPENDING                CAN_TxStatus_Pending
#define CAN_NO_MB                   CAN_TxStatus_NoMailBox
#define CANSLEEPFAILED              CAN_Sleep_Failed
#define CANSLEEPOK                  CAN_Sleep_Ok
#define CANWAKEUPFAILED             CAN_WakeUp_Failed
#define CANWAKEUPOK                 CAN_WakeUp_Ok
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup CAN_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup CAN_Exported_Functions
  * @{
  */
/*  Function used to set the CAN configuration to the default reset state *****/
void CAN_DeInit(CAN_TypeDef* CANx);
/* Initialization and Configuration functions *********************************/
uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct);
void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct);
void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct);
void CAN_SlaveStartBank(uint8_t CAN_BankNumber);
void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState);
void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);
/* Transmit functions *********************************************************/
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);
uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox);
void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox);
/* Receive functions **********************************************************/
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage);
void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber);
uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber);
/* Operation modes functions **************************************************/
uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode);
uint8_t CAN_Sleep(CAN_TypeDef* CANx);
uint8_t CAN_WakeUp(CAN_TypeDef* CANx);
/* Error management functions *************************************************/
uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx);
uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx);
uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx);
/* Interrupts and flags management functions **********************************/
void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState);
FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG);
void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG);
ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT);
void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_CAN_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_cec.h
New file
@@ -0,0 +1,210 @@
/**
  ******************************************************************************
  * @file    stm32f10x_cec.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the CEC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CEC_H
#define __STM32F10x_CEC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup CEC
  * @{
  */
/** @defgroup CEC_Exported_Types
  * @{
  */
/**
  * @brief  CEC Init structure definition
  */
typedef struct
{
  uint16_t CEC_BitTimingMode; /*!< Configures the CEC Bit Timing Error Mode.
                               This parameter can be a value of @ref CEC_BitTiming_Mode */
  uint16_t CEC_BitPeriodMode; /*!< Configures the CEC Bit Period Error Mode.
                               This parameter can be a value of @ref CEC_BitPeriod_Mode */
}CEC_InitTypeDef;
/**
  * @}
  */
/** @defgroup CEC_Exported_Constants
  * @{
  */
/** @defgroup CEC_BitTiming_Mode
  * @{
  */
#define CEC_BitTimingStdMode                    ((uint16_t)0x00) /*!< Bit timing error Standard Mode */
#define CEC_BitTimingErrFreeMode                CEC_CFGR_BTEM   /*!< Bit timing error Free Mode */
#define IS_CEC_BIT_TIMING_ERROR_MODE(MODE) (((MODE) == CEC_BitTimingStdMode) || \
                                            ((MODE) == CEC_BitTimingErrFreeMode))
/**
  * @}
  */
/** @defgroup CEC_BitPeriod_Mode
  * @{
  */
#define CEC_BitPeriodStdMode                    ((uint16_t)0x00) /*!< Bit period error Standard Mode */
#define CEC_BitPeriodFlexibleMode                CEC_CFGR_BPEM   /*!< Bit period error Flexible Mode */
#define IS_CEC_BIT_PERIOD_ERROR_MODE(MODE) (((MODE) == CEC_BitPeriodStdMode) || \
                                            ((MODE) == CEC_BitPeriodFlexibleMode))
/**
  * @}
  */
/** @defgroup CEC_interrupts_definition
  * @{
  */
#define CEC_IT_TERR                              CEC_CSR_TERR
#define CEC_IT_TBTRF                             CEC_CSR_TBTRF
#define CEC_IT_RERR                              CEC_CSR_RERR
#define CEC_IT_RBTF                              CEC_CSR_RBTF
#define IS_CEC_GET_IT(IT) (((IT) == CEC_IT_TERR) || ((IT) == CEC_IT_TBTRF) || \
                           ((IT) == CEC_IT_RERR) || ((IT) == CEC_IT_RBTF))
/**
  * @}
  */
/** @defgroup CEC_Own_Address
  * @{
  */
#define IS_CEC_ADDRESS(ADDRESS) ((ADDRESS) < 0x10)
/**
  * @}
  */
/** @defgroup CEC_Prescaler
  * @{
  */
#define IS_CEC_PRESCALER(PRESCALER) ((PRESCALER) <= 0x3FFF)
/**
  * @}
  */
/** @defgroup CEC_flags_definition
  * @{
  */
/**
  * @brief  ESR register flags
  */
#define CEC_FLAG_BTE                            ((uint32_t)0x10010000)
#define CEC_FLAG_BPE                            ((uint32_t)0x10020000)
#define CEC_FLAG_RBTFE                          ((uint32_t)0x10040000)
#define CEC_FLAG_SBE                            ((uint32_t)0x10080000)
#define CEC_FLAG_ACKE                           ((uint32_t)0x10100000)
#define CEC_FLAG_LINE                           ((uint32_t)0x10200000)
#define CEC_FLAG_TBTFE                          ((uint32_t)0x10400000)
/**
  * @brief  CSR register flags
  */
#define CEC_FLAG_TEOM                           ((uint32_t)0x00000002)
#define CEC_FLAG_TERR                           ((uint32_t)0x00000004)
#define CEC_FLAG_TBTRF                          ((uint32_t)0x00000008)
#define CEC_FLAG_RSOM                           ((uint32_t)0x00000010)
#define CEC_FLAG_REOM                           ((uint32_t)0x00000020)
#define CEC_FLAG_RERR                           ((uint32_t)0x00000040)
#define CEC_FLAG_RBTF                           ((uint32_t)0x00000080)
#define IS_CEC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFF03) == 0x00) && ((FLAG) != 0x00))
#define IS_CEC_GET_FLAG(FLAG) (((FLAG) == CEC_FLAG_BTE) || ((FLAG) == CEC_FLAG_BPE) || \
                               ((FLAG) == CEC_FLAG_RBTFE) || ((FLAG)== CEC_FLAG_SBE) || \
                               ((FLAG) == CEC_FLAG_ACKE) || ((FLAG) == CEC_FLAG_LINE) || \
                               ((FLAG) == CEC_FLAG_TBTFE) || ((FLAG) == CEC_FLAG_TEOM) || \
                               ((FLAG) == CEC_FLAG_TERR) || ((FLAG) == CEC_FLAG_TBTRF) || \
                               ((FLAG) == CEC_FLAG_RSOM) || ((FLAG) == CEC_FLAG_REOM) || \
                               ((FLAG) == CEC_FLAG_RERR) || ((FLAG) == CEC_FLAG_RBTF))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup CEC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup CEC_Exported_Functions
  * @{
  */
void CEC_DeInit(void);
void CEC_Init(CEC_InitTypeDef* CEC_InitStruct);
void CEC_Cmd(FunctionalState NewState);
void CEC_ITConfig(FunctionalState NewState);
void CEC_OwnAddressConfig(uint8_t CEC_OwnAddress);
void CEC_SetPrescaler(uint16_t CEC_Prescaler);
void CEC_SendDataByte(uint8_t Data);
uint8_t CEC_ReceiveDataByte(void);
void CEC_StartOfMessage(void);
void CEC_EndOfMessageCmd(FunctionalState NewState);
FlagStatus CEC_GetFlagStatus(uint32_t CEC_FLAG);
void CEC_ClearFlag(uint32_t CEC_FLAG);
ITStatus CEC_GetITStatus(uint8_t CEC_IT);
void CEC_ClearITPendingBit(uint16_t CEC_IT);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_CEC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_conf.h
New file
@@ -0,0 +1,77 @@
/**
  ******************************************************************************
  * @file    Project/STM32F10x_StdPeriph_Template/stm32f10x_conf.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    08-April-2011
  * @brief   Library configuration file.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CONF_H
#define __STM32F10x_CONF_H
/* Includes ------------------------------------------------------------------*/
/* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
#include "stm32f10x_adc.h"
#include "stm32f10x_bkp.h"
#include "stm32f10x_can.h"
#include "stm32f10x_cec.h"
#include "stm32f10x_crc.h"
#include "stm32f10x_dac.h"
#include "stm32f10x_dbgmcu.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "stm32f10x_iwdg.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_sdio.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_wwdg.h"
#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Uncomment the line below to expanse the "assert_param" macro in the
   Standard Peripheral Library drivers code */
/* #define USE_FULL_ASSERT    1 */
/* Exported macro ------------------------------------------------------------*/
#ifdef  USE_FULL_ASSERT
/**
  * @brief  The assert_param macro is used for function's parameters check.
  * @param  expr: If expr is false, it calls assert_failed function which reports
  *         the name of the source file and the source line number of the call
  *         that failed. If expr is true, it returns no value.
  * @retval None
  */
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
#endif /* __STM32F10x_CONF_H */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_crc.h
New file
@@ -0,0 +1,94 @@
/**
  ******************************************************************************
  * @file    stm32f10x_crc.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the CRC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_CRC_H
#define __STM32F10x_CRC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup CRC
  * @{
  */
/** @defgroup CRC_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup CRC_Exported_Constants
  * @{
  */
/**
  * @}
  */
/** @defgroup CRC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup CRC_Exported_Functions
  * @{
  */
void CRC_ResetDR(void);
uint32_t CRC_CalcCRC(uint32_t Data);
uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength);
uint32_t CRC_GetCRC(void);
void CRC_SetIDRegister(uint8_t IDValue);
uint8_t CRC_GetIDRegister(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_CRC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_dac.h
New file
@@ -0,0 +1,317 @@
/**
  ******************************************************************************
  * @file    stm32f10x_dac.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the DAC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_DAC_H
#define __STM32F10x_DAC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup DAC
  * @{
  */
/** @defgroup DAC_Exported_Types
  * @{
  */
/**
  * @brief  DAC Init structure definition
  */
typedef struct
{
  uint32_t DAC_Trigger;                      /*!< Specifies the external trigger for the selected DAC channel.
                                                  This parameter can be a value of @ref DAC_trigger_selection */
  uint32_t DAC_WaveGeneration;               /*!< Specifies whether DAC channel noise waves or triangle waves
                                                  are generated, or whether no wave is generated.
                                                  This parameter can be a value of @ref DAC_wave_generation */
  uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation or
                                                  the maximum amplitude triangle generation for the DAC channel.
                                                  This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */
  uint32_t DAC_OutputBuffer;                 /*!< Specifies whether the DAC channel output buffer is enabled or disabled.
                                                  This parameter can be a value of @ref DAC_output_buffer */
}DAC_InitTypeDef;
/**
  * @}
  */
/** @defgroup DAC_Exported_Constants
  * @{
  */
/** @defgroup DAC_trigger_selection
  * @{
  */
#define DAC_Trigger_None                   ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register
                                                                       has been loaded, and not by external trigger */
#define DAC_Trigger_T6_TRGO                ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T8_TRGO                ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel
                                                                       only in High-density devices*/
#define DAC_Trigger_T3_TRGO                ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel
                                                                       only in Connectivity line, Medium-density and Low-density Value Line devices */
#define DAC_Trigger_T7_TRGO                ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T5_TRGO                ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T15_TRGO               ((uint32_t)0x0000001C) /*!< TIM15 TRGO selected as external conversion trigger for DAC channel
                                                                       only in Medium-density and Low-density Value Line devices*/
#define DAC_Trigger_T2_TRGO                ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T4_TRGO                ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_Ext_IT9                ((uint32_t)0x00000034) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */
#define DAC_Trigger_Software               ((uint32_t)0x0000003C) /*!< Conversion started by software trigger for DAC channel */
#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_Trigger_None) || \
                                 ((TRIGGER) == DAC_Trigger_T6_TRGO) || \
                                 ((TRIGGER) == DAC_Trigger_T8_TRGO) || \
                                 ((TRIGGER) == DAC_Trigger_T7_TRGO) || \
                                 ((TRIGGER) == DAC_Trigger_T5_TRGO) || \
                                 ((TRIGGER) == DAC_Trigger_T2_TRGO) || \
                                 ((TRIGGER) == DAC_Trigger_T4_TRGO) || \
                                 ((TRIGGER) == DAC_Trigger_Ext_IT9) || \
                                 ((TRIGGER) == DAC_Trigger_Software))
/**
  * @}
  */
/** @defgroup DAC_wave_generation
  * @{
  */
#define DAC_WaveGeneration_None            ((uint32_t)0x00000000)
#define DAC_WaveGeneration_Noise           ((uint32_t)0x00000040)
#define DAC_WaveGeneration_Triangle        ((uint32_t)0x00000080)
#define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WaveGeneration_None) || \
                                    ((WAVE) == DAC_WaveGeneration_Noise) || \
                                    ((WAVE) == DAC_WaveGeneration_Triangle))
/**
  * @}
  */
/** @defgroup DAC_lfsrunmask_triangleamplitude
  * @{
  */
#define DAC_LFSRUnmask_Bit0                ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */
#define DAC_LFSRUnmask_Bits1_0             ((uint32_t)0x00000100) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits2_0             ((uint32_t)0x00000200) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits3_0             ((uint32_t)0x00000300) /*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits4_0             ((uint32_t)0x00000400) /*!< Unmask DAC channel LFSR bit[4:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits5_0             ((uint32_t)0x00000500) /*!< Unmask DAC channel LFSR bit[5:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits6_0             ((uint32_t)0x00000600) /*!< Unmask DAC channel LFSR bit[6:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits7_0             ((uint32_t)0x00000700) /*!< Unmask DAC channel LFSR bit[7:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits8_0             ((uint32_t)0x00000800) /*!< Unmask DAC channel LFSR bit[8:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits9_0             ((uint32_t)0x00000900) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits10_0            ((uint32_t)0x00000A00) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits11_0            ((uint32_t)0x00000B00) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */
#define DAC_TriangleAmplitude_1            ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */
#define DAC_TriangleAmplitude_3            ((uint32_t)0x00000100) /*!< Select max triangle amplitude of 3 */
#define DAC_TriangleAmplitude_7            ((uint32_t)0x00000200) /*!< Select max triangle amplitude of 7 */
#define DAC_TriangleAmplitude_15           ((uint32_t)0x00000300) /*!< Select max triangle amplitude of 15 */
#define DAC_TriangleAmplitude_31           ((uint32_t)0x00000400) /*!< Select max triangle amplitude of 31 */
#define DAC_TriangleAmplitude_63           ((uint32_t)0x00000500) /*!< Select max triangle amplitude of 63 */
#define DAC_TriangleAmplitude_127          ((uint32_t)0x00000600) /*!< Select max triangle amplitude of 127 */
#define DAC_TriangleAmplitude_255          ((uint32_t)0x00000700) /*!< Select max triangle amplitude of 255 */
#define DAC_TriangleAmplitude_511          ((uint32_t)0x00000800) /*!< Select max triangle amplitude of 511 */
#define DAC_TriangleAmplitude_1023         ((uint32_t)0x00000900) /*!< Select max triangle amplitude of 1023 */
#define DAC_TriangleAmplitude_2047         ((uint32_t)0x00000A00) /*!< Select max triangle amplitude of 2047 */
#define DAC_TriangleAmplitude_4095         ((uint32_t)0x00000B00) /*!< Select max triangle amplitude of 4095 */
#define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUnmask_Bit0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits1_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits2_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits3_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits4_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits5_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits6_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits7_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits8_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits9_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits10_0) || \
                                                      ((VALUE) == DAC_LFSRUnmask_Bits11_0) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_1) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_3) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_7) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_15) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_31) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_63) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_127) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_255) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_511) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_1023) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_2047) || \
                                                      ((VALUE) == DAC_TriangleAmplitude_4095))
/**
  * @}
  */
/** @defgroup DAC_output_buffer
  * @{
  */
#define DAC_OutputBuffer_Enable            ((uint32_t)0x00000000)
#define DAC_OutputBuffer_Disable           ((uint32_t)0x00000002)
#define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OutputBuffer_Enable) || \
                                           ((STATE) == DAC_OutputBuffer_Disable))
/**
  * @}
  */
/** @defgroup DAC_Channel_selection
  * @{
  */
#define DAC_Channel_1                      ((uint32_t)0x00000000)
#define DAC_Channel_2                      ((uint32_t)0x00000010)
#define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_Channel_1) || \
                                 ((CHANNEL) == DAC_Channel_2))
/**
  * @}
  */
/** @defgroup DAC_data_alignment
  * @{
  */
#define DAC_Align_12b_R                    ((uint32_t)0x00000000)
#define DAC_Align_12b_L                    ((uint32_t)0x00000004)
#define DAC_Align_8b_R                     ((uint32_t)0x00000008)
#define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_Align_12b_R) || \
                             ((ALIGN) == DAC_Align_12b_L) || \
                             ((ALIGN) == DAC_Align_8b_R))
/**
  * @}
  */
/** @defgroup DAC_wave_generation
  * @{
  */
#define DAC_Wave_Noise                     ((uint32_t)0x00000040)
#define DAC_Wave_Triangle                  ((uint32_t)0x00000080)
#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_Wave_Noise) || \
                           ((WAVE) == DAC_Wave_Triangle))
/**
  * @}
  */
/** @defgroup DAC_data
  * @{
  */
#define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0)
/**
  * @}
  */
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)  || defined (STM32F10X_HD_VL)
/** @defgroup DAC_interrupts_definition
  * @{
  */
#define DAC_IT_DMAUDR                      ((uint32_t)0x00002000)
#define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR))
/**
  * @}
  */
/** @defgroup DAC_flags_definition
  * @{
  */
#define DAC_FLAG_DMAUDR                    ((uint32_t)0x00002000)
#define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR))
/**
  * @}
  */
#endif
/**
  * @}
  */
/** @defgroup DAC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup DAC_Exported_Functions
  * @{
  */
void DAC_DeInit(void);
void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct);
void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct);
void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState);
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState);
#endif
void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState);
void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState);
void DAC_DualSoftwareTriggerCmd(FunctionalState NewState);
void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState);
void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data);
void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data);
void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1);
uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel);
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG);
void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG);
ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT);
void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT);
#endif
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_DAC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_dbgmcu.h
New file
@@ -0,0 +1,119 @@
/**
  ******************************************************************************
  * @file    stm32f10x_dbgmcu.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the DBGMCU
  *          firmware library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_DBGMCU_H
#define __STM32F10x_DBGMCU_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup DBGMCU
  * @{
  */
/** @defgroup DBGMCU_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup DBGMCU_Exported_Constants
  * @{
  */
#define DBGMCU_SLEEP                 ((uint32_t)0x00000001)
#define DBGMCU_STOP                  ((uint32_t)0x00000002)
#define DBGMCU_STANDBY               ((uint32_t)0x00000004)
#define DBGMCU_IWDG_STOP             ((uint32_t)0x00000100)
#define DBGMCU_WWDG_STOP             ((uint32_t)0x00000200)
#define DBGMCU_TIM1_STOP             ((uint32_t)0x00000400)
#define DBGMCU_TIM2_STOP             ((uint32_t)0x00000800)
#define DBGMCU_TIM3_STOP             ((uint32_t)0x00001000)
#define DBGMCU_TIM4_STOP             ((uint32_t)0x00002000)
#define DBGMCU_CAN1_STOP             ((uint32_t)0x00004000)
#define DBGMCU_I2C1_SMBUS_TIMEOUT    ((uint32_t)0x00008000)
#define DBGMCU_I2C2_SMBUS_TIMEOUT    ((uint32_t)0x00010000)
#define DBGMCU_TIM8_STOP             ((uint32_t)0x00020000)
#define DBGMCU_TIM5_STOP             ((uint32_t)0x00040000)
#define DBGMCU_TIM6_STOP             ((uint32_t)0x00080000)
#define DBGMCU_TIM7_STOP             ((uint32_t)0x00100000)
#define DBGMCU_CAN2_STOP             ((uint32_t)0x00200000)
#define DBGMCU_TIM15_STOP            ((uint32_t)0x00400000)
#define DBGMCU_TIM16_STOP            ((uint32_t)0x00800000)
#define DBGMCU_TIM17_STOP            ((uint32_t)0x01000000)
#define DBGMCU_TIM12_STOP            ((uint32_t)0x02000000)
#define DBGMCU_TIM13_STOP            ((uint32_t)0x04000000)
#define DBGMCU_TIM14_STOP            ((uint32_t)0x08000000)
#define DBGMCU_TIM9_STOP             ((uint32_t)0x10000000)
#define DBGMCU_TIM10_STOP            ((uint32_t)0x20000000)
#define DBGMCU_TIM11_STOP            ((uint32_t)0x40000000)
#define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0x800000F8) == 0x00) && ((PERIPH) != 0x00))
/**
  * @}
  */
/** @defgroup DBGMCU_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup DBGMCU_Exported_Functions
  * @{
  */
uint32_t DBGMCU_GetREVID(void);
uint32_t DBGMCU_GetDEVID(void);
void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_DBGMCU_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_dma.h
New file
@@ -0,0 +1,439 @@
/**
  ******************************************************************************
  * @file    stm32f10x_dma.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the DMA firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_DMA_H
#define __STM32F10x_DMA_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup DMA
  * @{
  */
/** @defgroup DMA_Exported_Types
  * @{
  */
/**
  * @brief  DMA Init structure definition
  */
typedef struct
{
  uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Channelx. */
  uint32_t DMA_MemoryBaseAddr;     /*!< Specifies the memory base address for DMAy Channelx. */
  uint32_t DMA_DIR;                /*!< Specifies if the peripheral is the source or destination.
                                        This parameter can be a value of @ref DMA_data_transfer_direction */
  uint32_t DMA_BufferSize;         /*!< Specifies the buffer size, in data unit, of the specified Channel.
                                        The data unit is equal to the configuration set in DMA_PeripheralDataSize
                                        or DMA_MemoryDataSize members depending in the transfer direction. */
  uint32_t DMA_PeripheralInc;      /*!< Specifies whether the Peripheral address register is incremented or not.
                                        This parameter can be a value of @ref DMA_peripheral_incremented_mode */
  uint32_t DMA_MemoryInc;          /*!< Specifies whether the memory address register is incremented or not.
                                        This parameter can be a value of @ref DMA_memory_incremented_mode */
  uint32_t DMA_PeripheralDataSize; /*!< Specifies the Peripheral data width.
                                        This parameter can be a value of @ref DMA_peripheral_data_size */
  uint32_t DMA_MemoryDataSize;     /*!< Specifies the Memory data width.
                                        This parameter can be a value of @ref DMA_memory_data_size */
  uint32_t DMA_Mode;               /*!< Specifies the operation mode of the DMAy Channelx.
                                        This parameter can be a value of @ref DMA_circular_normal_mode.
                                        @note: The circular buffer mode cannot be used if the memory-to-memory
                                              data transfer is configured on the selected Channel */
  uint32_t DMA_Priority;           /*!< Specifies the software priority for the DMAy Channelx.
                                        This parameter can be a value of @ref DMA_priority_level */
  uint32_t DMA_M2M;                /*!< Specifies if the DMAy Channelx will be used in memory-to-memory transfer.
                                        This parameter can be a value of @ref DMA_memory_to_memory */
}DMA_InitTypeDef;
/**
  * @}
  */
/** @defgroup DMA_Exported_Constants
  * @{
  */
#define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Channel1) || \
                                   ((PERIPH) == DMA1_Channel2) || \
                                   ((PERIPH) == DMA1_Channel3) || \
                                   ((PERIPH) == DMA1_Channel4) || \
                                   ((PERIPH) == DMA1_Channel5) || \
                                   ((PERIPH) == DMA1_Channel6) || \
                                   ((PERIPH) == DMA1_Channel7) || \
                                   ((PERIPH) == DMA2_Channel1) || \
                                   ((PERIPH) == DMA2_Channel2) || \
                                   ((PERIPH) == DMA2_Channel3) || \
                                   ((PERIPH) == DMA2_Channel4) || \
                                   ((PERIPH) == DMA2_Channel5))
/** @defgroup DMA_data_transfer_direction
  * @{
  */
#define DMA_DIR_PeripheralDST              ((uint32_t)0x00000010)
#define DMA_DIR_PeripheralSRC              ((uint32_t)0x00000000)
#define IS_DMA_DIR(DIR) (((DIR) == DMA_DIR_PeripheralDST) || \
                         ((DIR) == DMA_DIR_PeripheralSRC))
/**
  * @}
  */
/** @defgroup DMA_peripheral_incremented_mode
  * @{
  */
#define DMA_PeripheralInc_Enable           ((uint32_t)0x00000040)
#define DMA_PeripheralInc_Disable          ((uint32_t)0x00000000)
#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PeripheralInc_Enable) || \
                                            ((STATE) == DMA_PeripheralInc_Disable))
/**
  * @}
  */
/** @defgroup DMA_memory_incremented_mode
  * @{
  */
#define DMA_MemoryInc_Enable               ((uint32_t)0x00000080)
#define DMA_MemoryInc_Disable              ((uint32_t)0x00000000)
#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MemoryInc_Enable) || \
                                        ((STATE) == DMA_MemoryInc_Disable))
/**
  * @}
  */
/** @defgroup DMA_peripheral_data_size
  * @{
  */
#define DMA_PeripheralDataSize_Byte        ((uint32_t)0x00000000)
#define DMA_PeripheralDataSize_HalfWord    ((uint32_t)0x00000100)
#define DMA_PeripheralDataSize_Word        ((uint32_t)0x00000200)
#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PeripheralDataSize_Byte) || \
                                           ((SIZE) == DMA_PeripheralDataSize_HalfWord) || \
                                           ((SIZE) == DMA_PeripheralDataSize_Word))
/**
  * @}
  */
/** @defgroup DMA_memory_data_size
  * @{
  */
#define DMA_MemoryDataSize_Byte            ((uint32_t)0x00000000)
#define DMA_MemoryDataSize_HalfWord        ((uint32_t)0x00000400)
#define DMA_MemoryDataSize_Word            ((uint32_t)0x00000800)
#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \
                                       ((SIZE) == DMA_MemoryDataSize_HalfWord) || \
                                       ((SIZE) == DMA_MemoryDataSize_Word))
/**
  * @}
  */
/** @defgroup DMA_circular_normal_mode
  * @{
  */
#define DMA_Mode_Circular                  ((uint32_t)0x00000020)
#define DMA_Mode_Normal                    ((uint32_t)0x00000000)
#define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Circular) || ((MODE) == DMA_Mode_Normal))
/**
  * @}
  */
/** @defgroup DMA_priority_level
  * @{
  */
#define DMA_Priority_VeryHigh              ((uint32_t)0x00003000)
#define DMA_Priority_High                  ((uint32_t)0x00002000)
#define DMA_Priority_Medium                ((uint32_t)0x00001000)
#define DMA_Priority_Low                   ((uint32_t)0x00000000)
#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_VeryHigh) || \
                                   ((PRIORITY) == DMA_Priority_High) || \
                                   ((PRIORITY) == DMA_Priority_Medium) || \
                                   ((PRIORITY) == DMA_Priority_Low))
/**
  * @}
  */
/** @defgroup DMA_memory_to_memory
  * @{
  */
#define DMA_M2M_Enable                     ((uint32_t)0x00004000)
#define DMA_M2M_Disable                    ((uint32_t)0x00000000)
#define IS_DMA_M2M_STATE(STATE) (((STATE) == DMA_M2M_Enable) || ((STATE) == DMA_M2M_Disable))
/**
  * @}
  */
/** @defgroup DMA_interrupts_definition
  * @{
  */
#define DMA_IT_TC                          ((uint32_t)0x00000002)
#define DMA_IT_HT                          ((uint32_t)0x00000004)
#define DMA_IT_TE                          ((uint32_t)0x00000008)
#define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFFF1) == 0x00) && ((IT) != 0x00))
#define DMA1_IT_GL1                        ((uint32_t)0x00000001)
#define DMA1_IT_TC1                        ((uint32_t)0x00000002)
#define DMA1_IT_HT1                        ((uint32_t)0x00000004)
#define DMA1_IT_TE1                        ((uint32_t)0x00000008)
#define DMA1_IT_GL2                        ((uint32_t)0x00000010)
#define DMA1_IT_TC2                        ((uint32_t)0x00000020)
#define DMA1_IT_HT2                        ((uint32_t)0x00000040)
#define DMA1_IT_TE2                        ((uint32_t)0x00000080)
#define DMA1_IT_GL3                        ((uint32_t)0x00000100)
#define DMA1_IT_TC3                        ((uint32_t)0x00000200)
#define DMA1_IT_HT3                        ((uint32_t)0x00000400)
#define DMA1_IT_TE3                        ((uint32_t)0x00000800)
#define DMA1_IT_GL4                        ((uint32_t)0x00001000)
#define DMA1_IT_TC4                        ((uint32_t)0x00002000)
#define DMA1_IT_HT4                        ((uint32_t)0x00004000)
#define DMA1_IT_TE4                        ((uint32_t)0x00008000)
#define DMA1_IT_GL5                        ((uint32_t)0x00010000)
#define DMA1_IT_TC5                        ((uint32_t)0x00020000)
#define DMA1_IT_HT5                        ((uint32_t)0x00040000)
#define DMA1_IT_TE5                        ((uint32_t)0x00080000)
#define DMA1_IT_GL6                        ((uint32_t)0x00100000)
#define DMA1_IT_TC6                        ((uint32_t)0x00200000)
#define DMA1_IT_HT6                        ((uint32_t)0x00400000)
#define DMA1_IT_TE6                        ((uint32_t)0x00800000)
#define DMA1_IT_GL7                        ((uint32_t)0x01000000)
#define DMA1_IT_TC7                        ((uint32_t)0x02000000)
#define DMA1_IT_HT7                        ((uint32_t)0x04000000)
#define DMA1_IT_TE7                        ((uint32_t)0x08000000)
#define DMA2_IT_GL1                        ((uint32_t)0x10000001)
#define DMA2_IT_TC1                        ((uint32_t)0x10000002)
#define DMA2_IT_HT1                        ((uint32_t)0x10000004)
#define DMA2_IT_TE1                        ((uint32_t)0x10000008)
#define DMA2_IT_GL2                        ((uint32_t)0x10000010)
#define DMA2_IT_TC2                        ((uint32_t)0x10000020)
#define DMA2_IT_HT2                        ((uint32_t)0x10000040)
#define DMA2_IT_TE2                        ((uint32_t)0x10000080)
#define DMA2_IT_GL3                        ((uint32_t)0x10000100)
#define DMA2_IT_TC3                        ((uint32_t)0x10000200)
#define DMA2_IT_HT3                        ((uint32_t)0x10000400)
#define DMA2_IT_TE3                        ((uint32_t)0x10000800)
#define DMA2_IT_GL4                        ((uint32_t)0x10001000)
#define DMA2_IT_TC4                        ((uint32_t)0x10002000)
#define DMA2_IT_HT4                        ((uint32_t)0x10004000)
#define DMA2_IT_TE4                        ((uint32_t)0x10008000)
#define DMA2_IT_GL5                        ((uint32_t)0x10010000)
#define DMA2_IT_TC5                        ((uint32_t)0x10020000)
#define DMA2_IT_HT5                        ((uint32_t)0x10040000)
#define DMA2_IT_TE5                        ((uint32_t)0x10080000)
#define IS_DMA_CLEAR_IT(IT) (((((IT) & 0xF0000000) == 0x00) || (((IT) & 0xEFF00000) == 0x00)) && ((IT) != 0x00))
#define IS_DMA_GET_IT(IT) (((IT) == DMA1_IT_GL1) || ((IT) == DMA1_IT_TC1) || \
                           ((IT) == DMA1_IT_HT1) || ((IT) == DMA1_IT_TE1) || \
                           ((IT) == DMA1_IT_GL2) || ((IT) == DMA1_IT_TC2) || \
                           ((IT) == DMA1_IT_HT2) || ((IT) == DMA1_IT_TE2) || \
                           ((IT) == DMA1_IT_GL3) || ((IT) == DMA1_IT_TC3) || \
                           ((IT) == DMA1_IT_HT3) || ((IT) == DMA1_IT_TE3) || \
                           ((IT) == DMA1_IT_GL4) || ((IT) == DMA1_IT_TC4) || \
                           ((IT) == DMA1_IT_HT4) || ((IT) == DMA1_IT_TE4) || \
                           ((IT) == DMA1_IT_GL5) || ((IT) == DMA1_IT_TC5) || \
                           ((IT) == DMA1_IT_HT5) || ((IT) == DMA1_IT_TE5) || \
                           ((IT) == DMA1_IT_GL6) || ((IT) == DMA1_IT_TC6) || \
                           ((IT) == DMA1_IT_HT6) || ((IT) == DMA1_IT_TE6) || \
                           ((IT) == DMA1_IT_GL7) || ((IT) == DMA1_IT_TC7) || \
                           ((IT) == DMA1_IT_HT7) || ((IT) == DMA1_IT_TE7) || \
                           ((IT) == DMA2_IT_GL1) || ((IT) == DMA2_IT_TC1) || \
                           ((IT) == DMA2_IT_HT1) || ((IT) == DMA2_IT_TE1) || \
                           ((IT) == DMA2_IT_GL2) || ((IT) == DMA2_IT_TC2) || \
                           ((IT) == DMA2_IT_HT2) || ((IT) == DMA2_IT_TE2) || \
                           ((IT) == DMA2_IT_GL3) || ((IT) == DMA2_IT_TC3) || \
                           ((IT) == DMA2_IT_HT3) || ((IT) == DMA2_IT_TE3) || \
                           ((IT) == DMA2_IT_GL4) || ((IT) == DMA2_IT_TC4) || \
                           ((IT) == DMA2_IT_HT4) || ((IT) == DMA2_IT_TE4) || \
                           ((IT) == DMA2_IT_GL5) || ((IT) == DMA2_IT_TC5) || \
                           ((IT) == DMA2_IT_HT5) || ((IT) == DMA2_IT_TE5))
/**
  * @}
  */
/** @defgroup DMA_flags_definition
  * @{
  */
#define DMA1_FLAG_GL1                      ((uint32_t)0x00000001)
#define DMA1_FLAG_TC1                      ((uint32_t)0x00000002)
#define DMA1_FLAG_HT1                      ((uint32_t)0x00000004)
#define DMA1_FLAG_TE1                      ((uint32_t)0x00000008)
#define DMA1_FLAG_GL2                      ((uint32_t)0x00000010)
#define DMA1_FLAG_TC2                      ((uint32_t)0x00000020)
#define DMA1_FLAG_HT2                      ((uint32_t)0x00000040)
#define DMA1_FLAG_TE2                      ((uint32_t)0x00000080)
#define DMA1_FLAG_GL3                      ((uint32_t)0x00000100)
#define DMA1_FLAG_TC3                      ((uint32_t)0x00000200)
#define DMA1_FLAG_HT3                      ((uint32_t)0x00000400)
#define DMA1_FLAG_TE3                      ((uint32_t)0x00000800)
#define DMA1_FLAG_GL4                      ((uint32_t)0x00001000)
#define DMA1_FLAG_TC4                      ((uint32_t)0x00002000)
#define DMA1_FLAG_HT4                      ((uint32_t)0x00004000)
#define DMA1_FLAG_TE4                      ((uint32_t)0x00008000)
#define DMA1_FLAG_GL5                      ((uint32_t)0x00010000)
#define DMA1_FLAG_TC5                      ((uint32_t)0x00020000)
#define DMA1_FLAG_HT5                      ((uint32_t)0x00040000)
#define DMA1_FLAG_TE5                      ((uint32_t)0x00080000)
#define DMA1_FLAG_GL6                      ((uint32_t)0x00100000)
#define DMA1_FLAG_TC6                      ((uint32_t)0x00200000)
#define DMA1_FLAG_HT6                      ((uint32_t)0x00400000)
#define DMA1_FLAG_TE6                      ((uint32_t)0x00800000)
#define DMA1_FLAG_GL7                      ((uint32_t)0x01000000)
#define DMA1_FLAG_TC7                      ((uint32_t)0x02000000)
#define DMA1_FLAG_HT7                      ((uint32_t)0x04000000)
#define DMA1_FLAG_TE7                      ((uint32_t)0x08000000)
#define DMA2_FLAG_GL1                      ((uint32_t)0x10000001)
#define DMA2_FLAG_TC1                      ((uint32_t)0x10000002)
#define DMA2_FLAG_HT1                      ((uint32_t)0x10000004)
#define DMA2_FLAG_TE1                      ((uint32_t)0x10000008)
#define DMA2_FLAG_GL2                      ((uint32_t)0x10000010)
#define DMA2_FLAG_TC2                      ((uint32_t)0x10000020)
#define DMA2_FLAG_HT2                      ((uint32_t)0x10000040)
#define DMA2_FLAG_TE2                      ((uint32_t)0x10000080)
#define DMA2_FLAG_GL3                      ((uint32_t)0x10000100)
#define DMA2_FLAG_TC3                      ((uint32_t)0x10000200)
#define DMA2_FLAG_HT3                      ((uint32_t)0x10000400)
#define DMA2_FLAG_TE3                      ((uint32_t)0x10000800)
#define DMA2_FLAG_GL4                      ((uint32_t)0x10001000)
#define DMA2_FLAG_TC4                      ((uint32_t)0x10002000)
#define DMA2_FLAG_HT4                      ((uint32_t)0x10004000)
#define DMA2_FLAG_TE4                      ((uint32_t)0x10008000)
#define DMA2_FLAG_GL5                      ((uint32_t)0x10010000)
#define DMA2_FLAG_TC5                      ((uint32_t)0x10020000)
#define DMA2_FLAG_HT5                      ((uint32_t)0x10040000)
#define DMA2_FLAG_TE5                      ((uint32_t)0x10080000)
#define IS_DMA_CLEAR_FLAG(FLAG) (((((FLAG) & 0xF0000000) == 0x00) || (((FLAG) & 0xEFF00000) == 0x00)) && ((FLAG) != 0x00))
#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA1_FLAG_GL1) || ((FLAG) == DMA1_FLAG_TC1) || \
                               ((FLAG) == DMA1_FLAG_HT1) || ((FLAG) == DMA1_FLAG_TE1) || \
                               ((FLAG) == DMA1_FLAG_GL2) || ((FLAG) == DMA1_FLAG_TC2) || \
                               ((FLAG) == DMA1_FLAG_HT2) || ((FLAG) == DMA1_FLAG_TE2) || \
                               ((FLAG) == DMA1_FLAG_GL3) || ((FLAG) == DMA1_FLAG_TC3) || \
                               ((FLAG) == DMA1_FLAG_HT3) || ((FLAG) == DMA1_FLAG_TE3) || \
                               ((FLAG) == DMA1_FLAG_GL4) || ((FLAG) == DMA1_FLAG_TC4) || \
                               ((FLAG) == DMA1_FLAG_HT4) || ((FLAG) == DMA1_FLAG_TE4) || \
                               ((FLAG) == DMA1_FLAG_GL5) || ((FLAG) == DMA1_FLAG_TC5) || \
                               ((FLAG) == DMA1_FLAG_HT5) || ((FLAG) == DMA1_FLAG_TE5) || \
                               ((FLAG) == DMA1_FLAG_GL6) || ((FLAG) == DMA1_FLAG_TC6) || \
                               ((FLAG) == DMA1_FLAG_HT6) || ((FLAG) == DMA1_FLAG_TE6) || \
                               ((FLAG) == DMA1_FLAG_GL7) || ((FLAG) == DMA1_FLAG_TC7) || \
                               ((FLAG) == DMA1_FLAG_HT7) || ((FLAG) == DMA1_FLAG_TE7) || \
                               ((FLAG) == DMA2_FLAG_GL1) || ((FLAG) == DMA2_FLAG_TC1) || \
                               ((FLAG) == DMA2_FLAG_HT1) || ((FLAG) == DMA2_FLAG_TE1) || \
                               ((FLAG) == DMA2_FLAG_GL2) || ((FLAG) == DMA2_FLAG_TC2) || \
                               ((FLAG) == DMA2_FLAG_HT2) || ((FLAG) == DMA2_FLAG_TE2) || \
                               ((FLAG) == DMA2_FLAG_GL3) || ((FLAG) == DMA2_FLAG_TC3) || \
                               ((FLAG) == DMA2_FLAG_HT3) || ((FLAG) == DMA2_FLAG_TE3) || \
                               ((FLAG) == DMA2_FLAG_GL4) || ((FLAG) == DMA2_FLAG_TC4) || \
                               ((FLAG) == DMA2_FLAG_HT4) || ((FLAG) == DMA2_FLAG_TE4) || \
                               ((FLAG) == DMA2_FLAG_GL5) || ((FLAG) == DMA2_FLAG_TC5) || \
                               ((FLAG) == DMA2_FLAG_HT5) || ((FLAG) == DMA2_FLAG_TE5))
/**
  * @}
  */
/** @defgroup DMA_Buffer_Size
  * @{
  */
#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup DMA_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup DMA_Exported_Functions
  * @{
  */
void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);
void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);
void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);
void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);
void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber);
uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);
FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);
void DMA_ClearFlag(uint32_t DMAy_FLAG);
ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
void DMA_ClearITPendingBit(uint32_t DMAy_IT);
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_DMA_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_exti.h
New file
@@ -0,0 +1,184 @@
/**
  ******************************************************************************
  * @file    stm32f10x_exti.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the EXTI firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_EXTI_H
#define __STM32F10x_EXTI_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup EXTI
  * @{
  */
/** @defgroup EXTI_Exported_Types
  * @{
  */
/**
  * @brief  EXTI mode enumeration
  */
typedef enum
{
  EXTI_Mode_Interrupt = 0x00,
  EXTI_Mode_Event = 0x04
}EXTIMode_TypeDef;
#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event))
/**
  * @brief  EXTI Trigger enumeration
  */
typedef enum
{
  EXTI_Trigger_Rising = 0x08,
  EXTI_Trigger_Falling = 0x0C,
  EXTI_Trigger_Rising_Falling = 0x10
}EXTITrigger_TypeDef;
#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \
                                  ((TRIGGER) == EXTI_Trigger_Falling) || \
                                  ((TRIGGER) == EXTI_Trigger_Rising_Falling))
/**
  * @brief  EXTI Init Structure definition
  */
typedef struct
{
  uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
                                         This parameter can be any combination of @ref EXTI_Lines */
  EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.
                                         This parameter can be a value of @ref EXTIMode_TypeDef */
  EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
                                         This parameter can be a value of @ref EXTIMode_TypeDef */
  FunctionalState EXTI_LineCmd;     /*!< Specifies the new state of the selected EXTI lines.
                                         This parameter can be set either to ENABLE or DISABLE */
}EXTI_InitTypeDef;
/**
  * @}
  */
/** @defgroup EXTI_Exported_Constants
  * @{
  */
/** @defgroup EXTI_Lines
  * @{
  */
#define EXTI_Line0       ((uint32_t)0x00001)  /*!< External interrupt line 0 */
#define EXTI_Line1       ((uint32_t)0x00002)  /*!< External interrupt line 1 */
#define EXTI_Line2       ((uint32_t)0x00004)  /*!< External interrupt line 2 */
#define EXTI_Line3       ((uint32_t)0x00008)  /*!< External interrupt line 3 */
#define EXTI_Line4       ((uint32_t)0x00010)  /*!< External interrupt line 4 */
#define EXTI_Line5       ((uint32_t)0x00020)  /*!< External interrupt line 5 */
#define EXTI_Line6       ((uint32_t)0x00040)  /*!< External interrupt line 6 */
#define EXTI_Line7       ((uint32_t)0x00080)  /*!< External interrupt line 7 */
#define EXTI_Line8       ((uint32_t)0x00100)  /*!< External interrupt line 8 */
#define EXTI_Line9       ((uint32_t)0x00200)  /*!< External interrupt line 9 */
#define EXTI_Line10      ((uint32_t)0x00400)  /*!< External interrupt line 10 */
#define EXTI_Line11      ((uint32_t)0x00800)  /*!< External interrupt line 11 */
#define EXTI_Line12      ((uint32_t)0x01000)  /*!< External interrupt line 12 */
#define EXTI_Line13      ((uint32_t)0x02000)  /*!< External interrupt line 13 */
#define EXTI_Line14      ((uint32_t)0x04000)  /*!< External interrupt line 14 */
#define EXTI_Line15      ((uint32_t)0x08000)  /*!< External interrupt line 15 */
#define EXTI_Line16      ((uint32_t)0x10000)  /*!< External interrupt line 16 Connected to the PVD Output */
#define EXTI_Line17      ((uint32_t)0x20000)  /*!< External interrupt line 17 Connected to the RTC Alarm event */
#define EXTI_Line18      ((uint32_t)0x40000)  /*!< External interrupt line 18 Connected to the USB Device/USB OTG FS
                                                   Wakeup from suspend event */
#define EXTI_Line19      ((uint32_t)0x80000)  /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFF00000) == 0x00) && ((LINE) != (uint16_t)0x00))
#define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \
                            ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \
                            ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \
                            ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \
                            ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \
                            ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \
                            ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \
                            ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \
                            ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \
                            ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup EXTI_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup EXTI_Exported_Functions
  * @{
  */
void EXTI_DeInit(void);
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
void EXTI_ClearFlag(uint32_t EXTI_Line);
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_EXTI_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_flash.h
New file
@@ -0,0 +1,426 @@
/**
  ******************************************************************************
  * @file    stm32f10x_flash.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the FLASH
  *          firmware library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_FLASH_H
#define __STM32F10x_FLASH_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup FLASH
  * @{
  */
/** @defgroup FLASH_Exported_Types
  * @{
  */
/**
  * @brief  FLASH Status
  */
typedef enum
{
  FLASH_BUSY = 1,
  FLASH_ERROR_PG,
  FLASH_ERROR_WRP,
  FLASH_COMPLETE,
  FLASH_TIMEOUT
}FLASH_Status;
/**
  * @}
  */
/** @defgroup FLASH_Exported_Constants
  * @{
  */
/** @defgroup Flash_Latency
  * @{
  */
#define FLASH_Latency_0                ((uint32_t)0x00000000)  /*!< FLASH Zero Latency cycle */
#define FLASH_Latency_1                ((uint32_t)0x00000001)  /*!< FLASH One Latency cycle */
#define FLASH_Latency_2                ((uint32_t)0x00000002)  /*!< FLASH Two Latency cycles */
#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \
                                   ((LATENCY) == FLASH_Latency_1) || \
                                   ((LATENCY) == FLASH_Latency_2))
/**
  * @}
  */
/** @defgroup Half_Cycle_Enable_Disable
  * @{
  */
#define FLASH_HalfCycleAccess_Enable   ((uint32_t)0x00000008)  /*!< FLASH Half Cycle Enable */
#define FLASH_HalfCycleAccess_Disable  ((uint32_t)0x00000000)  /*!< FLASH Half Cycle Disable */
#define IS_FLASH_HALFCYCLEACCESS_STATE(STATE) (((STATE) == FLASH_HalfCycleAccess_Enable) || \
                                               ((STATE) == FLASH_HalfCycleAccess_Disable))
/**
  * @}
  */
/** @defgroup Prefetch_Buffer_Enable_Disable
  * @{
  */
#define FLASH_PrefetchBuffer_Enable    ((uint32_t)0x00000010)  /*!< FLASH Prefetch Buffer Enable */
#define FLASH_PrefetchBuffer_Disable   ((uint32_t)0x00000000)  /*!< FLASH Prefetch Buffer Disable */
#define IS_FLASH_PREFETCHBUFFER_STATE(STATE) (((STATE) == FLASH_PrefetchBuffer_Enable) || \
                                              ((STATE) == FLASH_PrefetchBuffer_Disable))
/**
  * @}
  */
/** @defgroup Option_Bytes_Write_Protection
  * @{
  */
/* Values to be used with STM32 Low and Medium density devices */
#define FLASH_WRProt_Pages0to3         ((uint32_t)0x00000001) /*!< STM32 Low and Medium density devices: Write protection of page 0 to 3 */
#define FLASH_WRProt_Pages4to7         ((uint32_t)0x00000002) /*!< STM32 Low and Medium density devices: Write protection of page 4 to 7 */
#define FLASH_WRProt_Pages8to11        ((uint32_t)0x00000004) /*!< STM32 Low and Medium density devices: Write protection of page 8 to 11 */
#define FLASH_WRProt_Pages12to15       ((uint32_t)0x00000008) /*!< STM32 Low and Medium density devices: Write protection of page 12 to 15 */
#define FLASH_WRProt_Pages16to19       ((uint32_t)0x00000010) /*!< STM32 Low and Medium density devices: Write protection of page 16 to 19 */
#define FLASH_WRProt_Pages20to23       ((uint32_t)0x00000020) /*!< STM32 Low and Medium density devices: Write protection of page 20 to 23 */
#define FLASH_WRProt_Pages24to27       ((uint32_t)0x00000040) /*!< STM32 Low and Medium density devices: Write protection of page 24 to 27 */
#define FLASH_WRProt_Pages28to31       ((uint32_t)0x00000080) /*!< STM32 Low and Medium density devices: Write protection of page 28 to 31 */
/* Values to be used with STM32 Medium-density devices */
#define FLASH_WRProt_Pages32to35       ((uint32_t)0x00000100) /*!< STM32 Medium-density devices: Write protection of page 32 to 35 */
#define FLASH_WRProt_Pages36to39       ((uint32_t)0x00000200) /*!< STM32 Medium-density devices: Write protection of page 36 to 39 */
#define FLASH_WRProt_Pages40to43       ((uint32_t)0x00000400) /*!< STM32 Medium-density devices: Write protection of page 40 to 43 */
#define FLASH_WRProt_Pages44to47       ((uint32_t)0x00000800) /*!< STM32 Medium-density devices: Write protection of page 44 to 47 */
#define FLASH_WRProt_Pages48to51       ((uint32_t)0x00001000) /*!< STM32 Medium-density devices: Write protection of page 48 to 51 */
#define FLASH_WRProt_Pages52to55       ((uint32_t)0x00002000) /*!< STM32 Medium-density devices: Write protection of page 52 to 55 */
#define FLASH_WRProt_Pages56to59       ((uint32_t)0x00004000) /*!< STM32 Medium-density devices: Write protection of page 56 to 59 */
#define FLASH_WRProt_Pages60to63       ((uint32_t)0x00008000) /*!< STM32 Medium-density devices: Write protection of page 60 to 63 */
#define FLASH_WRProt_Pages64to67       ((uint32_t)0x00010000) /*!< STM32 Medium-density devices: Write protection of page 64 to 67 */
#define FLASH_WRProt_Pages68to71       ((uint32_t)0x00020000) /*!< STM32 Medium-density devices: Write protection of page 68 to 71 */
#define FLASH_WRProt_Pages72to75       ((uint32_t)0x00040000) /*!< STM32 Medium-density devices: Write protection of page 72 to 75 */
#define FLASH_WRProt_Pages76to79       ((uint32_t)0x00080000) /*!< STM32 Medium-density devices: Write protection of page 76 to 79 */
#define FLASH_WRProt_Pages80to83       ((uint32_t)0x00100000) /*!< STM32 Medium-density devices: Write protection of page 80 to 83 */
#define FLASH_WRProt_Pages84to87       ((uint32_t)0x00200000) /*!< STM32 Medium-density devices: Write protection of page 84 to 87 */
#define FLASH_WRProt_Pages88to91       ((uint32_t)0x00400000) /*!< STM32 Medium-density devices: Write protection of page 88 to 91 */
#define FLASH_WRProt_Pages92to95       ((uint32_t)0x00800000) /*!< STM32 Medium-density devices: Write protection of page 92 to 95 */
#define FLASH_WRProt_Pages96to99       ((uint32_t)0x01000000) /*!< STM32 Medium-density devices: Write protection of page 96 to 99 */
#define FLASH_WRProt_Pages100to103     ((uint32_t)0x02000000) /*!< STM32 Medium-density devices: Write protection of page 100 to 103 */
#define FLASH_WRProt_Pages104to107     ((uint32_t)0x04000000) /*!< STM32 Medium-density devices: Write protection of page 104 to 107 */
#define FLASH_WRProt_Pages108to111     ((uint32_t)0x08000000) /*!< STM32 Medium-density devices: Write protection of page 108 to 111 */
#define FLASH_WRProt_Pages112to115     ((uint32_t)0x10000000) /*!< STM32 Medium-density devices: Write protection of page 112 to 115 */
#define FLASH_WRProt_Pages116to119     ((uint32_t)0x20000000) /*!< STM32 Medium-density devices: Write protection of page 115 to 119 */
#define FLASH_WRProt_Pages120to123     ((uint32_t)0x40000000) /*!< STM32 Medium-density devices: Write protection of page 120 to 123 */
#define FLASH_WRProt_Pages124to127     ((uint32_t)0x80000000) /*!< STM32 Medium-density devices: Write protection of page 124 to 127 */
/* Values to be used with STM32 High-density and STM32F10X Connectivity line devices */
#define FLASH_WRProt_Pages0to1         ((uint32_t)0x00000001) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 0 to 1 */
#define FLASH_WRProt_Pages2to3         ((uint32_t)0x00000002) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 2 to 3 */
#define FLASH_WRProt_Pages4to5         ((uint32_t)0x00000004) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 4 to 5 */
#define FLASH_WRProt_Pages6to7         ((uint32_t)0x00000008) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 6 to 7 */
#define FLASH_WRProt_Pages8to9         ((uint32_t)0x00000010) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 8 to 9 */
#define FLASH_WRProt_Pages10to11       ((uint32_t)0x00000020) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 10 to 11 */
#define FLASH_WRProt_Pages12to13       ((uint32_t)0x00000040) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 12 to 13 */
#define FLASH_WRProt_Pages14to15       ((uint32_t)0x00000080) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 14 to 15 */
#define FLASH_WRProt_Pages16to17       ((uint32_t)0x00000100) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 16 to 17 */
#define FLASH_WRProt_Pages18to19       ((uint32_t)0x00000200) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 18 to 19 */
#define FLASH_WRProt_Pages20to21       ((uint32_t)0x00000400) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 20 to 21 */
#define FLASH_WRProt_Pages22to23       ((uint32_t)0x00000800) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 22 to 23 */
#define FLASH_WRProt_Pages24to25       ((uint32_t)0x00001000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 24 to 25 */
#define FLASH_WRProt_Pages26to27       ((uint32_t)0x00002000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 26 to 27 */
#define FLASH_WRProt_Pages28to29       ((uint32_t)0x00004000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 28 to 29 */
#define FLASH_WRProt_Pages30to31       ((uint32_t)0x00008000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 30 to 31 */
#define FLASH_WRProt_Pages32to33       ((uint32_t)0x00010000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 32 to 33 */
#define FLASH_WRProt_Pages34to35       ((uint32_t)0x00020000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 34 to 35 */
#define FLASH_WRProt_Pages36to37       ((uint32_t)0x00040000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 36 to 37 */
#define FLASH_WRProt_Pages38to39       ((uint32_t)0x00080000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 38 to 39 */
#define FLASH_WRProt_Pages40to41       ((uint32_t)0x00100000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 40 to 41 */
#define FLASH_WRProt_Pages42to43       ((uint32_t)0x00200000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 42 to 43 */
#define FLASH_WRProt_Pages44to45       ((uint32_t)0x00400000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 44 to 45 */
#define FLASH_WRProt_Pages46to47       ((uint32_t)0x00800000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 46 to 47 */
#define FLASH_WRProt_Pages48to49       ((uint32_t)0x01000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 48 to 49 */
#define FLASH_WRProt_Pages50to51       ((uint32_t)0x02000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 50 to 51 */
#define FLASH_WRProt_Pages52to53       ((uint32_t)0x04000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 52 to 53 */
#define FLASH_WRProt_Pages54to55       ((uint32_t)0x08000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 54 to 55 */
#define FLASH_WRProt_Pages56to57       ((uint32_t)0x10000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 56 to 57 */
#define FLASH_WRProt_Pages58to59       ((uint32_t)0x20000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 58 to 59 */
#define FLASH_WRProt_Pages60to61       ((uint32_t)0x40000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
                                                                   Write protection of page 60 to 61 */
#define FLASH_WRProt_Pages62to127      ((uint32_t)0x80000000) /*!< STM32 Connectivity line devices: Write protection of page 62 to 127 */
#define FLASH_WRProt_Pages62to255      ((uint32_t)0x80000000) /*!< STM32 Medium-density devices: Write protection of page 62 to 255 */
#define FLASH_WRProt_Pages62to511      ((uint32_t)0x80000000) /*!< STM32 XL-density devices: Write protection of page 62 to 511 */
#define FLASH_WRProt_AllPages          ((uint32_t)0xFFFFFFFF) /*!< Write protection of all Pages */
#define IS_FLASH_WRPROT_PAGE(PAGE) (((PAGE) != 0x00000000))
#define IS_FLASH_ADDRESS(ADDRESS) (((ADDRESS) >= 0x08000000) && ((ADDRESS) < 0x080FFFFF))
#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == 0x1FFFF804) || ((ADDRESS) == 0x1FFFF806))
/**
  * @}
  */
/** @defgroup Option_Bytes_IWatchdog
  * @{
  */
#define OB_IWDG_SW                     ((uint16_t)0x0001)  /*!< Software IWDG selected */
#define OB_IWDG_HW                     ((uint16_t)0x0000)  /*!< Hardware IWDG selected */
#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
/**
  * @}
  */
/** @defgroup Option_Bytes_nRST_STOP
  * @{
  */
#define OB_STOP_NoRST                  ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */
#define OB_STOP_RST                    ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */
#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST))
/**
  * @}
  */
/** @defgroup Option_Bytes_nRST_STDBY
  * @{
  */
#define OB_STDBY_NoRST                 ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */
#define OB_STDBY_RST                   ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */
#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST))
#ifdef STM32F10X_XL
/**
  * @}
  */
/** @defgroup FLASH_Boot
  * @{
  */
#define FLASH_BOOT_Bank1  ((uint16_t)0x0000) /*!< At startup, if boot pins are set in boot from user Flash position
                                                  and this parameter is selected the device will boot from Bank1(Default) */
#define FLASH_BOOT_Bank2  ((uint16_t)0x0001) /*!< At startup, if boot pins are set in boot from user Flash position
                                                  and this parameter is selected the device will boot from Bank 2 or Bank 1,
                                                  depending on the activation of the bank */
#define IS_FLASH_BOOT(BOOT) (((BOOT) == FLASH_BOOT_Bank1) || ((BOOT) == FLASH_BOOT_Bank2))
#endif
/**
  * @}
  */
/** @defgroup FLASH_Interrupts
  * @{
  */
#ifdef STM32F10X_XL
#define FLASH_IT_BANK2_ERROR                 ((uint32_t)0x80000400)  /*!< FPEC BANK2 error interrupt source */
#define FLASH_IT_BANK2_EOP                   ((uint32_t)0x80001000)  /*!< End of FLASH BANK2 Operation Interrupt source */
#define FLASH_IT_BANK1_ERROR                 FLASH_IT_ERROR          /*!< FPEC BANK1 error interrupt source */
#define FLASH_IT_BANK1_EOP                   FLASH_IT_EOP            /*!< End of FLASH BANK1 Operation Interrupt source */
#define FLASH_IT_ERROR                 ((uint32_t)0x00000400)  /*!< FPEC BANK1 error interrupt source */
#define FLASH_IT_EOP                   ((uint32_t)0x00001000)  /*!< End of FLASH BANK1 Operation Interrupt source */
#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0x7FFFEBFF) == 0x00000000) && (((IT) != 0x00000000)))
#else
#define FLASH_IT_ERROR                 ((uint32_t)0x00000400)  /*!< FPEC error interrupt source */
#define FLASH_IT_EOP                   ((uint32_t)0x00001000)  /*!< End of FLASH Operation Interrupt source */
#define FLASH_IT_BANK1_ERROR           FLASH_IT_ERROR          /*!< FPEC BANK1 error interrupt source */
#define FLASH_IT_BANK1_EOP             FLASH_IT_EOP            /*!< End of FLASH BANK1 Operation Interrupt source */
#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFFFFEBFF) == 0x00000000) && (((IT) != 0x00000000)))
#endif
/**
  * @}
  */
/** @defgroup FLASH_Flags
  * @{
  */
#ifdef STM32F10X_XL
#define FLASH_FLAG_BANK2_BSY                 ((uint32_t)0x80000001)  /*!< FLASH BANK2 Busy flag */
#define FLASH_FLAG_BANK2_EOP                 ((uint32_t)0x80000020)  /*!< FLASH BANK2 End of Operation flag */
#define FLASH_FLAG_BANK2_PGERR               ((uint32_t)0x80000004)  /*!< FLASH BANK2 Program error flag */
#define FLASH_FLAG_BANK2_WRPRTERR            ((uint32_t)0x80000010)  /*!< FLASH BANK2 Write protected error flag */
#define FLASH_FLAG_BANK1_BSY                 FLASH_FLAG_BSY       /*!< FLASH BANK1 Busy flag*/
#define FLASH_FLAG_BANK1_EOP                 FLASH_FLAG_EOP       /*!< FLASH BANK1 End of Operation flag */
#define FLASH_FLAG_BANK1_PGERR               FLASH_FLAG_PGERR     /*!< FLASH BANK1 Program error flag */
#define FLASH_FLAG_BANK1_WRPRTERR            FLASH_FLAG_WRPRTERR  /*!< FLASH BANK1 Write protected error flag */
#define FLASH_FLAG_BSY                 ((uint32_t)0x00000001)  /*!< FLASH Busy flag */
#define FLASH_FLAG_EOP                 ((uint32_t)0x00000020)  /*!< FLASH End of Operation flag */
#define FLASH_FLAG_PGERR               ((uint32_t)0x00000004)  /*!< FLASH Program error flag */
#define FLASH_FLAG_WRPRTERR            ((uint32_t)0x00000010)  /*!< FLASH Write protected error flag */
#define FLASH_FLAG_OPTERR              ((uint32_t)0x00000001)  /*!< FLASH Option Byte error flag */
#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0x7FFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000))
#define IS_FLASH_GET_FLAG(FLAG)  (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \
                                  ((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \
                                  ((FLAG) == FLASH_FLAG_OPTERR)|| \
                                  ((FLAG) == FLASH_FLAG_BANK1_BSY) || ((FLAG) == FLASH_FLAG_BANK1_EOP) || \
                                  ((FLAG) == FLASH_FLAG_BANK1_PGERR) || ((FLAG) == FLASH_FLAG_BANK1_WRPRTERR) || \
                                  ((FLAG) == FLASH_FLAG_BANK2_BSY) || ((FLAG) == FLASH_FLAG_BANK2_EOP) || \
                                  ((FLAG) == FLASH_FLAG_BANK2_PGERR) || ((FLAG) == FLASH_FLAG_BANK2_WRPRTERR))
#else
#define FLASH_FLAG_BSY                 ((uint32_t)0x00000001)  /*!< FLASH Busy flag */
#define FLASH_FLAG_EOP                 ((uint32_t)0x00000020)  /*!< FLASH End of Operation flag */
#define FLASH_FLAG_PGERR               ((uint32_t)0x00000004)  /*!< FLASH Program error flag */
#define FLASH_FLAG_WRPRTERR            ((uint32_t)0x00000010)  /*!< FLASH Write protected error flag */
#define FLASH_FLAG_OPTERR              ((uint32_t)0x00000001)  /*!< FLASH Option Byte error flag */
#define FLASH_FLAG_BANK1_BSY                 FLASH_FLAG_BSY       /*!< FLASH BANK1 Busy flag*/
#define FLASH_FLAG_BANK1_EOP                 FLASH_FLAG_EOP       /*!< FLASH BANK1 End of Operation flag */
#define FLASH_FLAG_BANK1_PGERR               FLASH_FLAG_PGERR     /*!< FLASH BANK1 Program error flag */
#define FLASH_FLAG_BANK1_WRPRTERR            FLASH_FLAG_WRPRTERR  /*!< FLASH BANK1 Write protected error flag */
#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000))
#define IS_FLASH_GET_FLAG(FLAG)  (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \
                                  ((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \
                                  ((FLAG) == FLASH_FLAG_BANK1_BSY) || ((FLAG) == FLASH_FLAG_BANK1_EOP) || \
                                  ((FLAG) == FLASH_FLAG_BANK1_PGERR) || ((FLAG) == FLASH_FLAG_BANK1_WRPRTERR) || \
                                  ((FLAG) == FLASH_FLAG_OPTERR))
#endif
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup FLASH_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup FLASH_Exported_Functions
  * @{
  */
/*------------ Functions used for all STM32F10x devices -----*/
void FLASH_SetLatency(uint32_t FLASH_Latency);
void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess);
void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer);
void FLASH_Unlock(void);
void FLASH_Lock(void);
FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
FLASH_Status FLASH_EraseAllPages(void);
FLASH_Status FLASH_EraseOptionBytes(void);
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);
FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages);
FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState);
FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY);
uint32_t FLASH_GetUserOptionByte(void);
uint32_t FLASH_GetWriteProtectionOptionByte(void);
FlagStatus FLASH_GetReadOutProtectionStatus(void);
FlagStatus FLASH_GetPrefetchBufferStatus(void);
void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState);
FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG);
void FLASH_ClearFlag(uint32_t FLASH_FLAG);
FLASH_Status FLASH_GetStatus(void);
FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout);
/*------------ New function used for all STM32F10x devices -----*/
void FLASH_UnlockBank1(void);
void FLASH_LockBank1(void);
FLASH_Status FLASH_EraseAllBank1Pages(void);
FLASH_Status FLASH_GetBank1Status(void);
FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout);
#ifdef STM32F10X_XL
/*---- New Functions used only with STM32F10x_XL density devices -----*/
void FLASH_UnlockBank2(void);
void FLASH_LockBank2(void);
FLASH_Status FLASH_EraseAllBank2Pages(void);
FLASH_Status FLASH_GetBank2Status(void);
FLASH_Status FLASH_WaitForLastBank2Operation(uint32_t Timeout);
FLASH_Status FLASH_BootConfig(uint16_t FLASH_BOOT);
#endif
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_FLASH_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_fsmc.h
New file
@@ -0,0 +1,733 @@
/**
  ******************************************************************************
  * @file    stm32f10x_fsmc.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the FSMC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_FSMC_H
#define __STM32F10x_FSMC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup FSMC
  * @{
  */
/** @defgroup FSMC_Exported_Types
  * @{
  */
/**
  * @brief  Timing parameters For NOR/SRAM Banks
  */
typedef struct
{
  uint32_t FSMC_AddressSetupTime;       /*!< Defines the number of HCLK cycles to configure
                                             the duration of the address setup time.
                                             This parameter can be a value between 0 and 0xF.
                                             @note: It is not used with synchronous NOR Flash memories. */
  uint32_t FSMC_AddressHoldTime;        /*!< Defines the number of HCLK cycles to configure
                                             the duration of the address hold time.
                                             This parameter can be a value between 0 and 0xF.
                                             @note: It is not used with synchronous NOR Flash memories.*/
  uint32_t FSMC_DataSetupTime;          /*!< Defines the number of HCLK cycles to configure
                                             the duration of the data setup time.
                                             This parameter can be a value between 0 and 0xFF.
                                             @note: It is used for SRAMs, ROMs and asynchronous multiplexed NOR Flash memories. */
  uint32_t FSMC_BusTurnAroundDuration;  /*!< Defines the number of HCLK cycles to configure
                                             the duration of the bus turnaround.
                                             This parameter can be a value between 0 and 0xF.
                                             @note: It is only used for multiplexed NOR Flash memories. */
  uint32_t FSMC_CLKDivision;            /*!< Defines the period of CLK clock output signal, expressed in number of HCLK cycles.
                                             This parameter can be a value between 1 and 0xF.
                                             @note: This parameter is not used for asynchronous NOR Flash, SRAM or ROM accesses. */
  uint32_t FSMC_DataLatency;            /*!< Defines the number of memory clock cycles to issue
                                             to the memory before getting the first data.
                                             The value of this parameter depends on the memory type as shown below:
                                              - It must be set to 0 in case of a CRAM
                                              - It is don't care in asynchronous NOR, SRAM or ROM accesses
                                              - It may assume a value between 0 and 0xF in NOR Flash memories
                                                with synchronous burst mode enable */
  uint32_t FSMC_AccessMode;             /*!< Specifies the asynchronous access mode.
                                             This parameter can be a value of @ref FSMC_Access_Mode */
}FSMC_NORSRAMTimingInitTypeDef;
/**
  * @brief  FSMC NOR/SRAM Init structure definition
  */
typedef struct
{
  uint32_t FSMC_Bank;                /*!< Specifies the NOR/SRAM memory bank that will be used.
                                          This parameter can be a value of @ref FSMC_NORSRAM_Bank */
  uint32_t FSMC_DataAddressMux;      /*!< Specifies whether the address and data values are
                                          multiplexed on the databus or not.
                                          This parameter can be a value of @ref FSMC_Data_Address_Bus_Multiplexing */
  uint32_t FSMC_MemoryType;          /*!< Specifies the type of external memory attached to
                                          the corresponding memory bank.
                                          This parameter can be a value of @ref FSMC_Memory_Type */
  uint32_t FSMC_MemoryDataWidth;     /*!< Specifies the external memory device width.
                                          This parameter can be a value of @ref FSMC_Data_Width */
  uint32_t FSMC_BurstAccessMode;     /*!< Enables or disables the burst access mode for Flash memory,
                                          valid only with synchronous burst Flash memories.
                                          This parameter can be a value of @ref FSMC_Burst_Access_Mode */
  uint32_t FSMC_AsynchronousWait;     /*!< Enables or disables wait signal during asynchronous transfers,
                                          valid only with asynchronous Flash memories.
                                          This parameter can be a value of @ref FSMC_AsynchronousWait */
  uint32_t FSMC_WaitSignalPolarity;  /*!< Specifies the wait signal polarity, valid only when accessing
                                          the Flash memory in burst mode.
                                          This parameter can be a value of @ref FSMC_Wait_Signal_Polarity */
  uint32_t FSMC_WrapMode;            /*!< Enables or disables the Wrapped burst access mode for Flash
                                          memory, valid only when accessing Flash memories in burst mode.
                                          This parameter can be a value of @ref FSMC_Wrap_Mode */
  uint32_t FSMC_WaitSignalActive;    /*!< Specifies if the wait signal is asserted by the memory one
                                          clock cycle before the wait state or during the wait state,
                                          valid only when accessing memories in burst mode.
                                          This parameter can be a value of @ref FSMC_Wait_Timing */
  uint32_t FSMC_WriteOperation;      /*!< Enables or disables the write operation in the selected bank by the FSMC.
                                          This parameter can be a value of @ref FSMC_Write_Operation */
  uint32_t FSMC_WaitSignal;          /*!< Enables or disables the wait-state insertion via wait
                                          signal, valid for Flash memory access in burst mode.
                                          This parameter can be a value of @ref FSMC_Wait_Signal */
  uint32_t FSMC_ExtendedMode;        /*!< Enables or disables the extended mode.
                                          This parameter can be a value of @ref FSMC_Extended_Mode */
  uint32_t FSMC_WriteBurst;          /*!< Enables or disables the write burst operation.
                                          This parameter can be a value of @ref FSMC_Write_Burst */
  FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; /*!< Timing Parameters for write and read access if the  ExtendedMode is not used*/
  FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct;     /*!< Timing Parameters for write access if the  ExtendedMode is used*/
}FSMC_NORSRAMInitTypeDef;
/**
  * @brief  Timing parameters For FSMC NAND and PCCARD Banks
  */
typedef struct
{
  uint32_t FSMC_SetupTime;      /*!< Defines the number of HCLK cycles to setup address before
                                     the command assertion for NAND-Flash read or write access
                                     to common/Attribute or I/O memory space (depending on
                                     the memory space timing to be configured).
                                     This parameter can be a value between 0 and 0xFF.*/
  uint32_t FSMC_WaitSetupTime;  /*!< Defines the minimum number of HCLK cycles to assert the
                                     command for NAND-Flash read or write access to
                                     common/Attribute or I/O memory space (depending on the
                                     memory space timing to be configured).
                                     This parameter can be a number between 0x00 and 0xFF */
  uint32_t FSMC_HoldSetupTime;  /*!< Defines the number of HCLK clock cycles to hold address
                                     (and data for write access) after the command deassertion
                                     for NAND-Flash read or write access to common/Attribute
                                     or I/O memory space (depending on the memory space timing
                                     to be configured).
                                     This parameter can be a number between 0x00 and 0xFF */
  uint32_t FSMC_HiZSetupTime;   /*!< Defines the number of HCLK clock cycles during which the
                                     databus is kept in HiZ after the start of a NAND-Flash
                                     write access to common/Attribute or I/O memory space (depending
                                     on the memory space timing to be configured).
                                     This parameter can be a number between 0x00 and 0xFF */
}FSMC_NAND_PCCARDTimingInitTypeDef;
/**
  * @brief  FSMC NAND Init structure definition
  */
typedef struct
{
  uint32_t FSMC_Bank;              /*!< Specifies the NAND memory bank that will be used.
                                      This parameter can be a value of @ref FSMC_NAND_Bank */
  uint32_t FSMC_Waitfeature;      /*!< Enables or disables the Wait feature for the NAND Memory Bank.
                                       This parameter can be any value of @ref FSMC_Wait_feature */
  uint32_t FSMC_MemoryDataWidth;  /*!< Specifies the external memory device width.
                                       This parameter can be any value of @ref FSMC_Data_Width */
  uint32_t FSMC_ECC;              /*!< Enables or disables the ECC computation.
                                       This parameter can be any value of @ref FSMC_ECC */
  uint32_t FSMC_ECCPageSize;      /*!< Defines the page size for the extended ECC.
                                       This parameter can be any value of @ref FSMC_ECC_Page_Size */
  uint32_t FSMC_TCLRSetupTime;    /*!< Defines the number of HCLK cycles to configure the
                                       delay between CLE low and RE low.
                                       This parameter can be a value between 0 and 0xFF. */
  uint32_t FSMC_TARSetupTime;     /*!< Defines the number of HCLK cycles to configure the
                                       delay between ALE low and RE low.
                                       This parameter can be a number between 0x0 and 0xFF */
  FSMC_NAND_PCCARDTimingInitTypeDef*  FSMC_CommonSpaceTimingStruct;   /*!< FSMC Common Space Timing */
  FSMC_NAND_PCCARDTimingInitTypeDef*  FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */
}FSMC_NANDInitTypeDef;
/**
  * @brief  FSMC PCCARD Init structure definition
  */
typedef struct
{
  uint32_t FSMC_Waitfeature;    /*!< Enables or disables the Wait feature for the Memory Bank.
                                    This parameter can be any value of @ref FSMC_Wait_feature */
  uint32_t FSMC_TCLRSetupTime;  /*!< Defines the number of HCLK cycles to configure the
                                     delay between CLE low and RE low.
                                     This parameter can be a value between 0 and 0xFF. */
  uint32_t FSMC_TARSetupTime;   /*!< Defines the number of HCLK cycles to configure the
                                     delay between ALE low and RE low.
                                     This parameter can be a number between 0x0 and 0xFF */
  FSMC_NAND_PCCARDTimingInitTypeDef*  FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */
  FSMC_NAND_PCCARDTimingInitTypeDef*  FSMC_AttributeSpaceTimingStruct;  /*!< FSMC Attribute Space Timing */
  FSMC_NAND_PCCARDTimingInitTypeDef*  FSMC_IOSpaceTimingStruct; /*!< FSMC IO Space Timing */
}FSMC_PCCARDInitTypeDef;
/**
  * @}
  */
/** @defgroup FSMC_Exported_Constants
  * @{
  */
/** @defgroup FSMC_NORSRAM_Bank
  * @{
  */
#define FSMC_Bank1_NORSRAM1                             ((uint32_t)0x00000000)
#define FSMC_Bank1_NORSRAM2                             ((uint32_t)0x00000002)
#define FSMC_Bank1_NORSRAM3                             ((uint32_t)0x00000004)
#define FSMC_Bank1_NORSRAM4                             ((uint32_t)0x00000006)
/**
  * @}
  */
/** @defgroup FSMC_NAND_Bank
  * @{
  */
#define FSMC_Bank2_NAND                                 ((uint32_t)0x00000010)
#define FSMC_Bank3_NAND                                 ((uint32_t)0x00000100)
/**
  * @}
  */
/** @defgroup FSMC_PCCARD_Bank
  * @{
  */
#define FSMC_Bank4_PCCARD                               ((uint32_t)0x00001000)
/**
  * @}
  */
#define IS_FSMC_NORSRAM_BANK(BANK) (((BANK) == FSMC_Bank1_NORSRAM1) || \
                                    ((BANK) == FSMC_Bank1_NORSRAM2) || \
                                    ((BANK) == FSMC_Bank1_NORSRAM3) || \
                                    ((BANK) == FSMC_Bank1_NORSRAM4))
#define IS_FSMC_NAND_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \
                                 ((BANK) == FSMC_Bank3_NAND))
#define IS_FSMC_GETFLAG_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \
                                    ((BANK) == FSMC_Bank3_NAND) || \
                                    ((BANK) == FSMC_Bank4_PCCARD))
#define IS_FSMC_IT_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \
                               ((BANK) == FSMC_Bank3_NAND) || \
                               ((BANK) == FSMC_Bank4_PCCARD))
/** @defgroup NOR_SRAM_Controller
  * @{
  */
/** @defgroup FSMC_Data_Address_Bus_Multiplexing
  * @{
  */
#define FSMC_DataAddressMux_Disable                       ((uint32_t)0x00000000)
#define FSMC_DataAddressMux_Enable                        ((uint32_t)0x00000002)
#define IS_FSMC_MUX(MUX) (((MUX) == FSMC_DataAddressMux_Disable) || \
                          ((MUX) == FSMC_DataAddressMux_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Memory_Type
  * @{
  */
#define FSMC_MemoryType_SRAM                            ((uint32_t)0x00000000)
#define FSMC_MemoryType_PSRAM                           ((uint32_t)0x00000004)
#define FSMC_MemoryType_NOR                             ((uint32_t)0x00000008)
#define IS_FSMC_MEMORY(MEMORY) (((MEMORY) == FSMC_MemoryType_SRAM) || \
                                ((MEMORY) == FSMC_MemoryType_PSRAM)|| \
                                ((MEMORY) == FSMC_MemoryType_NOR))
/**
  * @}
  */
/** @defgroup FSMC_Data_Width
  * @{
  */
#define FSMC_MemoryDataWidth_8b                         ((uint32_t)0x00000000)
#define FSMC_MemoryDataWidth_16b                        ((uint32_t)0x00000010)
#define IS_FSMC_MEMORY_WIDTH(WIDTH) (((WIDTH) == FSMC_MemoryDataWidth_8b) || \
                                     ((WIDTH) == FSMC_MemoryDataWidth_16b))
/**
  * @}
  */
/** @defgroup FSMC_Burst_Access_Mode
  * @{
  */
#define FSMC_BurstAccessMode_Disable                    ((uint32_t)0x00000000)
#define FSMC_BurstAccessMode_Enable                     ((uint32_t)0x00000100)
#define IS_FSMC_BURSTMODE(STATE) (((STATE) == FSMC_BurstAccessMode_Disable) || \
                                  ((STATE) == FSMC_BurstAccessMode_Enable))
/**
  * @}
  */
/** @defgroup FSMC_AsynchronousWait
  * @{
  */
#define FSMC_AsynchronousWait_Disable                   ((uint32_t)0x00000000)
#define FSMC_AsynchronousWait_Enable                    ((uint32_t)0x00008000)
#define IS_FSMC_ASYNWAIT(STATE) (((STATE) == FSMC_AsynchronousWait_Disable) || \
                                 ((STATE) == FSMC_AsynchronousWait_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Wait_Signal_Polarity
  * @{
  */
#define FSMC_WaitSignalPolarity_Low                     ((uint32_t)0x00000000)
#define FSMC_WaitSignalPolarity_High                    ((uint32_t)0x00000200)
#define IS_FSMC_WAIT_POLARITY(POLARITY) (((POLARITY) == FSMC_WaitSignalPolarity_Low) || \
                                         ((POLARITY) == FSMC_WaitSignalPolarity_High))
/**
  * @}
  */
/** @defgroup FSMC_Wrap_Mode
  * @{
  */
#define FSMC_WrapMode_Disable                           ((uint32_t)0x00000000)
#define FSMC_WrapMode_Enable                            ((uint32_t)0x00000400)
#define IS_FSMC_WRAP_MODE(MODE) (((MODE) == FSMC_WrapMode_Disable) || \
                                 ((MODE) == FSMC_WrapMode_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Wait_Timing
  * @{
  */
#define FSMC_WaitSignalActive_BeforeWaitState           ((uint32_t)0x00000000)
#define FSMC_WaitSignalActive_DuringWaitState           ((uint32_t)0x00000800)
#define IS_FSMC_WAIT_SIGNAL_ACTIVE(ACTIVE) (((ACTIVE) == FSMC_WaitSignalActive_BeforeWaitState) || \
                                            ((ACTIVE) == FSMC_WaitSignalActive_DuringWaitState))
/**
  * @}
  */
/** @defgroup FSMC_Write_Operation
  * @{
  */
#define FSMC_WriteOperation_Disable                     ((uint32_t)0x00000000)
#define FSMC_WriteOperation_Enable                      ((uint32_t)0x00001000)
#define IS_FSMC_WRITE_OPERATION(OPERATION) (((OPERATION) == FSMC_WriteOperation_Disable) || \
                                            ((OPERATION) == FSMC_WriteOperation_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Wait_Signal
  * @{
  */
#define FSMC_WaitSignal_Disable                         ((uint32_t)0x00000000)
#define FSMC_WaitSignal_Enable                          ((uint32_t)0x00002000)
#define IS_FSMC_WAITE_SIGNAL(SIGNAL) (((SIGNAL) == FSMC_WaitSignal_Disable) || \
                                      ((SIGNAL) == FSMC_WaitSignal_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Extended_Mode
  * @{
  */
#define FSMC_ExtendedMode_Disable                       ((uint32_t)0x00000000)
#define FSMC_ExtendedMode_Enable                        ((uint32_t)0x00004000)
#define IS_FSMC_EXTENDED_MODE(MODE) (((MODE) == FSMC_ExtendedMode_Disable) || \
                                     ((MODE) == FSMC_ExtendedMode_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Write_Burst
  * @{
  */
#define FSMC_WriteBurst_Disable                         ((uint32_t)0x00000000)
#define FSMC_WriteBurst_Enable                          ((uint32_t)0x00080000)
#define IS_FSMC_WRITE_BURST(BURST) (((BURST) == FSMC_WriteBurst_Disable) || \
                                    ((BURST) == FSMC_WriteBurst_Enable))
/**
  * @}
  */
/** @defgroup FSMC_Address_Setup_Time
  * @{
  */
#define IS_FSMC_ADDRESS_SETUP_TIME(TIME) ((TIME) <= 0xF)
/**
  * @}
  */
/** @defgroup FSMC_Address_Hold_Time
  * @{
  */
#define IS_FSMC_ADDRESS_HOLD_TIME(TIME) ((TIME) <= 0xF)
/**
  * @}
  */
/** @defgroup FSMC_Data_Setup_Time
  * @{
  */
#define IS_FSMC_DATASETUP_TIME(TIME) (((TIME) > 0) && ((TIME) <= 0xFF))
/**
  * @}
  */
/** @defgroup FSMC_Bus_Turn_around_Duration
  * @{
  */
#define IS_FSMC_TURNAROUND_TIME(TIME) ((TIME) <= 0xF)
/**
  * @}
  */
/** @defgroup FSMC_CLK_Division
  * @{
  */
#define IS_FSMC_CLK_DIV(DIV) ((DIV) <= 0xF)
/**
  * @}
  */
/** @defgroup FSMC_Data_Latency
  * @{
  */
#define IS_FSMC_DATA_LATENCY(LATENCY) ((LATENCY) <= 0xF)
/**
  * @}
  */
/** @defgroup FSMC_Access_Mode
  * @{
  */
#define FSMC_AccessMode_A                               ((uint32_t)0x00000000)
#define FSMC_AccessMode_B                               ((uint32_t)0x10000000)
#define FSMC_AccessMode_C                               ((uint32_t)0x20000000)
#define FSMC_AccessMode_D                               ((uint32_t)0x30000000)
#define IS_FSMC_ACCESS_MODE(MODE) (((MODE) == FSMC_AccessMode_A) || \
                                   ((MODE) == FSMC_AccessMode_B) || \
                                   ((MODE) == FSMC_AccessMode_C) || \
                                   ((MODE) == FSMC_AccessMode_D))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup NAND_PCCARD_Controller
  * @{
  */
/** @defgroup FSMC_Wait_feature
  * @{
  */
#define FSMC_Waitfeature_Disable                        ((uint32_t)0x00000000)
#define FSMC_Waitfeature_Enable                         ((uint32_t)0x00000002)
#define IS_FSMC_WAIT_FEATURE(FEATURE) (((FEATURE) == FSMC_Waitfeature_Disable) || \
                                       ((FEATURE) == FSMC_Waitfeature_Enable))
/**
  * @}
  */
/** @defgroup FSMC_ECC
  * @{
  */
#define FSMC_ECC_Disable                                ((uint32_t)0x00000000)
#define FSMC_ECC_Enable                                 ((uint32_t)0x00000040)
#define IS_FSMC_ECC_STATE(STATE) (((STATE) == FSMC_ECC_Disable) || \
                                  ((STATE) == FSMC_ECC_Enable))
/**
  * @}
  */
/** @defgroup FSMC_ECC_Page_Size
  * @{
  */
#define FSMC_ECCPageSize_256Bytes                       ((uint32_t)0x00000000)
#define FSMC_ECCPageSize_512Bytes                       ((uint32_t)0x00020000)
#define FSMC_ECCPageSize_1024Bytes                      ((uint32_t)0x00040000)
#define FSMC_ECCPageSize_2048Bytes                      ((uint32_t)0x00060000)
#define FSMC_ECCPageSize_4096Bytes                      ((uint32_t)0x00080000)
#define FSMC_ECCPageSize_8192Bytes                      ((uint32_t)0x000A0000)
#define IS_FSMC_ECCPAGE_SIZE(SIZE) (((SIZE) == FSMC_ECCPageSize_256Bytes) || \
                                    ((SIZE) == FSMC_ECCPageSize_512Bytes) || \
                                    ((SIZE) == FSMC_ECCPageSize_1024Bytes) || \
                                    ((SIZE) == FSMC_ECCPageSize_2048Bytes) || \
                                    ((SIZE) == FSMC_ECCPageSize_4096Bytes) || \
                                    ((SIZE) == FSMC_ECCPageSize_8192Bytes))
/**
  * @}
  */
/** @defgroup FSMC_TCLR_Setup_Time
  * @{
  */
#define IS_FSMC_TCLR_TIME(TIME) ((TIME) <= 0xFF)
/**
  * @}
  */
/** @defgroup FSMC_TAR_Setup_Time
  * @{
  */
#define IS_FSMC_TAR_TIME(TIME) ((TIME) <= 0xFF)
/**
  * @}
  */
/** @defgroup FSMC_Setup_Time
  * @{
  */
#define IS_FSMC_SETUP_TIME(TIME) ((TIME) <= 0xFF)
/**
  * @}
  */
/** @defgroup FSMC_Wait_Setup_Time
  * @{
  */
#define IS_FSMC_WAIT_TIME(TIME) ((TIME) <= 0xFF)
/**
  * @}
  */
/** @defgroup FSMC_Hold_Setup_Time
  * @{
  */
#define IS_FSMC_HOLD_TIME(TIME) ((TIME) <= 0xFF)
/**
  * @}
  */
/** @defgroup FSMC_HiZ_Setup_Time
  * @{
  */
#define IS_FSMC_HIZ_TIME(TIME) ((TIME) <= 0xFF)
/**
  * @}
  */
/** @defgroup FSMC_Interrupt_sources
  * @{
  */
#define FSMC_IT_RisingEdge                              ((uint32_t)0x00000008)
#define FSMC_IT_Level                                   ((uint32_t)0x00000010)
#define FSMC_IT_FallingEdge                             ((uint32_t)0x00000020)
#define IS_FSMC_IT(IT) ((((IT) & (uint32_t)0xFFFFFFC7) == 0x00000000) && ((IT) != 0x00000000))
#define IS_FSMC_GET_IT(IT) (((IT) == FSMC_IT_RisingEdge) || \
                            ((IT) == FSMC_IT_Level) || \
                            ((IT) == FSMC_IT_FallingEdge))
/**
  * @}
  */
/** @defgroup FSMC_Flags
  * @{
  */
#define FSMC_FLAG_RisingEdge                            ((uint32_t)0x00000001)
#define FSMC_FLAG_Level                                 ((uint32_t)0x00000002)
#define FSMC_FLAG_FallingEdge                           ((uint32_t)0x00000004)
#define FSMC_FLAG_FEMPT                                 ((uint32_t)0x00000040)
#define IS_FSMC_GET_FLAG(FLAG) (((FLAG) == FSMC_FLAG_RisingEdge) || \
                                ((FLAG) == FSMC_FLAG_Level) || \
                                ((FLAG) == FSMC_FLAG_FallingEdge) || \
                                ((FLAG) == FSMC_FLAG_FEMPT))
#define IS_FSMC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFF8) == 0x00000000) && ((FLAG) != 0x00000000))
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup FSMC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup FSMC_Exported_Functions
  * @{
  */
void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank);
void FSMC_NANDDeInit(uint32_t FSMC_Bank);
void FSMC_PCCARDDeInit(void);
void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct);
void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct);
void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct);
void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct);
void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct);
void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct);
void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState);
void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState);
void FSMC_PCCARDCmd(FunctionalState NewState);
void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState);
uint32_t FSMC_GetECC(uint32_t FSMC_Bank);
void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState);
FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG);
void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG);
ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT);
void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT);
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_FSMC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_gpio.h
New file
@@ -0,0 +1,385 @@
/**
  ******************************************************************************
  * @file    stm32f10x_gpio.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the GPIO
  *          firmware library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_GPIO_H
#define __STM32F10x_GPIO_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup GPIO
  * @{
  */
/** @defgroup GPIO_Exported_Types
  * @{
  */
#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
                                    ((PERIPH) == GPIOB) || \
                                    ((PERIPH) == GPIOC) || \
                                    ((PERIPH) == GPIOD) || \
                                    ((PERIPH) == GPIOE) || \
                                    ((PERIPH) == GPIOF) || \
                                    ((PERIPH) == GPIOG))
/**
  * @brief  Output Maximum frequency selection
  */
typedef enum
{
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz,
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
                              ((SPEED) == GPIO_Speed_50MHz))
/**
  * @brief  Configuration Mode enumeration
  */
typedef enum
{ GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \
                            ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \
                            ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \
                            ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))
/**
  * @brief  GPIO Init structure definition
  */
typedef struct
{
  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.
                                      This parameter can be any value of @ref GPIO_pins_define */
  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.
                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */
  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.
                                      This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
/**
  * @brief  Bit_SET and Bit_RESET enumeration
  */
typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;
#define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))
/**
  * @}
  */
/** @defgroup GPIO_Exported_Constants
  * @{
  */
/** @defgroup GPIO_pins_define
  * @{
  */
#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */
#define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00))
#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \
                              ((PIN) == GPIO_Pin_1) || \
                              ((PIN) == GPIO_Pin_2) || \
                              ((PIN) == GPIO_Pin_3) || \
                              ((PIN) == GPIO_Pin_4) || \
                              ((PIN) == GPIO_Pin_5) || \
                              ((PIN) == GPIO_Pin_6) || \
                              ((PIN) == GPIO_Pin_7) || \
                              ((PIN) == GPIO_Pin_8) || \
                              ((PIN) == GPIO_Pin_9) || \
                              ((PIN) == GPIO_Pin_10) || \
                              ((PIN) == GPIO_Pin_11) || \
                              ((PIN) == GPIO_Pin_12) || \
                              ((PIN) == GPIO_Pin_13) || \
                              ((PIN) == GPIO_Pin_14) || \
                              ((PIN) == GPIO_Pin_15))
/**
  * @}
  */
/** @defgroup GPIO_Remap_define
  * @{
  */
#define GPIO_Remap_SPI1             ((uint32_t)0x00000001)  /*!< SPI1 Alternate Function mapping */
#define GPIO_Remap_I2C1             ((uint32_t)0x00000002)  /*!< I2C1 Alternate Function mapping */
#define GPIO_Remap_USART1           ((uint32_t)0x00000004)  /*!< USART1 Alternate Function mapping */
#define GPIO_Remap_USART2           ((uint32_t)0x00000008)  /*!< USART2 Alternate Function mapping */
#define GPIO_PartialRemap_USART3    ((uint32_t)0x00140010)  /*!< USART3 Partial Alternate Function mapping */
#define GPIO_FullRemap_USART3       ((uint32_t)0x00140030)  /*!< USART3 Full Alternate Function mapping */
#define GPIO_PartialRemap_TIM1      ((uint32_t)0x00160040)  /*!< TIM1 Partial Alternate Function mapping */
#define GPIO_FullRemap_TIM1         ((uint32_t)0x001600C0)  /*!< TIM1 Full Alternate Function mapping */
#define GPIO_PartialRemap1_TIM2     ((uint32_t)0x00180100)  /*!< TIM2 Partial1 Alternate Function mapping */
#define GPIO_PartialRemap2_TIM2     ((uint32_t)0x00180200)  /*!< TIM2 Partial2 Alternate Function mapping */
#define GPIO_FullRemap_TIM2         ((uint32_t)0x00180300)  /*!< TIM2 Full Alternate Function mapping */
#define GPIO_PartialRemap_TIM3      ((uint32_t)0x001A0800)  /*!< TIM3 Partial Alternate Function mapping */
#define GPIO_FullRemap_TIM3         ((uint32_t)0x001A0C00)  /*!< TIM3 Full Alternate Function mapping */
#define GPIO_Remap_TIM4             ((uint32_t)0x00001000)  /*!< TIM4 Alternate Function mapping */
#define GPIO_Remap1_CAN1            ((uint32_t)0x001D4000)  /*!< CAN1 Alternate Function mapping */
#define GPIO_Remap2_CAN1            ((uint32_t)0x001D6000)  /*!< CAN1 Alternate Function mapping */
#define GPIO_Remap_PD01             ((uint32_t)0x00008000)  /*!< PD01 Alternate Function mapping */
#define GPIO_Remap_TIM5CH4_LSI      ((uint32_t)0x00200001)  /*!< LSI connected to TIM5 Channel4 input capture for calibration */
#define GPIO_Remap_ADC1_ETRGINJ     ((uint32_t)0x00200002)  /*!< ADC1 External Trigger Injected Conversion remapping */
#define GPIO_Remap_ADC1_ETRGREG     ((uint32_t)0x00200004)  /*!< ADC1 External Trigger Regular Conversion remapping */
#define GPIO_Remap_ADC2_ETRGINJ     ((uint32_t)0x00200008)  /*!< ADC2 External Trigger Injected Conversion remapping */
#define GPIO_Remap_ADC2_ETRGREG     ((uint32_t)0x00200010)  /*!< ADC2 External Trigger Regular Conversion remapping */
#define GPIO_Remap_ETH              ((uint32_t)0x00200020)  /*!< Ethernet remapping (only for Connectivity line devices) */
#define GPIO_Remap_CAN2             ((uint32_t)0x00200040)  /*!< CAN2 remapping (only for Connectivity line devices) */
#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*!< JTAG-DP Disabled and SW-DP Enabled */
#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */
#define GPIO_Remap_SPI3             ((uint32_t)0x00201100)  /*!< SPI3/I2S3 Alternate Function mapping (only for Connectivity line devices) */
#define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000)  /*!< Ethernet PTP output or USB OTG SOF (Start of Frame) connected
                                                                 to TIM2 Internal Trigger 1 for calibration
                                                                 (only for Connectivity line devices) */
#define GPIO_Remap_PTP_PPS          ((uint32_t)0x00204000)  /*!< Ethernet MAC PPS_PTS output on PB05 (only for Connectivity line devices) */
#define GPIO_Remap_TIM15            ((uint32_t)0x80000001)  /*!< TIM15 Alternate Function mapping (only for Value line devices) */
#define GPIO_Remap_TIM16            ((uint32_t)0x80000002)  /*!< TIM16 Alternate Function mapping (only for Value line devices) */
#define GPIO_Remap_TIM17            ((uint32_t)0x80000004)  /*!< TIM17 Alternate Function mapping (only for Value line devices) */
#define GPIO_Remap_CEC              ((uint32_t)0x80000008)  /*!< CEC Alternate Function mapping (only for Value line devices) */
#define GPIO_Remap_TIM1_DMA         ((uint32_t)0x80000010)  /*!< TIM1 DMA requests mapping (only for Value line devices) */
#define GPIO_Remap_TIM9             ((uint32_t)0x80000020)  /*!< TIM9 Alternate Function mapping (only for XL-density devices) */
#define GPIO_Remap_TIM10            ((uint32_t)0x80000040)  /*!< TIM10 Alternate Function mapping (only for XL-density devices) */
#define GPIO_Remap_TIM11            ((uint32_t)0x80000080)  /*!< TIM11 Alternate Function mapping (only for XL-density devices) */
#define GPIO_Remap_TIM13            ((uint32_t)0x80000100)  /*!< TIM13 Alternate Function mapping (only for High density Value line and XL-density devices) */
#define GPIO_Remap_TIM14            ((uint32_t)0x80000200)  /*!< TIM14 Alternate Function mapping (only for High density Value line and XL-density devices) */
#define GPIO_Remap_FSMC_NADV        ((uint32_t)0x80000400)  /*!< FSMC_NADV Alternate Function mapping (only for High density Value line and XL-density devices) */
#define GPIO_Remap_TIM67_DAC_DMA    ((uint32_t)0x80000800)  /*!< TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) */
#define GPIO_Remap_TIM12            ((uint32_t)0x80001000)  /*!< TIM12 Alternate Function mapping (only for High density Value line devices) */
#define GPIO_Remap_MISC             ((uint32_t)0x80002000)  /*!< Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping,
                                                                 only for High density Value line devices) */
#define IS_GPIO_REMAP(REMAP) (((REMAP) == GPIO_Remap_SPI1) || ((REMAP) == GPIO_Remap_I2C1) || \
                              ((REMAP) == GPIO_Remap_USART1) || ((REMAP) == GPIO_Remap_USART2) || \
                              ((REMAP) == GPIO_PartialRemap_USART3) || ((REMAP) == GPIO_FullRemap_USART3) || \
                              ((REMAP) == GPIO_PartialRemap_TIM1) || ((REMAP) == GPIO_FullRemap_TIM1) || \
                              ((REMAP) == GPIO_PartialRemap1_TIM2) || ((REMAP) == GPIO_PartialRemap2_TIM2) || \
                              ((REMAP) == GPIO_FullRemap_TIM2) || ((REMAP) == GPIO_PartialRemap_TIM3) || \
                              ((REMAP) == GPIO_FullRemap_TIM3) || ((REMAP) == GPIO_Remap_TIM4) || \
                              ((REMAP) == GPIO_Remap1_CAN1) || ((REMAP) == GPIO_Remap2_CAN1) || \
                              ((REMAP) == GPIO_Remap_PD01) || ((REMAP) == GPIO_Remap_TIM5CH4_LSI) || \
                              ((REMAP) == GPIO_Remap_ADC1_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC1_ETRGREG) || \
                              ((REMAP) == GPIO_Remap_ADC2_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC2_ETRGREG) || \
                              ((REMAP) == GPIO_Remap_ETH) ||((REMAP) == GPIO_Remap_CAN2) || \
                              ((REMAP) == GPIO_Remap_SWJ_NoJTRST) || ((REMAP) == GPIO_Remap_SWJ_JTAGDisable) || \
                              ((REMAP) == GPIO_Remap_SWJ_Disable)|| ((REMAP) == GPIO_Remap_SPI3) || \
                              ((REMAP) == GPIO_Remap_TIM2ITR1_PTP_SOF) || ((REMAP) == GPIO_Remap_PTP_PPS) || \
                              ((REMAP) == GPIO_Remap_TIM15) || ((REMAP) == GPIO_Remap_TIM16) || \
                              ((REMAP) == GPIO_Remap_TIM17) || ((REMAP) == GPIO_Remap_CEC) || \
                              ((REMAP) == GPIO_Remap_TIM1_DMA) || ((REMAP) == GPIO_Remap_TIM9) || \
                              ((REMAP) == GPIO_Remap_TIM10) || ((REMAP) == GPIO_Remap_TIM11) || \
                              ((REMAP) == GPIO_Remap_TIM13) || ((REMAP) == GPIO_Remap_TIM14) || \
                              ((REMAP) == GPIO_Remap_FSMC_NADV) || ((REMAP) == GPIO_Remap_TIM67_DAC_DMA) || \
                              ((REMAP) == GPIO_Remap_TIM12) || ((REMAP) == GPIO_Remap_MISC))
/**
  * @}
  */
/** @defgroup GPIO_Port_Sources
  * @{
  */
#define GPIO_PortSourceGPIOA       ((uint8_t)0x00)
#define GPIO_PortSourceGPIOB       ((uint8_t)0x01)
#define GPIO_PortSourceGPIOC       ((uint8_t)0x02)
#define GPIO_PortSourceGPIOD       ((uint8_t)0x03)
#define GPIO_PortSourceGPIOE       ((uint8_t)0x04)
#define GPIO_PortSourceGPIOF       ((uint8_t)0x05)
#define GPIO_PortSourceGPIOG       ((uint8_t)0x06)
#define IS_GPIO_EVENTOUT_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \
                                                  ((PORTSOURCE) == GPIO_PortSourceGPIOB) || \
                                                  ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \
                                                  ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \
                                                  ((PORTSOURCE) == GPIO_PortSourceGPIOE))
#define IS_GPIO_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \
                                              ((PORTSOURCE) == GPIO_PortSourceGPIOB) || \
                                              ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \
                                              ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \
                                              ((PORTSOURCE) == GPIO_PortSourceGPIOE) || \
                                              ((PORTSOURCE) == GPIO_PortSourceGPIOF) || \
                                              ((PORTSOURCE) == GPIO_PortSourceGPIOG))
/**
  * @}
  */
/** @defgroup GPIO_Pin_sources
  * @{
  */
#define GPIO_PinSource0            ((uint8_t)0x00)
#define GPIO_PinSource1            ((uint8_t)0x01)
#define GPIO_PinSource2            ((uint8_t)0x02)
#define GPIO_PinSource3            ((uint8_t)0x03)
#define GPIO_PinSource4            ((uint8_t)0x04)
#define GPIO_PinSource5            ((uint8_t)0x05)
#define GPIO_PinSource6            ((uint8_t)0x06)
#define GPIO_PinSource7            ((uint8_t)0x07)
#define GPIO_PinSource8            ((uint8_t)0x08)
#define GPIO_PinSource9            ((uint8_t)0x09)
#define GPIO_PinSource10           ((uint8_t)0x0A)
#define GPIO_PinSource11           ((uint8_t)0x0B)
#define GPIO_PinSource12           ((uint8_t)0x0C)
#define GPIO_PinSource13           ((uint8_t)0x0D)
#define GPIO_PinSource14           ((uint8_t)0x0E)
#define GPIO_PinSource15           ((uint8_t)0x0F)
#define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \
                                       ((PINSOURCE) == GPIO_PinSource1) || \
                                       ((PINSOURCE) == GPIO_PinSource2) || \
                                       ((PINSOURCE) == GPIO_PinSource3) || \
                                       ((PINSOURCE) == GPIO_PinSource4) || \
                                       ((PINSOURCE) == GPIO_PinSource5) || \
                                       ((PINSOURCE) == GPIO_PinSource6) || \
                                       ((PINSOURCE) == GPIO_PinSource7) || \
                                       ((PINSOURCE) == GPIO_PinSource8) || \
                                       ((PINSOURCE) == GPIO_PinSource9) || \
                                       ((PINSOURCE) == GPIO_PinSource10) || \
                                       ((PINSOURCE) == GPIO_PinSource11) || \
                                       ((PINSOURCE) == GPIO_PinSource12) || \
                                       ((PINSOURCE) == GPIO_PinSource13) || \
                                       ((PINSOURCE) == GPIO_PinSource14) || \
                                       ((PINSOURCE) == GPIO_PinSource15))
/**
  * @}
  */
/** @defgroup Ethernet_Media_Interface
  * @{
  */
#define GPIO_ETH_MediaInterface_MII    ((u32)0x00000000)
#define GPIO_ETH_MediaInterface_RMII   ((u32)0x00000001)
#define IS_GPIO_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == GPIO_ETH_MediaInterface_MII) || \
                                                ((INTERFACE) == GPIO_ETH_MediaInterface_RMII))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup GPIO_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup GPIO_Exported_Functions
  * @{
  */
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_GPIO_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_i2c.h
New file
@@ -0,0 +1,684 @@
/**
  ******************************************************************************
  * @file    stm32f10x_i2c.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the I2C firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_I2C_H
#define __STM32F10x_I2C_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup I2C
  * @{
  */
/** @defgroup I2C_Exported_Types
  * @{
  */
/**
  * @brief  I2C Init structure definition
  */
typedef struct
{
  uint32_t I2C_ClockSpeed;          /*!< Specifies the clock frequency.
                                         This parameter must be set to a value lower than 400kHz */
  uint16_t I2C_Mode;                /*!< Specifies the I2C mode.
                                         This parameter can be a value of @ref I2C_mode */
  uint16_t I2C_DutyCycle;           /*!< Specifies the I2C fast mode duty cycle.
                                         This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */
  uint16_t I2C_OwnAddress1;         /*!< Specifies the first device own address.
                                         This parameter can be a 7-bit or 10-bit address. */
  uint16_t I2C_Ack;                 /*!< Enables or disables the acknowledgement.
                                         This parameter can be a value of @ref I2C_acknowledgement */
  uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.
                                         This parameter can be a value of @ref I2C_acknowledged_address */
}I2C_InitTypeDef;
/**
  * @}
  */
/** @defgroup I2C_Exported_Constants
  * @{
  */
#define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C1) || \
                                   ((PERIPH) == I2C2))
/** @defgroup I2C_mode
  * @{
  */
#define I2C_Mode_I2C                    ((uint16_t)0x0000)
#define I2C_Mode_SMBusDevice            ((uint16_t)0x0002)
#define I2C_Mode_SMBusHost              ((uint16_t)0x000A)
#define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_I2C) || \
                           ((MODE) == I2C_Mode_SMBusDevice) || \
                           ((MODE) == I2C_Mode_SMBusHost))
/**
  * @}
  */
/** @defgroup I2C_duty_cycle_in_fast_mode
  * @{
  */
#define I2C_DutyCycle_16_9              ((uint16_t)0x4000) /*!< I2C fast mode Tlow/Thigh = 16/9 */
#define I2C_DutyCycle_2                 ((uint16_t)0xBFFF) /*!< I2C fast mode Tlow/Thigh = 2 */
#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DutyCycle_16_9) || \
                                  ((CYCLE) == I2C_DutyCycle_2))
/**
  * @}
  */
/** @defgroup I2C_acknowledgement
  * @{
  */
#define I2C_Ack_Enable                  ((uint16_t)0x0400)
#define I2C_Ack_Disable                 ((uint16_t)0x0000)
#define IS_I2C_ACK_STATE(STATE) (((STATE) == I2C_Ack_Enable) || \
                                 ((STATE) == I2C_Ack_Disable))
/**
  * @}
  */
/** @defgroup I2C_transfer_direction
  * @{
  */
#define  I2C_Direction_Transmitter      ((uint8_t)0x00)
#define  I2C_Direction_Receiver         ((uint8_t)0x01)
#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \
                                     ((DIRECTION) == I2C_Direction_Receiver))
/**
  * @}
  */
/** @defgroup I2C_acknowledged_address
  * @{
  */
#define I2C_AcknowledgedAddress_7bit    ((uint16_t)0x4000)
#define I2C_AcknowledgedAddress_10bit   ((uint16_t)0xC000)
#define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \
                                             ((ADDRESS) == I2C_AcknowledgedAddress_10bit))
/**
  * @}
  */
/** @defgroup I2C_registers
  * @{
  */
#define I2C_Register_CR1                ((uint8_t)0x00)
#define I2C_Register_CR2                ((uint8_t)0x04)
#define I2C_Register_OAR1               ((uint8_t)0x08)
#define I2C_Register_OAR2               ((uint8_t)0x0C)
#define I2C_Register_DR                 ((uint8_t)0x10)
#define I2C_Register_SR1                ((uint8_t)0x14)
#define I2C_Register_SR2                ((uint8_t)0x18)
#define I2C_Register_CCR                ((uint8_t)0x1C)
#define I2C_Register_TRISE              ((uint8_t)0x20)
#define IS_I2C_REGISTER(REGISTER) (((REGISTER) == I2C_Register_CR1) || \
                                   ((REGISTER) == I2C_Register_CR2) || \
                                   ((REGISTER) == I2C_Register_OAR1) || \
                                   ((REGISTER) == I2C_Register_OAR2) || \
                                   ((REGISTER) == I2C_Register_DR) || \
                                   ((REGISTER) == I2C_Register_SR1) || \
                                   ((REGISTER) == I2C_Register_SR2) || \
                                   ((REGISTER) == I2C_Register_CCR) || \
                                   ((REGISTER) == I2C_Register_TRISE))
/**
  * @}
  */
/** @defgroup I2C_SMBus_alert_pin_level
  * @{
  */
#define I2C_SMBusAlert_Low              ((uint16_t)0x2000)
#define I2C_SMBusAlert_High             ((uint16_t)0xDFFF)
#define IS_I2C_SMBUS_ALERT(ALERT) (((ALERT) == I2C_SMBusAlert_Low) || \
                                   ((ALERT) == I2C_SMBusAlert_High))
/**
  * @}
  */
/** @defgroup I2C_PEC_position
  * @{
  */
#define I2C_PECPosition_Next            ((uint16_t)0x0800)
#define I2C_PECPosition_Current         ((uint16_t)0xF7FF)
#define IS_I2C_PEC_POSITION(POSITION) (((POSITION) == I2C_PECPosition_Next) || \
                                       ((POSITION) == I2C_PECPosition_Current))
/**
  * @}
  */
/** @defgroup I2C_NCAK_position
  * @{
  */
#define I2C_NACKPosition_Next           ((uint16_t)0x0800)
#define I2C_NACKPosition_Current        ((uint16_t)0xF7FF)
#define IS_I2C_NACK_POSITION(POSITION)  (((POSITION) == I2C_NACKPosition_Next) || \
                                         ((POSITION) == I2C_NACKPosition_Current))
/**
  * @}
  */
/** @defgroup I2C_interrupts_definition
  * @{
  */
#define I2C_IT_BUF                      ((uint16_t)0x0400)
#define I2C_IT_EVT                      ((uint16_t)0x0200)
#define I2C_IT_ERR                      ((uint16_t)0x0100)
#define IS_I2C_CONFIG_IT(IT) ((((IT) & (uint16_t)0xF8FF) == 0x00) && ((IT) != 0x00))
/**
  * @}
  */
/** @defgroup I2C_interrupts_definition
  * @{
  */
#define I2C_IT_SMBALERT                 ((uint32_t)0x01008000)
#define I2C_IT_TIMEOUT                  ((uint32_t)0x01004000)
#define I2C_IT_PECERR                   ((uint32_t)0x01001000)
#define I2C_IT_OVR                      ((uint32_t)0x01000800)
#define I2C_IT_AF                       ((uint32_t)0x01000400)
#define I2C_IT_ARLO                     ((uint32_t)0x01000200)
#define I2C_IT_BERR                     ((uint32_t)0x01000100)
#define I2C_IT_TXE                      ((uint32_t)0x06000080)
#define I2C_IT_RXNE                     ((uint32_t)0x06000040)
#define I2C_IT_STOPF                    ((uint32_t)0x02000010)
#define I2C_IT_ADD10                    ((uint32_t)0x02000008)
#define I2C_IT_BTF                      ((uint32_t)0x02000004)
#define I2C_IT_ADDR                     ((uint32_t)0x02000002)
#define I2C_IT_SB                       ((uint32_t)0x02000001)
#define IS_I2C_CLEAR_IT(IT) ((((IT) & (uint16_t)0x20FF) == 0x00) && ((IT) != (uint16_t)0x00))
#define IS_I2C_GET_IT(IT) (((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \
                           ((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \
                           ((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \
                           ((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_TXE) || \
                           ((IT) == I2C_IT_RXNE) || ((IT) == I2C_IT_STOPF) || \
                           ((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \
                           ((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB))
/**
  * @}
  */
/** @defgroup I2C_flags_definition
  * @{
  */
/**
  * @brief  SR2 register flags
  */
#define I2C_FLAG_DUALF                  ((uint32_t)0x00800000)
#define I2C_FLAG_SMBHOST                ((uint32_t)0x00400000)
#define I2C_FLAG_SMBDEFAULT             ((uint32_t)0x00200000)
#define I2C_FLAG_GENCALL                ((uint32_t)0x00100000)
#define I2C_FLAG_TRA                    ((uint32_t)0x00040000)
#define I2C_FLAG_BUSY                   ((uint32_t)0x00020000)
#define I2C_FLAG_MSL                    ((uint32_t)0x00010000)
/**
  * @brief  SR1 register flags
  */
#define I2C_FLAG_SMBALERT               ((uint32_t)0x10008000)
#define I2C_FLAG_TIMEOUT                ((uint32_t)0x10004000)
#define I2C_FLAG_PECERR                 ((uint32_t)0x10001000)
#define I2C_FLAG_OVR                    ((uint32_t)0x10000800)
#define I2C_FLAG_AF                     ((uint32_t)0x10000400)
#define I2C_FLAG_ARLO                   ((uint32_t)0x10000200)
#define I2C_FLAG_BERR                   ((uint32_t)0x10000100)
#define I2C_FLAG_TXE                    ((uint32_t)0x10000080)
#define I2C_FLAG_RXNE                   ((uint32_t)0x10000040)
#define I2C_FLAG_STOPF                  ((uint32_t)0x10000010)
#define I2C_FLAG_ADD10                  ((uint32_t)0x10000008)
#define I2C_FLAG_BTF                    ((uint32_t)0x10000004)
#define I2C_FLAG_ADDR                   ((uint32_t)0x10000002)
#define I2C_FLAG_SB                     ((uint32_t)0x10000001)
#define IS_I2C_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0x20FF) == 0x00) && ((FLAG) != (uint16_t)0x00))
#define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_DUALF) || ((FLAG) == I2C_FLAG_SMBHOST) || \
                               ((FLAG) == I2C_FLAG_SMBDEFAULT) || ((FLAG) == I2C_FLAG_GENCALL) || \
                               ((FLAG) == I2C_FLAG_TRA) || ((FLAG) == I2C_FLAG_BUSY) || \
                               ((FLAG) == I2C_FLAG_MSL) || ((FLAG) == I2C_FLAG_SMBALERT) || \
                               ((FLAG) == I2C_FLAG_TIMEOUT) || ((FLAG) == I2C_FLAG_PECERR) || \
                               ((FLAG) == I2C_FLAG_OVR) || ((FLAG) == I2C_FLAG_AF) || \
                               ((FLAG) == I2C_FLAG_ARLO) || ((FLAG) == I2C_FLAG_BERR) || \
                               ((FLAG) == I2C_FLAG_TXE) || ((FLAG) == I2C_FLAG_RXNE) || \
                               ((FLAG) == I2C_FLAG_STOPF) || ((FLAG) == I2C_FLAG_ADD10) || \
                               ((FLAG) == I2C_FLAG_BTF) || ((FLAG) == I2C_FLAG_ADDR) || \
                               ((FLAG) == I2C_FLAG_SB))
/**
  * @}
  */
/** @defgroup I2C_Events
  * @{
  */
/*========================================
                     I2C Master Events (Events grouped in order of communication)
                                                        ==========================================*/
/**
  * @brief  Communication start
  *
  * After sending the START condition (I2C_GenerateSTART() function) the master
  * has to wait for this event. It means that the Start condition has been correctly
  * released on the I2C bus (the bus is free, no other devices is communicating).
  *
  */
/* --EV5 */
#define  I2C_EVENT_MASTER_MODE_SELECT                      ((uint32_t)0x00030001)  /* BUSY, MSL and SB flag */
/**
  * @brief  Address Acknowledge
  *
  * After checking on EV5 (start condition correctly released on the bus), the
  * master sends the address of the slave(s) with which it will communicate
  * (I2C_Send7bitAddress() function, it also determines the direction of the communication:
  * Master transmitter or Receiver). Then the master has to wait that a slave acknowledges
  * his address. If an acknowledge is sent on the bus, one of the following events will
  * be set:
  *
  *  1) In case of Master Receiver (7-bit addressing): the I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED
  *     event is set.
  *
  *  2) In case of Master Transmitter (7-bit addressing): the I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED
  *     is set
  *
  *  3) In case of 10-Bit addressing mode, the master (just after generating the START
  *  and checking on EV5) has to send the header of 10-bit addressing mode (I2C_SendData()
  *  function). Then master should wait on EV9. It means that the 10-bit addressing
  *  header has been correctly sent on the bus. Then master should send the second part of
  *  the 10-bit address (LSB) using the function I2C_Send7bitAddress(). Then master
  *  should wait for event EV6.
  *
  */
/* --EV6 */
#define  I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED        ((uint32_t)0x00070082)  /* BUSY, MSL, ADDR, TXE and TRA flags */
#define  I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED           ((uint32_t)0x00030002)  /* BUSY, MSL and ADDR flags */
/* --EV9 */
#define  I2C_EVENT_MASTER_MODE_ADDRESS10                   ((uint32_t)0x00030008)  /* BUSY, MSL and ADD10 flags */
/**
  * @brief Communication events
  *
  * If a communication is established (START condition generated and slave address
  * acknowledged) then the master has to check on one of the following events for
  * communication procedures:
  *
  * 1) Master Receiver mode: The master has to wait on the event EV7 then to read
  *    the data received from the slave (I2C_ReceiveData() function).
  *
  * 2) Master Transmitter mode: The master has to send data (I2C_SendData()
  *    function) then to wait on event EV8 or EV8_2.
  *    These two events are similar:
  *     - EV8 means that the data has been written in the data register and is
  *       being shifted out.
  *     - EV8_2 means that the data has been physically shifted out and output
  *       on the bus.
  *     In most cases, using EV8 is sufficient for the application.
  *     Using EV8_2 leads to a slower communication but ensure more reliable test.
  *     EV8_2 is also more suitable than EV8 for testing on the last data transmission
  *     (before Stop condition generation).
  *
  *  @note In case the  user software does not guarantee that this event EV7 is
  *  managed before the current byte end of transfer, then user may check on EV7
  *  and BTF flag at the same time (ie. (I2C_EVENT_MASTER_BYTE_RECEIVED | I2C_FLAG_BTF)).
  *  In this case the communication may be slower.
  *
  */
/* Master RECEIVER mode -----------------------------*/
/* --EV7 */
#define  I2C_EVENT_MASTER_BYTE_RECEIVED                    ((uint32_t)0x00030040)  /* BUSY, MSL and RXNE flags */
/* Master TRANSMITTER mode --------------------------*/
/* --EV8 */
#define I2C_EVENT_MASTER_BYTE_TRANSMITTING                 ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */
/* --EV8_2 */
#define  I2C_EVENT_MASTER_BYTE_TRANSMITTED                 ((uint32_t)0x00070084)  /* TRA, BUSY, MSL, TXE and BTF flags */
/*========================================
                     I2C Slave Events (Events grouped in order of communication)
                                                        ==========================================*/
/**
  * @brief  Communication start events
  *
  * Wait on one of these events at the start of the communication. It means that
  * the I2C peripheral detected a Start condition on the bus (generated by master
  * device) followed by the peripheral address. The peripheral generates an ACK
  * condition on the bus (if the acknowledge feature is enabled through function
  * I2C_AcknowledgeConfig()) and the events listed above are set :
  *
  * 1) In normal case (only one address managed by the slave), when the address
  *   sent by the master matches the own address of the peripheral (configured by
  *   I2C_OwnAddress1 field) the I2C_EVENT_SLAVE_XXX_ADDRESS_MATCHED event is set
  *   (where XXX could be TRANSMITTER or RECEIVER).
  *
  * 2) In case the address sent by the master matches the second address of the
  *   peripheral (configured by the function I2C_OwnAddress2Config() and enabled
  *   by the function I2C_DualAddressCmd()) the events I2C_EVENT_SLAVE_XXX_SECONDADDRESS_MATCHED
  *   (where XXX could be TRANSMITTER or RECEIVER) are set.
  *
  * 3) In case the address sent by the master is General Call (address 0x00) and
  *   if the General Call is enabled for the peripheral (using function I2C_GeneralCallCmd())
  *   the following event is set I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED.
  *
  */
/* --EV1  (all the events below are variants of EV1) */
/* 1) Case of One Single Address managed by the slave */
#define  I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED          ((uint32_t)0x00020002) /* BUSY and ADDR flags */
#define  I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED       ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */
/* 2) Case of Dual address managed by the slave */
#define  I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED    ((uint32_t)0x00820000)  /* DUALF and BUSY flags */
#define  I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080)  /* DUALF, TRA, BUSY and TXE flags */
/* 3) Case of General Call enabled for the slave */
#define  I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED        ((uint32_t)0x00120000)  /* GENCALL and BUSY flags */
/**
  * @brief  Communication events
  *
  * Wait on one of these events when EV1 has already been checked and:
  *
  * - Slave RECEIVER mode:
  *     - EV2: When the application is expecting a data byte to be received.
  *     - EV4: When the application is expecting the end of the communication: master
  *       sends a stop condition and data transmission is stopped.
  *
  * - Slave Transmitter mode:
  *    - EV3: When a byte has been transmitted by the slave and the application is expecting
  *      the end of the byte transmission. The two events I2C_EVENT_SLAVE_BYTE_TRANSMITTED and
  *      I2C_EVENT_SLAVE_BYTE_TRANSMITTING are similar. The second one can optionally be
  *      used when the user software doesn't guarantee the EV3 is managed before the
  *      current byte end of transfer.
  *    - EV3_2: When the master sends a NACK in order to tell slave that data transmission
  *      shall end (before sending the STOP condition). In this case slave has to stop sending
  *      data bytes and expect a Stop condition on the bus.
  *
  *  @note In case the  user software does not guarantee that the event EV2 is
  *  managed before the current byte end of transfer, then user may check on EV2
  *  and BTF flag at the same time (ie. (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_BTF)).
  * In this case the communication may be slower.
  *
  */
/* Slave RECEIVER mode --------------------------*/
/* --EV2 */
#define  I2C_EVENT_SLAVE_BYTE_RECEIVED                     ((uint32_t)0x00020040)  /* BUSY and RXNE flags */
/* --EV4  */
#define  I2C_EVENT_SLAVE_STOP_DETECTED                     ((uint32_t)0x00000010)  /* STOPF flag */
/* Slave TRANSMITTER mode -----------------------*/
/* --EV3 */
#define  I2C_EVENT_SLAVE_BYTE_TRANSMITTED                  ((uint32_t)0x00060084)  /* TRA, BUSY, TXE and BTF flags */
#define  I2C_EVENT_SLAVE_BYTE_TRANSMITTING                 ((uint32_t)0x00060080)  /* TRA, BUSY and TXE flags */
/* --EV3_2 */
#define  I2C_EVENT_SLAVE_ACK_FAILURE                       ((uint32_t)0x00000400)  /* AF flag */
/*===========================      End of Events Description           ==========================================*/
#define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \
                             ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \
                             ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \
                             ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTING) || \
                             ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \
                             ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE))
/**
  * @}
  */
/** @defgroup I2C_own_address1
  * @{
  */
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF)
/**
  * @}
  */
/** @defgroup I2C_clock_speed
  * @{
  */
#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup I2C_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup I2C_Exported_Functions
  * @{
  */
void I2C_DeInit(I2C_TypeDef* I2Cx);
void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);
void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct);
void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address);
void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState);
void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data);
uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx);
void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction);
uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register);
void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition);
void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert);
void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition);
void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState);
uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx);
void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle);
/**
 * @brief
 ****************************************************************************************
 *
 *                         I2C State Monitoring Functions
 *
 ****************************************************************************************
 * This I2C driver provides three different ways for I2C state monitoring
 *  depending on the application requirements and constraints:
 *
 *
 * 1) Basic state monitoring:
 *    Using I2C_CheckEvent() function:
 *    It compares the status registers (SR1 and SR2) content to a given event
 *    (can be the combination of one or more flags).
 *    It returns SUCCESS if the current status includes the given flags
 *    and returns ERROR if one or more flags are missing in the current status.
 *    - When to use:
 *      - This function is suitable for most applications as well as for startup
 *      activity since the events are fully described in the product reference manual
 *      (RM0008).
 *      - It is also suitable for users who need to define their own events.
 *    - Limitations:
 *      - If an error occurs (ie. error flags are set besides to the monitored flags),
 *        the I2C_CheckEvent() function may return SUCCESS despite the communication
 *        hold or corrupted real state.
 *        In this case, it is advised to use error interrupts to monitor the error
 *        events and handle them in the interrupt IRQ handler.
 *
 *        @note
 *        For error management, it is advised to use the following functions:
 *          - I2C_ITConfig() to configure and enable the error interrupts (I2C_IT_ERR).
 *          - I2Cx_ER_IRQHandler() which is called when the error interrupt occurs.
 *            Where x is the peripheral instance (I2C1, I2C2 ...)
 *          - I2C_GetFlagStatus() or I2C_GetITStatus() to be called into I2Cx_ER_IRQHandler()
 *            in order to determine which error occurred.
 *          - I2C_ClearFlag() or I2C_ClearITPendingBit() and/or I2C_SoftwareResetCmd()
 *            and/or I2C_GenerateStop() in order to clear the error flag and source,
 *            and return to correct communication status.
 *
 *
 *  2) Advanced state monitoring:
 *     Using the function I2C_GetLastEvent() which returns the image of both status
 *     registers in a single word (uint32_t) (Status Register 2 value is shifted left
 *     by 16 bits and concatenated to Status Register 1).
 *     - When to use:
 *       - This function is suitable for the same applications above but it allows to
 *         overcome the limitations of I2C_GetFlagStatus() function (see below).
 *         The returned value could be compared to events already defined in the
 *         library (stm32f10x_i2c.h) or to custom values defined by user.
 *       - This function is suitable when multiple flags are monitored at the same time.
 *       - At the opposite of I2C_CheckEvent() function, this function allows user to
 *         choose when an event is accepted (when all events flags are set and no
 *         other flags are set or just when the needed flags are set like
 *         I2C_CheckEvent() function).
 *     - Limitations:
 *       - User may need to define his own events.
 *       - Same remark concerning the error management is applicable for this
 *         function if user decides to check only regular communication flags (and
 *         ignores error flags).
 *
 *
 *  3) Flag-based state monitoring:
 *     Using the function I2C_GetFlagStatus() which simply returns the status of
 *     one single flag (ie. I2C_FLAG_RXNE ...).
 *     - When to use:
 *        - This function could be used for specific applications or in debug phase.
 *        - It is suitable when only one flag checking is needed (most I2C events
 *          are monitored through multiple flags).
 *     - Limitations:
 *        - When calling this function, the Status register is accessed. Some flags are
 *          cleared when the status register is accessed. So checking the status
 *          of one Flag, may clear other ones.
 *        - Function may need to be called twice or more in order to monitor one
 *          single event.
 *
 */
/**
 *
 *  1) Basic state monitoring
 *******************************************************************************
 */
ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT);
/**
 *
 *  2) Advanced state monitoring
 *******************************************************************************
 */
uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx);
/**
 *
 *  3) Flag-based state monitoring
 *******************************************************************************
 */
FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG);
/**
 *
 *******************************************************************************
 */
void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG);
ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT);
void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT);
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_I2C_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_it.h
New file
@@ -0,0 +1,54 @@
/**
  ******************************************************************************
  * @file    Project/STM32F10x_StdPeriph_Template/stm32f10x_it.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    08-April-2011
  * @brief   This file contains the headers of the interrupt handlers.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_IT_H
#define __STM32F10x_IT_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_IT_H */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_iwdg.h
New file
@@ -0,0 +1,140 @@
/**
  ******************************************************************************
  * @file    stm32f10x_iwdg.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the IWDG
  *          firmware library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_IWDG_H
#define __STM32F10x_IWDG_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup IWDG
  * @{
  */
/** @defgroup IWDG_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup IWDG_Exported_Constants
  * @{
  */
/** @defgroup IWDG_WriteAccess
  * @{
  */
#define IWDG_WriteAccess_Enable     ((uint16_t)0x5555)
#define IWDG_WriteAccess_Disable    ((uint16_t)0x0000)
#define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \
                                      ((ACCESS) == IWDG_WriteAccess_Disable))
/**
  * @}
  */
/** @defgroup IWDG_prescaler
  * @{
  */
#define IWDG_Prescaler_4            ((uint8_t)0x00)
#define IWDG_Prescaler_8            ((uint8_t)0x01)
#define IWDG_Prescaler_16           ((uint8_t)0x02)
#define IWDG_Prescaler_32           ((uint8_t)0x03)
#define IWDG_Prescaler_64           ((uint8_t)0x04)
#define IWDG_Prescaler_128          ((uint8_t)0x05)
#define IWDG_Prescaler_256          ((uint8_t)0x06)
#define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4)  || \
                                      ((PRESCALER) == IWDG_Prescaler_8)  || \
                                      ((PRESCALER) == IWDG_Prescaler_16) || \
                                      ((PRESCALER) == IWDG_Prescaler_32) || \
                                      ((PRESCALER) == IWDG_Prescaler_64) || \
                                      ((PRESCALER) == IWDG_Prescaler_128)|| \
                                      ((PRESCALER) == IWDG_Prescaler_256))
/**
  * @}
  */
/** @defgroup IWDG_Flag
  * @{
  */
#define IWDG_FLAG_PVU               ((uint16_t)0x0001)
#define IWDG_FLAG_RVU               ((uint16_t)0x0002)
#define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU))
#define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF)
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup IWDG_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup IWDG_Exported_Functions
  * @{
  */
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
void IWDG_SetReload(uint16_t Reload);
void IWDG_ReloadCounter(void);
void IWDG_Enable(void);
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_IWDG_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_pwr.h
New file
@@ -0,0 +1,156 @@
/**
  ******************************************************************************
  * @file    stm32f10x_pwr.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the PWR firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_PWR_H
#define __STM32F10x_PWR_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup PWR
  * @{
  */
/** @defgroup PWR_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup PWR_Exported_Constants
  * @{
  */
/** @defgroup PVD_detection_level
  * @{
  */
#define PWR_PVDLevel_2V2          ((uint32_t)0x00000000)
#define PWR_PVDLevel_2V3          ((uint32_t)0x00000020)
#define PWR_PVDLevel_2V4          ((uint32_t)0x00000040)
#define PWR_PVDLevel_2V5          ((uint32_t)0x00000060)
#define PWR_PVDLevel_2V6          ((uint32_t)0x00000080)
#define PWR_PVDLevel_2V7          ((uint32_t)0x000000A0)
#define PWR_PVDLevel_2V8          ((uint32_t)0x000000C0)
#define PWR_PVDLevel_2V9          ((uint32_t)0x000000E0)
#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_2V2) || ((LEVEL) == PWR_PVDLevel_2V3)|| \
                                 ((LEVEL) == PWR_PVDLevel_2V4) || ((LEVEL) == PWR_PVDLevel_2V5)|| \
                                 ((LEVEL) == PWR_PVDLevel_2V6) || ((LEVEL) == PWR_PVDLevel_2V7)|| \
                                 ((LEVEL) == PWR_PVDLevel_2V8) || ((LEVEL) == PWR_PVDLevel_2V9))
/**
  * @}
  */
/** @defgroup Regulator_state_is_STOP_mode
  * @{
  */
#define PWR_Regulator_ON          ((uint32_t)0x00000000)
#define PWR_Regulator_LowPower    ((uint32_t)0x00000001)
#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \
                                     ((REGULATOR) == PWR_Regulator_LowPower))
/**
  * @}
  */
/** @defgroup STOP_mode_entry
  * @{
  */
#define PWR_STOPEntry_WFI         ((uint8_t)0x01)
#define PWR_STOPEntry_WFE         ((uint8_t)0x02)
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPEntry_WFI) || ((ENTRY) == PWR_STOPEntry_WFE))
/**
  * @}
  */
/** @defgroup PWR_Flag
  * @{
  */
#define PWR_FLAG_WU               ((uint32_t)0x00000001)
#define PWR_FLAG_SB               ((uint32_t)0x00000002)
#define PWR_FLAG_PVDO             ((uint32_t)0x00000004)
#define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \
                               ((FLAG) == PWR_FLAG_PVDO))
#define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup PWR_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup PWR_Exported_Functions
  * @{
  */
void PWR_DeInit(void);
void PWR_BackupAccessCmd(FunctionalState NewState);
void PWR_PVDCmd(FunctionalState NewState);
void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);
void PWR_WakeUpPinCmd(FunctionalState NewState);
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);
void PWR_EnterSTANDBYMode(void);
FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);
void PWR_ClearFlag(uint32_t PWR_FLAG);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_PWR_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_rcc.h
New file
@@ -0,0 +1,727 @@
/**
  ******************************************************************************
  * @file    stm32f10x_rcc.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the RCC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_RCC_H
#define __STM32F10x_RCC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup RCC
  * @{
  */
/** @defgroup RCC_Exported_Types
  * @{
  */
typedef struct
{
  uint32_t SYSCLK_Frequency;  /*!< returns SYSCLK clock frequency expressed in Hz */
  uint32_t HCLK_Frequency;    /*!< returns HCLK clock frequency expressed in Hz */
  uint32_t PCLK1_Frequency;   /*!< returns PCLK1 clock frequency expressed in Hz */
  uint32_t PCLK2_Frequency;   /*!< returns PCLK2 clock frequency expressed in Hz */
  uint32_t ADCCLK_Frequency;  /*!< returns ADCCLK clock frequency expressed in Hz */
}RCC_ClocksTypeDef;
/**
  * @}
  */
/** @defgroup RCC_Exported_Constants
  * @{
  */
/** @defgroup HSE_configuration
  * @{
  */
#define RCC_HSE_OFF                      ((uint32_t)0x00000000)
#define RCC_HSE_ON                       ((uint32_t)0x00010000)
#define RCC_HSE_Bypass                   ((uint32_t)0x00040000)
#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \
                         ((HSE) == RCC_HSE_Bypass))
/**
  * @}
  */
/** @defgroup PLL_entry_clock_source
  * @{
  */
#define RCC_PLLSource_HSI_Div2           ((uint32_t)0x00000000)
#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_CL)
 #define RCC_PLLSource_HSE_Div1           ((uint32_t)0x00010000)
 #define RCC_PLLSource_HSE_Div2           ((uint32_t)0x00030000)
 #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div2) || \
                                   ((SOURCE) == RCC_PLLSource_HSE_Div1) || \
                                   ((SOURCE) == RCC_PLLSource_HSE_Div2))
#else
 #define RCC_PLLSource_PREDIV1            ((uint32_t)0x00010000)
 #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div2) || \
                                   ((SOURCE) == RCC_PLLSource_PREDIV1))
#endif /* STM32F10X_CL */
/**
  * @}
  */
/** @defgroup PLL_multiplication_factor
  * @{
  */
#ifndef STM32F10X_CL
 #define RCC_PLLMul_2                    ((uint32_t)0x00000000)
 #define RCC_PLLMul_3                    ((uint32_t)0x00040000)
 #define RCC_PLLMul_4                    ((uint32_t)0x00080000)
 #define RCC_PLLMul_5                    ((uint32_t)0x000C0000)
 #define RCC_PLLMul_6                    ((uint32_t)0x00100000)
 #define RCC_PLLMul_7                    ((uint32_t)0x00140000)
 #define RCC_PLLMul_8                    ((uint32_t)0x00180000)
 #define RCC_PLLMul_9                    ((uint32_t)0x001C0000)
 #define RCC_PLLMul_10                   ((uint32_t)0x00200000)
 #define RCC_PLLMul_11                   ((uint32_t)0x00240000)
 #define RCC_PLLMul_12                   ((uint32_t)0x00280000)
 #define RCC_PLLMul_13                   ((uint32_t)0x002C0000)
 #define RCC_PLLMul_14                   ((uint32_t)0x00300000)
 #define RCC_PLLMul_15                   ((uint32_t)0x00340000)
 #define RCC_PLLMul_16                   ((uint32_t)0x00380000)
 #define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_2) || ((MUL) == RCC_PLLMul_3)   || \
                              ((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5)   || \
                              ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7)   || \
                              ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9)   || \
                              ((MUL) == RCC_PLLMul_10) || ((MUL) == RCC_PLLMul_11) || \
                              ((MUL) == RCC_PLLMul_12) || ((MUL) == RCC_PLLMul_13) || \
                              ((MUL) == RCC_PLLMul_14) || ((MUL) == RCC_PLLMul_15) || \
                              ((MUL) == RCC_PLLMul_16))
#else
 #define RCC_PLLMul_4                    ((uint32_t)0x00080000)
 #define RCC_PLLMul_5                    ((uint32_t)0x000C0000)
 #define RCC_PLLMul_6                    ((uint32_t)0x00100000)
 #define RCC_PLLMul_7                    ((uint32_t)0x00140000)
 #define RCC_PLLMul_8                    ((uint32_t)0x00180000)
 #define RCC_PLLMul_9                    ((uint32_t)0x001C0000)
 #define RCC_PLLMul_6_5                  ((uint32_t)0x00340000)
 #define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5) || \
                              ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7) || \
                              ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9) || \
                              ((MUL) == RCC_PLLMul_6_5))
#endif /* STM32F10X_CL */
/**
  * @}
  */
/** @defgroup PREDIV1_division_factor
  * @{
  */
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL)
 #define  RCC_PREDIV1_Div1               ((uint32_t)0x00000000)
 #define  RCC_PREDIV1_Div2               ((uint32_t)0x00000001)
 #define  RCC_PREDIV1_Div3               ((uint32_t)0x00000002)
 #define  RCC_PREDIV1_Div4               ((uint32_t)0x00000003)
 #define  RCC_PREDIV1_Div5               ((uint32_t)0x00000004)
 #define  RCC_PREDIV1_Div6               ((uint32_t)0x00000005)
 #define  RCC_PREDIV1_Div7               ((uint32_t)0x00000006)
 #define  RCC_PREDIV1_Div8               ((uint32_t)0x00000007)
 #define  RCC_PREDIV1_Div9               ((uint32_t)0x00000008)
 #define  RCC_PREDIV1_Div10              ((uint32_t)0x00000009)
 #define  RCC_PREDIV1_Div11              ((uint32_t)0x0000000A)
 #define  RCC_PREDIV1_Div12              ((uint32_t)0x0000000B)
 #define  RCC_PREDIV1_Div13              ((uint32_t)0x0000000C)
 #define  RCC_PREDIV1_Div14              ((uint32_t)0x0000000D)
 #define  RCC_PREDIV1_Div15              ((uint32_t)0x0000000E)
 #define  RCC_PREDIV1_Div16              ((uint32_t)0x0000000F)
 #define IS_RCC_PREDIV1(PREDIV1) (((PREDIV1) == RCC_PREDIV1_Div1) || ((PREDIV1) == RCC_PREDIV1_Div2) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div3) || ((PREDIV1) == RCC_PREDIV1_Div4) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div5) || ((PREDIV1) == RCC_PREDIV1_Div6) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div7) || ((PREDIV1) == RCC_PREDIV1_Div8) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div9) || ((PREDIV1) == RCC_PREDIV1_Div10) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div11) || ((PREDIV1) == RCC_PREDIV1_Div12) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div13) || ((PREDIV1) == RCC_PREDIV1_Div14) || \
                                  ((PREDIV1) == RCC_PREDIV1_Div15) || ((PREDIV1) == RCC_PREDIV1_Div16))
#endif
/**
  * @}
  */
/** @defgroup PREDIV1_clock_source
  * @{
  */
#ifdef STM32F10X_CL
/* PREDIV1 clock source (for STM32 connectivity line devices) */
 #define  RCC_PREDIV1_Source_HSE         ((uint32_t)0x00000000)
 #define  RCC_PREDIV1_Source_PLL2        ((uint32_t)0x00010000)
 #define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE) || \
                                        ((SOURCE) == RCC_PREDIV1_Source_PLL2))
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
/* PREDIV1 clock source (for STM32 Value line devices) */
 #define  RCC_PREDIV1_Source_HSE         ((uint32_t)0x00000000)
 #define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE))
#endif
/**
  * @}
  */
#ifdef STM32F10X_CL
/** @defgroup PREDIV2_division_factor
  * @{
  */
 #define  RCC_PREDIV2_Div1               ((uint32_t)0x00000000)
 #define  RCC_PREDIV2_Div2               ((uint32_t)0x00000010)
 #define  RCC_PREDIV2_Div3               ((uint32_t)0x00000020)
 #define  RCC_PREDIV2_Div4               ((uint32_t)0x00000030)
 #define  RCC_PREDIV2_Div5               ((uint32_t)0x00000040)
 #define  RCC_PREDIV2_Div6               ((uint32_t)0x00000050)
 #define  RCC_PREDIV2_Div7               ((uint32_t)0x00000060)
 #define  RCC_PREDIV2_Div8               ((uint32_t)0x00000070)
 #define  RCC_PREDIV2_Div9               ((uint32_t)0x00000080)
 #define  RCC_PREDIV2_Div10              ((uint32_t)0x00000090)
 #define  RCC_PREDIV2_Div11              ((uint32_t)0x000000A0)
 #define  RCC_PREDIV2_Div12              ((uint32_t)0x000000B0)
 #define  RCC_PREDIV2_Div13              ((uint32_t)0x000000C0)
 #define  RCC_PREDIV2_Div14              ((uint32_t)0x000000D0)
 #define  RCC_PREDIV2_Div15              ((uint32_t)0x000000E0)
 #define  RCC_PREDIV2_Div16              ((uint32_t)0x000000F0)
 #define IS_RCC_PREDIV2(PREDIV2) (((PREDIV2) == RCC_PREDIV2_Div1) || ((PREDIV2) == RCC_PREDIV2_Div2) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div3) || ((PREDIV2) == RCC_PREDIV2_Div4) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div5) || ((PREDIV2) == RCC_PREDIV2_Div6) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div7) || ((PREDIV2) == RCC_PREDIV2_Div8) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div9) || ((PREDIV2) == RCC_PREDIV2_Div10) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div11) || ((PREDIV2) == RCC_PREDIV2_Div12) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div13) || ((PREDIV2) == RCC_PREDIV2_Div14) || \
                                  ((PREDIV2) == RCC_PREDIV2_Div15) || ((PREDIV2) == RCC_PREDIV2_Div16))
/**
  * @}
  */
/** @defgroup PLL2_multiplication_factor
  * @{
  */
 #define  RCC_PLL2Mul_8                  ((uint32_t)0x00000600)
 #define  RCC_PLL2Mul_9                  ((uint32_t)0x00000700)
 #define  RCC_PLL2Mul_10                 ((uint32_t)0x00000800)
 #define  RCC_PLL2Mul_11                 ((uint32_t)0x00000900)
 #define  RCC_PLL2Mul_12                 ((uint32_t)0x00000A00)
 #define  RCC_PLL2Mul_13                 ((uint32_t)0x00000B00)
 #define  RCC_PLL2Mul_14                 ((uint32_t)0x00000C00)
 #define  RCC_PLL2Mul_16                 ((uint32_t)0x00000E00)
 #define  RCC_PLL2Mul_20                 ((uint32_t)0x00000F00)
 #define IS_RCC_PLL2_MUL(MUL) (((MUL) == RCC_PLL2Mul_8) || ((MUL) == RCC_PLL2Mul_9)  || \
                               ((MUL) == RCC_PLL2Mul_10) || ((MUL) == RCC_PLL2Mul_11) || \
                               ((MUL) == RCC_PLL2Mul_12) || ((MUL) == RCC_PLL2Mul_13) || \
                               ((MUL) == RCC_PLL2Mul_14) || ((MUL) == RCC_PLL2Mul_16) || \
                               ((MUL) == RCC_PLL2Mul_20))
/**
  * @}
  */
/** @defgroup PLL3_multiplication_factor
  * @{
  */
 #define  RCC_PLL3Mul_8                  ((uint32_t)0x00006000)
 #define  RCC_PLL3Mul_9                  ((uint32_t)0x00007000)
 #define  RCC_PLL3Mul_10                 ((uint32_t)0x00008000)
 #define  RCC_PLL3Mul_11                 ((uint32_t)0x00009000)
 #define  RCC_PLL3Mul_12                 ((uint32_t)0x0000A000)
 #define  RCC_PLL3Mul_13                 ((uint32_t)0x0000B000)
 #define  RCC_PLL3Mul_14                 ((uint32_t)0x0000C000)
 #define  RCC_PLL3Mul_16                 ((uint32_t)0x0000E000)
 #define  RCC_PLL3Mul_20                 ((uint32_t)0x0000F000)
 #define IS_RCC_PLL3_MUL(MUL) (((MUL) == RCC_PLL3Mul_8) || ((MUL) == RCC_PLL3Mul_9)  || \
                               ((MUL) == RCC_PLL3Mul_10) || ((MUL) == RCC_PLL3Mul_11) || \
                               ((MUL) == RCC_PLL3Mul_12) || ((MUL) == RCC_PLL3Mul_13) || \
                               ((MUL) == RCC_PLL3Mul_14) || ((MUL) == RCC_PLL3Mul_16) || \
                               ((MUL) == RCC_PLL3Mul_20))
/**
  * @}
  */
#endif /* STM32F10X_CL */
/** @defgroup System_clock_source
  * @{
  */
#define RCC_SYSCLKSource_HSI             ((uint32_t)0x00000000)
#define RCC_SYSCLKSource_HSE             ((uint32_t)0x00000001)
#define RCC_SYSCLKSource_PLLCLK          ((uint32_t)0x00000002)
#define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \
                                      ((SOURCE) == RCC_SYSCLKSource_HSE) || \
                                      ((SOURCE) == RCC_SYSCLKSource_PLLCLK))
/**
  * @}
  */
/** @defgroup AHB_clock_source
  * @{
  */
#define RCC_SYSCLK_Div1                  ((uint32_t)0x00000000)
#define RCC_SYSCLK_Div2                  ((uint32_t)0x00000080)
#define RCC_SYSCLK_Div4                  ((uint32_t)0x00000090)
#define RCC_SYSCLK_Div8                  ((uint32_t)0x000000A0)
#define RCC_SYSCLK_Div16                 ((uint32_t)0x000000B0)
#define RCC_SYSCLK_Div64                 ((uint32_t)0x000000C0)
#define RCC_SYSCLK_Div128                ((uint32_t)0x000000D0)
#define RCC_SYSCLK_Div256                ((uint32_t)0x000000E0)
#define RCC_SYSCLK_Div512                ((uint32_t)0x000000F0)
#define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_Div1) || ((HCLK) == RCC_SYSCLK_Div2) || \
                           ((HCLK) == RCC_SYSCLK_Div4) || ((HCLK) == RCC_SYSCLK_Div8) || \
                           ((HCLK) == RCC_SYSCLK_Div16) || ((HCLK) == RCC_SYSCLK_Div64) || \
                           ((HCLK) == RCC_SYSCLK_Div128) || ((HCLK) == RCC_SYSCLK_Div256) || \
                           ((HCLK) == RCC_SYSCLK_Div512))
/**
  * @}
  */
/** @defgroup APB1_APB2_clock_source
  * @{
  */
#define RCC_HCLK_Div1                    ((uint32_t)0x00000000)
#define RCC_HCLK_Div2                    ((uint32_t)0x00000400)
#define RCC_HCLK_Div4                    ((uint32_t)0x00000500)
#define RCC_HCLK_Div8                    ((uint32_t)0x00000600)
#define RCC_HCLK_Div16                   ((uint32_t)0x00000700)
#define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_Div1) || ((PCLK) == RCC_HCLK_Div2) || \
                           ((PCLK) == RCC_HCLK_Div4) || ((PCLK) == RCC_HCLK_Div8) || \
                           ((PCLK) == RCC_HCLK_Div16))
/**
  * @}
  */
/** @defgroup RCC_Interrupt_source
  * @{
  */
#define RCC_IT_LSIRDY                    ((uint8_t)0x01)
#define RCC_IT_LSERDY                    ((uint8_t)0x02)
#define RCC_IT_HSIRDY                    ((uint8_t)0x04)
#define RCC_IT_HSERDY                    ((uint8_t)0x08)
#define RCC_IT_PLLRDY                    ((uint8_t)0x10)
#define RCC_IT_CSS                       ((uint8_t)0x80)
#ifndef STM32F10X_CL
 #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xE0) == 0x00) && ((IT) != 0x00))
 #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \
                            ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \
                            ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS))
 #define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x60) == 0x00) && ((IT) != 0x00))
#else
 #define RCC_IT_PLL2RDY                  ((uint8_t)0x20)
 #define RCC_IT_PLL3RDY                  ((uint8_t)0x40)
 #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0x80) == 0x00) && ((IT) != 0x00))
 #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \
                            ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \
                            ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS) || \
                            ((IT) == RCC_IT_PLL2RDY) || ((IT) == RCC_IT_PLL3RDY))
 #define IS_RCC_CLEAR_IT(IT) ((IT) != 0x00)
#endif /* STM32F10X_CL */
/**
  * @}
  */
#ifndef STM32F10X_CL
/** @defgroup USB_Device_clock_source
  * @{
  */
 #define RCC_USBCLKSource_PLLCLK_1Div5   ((uint8_t)0x00)
 #define RCC_USBCLKSource_PLLCLK_Div1    ((uint8_t)0x01)
 #define IS_RCC_USBCLK_SOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSource_PLLCLK_1Div5) || \
                                      ((SOURCE) == RCC_USBCLKSource_PLLCLK_Div1))
/**
  * @}
  */
#else
/** @defgroup USB_OTG_FS_clock_source
  * @{
  */
 #define RCC_OTGFSCLKSource_PLLVCO_Div3    ((uint8_t)0x00)
 #define RCC_OTGFSCLKSource_PLLVCO_Div2    ((uint8_t)0x01)
 #define IS_RCC_OTGFSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_OTGFSCLKSource_PLLVCO_Div3) || \
                                         ((SOURCE) == RCC_OTGFSCLKSource_PLLVCO_Div2))
/**
  * @}
  */
#endif /* STM32F10X_CL */
#ifdef STM32F10X_CL
/** @defgroup I2S2_clock_source
  * @{
  */
 #define RCC_I2S2CLKSource_SYSCLK        ((uint8_t)0x00)
 #define RCC_I2S2CLKSource_PLL3_VCO      ((uint8_t)0x01)
 #define IS_RCC_I2S2CLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S2CLKSource_SYSCLK) || \
                                        ((SOURCE) == RCC_I2S2CLKSource_PLL3_VCO))
/**
  * @}
  */
/** @defgroup I2S3_clock_source
  * @{
  */
 #define RCC_I2S3CLKSource_SYSCLK        ((uint8_t)0x00)
 #define RCC_I2S3CLKSource_PLL3_VCO      ((uint8_t)0x01)
 #define IS_RCC_I2S3CLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S3CLKSource_SYSCLK) || \
                                        ((SOURCE) == RCC_I2S3CLKSource_PLL3_VCO))
/**
  * @}
  */
#endif /* STM32F10X_CL */
/** @defgroup ADC_clock_source
  * @{
  */
#define RCC_PCLK2_Div2                   ((uint32_t)0x00000000)
#define RCC_PCLK2_Div4                   ((uint32_t)0x00004000)
#define RCC_PCLK2_Div6                   ((uint32_t)0x00008000)
#define RCC_PCLK2_Div8                   ((uint32_t)0x0000C000)
#define IS_RCC_ADCCLK(ADCCLK) (((ADCCLK) == RCC_PCLK2_Div2) || ((ADCCLK) == RCC_PCLK2_Div4) || \
                               ((ADCCLK) == RCC_PCLK2_Div6) || ((ADCCLK) == RCC_PCLK2_Div8))
/**
  * @}
  */
/** @defgroup LSE_configuration
  * @{
  */
#define RCC_LSE_OFF                      ((uint8_t)0x00)
#define RCC_LSE_ON                       ((uint8_t)0x01)
#define RCC_LSE_Bypass                   ((uint8_t)0x04)
#define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \
                         ((LSE) == RCC_LSE_Bypass))
/**
  * @}
  */
/** @defgroup RTC_clock_source
  * @{
  */
#define RCC_RTCCLKSource_LSE             ((uint32_t)0x00000100)
#define RCC_RTCCLKSource_LSI             ((uint32_t)0x00000200)
#define RCC_RTCCLKSource_HSE_Div128      ((uint32_t)0x00000300)
#define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \
                                      ((SOURCE) == RCC_RTCCLKSource_LSI) || \
                                      ((SOURCE) == RCC_RTCCLKSource_HSE_Div128))
/**
  * @}
  */
/** @defgroup AHB_peripheral
  * @{
  */
#define RCC_AHBPeriph_DMA1               ((uint32_t)0x00000001)
#define RCC_AHBPeriph_DMA2               ((uint32_t)0x00000002)
#define RCC_AHBPeriph_SRAM               ((uint32_t)0x00000004)
#define RCC_AHBPeriph_FLITF              ((uint32_t)0x00000010)
#define RCC_AHBPeriph_CRC                ((uint32_t)0x00000040)
#ifndef STM32F10X_CL
 #define RCC_AHBPeriph_FSMC              ((uint32_t)0x00000100)
 #define RCC_AHBPeriph_SDIO              ((uint32_t)0x00000400)
 #define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFAA8) == 0x00) && ((PERIPH) != 0x00))
#else
 #define RCC_AHBPeriph_OTG_FS            ((uint32_t)0x00001000)
 #define RCC_AHBPeriph_ETH_MAC           ((uint32_t)0x00004000)
 #define RCC_AHBPeriph_ETH_MAC_Tx        ((uint32_t)0x00008000)
 #define RCC_AHBPeriph_ETH_MAC_Rx        ((uint32_t)0x00010000)
 #define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFFE2FA8) == 0x00) && ((PERIPH) != 0x00))
 #define IS_RCC_AHB_PERIPH_RESET(PERIPH) ((((PERIPH) & 0xFFFFAFFF) == 0x00) && ((PERIPH) != 0x00))
#endif /* STM32F10X_CL */
/**
  * @}
  */
/** @defgroup APB2_peripheral
  * @{
  */
#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)
#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))
/**
  * @}
  */
/** @defgroup APB1_peripheral
  * @{
  */
#define RCC_APB1Periph_TIM2              ((uint32_t)0x00000001)
#define RCC_APB1Periph_TIM3              ((uint32_t)0x00000002)
#define RCC_APB1Periph_TIM4              ((uint32_t)0x00000004)
#define RCC_APB1Periph_TIM5              ((uint32_t)0x00000008)
#define RCC_APB1Periph_TIM6              ((uint32_t)0x00000010)
#define RCC_APB1Periph_TIM7              ((uint32_t)0x00000020)
#define RCC_APB1Periph_TIM12             ((uint32_t)0x00000040)
#define RCC_APB1Periph_TIM13             ((uint32_t)0x00000080)
#define RCC_APB1Periph_TIM14             ((uint32_t)0x00000100)
#define RCC_APB1Periph_WWDG              ((uint32_t)0x00000800)
#define RCC_APB1Periph_SPI2              ((uint32_t)0x00004000)
#define RCC_APB1Periph_SPI3              ((uint32_t)0x00008000)
#define RCC_APB1Periph_USART2            ((uint32_t)0x00020000)
#define RCC_APB1Periph_USART3            ((uint32_t)0x00040000)
#define RCC_APB1Periph_UART4             ((uint32_t)0x00080000)
#define RCC_APB1Periph_UART5             ((uint32_t)0x00100000)
#define RCC_APB1Periph_I2C1              ((uint32_t)0x00200000)
#define RCC_APB1Periph_I2C2              ((uint32_t)0x00400000)
#define RCC_APB1Periph_USB               ((uint32_t)0x00800000)
#define RCC_APB1Periph_CAN1              ((uint32_t)0x02000000)
#define RCC_APB1Periph_CAN2              ((uint32_t)0x04000000)
#define RCC_APB1Periph_BKP               ((uint32_t)0x08000000)
#define RCC_APB1Periph_PWR               ((uint32_t)0x10000000)
#define RCC_APB1Periph_DAC               ((uint32_t)0x20000000)
#define RCC_APB1Periph_CEC               ((uint32_t)0x40000000)
#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x81013600) == 0x00) && ((PERIPH) != 0x00))
/**
  * @}
  */
/** @defgroup Clock_source_to_output_on_MCO_pin
  * @{
  */
#define RCC_MCO_NoClock                  ((uint8_t)0x00)
#define RCC_MCO_SYSCLK                   ((uint8_t)0x04)
#define RCC_MCO_HSI                      ((uint8_t)0x05)
#define RCC_MCO_HSE                      ((uint8_t)0x06)
#define RCC_MCO_PLLCLK_Div2              ((uint8_t)0x07)
#ifndef STM32F10X_CL
 #define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \
                          ((MCO) == RCC_MCO_SYSCLK)  || ((MCO) == RCC_MCO_HSE) || \
                          ((MCO) == RCC_MCO_PLLCLK_Div2))
#else
 #define RCC_MCO_PLL2CLK                 ((uint8_t)0x08)
 #define RCC_MCO_PLL3CLK_Div2            ((uint8_t)0x09)
 #define RCC_MCO_XT1                     ((uint8_t)0x0A)
 #define RCC_MCO_PLL3CLK                 ((uint8_t)0x0B)
 #define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \
                          ((MCO) == RCC_MCO_SYSCLK)  || ((MCO) == RCC_MCO_HSE) || \
                          ((MCO) == RCC_MCO_PLLCLK_Div2) || ((MCO) == RCC_MCO_PLL2CLK) || \
                          ((MCO) == RCC_MCO_PLL3CLK_Div2) || ((MCO) == RCC_MCO_XT1) || \
                          ((MCO) == RCC_MCO_PLL3CLK))
#endif /* STM32F10X_CL */
/**
  * @}
  */
/** @defgroup RCC_Flag
  * @{
  */
#define RCC_FLAG_HSIRDY                  ((uint8_t)0x21)
#define RCC_FLAG_HSERDY                  ((uint8_t)0x31)
#define RCC_FLAG_PLLRDY                  ((uint8_t)0x39)
#define RCC_FLAG_LSERDY                  ((uint8_t)0x41)
#define RCC_FLAG_LSIRDY                  ((uint8_t)0x61)
#define RCC_FLAG_PINRST                  ((uint8_t)0x7A)
#define RCC_FLAG_PORRST                  ((uint8_t)0x7B)
#define RCC_FLAG_SFTRST                  ((uint8_t)0x7C)
#define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)
#define RCC_FLAG_WWDGRST                 ((uint8_t)0x7E)
#define RCC_FLAG_LPWRRST                 ((uint8_t)0x7F)
#ifndef STM32F10X_CL
 #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \
                            ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \
                            ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \
                            ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \
                            ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \
                            ((FLAG) == RCC_FLAG_LPWRRST))
#else
 #define RCC_FLAG_PLL2RDY                ((uint8_t)0x3B)
 #define RCC_FLAG_PLL3RDY                ((uint8_t)0x3D)
 #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \
                            ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \
                            ((FLAG) == RCC_FLAG_PLL2RDY) || ((FLAG) == RCC_FLAG_PLL3RDY) || \
                            ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \
                            ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \
                            ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \
                            ((FLAG) == RCC_FLAG_LPWRRST))
#endif /* STM32F10X_CL */
#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F)
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup RCC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup RCC_Exported_Functions
  * @{
  */
void RCC_DeInit(void);
void RCC_HSEConfig(uint32_t RCC_HSE);
ErrorStatus RCC_WaitForHSEStartUp(void);
void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);
void RCC_HSICmd(FunctionalState NewState);
void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);
void RCC_PLLCmd(FunctionalState NewState);
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL)
 void RCC_PREDIV1Config(uint32_t RCC_PREDIV1_Source, uint32_t RCC_PREDIV1_Div);
#endif
#ifdef  STM32F10X_CL
 void RCC_PREDIV2Config(uint32_t RCC_PREDIV2_Div);
 void RCC_PLL2Config(uint32_t RCC_PLL2Mul);
 void RCC_PLL2Cmd(FunctionalState NewState);
 void RCC_PLL3Config(uint32_t RCC_PLL3Mul);
 void RCC_PLL3Cmd(FunctionalState NewState);
#endif /* STM32F10X_CL */
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);
uint8_t RCC_GetSYSCLKSource(void);
void RCC_HCLKConfig(uint32_t RCC_SYSCLK);
void RCC_PCLK1Config(uint32_t RCC_HCLK);
void RCC_PCLK2Config(uint32_t RCC_HCLK);
void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);
#ifndef STM32F10X_CL
 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);
#else
 void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource);
#endif /* STM32F10X_CL */
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
#ifdef STM32F10X_CL
 void RCC_I2S2CLKConfig(uint32_t RCC_I2S2CLKSource);
 void RCC_I2S3CLKConfig(uint32_t RCC_I2S3CLKSource);
#endif /* STM32F10X_CL */
void RCC_LSEConfig(uint8_t RCC_LSE);
void RCC_LSICmd(FunctionalState NewState);
void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);
void RCC_RTCCLKCmd(FunctionalState NewState);
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
#ifdef STM32F10X_CL
void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
#endif /* STM32F10X_CL */
void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_BackupResetCmd(FunctionalState NewState);
void RCC_ClockSecuritySystemCmd(FunctionalState NewState);
void RCC_MCOConfig(uint8_t RCC_MCO);
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);
void RCC_ClearFlag(void);
ITStatus RCC_GetITStatus(uint8_t RCC_IT);
void RCC_ClearITPendingBit(uint8_t RCC_IT);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_RCC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_rtc.h
New file
@@ -0,0 +1,135 @@
/**
  ******************************************************************************
  * @file    stm32f10x_rtc.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the RTC firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_RTC_H
#define __STM32F10x_RTC_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup RTC
  * @{
  */
/** @defgroup RTC_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup RTC_Exported_Constants
  * @{
  */
/** @defgroup RTC_interrupts_define
  * @{
  */
#define RTC_IT_OW            ((uint16_t)0x0004)  /*!< Overflow interrupt */
#define RTC_IT_ALR           ((uint16_t)0x0002)  /*!< Alarm interrupt */
#define RTC_IT_SEC           ((uint16_t)0x0001)  /*!< Second interrupt */
#define IS_RTC_IT(IT) ((((IT) & (uint16_t)0xFFF8) == 0x00) && ((IT) != 0x00))
#define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_OW) || ((IT) == RTC_IT_ALR) || \
                           ((IT) == RTC_IT_SEC))
/**
  * @}
  */
/** @defgroup RTC_interrupts_flags
  * @{
  */
#define RTC_FLAG_RTOFF       ((uint16_t)0x0020)  /*!< RTC Operation OFF flag */
#define RTC_FLAG_RSF         ((uint16_t)0x0008)  /*!< Registers Synchronized flag */
#define RTC_FLAG_OW          ((uint16_t)0x0004)  /*!< Overflow flag */
#define RTC_FLAG_ALR         ((uint16_t)0x0002)  /*!< Alarm flag */
#define RTC_FLAG_SEC         ((uint16_t)0x0001)  /*!< Second flag */
#define IS_RTC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFF0) == 0x00) && ((FLAG) != 0x00))
#define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_RTOFF) || ((FLAG) == RTC_FLAG_RSF) || \
                               ((FLAG) == RTC_FLAG_OW) || ((FLAG) == RTC_FLAG_ALR) || \
                               ((FLAG) == RTC_FLAG_SEC))
#define IS_RTC_PRESCALER(PRESCALER) ((PRESCALER) <= 0xFFFFF)
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup RTC_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup RTC_Exported_Functions
  * @{
  */
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);
void RTC_EnterConfigMode(void);
void RTC_ExitConfigMode(void);
uint32_t  RTC_GetCounter(void);
void RTC_SetCounter(uint32_t CounterValue);
void RTC_SetPrescaler(uint32_t PrescalerValue);
void RTC_SetAlarm(uint32_t AlarmValue);
uint32_t  RTC_GetDivider(void);
void RTC_WaitForLastTask(void);
void RTC_WaitForSynchro(void);
FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
void RTC_ClearFlag(uint16_t RTC_FLAG);
ITStatus RTC_GetITStatus(uint16_t RTC_IT);
void RTC_ClearITPendingBit(uint16_t RTC_IT);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_RTC_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_sdio.h
New file
@@ -0,0 +1,531 @@
/**
  ******************************************************************************
  * @file    stm32f10x_sdio.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the SDIO firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_SDIO_H
#define __STM32F10x_SDIO_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup SDIO
  * @{
  */
/** @defgroup SDIO_Exported_Types
  * @{
  */
typedef struct
{
  uint32_t SDIO_ClockEdge;            /*!< Specifies the clock transition on which the bit capture is made.
                                           This parameter can be a value of @ref SDIO_Clock_Edge */
  uint32_t SDIO_ClockBypass;          /*!< Specifies whether the SDIO Clock divider bypass is
                                           enabled or disabled.
                                           This parameter can be a value of @ref SDIO_Clock_Bypass */
  uint32_t SDIO_ClockPowerSave;       /*!< Specifies whether SDIO Clock output is enabled or
                                           disabled when the bus is idle.
                                           This parameter can be a value of @ref SDIO_Clock_Power_Save */
  uint32_t SDIO_BusWide;              /*!< Specifies the SDIO bus width.
                                           This parameter can be a value of @ref SDIO_Bus_Wide */
  uint32_t SDIO_HardwareFlowControl;  /*!< Specifies whether the SDIO hardware flow control is enabled or disabled.
                                           This parameter can be a value of @ref SDIO_Hardware_Flow_Control */
  uint8_t SDIO_ClockDiv;              /*!< Specifies the clock frequency of the SDIO controller.
                                           This parameter can be a value between 0x00 and 0xFF. */
} SDIO_InitTypeDef;
typedef struct
{
  uint32_t SDIO_Argument;  /*!< Specifies the SDIO command argument which is sent
                                to a card as part of a command message. If a command
                                contains an argument, it must be loaded into this register
                                before writing the command to the command register */
  uint32_t SDIO_CmdIndex;  /*!< Specifies the SDIO command index. It must be lower than 0x40. */
  uint32_t SDIO_Response;  /*!< Specifies the SDIO response type.
                                This parameter can be a value of @ref SDIO_Response_Type */
  uint32_t SDIO_Wait;      /*!< Specifies whether SDIO wait-for-interrupt request is enabled or disabled.
                                This parameter can be a value of @ref SDIO_Wait_Interrupt_State */
  uint32_t SDIO_CPSM;      /*!< Specifies whether SDIO Command path state machine (CPSM)
                                is enabled or disabled.
                                This parameter can be a value of @ref SDIO_CPSM_State */
} SDIO_CmdInitTypeDef;
typedef struct
{
  uint32_t SDIO_DataTimeOut;    /*!< Specifies the data timeout period in card bus clock periods. */
  uint32_t SDIO_DataLength;     /*!< Specifies the number of data bytes to be transferred. */
  uint32_t SDIO_DataBlockSize;  /*!< Specifies the data block size for block transfer.
                                     This parameter can be a value of @ref SDIO_Data_Block_Size */
  uint32_t SDIO_TransferDir;    /*!< Specifies the data transfer direction, whether the transfer
                                     is a read or write.
                                     This parameter can be a value of @ref SDIO_Transfer_Direction */
  uint32_t SDIO_TransferMode;   /*!< Specifies whether data transfer is in stream or block mode.
                                     This parameter can be a value of @ref SDIO_Transfer_Type */
  uint32_t SDIO_DPSM;           /*!< Specifies whether SDIO Data path state machine (DPSM)
                                     is enabled or disabled.
                                     This parameter can be a value of @ref SDIO_DPSM_State */
} SDIO_DataInitTypeDef;
/**
  * @}
  */
/** @defgroup SDIO_Exported_Constants
  * @{
  */
/** @defgroup SDIO_Clock_Edge
  * @{
  */
#define SDIO_ClockEdge_Rising               ((uint32_t)0x00000000)
#define SDIO_ClockEdge_Falling              ((uint32_t)0x00002000)
#define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_ClockEdge_Rising) || \
                                  ((EDGE) == SDIO_ClockEdge_Falling))
/**
  * @}
  */
/** @defgroup SDIO_Clock_Bypass
  * @{
  */
#define SDIO_ClockBypass_Disable             ((uint32_t)0x00000000)
#define SDIO_ClockBypass_Enable              ((uint32_t)0x00000400)
#define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_ClockBypass_Disable) || \
                                     ((BYPASS) == SDIO_ClockBypass_Enable))
/**
  * @}
  */
/** @defgroup SDIO_Clock_Power_Save
  * @{
  */
#define SDIO_ClockPowerSave_Disable         ((uint32_t)0x00000000)
#define SDIO_ClockPowerSave_Enable          ((uint32_t)0x00000200)
#define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_ClockPowerSave_Disable) || \
                                        ((SAVE) == SDIO_ClockPowerSave_Enable))
/**
  * @}
  */
/** @defgroup SDIO_Bus_Wide
  * @{
  */
#define SDIO_BusWide_1b                     ((uint32_t)0x00000000)
#define SDIO_BusWide_4b                     ((uint32_t)0x00000800)
#define SDIO_BusWide_8b                     ((uint32_t)0x00001000)
#define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BusWide_1b) || ((WIDE) == SDIO_BusWide_4b) || \
                                ((WIDE) == SDIO_BusWide_8b))
/**
  * @}
  */
/** @defgroup SDIO_Hardware_Flow_Control
  * @{
  */
#define SDIO_HardwareFlowControl_Disable    ((uint32_t)0x00000000)
#define SDIO_HardwareFlowControl_Enable     ((uint32_t)0x00004000)
#define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HardwareFlowControl_Disable) || \
                                                ((CONTROL) == SDIO_HardwareFlowControl_Enable))
/**
  * @}
  */
/** @defgroup SDIO_Power_State
  * @{
  */
#define SDIO_PowerState_OFF                 ((uint32_t)0x00000000)
#define SDIO_PowerState_ON                  ((uint32_t)0x00000003)
#define IS_SDIO_POWER_STATE(STATE) (((STATE) == SDIO_PowerState_OFF) || ((STATE) == SDIO_PowerState_ON))
/**
  * @}
  */
/** @defgroup SDIO_Interrupt_sources
  * @{
  */
#define SDIO_IT_CCRCFAIL                    ((uint32_t)0x00000001)
#define SDIO_IT_DCRCFAIL                    ((uint32_t)0x00000002)
#define SDIO_IT_CTIMEOUT                    ((uint32_t)0x00000004)
#define SDIO_IT_DTIMEOUT                    ((uint32_t)0x00000008)
#define SDIO_IT_TXUNDERR                    ((uint32_t)0x00000010)
#define SDIO_IT_RXOVERR                     ((uint32_t)0x00000020)
#define SDIO_IT_CMDREND                     ((uint32_t)0x00000040)
#define SDIO_IT_CMDSENT                     ((uint32_t)0x00000080)
#define SDIO_IT_DATAEND                     ((uint32_t)0x00000100)
#define SDIO_IT_STBITERR                    ((uint32_t)0x00000200)
#define SDIO_IT_DBCKEND                     ((uint32_t)0x00000400)
#define SDIO_IT_CMDACT                      ((uint32_t)0x00000800)
#define SDIO_IT_TXACT                       ((uint32_t)0x00001000)
#define SDIO_IT_RXACT                       ((uint32_t)0x00002000)
#define SDIO_IT_TXFIFOHE                    ((uint32_t)0x00004000)
#define SDIO_IT_RXFIFOHF                    ((uint32_t)0x00008000)
#define SDIO_IT_TXFIFOF                     ((uint32_t)0x00010000)
#define SDIO_IT_RXFIFOF                     ((uint32_t)0x00020000)
#define SDIO_IT_TXFIFOE                     ((uint32_t)0x00040000)
#define SDIO_IT_RXFIFOE                     ((uint32_t)0x00080000)
#define SDIO_IT_TXDAVL                      ((uint32_t)0x00100000)
#define SDIO_IT_RXDAVL                      ((uint32_t)0x00200000)
#define SDIO_IT_SDIOIT                      ((uint32_t)0x00400000)
#define SDIO_IT_CEATAEND                    ((uint32_t)0x00800000)
#define IS_SDIO_IT(IT) ((((IT) & (uint32_t)0xFF000000) == 0x00) && ((IT) != (uint32_t)0x00))
/**
  * @}
  */
/** @defgroup SDIO_Command_Index
  * @{
  */
#define IS_SDIO_CMD_INDEX(INDEX)            ((INDEX) < 0x40)
/**
  * @}
  */
/** @defgroup SDIO_Response_Type
  * @{
  */
#define SDIO_Response_No                    ((uint32_t)0x00000000)
#define SDIO_Response_Short                 ((uint32_t)0x00000040)
#define SDIO_Response_Long                  ((uint32_t)0x000000C0)
#define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \
                                    ((RESPONSE) == SDIO_Response_Short) || \
                                    ((RESPONSE) == SDIO_Response_Long))
/**
  * @}
  */
/** @defgroup SDIO_Wait_Interrupt_State
  * @{
  */
#define SDIO_Wait_No                        ((uint32_t)0x00000000) /*!< SDIO No Wait, TimeOut is enabled */
#define SDIO_Wait_IT                        ((uint32_t)0x00000100) /*!< SDIO Wait Interrupt Request */
#define SDIO_Wait_Pend                      ((uint32_t)0x00000200) /*!< SDIO Wait End of transfer */
#define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_Wait_No) || ((WAIT) == SDIO_Wait_IT) || \
                            ((WAIT) == SDIO_Wait_Pend))
/**
  * @}
  */
/** @defgroup SDIO_CPSM_State
  * @{
  */
#define SDIO_CPSM_Disable                    ((uint32_t)0x00000000)
#define SDIO_CPSM_Enable                     ((uint32_t)0x00000400)
#define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_Enable) || ((CPSM) == SDIO_CPSM_Disable))
/**
  * @}
  */
/** @defgroup SDIO_Response_Registers
  * @{
  */
#define SDIO_RESP1                          ((uint32_t)0x00000000)
#define SDIO_RESP2                          ((uint32_t)0x00000004)
#define SDIO_RESP3                          ((uint32_t)0x00000008)
#define SDIO_RESP4                          ((uint32_t)0x0000000C)
#define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || ((RESP) == SDIO_RESP2) || \
                            ((RESP) == SDIO_RESP3) || ((RESP) == SDIO_RESP4))
/**
  * @}
  */
/** @defgroup SDIO_Data_Length
  * @{
  */
#define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF)
/**
  * @}
  */
/** @defgroup SDIO_Data_Block_Size
  * @{
  */
#define SDIO_DataBlockSize_1b               ((uint32_t)0x00000000)
#define SDIO_DataBlockSize_2b               ((uint32_t)0x00000010)
#define SDIO_DataBlockSize_4b               ((uint32_t)0x00000020)
#define SDIO_DataBlockSize_8b               ((uint32_t)0x00000030)
#define SDIO_DataBlockSize_16b              ((uint32_t)0x00000040)
#define SDIO_DataBlockSize_32b              ((uint32_t)0x00000050)
#define SDIO_DataBlockSize_64b              ((uint32_t)0x00000060)
#define SDIO_DataBlockSize_128b             ((uint32_t)0x00000070)
#define SDIO_DataBlockSize_256b             ((uint32_t)0x00000080)
#define SDIO_DataBlockSize_512b             ((uint32_t)0x00000090)
#define SDIO_DataBlockSize_1024b            ((uint32_t)0x000000A0)
#define SDIO_DataBlockSize_2048b            ((uint32_t)0x000000B0)
#define SDIO_DataBlockSize_4096b            ((uint32_t)0x000000C0)
#define SDIO_DataBlockSize_8192b            ((uint32_t)0x000000D0)
#define SDIO_DataBlockSize_16384b           ((uint32_t)0x000000E0)
#define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DataBlockSize_1b) || \
                                  ((SIZE) == SDIO_DataBlockSize_2b) || \
                                  ((SIZE) == SDIO_DataBlockSize_4b) || \
                                  ((SIZE) == SDIO_DataBlockSize_8b) || \
                                  ((SIZE) == SDIO_DataBlockSize_16b) || \
                                  ((SIZE) == SDIO_DataBlockSize_32b) || \
                                  ((SIZE) == SDIO_DataBlockSize_64b) || \
                                  ((SIZE) == SDIO_DataBlockSize_128b) || \
                                  ((SIZE) == SDIO_DataBlockSize_256b) || \
                                  ((SIZE) == SDIO_DataBlockSize_512b) || \
                                  ((SIZE) == SDIO_DataBlockSize_1024b) || \
                                  ((SIZE) == SDIO_DataBlockSize_2048b) || \
                                  ((SIZE) == SDIO_DataBlockSize_4096b) || \
                                  ((SIZE) == SDIO_DataBlockSize_8192b) || \
                                  ((SIZE) == SDIO_DataBlockSize_16384b))
/**
  * @}
  */
/** @defgroup SDIO_Transfer_Direction
  * @{
  */
#define SDIO_TransferDir_ToCard             ((uint32_t)0x00000000)
#define SDIO_TransferDir_ToSDIO             ((uint32_t)0x00000002)
#define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \
                                   ((DIR) == SDIO_TransferDir_ToSDIO))
/**
  * @}
  */
/** @defgroup SDIO_Transfer_Type
  * @{
  */
#define SDIO_TransferMode_Block             ((uint32_t)0x00000000)
#define SDIO_TransferMode_Stream            ((uint32_t)0x00000004)
#define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Stream) || \
                                     ((MODE) == SDIO_TransferMode_Block))
/**
  * @}
  */
/** @defgroup SDIO_DPSM_State
  * @{
  */
#define SDIO_DPSM_Disable                    ((uint32_t)0x00000000)
#define SDIO_DPSM_Enable                     ((uint32_t)0x00000001)
#define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Enable) || ((DPSM) == SDIO_DPSM_Disable))
/**
  * @}
  */
/** @defgroup SDIO_Flags
  * @{
  */
#define SDIO_FLAG_CCRCFAIL                  ((uint32_t)0x00000001)
#define SDIO_FLAG_DCRCFAIL                  ((uint32_t)0x00000002)
#define SDIO_FLAG_CTIMEOUT                  ((uint32_t)0x00000004)
#define SDIO_FLAG_DTIMEOUT                  ((uint32_t)0x00000008)
#define SDIO_FLAG_TXUNDERR                  ((uint32_t)0x00000010)
#define SDIO_FLAG_RXOVERR                   ((uint32_t)0x00000020)
#define SDIO_FLAG_CMDREND                   ((uint32_t)0x00000040)
#define SDIO_FLAG_CMDSENT                   ((uint32_t)0x00000080)
#define SDIO_FLAG_DATAEND                   ((uint32_t)0x00000100)
#define SDIO_FLAG_STBITERR                  ((uint32_t)0x00000200)
#define SDIO_FLAG_DBCKEND                   ((uint32_t)0x00000400)
#define SDIO_FLAG_CMDACT                    ((uint32_t)0x00000800)
#define SDIO_FLAG_TXACT                     ((uint32_t)0x00001000)
#define SDIO_FLAG_RXACT                     ((uint32_t)0x00002000)
#define SDIO_FLAG_TXFIFOHE                  ((uint32_t)0x00004000)
#define SDIO_FLAG_RXFIFOHF                  ((uint32_t)0x00008000)
#define SDIO_FLAG_TXFIFOF                   ((uint32_t)0x00010000)
#define SDIO_FLAG_RXFIFOF                   ((uint32_t)0x00020000)
#define SDIO_FLAG_TXFIFOE                   ((uint32_t)0x00040000)
#define SDIO_FLAG_RXFIFOE                   ((uint32_t)0x00080000)
#define SDIO_FLAG_TXDAVL                    ((uint32_t)0x00100000)
#define SDIO_FLAG_RXDAVL                    ((uint32_t)0x00200000)
#define SDIO_FLAG_SDIOIT                    ((uint32_t)0x00400000)
#define SDIO_FLAG_CEATAEND                  ((uint32_t)0x00800000)
#define IS_SDIO_FLAG(FLAG) (((FLAG)  == SDIO_FLAG_CCRCFAIL) || \
                            ((FLAG)  == SDIO_FLAG_DCRCFAIL) || \
                            ((FLAG)  == SDIO_FLAG_CTIMEOUT) || \
                            ((FLAG)  == SDIO_FLAG_DTIMEOUT) || \
                            ((FLAG)  == SDIO_FLAG_TXUNDERR) || \
                            ((FLAG)  == SDIO_FLAG_RXOVERR) || \
                            ((FLAG)  == SDIO_FLAG_CMDREND) || \
                            ((FLAG)  == SDIO_FLAG_CMDSENT) || \
                            ((FLAG)  == SDIO_FLAG_DATAEND) || \
                            ((FLAG)  == SDIO_FLAG_STBITERR) || \
                            ((FLAG)  == SDIO_FLAG_DBCKEND) || \
                            ((FLAG)  == SDIO_FLAG_CMDACT) || \
                            ((FLAG)  == SDIO_FLAG_TXACT) || \
                            ((FLAG)  == SDIO_FLAG_RXACT) || \
                            ((FLAG)  == SDIO_FLAG_TXFIFOHE) || \
                            ((FLAG)  == SDIO_FLAG_RXFIFOHF) || \
                            ((FLAG)  == SDIO_FLAG_TXFIFOF) || \
                            ((FLAG)  == SDIO_FLAG_RXFIFOF) || \
                            ((FLAG)  == SDIO_FLAG_TXFIFOE) || \
                            ((FLAG)  == SDIO_FLAG_RXFIFOE) || \
                            ((FLAG)  == SDIO_FLAG_TXDAVL) || \
                            ((FLAG)  == SDIO_FLAG_RXDAVL) || \
                            ((FLAG)  == SDIO_FLAG_SDIOIT) || \
                            ((FLAG)  == SDIO_FLAG_CEATAEND))
#define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFF3FF800) == 0x00) && ((FLAG) != (uint32_t)0x00))
#define IS_SDIO_GET_IT(IT) (((IT)  == SDIO_IT_CCRCFAIL) || \
                            ((IT)  == SDIO_IT_DCRCFAIL) || \
                            ((IT)  == SDIO_IT_CTIMEOUT) || \
                            ((IT)  == SDIO_IT_DTIMEOUT) || \
                            ((IT)  == SDIO_IT_TXUNDERR) || \
                            ((IT)  == SDIO_IT_RXOVERR) || \
                            ((IT)  == SDIO_IT_CMDREND) || \
                            ((IT)  == SDIO_IT_CMDSENT) || \
                            ((IT)  == SDIO_IT_DATAEND) || \
                            ((IT)  == SDIO_IT_STBITERR) || \
                            ((IT)  == SDIO_IT_DBCKEND) || \
                            ((IT)  == SDIO_IT_CMDACT) || \
                            ((IT)  == SDIO_IT_TXACT) || \
                            ((IT)  == SDIO_IT_RXACT) || \
                            ((IT)  == SDIO_IT_TXFIFOHE) || \
                            ((IT)  == SDIO_IT_RXFIFOHF) || \
                            ((IT)  == SDIO_IT_TXFIFOF) || \
                            ((IT)  == SDIO_IT_RXFIFOF) || \
                            ((IT)  == SDIO_IT_TXFIFOE) || \
                            ((IT)  == SDIO_IT_RXFIFOE) || \
                            ((IT)  == SDIO_IT_TXDAVL) || \
                            ((IT)  == SDIO_IT_RXDAVL) || \
                            ((IT)  == SDIO_IT_SDIOIT) || \
                            ((IT)  == SDIO_IT_CEATAEND))
#define IS_SDIO_CLEAR_IT(IT) ((((IT) & (uint32_t)0xFF3FF800) == 0x00) && ((IT) != (uint32_t)0x00))
/**
  * @}
  */
/** @defgroup SDIO_Read_Wait_Mode
  * @{
  */
#define SDIO_ReadWaitMode_CLK               ((uint32_t)0x00000001)
#define SDIO_ReadWaitMode_DATA2             ((uint32_t)0x00000000)
#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \
                                     ((MODE) == SDIO_ReadWaitMode_DATA2))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup SDIO_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup SDIO_Exported_Functions
  * @{
  */
void SDIO_DeInit(void);
void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct);
void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct);
void SDIO_ClockCmd(FunctionalState NewState);
void SDIO_SetPowerState(uint32_t SDIO_PowerState);
uint32_t SDIO_GetPowerState(void);
void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState);
void SDIO_DMACmd(FunctionalState NewState);
void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct);
void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct);
uint8_t SDIO_GetCommandResponse(void);
uint32_t SDIO_GetResponse(uint32_t SDIO_RESP);
void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct);
void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct);
uint32_t SDIO_GetDataCounter(void);
uint32_t SDIO_ReadData(void);
void SDIO_WriteData(uint32_t Data);
uint32_t SDIO_GetFIFOCount(void);
void SDIO_StartSDIOReadWait(FunctionalState NewState);
void SDIO_StopSDIOReadWait(FunctionalState NewState);
void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode);
void SDIO_SetSDIOOperation(FunctionalState NewState);
void SDIO_SendSDIOSuspendCmd(FunctionalState NewState);
void SDIO_CommandCompletionCmd(FunctionalState NewState);
void SDIO_CEATAITCmd(FunctionalState NewState);
void SDIO_SendCEATACmd(FunctionalState NewState);
FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG);
void SDIO_ClearFlag(uint32_t SDIO_FLAG);
ITStatus SDIO_GetITStatus(uint32_t SDIO_IT);
void SDIO_ClearITPendingBit(uint32_t SDIO_IT);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_SDIO_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_spi.h
New file
@@ -0,0 +1,487 @@
/**
  ******************************************************************************
  * @file    stm32f10x_spi.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the SPI firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_SPI_H
#define __STM32F10x_SPI_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup SPI
  * @{
  */
/** @defgroup SPI_Exported_Types
  * @{
  */
/**
  * @brief  SPI Init structure definition
  */
typedef struct
{
  uint16_t SPI_Direction;           /*!< Specifies the SPI unidirectional or bidirectional data mode.
                                         This parameter can be a value of @ref SPI_data_direction */
  uint16_t SPI_Mode;                /*!< Specifies the SPI operating mode.
                                         This parameter can be a value of @ref SPI_mode */
  uint16_t SPI_DataSize;            /*!< Specifies the SPI data size.
                                         This parameter can be a value of @ref SPI_data_size */
  uint16_t SPI_CPOL;                /*!< Specifies the serial clock steady state.
                                         This parameter can be a value of @ref SPI_Clock_Polarity */
  uint16_t SPI_CPHA;                /*!< Specifies the clock active edge for the bit capture.
                                         This parameter can be a value of @ref SPI_Clock_Phase */
  uint16_t SPI_NSS;                 /*!< Specifies whether the NSS signal is managed by
                                         hardware (NSS pin) or by software using the SSI bit.
                                         This parameter can be a value of @ref SPI_Slave_Select_management */
  uint16_t SPI_BaudRatePrescaler;   /*!< Specifies the Baud Rate prescaler value which will be
                                         used to configure the transmit and receive SCK clock.
                                         This parameter can be a value of @ref SPI_BaudRate_Prescaler.
                                         @note The communication clock is derived from the master
                                               clock. The slave clock does not need to be set. */
  uint16_t SPI_FirstBit;            /*!< Specifies whether data transfers start from MSB or LSB bit.
                                         This parameter can be a value of @ref SPI_MSB_LSB_transmission */
  uint16_t SPI_CRCPolynomial;       /*!< Specifies the polynomial used for the CRC calculation. */
}SPI_InitTypeDef;
/**
  * @brief  I2S Init structure definition
  */
typedef struct
{
  uint16_t I2S_Mode;         /*!< Specifies the I2S operating mode.
                                  This parameter can be a value of @ref I2S_Mode */
  uint16_t I2S_Standard;     /*!< Specifies the standard used for the I2S communication.
                                  This parameter can be a value of @ref I2S_Standard */
  uint16_t I2S_DataFormat;   /*!< Specifies the data format for the I2S communication.
                                  This parameter can be a value of @ref I2S_Data_Format */
  uint16_t I2S_MCLKOutput;   /*!< Specifies whether the I2S MCLK output is enabled or not.
                                  This parameter can be a value of @ref I2S_MCLK_Output */
  uint32_t I2S_AudioFreq;    /*!< Specifies the frequency selected for the I2S communication.
                                  This parameter can be a value of @ref I2S_Audio_Frequency */
  uint16_t I2S_CPOL;         /*!< Specifies the idle state of the I2S clock.
                                  This parameter can be a value of @ref I2S_Clock_Polarity */
}I2S_InitTypeDef;
/**
  * @}
  */
/** @defgroup SPI_Exported_Constants
  * @{
  */
#define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \
                                   ((PERIPH) == SPI2) || \
                                   ((PERIPH) == SPI3))
#define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \
                                  ((PERIPH) == SPI3))
/** @defgroup SPI_data_direction
  * @{
  */
#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)
#define SPI_Direction_2Lines_RxOnly     ((uint16_t)0x0400)
#define SPI_Direction_1Line_Rx          ((uint16_t)0x8000)
#define SPI_Direction_1Line_Tx          ((uint16_t)0xC000)
#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
                                     ((MODE) == SPI_Direction_2Lines_RxOnly) || \
                                     ((MODE) == SPI_Direction_1Line_Rx) || \
                                     ((MODE) == SPI_Direction_1Line_Tx))
/**
  * @}
  */
/** @defgroup SPI_mode
  * @{
  */
#define SPI_Mode_Master                 ((uint16_t)0x0104)
#define SPI_Mode_Slave                  ((uint16_t)0x0000)
#define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \
                           ((MODE) == SPI_Mode_Slave))
/**
  * @}
  */
/** @defgroup SPI_data_size
  * @{
  */
#define SPI_DataSize_16b                ((uint16_t)0x0800)
#define SPI_DataSize_8b                 ((uint16_t)0x0000)
#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \
                                   ((DATASIZE) == SPI_DataSize_8b))
/**
  * @}
  */
/** @defgroup SPI_Clock_Polarity
  * @{
  */
#define SPI_CPOL_Low                    ((uint16_t)0x0000)
#define SPI_CPOL_High                   ((uint16_t)0x0002)
#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
                           ((CPOL) == SPI_CPOL_High))
/**
  * @}
  */
/** @defgroup SPI_Clock_Phase
  * @{
  */
#define SPI_CPHA_1Edge                  ((uint16_t)0x0000)
#define SPI_CPHA_2Edge                  ((uint16_t)0x0001)
#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \
                           ((CPHA) == SPI_CPHA_2Edge))
/**
  * @}
  */
/** @defgroup SPI_Slave_Select_management
  * @{
  */
#define SPI_NSS_Soft                    ((uint16_t)0x0200)
#define SPI_NSS_Hard                    ((uint16_t)0x0000)
#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
                         ((NSS) == SPI_NSS_Hard))
/**
  * @}
  */
/** @defgroup SPI_BaudRate_Prescaler
  * @{
  */
#define SPI_BaudRatePrescaler_2         ((uint16_t)0x0000)
#define SPI_BaudRatePrescaler_4         ((uint16_t)0x0008)
#define SPI_BaudRatePrescaler_8         ((uint16_t)0x0010)
#define SPI_BaudRatePrescaler_16        ((uint16_t)0x0018)
#define SPI_BaudRatePrescaler_32        ((uint16_t)0x0020)
#define SPI_BaudRatePrescaler_64        ((uint16_t)0x0028)
#define SPI_BaudRatePrescaler_128       ((uint16_t)0x0030)
#define SPI_BaudRatePrescaler_256       ((uint16_t)0x0038)
#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_128) || \
                                              ((PRESCALER) == SPI_BaudRatePrescaler_256))
/**
  * @}
  */
/** @defgroup SPI_MSB_LSB_transmission
  * @{
  */
#define SPI_FirstBit_MSB                ((uint16_t)0x0000)
#define SPI_FirstBit_LSB                ((uint16_t)0x0080)
#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
                               ((BIT) == SPI_FirstBit_LSB))
/**
  * @}
  */
/** @defgroup I2S_Mode
  * @{
  */
#define I2S_Mode_SlaveTx                ((uint16_t)0x0000)
#define I2S_Mode_SlaveRx                ((uint16_t)0x0100)
#define I2S_Mode_MasterTx               ((uint16_t)0x0200)
#define I2S_Mode_MasterRx               ((uint16_t)0x0300)
#define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \
                           ((MODE) == I2S_Mode_SlaveRx) || \
                           ((MODE) == I2S_Mode_MasterTx) || \
                           ((MODE) == I2S_Mode_MasterRx) )
/**
  * @}
  */
/** @defgroup I2S_Standard
  * @{
  */
#define I2S_Standard_Phillips           ((uint16_t)0x0000)
#define I2S_Standard_MSB                ((uint16_t)0x0010)
#define I2S_Standard_LSB                ((uint16_t)0x0020)
#define I2S_Standard_PCMShort           ((uint16_t)0x0030)
#define I2S_Standard_PCMLong            ((uint16_t)0x00B0)
#define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \
                                   ((STANDARD) == I2S_Standard_MSB) || \
                                   ((STANDARD) == I2S_Standard_LSB) || \
                                   ((STANDARD) == I2S_Standard_PCMShort) || \
                                   ((STANDARD) == I2S_Standard_PCMLong))
/**
  * @}
  */
/** @defgroup I2S_Data_Format
  * @{
  */
#define I2S_DataFormat_16b              ((uint16_t)0x0000)
#define I2S_DataFormat_16bextended      ((uint16_t)0x0001)
#define I2S_DataFormat_24b              ((uint16_t)0x0003)
#define I2S_DataFormat_32b              ((uint16_t)0x0005)
#define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \
                                    ((FORMAT) == I2S_DataFormat_16bextended) || \
                                    ((FORMAT) == I2S_DataFormat_24b) || \
                                    ((FORMAT) == I2S_DataFormat_32b))
/**
  * @}
  */
/** @defgroup I2S_MCLK_Output
  * @{
  */
#define I2S_MCLKOutput_Enable           ((uint16_t)0x0200)
#define I2S_MCLKOutput_Disable          ((uint16_t)0x0000)
#define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \
                                    ((OUTPUT) == I2S_MCLKOutput_Disable))
/**
  * @}
  */
/** @defgroup I2S_Audio_Frequency
  * @{
  */
#define I2S_AudioFreq_192k               ((uint32_t)192000)
#define I2S_AudioFreq_96k                ((uint32_t)96000)
#define I2S_AudioFreq_48k                ((uint32_t)48000)
#define I2S_AudioFreq_44k                ((uint32_t)44100)
#define I2S_AudioFreq_32k                ((uint32_t)32000)
#define I2S_AudioFreq_22k                ((uint32_t)22050)
#define I2S_AudioFreq_16k                ((uint32_t)16000)
#define I2S_AudioFreq_11k                ((uint32_t)11025)
#define I2S_AudioFreq_8k                 ((uint32_t)8000)
#define I2S_AudioFreq_Default            ((uint32_t)2)
#define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AudioFreq_8k) && \
                                  ((FREQ) <= I2S_AudioFreq_192k)) || \
                                 ((FREQ) == I2S_AudioFreq_Default))
/**
  * @}
  */
/** @defgroup I2S_Clock_Polarity
  * @{
  */
#define I2S_CPOL_Low                    ((uint16_t)0x0000)
#define I2S_CPOL_High                   ((uint16_t)0x0008)
#define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \
                           ((CPOL) == I2S_CPOL_High))
/**
  * @}
  */
/** @defgroup SPI_I2S_DMA_transfer_requests
  * @{
  */
#define SPI_I2S_DMAReq_Tx               ((uint16_t)0x0002)
#define SPI_I2S_DMAReq_Rx               ((uint16_t)0x0001)
#define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFC) == 0x00) && ((DMAREQ) != 0x00))
/**
  * @}
  */
/** @defgroup SPI_NSS_internal_software_management
  * @{
  */
#define SPI_NSSInternalSoft_Set         ((uint16_t)0x0100)
#define SPI_NSSInternalSoft_Reset       ((uint16_t)0xFEFF)
#define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \
                                       ((INTERNAL) == SPI_NSSInternalSoft_Reset))
/**
  * @}
  */
/** @defgroup SPI_CRC_Transmit_Receive
  * @{
  */
#define SPI_CRC_Tx                      ((uint8_t)0x00)
#define SPI_CRC_Rx                      ((uint8_t)0x01)
#define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx))
/**
  * @}
  */
/** @defgroup SPI_direction_transmit_receive
  * @{
  */
#define SPI_Direction_Rx                ((uint16_t)0xBFFF)
#define SPI_Direction_Tx                ((uint16_t)0x4000)
#define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \
                                     ((DIRECTION) == SPI_Direction_Tx))
/**
  * @}
  */
/** @defgroup SPI_I2S_interrupts_definition
  * @{
  */
#define SPI_I2S_IT_TXE                  ((uint8_t)0x71)
#define SPI_I2S_IT_RXNE                 ((uint8_t)0x60)
#define SPI_I2S_IT_ERR                  ((uint8_t)0x50)
#define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \
                                 ((IT) == SPI_I2S_IT_RXNE) || \
                                 ((IT) == SPI_I2S_IT_ERR))
#define SPI_I2S_IT_OVR                  ((uint8_t)0x56)
#define SPI_IT_MODF                     ((uint8_t)0x55)
#define SPI_IT_CRCERR                   ((uint8_t)0x54)
#define I2S_IT_UDR                      ((uint8_t)0x53)
#define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR))
#define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE) || ((IT) == SPI_I2S_IT_TXE) || \
                               ((IT) == I2S_IT_UDR) || ((IT) == SPI_IT_CRCERR) || \
                               ((IT) == SPI_IT_MODF) || ((IT) == SPI_I2S_IT_OVR))
/**
  * @}
  */
/** @defgroup SPI_I2S_flags_definition
  * @{
  */
#define SPI_I2S_FLAG_RXNE               ((uint16_t)0x0001)
#define SPI_I2S_FLAG_TXE                ((uint16_t)0x0002)
#define I2S_FLAG_CHSIDE                 ((uint16_t)0x0004)
#define I2S_FLAG_UDR                    ((uint16_t)0x0008)
#define SPI_FLAG_CRCERR                 ((uint16_t)0x0010)
#define SPI_FLAG_MODF                   ((uint16_t)0x0020)
#define SPI_I2S_FLAG_OVR                ((uint16_t)0x0040)
#define SPI_I2S_FLAG_BSY                ((uint16_t)0x0080)
#define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR))
#define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \
                                   ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \
                                   ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \
                                   ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE))
/**
  * @}
  */
/** @defgroup SPI_CRC_polynomial
  * @{
  */
#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1)
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup SPI_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup SPI_Exported_Functions
  * @{
  */
void SPI_I2S_DeInit(SPI_TypeDef* SPIx);
void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct);
void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);
void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct);
void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState);
void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState);
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);
uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);
void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft);
void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState);
void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize);
void SPI_TransmitCRC(SPI_TypeDef* SPIx);
void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState);
uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC);
uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx);
void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction);
FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);
void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);
ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT);
void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT);
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_SPI_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_tim.h
New file
@@ -0,0 +1,1164 @@
/**
  ******************************************************************************
  * @file    stm32f10x_tim.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the TIM firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_TIM_H
#define __STM32F10x_TIM_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup TIM
  * @{
  */
/** @defgroup TIM_Exported_Types
  * @{
  */
/**
  * @brief  TIM Time Base Init structure definition
  * @note   This structure is used with all TIMx except for TIM6 and TIM7.
  */
typedef struct
{
  uint16_t TIM_Prescaler;         /*!< Specifies the prescaler value used to divide the TIM clock.
                                       This parameter can be a number between 0x0000 and 0xFFFF */
  uint16_t TIM_CounterMode;       /*!< Specifies the counter mode.
                                       This parameter can be a value of @ref TIM_Counter_Mode */
  uint16_t TIM_Period;            /*!< Specifies the period value to be loaded into the active
                                       Auto-Reload Register at the next update event.
                                       This parameter must be a number between 0x0000 and 0xFFFF.  */
  uint16_t TIM_ClockDivision;     /*!< Specifies the clock division.
                                      This parameter can be a value of @ref TIM_Clock_Division_CKD */
  uint8_t TIM_RepetitionCounter;  /*!< Specifies the repetition counter value. Each time the RCR downcounter
                                       reaches zero, an update event is generated and counting restarts
                                       from the RCR value (N).
                                       This means in PWM mode that (N+1) corresponds to:
                                          - the number of PWM periods in edge-aligned mode
                                          - the number of half PWM period in center-aligned mode
                                       This parameter must be a number between 0x00 and 0xFF.
                                       @note This parameter is valid only for TIM1 and TIM8. */
} TIM_TimeBaseInitTypeDef;
/**
  * @brief  TIM Output Compare Init structure definition
  */
typedef struct
{
  uint16_t TIM_OCMode;        /*!< Specifies the TIM mode.
                                   This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */
  uint16_t TIM_OutputState;   /*!< Specifies the TIM Output Compare state.
                                   This parameter can be a value of @ref TIM_Output_Compare_state */
  uint16_t TIM_OutputNState;  /*!< Specifies the TIM complementary Output Compare state.
                                   This parameter can be a value of @ref TIM_Output_Compare_N_state
                                   @note This parameter is valid only for TIM1 and TIM8. */
  uint16_t TIM_Pulse;         /*!< Specifies the pulse value to be loaded into the Capture Compare Register.
                                   This parameter can be a number between 0x0000 and 0xFFFF */
  uint16_t TIM_OCPolarity;    /*!< Specifies the output polarity.
                                   This parameter can be a value of @ref TIM_Output_Compare_Polarity */
  uint16_t TIM_OCNPolarity;   /*!< Specifies the complementary output polarity.
                                   This parameter can be a value of @ref TIM_Output_Compare_N_Polarity
                                   @note This parameter is valid only for TIM1 and TIM8. */
  uint16_t TIM_OCIdleState;   /*!< Specifies the TIM Output Compare pin state during Idle state.
                                   This parameter can be a value of @ref TIM_Output_Compare_Idle_State
                                   @note This parameter is valid only for TIM1 and TIM8. */
  uint16_t TIM_OCNIdleState;  /*!< Specifies the TIM Output Compare pin state during Idle state.
                                   This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State
                                   @note This parameter is valid only for TIM1 and TIM8. */
} TIM_OCInitTypeDef;
/**
  * @brief  TIM Input Capture Init structure definition
  */
typedef struct
{
  uint16_t TIM_Channel;      /*!< Specifies the TIM channel.
                                  This parameter can be a value of @ref TIM_Channel */
  uint16_t TIM_ICPolarity;   /*!< Specifies the active edge of the input signal.
                                  This parameter can be a value of @ref TIM_Input_Capture_Polarity */
  uint16_t TIM_ICSelection;  /*!< Specifies the input.
                                  This parameter can be a value of @ref TIM_Input_Capture_Selection */
  uint16_t TIM_ICPrescaler;  /*!< Specifies the Input Capture Prescaler.
                                  This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
  uint16_t TIM_ICFilter;     /*!< Specifies the input capture filter.
                                  This parameter can be a number between 0x0 and 0xF */
} TIM_ICInitTypeDef;
/**
  * @brief  BDTR structure definition
  * @note   This structure is used only with TIM1 and TIM8.
  */
typedef struct
{
  uint16_t TIM_OSSRState;        /*!< Specifies the Off-State selection used in Run mode.
                                      This parameter can be a value of @ref OSSR_Off_State_Selection_for_Run_mode_state */
  uint16_t TIM_OSSIState;        /*!< Specifies the Off-State used in Idle state.
                                      This parameter can be a value of @ref OSSI_Off_State_Selection_for_Idle_mode_state */
  uint16_t TIM_LOCKLevel;        /*!< Specifies the LOCK level parameters.
                                      This parameter can be a value of @ref Lock_level */
  uint16_t TIM_DeadTime;         /*!< Specifies the delay time between the switching-off and the
                                      switching-on of the outputs.
                                      This parameter can be a number between 0x00 and 0xFF  */
  uint16_t TIM_Break;            /*!< Specifies whether the TIM Break input is enabled or not.
                                      This parameter can be a value of @ref Break_Input_enable_disable */
  uint16_t TIM_BreakPolarity;    /*!< Specifies the TIM Break Input pin polarity.
                                      This parameter can be a value of @ref Break_Polarity */
  uint16_t TIM_AutomaticOutput;  /*!< Specifies whether the TIM Automatic Output feature is enabled or not.
                                      This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */
} TIM_BDTRInitTypeDef;
/** @defgroup TIM_Exported_constants
  * @{
  */
#define IS_TIM_ALL_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
                                   ((PERIPH) == TIM2) || \
                                   ((PERIPH) == TIM3) || \
                                   ((PERIPH) == TIM4) || \
                                   ((PERIPH) == TIM5) || \
                                   ((PERIPH) == TIM6) || \
                                   ((PERIPH) == TIM7) || \
                                   ((PERIPH) == TIM8) || \
                                   ((PERIPH) == TIM9) || \
                                   ((PERIPH) == TIM10)|| \
                                   ((PERIPH) == TIM11)|| \
                                   ((PERIPH) == TIM12)|| \
                                   ((PERIPH) == TIM13)|| \
                                   ((PERIPH) == TIM14)|| \
                                   ((PERIPH) == TIM15)|| \
                                   ((PERIPH) == TIM16)|| \
                                   ((PERIPH) == TIM17))
/* LIST1: TIM 1 and 8 */
#define IS_TIM_LIST1_PERIPH(PERIPH)  (((PERIPH) == TIM1) || \
                                      ((PERIPH) == TIM8))
/* LIST2: TIM 1, 8, 15 16 and 17 */
#define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
                                     ((PERIPH) == TIM8) || \
                                     ((PERIPH) == TIM15)|| \
                                     ((PERIPH) == TIM16)|| \
                                     ((PERIPH) == TIM17))
/* LIST3: TIM 1, 2, 3, 4, 5 and 8 */
#define IS_TIM_LIST3_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
                                     ((PERIPH) == TIM2) || \
                                     ((PERIPH) == TIM3) || \
                                     ((PERIPH) == TIM4) || \
                                     ((PERIPH) == TIM5) || \
                                     ((PERIPH) == TIM8))
/* LIST4: TIM 1, 2, 3, 4, 5, 8, 15, 16 and 17 */
#define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
                                     ((PERIPH) == TIM2) || \
                                     ((PERIPH) == TIM3) || \
                                     ((PERIPH) == TIM4) || \
                                     ((PERIPH) == TIM5) || \
                                     ((PERIPH) == TIM8) || \
                                     ((PERIPH) == TIM15)|| \
                                     ((PERIPH) == TIM16)|| \
                                     ((PERIPH) == TIM17))
/* LIST5: TIM 1, 2, 3, 4, 5, 8 and 15 */
#define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
                                     ((PERIPH) == TIM2) || \
                                     ((PERIPH) == TIM3) || \
                                     ((PERIPH) == TIM4) || \
                                     ((PERIPH) == TIM5) || \
                                     ((PERIPH) == TIM8) || \
                                     ((PERIPH) == TIM15))
/* LIST6: TIM 1, 2, 3, 4, 5, 8, 9, 12 and 15 */
#define IS_TIM_LIST6_PERIPH(PERIPH)  (((PERIPH) == TIM1) || \
                                      ((PERIPH) == TIM2) || \
                                      ((PERIPH) == TIM3) || \
                                      ((PERIPH) == TIM4) || \
                                      ((PERIPH) == TIM5) || \
                                      ((PERIPH) == TIM8) || \
                                      ((PERIPH) == TIM9) || \
                                      ((PERIPH) == TIM12)|| \
                                      ((PERIPH) == TIM15))
/* LIST7: TIM 1, 2, 3, 4, 5, 6, 7, 8, 9, 12 and 15 */
#define IS_TIM_LIST7_PERIPH(PERIPH)  (((PERIPH) == TIM1) || \
                                      ((PERIPH) == TIM2) || \
                                      ((PERIPH) == TIM3) || \
                                      ((PERIPH) == TIM4) || \
                                      ((PERIPH) == TIM5) || \
                                      ((PERIPH) == TIM6) || \
                                      ((PERIPH) == TIM7) || \
                                      ((PERIPH) == TIM8) || \
                                      ((PERIPH) == TIM9) || \
                                      ((PERIPH) == TIM12)|| \
                                      ((PERIPH) == TIM15))
/* LIST8: TIM 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16 and 17 */
#define IS_TIM_LIST8_PERIPH(PERIPH)  (((PERIPH) == TIM1) || \
                                      ((PERIPH) == TIM2) || \
                                      ((PERIPH) == TIM3) || \
                                      ((PERIPH) == TIM4) || \
                                      ((PERIPH) == TIM5) || \
                                      ((PERIPH) == TIM8) || \
                                      ((PERIPH) == TIM9) || \
                                      ((PERIPH) == TIM10)|| \
                                      ((PERIPH) == TIM11)|| \
                                      ((PERIPH) == TIM12)|| \
                                      ((PERIPH) == TIM13)|| \
                                      ((PERIPH) == TIM14)|| \
                                      ((PERIPH) == TIM15)|| \
                                      ((PERIPH) == TIM16)|| \
                                      ((PERIPH) == TIM17))
/* LIST9: TIM 1, 2, 3, 4, 5, 6, 7, 8, 15, 16, and 17 */
#define IS_TIM_LIST9_PERIPH(PERIPH)  (((PERIPH) == TIM1) || \
                                      ((PERIPH) == TIM2) || \
                                      ((PERIPH) == TIM3) || \
                                      ((PERIPH) == TIM4) || \
                                      ((PERIPH) == TIM5) || \
                                      ((PERIPH) == TIM6) || \
                                      ((PERIPH) == TIM7) || \
                                      ((PERIPH) == TIM8) || \
                                      ((PERIPH) == TIM15)|| \
                                      ((PERIPH) == TIM16)|| \
                                      ((PERIPH) == TIM17))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_and_PWM_modes
  * @{
  */
#define TIM_OCMode_Timing                  ((uint16_t)0x0000)
#define TIM_OCMode_Active                  ((uint16_t)0x0010)
#define TIM_OCMode_Inactive                ((uint16_t)0x0020)
#define TIM_OCMode_Toggle                  ((uint16_t)0x0030)
#define TIM_OCMode_PWM1                    ((uint16_t)0x0060)
#define TIM_OCMode_PWM2                    ((uint16_t)0x0070)
#define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMode_Timing) || \
                              ((MODE) == TIM_OCMode_Active) || \
                              ((MODE) == TIM_OCMode_Inactive) || \
                              ((MODE) == TIM_OCMode_Toggle)|| \
                              ((MODE) == TIM_OCMode_PWM1) || \
                              ((MODE) == TIM_OCMode_PWM2))
#define IS_TIM_OCM(MODE) (((MODE) == TIM_OCMode_Timing) || \
                          ((MODE) == TIM_OCMode_Active) || \
                          ((MODE) == TIM_OCMode_Inactive) || \
                          ((MODE) == TIM_OCMode_Toggle)|| \
                          ((MODE) == TIM_OCMode_PWM1) || \
                          ((MODE) == TIM_OCMode_PWM2) ||    \
                          ((MODE) == TIM_ForcedAction_Active) || \
                          ((MODE) == TIM_ForcedAction_InActive))
/**
  * @}
  */
/** @defgroup TIM_One_Pulse_Mode
  * @{
  */
#define TIM_OPMode_Single                  ((uint16_t)0x0008)
#define TIM_OPMode_Repetitive              ((uint16_t)0x0000)
#define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMode_Single) || \
                               ((MODE) == TIM_OPMode_Repetitive))
/**
  * @}
  */
/** @defgroup TIM_Channel
  * @{
  */
#define TIM_Channel_1                      ((uint16_t)0x0000)
#define TIM_Channel_2                      ((uint16_t)0x0004)
#define TIM_Channel_3                      ((uint16_t)0x0008)
#define TIM_Channel_4                      ((uint16_t)0x000C)
#define IS_TIM_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
                                 ((CHANNEL) == TIM_Channel_2) || \
                                 ((CHANNEL) == TIM_Channel_3) || \
                                 ((CHANNEL) == TIM_Channel_4))
#define IS_TIM_PWMI_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
                                      ((CHANNEL) == TIM_Channel_2))
#define IS_TIM_COMPLEMENTARY_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
                                               ((CHANNEL) == TIM_Channel_2) || \
                                               ((CHANNEL) == TIM_Channel_3))
/**
  * @}
  */
/** @defgroup TIM_Clock_Division_CKD
  * @{
  */
#define TIM_CKD_DIV1                       ((uint16_t)0x0000)
#define TIM_CKD_DIV2                       ((uint16_t)0x0100)
#define TIM_CKD_DIV4                       ((uint16_t)0x0200)
#define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \
                             ((DIV) == TIM_CKD_DIV2) || \
                             ((DIV) == TIM_CKD_DIV4))
/**
  * @}
  */
/** @defgroup TIM_Counter_Mode
  * @{
  */
#define TIM_CounterMode_Up                 ((uint16_t)0x0000)
#define TIM_CounterMode_Down               ((uint16_t)0x0010)
#define TIM_CounterMode_CenterAligned1     ((uint16_t)0x0020)
#define TIM_CounterMode_CenterAligned2     ((uint16_t)0x0040)
#define TIM_CounterMode_CenterAligned3     ((uint16_t)0x0060)
#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) ||  \
                                   ((MODE) == TIM_CounterMode_Down) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned1) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned2) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned3))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_Polarity
  * @{
  */
#define TIM_OCPolarity_High                ((uint16_t)0x0000)
#define TIM_OCPolarity_Low                 ((uint16_t)0x0002)
#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPolarity_High) || \
                                      ((POLARITY) == TIM_OCPolarity_Low))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_N_Polarity
  * @{
  */
#define TIM_OCNPolarity_High               ((uint16_t)0x0000)
#define TIM_OCNPolarity_Low                ((uint16_t)0x0008)
#define IS_TIM_OCN_POLARITY(POLARITY) (((POLARITY) == TIM_OCNPolarity_High) || \
                                       ((POLARITY) == TIM_OCNPolarity_Low))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_state
  * @{
  */
#define TIM_OutputState_Disable            ((uint16_t)0x0000)
#define TIM_OutputState_Enable             ((uint16_t)0x0001)
#define IS_TIM_OUTPUT_STATE(STATE) (((STATE) == TIM_OutputState_Disable) || \
                                    ((STATE) == TIM_OutputState_Enable))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_N_state
  * @{
  */
#define TIM_OutputNState_Disable           ((uint16_t)0x0000)
#define TIM_OutputNState_Enable            ((uint16_t)0x0004)
#define IS_TIM_OUTPUTN_STATE(STATE) (((STATE) == TIM_OutputNState_Disable) || \
                                     ((STATE) == TIM_OutputNState_Enable))
/**
  * @}
  */
/** @defgroup TIM_Capture_Compare_state
  * @{
  */
#define TIM_CCx_Enable                      ((uint16_t)0x0001)
#define TIM_CCx_Disable                     ((uint16_t)0x0000)
#define IS_TIM_CCX(CCX) (((CCX) == TIM_CCx_Enable) || \
                         ((CCX) == TIM_CCx_Disable))
/**
  * @}
  */
/** @defgroup TIM_Capture_Compare_N_state
  * @{
  */
#define TIM_CCxN_Enable                     ((uint16_t)0x0004)
#define TIM_CCxN_Disable                    ((uint16_t)0x0000)
#define IS_TIM_CCXN(CCXN) (((CCXN) == TIM_CCxN_Enable) || \
                           ((CCXN) == TIM_CCxN_Disable))
/**
  * @}
  */
/** @defgroup Break_Input_enable_disable
  * @{
  */
#define TIM_Break_Enable                   ((uint16_t)0x1000)
#define TIM_Break_Disable                  ((uint16_t)0x0000)
#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \
                                   ((STATE) == TIM_Break_Disable))
/**
  * @}
  */
/** @defgroup Break_Polarity
  * @{
  */
#define TIM_BreakPolarity_Low              ((uint16_t)0x0000)
#define TIM_BreakPolarity_High             ((uint16_t)0x2000)
#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \
                                         ((POLARITY) == TIM_BreakPolarity_High))
/**
  * @}
  */
/** @defgroup TIM_AOE_Bit_Set_Reset
  * @{
  */
#define TIM_AutomaticOutput_Enable         ((uint16_t)0x4000)
#define TIM_AutomaticOutput_Disable        ((uint16_t)0x0000)
#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \
                                              ((STATE) == TIM_AutomaticOutput_Disable))
/**
  * @}
  */
/** @defgroup Lock_level
  * @{
  */
#define TIM_LOCKLevel_OFF                  ((uint16_t)0x0000)
#define TIM_LOCKLevel_1                    ((uint16_t)0x0100)
#define TIM_LOCKLevel_2                    ((uint16_t)0x0200)
#define TIM_LOCKLevel_3                    ((uint16_t)0x0300)
#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \
                                  ((LEVEL) == TIM_LOCKLevel_1) || \
                                  ((LEVEL) == TIM_LOCKLevel_2) || \
                                  ((LEVEL) == TIM_LOCKLevel_3))
/**
  * @}
  */
/** @defgroup OSSI_Off_State_Selection_for_Idle_mode_state
  * @{
  */
#define TIM_OSSIState_Enable               ((uint16_t)0x0400)
#define TIM_OSSIState_Disable              ((uint16_t)0x0000)
#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \
                                  ((STATE) == TIM_OSSIState_Disable))
/**
  * @}
  */
/** @defgroup OSSR_Off_State_Selection_for_Run_mode_state
  * @{
  */
#define TIM_OSSRState_Enable               ((uint16_t)0x0800)
#define TIM_OSSRState_Disable              ((uint16_t)0x0000)
#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \
                                  ((STATE) == TIM_OSSRState_Disable))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_Idle_State
  * @{
  */
#define TIM_OCIdleState_Set                ((uint16_t)0x0100)
#define TIM_OCIdleState_Reset              ((uint16_t)0x0000)
#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \
                                    ((STATE) == TIM_OCIdleState_Reset))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_N_Idle_State
  * @{
  */
#define TIM_OCNIdleState_Set               ((uint16_t)0x0200)
#define TIM_OCNIdleState_Reset             ((uint16_t)0x0000)
#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \
                                     ((STATE) == TIM_OCNIdleState_Reset))
/**
  * @}
  */
/** @defgroup TIM_Input_Capture_Polarity
  * @{
  */
#define  TIM_ICPolarity_Rising             ((uint16_t)0x0000)
#define  TIM_ICPolarity_Falling            ((uint16_t)0x0002)
#define  TIM_ICPolarity_BothEdge           ((uint16_t)0x000A)
#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \
                                      ((POLARITY) == TIM_ICPolarity_Falling))
#define IS_TIM_IC_POLARITY_LITE(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \
                                           ((POLARITY) == TIM_ICPolarity_Falling)|| \
                                           ((POLARITY) == TIM_ICPolarity_BothEdge))
/**
  * @}
  */
/** @defgroup TIM_Input_Capture_Selection
  * @{
  */
#define TIM_ICSelection_DirectTI           ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be
                                                                   connected to IC1, IC2, IC3 or IC4, respectively */
#define TIM_ICSelection_IndirectTI         ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be
                                                                   connected to IC2, IC1, IC4 or IC3, respectively. */
#define TIM_ICSelection_TRC                ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */
#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \
                                        ((SELECTION) == TIM_ICSelection_IndirectTI) || \
                                        ((SELECTION) == TIM_ICSelection_TRC))
/**
  * @}
  */
/** @defgroup TIM_Input_Capture_Prescaler
  * @{
  */
#define TIM_ICPSC_DIV1                     ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */
#define TIM_ICPSC_DIV2                     ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */
#define TIM_ICPSC_DIV4                     ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */
#define TIM_ICPSC_DIV8                     ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */
#define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \
                                        ((PRESCALER) == TIM_ICPSC_DIV2) || \
                                        ((PRESCALER) == TIM_ICPSC_DIV4) || \
                                        ((PRESCALER) == TIM_ICPSC_DIV8))
/**
  * @}
  */
/** @defgroup TIM_interrupt_sources
  * @{
  */
#define TIM_IT_Update                      ((uint16_t)0x0001)
#define TIM_IT_CC1                         ((uint16_t)0x0002)
#define TIM_IT_CC2                         ((uint16_t)0x0004)
#define TIM_IT_CC3                         ((uint16_t)0x0008)
#define TIM_IT_CC4                         ((uint16_t)0x0010)
#define TIM_IT_COM                         ((uint16_t)0x0020)
#define TIM_IT_Trigger                     ((uint16_t)0x0040)
#define TIM_IT_Break                       ((uint16_t)0x0080)
#define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000))
#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \
                           ((IT) == TIM_IT_CC1) || \
                           ((IT) == TIM_IT_CC2) || \
                           ((IT) == TIM_IT_CC3) || \
                           ((IT) == TIM_IT_CC4) || \
                           ((IT) == TIM_IT_COM) || \
                           ((IT) == TIM_IT_Trigger) || \
                           ((IT) == TIM_IT_Break))
/**
  * @}
  */
/** @defgroup TIM_DMA_Base_address
  * @{
  */
#define TIM_DMABase_CR1                    ((uint16_t)0x0000)
#define TIM_DMABase_CR2                    ((uint16_t)0x0001)
#define TIM_DMABase_SMCR                   ((uint16_t)0x0002)
#define TIM_DMABase_DIER                   ((uint16_t)0x0003)
#define TIM_DMABase_SR                     ((uint16_t)0x0004)
#define TIM_DMABase_EGR                    ((uint16_t)0x0005)
#define TIM_DMABase_CCMR1                  ((uint16_t)0x0006)
#define TIM_DMABase_CCMR2                  ((uint16_t)0x0007)
#define TIM_DMABase_CCER                   ((uint16_t)0x0008)
#define TIM_DMABase_CNT                    ((uint16_t)0x0009)
#define TIM_DMABase_PSC                    ((uint16_t)0x000A)
#define TIM_DMABase_ARR                    ((uint16_t)0x000B)
#define TIM_DMABase_RCR                    ((uint16_t)0x000C)
#define TIM_DMABase_CCR1                   ((uint16_t)0x000D)
#define TIM_DMABase_CCR2                   ((uint16_t)0x000E)
#define TIM_DMABase_CCR3                   ((uint16_t)0x000F)
#define TIM_DMABase_CCR4                   ((uint16_t)0x0010)
#define TIM_DMABase_BDTR                   ((uint16_t)0x0011)
#define TIM_DMABase_DCR                    ((uint16_t)0x0012)
#define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABase_CR1) || \
                               ((BASE) == TIM_DMABase_CR2) || \
                               ((BASE) == TIM_DMABase_SMCR) || \
                               ((BASE) == TIM_DMABase_DIER) || \
                               ((BASE) == TIM_DMABase_SR) || \
                               ((BASE) == TIM_DMABase_EGR) || \
                               ((BASE) == TIM_DMABase_CCMR1) || \
                               ((BASE) == TIM_DMABase_CCMR2) || \
                               ((BASE) == TIM_DMABase_CCER) || \
                               ((BASE) == TIM_DMABase_CNT) || \
                               ((BASE) == TIM_DMABase_PSC) || \
                               ((BASE) == TIM_DMABase_ARR) || \
                               ((BASE) == TIM_DMABase_RCR) || \
                               ((BASE) == TIM_DMABase_CCR1) || \
                               ((BASE) == TIM_DMABase_CCR2) || \
                               ((BASE) == TIM_DMABase_CCR3) || \
                               ((BASE) == TIM_DMABase_CCR4) || \
                               ((BASE) == TIM_DMABase_BDTR) || \
                               ((BASE) == TIM_DMABase_DCR))
/**
  * @}
  */
/** @defgroup TIM_DMA_Burst_Length
  * @{
  */
#define TIM_DMABurstLength_1Transfer           ((uint16_t)0x0000)
#define TIM_DMABurstLength_2Transfers          ((uint16_t)0x0100)
#define TIM_DMABurstLength_3Transfers          ((uint16_t)0x0200)
#define TIM_DMABurstLength_4Transfers          ((uint16_t)0x0300)
#define TIM_DMABurstLength_5Transfers          ((uint16_t)0x0400)
#define TIM_DMABurstLength_6Transfers          ((uint16_t)0x0500)
#define TIM_DMABurstLength_7Transfers          ((uint16_t)0x0600)
#define TIM_DMABurstLength_8Transfers          ((uint16_t)0x0700)
#define TIM_DMABurstLength_9Transfers          ((uint16_t)0x0800)
#define TIM_DMABurstLength_10Transfers         ((uint16_t)0x0900)
#define TIM_DMABurstLength_11Transfers         ((uint16_t)0x0A00)
#define TIM_DMABurstLength_12Transfers         ((uint16_t)0x0B00)
#define TIM_DMABurstLength_13Transfers         ((uint16_t)0x0C00)
#define TIM_DMABurstLength_14Transfers         ((uint16_t)0x0D00)
#define TIM_DMABurstLength_15Transfers         ((uint16_t)0x0E00)
#define TIM_DMABurstLength_16Transfers         ((uint16_t)0x0F00)
#define TIM_DMABurstLength_17Transfers         ((uint16_t)0x1000)
#define TIM_DMABurstLength_18Transfers         ((uint16_t)0x1100)
#define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABurstLength_1Transfer) || \
                                   ((LENGTH) == TIM_DMABurstLength_2Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_3Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_4Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_5Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_6Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_7Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_8Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_9Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_10Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_11Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_12Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_13Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_14Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_15Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_16Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_17Transfers) || \
                                   ((LENGTH) == TIM_DMABurstLength_18Transfers))
/**
  * @}
  */
/** @defgroup TIM_DMA_sources
  * @{
  */
#define TIM_DMA_Update                     ((uint16_t)0x0100)
#define TIM_DMA_CC1                        ((uint16_t)0x0200)
#define TIM_DMA_CC2                        ((uint16_t)0x0400)
#define TIM_DMA_CC3                        ((uint16_t)0x0800)
#define TIM_DMA_CC4                        ((uint16_t)0x1000)
#define TIM_DMA_COM                        ((uint16_t)0x2000)
#define TIM_DMA_Trigger                    ((uint16_t)0x4000)
#define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000))
/**
  * @}
  */
/** @defgroup TIM_External_Trigger_Prescaler
  * @{
  */
#define TIM_ExtTRGPSC_OFF                  ((uint16_t)0x0000)
#define TIM_ExtTRGPSC_DIV2                 ((uint16_t)0x1000)
#define TIM_ExtTRGPSC_DIV4                 ((uint16_t)0x2000)
#define TIM_ExtTRGPSC_DIV8                 ((uint16_t)0x3000)
#define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \
                                         ((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \
                                         ((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \
                                         ((PRESCALER) == TIM_ExtTRGPSC_DIV8))
/**
  * @}
  */
/** @defgroup TIM_Internal_Trigger_Selection
  * @{
  */
#define TIM_TS_ITR0                        ((uint16_t)0x0000)
#define TIM_TS_ITR1                        ((uint16_t)0x0010)
#define TIM_TS_ITR2                        ((uint16_t)0x0020)
#define TIM_TS_ITR3                        ((uint16_t)0x0030)
#define TIM_TS_TI1F_ED                     ((uint16_t)0x0040)
#define TIM_TS_TI1FP1                      ((uint16_t)0x0050)
#define TIM_TS_TI2FP2                      ((uint16_t)0x0060)
#define TIM_TS_ETRF                        ((uint16_t)0x0070)
#define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \
                                             ((SELECTION) == TIM_TS_ITR1) || \
                                             ((SELECTION) == TIM_TS_ITR2) || \
                                             ((SELECTION) == TIM_TS_ITR3) || \
                                             ((SELECTION) == TIM_TS_TI1F_ED) || \
                                             ((SELECTION) == TIM_TS_TI1FP1) || \
                                             ((SELECTION) == TIM_TS_TI2FP2) || \
                                             ((SELECTION) == TIM_TS_ETRF))
#define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \
                                                      ((SELECTION) == TIM_TS_ITR1) || \
                                                      ((SELECTION) == TIM_TS_ITR2) || \
                                                      ((SELECTION) == TIM_TS_ITR3))
/**
  * @}
  */
/** @defgroup TIM_TIx_External_Clock_Source
  * @{
  */
#define TIM_TIxExternalCLK1Source_TI1      ((uint16_t)0x0050)
#define TIM_TIxExternalCLK1Source_TI2      ((uint16_t)0x0060)
#define TIM_TIxExternalCLK1Source_TI1ED    ((uint16_t)0x0040)
#define IS_TIM_TIXCLK_SOURCE(SOURCE) (((SOURCE) == TIM_TIxExternalCLK1Source_TI1) || \
                                      ((SOURCE) == TIM_TIxExternalCLK1Source_TI2) || \
                                      ((SOURCE) == TIM_TIxExternalCLK1Source_TI1ED))
/**
  * @}
  */
/** @defgroup TIM_External_Trigger_Polarity
  * @{
  */
#define TIM_ExtTRGPolarity_Inverted        ((uint16_t)0x8000)
#define TIM_ExtTRGPolarity_NonInverted     ((uint16_t)0x0000)
#define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \
                                       ((POLARITY) == TIM_ExtTRGPolarity_NonInverted))
/**
  * @}
  */
/** @defgroup TIM_Prescaler_Reload_Mode
  * @{
  */
#define TIM_PSCReloadMode_Update           ((uint16_t)0x0000)
#define TIM_PSCReloadMode_Immediate        ((uint16_t)0x0001)
#define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \
                                         ((RELOAD) == TIM_PSCReloadMode_Immediate))
/**
  * @}
  */
/** @defgroup TIM_Forced_Action
  * @{
  */
#define TIM_ForcedAction_Active            ((uint16_t)0x0050)
#define TIM_ForcedAction_InActive          ((uint16_t)0x0040)
#define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \
                                      ((ACTION) == TIM_ForcedAction_InActive))
/**
  * @}
  */
/** @defgroup TIM_Encoder_Mode
  * @{
  */
#define TIM_EncoderMode_TI1                ((uint16_t)0x0001)
#define TIM_EncoderMode_TI2                ((uint16_t)0x0002)
#define TIM_EncoderMode_TI12               ((uint16_t)0x0003)
#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \
                                   ((MODE) == TIM_EncoderMode_TI2) || \
                                   ((MODE) == TIM_EncoderMode_TI12))
/**
  * @}
  */
/** @defgroup TIM_Event_Source
  * @{
  */
#define TIM_EventSource_Update             ((uint16_t)0x0001)
#define TIM_EventSource_CC1                ((uint16_t)0x0002)
#define TIM_EventSource_CC2                ((uint16_t)0x0004)
#define TIM_EventSource_CC3                ((uint16_t)0x0008)
#define TIM_EventSource_CC4                ((uint16_t)0x0010)
#define TIM_EventSource_COM                ((uint16_t)0x0020)
#define TIM_EventSource_Trigger            ((uint16_t)0x0040)
#define TIM_EventSource_Break              ((uint16_t)0x0080)
#define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000))
/**
  * @}
  */
/** @defgroup TIM_Update_Source
  * @{
  */
#define TIM_UpdateSource_Global            ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow
                                                                   or the setting of UG bit, or an update generation
                                                                   through the slave mode controller. */
#define TIM_UpdateSource_Regular           ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */
#define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \
                                      ((SOURCE) == TIM_UpdateSource_Regular))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_Preload_State
  * @{
  */
#define TIM_OCPreload_Enable               ((uint16_t)0x0008)
#define TIM_OCPreload_Disable              ((uint16_t)0x0000)
#define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \
                                       ((STATE) == TIM_OCPreload_Disable))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_Fast_State
  * @{
  */
#define TIM_OCFast_Enable                  ((uint16_t)0x0004)
#define TIM_OCFast_Disable                 ((uint16_t)0x0000)
#define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \
                                    ((STATE) == TIM_OCFast_Disable))
/**
  * @}
  */
/** @defgroup TIM_Output_Compare_Clear_State
  * @{
  */
#define TIM_OCClear_Enable                 ((uint16_t)0x0080)
#define TIM_OCClear_Disable                ((uint16_t)0x0000)
#define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \
                                     ((STATE) == TIM_OCClear_Disable))
/**
  * @}
  */
/** @defgroup TIM_Trigger_Output_Source
  * @{
  */
#define TIM_TRGOSource_Reset               ((uint16_t)0x0000)
#define TIM_TRGOSource_Enable              ((uint16_t)0x0010)
#define TIM_TRGOSource_Update              ((uint16_t)0x0020)
#define TIM_TRGOSource_OC1                 ((uint16_t)0x0030)
#define TIM_TRGOSource_OC1Ref              ((uint16_t)0x0040)
#define TIM_TRGOSource_OC2Ref              ((uint16_t)0x0050)
#define TIM_TRGOSource_OC3Ref              ((uint16_t)0x0060)
#define TIM_TRGOSource_OC4Ref              ((uint16_t)0x0070)
#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \
                                    ((SOURCE) == TIM_TRGOSource_Enable) || \
                                    ((SOURCE) == TIM_TRGOSource_Update) || \
                                    ((SOURCE) == TIM_TRGOSource_OC1) || \
                                    ((SOURCE) == TIM_TRGOSource_OC1Ref) || \
                                    ((SOURCE) == TIM_TRGOSource_OC2Ref) || \
                                    ((SOURCE) == TIM_TRGOSource_OC3Ref) || \
                                    ((SOURCE) == TIM_TRGOSource_OC4Ref))
/**
  * @}
  */
/** @defgroup TIM_Slave_Mode
  * @{
  */
#define TIM_SlaveMode_Reset                ((uint16_t)0x0004)
#define TIM_SlaveMode_Gated                ((uint16_t)0x0005)
#define TIM_SlaveMode_Trigger              ((uint16_t)0x0006)
#define TIM_SlaveMode_External1            ((uint16_t)0x0007)
#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \
                                 ((MODE) == TIM_SlaveMode_Gated) || \
                                 ((MODE) == TIM_SlaveMode_Trigger) || \
                                 ((MODE) == TIM_SlaveMode_External1))
/**
  * @}
  */
/** @defgroup TIM_Master_Slave_Mode
  * @{
  */
#define TIM_MasterSlaveMode_Enable         ((uint16_t)0x0080)
#define TIM_MasterSlaveMode_Disable        ((uint16_t)0x0000)
#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \
                                 ((STATE) == TIM_MasterSlaveMode_Disable))
/**
  * @}
  */
/** @defgroup TIM_Flags
  * @{
  */
#define TIM_FLAG_Update                    ((uint16_t)0x0001)
#define TIM_FLAG_CC1                       ((uint16_t)0x0002)
#define TIM_FLAG_CC2                       ((uint16_t)0x0004)
#define TIM_FLAG_CC3                       ((uint16_t)0x0008)
#define TIM_FLAG_CC4                       ((uint16_t)0x0010)
#define TIM_FLAG_COM                       ((uint16_t)0x0020)
#define TIM_FLAG_Trigger                   ((uint16_t)0x0040)
#define TIM_FLAG_Break                     ((uint16_t)0x0080)
#define TIM_FLAG_CC1OF                     ((uint16_t)0x0200)
#define TIM_FLAG_CC2OF                     ((uint16_t)0x0400)
#define TIM_FLAG_CC3OF                     ((uint16_t)0x0800)
#define TIM_FLAG_CC4OF                     ((uint16_t)0x1000)
#define IS_TIM_GET_FLAG(FLAG) (((FLAG) == TIM_FLAG_Update) || \
                               ((FLAG) == TIM_FLAG_CC1) || \
                               ((FLAG) == TIM_FLAG_CC2) || \
                               ((FLAG) == TIM_FLAG_CC3) || \
                               ((FLAG) == TIM_FLAG_CC4) || \
                               ((FLAG) == TIM_FLAG_COM) || \
                               ((FLAG) == TIM_FLAG_Trigger) || \
                               ((FLAG) == TIM_FLAG_Break) || \
                               ((FLAG) == TIM_FLAG_CC1OF) || \
                               ((FLAG) == TIM_FLAG_CC2OF) || \
                               ((FLAG) == TIM_FLAG_CC3OF) || \
                               ((FLAG) == TIM_FLAG_CC4OF))
#define IS_TIM_CLEAR_FLAG(TIM_FLAG) ((((TIM_FLAG) & (uint16_t)0xE100) == 0x0000) && ((TIM_FLAG) != 0x0000))
/**
  * @}
  */
/** @defgroup TIM_Input_Capture_Filer_Value
  * @{
  */
#define IS_TIM_IC_FILTER(ICFILTER) ((ICFILTER) <= 0xF)
/**
  * @}
  */
/** @defgroup TIM_External_Trigger_Filter
  * @{
  */
#define IS_TIM_EXT_FILTER(EXTFILTER) ((EXTFILTER) <= 0xF)
/**
  * @}
  */
/** @defgroup TIM_Legacy
  * @{
  */
#define TIM_DMABurstLength_1Byte           TIM_DMABurstLength_1Transfer
#define TIM_DMABurstLength_2Bytes          TIM_DMABurstLength_2Transfers
#define TIM_DMABurstLength_3Bytes          TIM_DMABurstLength_3Transfers
#define TIM_DMABurstLength_4Bytes          TIM_DMABurstLength_4Transfers
#define TIM_DMABurstLength_5Bytes          TIM_DMABurstLength_5Transfers
#define TIM_DMABurstLength_6Bytes          TIM_DMABurstLength_6Transfers
#define TIM_DMABurstLength_7Bytes          TIM_DMABurstLength_7Transfers
#define TIM_DMABurstLength_8Bytes          TIM_DMABurstLength_8Transfers
#define TIM_DMABurstLength_9Bytes          TIM_DMABurstLength_9Transfers
#define TIM_DMABurstLength_10Bytes         TIM_DMABurstLength_10Transfers
#define TIM_DMABurstLength_11Bytes         TIM_DMABurstLength_11Transfers
#define TIM_DMABurstLength_12Bytes         TIM_DMABurstLength_12Transfers
#define TIM_DMABurstLength_13Bytes         TIM_DMABurstLength_13Transfers
#define TIM_DMABurstLength_14Bytes         TIM_DMABurstLength_14Transfers
#define TIM_DMABurstLength_15Bytes         TIM_DMABurstLength_15Transfers
#define TIM_DMABurstLength_16Bytes         TIM_DMABurstLength_16Transfers
#define TIM_DMABurstLength_17Bytes         TIM_DMABurstLength_17Transfers
#define TIM_DMABurstLength_18Bytes         TIM_DMABurstLength_18Transfers
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup TIM_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup TIM_Exported_Functions
  * @{
  */
void TIM_DeInit(TIM_TypeDef* TIMx);
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct);
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct);
void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct);
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource);
void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength);
void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState);
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
                                uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);
void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);
void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);
void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);
void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource);
void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState);
void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode);
void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);
void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode);
void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode);
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD);
uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx);
uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx);
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
#ifdef __cplusplus
}
#endif
#endif /*__STM32F10x_TIM_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_usart.h
New file
@@ -0,0 +1,412 @@
/**
  ******************************************************************************
  * @file    stm32f10x_usart.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the USART
  *          firmware library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_USART_H
#define __STM32F10x_USART_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup USART
  * @{
  */
/** @defgroup USART_Exported_Types
  * @{
  */
/**
  * @brief  USART Init Structure definition
  */
typedef struct
{
  uint32_t USART_BaudRate;            /*!< This member configures the USART communication baud rate.
                                           The baud rate is computed using the following formula:
                                            - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate)))
                                            - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */
  uint16_t USART_WordLength;          /*!< Specifies the number of data bits transmitted or received in a frame.
                                           This parameter can be a value of @ref USART_Word_Length */
  uint16_t USART_StopBits;            /*!< Specifies the number of stop bits transmitted.
                                           This parameter can be a value of @ref USART_Stop_Bits */
  uint16_t USART_Parity;              /*!< Specifies the parity mode.
                                           This parameter can be a value of @ref USART_Parity
                                           @note When parity is enabled, the computed parity is inserted
                                                 at the MSB position of the transmitted data (9th bit when
                                                 the word length is set to 9 data bits; 8th bit when the
                                                 word length is set to 8 data bits). */
  uint16_t USART_Mode;                /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
                                           This parameter can be a value of @ref USART_Mode */
  uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled
                                           or disabled.
                                           This parameter can be a value of @ref USART_Hardware_Flow_Control */
} USART_InitTypeDef;
/**
  * @brief  USART Clock Init Structure definition
  */
typedef struct
{
  uint16_t USART_Clock;   /*!< Specifies whether the USART clock is enabled or disabled.
                               This parameter can be a value of @ref USART_Clock */
  uint16_t USART_CPOL;    /*!< Specifies the steady state value of the serial clock.
                               This parameter can be a value of @ref USART_Clock_Polarity */
  uint16_t USART_CPHA;    /*!< Specifies the clock transition on which the bit capture is made.
                               This parameter can be a value of @ref USART_Clock_Phase */
  uint16_t USART_LastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted
                               data bit (MSB) has to be output on the SCLK pin in synchronous mode.
                               This parameter can be a value of @ref USART_Last_Bit */
} USART_ClockInitTypeDef;
/**
  * @}
  */
/** @defgroup USART_Exported_Constants
  * @{
  */
#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \
                                     ((PERIPH) == USART2) || \
                                     ((PERIPH) == USART3) || \
                                     ((PERIPH) == UART4) || \
                                     ((PERIPH) == UART5))
#define IS_USART_123_PERIPH(PERIPH) (((PERIPH) == USART1) || \
                                     ((PERIPH) == USART2) || \
                                     ((PERIPH) == USART3))
#define IS_USART_1234_PERIPH(PERIPH) (((PERIPH) == USART1) || \
                                      ((PERIPH) == USART2) || \
                                      ((PERIPH) == USART3) || \
                                      ((PERIPH) == UART4))
/** @defgroup USART_Word_Length
  * @{
  */
#define USART_WordLength_8b                  ((uint16_t)0x0000)
#define USART_WordLength_9b                  ((uint16_t)0x1000)
#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \
                                      ((LENGTH) == USART_WordLength_9b))
/**
  * @}
  */
/** @defgroup USART_Stop_Bits
  * @{
  */
#define USART_StopBits_1                     ((uint16_t)0x0000)
#define USART_StopBits_0_5                   ((uint16_t)0x1000)
#define USART_StopBits_2                     ((uint16_t)0x2000)
#define USART_StopBits_1_5                   ((uint16_t)0x3000)
#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \
                                     ((STOPBITS) == USART_StopBits_0_5) || \
                                     ((STOPBITS) == USART_StopBits_2) || \
                                     ((STOPBITS) == USART_StopBits_1_5))
/**
  * @}
  */
/** @defgroup USART_Parity
  * @{
  */
#define USART_Parity_No                      ((uint16_t)0x0000)
#define USART_Parity_Even                    ((uint16_t)0x0400)
#define USART_Parity_Odd                     ((uint16_t)0x0600)
#define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \
                                 ((PARITY) == USART_Parity_Even) || \
                                 ((PARITY) == USART_Parity_Odd))
/**
  * @}
  */
/** @defgroup USART_Mode
  * @{
  */
#define USART_Mode_Rx                        ((uint16_t)0x0004)
#define USART_Mode_Tx                        ((uint16_t)0x0008)
#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))
/**
  * @}
  */
/** @defgroup USART_Hardware_Flow_Control
  * @{
  */
#define USART_HardwareFlowControl_None       ((uint16_t)0x0000)
#define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)
#define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)
#define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)
#define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\
                              (((CONTROL) == USART_HardwareFlowControl_None) || \
                               ((CONTROL) == USART_HardwareFlowControl_RTS) || \
                               ((CONTROL) == USART_HardwareFlowControl_CTS) || \
                               ((CONTROL) == USART_HardwareFlowControl_RTS_CTS))
/**
  * @}
  */
/** @defgroup USART_Clock
  * @{
  */
#define USART_Clock_Disable                  ((uint16_t)0x0000)
#define USART_Clock_Enable                   ((uint16_t)0x0800)
#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \
                               ((CLOCK) == USART_Clock_Enable))
/**
  * @}
  */
/** @defgroup USART_Clock_Polarity
  * @{
  */
#define USART_CPOL_Low                       ((uint16_t)0x0000)
#define USART_CPOL_High                      ((uint16_t)0x0400)
#define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High))
/**
  * @}
  */
/** @defgroup USART_Clock_Phase
  * @{
  */
#define USART_CPHA_1Edge                     ((uint16_t)0x0000)
#define USART_CPHA_2Edge                     ((uint16_t)0x0200)
#define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge))
/**
  * @}
  */
/** @defgroup USART_Last_Bit
  * @{
  */
#define USART_LastBit_Disable                ((uint16_t)0x0000)
#define USART_LastBit_Enable                 ((uint16_t)0x0100)
#define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \
                                   ((LASTBIT) == USART_LastBit_Enable))
/**
  * @}
  */
/** @defgroup USART_Interrupt_definition
  * @{
  */
#define USART_IT_PE                          ((uint16_t)0x0028)
#define USART_IT_TXE                         ((uint16_t)0x0727)
#define USART_IT_TC                          ((uint16_t)0x0626)
#define USART_IT_RXNE                        ((uint16_t)0x0525)
#define USART_IT_IDLE                        ((uint16_t)0x0424)
#define USART_IT_LBD                         ((uint16_t)0x0846)
#define USART_IT_CTS                         ((uint16_t)0x096A)
#define USART_IT_ERR                         ((uint16_t)0x0060)
#define USART_IT_ORE                         ((uint16_t)0x0360)
#define USART_IT_NE                          ((uint16_t)0x0260)
#define USART_IT_FE                          ((uint16_t)0x0160)
#define IS_USART_CONFIG_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \
                               ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \
                               ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \
                               ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ERR))
#define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \
                            ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \
                            ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \
                            ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) || \
                            ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE))
#define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \
                               ((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS))
/**
  * @}
  */
/** @defgroup USART_DMA_Requests
  * @{
  */
#define USART_DMAReq_Tx                      ((uint16_t)0x0080)
#define USART_DMAReq_Rx                      ((uint16_t)0x0040)
#define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00))
/**
  * @}
  */
/** @defgroup USART_WakeUp_methods
  * @{
  */
#define USART_WakeUp_IdleLine                ((uint16_t)0x0000)
#define USART_WakeUp_AddressMark             ((uint16_t)0x0800)
#define IS_USART_WAKEUP(WAKEUP) (((WAKEUP) == USART_WakeUp_IdleLine) || \
                                 ((WAKEUP) == USART_WakeUp_AddressMark))
/**
  * @}
  */
/** @defgroup USART_LIN_Break_Detection_Length
  * @{
  */
#define USART_LINBreakDetectLength_10b      ((uint16_t)0x0000)
#define USART_LINBreakDetectLength_11b      ((uint16_t)0x0020)
#define IS_USART_LIN_BREAK_DETECT_LENGTH(LENGTH) \
                               (((LENGTH) == USART_LINBreakDetectLength_10b) || \
                                ((LENGTH) == USART_LINBreakDetectLength_11b))
/**
  * @}
  */
/** @defgroup USART_IrDA_Low_Power
  * @{
  */
#define USART_IrDAMode_LowPower              ((uint16_t)0x0004)
#define USART_IrDAMode_Normal                ((uint16_t)0x0000)
#define IS_USART_IRDA_MODE(MODE) (((MODE) == USART_IrDAMode_LowPower) || \
                                  ((MODE) == USART_IrDAMode_Normal))
/**
  * @}
  */
/** @defgroup USART_Flags
  * @{
  */
#define USART_FLAG_CTS                       ((uint16_t)0x0200)
#define USART_FLAG_LBD                       ((uint16_t)0x0100)
#define USART_FLAG_TXE                       ((uint16_t)0x0080)
#define USART_FLAG_TC                        ((uint16_t)0x0040)
#define USART_FLAG_RXNE                      ((uint16_t)0x0020)
#define USART_FLAG_IDLE                      ((uint16_t)0x0010)
#define USART_FLAG_ORE                       ((uint16_t)0x0008)
#define USART_FLAG_NE                        ((uint16_t)0x0004)
#define USART_FLAG_FE                        ((uint16_t)0x0002)
#define USART_FLAG_PE                        ((uint16_t)0x0001)
#define IS_USART_FLAG(FLAG) (((FLAG) == USART_FLAG_PE) || ((FLAG) == USART_FLAG_TXE) || \
                             ((FLAG) == USART_FLAG_TC) || ((FLAG) == USART_FLAG_RXNE) || \
                             ((FLAG) == USART_FLAG_IDLE) || ((FLAG) == USART_FLAG_LBD) || \
                             ((FLAG) == USART_FLAG_CTS) || ((FLAG) == USART_FLAG_ORE) || \
                             ((FLAG) == USART_FLAG_NE) || ((FLAG) == USART_FLAG_FE))
#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00))
#define IS_USART_PERIPH_FLAG(PERIPH, USART_FLAG) ((((*(uint32_t*)&(PERIPH)) != UART4_BASE) &&\
                                                  ((*(uint32_t*)&(PERIPH)) != UART5_BASE)) \
                                                  || ((USART_FLAG) != USART_FLAG_CTS))
#define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 0x0044AA21))
#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF)
#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF)
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup USART_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup USART_Exported_Functions
  * @{
  */
void USART_DeInit(USART_TypeDef* USARTx);
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);
void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);
void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength);
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
void USART_SendBreak(USART_TypeDef* USARTx);
void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime);
void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);
void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_USART_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/stm32f10x_wwdg.h
New file
@@ -0,0 +1,115 @@
/**
  ******************************************************************************
  * @file    stm32f10x_wwdg.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file contains all the functions prototypes for the WWDG firmware
  *          library.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_WWDG_H
#define __STM32F10x_WWDG_H
#ifdef __cplusplus
 extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @addtogroup WWDG
  * @{
  */
/** @defgroup WWDG_Exported_Types
  * @{
  */
/**
  * @}
  */
/** @defgroup WWDG_Exported_Constants
  * @{
  */
/** @defgroup WWDG_Prescaler
  * @{
  */
#define WWDG_Prescaler_1    ((uint32_t)0x00000000)
#define WWDG_Prescaler_2    ((uint32_t)0x00000080)
#define WWDG_Prescaler_4    ((uint32_t)0x00000100)
#define WWDG_Prescaler_8    ((uint32_t)0x00000180)
#define IS_WWDG_PRESCALER(PRESCALER) (((PRESCALER) == WWDG_Prescaler_1) || \
                                      ((PRESCALER) == WWDG_Prescaler_2) || \
                                      ((PRESCALER) == WWDG_Prescaler_4) || \
                                      ((PRESCALER) == WWDG_Prescaler_8))
#define IS_WWDG_WINDOW_VALUE(VALUE) ((VALUE) <= 0x7F)
#define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F))
/**
  * @}
  */
/**
  * @}
  */
/** @defgroup WWDG_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup WWDG_Exported_Functions
  * @{
  */
void WWDG_DeInit(void);
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
void WWDG_SetWindowValue(uint8_t WindowValue);
void WWDG_EnableIT(void);
void WWDG_SetCounter(uint8_t Counter);
void WWDG_Enable(uint8_t Counter);
FlagStatus WWDG_GetFlagStatus(void);
void WWDG_ClearFlag(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_WWDG_H */
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/inc/system_stm32f10x.h
New file
@@ -0,0 +1,98 @@
/**
  ******************************************************************************
  * @file    system_stm32f10x.h
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/** @addtogroup CMSIS
  * @{
  */
/** @addtogroup stm32f10x_system
  * @{
  */
/**
  * @brief Define to prevent recursive inclusion
  */
#ifndef __SYSTEM_STM32F10X_H
#define __SYSTEM_STM32F10X_H
#ifdef __cplusplus
 extern "C" {
#endif
/** @addtogroup STM32F10x_System_Includes
  * @{
  */
/**
  * @}
  */
/** @addtogroup STM32F10x_System_Exported_types
  * @{
  */
extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Clock) */
/**
  * @}
  */
/** @addtogroup STM32F10x_System_Exported_Constants
  * @{
  */
/**
  * @}
  */
/** @addtogroup STM32F10x_System_Exported_Macros
  * @{
  */
/**
  * @}
  */
/** @addtogroup STM32F10x_System_Exported_Functions
  * @{
  */
extern void SystemInit(void);
extern void SystemCoreClockUpdate(void);
/**
  * @}
  */
#ifdef __cplusplus
}
#endif
#endif /*__SYSTEM_STM32F10X_H */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/src/misc.c
New file
@@ -0,0 +1,225 @@
/**
  ******************************************************************************
  * @file    misc.c
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file provides all the miscellaneous firmware functions (add-on
  *          to CMSIS functions).
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "misc.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @defgroup MISC
  * @brief MISC driver modules
  * @{
  */
/** @defgroup MISC_Private_TypesDefinitions
  * @{
  */
/**
  * @}
  */
/** @defgroup MISC_Private_Defines
  * @{
  */
#define AIRCR_VECTKEY_MASK    ((uint32_t)0x05FA0000)
/**
  * @}
  */
/** @defgroup MISC_Private_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup MISC_Private_Variables
  * @{
  */
/**
  * @}
  */
/** @defgroup MISC_Private_FunctionPrototypes
  * @{
  */
/**
  * @}
  */
/** @defgroup MISC_Private_Functions
  * @{
  */
/**
  * @brief  Configures the priority grouping: pre-emption priority and subpriority.
  * @param  NVIC_PriorityGroup: specifies the priority grouping bits length.
  *   This parameter can be one of the following values:
  *     @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority
  *                                4 bits for subpriority
  *     @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority
  *                                3 bits for subpriority
  *     @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority
  *                                2 bits for subpriority
  *     @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority
  *                                1 bits for subpriority
  *     @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
  *                                0 bits for subpriority
  * @retval None
  */
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
  /* Check the parameters */
  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}
/**
  * @brief  Initializes the NVIC peripheral according to the specified
  *         parameters in the NVIC_InitStruct.
  * @param  NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
  *         the configuration information for the specified NVIC peripheral.
  * @retval None
  */
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
{
  uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
  assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
  if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
  {
    /* Compute the Corresponding IRQ Priority --------------------------------*/
    tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
    tmppre = (0x4 - tmppriority);
    tmpsub = tmpsub >> tmppriority;
    tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
    tmppriority = tmppriority << 0x04;
    NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
    /* Enable the Selected IRQ Channels --------------------------------------*/
    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
  }
  else
  {
    /* Disable the Selected IRQ Channels -------------------------------------*/
    NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
  }
}
/**
  * @brief  Sets the vector table location and Offset.
  * @param  NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory.
  *   This parameter can be one of the following values:
  *     @arg NVIC_VectTab_RAM
  *     @arg NVIC_VectTab_FLASH
  * @param  Offset: Vector Table base offset field. This value must be a multiple
  *         of 0x200.
  * @retval None
  */
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
{
  /* Check the parameters */
  assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
  assert_param(IS_NVIC_OFFSET(Offset));
  SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
}
/**
  * @brief  Selects the condition for the system to enter low power mode.
  * @param  LowPowerMode: Specifies the new mode for the system to enter low power mode.
  *   This parameter can be one of the following values:
  *     @arg NVIC_LP_SEVONPEND
  *     @arg NVIC_LP_SLEEPDEEP
  *     @arg NVIC_LP_SLEEPONEXIT
  * @param  NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_NVIC_LP(LowPowerMode));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    SCB->SCR |= LowPowerMode;
  }
  else
  {
    SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
  }
}
/**
  * @brief  Configures the SysTick clock source.
  * @param  SysTick_CLKSource: specifies the SysTick clock source.
  *   This parameter can be one of the following values:
  *     @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
  *     @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
  * @retval None
  */
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_adc.c
New file
@@ -0,0 +1,1307 @@
/**
  ******************************************************************************
  * @file    stm32f10x_adc.c
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file provides all the ADC firmware functions.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_adc.h"
#include "stm32f10x_rcc.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @defgroup ADC
  * @brief ADC driver modules
  * @{
  */
/** @defgroup ADC_Private_TypesDefinitions
  * @{
  */
/**
  * @}
  */
/** @defgroup ADC_Private_Defines
  * @{
  */
/* ADC DISCNUM mask */
#define CR1_DISCNUM_Reset           ((uint32_t)0xFFFF1FFF)
/* ADC DISCEN mask */
#define CR1_DISCEN_Set              ((uint32_t)0x00000800)
#define CR1_DISCEN_Reset            ((uint32_t)0xFFFFF7FF)
/* ADC JAUTO mask */
#define CR1_JAUTO_Set               ((uint32_t)0x00000400)
#define CR1_JAUTO_Reset             ((uint32_t)0xFFFFFBFF)
/* ADC JDISCEN mask */
#define CR1_JDISCEN_Set             ((uint32_t)0x00001000)
#define CR1_JDISCEN_Reset           ((uint32_t)0xFFFFEFFF)
/* ADC AWDCH mask */
#define CR1_AWDCH_Reset             ((uint32_t)0xFFFFFFE0)
/* ADC Analog watchdog enable mode mask */
#define CR1_AWDMode_Reset           ((uint32_t)0xFF3FFDFF)
/* CR1 register Mask */
#define CR1_CLEAR_Mask              ((uint32_t)0xFFF0FEFF)
/* ADC ADON mask */
#define CR2_ADON_Set                ((uint32_t)0x00000001)
#define CR2_ADON_Reset              ((uint32_t)0xFFFFFFFE)
/* ADC DMA mask */
#define CR2_DMA_Set                 ((uint32_t)0x00000100)
#define CR2_DMA_Reset               ((uint32_t)0xFFFFFEFF)
/* ADC RSTCAL mask */
#define CR2_RSTCAL_Set              ((uint32_t)0x00000008)
/* ADC CAL mask */
#define CR2_CAL_Set                 ((uint32_t)0x00000004)
/* ADC SWSTART mask */
#define CR2_SWSTART_Set             ((uint32_t)0x00400000)
/* ADC EXTTRIG mask */
#define CR2_EXTTRIG_Set             ((uint32_t)0x00100000)
#define CR2_EXTTRIG_Reset           ((uint32_t)0xFFEFFFFF)
/* ADC Software start mask */
#define CR2_EXTTRIG_SWSTART_Set     ((uint32_t)0x00500000)
#define CR2_EXTTRIG_SWSTART_Reset   ((uint32_t)0xFFAFFFFF)
/* ADC JEXTSEL mask */
#define CR2_JEXTSEL_Reset           ((uint32_t)0xFFFF8FFF)
/* ADC JEXTTRIG mask */
#define CR2_JEXTTRIG_Set            ((uint32_t)0x00008000)
#define CR2_JEXTTRIG_Reset          ((uint32_t)0xFFFF7FFF)
/* ADC JSWSTART mask */
#define CR2_JSWSTART_Set            ((uint32_t)0x00200000)
/* ADC injected software start mask */
#define CR2_JEXTTRIG_JSWSTART_Set   ((uint32_t)0x00208000)
#define CR2_JEXTTRIG_JSWSTART_Reset ((uint32_t)0xFFDF7FFF)
/* ADC TSPD mask */
#define CR2_TSVREFE_Set             ((uint32_t)0x00800000)
#define CR2_TSVREFE_Reset           ((uint32_t)0xFF7FFFFF)
/* CR2 register Mask */
#define CR2_CLEAR_Mask              ((uint32_t)0xFFF1F7FD)
/* ADC SQx mask */
#define SQR3_SQ_Set                 ((uint32_t)0x0000001F)
#define SQR2_SQ_Set                 ((uint32_t)0x0000001F)
#define SQR1_SQ_Set                 ((uint32_t)0x0000001F)
/* SQR1 register Mask */
#define SQR1_CLEAR_Mask             ((uint32_t)0xFF0FFFFF)
/* ADC JSQx mask */
#define JSQR_JSQ_Set                ((uint32_t)0x0000001F)
/* ADC JL mask */
#define JSQR_JL_Set                 ((uint32_t)0x00300000)
#define JSQR_JL_Reset               ((uint32_t)0xFFCFFFFF)
/* ADC SMPx mask */
#define SMPR1_SMP_Set               ((uint32_t)0x00000007)
#define SMPR2_SMP_Set               ((uint32_t)0x00000007)
/* ADC JDRx registers offset */
#define JDR_Offset                  ((uint8_t)0x28)
/* ADC1 DR register base address */
#define DR_ADDRESS                  ((uint32_t)0x4001244C)
/**
  * @}
  */
/** @defgroup ADC_Private_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup ADC_Private_Variables
  * @{
  */
/**
  * @}
  */
/** @defgroup ADC_Private_FunctionPrototypes
  * @{
  */
/**
  * @}
  */
/** @defgroup ADC_Private_Functions
  * @{
  */
/**
  * @brief  Deinitializes the ADCx peripheral registers to their default reset values.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval None
  */
void ADC_DeInit(ADC_TypeDef* ADCx)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  if (ADCx == ADC1)
  {
    /* Enable ADC1 reset state */
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE);
    /* Release ADC1 from reset state */
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE);
  }
  else if (ADCx == ADC2)
  {
    /* Enable ADC2 reset state */
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, ENABLE);
    /* Release ADC2 from reset state */
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, DISABLE);
  }
  else
  {
    if (ADCx == ADC3)
    {
      /* Enable ADC3 reset state */
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE);
      /* Release ADC3 from reset state */
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE);
    }
  }
}
/**
  * @brief  Initializes the ADCx peripheral according to the specified parameters
  *         in the ADC_InitStruct.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains
  *         the configuration information for the specified ADC peripheral.
  * @retval None
  */
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
{
  uint32_t tmpreg1 = 0;
  uint8_t tmpreg2 = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_MODE(ADC_InitStruct->ADC_Mode));
  assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode));
  assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode));
  assert_param(IS_ADC_EXT_TRIG(ADC_InitStruct->ADC_ExternalTrigConv));
  assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign));
  assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel));
  /*---------------------------- ADCx CR1 Configuration -----------------*/
  /* Get the ADCx CR1 value */
  tmpreg1 = ADCx->CR1;
  /* Clear DUALMOD and SCAN bits */
  tmpreg1 &= CR1_CLEAR_Mask;
  /* Configure ADCx: Dual mode and scan conversion mode */
  /* Set DUALMOD bits according to ADC_Mode value */
  /* Set SCAN bit according to ADC_ScanConvMode value */
  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8));
  /* Write to ADCx CR1 */
  ADCx->CR1 = tmpreg1;
  /*---------------------------- ADCx CR2 Configuration -----------------*/
  /* Get the ADCx CR2 value */
  tmpreg1 = ADCx->CR2;
  /* Clear CONT, ALIGN and EXTSEL bits */
  tmpreg1 &= CR2_CLEAR_Mask;
  /* Configure ADCx: external trigger event and continuous conversion mode */
  /* Set ALIGN bit according to ADC_DataAlign value */
  /* Set EXTSEL bits according to ADC_ExternalTrigConv value */
  /* Set CONT bit according to ADC_ContinuousConvMode value */
  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
            ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));
  /* Write to ADCx CR2 */
  ADCx->CR2 = tmpreg1;
  /*---------------------------- ADCx SQR1 Configuration -----------------*/
  /* Get the ADCx SQR1 value */
  tmpreg1 = ADCx->SQR1;
  /* Clear L bits */
  tmpreg1 &= SQR1_CLEAR_Mask;
  /* Configure ADCx: regular channel sequence length */
  /* Set L bits according to ADC_NbrOfChannel value */
  tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1);
  tmpreg1 |= (uint32_t)tmpreg2 << 20;
  /* Write to ADCx SQR1 */
  ADCx->SQR1 = tmpreg1;
}
/**
  * @brief  Fills each ADC_InitStruct member with its default value.
  * @param  ADC_InitStruct : pointer to an ADC_InitTypeDef structure which will be initialized.
  * @retval None
  */
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)
{
  /* Reset ADC init structure parameters values */
  /* Initialize the ADC_Mode member */
  ADC_InitStruct->ADC_Mode = ADC_Mode_Independent;
  /* initialize the ADC_ScanConvMode member */
  ADC_InitStruct->ADC_ScanConvMode = DISABLE;
  /* Initialize the ADC_ContinuousConvMode member */
  ADC_InitStruct->ADC_ContinuousConvMode = DISABLE;
  /* Initialize the ADC_ExternalTrigConv member */
  ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  /* Initialize the ADC_DataAlign member */
  ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right;
  /* Initialize the ADC_NbrOfChannel member */
  ADC_InitStruct->ADC_NbrOfChannel = 1;
}
/**
  * @brief  Enables or disables the specified ADC peripheral.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the ADCx peripheral.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Set the ADON bit to wake up the ADC from power down mode */
    ADCx->CR2 |= CR2_ADON_Set;
  }
  else
  {
    /* Disable the selected ADC peripheral */
    ADCx->CR2 &= CR2_ADON_Reset;
  }
}
/**
  * @brief  Enables or disables the specified ADC DMA request.
  * @param  ADCx: where x can be 1 or 3 to select the ADC peripheral.
  *   Note: ADC2 hasn't a DMA capability.
  * @param  NewState: new state of the selected ADC DMA transfer.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_DMA_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC DMA request */
    ADCx->CR2 |= CR2_DMA_Set;
  }
  else
  {
    /* Disable the selected ADC DMA request */
    ADCx->CR2 &= CR2_DMA_Reset;
  }
}
/**
  * @brief  Enables or disables the specified ADC interrupts.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_IT: specifies the ADC interrupt sources to be enabled or disabled.
  *   This parameter can be any combination of the following values:
  *     @arg ADC_IT_EOC: End of conversion interrupt mask
  *     @arg ADC_IT_AWD: Analog watchdog interrupt mask
  *     @arg ADC_IT_JEOC: End of injected conversion interrupt mask
  * @param  NewState: new state of the specified ADC interrupts.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)
{
  uint8_t itmask = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  assert_param(IS_ADC_IT(ADC_IT));
  /* Get the ADC IT index */
  itmask = (uint8_t)ADC_IT;
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC interrupts */
    ADCx->CR1 |= itmask;
  }
  else
  {
    /* Disable the selected ADC interrupts */
    ADCx->CR1 &= (~(uint32_t)itmask);
  }
}
/**
  * @brief  Resets the selected ADC calibration registers.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval None
  */
void ADC_ResetCalibration(ADC_TypeDef* ADCx)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Resets the selected ADC calibration registers */
  ADCx->CR2 |= CR2_RSTCAL_Set;
}
/**
  * @brief  Gets the selected ADC reset calibration registers status.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval The new state of ADC reset calibration registers (SET or RESET).
  */
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Check the status of RSTCAL bit */
  if ((ADCx->CR2 & CR2_RSTCAL_Set) != (uint32_t)RESET)
  {
    /* RSTCAL bit is set */
    bitstatus = SET;
  }
  else
  {
    /* RSTCAL bit is reset */
    bitstatus = RESET;
  }
  /* Return the RSTCAL bit status */
  return  bitstatus;
}
/**
  * @brief  Starts the selected ADC calibration process.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval None
  */
void ADC_StartCalibration(ADC_TypeDef* ADCx)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Enable the selected ADC calibration process */
  ADCx->CR2 |= CR2_CAL_Set;
}
/**
  * @brief  Gets the selected ADC calibration status.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval The new state of ADC calibration (SET or RESET).
  */
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Check the status of CAL bit */
  if ((ADCx->CR2 & CR2_CAL_Set) != (uint32_t)RESET)
  {
    /* CAL bit is set: calibration on going */
    bitstatus = SET;
  }
  else
  {
    /* CAL bit is reset: end of calibration */
    bitstatus = RESET;
  }
  /* Return the CAL bit status */
  return  bitstatus;
}
/**
  * @brief  Enables or disables the selected ADC software start conversion .
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC software start conversion.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC conversion on external event and start the selected
       ADC conversion */
    ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set;
  }
  else
  {
    /* Disable the selected ADC conversion on external event and stop the selected
       ADC conversion */
    ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
  }
}
/**
  * @brief  Gets the selected ADC Software start conversion Status.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval The new state of ADC software start conversion (SET or RESET).
  */
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Check the status of SWSTART bit */
  if ((ADCx->CR2 & CR2_SWSTART_Set) != (uint32_t)RESET)
  {
    /* SWSTART bit is set */
    bitstatus = SET;
  }
  else
  {
    /* SWSTART bit is reset */
    bitstatus = RESET;
  }
  /* Return the SWSTART bit status */
  return  bitstatus;
}
/**
  * @brief  Configures the discontinuous mode for the selected ADC regular
  *         group channel.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  Number: specifies the discontinuous mode regular channel
  *         count value. This number must be between 1 and 8.
  * @retval None
  */
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number)
{
  uint32_t tmpreg1 = 0;
  uint32_t tmpreg2 = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number));
  /* Get the old register value */
  tmpreg1 = ADCx->CR1;
  /* Clear the old discontinuous mode channel count */
  tmpreg1 &= CR1_DISCNUM_Reset;
  /* Set the discontinuous mode channel count */
  tmpreg2 = Number - 1;
  tmpreg1 |= tmpreg2 << 13;
  /* Store the new register value */
  ADCx->CR1 = tmpreg1;
}
/**
  * @brief  Enables or disables the discontinuous mode on regular group
  *         channel for the specified ADC
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC discontinuous mode
  *         on regular group channel.
  *         This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC regular discontinuous mode */
    ADCx->CR1 |= CR1_DISCEN_Set;
  }
  else
  {
    /* Disable the selected ADC regular discontinuous mode */
    ADCx->CR1 &= CR1_DISCEN_Reset;
  }
}
/**
  * @brief  Configures for the selected ADC regular channel its corresponding
  *         rank in the sequencer and its sample time.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_Channel: the ADC channel to configure.
  *   This parameter can be one of the following values:
  *     @arg ADC_Channel_0: ADC Channel0 selected
  *     @arg ADC_Channel_1: ADC Channel1 selected
  *     @arg ADC_Channel_2: ADC Channel2 selected
  *     @arg ADC_Channel_3: ADC Channel3 selected
  *     @arg ADC_Channel_4: ADC Channel4 selected
  *     @arg ADC_Channel_5: ADC Channel5 selected
  *     @arg ADC_Channel_6: ADC Channel6 selected
  *     @arg ADC_Channel_7: ADC Channel7 selected
  *     @arg ADC_Channel_8: ADC Channel8 selected
  *     @arg ADC_Channel_9: ADC Channel9 selected
  *     @arg ADC_Channel_10: ADC Channel10 selected
  *     @arg ADC_Channel_11: ADC Channel11 selected
  *     @arg ADC_Channel_12: ADC Channel12 selected
  *     @arg ADC_Channel_13: ADC Channel13 selected
  *     @arg ADC_Channel_14: ADC Channel14 selected
  *     @arg ADC_Channel_15: ADC Channel15 selected
  *     @arg ADC_Channel_16: ADC Channel16 selected
  *     @arg ADC_Channel_17: ADC Channel17 selected
  * @param  Rank: The rank in the regular group sequencer. This parameter must be between 1 to 16.
  * @param  ADC_SampleTime: The sample time value to be set for the selected channel.
  *   This parameter can be one of the following values:
  *     @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles
  *     @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles
  *     @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles
  *     @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles
  *     @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles
  *     @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles
  *     @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles
  *     @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles
  * @retval None
  */
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
{
  uint32_t tmpreg1 = 0, tmpreg2 = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_CHANNEL(ADC_Channel));
  assert_param(IS_ADC_REGULAR_RANK(Rank));
  assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
  /* if ADC_Channel_10 ... ADC_Channel_17 is selected */
  if (ADC_Channel > ADC_Channel_9)
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SMPR1;
    /* Calculate the mask to clear */
    tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10));
    /* Clear the old channel sample time */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10));
    /* Set the new channel sample time */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SMPR1 = tmpreg1;
  }
  else /* ADC_Channel include in ADC_Channel_[0..9] */
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SMPR2;
    /* Calculate the mask to clear */
    tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
    /* Clear the old channel sample time */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
    /* Set the new channel sample time */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SMPR2 = tmpreg1;
  }
  /* For Rank 1 to 6 */
  if (Rank < 7)
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SQR3;
    /* Calculate the mask to clear */
    tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
    /* Clear the old SQx bits for the selected rank */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1));
    /* Set the SQx bits for the selected rank */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SQR3 = tmpreg1;
  }
  /* For Rank 7 to 12 */
  else if (Rank < 13)
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SQR2;
    /* Calculate the mask to clear */
    tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7));
    /* Clear the old SQx bits for the selected rank */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7));
    /* Set the SQx bits for the selected rank */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SQR2 = tmpreg1;
  }
  /* For Rank 13 to 16 */
  else
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SQR1;
    /* Calculate the mask to clear */
    tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13));
    /* Clear the old SQx bits for the selected rank */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13));
    /* Set the SQx bits for the selected rank */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SQR1 = tmpreg1;
  }
}
/**
  * @brief  Enables or disables the ADCx conversion through external trigger.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC external trigger start of conversion.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC conversion on external event */
    ADCx->CR2 |= CR2_EXTTRIG_Set;
  }
  else
  {
    /* Disable the selected ADC conversion on external event */
    ADCx->CR2 &= CR2_EXTTRIG_Reset;
  }
}
/**
  * @brief  Returns the last ADCx conversion result data for regular channel.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval The Data conversion value.
  */
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Return the selected ADC conversion value */
  return (uint16_t) ADCx->DR;
}
/**
  * @brief  Returns the last ADC1 and ADC2 conversion result data in dual mode.
  * @retval The Data conversion value.
  */
uint32_t ADC_GetDualModeConversionValue(void)
{
  /* Return the dual mode conversion value */
  return (*(__IO uint32_t *) DR_ADDRESS);
}
/**
  * @brief  Enables or disables the selected ADC automatic injected group
  *         conversion after regular one.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC auto injected conversion
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC automatic injected group conversion */
    ADCx->CR1 |= CR1_JAUTO_Set;
  }
  else
  {
    /* Disable the selected ADC automatic injected group conversion */
    ADCx->CR1 &= CR1_JAUTO_Reset;
  }
}
/**
  * @brief  Enables or disables the discontinuous mode for injected group
  *         channel for the specified ADC
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC discontinuous mode
  *         on injected group channel.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC injected discontinuous mode */
    ADCx->CR1 |= CR1_JDISCEN_Set;
  }
  else
  {
    /* Disable the selected ADC injected discontinuous mode */
    ADCx->CR1 &= CR1_JDISCEN_Reset;
  }
}
/**
  * @brief  Configures the ADCx external trigger for injected channels conversion.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_ExternalTrigInjecConv: specifies the ADC trigger to start injected conversion.
  *   This parameter can be one of the following values:
  *     @arg ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected (for ADC1, ADC2 and ADC3)
  *     @arg ADC_ExternalTrigInjecConv_T1_CC4: Timer1 capture compare4 selected (for ADC1, ADC2 and ADC3)
  *     @arg ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected (for ADC1 and ADC2)
  *     @arg ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected (for ADC1 and ADC2)
  *     @arg ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected (for ADC1 and ADC2)
  *     @arg ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected (for ADC1 and ADC2)
  *     @arg ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4: External interrupt line 15 or Timer8
  *                                                       capture compare4 event selected (for ADC1 and ADC2)
  *     @arg ADC_ExternalTrigInjecConv_T4_CC3: Timer4 capture compare3 selected (for ADC3 only)
  *     @arg ADC_ExternalTrigInjecConv_T8_CC2: Timer8 capture compare2 selected (for ADC3 only)
  *     @arg ADC_ExternalTrigInjecConv_T8_CC4: Timer8 capture compare4 selected (for ADC3 only)
  *     @arg ADC_ExternalTrigInjecConv_T5_TRGO: Timer5 TRGO event selected (for ADC3 only)
  *     @arg ADC_ExternalTrigInjecConv_T5_CC4: Timer5 capture compare4 selected (for ADC3 only)
  *     @arg ADC_ExternalTrigInjecConv_None: Injected conversion started by software and not
  *                                          by external trigger (for ADC1, ADC2 and ADC3)
  * @retval None
  */
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv)
{
  uint32_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv));
  /* Get the old register value */
  tmpreg = ADCx->CR2;
  /* Clear the old external event selection for injected group */
  tmpreg &= CR2_JEXTSEL_Reset;
  /* Set the external event selection for injected group */
  tmpreg |= ADC_ExternalTrigInjecConv;
  /* Store the new register value */
  ADCx->CR2 = tmpreg;
}
/**
  * @brief  Enables or disables the ADCx injected channels conversion through
  *         external trigger
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC external trigger start of
  *         injected conversion.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC external event selection for injected group */
    ADCx->CR2 |= CR2_JEXTTRIG_Set;
  }
  else
  {
    /* Disable the selected ADC external event selection for injected group */
    ADCx->CR2 &= CR2_JEXTTRIG_Reset;
  }
}
/**
  * @brief  Enables or disables the selected ADC start of the injected
  *         channels conversion.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  NewState: new state of the selected ADC software start injected conversion.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected ADC conversion for injected group on external event and start the selected
       ADC injected conversion */
    ADCx->CR2 |= CR2_JEXTTRIG_JSWSTART_Set;
  }
  else
  {
    /* Disable the selected ADC conversion on external event for injected group and stop the selected
       ADC injected conversion */
    ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset;
  }
}
/**
  * @brief  Gets the selected ADC Software start injected conversion Status.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @retval The new state of ADC software start injected conversion (SET or RESET).
  */
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  /* Check the status of JSWSTART bit */
  if ((ADCx->CR2 & CR2_JSWSTART_Set) != (uint32_t)RESET)
  {
    /* JSWSTART bit is set */
    bitstatus = SET;
  }
  else
  {
    /* JSWSTART bit is reset */
    bitstatus = RESET;
  }
  /* Return the JSWSTART bit status */
  return  bitstatus;
}
/**
  * @brief  Configures for the selected ADC injected channel its corresponding
  *         rank in the sequencer and its sample time.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_Channel: the ADC channel to configure.
  *   This parameter can be one of the following values:
  *     @arg ADC_Channel_0: ADC Channel0 selected
  *     @arg ADC_Channel_1: ADC Channel1 selected
  *     @arg ADC_Channel_2: ADC Channel2 selected
  *     @arg ADC_Channel_3: ADC Channel3 selected
  *     @arg ADC_Channel_4: ADC Channel4 selected
  *     @arg ADC_Channel_5: ADC Channel5 selected
  *     @arg ADC_Channel_6: ADC Channel6 selected
  *     @arg ADC_Channel_7: ADC Channel7 selected
  *     @arg ADC_Channel_8: ADC Channel8 selected
  *     @arg ADC_Channel_9: ADC Channel9 selected
  *     @arg ADC_Channel_10: ADC Channel10 selected
  *     @arg ADC_Channel_11: ADC Channel11 selected
  *     @arg ADC_Channel_12: ADC Channel12 selected
  *     @arg ADC_Channel_13: ADC Channel13 selected
  *     @arg ADC_Channel_14: ADC Channel14 selected
  *     @arg ADC_Channel_15: ADC Channel15 selected
  *     @arg ADC_Channel_16: ADC Channel16 selected
  *     @arg ADC_Channel_17: ADC Channel17 selected
  * @param  Rank: The rank in the injected group sequencer. This parameter must be between 1 and 4.
  * @param  ADC_SampleTime: The sample time value to be set for the selected channel.
  *   This parameter can be one of the following values:
  *     @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles
  *     @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles
  *     @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles
  *     @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles
  *     @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles
  *     @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles
  *     @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles
  *     @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles
  * @retval None
  */
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
{
  uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_CHANNEL(ADC_Channel));
  assert_param(IS_ADC_INJECTED_RANK(Rank));
  assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
  /* if ADC_Channel_10 ... ADC_Channel_17 is selected */
  if (ADC_Channel > ADC_Channel_9)
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SMPR1;
    /* Calculate the mask to clear */
    tmpreg2 = SMPR1_SMP_Set << (3*(ADC_Channel - 10));
    /* Clear the old channel sample time */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10));
    /* Set the new channel sample time */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SMPR1 = tmpreg1;
  }
  else /* ADC_Channel include in ADC_Channel_[0..9] */
  {
    /* Get the old register value */
    tmpreg1 = ADCx->SMPR2;
    /* Calculate the mask to clear */
    tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
    /* Clear the old channel sample time */
    tmpreg1 &= ~tmpreg2;
    /* Calculate the mask to set */
    tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
    /* Set the new channel sample time */
    tmpreg1 |= tmpreg2;
    /* Store the new register value */
    ADCx->SMPR2 = tmpreg1;
  }
  /* Rank configuration */
  /* Get the old register value */
  tmpreg1 = ADCx->JSQR;
  /* Get JL value: Number = JL+1 */
  tmpreg3 =  (tmpreg1 & JSQR_JL_Set)>> 20;
  /* Calculate the mask to clear: ((Rank-1)+(4-JL-1)) */
  tmpreg2 = JSQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
  /* Clear the old JSQx bits for the selected rank */
  tmpreg1 &= ~tmpreg2;
  /* Calculate the mask to set: ((Rank-1)+(4-JL-1)) */
  tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
  /* Set the JSQx bits for the selected rank */
  tmpreg1 |= tmpreg2;
  /* Store the new register value */
  ADCx->JSQR = tmpreg1;
}
/**
  * @brief  Configures the sequencer length for injected channels
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  Length: The sequencer length.
  *   This parameter must be a number between 1 to 4.
  * @retval None
  */
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)
{
  uint32_t tmpreg1 = 0;
  uint32_t tmpreg2 = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_INJECTED_LENGTH(Length));
  /* Get the old register value */
  tmpreg1 = ADCx->JSQR;
  /* Clear the old injected sequnence lenght JL bits */
  tmpreg1 &= JSQR_JL_Reset;
  /* Set the injected sequnence lenght JL bits */
  tmpreg2 = Length - 1;
  tmpreg1 |= tmpreg2 << 20;
  /* Store the new register value */
  ADCx->JSQR = tmpreg1;
}
/**
  * @brief  Set the injected channels conversion value offset
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_InjectedChannel: the ADC injected channel to set its offset.
  *   This parameter can be one of the following values:
  *     @arg ADC_InjectedChannel_1: Injected Channel1 selected
  *     @arg ADC_InjectedChannel_2: Injected Channel2 selected
  *     @arg ADC_InjectedChannel_3: Injected Channel3 selected
  *     @arg ADC_InjectedChannel_4: Injected Channel4 selected
  * @param  Offset: the offset value for the selected ADC injected channel
  *   This parameter must be a 12bit value.
  * @retval None
  */
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)
{
  __IO uint32_t tmp = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
  assert_param(IS_ADC_OFFSET(Offset));
  tmp = (uint32_t)ADCx;
  tmp += ADC_InjectedChannel;
  /* Set the selected injected channel data offset */
  *(__IO uint32_t *) tmp = (uint32_t)Offset;
}
/**
  * @brief  Returns the ADC injected channel conversion result
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_InjectedChannel: the converted ADC injected channel.
  *   This parameter can be one of the following values:
  *     @arg ADC_InjectedChannel_1: Injected Channel1 selected
  *     @arg ADC_InjectedChannel_2: Injected Channel2 selected
  *     @arg ADC_InjectedChannel_3: Injected Channel3 selected
  *     @arg ADC_InjectedChannel_4: Injected Channel4 selected
  * @retval The Data conversion value.
  */
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel)
{
  __IO uint32_t tmp = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
  tmp = (uint32_t)ADCx;
  tmp += ADC_InjectedChannel + JDR_Offset;
  /* Returns the selected injected channel conversion data value */
  return (uint16_t) (*(__IO uint32_t*)  tmp);
}
/**
  * @brief  Enables or disables the analog watchdog on single/all regular
  *         or injected channels
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_AnalogWatchdog: the ADC analog watchdog configuration.
  *   This parameter can be one of the following values:
  *     @arg ADC_AnalogWatchdog_SingleRegEnable: Analog watchdog on a single regular channel
  *     @arg ADC_AnalogWatchdog_SingleInjecEnable: Analog watchdog on a single injected channel
  *     @arg ADC_AnalogWatchdog_SingleRegOrInjecEnable: Analog watchdog on a single regular or injected channel
  *     @arg ADC_AnalogWatchdog_AllRegEnable: Analog watchdog on  all regular channel
  *     @arg ADC_AnalogWatchdog_AllInjecEnable: Analog watchdog on  all injected channel
  *     @arg ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on all regular and injected channels
  *     @arg ADC_AnalogWatchdog_None: No channel guarded by the analog watchdog
  * @retval None
  */
void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog)
{
  uint32_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_ANALOG_WATCHDOG(ADC_AnalogWatchdog));
  /* Get the old register value */
  tmpreg = ADCx->CR1;
  /* Clear AWDEN, AWDENJ and AWDSGL bits */
  tmpreg &= CR1_AWDMode_Reset;
  /* Set the analog watchdog enable mode */
  tmpreg |= ADC_AnalogWatchdog;
  /* Store the new register value */
  ADCx->CR1 = tmpreg;
}
/**
  * @brief  Configures the high and low thresholds of the analog watchdog.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  HighThreshold: the ADC analog watchdog High threshold value.
  *   This parameter must be a 12bit value.
  * @param  LowThreshold: the ADC analog watchdog Low threshold value.
  *   This parameter must be a 12bit value.
  * @retval None
  */
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,
                                        uint16_t LowThreshold)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_THRESHOLD(HighThreshold));
  assert_param(IS_ADC_THRESHOLD(LowThreshold));
  /* Set the ADCx high threshold */
  ADCx->HTR = HighThreshold;
  /* Set the ADCx low threshold */
  ADCx->LTR = LowThreshold;
}
/**
  * @brief  Configures the analog watchdog guarded single channel
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_Channel: the ADC channel to configure for the analog watchdog.
  *   This parameter can be one of the following values:
  *     @arg ADC_Channel_0: ADC Channel0 selected
  *     @arg ADC_Channel_1: ADC Channel1 selected
  *     @arg ADC_Channel_2: ADC Channel2 selected
  *     @arg ADC_Channel_3: ADC Channel3 selected
  *     @arg ADC_Channel_4: ADC Channel4 selected
  *     @arg ADC_Channel_5: ADC Channel5 selected
  *     @arg ADC_Channel_6: ADC Channel6 selected
  *     @arg ADC_Channel_7: ADC Channel7 selected
  *     @arg ADC_Channel_8: ADC Channel8 selected
  *     @arg ADC_Channel_9: ADC Channel9 selected
  *     @arg ADC_Channel_10: ADC Channel10 selected
  *     @arg ADC_Channel_11: ADC Channel11 selected
  *     @arg ADC_Channel_12: ADC Channel12 selected
  *     @arg ADC_Channel_13: ADC Channel13 selected
  *     @arg ADC_Channel_14: ADC Channel14 selected
  *     @arg ADC_Channel_15: ADC Channel15 selected
  *     @arg ADC_Channel_16: ADC Channel16 selected
  *     @arg ADC_Channel_17: ADC Channel17 selected
  * @retval None
  */
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel)
{
  uint32_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_CHANNEL(ADC_Channel));
  /* Get the old register value */
  tmpreg = ADCx->CR1;
  /* Clear the Analog watchdog channel select bits */
  tmpreg &= CR1_AWDCH_Reset;
  /* Set the Analog watchdog channel */
  tmpreg |= ADC_Channel;
  /* Store the new register value */
  ADCx->CR1 = tmpreg;
}
/**
  * @brief  Enables or disables the temperature sensor and Vrefint channel.
  * @param  NewState: new state of the temperature sensor.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void ADC_TempSensorVrefintCmd(FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the temperature sensor and Vrefint channel*/
    ADC1->CR2 |= CR2_TSVREFE_Set;
  }
  else
  {
    /* Disable the temperature sensor and Vrefint channel*/
    ADC1->CR2 &= CR2_TSVREFE_Reset;
  }
}
/**
  * @brief  Checks whether the specified ADC flag is set or not.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_FLAG: specifies the flag to check.
  *   This parameter can be one of the following values:
  *     @arg ADC_FLAG_AWD: Analog watchdog flag
  *     @arg ADC_FLAG_EOC: End of conversion flag
  *     @arg ADC_FLAG_JEOC: End of injected group conversion flag
  *     @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
  *     @arg ADC_FLAG_STRT: Start of regular group conversion flag
  * @retval The new state of ADC_FLAG (SET or RESET).
  */
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_GET_FLAG(ADC_FLAG));
  /* Check the status of the specified ADC flag */
  if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET)
  {
    /* ADC_FLAG is set */
    bitstatus = SET;
  }
  else
  {
    /* ADC_FLAG is reset */
    bitstatus = RESET;
  }
  /* Return the ADC_FLAG status */
  return  bitstatus;
}
/**
  * @brief  Clears the ADCx's pending flags.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_FLAG: specifies the flag to clear.
  *   This parameter can be any combination of the following values:
  *     @arg ADC_FLAG_AWD: Analog watchdog flag
  *     @arg ADC_FLAG_EOC: End of conversion flag
  *     @arg ADC_FLAG_JEOC: End of injected group conversion flag
  *     @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
  *     @arg ADC_FLAG_STRT: Start of regular group conversion flag
  * @retval None
  */
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));
  /* Clear the selected ADC flags */
  ADCx->SR = ~(uint32_t)ADC_FLAG;
}
/**
  * @brief  Checks whether the specified ADC interrupt has occurred or not.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_IT: specifies the ADC interrupt source to check.
  *   This parameter can be one of the following values:
  *     @arg ADC_IT_EOC: End of conversion interrupt mask
  *     @arg ADC_IT_AWD: Analog watchdog interrupt mask
  *     @arg ADC_IT_JEOC: End of injected conversion interrupt mask
  * @retval The new state of ADC_IT (SET or RESET).
  */
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT)
{
  ITStatus bitstatus = RESET;
  uint32_t itmask = 0, enablestatus = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_GET_IT(ADC_IT));
  /* Get the ADC IT index */
  itmask = ADC_IT >> 8;
  /* Get the ADC_IT enable bit status */
  enablestatus = (ADCx->CR1 & (uint8_t)ADC_IT) ;
  /* Check the status of the specified ADC interrupt */
  if (((ADCx->SR & itmask) != (uint32_t)RESET) && enablestatus)
  {
    /* ADC_IT is set */
    bitstatus = SET;
  }
  else
  {
    /* ADC_IT is reset */
    bitstatus = RESET;
  }
  /* Return the ADC_IT status */
  return  bitstatus;
}
/**
  * @brief  Clears the ADCx's interrupt pending bits.
  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
  * @param  ADC_IT: specifies the ADC interrupt pending bit to clear.
  *   This parameter can be any combination of the following values:
  *     @arg ADC_IT_EOC: End of conversion interrupt mask
  *     @arg ADC_IT_AWD: Analog watchdog interrupt mask
  *     @arg ADC_IT_JEOC: End of injected conversion interrupt mask
  * @retval None
  */
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT)
{
  uint8_t itmask = 0;
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_IT(ADC_IT));
  /* Get the ADC IT index */
  itmask = (uint8_t)(ADC_IT >> 8);
  /* Clear the selected ADC interrupt pending bits */
  ADCx->SR = ~(uint32_t)itmask;
}
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_bkp.c
New file
@@ -0,0 +1,308 @@
/**
  ******************************************************************************
  * @file    stm32f10x_bkp.c
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file provides all the BKP firmware functions.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_bkp.h"
#include "stm32f10x_rcc.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @defgroup BKP
  * @brief BKP driver modules
  * @{
  */
/** @defgroup BKP_Private_TypesDefinitions
  * @{
  */
/**
  * @}
  */
/** @defgroup BKP_Private_Defines
  * @{
  */
/* ------------ BKP registers bit address in the alias region --------------- */
#define BKP_OFFSET        (BKP_BASE - PERIPH_BASE)
/* --- CR Register ----*/
/* Alias word address of TPAL bit */
#define CR_OFFSET         (BKP_OFFSET + 0x30)
#define TPAL_BitNumber    0x01
#define CR_TPAL_BB        (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPAL_BitNumber * 4))
/* Alias word address of TPE bit */
#define TPE_BitNumber     0x00
#define CR_TPE_BB         (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPE_BitNumber * 4))
/* --- CSR Register ---*/
/* Alias word address of TPIE bit */
#define CSR_OFFSET        (BKP_OFFSET + 0x34)
#define TPIE_BitNumber    0x02
#define CSR_TPIE_BB       (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TPIE_BitNumber * 4))
/* Alias word address of TIF bit */
#define TIF_BitNumber     0x09
#define CSR_TIF_BB        (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TIF_BitNumber * 4))
/* Alias word address of TEF bit */
#define TEF_BitNumber     0x08
#define CSR_TEF_BB        (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TEF_BitNumber * 4))
/* ---------------------- BKP registers bit mask ------------------------ */
/* RTCCR register bit mask */
#define RTCCR_CAL_MASK    ((uint16_t)0xFF80)
#define RTCCR_MASK        ((uint16_t)0xFC7F)
/**
  * @}
  */
/** @defgroup BKP_Private_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup BKP_Private_Variables
  * @{
  */
/**
  * @}
  */
/** @defgroup BKP_Private_FunctionPrototypes
  * @{
  */
/**
  * @}
  */
/** @defgroup BKP_Private_Functions
  * @{
  */
/**
  * @brief  Deinitializes the BKP peripheral registers to their default reset values.
  * @param  None
  * @retval None
  */
void BKP_DeInit(void)
{
  RCC_BackupResetCmd(ENABLE);
  RCC_BackupResetCmd(DISABLE);
}
/**
  * @brief  Configures the Tamper Pin active level.
  * @param  BKP_TamperPinLevel: specifies the Tamper Pin active level.
  *   This parameter can be one of the following values:
  *     @arg BKP_TamperPinLevel_High: Tamper pin active on high level
  *     @arg BKP_TamperPinLevel_Low: Tamper pin active on low level
  * @retval None
  */
void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel)
{
  /* Check the parameters */
  assert_param(IS_BKP_TAMPER_PIN_LEVEL(BKP_TamperPinLevel));
  *(__IO uint32_t *) CR_TPAL_BB = BKP_TamperPinLevel;
}
/**
  * @brief  Enables or disables the Tamper Pin activation.
  * @param  NewState: new state of the Tamper Pin activation.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void BKP_TamperPinCmd(FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  *(__IO uint32_t *) CR_TPE_BB = (uint32_t)NewState;
}
/**
  * @brief  Enables or disables the Tamper Pin Interrupt.
  * @param  NewState: new state of the Tamper Pin Interrupt.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void BKP_ITConfig(FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  *(__IO uint32_t *) CSR_TPIE_BB = (uint32_t)NewState;
}
/**
  * @brief  Select the RTC output source to output on the Tamper pin.
  * @param  BKP_RTCOutputSource: specifies the RTC output source.
  *   This parameter can be one of the following values:
  *     @arg BKP_RTCOutputSource_None: no RTC output on the Tamper pin.
  *     @arg BKP_RTCOutputSource_CalibClock: output the RTC clock with frequency
  *                                          divided by 64 on the Tamper pin.
  *     @arg BKP_RTCOutputSource_Alarm: output the RTC Alarm pulse signal on
  *                                     the Tamper pin.
  *     @arg BKP_RTCOutputSource_Second: output the RTC Second pulse signal on
  *                                      the Tamper pin.
  * @retval None
  */
void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource)
{
  uint16_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_BKP_RTC_OUTPUT_SOURCE(BKP_RTCOutputSource));
  tmpreg = BKP->RTCCR;
  /* Clear CCO, ASOE and ASOS bits */
  tmpreg &= RTCCR_MASK;
  /* Set CCO, ASOE and ASOS bits according to BKP_RTCOutputSource value */
  tmpreg |= BKP_RTCOutputSource;
  /* Store the new value */
  BKP->RTCCR = tmpreg;
}
/**
  * @brief  Sets RTC Clock Calibration value.
  * @param  CalibrationValue: specifies the RTC Clock Calibration value.
  *   This parameter must be a number between 0 and 0x7F.
  * @retval None
  */
void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue)
{
  uint16_t tmpreg = 0;
  /* Check the parameters */
  assert_param(IS_BKP_CALIBRATION_VALUE(CalibrationValue));
  tmpreg = BKP->RTCCR;
  /* Clear CAL[6:0] bits */
  tmpreg &= RTCCR_CAL_MASK;
  /* Set CAL[6:0] bits according to CalibrationValue value */
  tmpreg |= CalibrationValue;
  /* Store the new value */
  BKP->RTCCR = tmpreg;
}
/**
  * @brief  Writes user data to the specified Data Backup Register.
  * @param  BKP_DR: specifies the Data Backup Register.
  *   This parameter can be BKP_DRx where x:[1, 42]
  * @param  Data: data to write
  * @retval None
  */
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)
{
  __IO uint32_t tmp = 0;
  /* Check the parameters */
  assert_param(IS_BKP_DR(BKP_DR));
  tmp = (uint32_t)BKP_BASE;
  tmp += BKP_DR;
  *(__IO uint32_t *) tmp = Data;
}
/**
  * @brief  Reads data from the specified Data Backup Register.
  * @param  BKP_DR: specifies the Data Backup Register.
  *   This parameter can be BKP_DRx where x:[1, 42]
  * @retval The content of the specified Data Backup Register
  */
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)
{
  __IO uint32_t tmp = 0;
  /* Check the parameters */
  assert_param(IS_BKP_DR(BKP_DR));
  tmp = (uint32_t)BKP_BASE;
  tmp += BKP_DR;
  return (*(__IO uint16_t *) tmp);
}
/**
  * @brief  Checks whether the Tamper Pin Event flag is set or not.
  * @param  None
  * @retval The new state of the Tamper Pin Event flag (SET or RESET).
  */
FlagStatus BKP_GetFlagStatus(void)
{
  return (FlagStatus)(*(__IO uint32_t *) CSR_TEF_BB);
}
/**
  * @brief  Clears Tamper Pin Event pending flag.
  * @param  None
  * @retval None
  */
void BKP_ClearFlag(void)
{
  /* Set CTE bit to clear Tamper Pin Event flag */
  BKP->CSR |= BKP_CSR_CTE;
}
/**
  * @brief  Checks whether the Tamper Pin Interrupt has occurred or not.
  * @param  None
  * @retval The new state of the Tamper Pin Interrupt (SET or RESET).
  */
ITStatus BKP_GetITStatus(void)
{
  return (ITStatus)(*(__IO uint32_t *) CSR_TIF_BB);
}
/**
  * @brief  Clears Tamper Pin Interrupt pending bit.
  * @param  None
  * @retval None
  */
void BKP_ClearITPendingBit(void)
{
  /* Set CTI bit to clear Tamper Pin Interrupt pending bit */
  BKP->CSR |= BKP_CSR_CTI;
}
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_can.c
New file
@@ -0,0 +1,1415 @@
/**
  ******************************************************************************
  * @file    stm32f10x_can.c
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    11-March-2011
  * @brief   This file provides all the CAN firmware functions.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_can.h"
#include "stm32f10x_rcc.h"
/** @addtogroup STM32F10x_StdPeriph_Driver
  * @{
  */
/** @defgroup CAN
  * @brief CAN driver modules
  * @{
  */
/** @defgroup CAN_Private_TypesDefinitions
  * @{
  */
/**
  * @}
  */
/** @defgroup CAN_Private_Defines
  * @{
  */
/* CAN Master Control Register bits */
#define MCR_DBF      ((uint32_t)0x00010000) /* software master reset */
/* CAN Mailbox Transmit Request */
#define TMIDxR_TXRQ  ((uint32_t)0x00000001) /* Transmit mailbox request */
/* CAN Filter Master Register bits */
#define FMR_FINIT    ((uint32_t)0x00000001) /* Filter init mode */
/* Time out for INAK bit */
#define INAK_TIMEOUT        ((uint32_t)0x0000FFFF)
/* Time out for SLAK bit */
#define SLAK_TIMEOUT        ((uint32_t)0x0000FFFF)
/* Flags in TSR register */
#define CAN_FLAGS_TSR              ((uint32_t)0x08000000)
/* Flags in RF1R register */
#define CAN_FLAGS_RF1R             ((uint32_t)0x04000000)
/* Flags in RF0R register */
#define CAN_FLAGS_RF0R             ((uint32_t)0x02000000)
/* Flags in MSR register */
#define CAN_FLAGS_MSR              ((uint32_t)0x01000000)
/* Flags in ESR register */
#define CAN_FLAGS_ESR              ((uint32_t)0x00F00000)
/* Mailboxes definition */
#define CAN_TXMAILBOX_0                   ((uint8_t)0x00)
#define CAN_TXMAILBOX_1                   ((uint8_t)0x01)
#define CAN_TXMAILBOX_2                   ((uint8_t)0x02)
#define CAN_MODE_MASK              ((uint32_t) 0x00000003)
/**
  * @}
  */
/** @defgroup CAN_Private_Macros
  * @{
  */
/**
  * @}
  */
/** @defgroup CAN_Private_Variables
  * @{
  */
/**
  * @}
  */
/** @defgroup CAN_Private_FunctionPrototypes
  * @{
  */
static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit);
/**
  * @}
  */
/** @defgroup CAN_Private_Functions
  * @{
  */
/**
  * @brief  Deinitializes the CAN peripheral registers to their default reset values.
  * @param  CANx: where x can be 1 or 2 to select the CAN peripheral.
  * @retval None.
  */
void CAN_DeInit(CAN_TypeDef* CANx)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  if (CANx == CAN1)
  {
    /* Enable CAN1 reset state */
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE);
    /* Release CAN1 from reset state */
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE);
  }
  else
  {
    /* Enable CAN2 reset state */
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, ENABLE);
    /* Release CAN2 from reset state */
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, DISABLE);
  }
}
/**
  * @brief  Initializes the CAN peripheral according to the specified
  *         parameters in the CAN_InitStruct.
  * @param  CANx:           where x can be 1 or 2 to to select the CAN
  *                         peripheral.
  * @param  CAN_InitStruct: pointer to a CAN_InitTypeDef structure that
  *                         contains the configuration information for the
  *                         CAN peripheral.
  * @retval Constant indicates initialization succeed which will be
  *         CAN_InitStatus_Failed or CAN_InitStatus_Success.
  */
uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)
{
  uint8_t InitStatus = CAN_InitStatus_Failed;
  uint32_t wait_ack = 0x00000000;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TTCM));
  assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_ABOM));
  assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_AWUM));
  assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_NART));
  assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_RFLM));
  assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TXFP));
  assert_param(IS_CAN_MODE(CAN_InitStruct->CAN_Mode));
  assert_param(IS_CAN_SJW(CAN_InitStruct->CAN_SJW));
  assert_param(IS_CAN_BS1(CAN_InitStruct->CAN_BS1));
  assert_param(IS_CAN_BS2(CAN_InitStruct->CAN_BS2));
  assert_param(IS_CAN_PRESCALER(CAN_InitStruct->CAN_Prescaler));
  /* Exit from sleep mode */
  CANx->MCR &= (~(uint32_t)CAN_MCR_SLEEP);
  /* Request initialisation */
  CANx->MCR |= CAN_MCR_INRQ ;
  /* Wait the acknowledge */
  while (((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
  {
    wait_ack++;
  }
  /* Check acknowledge */
  if ((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
  {
    InitStatus = CAN_InitStatus_Failed;
  }
  else
  {
    /* Set the time triggered communication mode */
    if (CAN_InitStruct->CAN_TTCM == ENABLE)
    {
      CANx->MCR |= CAN_MCR_TTCM;
    }
    else
    {
      CANx->MCR &= ~(uint32_t)CAN_MCR_TTCM;
    }
    /* Set the automatic bus-off management */
    if (CAN_InitStruct->CAN_ABOM == ENABLE)
    {
      CANx->MCR |= CAN_MCR_ABOM;
    }
    else
    {
      CANx->MCR &= ~(uint32_t)CAN_MCR_ABOM;
    }
    /* Set the automatic wake-up mode */
    if (CAN_InitStruct->CAN_AWUM == ENABLE)
    {
      CANx->MCR |= CAN_MCR_AWUM;
    }
    else
    {
      CANx->MCR &= ~(uint32_t)CAN_MCR_AWUM;
    }
    /* Set the no automatic retransmission */
    if (CAN_InitStruct->CAN_NART == ENABLE)
    {
      CANx->MCR |= CAN_MCR_NART;
    }
    else
    {
      CANx->MCR &= ~(uint32_t)CAN_MCR_NART;
    }
    /* Set the receive FIFO locked mode */
    if (CAN_InitStruct->CAN_RFLM == ENABLE)
    {
      CANx->MCR |= CAN_MCR_RFLM;
    }
    else
    {
      CANx->MCR &= ~(uint32_t)CAN_MCR_RFLM;
    }
    /* Set the transmit FIFO priority */
    if (CAN_InitStruct->CAN_TXFP == ENABLE)
    {
      CANx->MCR |= CAN_MCR_TXFP;
    }
    else
    {
      CANx->MCR &= ~(uint32_t)CAN_MCR_TXFP;
    }
    /* Set the bit timing register */
    CANx->BTR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | \
                ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | \
                ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | \
                ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | \
               ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1);
    /* Request leave initialisation */
    CANx->MCR &= ~(uint32_t)CAN_MCR_INRQ;
   /* Wait the acknowledge */
   wait_ack = 0;
   while (((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
   {
     wait_ack++;
   }
    /* ...and check acknowledged */
    if ((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)
    {
      InitStatus = CAN_InitStatus_Failed;
    }
    else
    {
      InitStatus = CAN_InitStatus_Success ;
    }
  }
  /* At this step, return the status of initialization */
  return InitStatus;
}
/**
  * @brief  Initializes the CAN peripheral according to the specified
  *         parameters in the CAN_FilterInitStruct.
  * @param  CAN_FilterInitStruct: pointer to a CAN_FilterInitTypeDef
  *                               structure that contains the configuration
  *                               information.
  * @retval None.
  */
void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct)
{
  uint32_t filter_number_bit_pos = 0;
  /* Check the parameters */
  assert_param(IS_CAN_FILTER_NUMBER(CAN_FilterInitStruct->CAN_FilterNumber));
  assert_param(IS_CAN_FILTER_MODE(CAN_FilterInitStruct->CAN_FilterMode));
  assert_param(IS_CAN_FILTER_SCALE(CAN_FilterInitStruct->CAN_FilterScale));
  assert_param(IS_CAN_FILTER_FIFO(CAN_FilterInitStruct->CAN_FilterFIFOAssignment));
  assert_param(IS_FUNCTIONAL_STATE(CAN_FilterInitStruct->CAN_FilterActivation));
  filter_number_bit_pos = ((uint32_t)1) << CAN_FilterInitStruct->CAN_FilterNumber;
  /* Initialisation mode for the filter */
  CAN1->FMR |= FMR_FINIT;
  /* Filter Deactivation */
  CAN1->FA1R &= ~(uint32_t)filter_number_bit_pos;
  /* Filter Scale */
  if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_16bit)
  {
    /* 16-bit scale for the filter */
    CAN1->FS1R &= ~(uint32_t)filter_number_bit_pos;
    /* First 16-bit identifier and First 16-bit mask */
    /* Or First 16-bit identifier and Second 16-bit identifier */
    CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 =
    ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow) << 16) |
        (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow);
    /* Second 16-bit identifier and Second 16-bit mask */
    /* Or Third 16-bit identifier and Fourth 16-bit identifier */
    CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 =
    ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) |
        (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh);
  }
  if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_32bit)
  {
    /* 32-bit scale for the filter */
    CAN1->FS1R |= filter_number_bit_pos;
    /* 32-bit identifier or First 32-bit identifier */
    CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 =
    ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh) << 16) |
        (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow);
    /* 32-bit mask or Second 32-bit identifier */
    CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 =
    ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) |
        (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow);
  }
  /* Filter Mode */
  if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask)
  {
    /*Id/Mask mode for the filter*/
    CAN1->FM1R &= ~(uint32_t)filter_number_bit_pos;
  }
  else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */
  {
    /*Identifier list mode for the filter*/
    CAN1->FM1R |= (uint32_t)filter_number_bit_pos;
  }
  /* Filter FIFO assignment */
  if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO0)
  {
    /* FIFO 0 assignation for the filter */
    CAN1->FFA1R &= ~(uint32_t)filter_number_bit_pos;
  }
  if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO1)
  {
    /* FIFO 1 assignation for the filter */
    CAN1->FFA1R |= (uint32_t)filter_number_bit_pos;
  }
  /* Filter activation */
  if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE)
  {
    CAN1->FA1R |= filter_number_bit_pos;
  }
  /* Leave the initialisation mode for the filter */
  CAN1->FMR &= ~FMR_FINIT;
}
/**
  * @brief  Fills each CAN_InitStruct member with its default value.
  * @param  CAN_InitStruct: pointer to a CAN_InitTypeDef structure which
  *                         will be initialized.
  * @retval None.
  */
void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct)
{
  /* Reset CAN init structure parameters values */
  /* Initialize the time triggered communication mode */
  CAN_InitStruct->CAN_TTCM = DISABLE;
  /* Initialize the automatic bus-off management */
  CAN_InitStruct->CAN_ABOM = DISABLE;
  /* Initialize the automatic wake-up mode */
  CAN_InitStruct->CAN_AWUM = DISABLE;
  /* Initialize the no automatic retransmission */
  CAN_InitStruct->CAN_NART = DISABLE;
  /* Initialize the receive FIFO locked mode */
  CAN_InitStruct->CAN_RFLM = DISABLE;
  /* Initialize the transmit FIFO priority */
  CAN_InitStruct->CAN_TXFP = DISABLE;
  /* Initialize the CAN_Mode member */
  CAN_InitStruct->CAN_Mode = CAN_Mode_Normal;
  /* Initialize the CAN_SJW member */
  CAN_InitStruct->CAN_SJW = CAN_SJW_1tq;
  /* Initialize the CAN_BS1 member */
  CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq;
  /* Initialize the CAN_BS2 member */
  CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq;
  /* Initialize the CAN_Prescaler member */
  CAN_InitStruct->CAN_Prescaler = 1;
}
/**
  * @brief  Select the start bank filter for slave CAN.
  * @note   This function applies only to STM32 Connectivity line devices.
  * @param  CAN_BankNumber: Select the start slave bank filter from 1..27.
  * @retval None.
  */
void CAN_SlaveStartBank(uint8_t CAN_BankNumber)
{
  /* Check the parameters */
  assert_param(IS_CAN_BANKNUMBER(CAN_BankNumber));
  /* Enter Initialisation mode for the filter */
  CAN1->FMR |= FMR_FINIT;
  /* Select the start slave bank */
  CAN1->FMR &= (uint32_t)0xFFFFC0F1 ;
  CAN1->FMR |= (uint32_t)(CAN_BankNumber)<<8;
  /* Leave Initialisation mode for the filter */
  CAN1->FMR &= ~FMR_FINIT;
}
/**
  * @brief  Enables or disables the DBG Freeze for CAN.
  * @param  CANx:     where x can be 1 or 2 to to select the CAN peripheral.
  * @param  NewState: new state of the CAN peripheral. This parameter can
  *                   be: ENABLE or DISABLE.
  * @retval None.
  */
void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable Debug Freeze  */
    CANx->MCR |= MCR_DBF;
  }
  else
  {
    /* Disable Debug Freeze */
    CANx->MCR &= ~MCR_DBF;
  }
}
/**
  * @brief  Enables or disabes the CAN Time TriggerOperation communication mode.
  * @param  CANx:      where x can be 1 or 2 to to select the CAN peripheral.
  * @param  NewState : Mode new state , can be one of @ref FunctionalState.
  * @note   when enabled, Time stamp (TIME[15:0]) value is sent in the last
  *         two data bytes of the 8-byte message: TIME[7:0] in data byte 6
  *         and TIME[15:8] in data byte 7
  * @note   DLC must be programmed as 8 in order Time Stamp (2 bytes) to be
  *         sent over the CAN bus.
  * @retval None
  */
void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the TTCM mode */
    CANx->MCR |= CAN_MCR_TTCM;
    /* Set TGT bits */
    CANx->sTxMailBox[0].TDTR |= ((uint32_t)CAN_TDT0R_TGT);
    CANx->sTxMailBox[1].TDTR |= ((uint32_t)CAN_TDT1R_TGT);
    CANx->sTxMailBox[2].TDTR |= ((uint32_t)CAN_TDT2R_TGT);
  }
  else
  {
    /* Disable the TTCM mode */
    CANx->MCR &= (uint32_t)(~(uint32_t)CAN_MCR_TTCM);
    /* Reset TGT bits */
    CANx->sTxMailBox[0].TDTR &= ((uint32_t)~CAN_TDT0R_TGT);
    CANx->sTxMailBox[1].TDTR &= ((uint32_t)~CAN_TDT1R_TGT);
    CANx->sTxMailBox[2].TDTR &= ((uint32_t)~CAN_TDT2R_TGT);
  }
}
/**
  * @brief  Initiates the transmission of a message.
  * @param  CANx:      where x can be 1 or 2 to to select the CAN peripheral.
  * @param  TxMessage: pointer to a structure which contains CAN Id, CAN
  *                    DLC and CAN data.
  * @retval The number of the mailbox that is used for transmission
  *                    or CAN_TxStatus_NoMailBox if there is no empty mailbox.
  */
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage)
{
  uint8_t transmit_mailbox = 0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_IDTYPE(TxMessage->IDE));
  assert_param(IS_CAN_RTR(TxMessage->RTR));
  assert_param(IS_CAN_DLC(TxMessage->DLC));
  /* Select one empty transmit mailbox */
  if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
  {
    transmit_mailbox = 0;
  }
  else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
  {
    transmit_mailbox = 1;
  }
  else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
  {
    transmit_mailbox = 2;
  }
  else
  {
    transmit_mailbox = CAN_TxStatus_NoMailBox;
  }
  if (transmit_mailbox != CAN_TxStatus_NoMailBox)
  {
    /* Set up the Id */
    CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ;
    if (TxMessage->IDE == CAN_Id_Standard)
    {
      assert_param(IS_CAN_STDID(TxMessage->StdId));
      CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \
                                                  TxMessage->RTR);
    }
    else
    {
      assert_param(IS_CAN_EXTID(TxMessage->ExtId));
      CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \
                                                  TxMessage->IDE | \
                                                  TxMessage->RTR);
    }
    /* Set up the DLC */
    TxMessage->DLC &= (uint8_t)0x0000000F;
    CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0;
    CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC;
    /* Set up the data field */
    CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) |
                                             ((uint32_t)TxMessage->Data[2] << 16) |
                                             ((uint32_t)TxMessage->Data[1] << 8) |
                                             ((uint32_t)TxMessage->Data[0]));
    CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) |
                                             ((uint32_t)TxMessage->Data[6] << 16) |
                                             ((uint32_t)TxMessage->Data[5] << 8) |
                                             ((uint32_t)TxMessage->Data[4]));
    /* Request transmission */
    CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ;
  }
  return transmit_mailbox;
}
/**
  * @brief  Checks the transmission of a message.
  * @param  CANx:            where x can be 1 or 2 to to select the
  *                          CAN peripheral.
  * @param  TransmitMailbox: the number of the mailbox that is used for
  *                          transmission.
  * @retval CAN_TxStatus_Ok if the CAN driver transmits the message, CAN_TxStatus_Failed
  *         in an other case.
  */
uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox)
{
  uint32_t state = 0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_TRANSMITMAILBOX(TransmitMailbox));
  switch (TransmitMailbox)
  {
    case (CAN_TXMAILBOX_0):
      state =   CANx->TSR &  (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0);
      break;
    case (CAN_TXMAILBOX_1):
      state =   CANx->TSR &  (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1);
      break;
    case (CAN_TXMAILBOX_2):
      state =   CANx->TSR &  (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2);
      break;
    default:
      state = CAN_TxStatus_Failed;
      break;
  }
  switch (state)
  {
      /* transmit pending  */
    case (0x0): state = CAN_TxStatus_Pending;
      break;
      /* transmit failed  */
     case (CAN_TSR_RQCP0 | CAN_TSR_TME0): state = CAN_TxStatus_Failed;
      break;
     case (CAN_TSR_RQCP1 | CAN_TSR_TME1): state = CAN_TxStatus_Failed;
      break;
     case (CAN_TSR_RQCP2 | CAN_TSR_TME2): state = CAN_TxStatus_Failed;
      break;
      /* transmit succeeded  */
    case (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0):state = CAN_TxStatus_Ok;
      break;
    case (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1):state = CAN_TxStatus_Ok;
      break;
    case (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2):state = CAN_TxStatus_Ok;
      break;
    default: state = CAN_TxStatus_Failed;
      break;
  }
  return (uint8_t) state;
}
/**
  * @brief  Cancels a transmit request.
  * @param  CANx:     where x can be 1 or 2 to to select the CAN peripheral.
  * @param  Mailbox:  Mailbox number.
  * @retval None.
  */
void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_TRANSMITMAILBOX(Mailbox));
  /* abort transmission */
  switch (Mailbox)
  {
    case (CAN_TXMAILBOX_0): CANx->TSR |= CAN_TSR_ABRQ0;
      break;
    case (CAN_TXMAILBOX_1): CANx->TSR |= CAN_TSR_ABRQ1;
      break;
    case (CAN_TXMAILBOX_2): CANx->TSR |= CAN_TSR_ABRQ2;
      break;
    default:
      break;
  }
}
/**
  * @brief  Receives a message.
  * @param  CANx:       where x can be 1 or 2 to to select the CAN peripheral.
  * @param  FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
  * @param  RxMessage:  pointer to a structure receive message which contains
  *                     CAN Id, CAN DLC, CAN datas and FMI number.
  * @retval None.
  */
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FIFO(FIFONumber));
  /* Get the Id */
  RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RIR;
  if (RxMessage->IDE == CAN_Id_Standard)
  {
    RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21);
  }
  else
  {
    RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3);
  }
  RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR;
  /* Get the DLC */
  RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR;
  /* Get the FMI */
  RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8);
  /* Get the data field */
  RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR;
  RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8);
  RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16);
  RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24);
  RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR;
  RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8);
  RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16);
  RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 24);
  /* Release the FIFO */
  /* Release FIFO0 */
  if (FIFONumber == CAN_FIFO0)
  {
    CANx->RF0R |= CAN_RF0R_RFOM0;
  }
  /* Release FIFO1 */
  else /* FIFONumber == CAN_FIFO1 */
  {
    CANx->RF1R |= CAN_RF1R_RFOM1;
  }
}
/**
  * @brief  Releases the specified FIFO.
  * @param  CANx:       where x can be 1 or 2 to to select the CAN peripheral.
  * @param  FIFONumber: FIFO to release, CAN_FIFO0 or CAN_FIFO1.
  * @retval None.
  */
void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FIFO(FIFONumber));
  /* Release FIFO0 */
  if (FIFONumber == CAN_FIFO0)
  {
    CANx->RF0R |= CAN_RF0R_RFOM0;
  }
  /* Release FIFO1 */
  else /* FIFONumber == CAN_FIFO1 */
  {
    CANx->RF1R |= CAN_RF1R_RFOM1;
  }
}
/**
  * @brief  Returns the number of pending messages.
  * @param  CANx:       where x can be 1 or 2 to to select the CAN peripheral.
  * @param  FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
  * @retval NbMessage : which is the number of pending message.
  */
uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber)
{
  uint8_t message_pending=0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FIFO(FIFONumber));
  if (FIFONumber == CAN_FIFO0)
  {
    message_pending = (uint8_t)(CANx->RF0R&(uint32_t)0x03);
  }
  else if (FIFONumber == CAN_FIFO1)
  {
    message_pending = (uint8_t)(CANx->RF1R&(uint32_t)0x03);
  }
  else
  {
    message_pending = 0;
  }
  return message_pending;
}
/**
  * @brief   Select the CAN Operation mode.
  * @param CAN_OperatingMode : CAN Operating Mode. This parameter can be one
  *                            of @ref CAN_OperatingMode_TypeDef enumeration.
  * @retval status of the requested mode which can be
  *         - CAN_ModeStatus_Failed    CAN failed entering the specific mode
  *         - CAN_ModeStatus_Success   CAN Succeed entering the specific mode
  */
uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode)
{
  uint8_t status = CAN_ModeStatus_Failed;
  /* Timeout for INAK or also for SLAK bits*/
  uint32_t timeout = INAK_TIMEOUT;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_OPERATING_MODE(CAN_OperatingMode));
  if (CAN_OperatingMode == CAN_OperatingMode_Initialization)
  {
    /* Request initialisation */
    CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_SLEEP)) | CAN_MCR_INRQ);
    /* Wait the acknowledge */
    while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK) && (timeout != 0))
    {
      timeout--;
    }
    if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK)
    {
      status = CAN_ModeStatus_Failed;
    }
    else
    {
      status = CAN_ModeStatus_Success;
    }
  }
  else  if (CAN_OperatingMode == CAN_OperatingMode_Normal)
  {
    /* Request leave initialisation and sleep mode  and enter Normal mode */
    CANx->MCR &= (uint32_t)(~(CAN_MCR_SLEEP|CAN_MCR_INRQ));
    /* Wait the acknowledge */
    while (((CANx->MSR & CAN_MODE_MASK) != 0) && (timeout!=0))
    {
      timeout--;
    }
    if ((CANx->MSR & CAN_MODE_MASK) != 0)
    {
      status = CAN_ModeStatus_Failed;
    }
    else
    {
      status = CAN_ModeStatus_Success;
    }
  }
  else  if (CAN_OperatingMode == CAN_OperatingMode_Sleep)
  {
    /* Request Sleep mode */
    CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP);
    /* Wait the acknowledge */
    while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK) && (timeout!=0))
    {
      timeout--;
    }
    if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK)
    {
      status = CAN_ModeStatus_Failed;
    }
    else
    {
      status = CAN_ModeStatus_Success;
    }
  }
  else
  {
    status = CAN_ModeStatus_Failed;
  }
  return  (uint8_t) status;
}
/**
  * @brief  Enters the low power mode.
  * @param  CANx:   where x can be 1 or 2 to to select the CAN peripheral.
  * @retval status: CAN_Sleep_Ok if sleep entered, CAN_Sleep_Failed in an
  *                 other case.
  */
uint8_t CAN_Sleep(CAN_TypeDef* CANx)
{
  uint8_t sleepstatus = CAN_Sleep_Failed;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  /* Request Sleep mode */
   CANx->MCR = (((CANx->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP);
  /* Sleep mode status */
  if ((CANx->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) == CAN_MSR_SLAK)
  {
    /* Sleep mode not entered */
    sleepstatus =  CAN_Sleep_Ok;
  }
  /* return sleep mode status */
   return (uint8_t)sleepstatus;
}
/**
  * @brief  Wakes the CAN up.
  * @param  CANx:    where x can be 1 or 2 to to select the CAN peripheral.
  * @retval status:  CAN_WakeUp_Ok if sleep mode left, CAN_WakeUp_Failed in an
  *                  other case.
  */
uint8_t CAN_WakeUp(CAN_TypeDef* CANx)
{
  uint32_t wait_slak = SLAK_TIMEOUT;
  uint8_t wakeupstatus = CAN_WakeUp_Failed;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  /* Wake up request */
  CANx->MCR &= ~(uint32_t)CAN_MCR_SLEEP;
  /* Sleep mode status */
  while(((CANx->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)&&(wait_slak!=0x00))
  {
   wait_slak--;
  }
  if((CANx->MSR & CAN_MSR_SLAK) != CAN_MSR_SLAK)
  {
   /* wake up done : Sleep mode exited */
    wakeupstatus = CAN_WakeUp_Ok;
  }
  /* return wakeup status */
  return (uint8_t)wakeupstatus;
}
/**
  * @brief  Returns the CANx's last error code (LEC).
  * @param  CANx:          where x can be 1 or 2 to to select the CAN peripheral.
  * @retval CAN_ErrorCode: specifies the Error code :
  *                        - CAN_ERRORCODE_NoErr            No Error
  *                        - CAN_ERRORCODE_StuffErr         Stuff Error
  *                        - CAN_ERRORCODE_FormErr          Form Error
  *                        - CAN_ERRORCODE_ACKErr           Acknowledgment Error
  *                        - CAN_ERRORCODE_BitRecessiveErr  Bit Recessive Error
  *                        - CAN_ERRORCODE_BitDominantErr   Bit Dominant Error
  *                        - CAN_ERRORCODE_CRCErr           CRC Error
  *                        - CAN_ERRORCODE_SoftwareSetErr   Software Set Error
  */
uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx)
{
  uint8_t errorcode=0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  /* Get the error code*/
  errorcode = (((uint8_t)CANx->ESR) & (uint8_t)CAN_ESR_LEC);
  /* Return the error code*/
  return errorcode;
}
/**
  * @brief  Returns the CANx Receive Error Counter (REC).
  * @note   In case of an error during reception, this counter is incremented
  *         by 1 or by 8 depending on the error condition as defined by the CAN
  *         standard. After every successful reception, the counter is
  *         decremented by 1 or reset to 120 if its value was higher than 128.
  *         When the counter value exceeds 127, the CAN controller enters the
  *         error passive state.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @retval CAN Receive Error Counter.
  */
uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx)
{
  uint8_t counter=0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  /* Get the Receive Error Counter*/
  counter = (uint8_t)((CANx->ESR & CAN_ESR_REC)>> 24);
  /* Return the Receive Error Counter*/
  return counter;
}
/**
  * @brief  Returns the LSB of the 9-bit CANx Transmit Error Counter(TEC).
  * @param  CANx:   where x can be 1 or 2 to to select the CAN peripheral.
  * @retval LSB of the 9-bit CAN Transmit Error Counter.
  */
uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx)
{
  uint8_t counter=0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  /* Get the LSB of the 9-bit CANx Transmit Error Counter(TEC) */
  counter = (uint8_t)((CANx->ESR & CAN_ESR_TEC)>> 16);
  /* Return the LSB of the 9-bit CANx Transmit Error Counter(TEC) */
  return counter;
}
/**
  * @brief  Enables or disables the specified CANx interrupts.
  * @param  CANx:   where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_IT: specifies the CAN interrupt sources to be enabled or disabled.
  *                 This parameter can be:
  *                 - CAN_IT_TME,
  *                 - CAN_IT_FMP0,
  *                 - CAN_IT_FF0,
  *                 - CAN_IT_FOV0,
  *                 - CAN_IT_FMP1,
  *                 - CAN_IT_FF1,
  *                 - CAN_IT_FOV1,
  *                 - CAN_IT_EWG,
  *                 - CAN_IT_EPV,
  *                 - CAN_IT_LEC,
  *                 - CAN_IT_ERR,
  *                 - CAN_IT_WKU or
  *                 - CAN_IT_SLK.
  * @param  NewState: new state of the CAN interrupts.
  *                   This parameter can be: ENABLE or DISABLE.
  * @retval None.
  */
void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_IT(CAN_IT));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* Enable the selected CANx interrupt */
    CANx->IER |= CAN_IT;
  }
  else
  {
    /* Disable the selected CANx interrupt */
    CANx->IER &= ~CAN_IT;
  }
}
/**
  * @brief  Checks whether the specified CAN flag is set or not.
  * @param  CANx:     where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_FLAG: specifies the flag to check.
  *                   This parameter can be one of the following flags:
  *                  - CAN_FLAG_EWG
  *                  - CAN_FLAG_EPV
  *                  - CAN_FLAG_BOF
  *                  - CAN_FLAG_RQCP0
  *                  - CAN_FLAG_RQCP1
  *                  - CAN_FLAG_RQCP2
  *                  - CAN_FLAG_FMP1
  *                  - CAN_FLAG_FF1
  *                  - CAN_FLAG_FOV1
  *                  - CAN_FLAG_FMP0
  *                  - CAN_FLAG_FF0
  *                  - CAN_FLAG_FOV0
  *                  - CAN_FLAG_WKU
  *                  - CAN_FLAG_SLAK
  *                  - CAN_FLAG_LEC
  * @retval The new state of CAN_FLAG (SET or RESET).
  */
FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_GET_FLAG(CAN_FLAG));
  if((CAN_FLAG & CAN_FLAGS_ESR) != (uint32_t)RESET)
  {
    /* Check the status of the specified CAN flag */
    if ((CANx->ESR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
    {
      /* CAN_FLAG is set */
      bitstatus = SET;
    }
    else
    {
      /* CAN_FLAG is reset */
      bitstatus = RESET;
    }
  }
  else if((CAN_FLAG & CAN_FLAGS_MSR) != (uint32_t)RESET)
  {
    /* Check the status of the specified CAN flag */
    if ((CANx->MSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
    {
      /* CAN_FLAG is set */
      bitstatus = SET;
    }
    else
    {
      /* CAN_FLAG is reset */
      bitstatus = RESET;
    }
  }
  else if((CAN_FLAG & CAN_FLAGS_TSR) != (uint32_t)RESET)
  {
    /* Check the status of the specified CAN flag */
    if ((CANx->TSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
    {
      /* CAN_FLAG is set */
      bitstatus = SET;
    }
    else
    {
      /* CAN_FLAG is reset */
      bitstatus = RESET;
    }
  }
  else if((CAN_FLAG & CAN_FLAGS_RF0R) != (uint32_t)RESET)
  {
    /* Check the status of the specified CAN flag */
    if ((CANx->RF0R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
    {
      /* CAN_FLAG is set */
      bitstatus = SET;
    }
    else
    {
      /* CAN_FLAG is reset */
      bitstatus = RESET;
    }
  }
  else /* If(CAN_FLAG & CAN_FLAGS_RF1R != (uint32_t)RESET) */
  {
    /* Check the status of the specified CAN flag */
    if ((uint32_t)(CANx->RF1R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
    {
      /* CAN_FLAG is set */
      bitstatus = SET;
    }
    else
    {
      /* CAN_FLAG is reset */
      bitstatus = RESET;
    }
  }
  /* Return the CAN_FLAG status */
  return  bitstatus;
}
/**
  * @brief  Clears the CAN's pending flags.
  * @param  CANx:     where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_FLAG: specifies the flag to clear.
  *                   This parameter can be one of the following flags:
  *                    - CAN_FLAG_RQCP0
  *                    - CAN_FLAG_RQCP1
  *                    - CAN_FLAG_RQCP2
  *                    - CAN_FLAG_FF1
  *                    - CAN_FLAG_FOV1
  *                    - CAN_FLAG_FF0
  *                    - CAN_FLAG_FOV0
  *                    - CAN_FLAG_WKU
  *                    - CAN_FLAG_SLAK
  *                    - CAN_FLAG_LEC
  * @retval None.
  */
void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG)
{
  uint32_t flagtmp=0;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_CLEAR_FLAG(CAN_FLAG));
  if (CAN_FLAG == CAN_FLAG_LEC) /* ESR register */
  {
    /* Clear the selected CAN flags */
    CANx->ESR = (uint32_t)RESET;
  }
  else /* MSR or TSR or RF0R or RF1R */
  {
    flagtmp = CAN_FLAG & 0x000FFFFF;
    if ((CAN_FLAG & CAN_FLAGS_RF0R)!=(uint32_t)RESET)
    {
      /* Receive Flags */
      CANx->RF0R = (uint32_t)(flagtmp);
    }
    else if ((CAN_FLAG & CAN_FLAGS_RF1R)!=(uint32_t)RESET)
    {
      /* Receive Flags */
      CANx->RF1R = (uint32_t)(flagtmp);
    }
    else if ((CAN_FLAG & CAN_FLAGS_TSR)!=(uint32_t)RESET)
    {
      /* Transmit Flags */
      CANx->TSR = (uint32_t)(flagtmp);
    }
    else /* If((CAN_FLAG & CAN_FLAGS_MSR)!=(uint32_t)RESET) */
    {
      /* Operating mode Flags */
      CANx->MSR = (uint32_t)(flagtmp);
    }
  }
}
/**
  * @brief  Checks whether the specified CANx interrupt has occurred or not.
  * @param  CANx:    where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_IT:  specifies the CAN interrupt source to check.
  *                  This parameter can be one of the following flags:
  *                 -  CAN_IT_TME
  *                 -  CAN_IT_FMP0
  *                 -  CAN_IT_FF0
  *                 -  CAN_IT_FOV0
  *                 -  CAN_IT_FMP1
  *                 -  CAN_IT_FF1
  *                 -  CAN_IT_FOV1
  *                 -  CAN_IT_WKU
  *                 -  CAN_IT_SLK
  *                 -  CAN_IT_EWG
  *                 -  CAN_IT_EPV
  *                 -  CAN_IT_BOF
  *                 -  CAN_IT_LEC
  *                 -  CAN_IT_ERR
  * @retval The current state of CAN_IT (SET or RESET).
  */
ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT)
{
  ITStatus itstatus = RESET;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_IT(CAN_IT));
  /* check the enable interrupt bit */
 if((CANx->IER & CAN_IT) != RESET)
 {
   /* in case the Interrupt is enabled, .... */
    switch (CAN_IT)
    {
      case CAN_IT_TME:
               /* Check CAN_TSR_RQCPx bits */
                 itstatus = CheckITStatus(CANx->TSR, CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2);
          break;
      case CAN_IT_FMP0:
               /* Check CAN_RF0R_FMP0 bit */
                 itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FMP0);
          break;
      case CAN_IT_FF0:
               /* Check CAN_RF0R_FULL0 bit */
               itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FULL0);
          break;
      case CAN_IT_FOV0:
               /* Check CAN_RF0R_FOVR0 bit */
               itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FOVR0);
          break;
      case CAN_IT_FMP1:
               /* Check CAN_RF1R_FMP1 bit */
               itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FMP1);
          break;
      case CAN_IT_FF1:
               /* Check CAN_RF1R_FULL1 bit */
                 itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FULL1);
          break;
      case CAN_IT_FOV1:
               /* Check CAN_RF1R_FOVR1 bit */
                 itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FOVR1);
          break;
      case CAN_IT_WKU:
               /* Check CAN_MSR_WKUI bit */
               itstatus = CheckITStatus(CANx->MSR, CAN_MSR_WKUI);
          break;
      case CAN_IT_SLK:
               /* Check CAN_MSR_SLAKI bit */
                 itstatus = CheckITStatus(CANx->MSR, CAN_MSR_SLAKI);
          break;
      case CAN_IT_EWG:
               /* Check CAN_ESR_EWGF bit */
                 itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EWGF);
          break;
      case CAN_IT_EPV:
               /* Check CAN_ESR_EPVF bit */
                 itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EPVF);
          break;
      case CAN_IT_BOF:
               /* Check CAN_ESR_BOFF bit */
                 itstatus = CheckITStatus(CANx->ESR, CAN_ESR_BOFF);
          break;
      case CAN_IT_LEC:
               /* Check CAN_ESR_LEC bit */
                 itstatus = CheckITStatus(CANx->ESR, CAN_ESR_LEC);
          break;
      case CAN_IT_ERR:
               /* Check CAN_MSR_ERRI bit */
               itstatus = CheckITStatus(CANx->MSR, CAN_MSR_ERRI);
          break;
      default :
               /* in case of error, return RESET */
              itstatus = RESET;
              break;
    }
  }
  else
  {
   /* in case the Interrupt is not enabled, return RESET */
    itstatus  = RESET;
  }
  /* Return the CAN_IT status */
  return  itstatus;
}
/**
  * @brief  Clears the CANx's interrupt pending bits.
  * @param  CANx:    where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_IT: specifies the interrupt pending bit to clear.
  *                  -  CAN_IT_TME
  *                  -  CAN_IT_FF0
  *                  -  CAN_IT_FOV0
  *                  -  CAN_IT_FF1
  *                  -  CAN_IT_FOV1
  *                  -  CAN_IT_WKU
  *                  -  CAN_IT_SLK
  *                  -  CAN_IT_EWG
  *                  -  CAN_IT_EPV
  *                  -  CAN_IT_BOF
  *                  -  CAN_IT_LEC
  *                  -  CAN_IT_ERR
  * @retval None.
  */
void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_CLEAR_IT(CAN_IT));
  switch (CAN_IT)
  {
      case CAN_IT_TME:
              /* Clear CAN_TSR_RQCPx (rc_w1)*/
          CANx->TSR = CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2;
          break;
      case CAN_IT_FF0:
              /* Clear CAN_RF0R_FULL0 (rc_w1)*/
          CANx->RF0R = CAN_RF0R_FULL0;
          break;
      case CAN_IT_FOV0:
              /* Clear CAN_RF0R_FOVR0 (rc_w1)*/
          CANx->RF0R = CAN_RF0R_FOVR0;
          break;
      case CAN_IT_FF1:
              /* Clear CAN_RF1R_FULL1 (rc_w1)*/
          CANx->RF1R = CAN_RF1R_FULL1;
          break;
      case CAN_IT_FOV1:
              /* Clear CAN_RF1R_FOVR1 (rc_w1)*/
          CANx->RF1R = CAN_RF1R_FOVR1;
          break;
      case CAN_IT_WKU:
              /* Clear CAN_MSR_WKUI (rc_w1)*/
          CANx->MSR = CAN_MSR_WKUI;
          break;
      case CAN_IT_SLK:
              /* Clear CAN_MSR_SLAKI (rc_w1)*/
          CANx->MSR = CAN_MSR_SLAKI;
          break;
      case CAN_IT_EWG:
              /* Clear CAN_MSR_ERRI (rc_w1) */
          CANx->MSR = CAN_MSR_ERRI;
              /* Note : the corresponding Flag is cleared by hardware depending
                        of the CAN Bus status*/
          break;
      case CAN_IT_EPV:
              /* Clear CAN_MSR_ERRI (rc_w1) */
          CANx->MSR = CAN_MSR_ERRI;
              /* Note : the corresponding Flag is cleared by hardware depending
                        of the CAN Bus status*/
          break;
      case CAN_IT_BOF:
              /* Clear CAN_MSR_ERRI (rc_w1) */
          CANx->MSR = CAN_MSR_ERRI;
              /* Note : the corresponding Flag is cleared by hardware depending
                        of the CAN Bus status*/
          break;
      case CAN_IT_LEC:
              /*  Clear LEC bits */
          CANx->ESR = RESET;
              /* Clear CAN_MSR_ERRI (rc_w1) */
          CANx->MSR = CAN_MSR_ERRI;
          break;
      case CAN_IT_ERR:
              /*Clear LEC bits */
          CANx->ESR = RESET;
              /* Clear CAN_MSR_ERRI (rc_w1) */
          CANx->MSR = CAN_MSR_ERRI;
          /* Note : BOFF, EPVF and EWGF Flags are cleared by hardware depending
                  of the CAN Bus status*/
          break;
      default :
          break;
   }
}
/**
  * @brief  Checks whether the CAN interrupt has occurred or not.
  * @param  CAN_Reg: specifies the CAN interrupt register to check.
  * @param  It_Bit:  specifies the interrupt source bit to check.
  * @retval The new state of the CAN Interrupt (SET or RESET).
  */
static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit)
{
  ITStatus pendingbitstatus = RESET;
  if ((CAN_Reg & It_Bit) != (uint32_t)RESET)
  {
    /* CAN_IT is set */
    pendingbitstatus = SET;
  }
  else
  {
    /* CAN_IT is reset */
    pendingbitstatus = RESET;
  }
  return pendingbitstatus;
}
/**
  * @}
  */
/**
  * @}
  */
/**
  * @}
  */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
Diff truncated after the above file
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_cec.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_crc.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dac.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dbgmcu.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dma.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_exti.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_flash.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_fsmc.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_gpio.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_i2c.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_it.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_iwdg.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_pwr.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_rcc.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_rtc.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_sdio.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_spi.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_tim.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_usart.c src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_wwdg.c src/IAR_project/stm32_ov7670/fwlib/src/system_stm32f10x.c src/IAR_project/stm32_ov7670/iar_clean.bat src/IAR_project/stm32_ov7670/main/main.c src/IAR_project/stm32_ov7670/stm32_ov7670.ewd src/IAR_project/stm32_ov7670/stm32_ov7670.ewp src/IAR_project/stm32_ov7670/stm32_ov7670.eww src/bare_test/stm32_key/JLinkSettings.ini src/bare_test/stm32_key/board/startup_stm32f10x_hd.s src/bare_test/stm32_key/board/stm32v5_key.c src/bare_test/stm32_key/board/stm32v5_key.h src/bare_test/stm32_key/board/stm32v5_led.c src/bare_test/stm32_key/board/stm32v5_led.h src/bare_test/stm32_key/cmsis/core_cm3.c src/bare_test/stm32_key/cmsis/core_cm3.h src/bare_test/stm32_key/cmsis/stm32f10x.h src/bare_test/stm32_key/cmsis/system_stm32f10x.c src/bare_test/stm32_key/cmsis/system_stm32f10x.h src/bare_test/stm32_key/fwlib/inc/misc.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_adc.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_bkp.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_can.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_cec.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_conf.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_crc.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_dac.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_dbgmcu.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_dma.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_exti.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_flash.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_fsmc.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_gpio.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_i2c.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_iwdg.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_pwr.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_rcc.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_rtc.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_sdio.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_spi.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_tim.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_usart.h src/bare_test/stm32_key/fwlib/inc/stm32f10x_wwdg.h src/bare_test/stm32_key/fwlib/src/misc.c src/bare_test/stm32_key/fwlib/src/stm32f10x_adc.c src/bare_test/stm32_key/fwlib/src/stm32f10x_bkp.c src/bare_test/stm32_key/fwlib/src/stm32f10x_can.c src/bare_test/stm32_key/fwlib/src/stm32f10x_cec.c src/bare_test/stm32_key/fwlib/src/stm32f10x_crc.c src/bare_test/stm32_key/fwlib/src/stm32f10x_dac.c src/bare_test/stm32_key/fwlib/src/stm32f10x_dbgmcu.c src/bare_test/stm32_key/fwlib/src/stm32f10x_dma.c src/bare_test/stm32_key/fwlib/src/stm32f10x_exti.c src/bare_test/stm32_key/fwlib/src/stm32f10x_flash.c src/bare_test/stm32_key/fwlib/src/stm32f10x_fsmc.c src/bare_test/stm32_key/fwlib/src/stm32f10x_gpio.c src/bare_test/stm32_key/fwlib/src/stm32f10x_i2c.c src/bare_test/stm32_key/fwlib/src/stm32f10x_iwdg.c src/bare_test/stm32_key/fwlib/src/stm32f10x_pwr.c src/bare_test/stm32_key/fwlib/src/stm32f10x_rcc.c src/bare_test/stm32_key/fwlib/src/stm32f10x_rtc.c src/bare_test/stm32_key/fwlib/src/stm32f10x_sdio.c src/bare_test/stm32_key/fwlib/src/stm32f10x_spi.c src/bare_test/stm32_key/fwlib/src/stm32f10x_tim.c src/bare_test/stm32_key/fwlib/src/stm32f10x_usart.c src/bare_test/stm32_key/fwlib/src/stm32f10x_wwdg.c src/bare_test/stm32_key/fwlib/src/system_stm32f10x.c src/bare_test/stm32_key/keil_clean.bat src/bare_test/stm32_key/main/main.c src/bare_test/stm32_key/stm32_interrupt.uvgui.USER src/bare_test/stm32_key/stm32_interrupt.uvopt src/bare_test/stm32_key/stm32_interrupt.uvproj src/bare_test/stm32_lcd/JLinkSettings.ini src/bare_test/stm32_lcd/board/lcd_draw.c src/bare_test/stm32_lcd/board/lcd_draw.h src/bare_test/stm32_lcd/board/lcd_font.c src/bare_test/stm32_lcd/board/lcd_font.h src/bare_test/stm32_lcd/board/lcd_font10x14.c src/bare_test/stm32_lcd/board/lcd_font10x14.h src/bare_test/stm32_lcd/board/lcd_gimp_image.h src/bare_test/stm32_lcd/board/lcd_r61509v.c src/bare_test/stm32_lcd/board/lcd_r61509v.h src/bare_test/stm32_lcd/board/startup_stm32f10x_hd.s src/bare_test/stm32_lcd/board/stm32f10x_conf.h src/bare_test/stm32_lcd/board/stm32f10x_it.c src/bare_test/stm32_lcd/board/stm32f10x_it.h src/bare_test/stm32_lcd/board/stm32v5_led.c src/bare_test/stm32_lcd/board/stm32v5_led.h src/bare_test/stm32_lcd/board/stm32v5_systick.c src/bare_test/stm32_lcd/board/stm32v5_systick.h src/bare_test/stm32_lcd/board/stm32v5_uart.c src/bare_test/stm32_lcd/board/stm32v5_uart.h src/bare_test/stm32_lcd/cmsis/core_cm3.c src/bare_test/stm32_lcd/cmsis/core_cm3.h src/bare_test/stm32_lcd/cmsis/stm32f10x.h src/bare_test/stm32_lcd/cmsis/system_stm32f10x.c src/bare_test/stm32_lcd/cmsis/system_stm32f10x.h src/bare_test/stm32_lcd/fwlib/inc/misc.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_adc.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_bkp.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_can.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_cec.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_conf.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_crc.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dac.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dbgmcu.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dma.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_exti.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_flash.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_fsmc.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_gpio.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_i2c.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_iwdg.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_pwr.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_rcc.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_rtc.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_sdio.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_spi.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_tim.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_usart.h src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_wwdg.h src/bare_test/stm32_lcd/fwlib/src/misc.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_adc.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_bkp.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_can.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_cec.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_crc.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dac.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dbgmcu.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dma.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_exti.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_flash.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_fsmc.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_gpio.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_i2c.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_iwdg.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_pwr.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_rcc.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_rtc.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_sdio.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_spi.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_tim.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_usart.c src/bare_test/stm32_lcd/fwlib/src/stm32f10x_wwdg.c src/bare_test/stm32_lcd/fwlib/src/system_stm32f10x.c src/bare_test/stm32_lcd/keil_clean.bat src/bare_test/stm32_lcd/main/main.c src/bare_test/stm32_lcd/st32_lcd.uvgui.USER src/bare_test/stm32_lcd/st32_lcd.uvopt src/bare_test/stm32_lcd/st32_lcd.uvproj src/bare_test/stm32_led/JLinkSettings.ini src/bare_test/stm32_led/asm/startup_stm32f10x_hd.s src/bare_test/stm32_led/cmsis/core_cm3.c src/bare_test/stm32_led/cmsis/core_cm3.h src/bare_test/stm32_led/cmsis/stm32f10x.h src/bare_test/stm32_led/cmsis/system_stm32f10x.c src/bare_test/stm32_led/cmsis/system_stm32f10x.h src/bare_test/stm32_led/fwlib/inc/misc.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_adc.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_bkp.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_can.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_cec.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_conf.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_crc.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_dac.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_dbgmcu.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_dma.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_exti.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_flash.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_fsmc.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_gpio.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_i2c.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_iwdg.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_pwr.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_rcc.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_rtc.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_sdio.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_spi.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_tim.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_usart.h src/bare_test/stm32_led/fwlib/inc/stm32f10x_wwdg.h src/bare_test/stm32_led/fwlib/src/misc.c src/bare_test/stm32_led/fwlib/src/stm32f10x_adc.c src/bare_test/stm32_led/fwlib/src/stm32f10x_bkp.c src/bare_test/stm32_led/fwlib/src/stm32f10x_can.c src/bare_test/stm32_led/fwlib/src/stm32f10x_cec.c src/bare_test/stm32_led/fwlib/src/stm32f10x_crc.c src/bare_test/stm32_led/fwlib/src/stm32f10x_dac.c src/bare_test/stm32_led/fwlib/src/stm32f10x_dbgmcu.c src/bare_test/stm32_led/fwlib/src/stm32f10x_dma.c src/bare_test/stm32_led/fwlib/src/stm32f10x_exti.c src/bare_test/stm32_led/fwlib/src/stm32f10x_flash.c src/bare_test/stm32_led/fwlib/src/stm32f10x_fsmc.c src/bare_test/stm32_led/fwlib/src/stm32f10x_gpio.c src/bare_test/stm32_led/fwlib/src/stm32f10x_i2c.c src/bare_test/stm32_led/fwlib/src/stm32f10x_iwdg.c src/bare_test/stm32_led/fwlib/src/stm32f10x_pwr.c src/bare_test/stm32_led/fwlib/src/stm32f10x_rcc.c src/bare_test/stm32_led/fwlib/src/stm32f10x_rtc.c src/bare_test/stm32_led/fwlib/src/stm32f10x_sdio.c src/bare_test/stm32_led/fwlib/src/stm32f10x_spi.c src/bare_test/stm32_led/fwlib/src/stm32f10x_tim.c src/bare_test/stm32_led/fwlib/src/stm32f10x_usart.c src/bare_test/stm32_led/fwlib/src/stm32f10x_wwdg.c src/bare_test/stm32_led/fwlib/src/system_stm32f10x.c src/bare_test/stm32_led/keil_clean.bat src/bare_test/stm32_led/stm32_led.uvgui.USER src/bare_test/stm32_led/stm32_led.uvopt src/bare_test/stm32_led/stm32_led.uvproj src/bare_test/stm32_led/user/main.c src/bare_test/stm32_led/user/main.c.dump src/bare_test/stm32_led/user/stm32f10x_conf.h src/bare_test/stm32_led/user/stm32f10x_it.c src/bare_test/stm32_led/user/stm32f10x_it.h src/bare_test/stm32_ov7670/JLinkSettings.ini src/bare_test/stm32_ov7670/board/lcd_draw.c src/bare_test/stm32_ov7670/board/lcd_draw.h src/bare_test/stm32_ov7670/board/lcd_font.c src/bare_test/stm32_ov7670/board/lcd_font.h src/bare_test/stm32_ov7670/board/lcd_font10x14.c src/bare_test/stm32_ov7670/board/lcd_font10x14.h src/bare_test/stm32_ov7670/board/lcd_gimp_image.h src/bare_test/stm32_ov7670/board/lcd_r61509v.c src/bare_test/stm32_ov7670/board/lcd_r61509v.h src/bare_test/stm32_ov7670/board/ov7670_reg.h src/bare_test/stm32_ov7670/board/startup_stm32f10x_hd.s src/bare_test/stm32_ov7670/board/stm32f10x_conf.h src/bare_test/stm32_ov7670/board/stm32f10x_it.c src/bare_test/stm32_ov7670/board/stm32f10x_it.h src/bare_test/stm32_ov7670/board/stm32v5_led.c src/bare_test/stm32_ov7670/board/stm32v5_led.h src/bare_test/stm32_ov7670/board/stm32v5_ov7670.c src/bare_test/stm32_ov7670/board/stm32v5_ov7670.h src/bare_test/stm32_ov7670/board/stm32v5_sccb.c src/bare_test/stm32_ov7670/board/stm32v5_sccb.h src/bare_test/stm32_ov7670/board/stm32v5_systick.c src/bare_test/stm32_ov7670/board/stm32v5_systick.h src/bare_test/stm32_ov7670/board/stm32v5_uart.c src/bare_test/stm32_ov7670/board/stm32v5_uart.h src/bare_test/stm32_ov7670/cmsis/core_cm3.c src/bare_test/stm32_ov7670/cmsis/core_cm3.h src/bare_test/stm32_ov7670/cmsis/stm32f10x.h src/bare_test/stm32_ov7670/cmsis/system_stm32f10x.c src/bare_test/stm32_ov7670/cmsis/system_stm32f10x.h src/bare_test/stm32_ov7670/fwlib/inc/misc.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_adc.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_bkp.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_can.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_cec.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_conf.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_crc.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dac.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dbgmcu.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dma.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_exti.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_flash.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_fsmc.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_gpio.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_i2c.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_iwdg.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_pwr.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_rcc.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_rtc.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_sdio.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_spi.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_tim.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_usart.h src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_wwdg.h src/bare_test/stm32_ov7670/fwlib/src/misc.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_adc.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_bkp.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_can.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_cec.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_crc.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dac.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dbgmcu.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dma.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_exti.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_flash.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_fsmc.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_gpio.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_i2c.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_iwdg.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_pwr.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_rcc.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_rtc.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_sdio.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_spi.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_tim.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_usart.c src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_wwdg.c src/bare_test/stm32_ov7670/fwlib/src/system_stm32f10x.c src/bare_test/stm32_ov7670/keil_clean.bat src/bare_test/stm32_ov7670/main/main.c src/bare_test/stm32_ov7670/stm32_ov7670.uvgui.USER src/bare_test/stm32_ov7670/stm32_ov7670.uvopt src/bare_test/stm32_ov7670/stm32_ov7670.uvproj src/bare_test/stm32_systick/JLinkSettings.ini src/bare_test/stm32_systick/board/startup_stm32f10x_hd.s src/bare_test/stm32_systick/board/stm32f10x_conf.h src/bare_test/stm32_systick/board/stm32f10x_it.c src/bare_test/stm32_systick/board/stm32f10x_it.h src/bare_test/stm32_systick/board/stm32v5_led.c src/bare_test/stm32_systick/board/stm32v5_led.h src/bare_test/stm32_systick/board/stm32v5_systick.c src/bare_test/stm32_systick/board/stm32v5_systick.h src/bare_test/stm32_systick/board/stm32v5_uart.c src/bare_test/stm32_systick/board/stm32v5_uart.h src/bare_test/stm32_systick/cmsis/core_cm3.c src/bare_test/stm32_systick/cmsis/core_cm3.h src/bare_test/stm32_systick/cmsis/stm32f10x.h src/bare_test/stm32_systick/cmsis/system_stm32f10x.c src/bare_test/stm32_systick/cmsis/system_stm32f10x.h src/bare_test/stm32_systick/fwlib/inc/misc.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_adc.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_bkp.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_can.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_cec.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_conf.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_crc.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dac.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dbgmcu.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dma.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_exti.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_flash.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_fsmc.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_gpio.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_i2c.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_iwdg.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_pwr.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_rcc.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_rtc.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_sdio.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_spi.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_tim.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_usart.h src/bare_test/stm32_systick/fwlib/inc/stm32f10x_wwdg.h src/bare_test/stm32_systick/fwlib/src/misc.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_adc.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_bkp.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_can.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_cec.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_crc.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_dac.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_dbgmcu.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_dma.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_exti.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_flash.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_fsmc.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_gpio.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_i2c.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_iwdg.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_pwr.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_rcc.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_rtc.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_sdio.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_spi.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_tim.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_usart.c src/bare_test/stm32_systick/fwlib/src/stm32f10x_wwdg.c src/bare_test/stm32_systick/keil_clean.bat src/bare_test/stm32_systick/main/main.c src/bare_test/stm32_systick/stm32_systick.uvgui.USER src/bare_test/stm32_systick/stm32_systick.uvopt src/bare_test/stm32_systick/stm32_systick.uvproj src/library/STM32F10x_StdPeriph_Lib_V3.5.0.zip src/os_contiki/JLinkSettings.ini src/os_contiki/asm/startup_stm32f10x_hd.s src/os_contiki/board/clock.c src/os_contiki/board/contiki-conf.h src/os_contiki/board/contiki_main.c src/os_contiki/board/cortexm3_macro.h src/os_contiki/board/debug-uart.c src/os_contiki/board/debug-uart.h src/os_contiki/board/rtimer-arch.h src/os_contiki/board/stm32f10x_dma.h src/os_contiki/board/stm32f10x_it.c src/os_contiki/board/stm32f10x_it.h src/os_contiki/board/stm32f10x_nvic.h src/os_contiki/board/stm32f10x_type.h src/os_contiki/board/stm32v5_led.c src/os_contiki/board/stm32v5_led.h src/os_contiki/board/structgen_opts.gen.h src/os_contiki/cmsis/core_cm3.c src/os_contiki/cmsis/core_cm3.h src/os_contiki/cmsis/stm32f10x.h src/os_contiki/cmsis/system_stm32f10x.c src/os_contiki/cmsis/system_stm32f10x.h src/os_contiki/contiki/contiki-default-conf.h src/os_contiki/contiki/contiki-lib.h src/os_contiki/contiki/contiki-net.h src/os_contiki/contiki/contiki-version.h src/os_contiki/contiki/contiki.h src/os_contiki/contiki/core/cfs/cfs-coffee.c src/os_contiki/contiki/core/cfs/cfs-coffee.h src/os_contiki/contiki/core/cfs/cfs-eeprom.c src/os_contiki/contiki/core/cfs/cfs-posix-dir.c src/os_contiki/contiki/core/cfs/cfs-posix.c src/os_contiki/contiki/core/cfs/cfs-ram.c src/os_contiki/contiki/core/cfs/cfs-xmem.c src/os_contiki/contiki/core/cfs/cfs.h src/os_contiki/contiki/core/contiki-default-conf.h src/os_contiki/contiki/core/contiki-lib.h src/os_contiki/contiki/core/contiki-net.h src/os_contiki/contiki/core/contiki-version.h src/os_contiki/contiki/core/contiki.h src/os_contiki/contiki/core/ctk/ctk-conio.c src/os_contiki/contiki/core/ctk/ctk-conio.h src/os_contiki/contiki/core/ctk/ctk-draw.h src/os_contiki/contiki/core/ctk/ctk-mouse.h src/os_contiki/contiki/core/ctk/ctk-vncarch.h src/os_contiki/contiki/core/ctk/ctk-vncfont.c src/os_contiki/contiki/core/ctk/ctk-vncfont.h src/os_contiki/contiki/core/ctk/ctk-vncserver.c src/os_contiki/contiki/core/ctk/ctk-vncserver.h src/os_contiki/contiki/core/ctk/ctk.c src/os_contiki/contiki/core/ctk/ctk.h src/os_contiki/contiki/core/ctk/vnc-out.c src/os_contiki/contiki/core/ctk/vnc-out.h src/os_contiki/contiki/core/ctk/vnc-server.c src/os_contiki/contiki/core/ctk/vnc-server.h src/os_contiki/contiki/core/dev/battery-sensor.h src/os_contiki/contiki/core/dev/button-sensor.h src/os_contiki/contiki/core/dev/cc2420-aes.c src/os_contiki/contiki/core/dev/cc2420-aes.h src/os_contiki/contiki/core/dev/cc2420.c src/os_contiki/contiki/core/dev/cc2420.h src/os_contiki/contiki/core/dev/cc2420_const.h src/os_contiki/contiki/core/dev/cc2520.c src/os_contiki/contiki/core/dev/cc2520.h src/os_contiki/contiki/core/dev/cc2520_const.h src/os_contiki/contiki/core/dev/ds2411.c src/os_contiki/contiki/core/dev/ds2411.h src/os_contiki/contiki/core/dev/eeprom.h src/os_contiki/contiki/core/dev/leds.c src/os_contiki/contiki/core/dev/leds.h src/os_contiki/contiki/core/dev/nullradio.c src/os_contiki/contiki/core/dev/nullradio.h src/os_contiki/contiki/core/dev/radio-sensor.h src/os_contiki/contiki/core/dev/radio.h src/os_contiki/contiki/core/dev/rom.h src/os_contiki/contiki/core/dev/serial-line.c src/os_contiki/contiki/core/dev/serial-line.h src/os_contiki/contiki/core/dev/sht11-sensor.c src/os_contiki/contiki/core/dev/sht11-sensor.h src/os_contiki/contiki/core/dev/sht11.c src/os_contiki/contiki/core/dev/sht11.h src/os_contiki/contiki/core/dev/slip.c src/os_contiki/contiki/core/dev/slip.h src/os_contiki/contiki/core/dev/spi.h src/os_contiki/contiki/core/dev/watchdog.h src/os_contiki/contiki/core/dev/xmem.h src/os_contiki/contiki/core/lib/assert.c src/os_contiki/contiki/core/lib/assert.h src/os_contiki/contiki/core/lib/checkpoint.c src/os_contiki/contiki/core/lib/checkpoint.h src/os_contiki/contiki/core/lib/crc16.c src/os_contiki/contiki/core/lib/crc16.h src/os_contiki/contiki/core/lib/ctk-filedialog.c src/os_contiki/contiki/core/lib/ctk-filedialog.h src/os_contiki/contiki/core/lib/ctk-textentry-checkbox.c src/os_contiki/contiki/core/lib/ctk-textentry-checkbox.h src/os_contiki/contiki/core/lib/ctk-textentry-cmdline.c src/os_contiki/contiki/core/lib/ctk-textentry-cmdline.h src/os_contiki/contiki/core/lib/ctk-textentry-multiline.c src/os_contiki/contiki/core/lib/ctk-textentry-multiline.h src/os_contiki/contiki/core/lib/gcr.c src/os_contiki/contiki/core/lib/gcr.h src/os_contiki/contiki/core/lib/ifft.c src/os_contiki/contiki/core/lib/ifft.h src/os_contiki/contiki/core/lib/libconio.c src/os_contiki/contiki/core/lib/libconio.h src/os_contiki/contiki/core/lib/list.c src/os_contiki/contiki/core/lib/list.h src/os_contiki/contiki/core/lib/me.c src/os_contiki/contiki/core/lib/me.h src/os_contiki/contiki/core/lib/me_tabs.c src/os_contiki/contiki/core/lib/me_tabs.h src/os_contiki/contiki/core/lib/memb.c src/os_contiki/contiki/core/lib/memb.h src/os_contiki/contiki/core/lib/mmem.c src/os_contiki/contiki/core/lib/mmem.h src/os_contiki/contiki/core/lib/petsciiconv.c src/os_contiki/contiki/core/lib/petsciiconv.h src/os_contiki/contiki/core/lib/print-stats.c src/os_contiki/contiki/core/lib/print-stats.h src/os_contiki/contiki/core/lib/random.c src/os_contiki/contiki/core/lib/random.h src/os_contiki/contiki/core/lib/ringbuf.c src/os_contiki/contiki/core/lib/ringbuf.h src/os_contiki/contiki/core/lib/sensors.c src/os_contiki/contiki/core/lib/sensors.h src/os_contiki/contiki/core/lib/settings.c src/os_contiki/contiki/core/lib/settings.h src/os_contiki/contiki/core/lib/strncasecmp.c src/os_contiki/contiki/core/lib/trickle-timer.c src/os_contiki/contiki/core/lib/trickle-timer.h src/os_contiki/contiki/core/loader/cle.c src/os_contiki/contiki/core/loader/cle.h src/os_contiki/contiki/core/loader/cle_avr.c src/os_contiki/contiki/core/loader/cle_msp430.c src/os_contiki/contiki/core/loader/cmod.c src/os_contiki/contiki/core/loader/cmod.h src/os_contiki/contiki/core/loader/dlloader.c src/os_contiki/contiki/core/loader/dlloader.h src/os_contiki/contiki/core/loader/elf32.h src/os_contiki/contiki/core/loader/elfloader-arch.h src/os_contiki/contiki/core/loader/elfloader-avr.c src/os_contiki/contiki/core/loader/elfloader-msp430.c src/os_contiki/contiki/core/loader/elfloader-stub.c src/os_contiki/contiki/core/loader/elfloader-x86.c src/os_contiki/contiki/core/loader/elfloader.c src/os_contiki/contiki/core/loader/elfloader.h src/os_contiki/contiki/core/loader/elfloader_compat.c src/os_contiki/contiki/core/loader/elfloader_compat.h src/os_contiki/contiki/core/loader/sym.c src/os_contiki/contiki/core/loader/sym.h src/os_contiki/contiki/core/loader/symbols-def.h src/os_contiki/contiki/core/loader/symbols.h src/os_contiki/contiki/core/loader/symtab-avr.c src/os_contiki/contiki/core/loader/symtab.c src/os_contiki/contiki/core/loader/symtab.h src/os_contiki/contiki/core/net/Makefile.uip src/os_contiki/contiki/core/net/dhcpc.c src/os_contiki/contiki/core/net/dhcpc.h src/os_contiki/contiki/core/net/hc.c src/os_contiki/contiki/core/net/hc.h src/os_contiki/contiki/core/net/mac/Makefile.mac src/os_contiki/contiki/core/net/mac/contikimac.c src/os_contiki/contiki/core/net/mac/contikimac.h src/os_contiki/contiki/core/net/mac/csma.c src/os_contiki/contiki/core/net/mac/csma.h src/os_contiki/contiki/core/net/mac/cxmac.c src/os_contiki/contiki/core/net/mac/cxmac.h src/os_contiki/contiki/core/net/mac/frame802154.c src/os_contiki/contiki/core/net/mac/frame802154.h src/os_contiki/contiki/core/net/mac/framer-802154.c src/os_contiki/contiki/core/net/mac/framer-802154.h src/os_contiki/contiki/core/net/mac/framer-nullmac.c src/os_contiki/contiki/core/net/mac/framer-nullmac.h src/os_contiki/contiki/core/net/mac/framer.h src/os_contiki/contiki/core/net/mac/lpp.c src/os_contiki/contiki/core/net/mac/lpp.h src/os_contiki/contiki/core/net/mac/mac.c src/os_contiki/contiki/core/net/mac/mac.h src/os_contiki/contiki/core/net/mac/nullmac.c src/os_contiki/contiki/core/net/mac/nullmac.h src/os_contiki/contiki/core/net/mac/nullrdc-noframer.c src/os_contiki/contiki/core/net/mac/nullrdc-noframer.h src/os_contiki/contiki/core/net/mac/nullrdc.c src/os_contiki/contiki/core/net/mac/nullrdc.h src/os_contiki/contiki/core/net/mac/phase.c src/os_contiki/contiki/core/net/mac/phase.h src/os_contiki/contiki/core/net/mac/rdc.h src/os_contiki/contiki/core/net/mac/sicslowmac.c src/os_contiki/contiki/core/net/mac/sicslowmac.h src/os_contiki/contiki/core/net/mac/xmac.c src/os_contiki/contiki/core/net/mac/xmac.h src/os_contiki/contiki/core/net/nbr-table.c src/os_contiki/contiki/core/net/nbr-table.h src/os_contiki/contiki/core/net/netstack.c src/os_contiki/contiki/core/net/netstack.h src/os_contiki/contiki/core/net/packetbuf.c src/os_contiki/contiki/core/net/packetbuf.h src/os_contiki/contiki/core/net/packetqueue.c src/os_contiki/contiki/core/net/packetqueue.h src/os_contiki/contiki/core/net/psock.c src/os_contiki/contiki/core/net/psock.h src/os_contiki/contiki/core/net/queuebuf.c src/os_contiki/contiki/core/net/queuebuf.h src/os_contiki/contiki/core/net/rawpacket-udp.c src/os_contiki/contiki/core/net/rawpacket-udp.h src/os_contiki/contiki/core/net/rawpacket.h src/os_contiki/contiki/core/net/resolv.c src/os_contiki/contiki/core/net/resolv.h src/os_contiki/contiki/core/net/rime.h src/os_contiki/contiki/core/net/rime/Makefile.rime src/os_contiki/contiki/core/net/rime/abc.c src/os_contiki/contiki/core/net/rime/abc.h src/os_contiki/contiki/core/net/rime/announcement.c src/os_contiki/contiki/core/net/rime/announcement.h src/os_contiki/contiki/core/net/rime/broadcast-announcement.c src/os_contiki/contiki/core/net/rime/broadcast-announcement.h src/os_contiki/contiki/core/net/rime/broadcast.c src/os_contiki/contiki/core/net/rime/broadcast.h src/os_contiki/contiki/core/net/rime/chameleon-bitopt.c src/os_contiki/contiki/core/net/rime/chameleon-bitopt.h src/os_contiki/contiki/core/net/rime/chameleon-raw.c src/os_contiki/contiki/core/net/rime/chameleon-raw.h src/os_contiki/contiki/core/net/rime/chameleon.c src/os_contiki/contiki/core/net/rime/chameleon.h src/os_contiki/contiki/core/net/rime/channel.c src/os_contiki/contiki/core/net/rime/channel.h src/os_contiki/contiki/core/net/rime/collect-link-estimate.c src/os_contiki/contiki/core/net/rime/collect-link-estimate.h src/os_contiki/contiki/core/net/rime/collect-neighbor.c src/os_contiki/contiki/core/net/rime/collect-neighbor.h src/os_contiki/contiki/core/net/rime/collect.c src/os_contiki/contiki/core/net/rime/collect.h src/os_contiki/contiki/core/net/rime/ipolite.c src/os_contiki/contiki/core/net/rime/ipolite.h src/os_contiki/contiki/core/net/rime/mesh.c src/os_contiki/contiki/core/net/rime/mesh.h src/os_contiki/contiki/core/net/rime/multihop.c src/os_contiki/contiki/core/net/rime/multihop.h src/os_contiki/contiki/core/net/rime/neighbor-discovery.c src/os_contiki/contiki/core/net/rime/neighbor-discovery.h src/os_contiki/contiki/core/net/rime/netflood.c src/os_contiki/contiki/core/net/rime/netflood.h src/os_contiki/contiki/core/net/rime/polite-announcement.c src/os_contiki/contiki/core/net/rime/polite-announcement.h src/os_contiki/contiki/core/net/rime/polite.c src/os_contiki/contiki/core/net/rime/polite.h src/os_contiki/contiki/core/net/rime/rime-udp.c src/os_contiki/contiki/core/net/rime/rime-udp.h src/os_contiki/contiki/core/net/rime/rime.c src/os_contiki/contiki/core/net/rime/rimeaddr.c src/os_contiki/contiki/core/net/rime/rimeaddr.h src/os_contiki/contiki/core/net/rime/rimestats.c src/os_contiki/contiki/core/net/rime/rimestats.h src/os_contiki/contiki/core/net/rime/rmh.c src/os_contiki/contiki/core/net/rime/rmh.h src/os_contiki/contiki/core/net/rime/route-discovery.c src/os_contiki/contiki/core/net/rime/route-discovery.h src/os_contiki/contiki/core/net/rime/route.c src/os_contiki/contiki/core/net/rime/route.h src/os_contiki/contiki/core/net/rime/rucb.c src/os_contiki/contiki/core/net/rime/rucb.h src/os_contiki/contiki/core/net/rime/rudolph0.c src/os_contiki/contiki/core/net/rime/rudolph0.h src/os_contiki/contiki/core/net/rime/rudolph1.c src/os_contiki/contiki/core/net/rime/rudolph1.h src/os_contiki/contiki/core/net/rime/rudolph2.c src/os_contiki/contiki/core/net/rime/rudolph2.h src/os_contiki/contiki/core/net/rime/runicast.c src/os_contiki/contiki/core/net/rime/runicast.h src/os_contiki/contiki/core/net/rime/stbroadcast.c src/os_contiki/contiki/core/net/rime/stbroadcast.h src/os_contiki/contiki/core/net/rime/stunicast.c src/os_contiki/contiki/core/net/rime/stunicast.h src/os_contiki/contiki/core/net/rime/timesynch.c src/os_contiki/contiki/core/net/rime/timesynch.h src/os_contiki/contiki/core/net/rime/trickle.c src/os_contiki/contiki/core/net/rime/trickle.h src/os_contiki/contiki/core/net/rime/unicast.c src/os_contiki/contiki/core/net/rime/unicast.h src/os_contiki/contiki/core/net/rpl/Makefile.rpl src/os_contiki/contiki/core/net/rpl/rpl-conf.h src/os_contiki/contiki/core/net/rpl/rpl-dag.c src/os_contiki/contiki/core/net/rpl/rpl-ext-header.c src/os_contiki/contiki/core/net/rpl/rpl-icmp6.c src/os_contiki/contiki/core/net/rpl/rpl-mrhof.c src/os_contiki/contiki/core/net/rpl/rpl-of0.c src/os_contiki/contiki/core/net/rpl/rpl-private.h src/os_contiki/contiki/core/net/rpl/rpl-timers.c src/os_contiki/contiki/core/net/rpl/rpl.c src/os_contiki/contiki/core/net/rpl/rpl.h src/os_contiki/contiki/core/net/sicslowpan.c src/os_contiki/contiki/core/net/sicslowpan.h src/os_contiki/contiki/core/net/simple-udp.c src/os_contiki/contiki/core/net/simple-udp.h src/os_contiki/contiki/core/net/slipdev.c src/os_contiki/contiki/core/net/slipdev.h src/os_contiki/contiki/core/net/tcpdump.c src/os_contiki/contiki/core/net/tcpdump.h src/os_contiki/contiki/core/net/tcpip.c src/os_contiki/contiki/core/net/tcpip.h src/os_contiki/contiki/core/net/uaodv-def.h src/os_contiki/contiki/core/net/uaodv-rt.c src/os_contiki/contiki/core/net/uaodv-rt.h src/os_contiki/contiki/core/net/uaodv.c src/os_contiki/contiki/core/net/uaodv.h src/os_contiki/contiki/core/net/uip-debug.c src/os_contiki/contiki/core/net/uip-debug.h src/os_contiki/contiki/core/net/uip-ds6-nbr.c src/os_contiki/contiki/core/net/uip-ds6-nbr.h src/os_contiki/contiki/core/net/uip-ds6-route.c src/os_contiki/contiki/core/net/uip-ds6-route.h src/os_contiki/contiki/core/net/uip-ds6.c src/os_contiki/contiki/core/net/uip-ds6.h src/os_contiki/contiki/core/net/uip-fw-drv.c src/os_contiki/contiki/core/net/uip-fw-drv.h src/os_contiki/contiki/core/net/uip-fw.c src/os_contiki/contiki/core/net/uip-fw.h src/os_contiki/contiki/core/net/uip-icmp6.c src/os_contiki/contiki/core/net/uip-icmp6.h src/os_contiki/contiki/core/net/uip-nd6.c src/os_contiki/contiki/core/net/uip-nd6.h src/os_contiki/contiki/core/net/uip-neighbor.c src/os_contiki/contiki/core/net/uip-neighbor.h src/os_contiki/contiki/core/net/uip-over-mesh.c src/os_contiki/contiki/core/net/uip-over-mesh.h src/os_contiki/contiki/core/net/uip-packetqueue.c src/os_contiki/contiki/core/net/uip-packetqueue.h src/os_contiki/contiki/core/net/uip-split.c src/os_contiki/contiki/core/net/uip-split.h src/os_contiki/contiki/core/net/uip-udp-packet.c src/os_contiki/contiki/core/net/uip-udp-packet.h src/os_contiki/contiki/core/net/uip.c src/os_contiki/contiki/core/net/uip.h src/os_contiki/contiki/core/net/uip6.c src/os_contiki/contiki/core/net/uip_arch.h src/os_contiki/contiki/core/net/uip_arp.c src/os_contiki/contiki/core/net/uip_arp.h src/os_contiki/contiki/core/net/uiplib.c src/os_contiki/contiki/core/net/uiplib.h src/os_contiki/contiki/core/net/uipopt.h src/os_contiki/contiki/core/sys/arg.c src/os_contiki/contiki/core/sys/arg.h src/os_contiki/contiki/core/sys/autostart.c src/os_contiki/contiki/core/sys/autostart.h src/os_contiki/contiki/core/sys/cc.h src/os_contiki/contiki/core/sys/clock.h src/os_contiki/contiki/core/sys/compower.c src/os_contiki/contiki/core/sys/compower.h src/os_contiki/contiki/core/sys/ctimer.c src/os_contiki/contiki/core/sys/ctimer.h src/os_contiki/contiki/core/sys/dsc.h src/os_contiki/contiki/core/sys/energest.c src/os_contiki/contiki/core/sys/energest.h src/os_contiki/contiki/core/sys/etimer.c src/os_contiki/contiki/core/sys/etimer.h src/os_contiki/contiki/core/sys/lc-addrlabels.h src/os_contiki/contiki/core/sys/lc-switch.h src/os_contiki/contiki/core/sys/lc.h src/os_contiki/contiki/core/sys/loader.h src/os_contiki/contiki/core/sys/log.h src/os_contiki/contiki/core/sys/mt.c src/os_contiki/contiki/core/sys/mt.h src/os_contiki/contiki/core/sys/node-id.h src/os_contiki/contiki/core/sys/process.c src/os_contiki/contiki/core/sys/process.h src/os_contiki/contiki/core/sys/procinit.c src/os_contiki/contiki/core/sys/procinit.h src/os_contiki/contiki/core/sys/profile-aggregates.c src/os_contiki/contiki/core/sys/profile.c src/os_contiki/contiki/core/sys/profile.h src/os_contiki/contiki/core/sys/pt-sem.h src/os_contiki/contiki/core/sys/pt.h src/os_contiki/contiki/core/sys/rtimer.c src/os_contiki/contiki/core/sys/rtimer.h src/os_contiki/contiki/core/sys/stimer.c src/os_contiki/contiki/core/sys/stimer.h src/os_contiki/contiki/core/sys/subprocess.h src/os_contiki/contiki/core/sys/timer.c src/os_contiki/contiki/core/sys/timer.h src/os_contiki/contiki/core/sys/timetable-aggregate.c src/os_contiki/contiki/core/sys/timetable-aggregate.h src/os_contiki/contiki/core/sys/timetable.c src/os_contiki/contiki/core/sys/timetable.h src/os_contiki/fwlib/inc/misc.h src/os_contiki/fwlib/inc/stm32f10x_adc.h src/os_contiki/fwlib/inc/stm32f10x_bkp.h src/os_contiki/fwlib/inc/stm32f10x_can.h src/os_contiki/fwlib/inc/stm32f10x_cec.h src/os_contiki/fwlib/inc/stm32f10x_conf.h src/os_contiki/fwlib/inc/stm32f10x_crc.h src/os_contiki/fwlib/inc/stm32f10x_dac.h src/os_contiki/fwlib/inc/stm32f10x_dbgmcu.h src/os_contiki/fwlib/inc/stm32f10x_dma.h src/os_contiki/fwlib/inc/stm32f10x_exti.h src/os_contiki/fwlib/inc/stm32f10x_flash.h src/os_contiki/fwlib/inc/stm32f10x_fsmc.h src/os_contiki/fwlib/inc/stm32f10x_gpio.h src/os_contiki/fwlib/inc/stm32f10x_i2c.h src/os_contiki/fwlib/inc/stm32f10x_iwdg.h src/os_contiki/fwlib/inc/stm32f10x_pwr.h src/os_contiki/fwlib/inc/stm32f10x_rcc.h src/os_contiki/fwlib/inc/stm32f10x_rtc.h src/os_contiki/fwlib/inc/stm32f10x_sdio.h src/os_contiki/fwlib/inc/stm32f10x_spi.h src/os_contiki/fwlib/inc/stm32f10x_tim.h src/os_contiki/fwlib/inc/stm32f10x_usart.h src/os_contiki/fwlib/inc/stm32f10x_wwdg.h src/os_contiki/fwlib/src/misc.c src/os_contiki/fwlib/src/stm32f10x_adc.c src/os_contiki/fwlib/src/stm32f10x_bkp.c src/os_contiki/fwlib/src/stm32f10x_can.c src/os_contiki/fwlib/src/stm32f10x_cec.c src/os_contiki/fwlib/src/stm32f10x_crc.c src/os_contiki/fwlib/src/stm32f10x_dac.c src/os_contiki/fwlib/src/stm32f10x_dbgmcu.c src/os_contiki/fwlib/src/stm32f10x_dma.c src/os_contiki/fwlib/src/stm32f10x_exti.c src/os_contiki/fwlib/src/stm32f10x_flash.c src/os_contiki/fwlib/src/stm32f10x_fsmc.c src/os_contiki/fwlib/src/stm32f10x_gpio.c src/os_contiki/fwlib/src/stm32f10x_i2c.c src/os_contiki/fwlib/src/stm32f10x_iwdg.c src/os_contiki/fwlib/src/stm32f10x_pwr.c src/os_contiki/fwlib/src/stm32f10x_rcc.c src/os_contiki/fwlib/src/stm32f10x_rtc.c src/os_contiki/fwlib/src/stm32f10x_sdio.c src/os_contiki/fwlib/src/stm32f10x_spi.c src/os_contiki/fwlib/src/stm32f10x_tim.c src/os_contiki/fwlib/src/stm32f10x_usart.c src/os_contiki/fwlib/src/stm32f10x_wwdg.c src/os_contiki/fwlib/src/system_stm32f10x.c src/os_contiki/keil_clean.bat src/os_contiki/stm32_contiki.uvgui.USER src/os_contiki/stm32_contiki.uvopt src/os_contiki/stm32_contiki.uvproj